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

ADN Club => ObjectARX => Тема начата: alsh от 25-10-2018, 12:30:46

Название: Связать текст и точку
Отправлено: alsh от 25-10-2018, 12:30:46
Добрый день!
Может быть уже поднимался этот вопрос, не нашел.
Есть в чертеже точки и возле них текст. Как связать точку с текстом, который скорее всего самый
ближний, но может и нет. Все тексты в одном слое  :(
текст    AcDbText , точки  AcGePoint3d
спасибо заранее
Название: Re: Связать текст и точку
Отправлено: Александр Ривилис от 25-10-2018, 12:39:00
alsh,
Приветствую на форуме!
Эта задача разбивается на две:
1. Как найти пары текст-точка?
2. Как и связать?
Первая задача решается или запросом у пользователя указания пары текст-точка или нахождением ближайших пар. Всё зависит от постановки задачи, которой я не вижу.
Вторая задача решается одним из следующих способов:
1. Объединение текст-точка в блок
2. Объединение текст-точка в группу
3. Создание постоянных реакторов текст-точка
В зависимости от цели один из способов может быть более предпочтительный. Способ 3. не рекомендую использовать, так как судя по всему пока нет достаточной квалификации и понимания всех сложностей и нюансов.

Всё ли понятно в том что я написал? Если есть вопросы - прошу.
Название: Re: Связать текст и точку
Отправлено: Александр Ривилис от 25-10-2018, 12:40:55
текст    AcDbText , точки  AcGePoint3d
Кстати, не AcGePoint3d (т.к. это не примитив и не может содержаться в чертеже, а геометрическая точка в пространстве), а AcDbPoint - примитив точки.
Название: Re: Связать текст и точку
Отправлено: alsh от 25-10-2018, 13:16:45
alsh,
Первая задача решается или запросом у пользователя указания пары текст-точка или нахождением ближайших пар. Всё зависит от постановки задачи, которой я не вижу.
Точек много, запрос не подходит, надо найти пары. Чтобы найти ближайшую надо сравнивать растояния до точки со всеми текстами, а их сотни.
Есть ли еще способ найти пару кроме ближайшего расстояния?
Название: Re: Связать текст и точку
Отправлено: Александр Ривилис от 25-10-2018, 13:21:16
Есть ли еще способ найти пару кроме ближайшего расстояния?
Нет. Конечно если они сразу не имеют никакой связи (например через расширенные данные).
Чтобы найти ближайшую надо сравнивать растояния до точки со всеми текстами, а их сотни.
Ну и что? Это сравнение для сотен и даже тысяч текстов и точек будет составлять доли секунды. Ну в крайнем случае несколько секунд. Кроме того эти алгоритмы можно оптимизировать (например, R-деревья).
Название: Re: Связать текст и точку
Отправлено: alsh от 25-10-2018, 14:13:15
А для AcDbText есть только  Alignment point и position к которым можно привязаться?  Нет геометрического прямоугольника по размерам текста?
Название: Re: Связать текст и точку
Отправлено: Александр Ривилис от 25-10-2018, 14:28:04
А для AcDbText есть только  Alignment point и position к которым можно привязаться?  Нет геометрического прямоугольника по размерам текста?
Есть. AcDbEntity::getGeomExtents. Логичнее всего привязываться к центру этого прямоугольника.
Название: Re: Связать текст и точку
Отправлено: alsh от 25-10-2018, 14:57:22
Спасибо Александр
Название: Re: Связать текст и точку
Отправлено: Александр Ривилис от 25-10-2018, 14:58:28
Спасибо Александр
Пожалуйста! Если будут еще вопросы - с удовольствием отвечу.