Простое создание наклонного сегмента трубопровода с отводами
Продолжу свою работу по созданию наклонного сегмента трубопровода. Мы рассмотрели уже следующие темы, связанные с этой задачей: вычисление длины наклонного сегмента, создание трубы, соединение всех труб в одну систему, а также собственную реализацию программного создание отводов.
Явное размещение фитингов было довольно тяжелой и кропотливой задачей. Для ее решения необходимо было выполнить следующие шаги:
- Проанализировать сгенерированную модель для определения семейства с подходящими фитингами (отводами)
- Понять, как задать угол и диаметр отвода
- Создать и разместить в проекте новый фитинг с помощью метода NewFamilyInstance
- Правильно определить направление отвода, так чтобы один конец отвода присоединялся к исходной к трубе, а второй, к наклонному сегменту
- Укоротить исходную трубу, так как фитинг тоже имеет некий размер
- Соединить отводы и трубы в одну систему
Этот способ работает, хотя и заставил меня попотеть, прежде чем я добился нужного результата.
Но, как заметил Тате (Tate) в своем комментарии к статье соединение всех труб в одну систему, почти все можно было достичь с помощью метода NewElbowFitting, тем самым избавиться от множества хлопот. Этот метод выбирает, создает, подстраивает, размещает и соединяет отводы с трубами автоматически, исходя из настроек Revit.
Мы уже затрагивали тему создания фитингов ранее, но я до сих пор так и не использовал метод NewElbowFitting в своих примерах.
Размещение отводов с помощью метода NewElbowFitting
Я не стал здесь приводить свой предыдущий код по вычислению длины сегмента и размещению трубы. Вы его найдете в предыдущих статьях. Последний раз я обсуждал это в статье соединение всех труб в одну систему без создания отводов.
Для использования метода NewElbowFitting я просто заменил код, где соединял трубы друг с другом. В результате получилось следующее:
- pipe = doc.Create.NewPipe( q0, q1,
- pipe_type_standard );
- pipe.get_Parameter( bipDiameter )
- .Set( diameter );
- // Соединим наклонный сегмент
- // с исходными трубами
- //
- //Util.Connect( q0, pipes[0], pipe );
- //Util.Connect( q1, pipe, pipes[1] );
- // NewElbowFitting выполняет следующие действия:
- // - Подбирает подходящее семейство и типоразмер (отводы)
- // - Размещает в правильном положении отвод
- // - соединяет все элементы трубопровода в одну систему
- Connector con0 = Util.GetConnectorClosestTo(
- pipes[0], q0 );
- Connector con = Util.GetConnectorClosestTo(
- pipe, q0 );
- doc.Create.NewElbowFitting( con0, con );
- Connector con1 = Util.GetConnectorClosestTo(
- pipes[1], q1 );
- con = Util.GetConnectorClosestTo(
- pipe, q1 );
- doc.Create.NewElbowFitting( con, con1 );
Как вы видите, весь тот сложный код, который я использовал для ручного создания, подбора и размещения отводов больше не требуется.
В результате модель выглядит точно также, как и в предыдущей статье, но код стал значительно проще и понятней.
Исходный код команды по созданию наклонного сегмента с отводами с помощью метода NewElbowFitting находится в примерах The Building Coder на GitHub в команде под названием CmdRollingOffset. Версия команды, которая обсуждалась в статье, находится в release 2014.0.106.5
Таким образом, исходная задача полностью решена. Однако остался еще вопрос, как создавать трубы с помощью нового метода Pipe.Create вместо Document.Create.NewPipe.
Обсуждение: http://adn-cis.org/forum/index.php?topic=476
Опубликовано 23.01.2014