8н
Расчёт фурнитуры, профилей, погонажа, кромки и площади заготовок всей модели, или выделенного (подсвеченная фурнитура включительно).
Скрытый текст
Код:
/*
Расчёт фурнитуры, профилей, погонажа, кромки и площади заготовок
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();
}
[свернуть]