Здесь размещены выжимки JS кода для определённых операций в скриптах Базис-Мебельщика.
Размещено с целью помочь тем, кто начал изучать скрипты, а так же посмотреть какое-либо решение.
Собрано из различных источников, на авторство не претендую.
Количество деталей в моделе
Model.forEachPanel(_ => {
_.Selected = getOwner(_) && _.MaterialWidth == 0;
})
function getOwner(_) {
return _.Owner instanceof TFurnAsm ? false : _.Owner != Model ? getOwner(_.Owner) : true;
}
alert (Model.SelectionCount);
Выделение только родительского блока
for (var i=0; i < Model.Count; i++) {
if(Model.Objects[i].List){
Model.Objects[i].Selected = true;
}
}
Имя блока/сборки в позицию
/*
1. Удаляем все позиции
2. Выделяем необходимые блоки
3. Запускаем скрипт
*/
Undo.RecursiveChanging(Model);
for(var i = 0; i < Model.SelectionCount; i++) {
var obj = Model.Selections[i];
obj.ArtPos = obj.Name;
}
Выделяем блоки
for (var i=0; i < Model.Count; i++) {
if ((Model.Objects[i] instanceof TFurnBlock) && (Model.Objects[i].DatumMode == 0)) {
Model.Objects[i].Selected = true;
}
}
Выделяем фрагменты
for (var i=0; i < Model.Count; i++) {
if ((Model.Objects[i] instanceof TFurnBlock) && (Model.Objects[i].DatumMode > 0) && (Model.Objects[i].DatumMode < 7)) {
Model.Objects[i].Selected = true;
}
}
Выделяем схемы крепежа
for (var i=0; i < Model.Count; i++) {
if ((Model.Objects[i] instanceof TFurnBlock) && (Model.Objects[i].DatumMode > 6)){
Model.Objects[i].Selected = true;
}
}
Выделяем сборки (покупное изделие)
for (var i=0; i < Model.Count; i++) {
if (Model.Objects[i] instanceof TFurnAsm) {
Model.Objects[i].Selected = true;
}
}
Выделяем комплекты сборок (комплекты покупных изделий)
for (var i=0; i < Model.Count; i++) {
if (Model.Objects[i] instanceof TAsmKit) {
Model.Objects[i].Selected = true;
}
}
Выделяем полуфабрикат
for (var i=0; i < Model.Count; i++) {
if (Model.Objects[i] instanceof TDraftBlock) {
Model.Objects[i].Selected = true;
}
}
Выделяем параметрический блок
for (var i=0; i < Model.Count; i++) { if (Model.Objects[i] instanceof TParamBlock3D) {
Model.Objects[i].Selected = true;
}
}
Создание доп. параметров в панели свойств
MakeProperties();
Action.Continue();
function MakeProperties() {
var Prop = Action.Properties;
var combo = Prop.NewCombo('Тип шкафа', 'Тип1\nТип2');
var params = Prop.NewGroup('Параметры');
combo.OnChange = function () {
if (combo.ItemIndex == 0) {
params.Clear();
Door = params.NewGroup('Дверь');
// ещё какой-то код
}
else if (combo.ItemIndex == 1) {
params.Clear();
Box = params.NewGroup('ящик');
// ещё какой-то код
}
}
}
Удаление доп. параметров в панели свойств
MakeProperties();
Action.Continue();
function MakeProperties() {
Prop = Action.Properties;
combo = Prop.NewCombo('Тип шкафа', 'Тип1\nТип2');
Prop.OnChange = function () {
if (combo.ItemIndex == 0) {
if (typeof Box !== 'undefined') {
Box.DeleteSelf();
}
if (typeof Door !== 'undefined') {
Door.DeleteSelf();
}
Door = Prop.NewGroup('Дверь');
// ещё какой-то код
}
else if (combo.ItemIndex == 1) {
if (typeof Box !== 'undefined') {
Box.DeleteSelf();
}
if (typeof Door !== 'undefined') {
Door.DeleteSelf();
}
Box = Prop.NewGroup('ящик');
// ещё какой-то код
}
}
}
Запуск сторонне приложения из скрипта
c4d = NewCOMObject('ADSK_3DMAX_64_2020.Application');
Пример открытия картинки
require('child_process').spawn('cmd', [ '@echo off', '/c', 'C:\\1.png' ])
Пример открытия картинки
require('child_process').spawn('explorer', ['C:\\1.png']);
Изменение габарит у эластичной секции
obj = Model.Selected;
obj.ElasticResize({ x: 500, y: 500, z: 500 });
obj.Build();