ADN Club => Revit API => Тема начата: asia от 09-09-2020, 13:21:48
Название: Получить id элемента, для которого назначен TextNote
Отправлено: asia от 09-09-2020, 13:21:48
Добрый день. Задача такова, что в документе рядом с размерными линиями находятся TextNote, в которых записаны данные. Некоторые из этих TextNote содержат ключевые слова. Мне нужно найти id текстНоутов, которые содержат эти определенные слова, а так же id размерностей, которым они назначены (расположение текстНоута допустимо на расстоянии 2*offset текста).
Подскажите пожалуйста, как проверить расположение TextNote относительно размерной линии, чтобы определить его принадлежность? Можно ли реализовать такую проверку с помощью пересечений и если можно, каким образом? (https://i.postimg.cc/n9JcDbL2/ex.png) (https://postimg.cc/n9JcDbL2)
Название: Re: Получить id элемента, для которого назначен TextNote
Отправлено: Александр Ривилис от 09-09-2020, 13:31:19
А если сравнить взаимное расположение BoundingBox для них?
Название: Re: Получить id элемента, для которого назначен TextNote
Отправлено: asia от 09-09-2020, 13:42:17
Это как? Получается, нужно найти ближайшую размерную линию.
Название: Re: Получить id элемента, для которого назначен TextNote
Отправлено: Александр Ривилис от 09-09-2020, 13:45:56
Получается, нужно найти ближайшую размерную линию.
Именно. А как иначе? Нужно найти все размерные линии и все TextNote. Для них для всех найти BoundingBox. Ну и дальше взаимное расположение для каждой пары размерной линии и TextNote.
Название: Re: Получить id элемента, для которого назначен TextNote
Отправлено: asia от 09-09-2020, 14:01:07
А если парное соответствие отсутствует? Размерных линий 1000, а TextNotes может быть 10. Тогда нужно для каждого TextNote найти BoundingBox и проверить, попадает ли туда размерная линия (или находится от него на допустимом расстоянии)?
Название: Re: Получить id элемента, для которого назначен TextNote
Отправлено: Александр Ривилис от 09-09-2020, 14:06:45
asia, Упрощенно алгоритм: 1. Для каждого TextNote находим его BoundingBox и заносим в массив aTextNoteBoxes 2. Для каждой размерной линии находим её BoundingBox и заносим в массив aDimBoxes 3. Цикл по всем элементам aTextNoteBoxs и нахождение для каждого из них ближайшего из aDimBoxes, оценка расстояния (наверное имеет смысл работать с центром каждого BoundingBox)
Название: Re: Получить id элемента, для которого назначен TextNote
Отправлено: asia от 09-09-2020, 14:11:02
Спасибо вам за совет. Буду разбираться.
Название: Re: Получить id элемента, для которого назначен TextNote
Отправлено: Александр Ривилис от 09-09-2020, 14:32:24
asia, Если размеров и TextNotes может быть очень много, то рекомендую использовать RTree.