Dynamo — скрипт для работы со сваями

Когда изучал Python — написал скрипт для облегчения работы с буронабивными сваями. Делает следующее:

  • Маркирует связи порядковыми номерами в зависимости от положения на плане (слева снизу вправо вверх)
  • Формирует текст перечисления номеров типов для спецификации (вида «1, 3-7, 8, 10-15»)
  • Определяет и выводит в спецификацию абсолютные отметки верха и низа сваи.

Всё руки не доходили оформить  выложить, но теперь готово. Скачать файлы скрипта, семейства и спецификацию: яндекс, гугл.
Подробнее — ниже.

Схема работы скрипта (клик для увеличения):

 

 

  1. Получаю список всех элементов категории «Несущие колонны», фильтрую только нужные сваи
  2. Получаю из «Базовой точки проекта» её смещение относительно «Точки съемки»
  3. Создаю список значений с длиной, равной количеству свай
  4. Хитрым образом получаю список точек верха сваи
  5. Получаю координату Z верха сваи, складываю с отметкой базовой точки проекта — получаю абсолютные отметки верха сваи. Вписываю в параметр семейства «КЖ_ВысотаБазовогоУровня». В семействе вычисляется параметр «КЖ_ОтметкаНиза».
  6. Получаю из точки верха сваи координаты X и Y и сортирую список по этим параметрам
  7. Нумерую сваи по порядку, начиная с 1, в сортированном по координатам списке. Номер указывается в параметр «КЖ_НомерСваи».
  8. Получаю из сваи номера их типов. Номер указывается в «Свойствах типа» сваи, в параметр «КЖ_НомерТипаСваи».
  9. Python-нод «Numbering» формирует текст с перечислением номеров данного типа, текст записывается в параметр «Комментарий».
Код Numbering:
a = [int(i) for i in IN[0]] b = [int(i) for i in IN[1]] types = max(a) typesText = [» for i in range(types)] result = [] r=» a = [‘?’] + a + [‘?’] b = [‘%’] + b + [‘%’] for t in range (1,types+1): for i in range (len(a)-1): if a[i] == t: if (a[i]==a[i-1]) and (a[i]!=a[i+1]): r = r + ‘-‘ + str(b[i]) if (a[i]!=a[i-1]): r = r + ‘, ‘ + str(b[i]) r = r[2:] typesText[t-1] = r r=» for i in range(len(a)): for t in range(types): if a[i]==(t+1): result.append(typesText[t]) OUT = result

Код MyFilter:

elem = IN[0]
param = IN[1]
filter = IN[2]
flist = []

for i in range(len(elem)):
if param[i] == filter:
flist.append(elem[i])
OUT = flist

 

Все параметры выводятся в спецификацию:
Аналитическая модель сваи доступна для передачи в расчетные программы. Марка выводит «Номер сваи» и «Номер типа сваи», ставить удобнее через «Маркировать всё».
Ну и видео:

 

 

Такие дела.