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

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

Меню

Маркет


беспроводные выключатели для мебели
Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 08:56  
БАЗИС 10 - Скрипты
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565

Сказал(а) спасибо: 303
Поблагодарили 451 раз(а) в 189 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 08:56
Рейтинг: ()

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


Последний раз редактировалось systland; 26.12.2017 в 11:52..
Просмотров: 425242
Ответить с цитированием Вверх
Старый 21.05.2018, 15:11   #151
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится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, 16:00   #152
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

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

Код:
mat = [];
if (mat.indexOf(MaterialName) == -1) {mat.push(MaterialName)}
wizardpnz вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Ovsyanicov (21.05.2018)
Старый 22.05.2018, 14:28   #153
Kartuz
Пользователь
 
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 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, 16:25   #154
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится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, 11:58   #155
Kartuz
Пользователь
 
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 0
Kartuz пока не определено
По умолчанию

Letos, Скрипт работает, спасибо. Но только если полки поставить из фрагмента, то не двигается ничего, даже пустая полка
Kartuz вне форума   Ответить с цитированием Вверх
Старый 24.05.2018, 12:20   #156
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится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, 14:16   #157
Kartuz
Пользователь
 
Регистрация: 16.12.2014
Сообщений: 32
Сказал(а) спасибо: 25
Поблагодарили 5 раз(а) в 5 сообщениях
Вес репутации: 0
Kartuz пока не определено
По умолчанию

Letos, работает скрипт только при простом построениии. Если использовать фрагмент, в котором полка с крепежём, то не работает. Фрагмент делается с использованием эластичности.
Kartuz вне форума   Ответить с цитированием Вверх
Старый 24.05.2018, 17:07   #158
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

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

Letos, Всё отлично работает !! Спасибо, выручаете в очередной раз. В моей работе этот скрипт экономит кучу времени !!!!
Kartuz вне форума   Ответить с цитированием Вверх
Старый 25.05.2018, 08:36   #160
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

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


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

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

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-Мебельщик 10 systland Базис-мебельщик 10 1264 13.03.2024 22:48
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7 2230 29.11.2019 10:37
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


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


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL

џндекс.Њетрика