Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: руководителей мебельных предприятий, конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к мебельному бизнесу. Программы для конструирования мебели, дизайна, для комплексной автоматизации мебельного предприятия. Мебельная литература и обучающие пособия.
 
 
Внимание! Если Вы владелец или управляющий мебельным бизнесом и Ваша деятельность ведется в одной из стран ТС - тогда специально для Вас на нашем форуме создан закрытый раздел Предприниматель. Вступайте в группу Предприниматель и общайтесь, ищите партнеров и реализуйте совместные взаимовыгодные проекты. Подать заявку на вступление в группу Предприниматель можно в личном кабинете.

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты


Реклама на портале PROMEBELclub
шкаф-купе со скидкой по акции
Реклама на портале PROMEBELclub

искусственный камень Мебель196. Мебельный интернет-магазин в Екатеринбурге.
Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 09:56  
БАЗИС 10 - Скрипты
systland
Модератор
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 561

Сказал(а) спасибо: 291
Поблагодарили 427 раз(а) в 179 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 09:56
Рейтинг: (3 голосов - 4.00 средняя оценка)

Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 10 в этой теме.
__________________


Последний раз редактировалось systland; 26.12.2017 в 11:52..
Просмотров: 56267
Ответить с цитированием Вверх
Старый 21.05.2018, 16:11   #151
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 237
Сказал(а) спасибо: 49
Поблагодарили 414 раз(а) в 159 сообщениях
Вес репутации: 124
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
как получить список материалов используемых на сцене?
Нашёл вот это. А проще можно, это долго?

IndexOf))) в массиве
Вот решение быстрее:
Код:
function forEachInList(list, func){
    if (!func)
        return;
    for (var i = 0; i < list.Count; i++){
        var obj = list.Objects[i];
        func(obj);
        if (obj.List){
            forEachInList(obj.AsList(), func);
        }
    }
}

var matList = [];
forEachInList(Model, (obj)=>{
    var matName;
    if (obj.Material){
        matName = obj.Material.MaterialName;
        if (matList.indexOf(matName) < 0){
            system.log(matName);
        }
    }
    var panel = obj.AsPanel;
    if (panel){
        for (var i = 0; i < panel.Plastics.Count; i ++){
            var p = panel.Plastics.Plastics[i];
            matName = p.Material;
            if (matList.indexOf(matName) < 0){
                system.log(matName);
            }
        }
        for (var i = 0; i < panel.Butts.Count; i ++){
            var b = panel.Butts.Butts[i];
            matName = b.Material;
            if (matList.indexOf(matName) < 0){
                system.log(matName);
            }
        }
    }
})
Есть одно но: проверял и Ваш и свой скрипт на большой модели - Ваш скрипт выдаёт больше имён материалов, хотя часть этих имен не показываются в окне замены материала. Не знаю, с чем это связано.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (21.05.2018)
Старый 21.05.2018, 17:00   #152
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 102
Сказал(а) спасибо: 50
Поблагодарили 39 раз(а) в 16 сообщениях
Вес репутации: 109
wizardpnz на пути к лучшему
По умолчанию

сделал по старинке в переборе всех элементов сцены собираю массив названий материалов

Код:
mat = [];
if (mat.indexOf(MaterialName) == -1) {mat.push(MaterialName)}
wizardpnz вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (21.05.2018)
Старый 22.05.2018, 15:28   #153
Kartuz
Новичок
 
Регистрация: 16.12.2014
Сообщений: 25
Сказал(а) спасибо: 16
Поблагодарили 4 раз(а) в 4 сообщениях
Вес репутации: 0
Kartuz пока не определено
По умолчанию

Есть у меня скриптик. Он расставляет поровну полки по высоте. Но если полки присажены, то крепёж остаётся на месте, а полки расставляются. Нужно сделать , чтобы с крепежём перемещалось.

Скрытый текст

MinY = 1e10; // низ нижней полки
MaxY = -1e10; // верх верхней полки
SumThickness = 0; // суммарна толщина панелей
Count = 0; // количество панелей

for (k = 0; k < Model.SelectionCount; k++) {
obj = Model.Selections[k];
if (obj.Thickness > 1) {
if (obj.GabMin.y < MinY)
MinY = obj.GabMin.y;
if (obj.GabMax.y > MaxY)
MaxY = obj.GabMax.y;
SumThickness += obj.Thickness;
Count = Count + 1;
}
}

// нужное расстояние между полками
SpaceBetween = Math.floor((MaxY - MinY - SumThickness) / (Count - 1));

CurY = MinY;
for (k = 0; k < Model.SelectionCount; k++) {
obj = Model.Selections[k];
if (obj.Thickness > 1) {
Undo.Changing(obj);
obj.Translate(0, CurY - obj.GabMin.y, 0);
CurY = CurY + SpaceBetween + obj.Thickness;
}
}
[свернуть]
Kartuz вне форума   Ответить с цитированием Вверх
Старый 22.05.2018, 17:25   #154
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 237
Сказал(а) спасибо: 49
Поблагодарили 414 раз(а) в 159 сообщениях
Вес репутации: 124
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от Kartuz Посмотреть сообщение
Есть у меня скриптик. Он расставляет поровну полки по высоте. Но если полки присажены, то крепёж остаётся на месте, а полки расставляются. Нужно сделать , чтобы с крепежём перемещалось.
Добавил перемещение крепежа с комментариями. Кстати, функция поиска крепежа, соединённого с панелью, может не найти крепеж, поставленный неправильно.

Код

Код:
MinY = 1e10; // низ нижней полки
MaxY = -1e10; // верх верхней полки
SumThickness = 0; // суммарна толщина панелей
Count = 0; // количество панелей

/**
 * Поиск объекта крепежа (блок схемы крепежа, например), в который вложен 
 * текущий крепёж
 * @param {Object3} obj текущий крепеж
 */
function FindFastenerOwner(obj){
    var result = obj;
    var owner = obj.Owner;
    while (owner){
        //проверка по типу монтирования - если он существуети не равен типу "секция"
        if ((owner.DatumMode > DatumMode.None) && (owner.DatumMode != DatumMode.Box)){
            result = owner;
        }
        owner = owner.Owner;
    }
    return result;
}

for (k = 0; k < Model.SelectionCount; k++) {
    obj = Model.Selections[k];
    if (obj.Thickness > 1) {
        if (obj.GabMin.y < MinY)
            MinY = obj.GabMin.y;
        if (obj.GabMax.y > MaxY)
            MaxY = obj.GabMax.y;
        SumThickness += obj.Thickness;
        Count = Count + 1;
    }
}

// нужное расстояние между полками
var SpaceBetween = Math.floor((MaxY - MinY - SumThickness) / (Count - 1));

var CurY = MinY;
for (var k = 0; k < Model.SelectionCount; k++) {
    var obj = Model.Selections[k];
    if (obj.Thickness > 1) {
        Undo.Changing(obj);
        var yShift = CurY - obj.GabMin.y;
        // Весь крепёж, соединенный с панелью 
        // достаём до сдвига панели      
        var fasts = obj.FindConnectedFasteners();
        obj.Translate(0, yShift, 0);
        // список уже сдвинутого крепежа
        var translatedFasts = [];
        for (var i = 0; i < fasts.length; i++) {
            // ищем "самый корневой" крепёж
            var curFast = FindFastenerOwner(fasts[i]);
            // Если текущего крепежа нет в списке сдвинутых
            if (translatedFasts.indexOf(curFast) < 0){
                Undo.Changing(curFast);
                // сдвигаем крепёж
                curFast.Translate(0, yShift, 0);
                // и записываем в список сдвинутых
                translatedFasts.push(curFast);
            }
        }
        CurY = CurY + SpaceBetween + obj.Thickness;
    }
}
[свернуть]
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Kartuz (22.05.2018)
Старый 24.05.2018, 12:58   #155
Kartuz
Новичок
 
Регистрация: 16.12.2014
Сообщений: 25
Сказал(а) спасибо: 16
Поблагодарили 4 раз(а) в 4 сообщениях
Вес репутации: 0
Kartuz пока не определено
По умолчанию

Letos, Скрипт работает, спасибо. Но только если полки поставить из фрагмента, то не двигается ничего, даже пустая полка
Kartuz вне форума   Ответить с цитированием Вверх
Старый 24.05.2018, 13:20   #156
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 237
Сказал(а) спасибо: 49
Поблагодарили 414 раз(а) в 159 сообщениях
Вес репутации: 124
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от Kartuz Посмотреть сообщение
Letos, Скрипт работает, спасибо. Но только если полки поставить из фрагмента, то не двигается ничего, даже пустая полка
Предполагаю, что это из-за этого куска кода:
Код:
for (k = 0; k < Model.SelectionCount; k++) {
    obj = Model.Selections[k];
    if (obj.Thickness > 1) {
//И далее по коду
Здесь перебираются все выделенные объекты и если толщина объекта больше единицы, то выполняются действия по расчету, сдвигу и т.д.
А в вашем случае, предполагаю, вы выделяете блок, в котором находится панель, скрипт проверяет его (блока) толщину, и ничего не делает дальше. Попробуйте выделить именно панели и запустить скрипт - изменится ли что-нибудь? А я пока подумаю над наиболее грамотным решением)
Letos вне форума   Ответить с цитированием Вверх
Старый 24.05.2018, 15:16   #157
Kartuz
Новичок
 
Регистрация: 16.12.2014
Сообщений: 25
Сказал(а) спасибо: 16
Поблагодарили 4 раз(а) в 4 сообщениях
Вес репутации: 0
Kartuz пока не определено
По умолчанию

Letos, работает скрипт только при простом построениии. Если использовать фрагмент, в котором полка с крепежём, то не работает. Фрагмент делается с использованием эластичности.
Kartuz вне форума   Ответить с цитированием Вверх
Старый 24.05.2018, 18:07   #158
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 237
Сказал(а) спасибо: 49
Поблагодарили 414 раз(а) в 159 сообщениях
Вес репутации: 124
Letos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человекLetos - очень-очень хороший человек
По умолчанию

Цитата:
Сообщение от Kartuz Посмотреть сообщение
Но только если полки поставить из фрагмента, то не двигается ничего, даже пустая полка
Подправил скрипт (во вложении). Должен сработать. Если все равно не получится - пришлите простенькую модель, на которой скрипт некорректно отрабатывает, для проверки.
Вложения
Тип файла: rar test.rar (1.3 Кб, 6 просмотров)
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Kartuz (25.05.2018), volunka (24.05.2018)
Старый 25.05.2018, 00:34   #159
Kartuz
Новичок
 
Регистрация: 16.12.2014
Сообщений: 25
Сказал(а) спасибо: 16
Поблагодарили 4 раз(а) в 4 сообщениях
Вес репутации: 0
Kartuz пока не определено
По умолчанию

Letos, Всё отлично работает !! Спасибо, выручаете в очередной раз. В моей работе этот скрипт экономит кучу времени !!!!
Kartuz вне форума   Ответить с цитированием Вверх
Старый 25.05.2018, 09:36   #160
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 102
Сказал(а) спасибо: 50
Поблагодарили 39 раз(а) в 16 сообщениях
Вес репутации: 109
wizardpnz на пути к лучшему
По умолчанию

Как узнать заказ, наименование, артикул из параметров изделия


Код:
Action.Control.Article.Code
Action.Control.Article.Name
Action.Control.Article.OrderName

Последний раз редактировалось wizardpnz; 25.05.2018 в 10:13.
wizardpnz вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Letos (25.05.2018)
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-Мебельщик 10 systland Базис-мебельщик 10.0 718 15.12.2018 17:07
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7.0 2228 12.09.2016 19:13
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


Текущее время: 11:57. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
© 2007-2018 PROMEBEL