суббота, 31 октября 2015 г.

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


Все параметры выводятся в спецификацию:

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

Ну и видео:



Такие дела.

9 комментариев:

  1. Интересный способ! У себя на предприятии я сделал немного по-другому. С помощью аддона на С# я нумерую параметр "Маркировка" в сваях, затем в спецификацию с помощью Динамо закидываю "1, 3-7, 8, 10-15". Может, ваш способ лучше, надо потестить.

    ОтветитьУдалить
    Ответы
    1. Ну, у меня это делается одной кнопкой. На C# будет симпатичнее, но я пока не знаю его настолько, чтобы все три операции сделать.

      Удалить
    2. Пока на вскидку нумерация не очень удобна, все-таки лучше писать отдельный нумератор с плюшками.

      Удалить
    3. Да, мне тоже не очень нравится нумерация (все-таки на скорую руку набросал). Если будет идея - пишите.

      Удалить
    4. Мне б такие скорые руки:) Моя воплощенная идея примерно следующая: приложение нумерует слева направо, сверху вниз выделенные сваи (на всякий заложил возможность нумеровать любые категории). В окне приложения я задаю способ нумерации, т.е. 1.1 или 5-1, приращение идет по последнему символу. Последнее действие - приложение показывает последний присвоенный номер, чтоб проектировщик знал, на чем остановился. Как-то так.

      Удалить
    5. Минус моего метода - ручное заполнение и ввод "неродного" параметра - "Строка спецификации"

      Удалить
  2. Спасибо!
    Отличный способ.
    Только почему свая - это несущая колонна?
    Всегда делал фундаментом несущей конструкции.

    ОтветитьУдалить
    Ответы
    1. В колонне есть аналитическая модель, и её можно куда-нибудь передать.
      По крайней мере, в теории :)

      Удалить
  3. Здравствуйте! Кто знает каким образом можно сделать условные обозначения свай. Делал внутри семейства сваи элементами узлов. но их (условные обозначения не видно) когда режим скрытая линия, или сваи внутри ростверка.

    ОтветитьУдалить