AcDbViewport не работает

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

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

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

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

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

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

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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #15 : 26-08-2023, 15:30:58 »
Это глупость. Уже то, что ты не нашел ряда функций из приведенного примера, говорит о том, что это "недокопия". Разбираться почему что-то, что работает в AutoCAD, но не работает в Брикскаде никто не будет.
ну в самом автокаде тоже бывает отверсии к версии они то есть то нету.
в данном случае думаю что это не нюанс брикскада а полная копия работы автокада.

 потому что

кроме того вот что нашел
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.

как минимум.
если это упирается в разность работы программ то конечно тогда тема не корректна.
но я всегда спрашивал базовые вещи.  посмотрите по истории моих постов. я уверен что тут также. код с ошибками.

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #16 : 26-08-2023, 15:33:20 »
И еще я не увидел в коде инициализации листа (AcDbLayout::initialize)

я собирал код из разный (источников)форумов. 
там менеджер листов создает лист. 
не требует инициализации.
создание листа это пример с форума автокада.

Отмечено как Решение Олег 27-08-2023, 13:26:39

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #18 : 26-08-2023, 15:53:59 »
Пример с форума Autodesk, который я привел, отмечен как решение. Т.е. в AutoCAD он работает. Мне нечего добавить.
только что установил автокад 2022.
счас попробую. в любом случае спасибо за время и внимание.

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

  • ADN OPEN
  • **
  • Сообщений: 79
  • Карма: 0
Re: AcDbViewport не работает
« Ответ #19 : 27-08-2023, 04:59:10 »
Пример с форума Autodesk, который я привел, отмечен как решение. Т.е. в AutoCAD он работает. Мне нечего добавить.
Подтверждаю, в Автокаде работает.
В Брикскаде acgsGetCurrent3dAcGsView и acgsObtainAcGsView не реализованы,
только acgsGetCurrentAcGsView. Как будто ( судя по упоминаниям на форумах) библиотека до 2015 года на Автокад.
Вот здесь упоминание об этом
https://adn-cis.org/dostup-k-acgsview-assocziirovannomu-s-vidom.html


Подскажите как в более ранних версиях Автокада обходились без acgsObtainAcGsView. Что было вместо нее ?
« Последнее редактирование: 27-08-2023, 06:09:11 от Олег »

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbViewport не работает
« Ответ #20 : 27-08-2023, 16:20:04 »
Подскажите как в более ранних версиях Автокада обходились без acgsObtainAcGsView. Что было вместо нее ?
acgsGetGsView
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение