Получить id элемента, для которого назначен TextNote

Автор Тема: Получить id элемента, для которого назначен TextNote  (Прочитано 1478 раз)

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

Оффлайн asiaАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Добрый день.
Задача такова, что в документе рядом с размерными линиями находятся TextNote, в которых записаны данные. Некоторые из этих TextNote содержат ключевые слова. Мне нужно найти id текстНоутов, которые содержат эти определенные слова, а так же id размерностей, которым они назначены (расположение текстНоута допустимо на расстоянии 2*offset текста).

Код - C# [Выбрать]
  1. foreach (var textN in textNoteList)
  2. {
  3.     TextNote tn = (TextNote)textN;
  4.     if (checkText(tn.Text))
  5.     {
  6.          textNotes.Add(string.Format("textnote id: {0}, text: {1}\n", tn.Id.IntegerValue, tn.Text));
  7.     }
  8. }
  9.  
Я нахожу все TextNote  в документе и среди них выбираю те, которые содержат ключевые слова.
Код - C# [Выбрать]
  1. checkText()
это проверка на содержание ключевых слов.

Подскажите пожалуйста, как проверить расположение TextNote относительно размерной линии, чтобы определить его принадлежность? Можно ли реализовать такую проверку с помощью пересечений и если можно, каким образом?


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А если сравнить взаимное расположение BoundingBox для них?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн asiaАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Это как?
Получается, нужно найти ближайшую размерную линию.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Получается, нужно найти ближайшую размерную линию.
Именно. А как иначе? Нужно найти все размерные линии и все TextNote. Для них для всех найти BoundingBox. Ну и дальше взаимное расположение для каждой пары размерной линии и TextNote.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн asiaАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
А если парное соответствие отсутствует? Размерных линий 1000, а TextNotes может быть 10. Тогда нужно для каждого TextNote найти BoundingBox и проверить, попадает ли туда размерная линия (или находится от него на допустимом расстоянии)?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
asia,
Упрощенно алгоритм:
1. Для каждого TextNote находим его BoundingBox и заносим в массив aTextNoteBoxes
2. Для каждой размерной линии находим её BoundingBox и заносим в массив aDimBoxes
3. Цикл по всем элементам aTextNoteBoxs и нахождение для каждого из них ближайшего из aDimBoxes, оценка расстояния (наверное имеет смысл работать с центром каждого BoundingBox)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн asiaАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Спасибо вам за совет. Буду разбираться.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
asia,
Если размеров и TextNotes может быть очень много, то рекомендую использовать RTree.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение