07.04.2021, 23:21
|
#125
|
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
|
Цитата:
Сообщение от Mullerr
Здравствуйте. Есть стандартный скрипт в 8БМ "Облицовка кромкой". Может кто-нибудь его изменить чтобы он работал не на всех панелях, а только на выделенных и облицовывал "все кромки/видимые/открытые". Скрипт прилагается.
|
Скрытый текст
Код:
Materials = [];
PanelByMaterial = [];
var PanelChanged = 0;
var Selected = Model.SelectionCount;
Model.forEachPanel(
function(Obj) {
if (Selected && !Obj.Selected)
return
var MtName = Obj.MaterialName;
var Index = Materials.indexOf(MtName);
if (Index < 0) {
Index = Materials.push(MtName) - 1;
var Panels = [];
PanelByMaterial.push(Panels);
}
PanelByMaterial[Index].push(Obj);
});
len = Materials.length;
system.log(len);
for (var i = 0; i < len; ++i) {
var Gr = Action.Properties.NewCombo(Materials[i], 'На видимые\nНа все\nУдалить');
Gr.NewButt('Кромка');
BtnPanSel = Gr.NewSelector('Панелей', PanelByMaterial[i].length + ' шт');
BtnPanSel.Tag = i;
BtnPanSel.OnClick = function(Sel) {
UnSelectAll();
var Panels = PanelByMaterial[Sel.Tag];
var len = Panels.length;
for (var j = 0; j < len; ++j) {
Panels[j].Selected = true;
}
};
BtnMake = Gr.NewButton('Применить');
BtnMake.Tag = i;
BtnMake.OnClick = function(Sel) {
UnSelectAll();
var Panels = PanelByMaterial[Sel.Tag];
var Gr = Action.Properties.Items[Sel.Tag];
CurAction = Gr.ItemIndex;
var Butt = Gr.Items[0];
plen = Panels.length;
system.log('make butts: ' + plen);
for (var j = 0; j < plen; ++j) {
if (MakeButts(Panels[j], CurAction, Butt))
PanelChanged++;
}
Action.Hint = 'отредактировано панелей: ' + PanelChanged;
Action.Commit();
};
}
NewButtonInput("Закончить").OnChange = function() { Action.Finish() };
NewButtonInput("Снять выделение").OnChange = function() { UnSelectAll() };
function MakeButts(Panel, Action, Butt) {
var res = false;
system.log('Panel: ' + Panel.Name);
if (Action < 2 ) {
if (Panel.Butts.Count === 0) {
for (var i = 0; i < Panel.Contour.Count; i++) {
if ((Action == 1) || (Panel.IsButtVisible(i, 1))) { //проверяет соприкасеется ли кромящиеся сторана(i) с другой пнелью на растояние 1мм
system.log('Editing panel butt ' + i);
StartEditing(Panel);
Panel.AddButt(Butt, i);
res = true;
}
}
}
}
if (Action == 2) {
if (Panel.Butts.Count > 0) {
StartEditing(Panel);
Panel.Butts.Clear();
res = true;
}
}
return res;
}
Action.Continue();
[свернуть]
|
|
|