Проблемы с сохранением прокси графики в custom entity на основе AcDbMLeader

Автор Тема: Проблемы с сохранением прокси графики в custom entity на основе AcDbMLeader  (Прочитано 6917 раз)

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

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

  • ADN OPEN
  • Сообщений: 6
  • Карма: 0
Помогите, пожалуйста, решить проблему:

не работает код процедуры прорисовки графики пользовательского объетка subWorldDraw

Код - C++ [Выбрать]
  1. Adesk::Boolean MLeader::subWorldDraw (AcGiWorldDraw *mode) {
  2.         assertReadEnabled();
  3.        
  4.         AcDbMLeader *pML = new AcDbMLeader;
  5.         AcDbMText *pMT = new AcDbMText;
  6.  
  7.         //pML->setDatabaseDefaults(); //если включить - ошибка и вылет автокада
  8.  
  9.         pML->setContentType(AcDbMLeaderStyle::ContentType::kMTextContent);
  10.         pMT->setTextHeight(3.5);
  11.         pML->setMText(pMT);
  12.  
  13.         int ind;
  14.         pML->addLeaderLine(m_ptBase, ind);
  15.         pML->setTextAttachmentType(AcDbMLeaderStyle::TextAttachmentType::kAttachmentBottomLine, AcDbMLeaderStyle::LeaderDirectionType::kLeftLeader);
  16.         pML->setDoglegDirection(ind, AcGeVector3d(1, 0, 0));
  17.  
  18.         pML->setFirstVertex(ind, m_ptBase);
  19.         pML->setLastVertex(ind, m_ptRack);
  20.  
  21.  
  22.         //настройка стрелки
  23.         pML->setArrowSize(ind, 2.0); //масштаб стрелки
  24.         AcDbObjectId ArrowID;
  25.         AcDmUtil::getArrowId(L"_DOTSMALL", ArrowID);
  26.  
  27.         pML->setArrowSymbolId(ind, ArrowID); // в момент когда mode->regenType() == kAcGiSaveWorldDrawForProxy - ошибка и вылет и программы
  28.  
  29.         pML->close();
  30.         mode->geometry().draw(pML->drawable());
  31.  
  32.         delete pML;    
  33.         return Adesk::kTrue;
  34.  
  35. }

проблема в строчке:
pML->setArrowSymbolId(ind, ArrowID);
 в момент когда mode->regenType() == kAcGiSaveWorldDrawForProxy - ошибка из вылет и программы

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
проблема в строчке:
pML->setArrowSymbolId(ind, ArrowID);
 в момент когда mode->regenType() == kAcGiSaveWorldDrawForProxy - ошибка из вылет и программы
Думаю, что проблема не только в этом. AcDbMLeader - это достаточно сложный объект, который в значительной степени зависит от рабочей базы данных. Поэтому такие вещи, как создание/удаление его внутри метода subWorldDraw ни к чему хорошему не приведут.
Я бы рекомендовал создавать этот объект AcDbMLeader в конструкторе MLeader, модифицировать его в методах у которых assertWriteEnabled(); а в subWorldDraw просто выводить готовый примитив.
Или вообще заменить это всё на вывод более простой графики без использования AcDbMLeader.
Кстати, а зачем pML->close(); для объекта, который не в базе данных???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

по поводу: pML->close(); - теперь понимаю, что незачем, я новичок в arx и программировании acad в целом.