3d-b Мебель и аксессуары


Примеры JS кода для БМ скриптов

Здесь размещены выжимки 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();