Свой "Routing"

Автор Тема: Свой "Routing"  (Прочитано 1647 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Свой "Routing"
« : 23-01-2018, 15:02:36 »
доброго всем дня. Уже более года назад пробовал изучать эту тему, ничего не нашел. Сейчас приходится опять возвращаться к этой теме. Буду рад любым, даже своеобразным советам.

Суть вопроса: Revit позволяет настроить RoutingPreference у труб (duct, pipe). Далее пользователь рисует этими трубами чертеж и вставляются нужные фиттинги.
Чтобы хотелось получить:
1) задавать более расширенные RoutingPreference - например "Elbow == 90gr" и "Elbow != 90gr" (для них использовать разные типы), и т.п.
2) отловить момент когда Revit вставляет/меняет фиттинги, и проанализировав что он захотел мне вставить/подменить либо поменять параметры, либо вовсе изменить тип. (тут вопрос отчасти решается через Updater, но хотелось бы более ближе подобраться к механизму "routing" в Revit и делать анализ именно в момент когда Revit только подумал что надо что то вставить  ;) ).
3) в момент когда Revit хочет вставить такие типы как elbow - он поворачивает фиттинг как ему хочется. Отчасти это понятно - location находится на месте пересечения линий коннекторов. Коннекторы не имеют такие идентификаторы как "in"/"out". Хотелось бы какой то однозначности. то есть имеем 2 коннектора и я точно знаю что от трубы из которой "тяну" должен быть именно первый коннектор, а дальше уже второй. подобная ситуация с tee, cross


В общем пока думаю над мыслью реализовывать свой механизм раутинга. А именно:
1) назначаем свой RoutingPreference
2) выбираем конкретную трубы
3) отслеживая позиции щелчков мыши, высчитываем точки начала и конца труб. (с этим конечно пока вопрос но думаю это можно сделать)
4) соединяем точки выбранной трубой
5) на месте стыка вставляем подходящие фиттинги, определенные в нашем RoutingPreference  (п.1)


Уход от стандартного "routing" это большое безобразие: даже если получится реализовать адекватный механизм рисования, у нас не получится исключить стандартный "routing" при модификации каких либо элементов в ране - например 2 трубы соединенных elbow. Сдвигая одну из них в сторону revit будет заново ставить elbow по своему алгоритму.


P.S.: Задача нетривиальная. Надеюсь более менее понятно описал суть вопроса. Прошу высказывать любые мнения, даже странная идея может привести к адекватному решению.

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Re: Свой "Routing"
« Ответ #1 : 23-01-2018, 17:42:55 »
может более просто будет понять - хотелось бы реализовать "routing" (процесс рисования целиком) примерно так, как он сделан в FabricationParts, но с использованием rfa...

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Свой "Routing"
« Ответ #2 : 24-01-2018, 09:12:58 »
Алексей, добрый день. Интересную вы тему подняли. Но боюсь что никто этим раньше не интересовался. Было бы здорово, если бы вы делились с нами своими наработками по этой теме, я же в свою очередь постараюсь помочь в решении каких-то конкретных проблем, возникающих при реализации.

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Re: Свой "Routing"
« Ответ #3 : 25-01-2018, 13:59:04 »
Есть мысли сделать то что я хочу, используя более простой подход, но кажется излишним.

1) создать самые простые family которые могли без проблем участвовать в стандартном routing (без правил).
2) сделать команду для своего раутинга в начале которой будем выбирать тип дакта, кодом устанавливать в стандартный routingPreferences простые типы family и отсылать его на выбор элемента для рисования пользователю ("PostRequestForElementTypePlacement(...)").
3) реализовать Updater который будет отлавливать установку этих фиттингов, удалять их и устанавливать на их место то что мне нужно исходя из моих настроек, модифицирую так же подсоединяемые дакты.

Такой подход кажется немного не правильным. Но в то же время простым. Получается что мы используем "плюшки" Revit для нашего routing, но в тоже время производим много лишних операций. Так же навешивать довольно много действий внутри Updater не кажется хорошей идеей.  Как вы думаете?

Хотелось бы так же отловить момент конца "Routing", чтобы удалить выставленные ранее routingPreferences. И по окончанию routing возможно произвести с вставленными элементами еще манипуляции. Буду признателен если наведете на мысль как это сделать.