Получение объектов модели в границах видового экрана на листе

Автор Тема: Получение объектов модели в границах видового экрана на листе  (Прочитано 16290 раз)

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

Оффлайн geosys

  • ADN OPEN
  • Сообщений: 25
  • Карма: 3

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Код - C# [Выбрать]
  1.  // Если видовой экран прямоугольный
  2. if (!psVp.NonRectClipOn)
  3. {
  4.    psVp.GetGripPoints(psVpPnts, new IntegerCollection(), new IntegerCollection());
  5.                                        
  6.     // Вот дальнейшего действия не понял, но с ним работает ((
  7.     Point3d tmp = psVpPnts[2];
  8.     psVpPnts[2] = psVpPnts[1];
  9.     psVpPnts[1] = tmp;
  10. }
Скорее всего, автором этого способа определения граничных точек прямоугольного видового экрана является Augusto Goncalves: https://adndevblog.typepad.com/autocad/2014/11/from-model-space-to-paper-space.html
Новый претендент на первоисточник: https://adndevblog.typepad.com/autocad/2012/04/selecting-model-space-entities-from-paper-space-using-autocad-selection-sets-in-c.html
Обнаружил, что в последних версиях AutoCAD он даёт сбой. Причина проста: добавилась ещё одна ручка у видового экрана - посередине. Сейчас вообще не понимаю: к чему были такие сложности, если эти точки легко высчитываются по положению центра ВЭ и его размерам или с помощью его GeometricExtents?  :-\

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

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

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Думаю, что следует воспользоваться другим перегруженным методом GetGripPoints и там разобраться с точками.
Не-не-не, хватит! Очень капризны и непостоянны эти "гриппоинты".
Код - C# [Выбрать]
  1. // Если видовой экран стандартный прямоугольный
  2. if (!viewport.NonRectClipOn)
  3. {
  4.     Point3d center = viewport.CenterPoint;
  5.     Vector3d
  6.         left = new Vector3d(viewport.Width / 2.0, 0.0, 0.0),
  7.         up = new Vector3d(0.0, viewport.Height / 2.0, 0.0);
  8.  
  9.     psVpPnts.Add(center - left - up);
  10.     psVpPnts.Add(center + left - up);
  11.     psVpPnts.Add(center + left + up);
  12.     psVpPnts.Add(center - left + up);
  13. }
  14.  
Для прямоугольного - однозначно.
А для подрезанного это неактуально - там же геометрия вытаскивается из объекта подрезки.

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

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