Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.
Новшества Базис Мебельщик версии 11:
..... 6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....
Новшества Базис Мебельщик версии 2021:
16. Отладчик скриптов.
Новшества Базис Мебельщик версии 2024:
5.«Использовать новый движок скриптов (в бета-тесте)» - Node.js v20.2.0
VISUAL CODE
Код:
Примеры скриптов из видео
Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js
Любые вопросы по любому системному и мебельному софту, любые конвертации, настройки и т.д.>сюда< (кроме озвученных в мануалах, инструкциях и темах форума) ...
Последний раз редактировалось AlexBolton; 02.05.2024 в 11:30..
Подскажите пожалуйста. У меня имеется блок двустворчатой секции. Я скриптом на фасадах пытаюсь нарисовать пазы. на левой двери рисуется как нужно. А вот с правой проблемы. Сам контур для паза рисуется справа от фасада. Видимо фасад был создан отзеркаливанием левой створки. И я не пойму где у этой правой створки ноль или признак что фасад зеркальный.
Как такового, признака зеркальной панели нет, но её ЛСК (ноль), действительно, не там, где кажется.
А как перевести ЛСК в левый нижний угол? и чтобы не нарушалась структура самой секции.
Цитата:
Сообщение от Ovsyanicov
надо сопровождать кодом, потому что ответ находится в нём.
код очень большой. и связан в основном с тем что все траектории прописаны в макросах к3-мебель и приходится на лету конвертировать код макроса в код JS.
Как создана секция не знаю. Работаю с готовой сценой.
И ещё вопрос. Возможно ли выполнить проверку попадает присадка на пазы или нет?
А он и не нужен целиком. Для начала, надо видеть участок, в котором создаётся контур паза и что используется в качестве аргументов для функций построения 2D-элементов.
Цитата:
Сообщение от rombler
И ещё вопрос. Возможно ли выполнить проверку попадает присадка на пазы или нет?
Предполагаю, что готового решения нет. Можно перебирать координаты и размеры отверстий и пазов, а потом сопоставлять их.
А он и не нужен целиком. Для начала, надо видеть участок, в котором создаётся контур паза и что используется в качестве аргументов для функций построения 2D-элементов.
PHP код:
Cut = panel.AddCut(String('Ris_'+FA[i]["frw"])) ; //это наименование паза
Traj = Cut.Trajectory;
for (var iteraci = 0; iteraci < FA[i]["traektor"][j].length; iteraci++) {
if (FA[i]["traektor"][j][iteraci]["Tip"] == "line") {
L1 = Traj.AddLine(FA[i]["traektor"][j][iteraci]["nx"], FA[i]["traektor"][j][iteraci]["nz"], FA[i]["traektor"][j][iteraci]["kx"], FA[i]["traektor"][j][iteraci]["kz"]);
} //добавляем все линии из массива
}
Cut.Contour.Load(FileFreza);
Cut.Contour.Move(0, panel.Thickness - FA[i]["glub"][j]);
На вход принимаем массив с координатами линий, глубиной, типом линии, и дальнейшими обработками на подобии эквидистанты.
Координаты рассчитываются исходя из габаритов фасада+лск фасада.
Но т.к эта лск при отзеркаливании перемещается из левого нижнего угла в правый нижний угол то следовательно и траектория паза перемещается за пределы фасада.
Подскажите как мне назначить лск фасада в левом нижнем углу?
Подскажите как мне назначить лск фасада в левом нижнем углу?
Вот такой скрипт переместит начало координат ЛСК выделенной панели в левый нижний угол относительно ГСК:
Код
PHP код:
var panel = Model.Selected.AsPanel;
if (panel){
Undo.Changing(panel);
// GabMin - Минимальная координата в ГСК по всем осям (левый нижний задний угол)
var corner = panel.ToObject(panel.GabMin);
panel.TranslateLCS({
x: corner.x,
y: corner.y,
z: 0
})
panel.Contour.Move(-corner.x, -corner.y);
panel.Build();
}
[свернуть]
Алгоритм перемещения простой (по содержанию):
1. Найти нужную точку в ГСК (в примере это GabMin)
2. Перевести её в ЛСК перемещаемой панели.
3. Панель переместить в нужную точку (z=0 для простоты, ибо для перемещения по оси Z надо ещё анализировать, в какую сторону смещать).
4. Сместить контур и пазы в обратном направлении (здесь смещается только контур для простоты и, судя по вашему описанию, пазы добавляются скриптом, значит панель, скорее всего , без пазов).
5. Перестроить панель
Смотря для каких целей. Текстовый файл без проблем прочитать можно. Вот чтобы "список" получить - файл обрабатывать надо. Вот простой пример, который запрашивает имя файла, считывает его содержимое и создаёт из строки список, используя символ перевода строки в качестве разделителя элементов (то есть, элементы списка будут соответствовать строкам в файле).
PHP код:
var filename = 'Ris.mac'
var textful = system.readTextFile(filename);
textful = textful.replace(/[\r]+/g, '');
var text = textful.split('\n');
var list = [];
for (var i = 1; i < text.length; i++){
list[i-1] = text[i].split('\t');
}
console.log(list);
А уж в зависимости от того, какие данные в файле и какой список, нужно будет выбрать, как создавать список из строк (через split, JSON, регулярные выражения и т.д.).
А этот скрипт будет работать в 10 версии базиса? В 11 версии я получаю массив массивов, а в 10 версии получаю список элементов через запятую.
А этот скрипт будет работать в 10 версии базиса? В 11 версии я получаю массив массивов, а в 10 версии получаю список элементов через запятую.
В лог в 10 и 11 версии выводится разная информация. В 10 версии выводится строка (для этого не-строка приводится к строке методом toString()), а в 11 версии что-то похожее на JSON.stringify, только отформатированное.
Вот пример вывода массива в лог разными способами (default - стандартный базисный):
В общем, сам скрипт работать в 10 и 11 версии будет одинаково, но в лог информация будет выводиться по-разному.
Ага понятно. Думал почему скрипт не работает в 10 версии. грешил на массивы. Теперь разобрался.
panel.UserProperty['VarFas'] = VarFas[0];
panel.UserPropertyVariants['VarFas'] = VarFas.join('\n'); //Эта строка выдавала ошибку.
В 10 версии базиса нет возможности добавить список в пользовательское свойство?
Ага понятно. Думал почему скрипт не работает в 10 версии. грешил на массивы. Теперь разобрался.
panel.UserProperty['VarFas'] = VarFas[0];
panel.UserPropertyVariants['VarFas'] = VarFas.join('\n'); //Эта строка выдавала ошибку.
В 10 версии базиса нет возможности добавить список в пользовательское свойство?
У себя в демке написал и проверил следующий код:
PHP код:
var variants = [123, 321, 'asd'];
var obj = Model.Selected;
obj.UserProperty['prop'] = variants[0];
obj.UserPropertyVariants['prop'] = variants.join('\n');
У меня всё заработало и у выделенного объекта появилось пользовательское свойство и его варианты.
Попробуйте у себя и, если не запустится, пришлите скриншот ошибки в логе редактора скриптов.