Показать сообщение отдельно
Старый 10.02.2021, 16:56   #407
bbb i ko
VIP
 
Регистрация: 04.07.2012
Сообщений: 1,957
Сказал(а) спасибо: 3,992
Поблагодарили 3,546 раз(а) в 1,168 сообщениях
Вес репутации: 1048
bbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспоримаbbb i ko репутация неоспорима
По умолчанию

Интересный вариант нашел расчета нужных параметров для Сметы. Может кому-то окажется полезным.


Суть в следующем: в Смете не доступно многое из функционала скриптов Мебельщика, таким образом невозможно что-то рассчитать в пользовательском параметре. Решение нашлось такое: в Мебельщике расчетное значение записывается в пользовательском свойстве, а в Смете читаем это значение.


Пример: нужно создать операцию "установка стяжки в панель" на стадии упаковки панели.
В Мебельщике вешаем такой скрипт на нужное событие в автозапуске скриптов:


Код:
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];
    }
 }
и вешаем созданную операцию на нужные материалы в базе материалов.
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
bbb i ko вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
maxgmv (11.02.2021), Megabyte (09.02.2022), Ovsyanicov (23.02.2022)