Форум профессиональных мебельщиков 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..
Просмотров: 425284
Ответить с цитированием Вверх
Старый 12.03.2018, 16:57   #111
Sergenald
Новичок
 
Регистрация: 21.09.2017
Сообщений: 19
Сказал(а) спасибо: 15
Поблагодарили 4 раз(а) в 2 сообщениях
Вес репутации: 0
Sergenald пока не определено
По умолчанию

Всем привет!
Скриптом добавляю в блок детали через Owner, затем меняю его видимость на false. Руками сохраняюсь, закрываю.
При открытии файла у всех деталей и блоков видимость на истине, не зависимо что сохранялось.
Как бы так блок скрыть чтобы насовсем?
Sergenald вне форума   Ответить с цитированием Вверх
Старый 12.03.2018, 18:00   #112
Ovsyanicov
Местный
 
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 734
Сказал(а) спасибо: 1,529
Поблагодарили 884 раз(а) в 376 сообщениях
Вес репутации: 402
Ovsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордится
По умолчанию

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

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

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


Цитата:
Сообщение от Letos Посмотреть сообщение
Либо Вы повторяетесь, ибо на подобный вопрос уже был дан ответ ранее
Вопрос да, почти про тоже. Там хоть как-то скрыть надо было. А теперь скрытое должно оставаться скрытым.
И, к сожалению, перебор имён отваливается на телах вращения. Пытался сделать что-то вроде if(Obj.Name){} в надежде что undefine значение будет как false распознано, но всё равно отваливается, скрипт прекращается, блок не скрывается
Sergenald вне форума   Ответить с цитированием Вверх
Старый 13.03.2018, 10:37   #115
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится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, 21:58   #116
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

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

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

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

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

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

как включить фурнитуру в состав блока
Всё оказалось просто - фурнитура ставится не в блок, а потому не поворачивается (по крайней мере у меня так). Самый простой способ исправить - это назначать блок Owner'ом поставленной фурнитуре вручную
Letos вне форума   Ответить с цитированием Вверх
Старый 14.03.2018, 22:26   #118
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 196
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

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

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

Добавлено через 3 минуты
Цитата:
Сообщение от Letos Посмотреть сообщение
Всё оказалось просто - фурнитура ставится не в блок, а потому не поворачивается (по крайней мере у меня так). Самый простой способ исправить - это назначать блок Owner'ом поставленной фурнитуре вручную
это как??
wizardpnz вне форума   Ответить с цитированием Вверх
Старый 14.03.2018, 22:48   #119
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится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
Сообщений: 6
Сказал(а) спасибо: 3
Поблагодарили 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 1264 13.03.2024 22:48
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7 2230 29.11.2019 10:37
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


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


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

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