Не отображается как Proxy

Автор Тема: Не отображается как Proxy  (Прочитано 7538 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Не отображается как Proxy
« : 06-05-2015, 14:58:55 »
Добрый день.

Есть свой примитив, который отображается как полилиния, причем некоторые сегменты мне нужно отобразить
другим цветом.

Код - C++ [Выбрать]
  1. Adesk::Boolean AdskContainerEntity::subWorldDraw (AcGiWorldDraw *mode)
  2. {
  3.         assertReadEnabled () ;
  4.         if (m_pPolyline)
  5.         {
  6.                 int end = m_pPolyline->numVerts() - 1;
  7.                 for (int i = 0; i < end; i++)
  8.                 {
  9.                         // Здесь устанавливаю нужный мне цвет для сегмента
  10.                         //...
  11.                         mode->rawGeometry()->pline(*m_pPolyline, i, 1);
  12.                 }
  13.         }
  14.         return (AcDbEntity::subWorldDraw (mode)) ;
  15. }
  16.  

Все работает как нужно, но проблема в том, что когда примитив отображается как Proxy (не загружено приложение), то он невидим.

Если же рисовать полилинию целиком

Код - C++ [Выбрать]
  1. Adesk::Boolean AdskContainerEntity::subWorldDraw (AcGiWorldDraw *mode)
  2. {
  3.         assertReadEnabled () ;
  4.         if (m_pPolyline)
  5.         {
  6.                 mode->geometry().pline(*m_pPolyline);
  7.         }
  8.         return (AcDbEntity::subWorldDraw (mode)) ;
  9. }
  10.  

Здесь как Proxy отображается правильно.

В чем может быть проблема?

P.S. Сразу скажу, что пробовал рисовать свою полилинию последовательными кусками при  помощи
AcGiGeometry::polyline и AcGiGeometry::circularArc в зависимости от типа участка, здесь все нормально, но
я от него отказался, так как возникают другие проблемы (криво срабатывает привязка к нормали)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не отображается как Proxy
« Ответ #1 : 06-05-2015, 15:52:57 »
Попробуй переопределить метод AcDbEntity::saveAs
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Не отображается как Proxy
« Ответ #2 : 06-05-2015, 16:07:13 »
Попробуй переопределить метод AcDbEntity::saveAs

Сейчас у меня так

Код - C++ [Выбрать]
  1. void AdskContainerEntity::saveAs(AcGiWorldDraw* mode, AcDb::SaveType st)
  2. {
  3.         if (m_pPolyline) m_pPolyline->saveAs(mode, st);
  4.         if (mode->regenType() == kAcGiSaveWorldDrawForProxy)    this->subWorldDraw(mode);
  5. }

Что здесь можно изменить?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не отображается как Proxy
« Ответ #3 : 06-05-2015, 16:18:17 »
Это заменить:
Код - C++ [Выбрать]
  1. if (m_pPolyline) m_pPolyline->saveAs(mode, st);
на другой вариант сохранения:
Код - C++ [Выбрать]
  1. if (AcDb::kR13Save==st) {
  2. // Раскладываем полилинию на сегменты и вызываем в зависимости от типа:
  3. // mode->geometry().circularArc(...)
  4. // или
  5. // mode->geometry().polyline(...)
  6. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Gennadiy 06-05-2015, 16:40:39

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

  • ADN Club
  • **
  • Сообщений: 81
  • Карма: 0
Re: Не отображается как Proxy
« Ответ #4 : 06-05-2015, 16:38:47 »
Точно, как я сразу не сообразил!
Мне в Proxy вовсе и не нужно чтобы отображалось разными цветами, поэтому сделал так

Код - C++ [Выбрать]
  1. Adesk::Boolean AdskContainerEntity::subWorldDraw (AcGiWorldDraw *mode)
  2. {
  3.         assertReadEnabled();
  4.         if (m_pPolyline)
  5.         {
  6.                 if (mode->regenType() != kAcGiSaveWorldDrawForProxy)
  7.                 {
  8.                         int end = m_pPolyline->numVerts() - 1;
  9.                         for (int i = 0; i < end; i++)
  10.                         {
  11.                                 // Здесь устанавливаю нужный мне цвет для сегмента
  12.                                 //...
  13.                                 mode->geometry().pline(*m_pPolyline, i, 1);
  14.                         }
  15.                 }
  16.                 else    mode->geometry().pline(*m_pPolyline);
  17.         }
  18.         return (AcDbEntity::subWorldDraw (mode)) ;
  19. }

Спасибо за подсказку.