Показать сообщение отдельно
Старый 07.04.2021, 23:21   #125
sergio1982
Местный
 
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 480 раз(а) в 147 сообщениях
Вес репутации: 195
sergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царствеsergio1982 - луч света в тёмном царстве
По умолчанию

Цитата:
Сообщение от 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();
[свернуть]
sergio1982 вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Mullerr (12.04.2021), toucaner (09.04.2021)