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

 

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

 

 

Такие дела.