Как получить все полилинии у которых есть мультивыноски?

Автор Тема: Как получить все полилинии у которых есть мультивыноски?  (Прочитано 5713 раз)

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

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
А точно нужно пересечение, а не одна крайняя точка на стрелке выноски?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Подскажите тогда по Intersect. Как узнать есть ли он между ними
Я бы решал задачу совсем другим способом:
1. Нашел бы крайние точки всех MLEADER
2. Для каждой из полилиний нашел бы из полученных в п. 1) точек ближайшую и оценив расстояние принял бы решение принадлежит этот MLEADER этой полилинии.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
А точно нужно пересечение, а не одна крайняя точка на стрелке выноски?

По идее пересечение площади полилинии с точной на носике у стрелки

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
А точно нужно пересечение, а не одна крайняя точка на стрелке выноски?

По идее пересечение площади полилинии с точной на носике у стрелки
А как узнать крайние точки?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
По идее пересечение площади полилинии с точной на носике у стрелки
Глупость.
А как узнать крайние точки?
А посмотреть свойства класса MLeader?

Код - C# [Выбрать]
  1. Point3d p = pML.GetFirstVertex(0);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
По идее пересечение площади полилинии с точной на носике у стрелки
Глупость.
А как узнать крайние точки?
А посмотреть свойства класса MLeader?

Код - C# [Выбрать]
  1. Point3d p = pML.GetFirstVertex(0);

Получаю ближаюшую координату, а дальше не врублюсь
Код - C# [Выбрать]
  1. var m = ((MLeader)mldrs[i]).GetFirstVertex(0);
  2. var p = (Polyline)pols[i];
  3. var ttt0 =  p.GetClosestPointTo(m, false);

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Получаю ближаюшую координату, а дальше не врублюсь
Код - C# [Выбрать]

    var m = ((MLeader)mldrs).GetFirstVertex(0);
    var p = (Polyline)pols;
    var ttt0 =  p.GetClosestPointTo(m, false);
А дальше оцениваешь расстояние от m до ttt0:
Код - C# [Выбрать]
  1. if (m.DistanceTo(ttt0) < delta)
  2. {
  3.   // MLeader указывает на эту полилинию
  4. }

P.S.: Точки принято обозначать p, а не m.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Между прочим мультивыноска называется МУЛЬТИ потому что у нее вовсе не одна стрелка, а сколько угодно. Может быть даже 0! Поэтому сначала неплохо бы проверить сколько их там и брать точки у же со стрелок:
Код - C# [Выбрать]
  1.       ArrayList arr = ml.GetLeaderIndexes();
  2.       if (arr.Count == 0) return; //можно нарисовать MLeader вообще без стрелок!
  3. ....
  4.       ArrayList arr1 = ml.GetLeaderLineIndexes((int)arr[i]);
  5.       pickPoint = ml.GetFirstVertex((int)arr1[0]);

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

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Получаю ближаюшую координату, а дальше не врублюсь
Код - C# [Выбрать]

    var m = ((MLeader)mldrs).GetFirstVertex(0);
    var p = (Polyline)pols;
    var ttt0 =  p.GetClosestPointTo(m, false);
А дальше оцениваешь расстояние от m до ttt0:
Код - C# [Выбрать]
  1. if (m.DistanceTo(ttt0) < delta)
  2. {
  3.   // MLeader указывает на эту полилинию
  4. }

P.S.: Точки принято обозначать p, а не m.

А как сделать наоборот. Самая близкая полилиния к стрелке мультивыноске?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А как сделать наоборот. Самая близкая полилиния к стрелке мультивыноске?
Точно так же, только для каждой мультивыноски перебираешь все полилинии, находишь ближайшую точку на полилинии к выноске, получаешь расстояние между точками и там где расстояние минимальное и < delta - это и будет нужная полилиния.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение