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


Расчёт фурнитуры, профилей, погонажа, кромки и площади заготовок всей модели, или выделенного (подсвеченная фурнитура включительно).

Скрытый текст

Код:
/*
Расчёт фурнитуры, профилей, погонажа, кромки и площади заготовок

http://promebelclub.ru/forum/showthread.php?p=501280#post501280
*/

var Selected = Model.SelectionCount
var string = '';
array = [];
Panels = [];
PanelsSquare = [];
Linears = [];
LinearsLenght = [];
Extrusion = [];
ExtrusionLenght = [];
Edges = [];
EdgesLength = [];
Fastener = [];
FastenerLenght = [];

for (var i = 0; i < Model.Count; ++i) {
    recurse(Model.Objects[i])
};

for (var i = 0; i < array.length; ++i) {
    CheckObj(array[i])
};

function CheckObj(obj) {
    if (!obj)
        return
    var objtype = obj.toString()
    if (obj.AsPanel) {
        MtName = obj.MaterialName.replace("\r", " арт. ");
        Butts = obj.Butts;
        Contour = obj.Contour;
        IsLinear = obj.MaterialWidth > 0 // погонный
        if (IsLinear)
            Index = Linears.indexOf(MtName);
        else
            Index = Panels.indexOf(MtName);
        if (Index < 0 && !IsLinear) {
            Index = Panels.push(MtName) - 1;
            PanelsSquare[Index] = 0;
        } else if (Index < 0 && IsLinear) {
            Index = Linears.push(MtName) - 1;
            LinearsLenght[Index] = 0;
        }
        if (IsLinear)
            LinearsLenght[Index] += (Contour.Width / 1000)
        else
            PanelsSquare[Index] += (Contour.Height * Contour.Width / 1000000);

        for (var i = 0; i < Butts.Count; ++i) {
            Sign = Butts[i].Material.replace("\r", " арт. ");
            Index = Edges.indexOf(Sign);
            if (Index < 0) {
                Index = Edges.push(Sign) - 1;
                EdgesLength[Index] = 0;
            }
            Length = GetButtLength(Butts[i], Contour);
            EdgesLength[Index] += Length;
        }
    } else if (objtype == '[object TFastener]') {
        MtName = obj.Name.replace("\r", " арт. ");
        Index = Fastener.indexOf(MtName);
        if (Index < 0) {
            Index = Fastener.push(MtName) - 1;
            FastenerLenght[Index] = 0;
        }
        FastenerLenght[Index] += 1
    } else if (objtype == '[object TExtrusionBody]') { // профиль
        MtName = obj.MaterialName.replace("\r", " арт. ");
        Contour = obj.Contour;
        Index = Extrusion.indexOf(MtName);
        if (Index < 0) {
            Index = Extrusion.push(MtName) - 1;
            ExtrusionLenght[Index] = 0;
        }
        ExtrusionLenght[Index] += (obj.GSize.z / 1000)
    }
}


if (Selected)
    string += 'ИНФО ТОЛЬКО О ВЫДЕЛЕННЫХ И ПОДСВЕЧЕННЫХ!!!\n\n'

if (Edges.length) {
    string += '\n\n              Кромка (метры):\n\n';
    for (var i = 0; i < Edges.length; ++i) {
        if ((EdgesLength[i] / 1000).toFixed(1) > 0)
            string += Edges[i] + '   =   ' + (EdgesLength[i] / 1000).toFixed(1) + '\n'
    };
}
if (Panels.length) {
    string += '\n\n              Панели (квадратные/метры):\n\n';
    for (var i = 0; i < Panels.length; ++i) {
        if (PanelsSquare[i].toFixed(1) > 0)
            string += Panels[i] + '   =   ' + PanelsSquare[i].toFixed(1) + '\n'
    };
}
if (Linears.length) {
    string += '\n\n              Погонные материалы (метры):\n\n';
    for (var i = 0; i < Linears.length; ++i) {
        if (LinearsLenght[i].toFixed(1) > 0)
            string += Linears[i] + '   =   ' + LinearsLenght[i].toFixed(1) + '\n'
    };
}
if (Extrusion.length) {
    string += '\n\n              Профили (метры):\n\n';
    for (var i = 0; i < Extrusion.length; ++i) {
        if (ExtrusionLenght[i].toFixed(1) > 0)
            string += Extrusion[i] + '   =   ' + ExtrusionLenght[i].toFixed(1) + '\n'
    };
}
if (Fastener.length) {
    string += '\n\n              Фурнитура (штуки):\n\n';
    for (var i = 0; i < Fastener.length; ++i) {
        string += Fastener[i] + '   =   ' + FastenerLenght[i] + '\n'
    };
}

if (!Edges.length && !Panels.length && !Linears.length && !Extrusion.length && !Fastener.length) {
    if (Selected)
        alert('Нет выделенных панелей!')
    else
        alert('Панели не обнаружены!')
} else
    alert(string)




function recurse(obj, sel) {
    if (!obj.List) {
        if (!sel)
            sel = !!((Selected) && (obj.Selected || obj.Highlighted))
        if (Selected && !sel)
            return
        array.push(obj)
    } else {
        var blocksel = !!((Selected) && (obj.Selected || obj.Highlighted))
        for (var i = 0; i < obj.Count; i++) {
            recurse(obj[i], blocksel)
        }
    }
}

function GetButtLength(butt, contour) {
    var index = butt.ElemIndex;
    var elem = contour.Objects[index];
    return elem.ObjLength();
}
[свернуть]

Последний раз редактировалось sergio1982; 14.10.2020 в 21:55.
sergio1982 вне форума   Ответить с цитированием Вверх
13 пользователя(ей) сказали cпасибо: