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

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


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

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

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

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


Последний раз редактировалось systland; 26.12.2017 в 10:52..
Просмотров: 27087
Ответить с цитированием Вверх
Старый 12.03.2018, 15:57   #111
Sergenald
Новичок
 
Регистрация: 21.09.2017
Сообщений: 19
Сказал(а) спасибо: 15
Поблагодарили 4 раз(а) в 2 сообщениях
Вес репутации: 0
Sergenald пока не определено
По умолчанию

Всем привет!
Скриптом добавляю в блок детали через Owner, затем меняю его видимость на false. Руками сохраняюсь, закрываю.
При открытии файла у всех деталей и блоков видимость на истине, не зависимо что сохранялось.
Как бы так блок скрыть чтобы насовсем?
Sergenald вне форума   Ответить с цитированием Вверх
Старый 12.03.2018, 17:00   #112
Ovsyanicov
Местный
 
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 342
Сказал(а) спасибо: 700
Поблагодарили 380 раз(а) в 161 сообщениях
Вес репутации: 192
Ovsyanicov - луч света в тёмном царствеOvsyanicov - луч света в тёмном царствеOvsyanicov - луч света в тёмном царствеOvsyanicov - луч света в тёмном царствеOvsyanicov - луч света в тёмном царствеOvsyanicov - луч света в тёмном царстве
По умолчанию

Цитата:
Сообщение от Sergenald Посмотреть сообщение
Как бы так блок скрыть чтобы насовсем?
Перенести блок в другой слой и скрыть его, если это возможно с помощью скрипта.
Ovsyanicov вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Sergenald (13.03.2018)
Старый 12.03.2018, 17:07   #113
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 164
Сказал(а) спасибо: 36
Поблагодарили 314 раз(а) в 111 сообщениях
Вес репутации: 92
Letos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючек
По умолчанию

Цитата:
Сообщение от Sergenald Посмотреть сообщение
Всем привет!
Скриптом добавляю в блок детали через Owner, затем меняю его видимость на false. Руками сохраняюсь, закрываю.
При открытии файла у всех деталей и блоков видимость на истине, не зависимо что сохранялось.
Как бы так блок скрыть чтобы насовсем?
Если Вы записываете детали в блок, существовавший до запуска скрипта, то перед изменением видимости попробуйте сохранить его старое состояние в истории:
Код:
Undo.Changing(block)
Если же блок создается скриптом, то:
1. Либо Вы повторяетесь, ибо на подобный вопрос уже был дан ответ ранее
2. Либо способ, описанный мной ранее, не работает. Тогда уже придется думать над решением задачи.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Sergenald (13.03.2018)
Старый 13.03.2018, 07:12   #114
Sergenald
Новичок
 
Регистрация: 21.09.2017
Сообщений: 19
Сказал(а) спасибо: 15
Поблагодарили 4 раз(а) в 2 сообщениях
Вес репутации: 0
Sergenald пока не определено
По умолчанию

Цитата:
Сообщение от Ovsyanicov Посмотреть сообщение
Перенести блок в другой слой и скрыть его, если это возможно с помощью скрипта.
Вот про работу со слоями вообще ни какой информации найти не получилось.


Цитата:
Сообщение от Letos Посмотреть сообщение
Либо Вы повторяетесь, ибо на подобный вопрос уже был дан ответ ранее
Вопрос да, почти про тоже. Там хоть как-то скрыть надо было. А теперь скрытое должно оставаться скрытым.
И, к сожалению, перебор имён отваливается на телах вращения. Пытался сделать что-то вроде if(Obj.Name){} в надежде что undefine значение будет как false распознано, но всё равно отваливается, скрипт прекращается, блок не скрывается
Sergenald вне форума   Ответить с цитированием Вверх
Старый 13.03.2018, 09:37   #115
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 164
Сказал(а) спасибо: 36
Поблагодарили 314 раз(а) в 111 сообщениях
Вес репутации: 92
Letos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючек
По умолчанию

Цитата:
Сообщение от Sergenald Посмотреть сообщение
Вот про работу со слоями вообще ни какой информации найти не получилось.
Из полезного могу сказать, что слой - это TLayer3D. И проверка, что объект - это слой, производится так:
Код:
obj instanceof TLayer3D
Цитата:
Сообщение от Sergenald Посмотреть сообщение
И, к сожалению, перебор имён отваливается на телах вращения. Пытался сделать что-то вроде if(Obj.Name){} в надежде что undefine значение будет как false распознано, но всё равно отваливается, скрипт прекращается, блок не скрывается
Поковырялся и, оказывается, еще один косяк скриптов - тело вращения (а возможно, еще какие-то типы 3д-объектов) криво передаются в функции "Model.forEach", но нормально обрабатываются в написанном ручном переборе:

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

Код:
// Variant 1
/**
 * @param {List3D} list
 * @param {(obj: Object3)=>{}} func
 */
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);
        }
    }
}

forEachInList(Model, (obj)=>{    
  console.log(obj.constructor.name);
})

// Variant 2
Model.forEach((obj)=>{    
  console.log(obj.constructor.name);
})
[свернуть]


В первом варианте нормально пишет в лог "TRotationBody" для тела вращения, а во втором случае бросает ошибку "cannot read property 'constructor' of undefined", то есть, не может достать свойство 'constructor' у несуществующего объекта. Если Вам не надо работать с этими объектами, которые приводят к ошибке, то можно просто в начало функции, которая внутри forEach, написать следующее:
Код:
if(!obj)
  return;
А если надо, то в примере выше первый вариант - рекурсивная функция перебора всех объектов в блоке, который передается первым параметром (это может быть не обязательно модель).


Цитата:
Сообщение от Sergenald Посмотреть сообщение
Вопрос да, почти про тоже. Там хоть как-то скрыть надо было. А теперь скрытое должно оставаться скрытым.
С сохранением скрытых объектов тоже поковырялся - как-то непонятно работает сохранение видимости. Как писал товарищ Ovsyanicov, можно записать все в слой и скрыть слой, но через скрипты почему-то не получилось. А изменение видимости отдельных объектов (панелей, блоков и т.д.) почему-то не сохраняется в модель. Вот небольшой пример на основе написанного выше и ранее:

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

Код:
/**
 * @param {List3D} list
 * @param {(obj: Object3)=>{}} func
 */
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);
        }
    }
}
/**Имя блока. Желательно уникальное */
const blockName = 'My_script_block_#_1';
var b = BeginBlock(blockName);
AddVertPanel(0,0,1000,1000,0);
EndBlock();
//Сохраняем блок в модель
Action.Commit();
//Идем по всем объектам модели и ищем наш блок
forEachInList(Model, (obj)=>{
    // Если имена совпадают, то это наш объект.
    // При наличии нескольких объектов с этим именем
    // в переменную b запишется последний найденный
    if (obj.Name === blockName){
        b = obj;
    }
})
Undo.Changing(b);
// Делаем объект невидимым
b.Visible = false;
//Если заданное уникальное имя не нравится, меняем на то,
// которое должно быть.
b.Name = 'Block_1'
[свернуть]


После выполнения скрипта в истории сохраняются две операции: создание блока с панелью(1) и изменение его имени и видимости(2). И если отменять/возвращать эти операции, то все нормально. Но если сохранить и перечитать модель, то изменение видимости уже не присутствует в истории. Мой вывод: получается, что изменение видимости объекта не пишется в файл модели. Исключение составляют слои, да и у них все странно: Если через параметры слоев менять их видимость, то она пишется в историю, а если через свойства модели или скрипт - то не пишется.
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Ovsyanicov (13.03.2018), Sergenald (13.03.2018)
Старый 14.03.2018, 20:58   #116
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 68
Сказал(а) спасибо: 36
Поблагодарили 36 раз(а) в 14 сообщениях
Вес репутации: 98
wizardpnz на пути к лучшему
По умолчанию

делаю стеклостворку для углового шкафчика
Block = BeginBlock("Створка");
ставлю створку
делаю в ней вырез
ставлю стекло
ставлю кляймеры для стекла
EndBlock();

поворачиваю Block.Rotate(AxisY,45);
блок поворачивается но без фурнитуры

как включить фурнитуру в состав блока
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 14.03.2018, 21:17   #117
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 164
Сказал(а) спасибо: 36
Поблагодарили 314 раз(а) в 111 сообщениях
Вес репутации: 92
Letos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючек
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
делаю стеклостворку для углового шкафчика
Block = BeginBlock("Створка");
ставлю створку
делаю в ней вырез
ставлю стекло
ставлю кляймеры для стекла
EndBlock();

поворачиваю Block.Rotate(AxisY,45);
блок поворачивается но без фурнитуры

как включить фурнитуру в состав блока
Всё оказалось просто - фурнитура ставится не в блок, а потому не поворачивается (по крайней мере у меня так). Самый простой способ исправить - это назначать блок Owner'ом поставленной фурнитуре вручную
Letos вне форума   Ответить с цитированием Вверх
Старый 14.03.2018, 21:26   #118
wizardpnz
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 68
Сказал(а) спасибо: 36
Поблагодарили 36 раз(а) в 14 сообщениях
Вес репутации: 98
wizardpnz на пути к лучшему
По умолчанию

Block = BeginBlock("Створка");
между этими командами ставлю панели и фурнитуру
EndBlock();

створка и стекло поворачивается а кляймеры нет

Добавлено через 3 минуты
Цитата:
Сообщение от Letos Посмотреть сообщение
Всё оказалось просто - фурнитура ставится не в блок, а потому не поворачивается (по крайней мере у меня так). Самый простой способ исправить - это назначать блок Owner'ом поставленной фурнитуре вручную
это как??
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 14.03.2018, 21:48   #119
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 164
Сказал(а) спасибо: 36
Поблагодарили 314 раз(а) в 111 сообщениях
Вес репутации: 92
Letos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючекLetos как роза среди колючек
По умолчанию

Цитата:
Сообщение от wizardpnz Посмотреть сообщение
это как??
Точно не знаю как у Вас, но примерно так:
Код:
Block = BeginBlock("Створка");
//какие-то манипуляции внутри блока

//Получаем объект крепежа например так
var furn = prop.Value.Mount(panel1, panel2, x, y, z);
//И та строчка, которая должна помочь:
//Она запихивает объект крепежа внутрь блока
//Это должно быть для каждого объекта крепежа.
furn.Owner = Block;
EndBlock();
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Ovsyanicov (15.03.2018), wizardpnz (14.03.2018)
Старый 05.04.2018, 14:45   #120
partner_servis
Новичок
 
Регистрация: 14.09.2017
Сообщений: 2
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Вес репутации: 0
partner_servis пока не определено
По умолчанию

Добавляю паз скриптом

Код


var Panel = GetPanel();
var NewCuts = Panel.Cuts.Add();
NewCuts.Name = 'Дно LBX';
NewCuts.Sign = 'ДноLBX';
NewCuts.Contour.AddRectangle(0,0,38,8);
NewCuts.Trajectory.AddLine(38,0,38,720);
Panel.Build();
Action.Finish();
[свернуть]


Не могу понять, почему в истории нет записей об изменениях.
partner_servis вне форума   Ответить с цитированием Вверх
Ответ

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

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

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

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

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

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


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


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