Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: enot от 12-02-2020, 14:58:34

Название: Инспектор систем
Отправлено: enot от 12-02-2020, 14:58:34
Есть ли программная возможность добраться до Инспектора инженерных систем?
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 12-02-2020, 15:00:12
Зависит от того, как именно добираться
Название: Re: Инспектор систем
Отправлено: enot от 12-02-2020, 15:03:39
Если вручную выбрать например вент. систему  , то инспектор показывает участки по расходам, определяя главное направление и ветви. До этого режима как то можно добраться?
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 12-02-2020, 17:20:17
Инспектор включить программно не получится, ну, точнее, если только с помощью WinAPI.

Сами данные получить можно. Открывай в SDK MechanicalSystem для вент системы, PipingSystem для трубопроводной и ищи по слову Section, там увидишь свойство SectionsCount, методы GetSectionByIndex / GetSectionByNumber, а также GetCriticalPathSectionNumbers. Собственно получаешь нужные участки, представленные классом MEPSection, в нём, собственно, вся нужная информация по участкам сети.
Название: Re: Инспектор систем
Отправлено: enot от 12-02-2020, 17:22:55
Так я получу только главную ветвь по расчетному направлению (в инспекторе красной линией выделено), но как ветки получить (остальные линии, виделенные синими)
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 12-02-2020, 17:25:18
там все участки есть, не только по critical path
Название: Re: Инспектор систем
Отправлено: enot от 12-02-2020, 17:38:57
То есть все что не относится из SectionsCount к GetCriticalPathSectionNumbers есть ветви?

GetCriticalPathSectionNumbers  прелестен тем что дает самый нагруженный путь именно в направлении потока воздуха. Но как сделать тоже самое для ветвей
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 12-02-2020, 17:43:39
То есть все что не относится из SectionsCount к GetCriticalPathSectionNumbers есть ветви?

Ты мне чуть мозг не сломал.

Получаем секции из диапазона [0, SectionsCount) методом GetSectionByIndex, фильтруем те, у которых Number не входит в перечень, который возвернула GetCriticalPathSectionNumbers - это будут участки вне критического пути.
Название: Re: Инспектор систем
Отправлено: Agens от 12-02-2020, 18:53:32
На картинке 5 Sections, GetCriticalPathSectionNumbers выдаст массив [2, 4, 5] ?

(https://i.postimg.cc/gXj5hZWS/11.png) (https://postimg.cc/gXj5hZWS)
Название: Re: Инспектор систем
Отправлено: enot от 17-02-2020, 10:32:01
SectionsCount

GetCriticalPathSectionNumbers
Не нашел в SDK этого примера
Название: Re: Инспектор систем
Отправлено: enot от 17-02-2020, 10:32:28
---
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 17-02-2020, 11:17:28
На картинке 5 Sections, GetCriticalPathSectionNumbers выдаст массив [2, 4, 5] ?

Ну да, только в реальной модели у тебя будет что-то вроде 57, 119, 123. Насколько я понял, у Revit сквозная нумерация секций по всем системам в проекте, поэтому аккуратно, не путай получение по индексу и номеру секции.

Не нашел в SDK этого примера
А я и не предлагал в примерах искать. Сначала стОит по документации классов/методов пошуршать.
Название: Re: Инспектор систем
Отправлено: Agens от 17-02-2020, 13:09:59
там просто нужно поменять класс, т.к. PipingSystem наследует MEPSystem, а этот метод не будет виден, если не сделать приведение типов. (или DuctSystem)
у меня GetCriticalPathSectionNumbers всегда count=0, даже не знаю почему...
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 17-02-2020, 13:44:51
у меня GetCriticalPathSectionNumbers всегда count=0, даже не знаю почему

Система должна быть собрана предельно аккуратно. В UI если не доступна кнопка инспектора систем, значит и через API GetCriticalPathSectionNumbers не отдаст
(https://i.postimg.cc/QFyrww7v/piping-system.png) (https://postimg.cc/QFyrww7v)
Название: Re: Инспектор систем
Отправлено: enot от 17-02-2020, 14:00:15
Александр Игнатович,
IsWellConnected  - это проверка что нет не подключенных элементов?
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 17-02-2020, 14:03:57
Нет.

Собственно, это как раз свойство, по которому понятно, рассчитывается ли система или нет.

Я вообще проверяю это так:
Код - C# [Выбрать]
  1. pipingSystem.IsWellConnected && !pipingSystem.IsMultipleNetwork

Насчёт not IsMultipleNetwork не знаю, может и не надо, перестраховываюсь
Название: Re: Инспектор систем
Отправлено: enot от 25-02-2020, 12:46:03
Код - C# [Выбрать]
  1. bool isMain =MEPSection.IsMain(MEPSectionFittingId)

для всех fittingId в любом MEPSection  у меня isMain = true

В чем причина?

Название: Re: Инспектор систем
Отправлено: Agens от 02-03-2020, 15:41:02
Есть ли способ от MEPSection получить соседние участки? или только "танцы с бубном"?
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 02-03-2020, 16:57:49
для всех fittingId в любом MEPSection  у меня isMain = true

Вангую - у тебя в системе нет тройников.

Что значит IsMain читал?
Цитировать
Return Value
True if the type of fitting in this section is main False if the type of fitting in this section is branch

Набросал по-быстрому скрипт для исследования системы. Система у меня трубопроводная, с тройниками, как со врезками работает - сам попробуешь. Результат, в общем-то ожидаемый, IsMain возвращает False только для тройников, причем в одной секции - это True, в другой - False. Например разрез 1 со стороны тройника - ветка, IsMain в этой MEPSection вернул False.

(https://i.postimg.cc/GHJw0FYY/section.png) (https://postimg.cc/GHJw0FYY)

На соседних 2 разрезах - как и ожидается, вернул true.
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 02-03-2020, 17:01:22
Есть ли способ от MEPSection получить соседние участки? или только "танцы с бубном"?

Только на критическом пути, к сожалению. Хотя в принципе, ничего сложного самому обойти систему, там, где равные размеры труб/воздуховода, величины самого потока и его скорости, трение и шероховатость - это будет один сегмент.
Название: Re: Инспектор систем
Отправлено: Agens от 02-03-2020, 17:21:56
Что значит IsMain читал?
А вот можно русский перевод?

Только на критическом пути, к сожалению.
А на критическом как? В какую сторону кодить?

Набросал по-быстрому скрипт для исследования системы.
И где скрип?

Система у меня трубопроводная, с тройниками, как со врезками работает - сам попробуешь.
Вот во врезках то и самый "затык"...
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 02-03-2020, 17:30:22
А вот можно русский перевод?

так выше ж описал. По определению разреза системы (равные рамеры, поток, скорость, шероховатость), тройник в будет граничным элементом MEPSection. Если секция со стороны ветки - IsMain вернёт False, иначе - True.

А на критическом как? В какую сторону кодить?

так там же возвращаются номера секций в нужном порядке
Название: Re: Инспектор систем
Отправлено: Agens от 02-03-2020, 18:42:30
true - среда не меняет направление движения, false - меняет...
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 02-03-2020, 18:50:16
true - среда не меняет направление движения, false - меняет...

Сам придумал?
Название: Re: Инспектор систем
Отправлено: Agens от 02-03-2020, 21:19:36
на не критичном участке так получается...
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 09:47:57
true у меня как на критическом пути так и на ветках. По идее, должно выдавать true только на критическом пути
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 09:51:20
Вангую - у тебя в системе нет тройников.
Так и есть. Соединение через врезки. Видимо,  в них дело...
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 03-03-2020, 09:58:11
По идее, должно выдавать true только на критическом пути

Это ты почему так решил?
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 10:15:31
Это ты почему так решил?
Не правильно выразился

Возьмем тройник. Он может принадлежать секции на критическом пути (IsMain=true), и секции на ветви (isMain = true)  => для остальных же фитингов этой секции должно возвращаться IsMain=false
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 03-03-2020, 10:21:48
Возьмем тройник. Он может принадлежать секции на критическом пути (IsMain=true), и секции на ветви (isMain = true)  => для остальных же фитингов этой секции должно возвращаться IsMain=false

Опять же, с чего это ты так решил? Зачем ты приплетаешь сюда критический путь?
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 10:33:27
Разве IsMain не означает отношение к критическому пути?
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 03-03-2020, 10:34:59
В документации по этому методу есть хотя бы слово о критическом пути?
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 10:37:27
Цитировать
Return Value
True if the type of fitting in this section is main False if the type of fitting in this section is branch

Цитировать
False if the type of fitting in this section is branch
- ветви системы.

Цитировать
True if the type of fitting in this section is main
- как я понимаю, самое нагруженное направление системы, в ревите определяемый через GetCriticalPath

если что то не так понимаю, поправьте




Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 03-03-2020, 10:39:27
Почитай ответы в теме выше.
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 10:46:55
Так, почитал...
true - возвращает только для тройника если он стоит на проходе для данной секции, false -  если стоит на ответвлении для данной секции (или для любого другого фитинга) ?

или скорее так:

true - это ствол
false - это ответвление и проход (сейчас картинку нарисую)



Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 03-03-2020, 10:52:42
Почти. False может быть только для тройника, если разрез на его ответвлении.
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 10:55:08
Так , не? (стрелками указано направление потока)

Картинка №1
(https://i.ibb.co/mHGh6x9/IsMain.png) (https://ibb.co/brPNzfs)
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 03-03-2020, 10:59:38
Нет. На отводе всегда false, на основном проходе всегда true
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 11:02:56
?
Картинка №2
(https://i.ibb.co/mSmbjN0/IsMain2.png) (https://ibb.co/1b37gzM)
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 03-03-2020, 11:04:14
Вроде да
Название: Re: Инспектор систем
Отправлено: enot от 03-03-2020, 11:09:15
По моему мнению, все таки логичнее была бы первая картинка №1 где стволовой участок - IsMain=true, а ветви на проход и ответвление  - IsMain = false.

Но, судя по всему , истина другая)
Спасибо за пояснения.
Название: Re: Инспектор систем
Отправлено: Agens от 03-03-2020, 11:15:48
запутали еще больше ) но тему, вроде, добили :)

на подаче и обратке, у тройника по "оси" всегда true, а вот на "отводе" false, со врезкой по-другому, со стороны врезки true....

в отоплении вообще критические участки подачи и обратки могу быть разными...
Название: Re: Инспектор систем
Отправлено: Agens от 05-03-2020, 20:32:10
чтобы обойти сеть трубопроводов нужно граф юзать?
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 06-03-2020, 09:36:16
А что, есть варианты?

Пример можешь, например тут у Джереми глянуть https://thebuildingcoder.typepad.com/blog/2013/02/simple-mep-system-traversal.html
Название: Re: Инспектор систем
Отправлено: Agens от 06-03-2020, 12:28:03
Спасибо, вариант - бинарное дерево...  как частный случай... хотя врезка в коробку для вентиляции может быть из более 2 коннекторов...
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 06-03-2020, 12:35:55
Тут всё сильно от задачи зависит, что считать узлом в графе. Если элементы, то врезки и тройники сломают бинарную логику. Реализовывал, наверное, с десяток вариантов. Где-то узлами были коннекторы, где-то элементы, где-то вообще только сантехнические приборы + тройники.
Название: Re: Инспектор систем
Отправлено: Agens от 08-03-2020, 16:02:08
в врезками сложно работать, соседние разрезы можно получить только через одно место...
начинаю искать по расходу, расход одинаковый...

Пример можешь, например тут у Джереми глянуть https://thebuildingcoder.typepad.com/blog/2013/02/simple-mep-system-traversal.html
Уф. этот пример слишком легкий для графов...
Название: Re: Инспектор систем
Отправлено: Agens от 14-03-2020, 17:29:47
помогите разбить трубу с 3-мя врезками и 5-тью участками. Недели две не могу придумать достойный алгоритм.
допустим из 5 connector-ов, по одному мы входим, остается 4 (3 OUT, и один IN), участок от IN до врезки (их два), не поддается ни как...
участок 3
(https://i.postimg.cc/3WSW5xbP/17.png) (https://postimg.cc/3WSW5xbP)
Название: Re: Инспектор систем
Отправлено: Александр Игнатович от 22-03-2020, 13:42:10
Посмотри свойство ConnectorType. На концах трубы будет ConnectorType.End, на врезках будет ConnectorType.Curve, дальше можно спроецировать Connector.Origin на Location, понять порядок расположения врезок на трубе. Потом по свойствам Direction и Flow уже понимать, к каким разрезам системы какие участки относятся, поизучай в RevitLookup
Название: Re: Инспектор систем
Отправлено: enot от 06-08-2020, 10:25:49
.