Интересный вариант нашел расчета нужных параметров для Сметы. Может кому-то окажется полезным.
Суть в следующем: в Смете не доступно многое из функционала скриптов Мебельщика, таким образом невозможно что-то рассчитать в пользовательском параметре. Решение нашлось такое: в Мебельщике расчетное значение записывается в пользовательском свойстве, а в Смете читаем это значение.
Пример: нужно создать операцию "установка стяжки в панель" на стадии упаковки панели.
В Мебельщике вешаем такой скрипт на нужное событие в автозапуске скриптов:
Код:
function CheckHole(hole, fast, panel){
var holeCenter = fast.ToGlobal({
x: hole.Position.x + hole.Direction.x * (hole.Depth / 2),
y: hole.Position.y + hole.Direction.y * (hole.Depth / 2),
z: hole.Position.z + hole.Direction.z * (hole.Depth / 2),
})
holeCenter = panel.ToObject(holeCenter);
return (holeCenter.x > panel.GMin.x) && (holeCenter.x < panel.GMax.x) &&
(holeCenter.y > panel.GMin.y) && (holeCenter.y < panel.GMax.y) &&
(holeCenter.z > panel.GMin.z) && (holeCenter.z < panel.GMax.z);
}
Model.forEachPanel(function (Panel) {
Result = 0;
var fasts = Panel.FindConnectedFasteners();
for (var i = 0; i < fasts.length; i++) {
var fast = fasts[i];
if (
(fast.Name.includes("SE017")) ||
(fast.Name.includes("SE018")) ||
(fast.Name.includes("SE013")) ||
(fast.Name.includes("SE01PB")) ||
(fast.Name.includes("SE01РN")) ||
(fast.Name.includes("SE01РМ")) ||
(fast.Name.includes("VB никель")) ||
(fast.Name.includes("Стяжка Rastex")) ||
(fast.Name.includes("MESAN 007616"))) {
var holes = fast.Holes;
if (holes && holes.Count > 0) {
for (var j = 0; j < holes.Count; j++) {
var hole = holes[j];
if (CheckHole(hole, fast, Panel) &&
(hole.Diameter == 15 || hole.Diameter == 20)){
Result +=1;
break;
}
}
}
}
}
if (Result !=0){
Panel.UserProperty['Количество стяжек'] = Result;
}
else {
Panel.UserProperty['Количество стяжек'] = null;
}
}
);
Создаем в Смете нужную операцию, например "Установка стяжки", параметром с модели определяем пользовательский параметр такого вида:
Код:
NP_Prop = Panel.UserPropCount;
for (i=0;i<NP_Prop;i++){
if (Panel.UserPropertyName[i] == 'Количество стяжек'){
Result = Panel.UserProperty[i];
}
}
и вешаем созданную операцию на нужные материалы в базе материалов.