AcDbViewport не работает

Автор Тема: AcDbViewport не работает  (Прочитано 9709 раз)

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
AcDbViewport не работает
« : 20-08-2023, 05:10:52 »
Приветствую всех.
Столкнулся с проблемой.
Генерируем листы на которых создаем AcDbViewport для просмотра кусков чертежей.
Нужно установить режим Realistic. В результате получается какая-то ерунда.
Если посмотреть то в свойствах указано что режим Realistic.
Приходится руками менять на любой другой режим а потом снова выбирать Реалистик и тогда отображает правильно.
Кто-нибудь знает как решить это недоразумение?
Спасибо за любую идею.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #1 : 20-08-2023, 15:14:00 »
Приходится руками менять на любой другой режим а потом снова выбирать Реалистик и тогда отображает правильно.
Думаю что требуется регенерация.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #2 : 20-08-2023, 20:02:45 »
пробовал метод updateDisplay(). 
пробовал несколько раз в разных местах ставить. никакого эффекта.
какая регенерация может быть  еще ?

кроме того вот что нашел
https://help.autodesk.com/view/OARX/2023/ENU/?guid=OARX-RefGuide-AcDbViewport
процитирую
 Notes
Do not derive from this class. Attempting to do so will cause your application to halt AutoCAD.
Most AcDbViewport properties are reset to default values when the viewport is appended to a database. Therefore, you should always wait until you have added a new AcDbViewport object to the database before you change its property values.


как бы мне все это организовать? может есть идеи ?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #3 : 20-08-2023, 22:28:28 »
акая регенерация может быть  еще ?
ads_regen();
Most AcDbViewport properties are reset to default values when the viewport is appended to a database. Therefore, you should always wait until you have added a new AcDbViewport object to the database before you change its property values.
Сначала добавляешь в базу, а потом (не закрывая AcDbViewport) меняешь его свойства, а затем уже закрываешь. Или сначала добавляешь в базу, закрываешь, а потом открываешь его по AcDbObjectId и меняешь его свойства. Вот пример:
https://forums.autodesk.com/t5/objectarx/acdbviewport-setvisualstyle-do-not-work/m-p/7406173#M36285

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

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #4 : 21-08-2023, 16:31:15 »
спасибо за ответы.
для ads_regen() какой файл нужно подключить ? не могу ее вызвать. не находит ни в документации ни в коде.

Оффлайн Raikoz

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #5 : 22-08-2023, 05:46:07 »
спасибо за ответы.
для ads_regen() какой файл нужно подключить ? не могу ее вызвать. не находит ни в документации ни в коде.
Можно через команду REGENALL

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #6 : 22-08-2023, 17:32:18 »
спасибо за ответы.
для ads_regen() какой файл нужно подключить ? не могу ее вызвать. не находит ни в документации ни в коде.
Ничего подключать не нужно. Линкуется он из accore.lib. Просто вставь описание в любой испольемый .h- или .cpp-файл:
Код - C++ [Выбрать]
  1. void  ads_regen(void);
И вызывай ads_regen(); где нужно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #7 : 25-08-2023, 18:44:13 »
Сначала добавляешь в базу, а потом (не закрывая AcDbViewport) меняешь его свойства, а затем уже закрываешь. Или сначала добавляешь в базу, закрываешь, а потом открываешь его по AcDbObjectId и меняешь его свойства. Вот пример:
https://forums.autodesk.com/t5/objectarx/acdbviewport-setvisualstyle-do-not-work/m-p/7406173#M36285
никак не хочет работать

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #8 : 25-08-2023, 18:49:36 »

посмотрите пожалста на код. может чтото я упустил
Код - C++ [Выбрать]
  1.         void CrtLaVp(double dH, double dW, AcGePoint2d maxExt, AcGePoint2d minExt, bool bInsert)
  2.         {
  3.                 AcApLayoutManager* pLayM = (AcApLayoutManager*)acdbHostApplicationServices()->layoutManager();
  4.                 ACHAR* nextLayoutName = pLayM->getNextNewLayoutName(NULL);
  5.  
  6.                 AcDbObjectId layoutId = AcDbObjectId::kNull;
  7.                 AcDbObjectId btrId = AcDbObjectId::kNull;
  8.  
  9.                 //bCreatViewPort = pLayM->createViewports();
  10.  
  11.                 pLayM->setCreateViewports(Adesk::kFalse);
  12.                 pLayM->createLayout(nextLayoutName, layoutId, btrId);
  13.                 pLayM->setCurrentLayout(nextLayoutName);
  14.  
  15.                 pLayM->updateCurrentPaper();           
  16.  
  17.                 AcDbViewport* pVp = new AcDbViewport;
  18.  
  19.                 // Append new viewport to paper space
  20.                 AcDbBlockTableRecord* pBTR;
  21.                 if (acdbOpenObject(pBTR, btrId, AcDb::kForWrite) != Acad::eOk)
  22.                 {
  23.                         acutPrintf(L"\nCannot access paper space.");
  24.                         delete pVp;
  25.                         return;
  26.                 }
  27.  
  28.                 AcDbObjectId idViewPort = AcDbObjectId::kNull;
  29.                 if (pBTR->appendAcDbEntity(idViewPort, pVp) != Acad::eOk)
  30.                 {
  31.                         acutPrintf(L"\nCannot append viewport to paper space.");
  32.                         pBTR->close();
  33.                         delete pVp;
  34.                         return;
  35.                 }
  36.  
  37.                 pBTR->close();
  38.  
  39.                 AcGePoint3d centerPointPos(120, 100,0);
  40.                 AcGePoint2d ViewCenter(0,0);
  41.                 AcGeVector3d v(-1, -1, 1);
  42.                 AcGePoint3d modelCenter(0, 0, 0);
  43.  
  44.                 pVp->setCenterPoint(centerPointPos);
  45.  
  46.                 pVp->setViewDirection(v);
  47.                 pVp->setViewCenter(ViewCenter);
  48.                 pVp->setViewTarget(modelCenter);
  49.  
  50.                 pVp->setViewHeight(100);
  51.  
  52.                 pVp->setHeight(dH);
  53.                 pVp->setWidth(dW);
  54.  
  55.                 pVp->setOn();
  56.                 pVp->showHiddenLines();
  57.                 pVp->close();
  58.  
  59.                 Acad::ErrorStatus es;
  60.                 AcDbObjectId vsId = AcDbObjectId::kNull;
  61.  
  62.                 const ACHAR* szVisStyleName = acdbGetReservedString(AcDb::kVSRealistic, false);
  63.                 es = AcDbDictUtil::getVisualStyleId(vsId, szVisStyleName, acdbCurDwg());
  64.  
  65.                 int vpNum = -1;
  66.                 AcDbViewport* pViewport;
  67.                 if ((es = acdbOpenObject(pViewport, idViewPort, AcDb::kForWrite)) == Acad::eOk)
  68.                 {
  69.                         vpNum = pViewport->number();
  70.                         pViewport->setViewTarget(modelCenter);
  71.                         pViewport->setVisualStyle(vsId);
  72.                         pViewport->close();
  73.                 }
  74.  
  75.                 void ads_regen();
  76.                 ads_regen();
  77.         }
  78.  
  79.  
Вот пример:
https://forums.autodesk.com/t5/objectarx/acdbviewport-setvisualstyle-do-not-work/m-p/7406173#M36285
это не работает. acgsGetCurrent3dAcGsView - такой функции не находит, ни в коде ( поиск по всем включенным файлам ), ни в документации.  находит acgsGetCurrentAcGsView или acgsGetGsView.  не находит также acgsObtainAcGsView.
это функции с примера по ссылке.
« Последнее редактирование: 25-08-2023, 19:53:14 от Олег »

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #9 : 26-08-2023, 14:44:26 »
Олег,
Версия AutoCAD?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #10 : 26-08-2023, 14:48:47 »
Это
Олег,
Версия AutoCAD?
копия AutoCAD - BricsCAD22

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #11 : 26-08-2023, 14:50:50 »
Олег, Для BricsCAD не на этом форуме нужно задавать вопросы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #12 : 26-08-2023, 15:18:25 »
Олег, Для BricsCAD не на этом форуме нужно задавать вопросы.
Александр, для брикскада нет отдельных форумов потому что там внутри это все копия автокада.
все пасутся на форумах автокада.
по всем вопросам отправляют на форумы автокада.
да и базовые вещи проще спросить на русском чем на англиском.

как я понимаю у меня какаято базовая вещь. чтото пропустил к коде такое простое которое в глаза не бросается.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #13 : 26-08-2023, 15:23:05 »
потому что там внутри это все копия автокада.
Это глупость. Уже то, что ты не нашел ряда функций из приведенного примера, говорит о том, что это "недокопия". Разбираться почему что-то, что работает в AutoCAD, но не работает в Брикскаде никто не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #14 : 26-08-2023, 15:27:53 »
И еще я не увидел в коде инициализации листа (AcDbLayout::initialize)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение