Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Debalance от 01-03-2018, 10:45:10

Название: Проблема с отображением транзиентной штриховки
Отправлено: Debalance от 01-03-2018, 10:45:10
Пытаюсь реализовать простенький код с транзиентной штриховкой:
Код - C++ [Выбрать]
  1. AcDbHatch* pHatch = new AcDbHatch();
  2. pHatch->setNormal(AcGeVector3d::kZAxis);
  3. pHatch->setElevation(0.0);
  4. pHatch->setAssociative(Adesk::kFalse);
  5. pHatch->setPattern(AcDbHatch::kPreDefined, L"SOLID");
  6. pHatch->setHatchStyle(AcDbHatch::kNormal);
  7.  
  8. AcGePoint2dArray vertexPts;
  9. vertexPts.setPhysicalLength(0).setLogicalLength(5);
  10. vertexPts[0].set(2.0, 2.0);
  11. vertexPts[1].set(8.0, 2.0);
  12. vertexPts[2].set(8.0, 8.0);
  13. vertexPts[3].set(2.0, 8.0);
  14. vertexPts[4].set(2.0, 2.0);
  15.  
  16. AcGeDoubleArray vertexBulges;
  17. vertexBulges.setPhysicalLength(0).setLogicalLength(5);
  18. for (int i = 0; i < 5; i++) vertexBulges[i] = 0.0;
  19.  
  20. pHatch->appendLoop(AcDbHatch::kExternal, vertexPts, vertexBulges);
  21. pHatch->evaluateHatch();
  22.  
  23. AcArray<int> ViewportNumbers;
  24. struct resbuf res2;
  25. acedGetVar(L"CVPORT", &res2);
  26. ViewportNumbers.append(res2.resval.rint);
  27.  
  28. AcGiTransientManager* pTransientManager = acgiGetTransientManager();
  29. if (!pTransientManager->addTransient(pHatch, kAcGiDirectTopmost, 0, ViewportNumbers))
  30. {
  31.         acutPrintf(L"\nError");
  32. }
  33.  

... но результата не наблюдается. В то время как addTransient возвращает true. Что не так?
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Александр Ривилис от 01-03-2018, 13:35:05
Я сильно сомневаюсь, что допустимо использовать AcDbHatch для транзитной графики если её предварительно не добавить в базу.
Здесь пример с использованием .NET, но переделать его несложно: http://drive-cad-with-code.blogspot.com/2011/01/mimicking-autocads-area-command-with_20.html
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Александр Ривилис от 01-03-2018, 17:41:43
Еще немного поэкспериментировал и обнаружил, что AcDbHatch нормально работает в транзитной графике только если визуальный стиль отличен от 2D Wireframe. Это видно на видео:

Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Александр Ривилис от 01-03-2018, 18:04:52
Ха! А если заменить kAcGiDirectTopmost на kAcGiMain, то работает и в 2D Wireframe:

Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Debalance от 01-03-2018, 19:29:14
Еще немного поэкспериментировал...
С каким кодом Вы экспериментировали? Вы добавляете в базу штриховку или нет?
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Debalance от 01-03-2018, 20:36:23
На мой взгляд - добавление в базу какое-то странное алогичное действие при работе с временной графикой. Получается надо делать объект невидимым, добавлять его в базу, а потом отрисовывыть поверх временной графикой...  :o Так что-ли...
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Александр Ривилис от 01-03-2018, 23:21:15
Вы добавляете в базу штриховку или нет?
Нет. В твоём коде сделал замену kAcGiDirectTopmost на kAcGiMain и всё.
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Debalance от 02-03-2018, 09:27:08
Нет. В твоём коде сделал замену kAcGiDirectTopmost на kAcGiMain и всё.
Да, я уже разобрался, спасибо.
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Debalance от 08-03-2018, 22:09:38
Тема получила некое развитие - транзитная штриховка не хочет работать на AutoCAD 2015. Причём последовательно осуществлял тестирование на ряде версий AutoCAD: 2012, 2013, 2014, 2015, 2016, 2017, 2018. Что характерно: код собранный на OARX2015 корректно "пашет" на AutoCAD 2016.
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Александр Ривилис от 09-03-2018, 00:02:58
Тема получила некое развитие - транзитная штриховка не хочет работать на AutoCAD 2015.
Со всеми обновлениями?
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Debalance от 09-03-2018, 09:42:33
Со всеми обновлениями?
Не стоит второй "сервис пак". Попытки его установить натыкаются на данную проблему:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F1003453%2F105409719.9%2F0_18b3a3_d67c553e_orig.png&hash=b40f1a1ed51cf8ccc2eeccf597b08f0f)

Пробую установить .NET 4.5:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F906092%2F105409719.9%2F0_18b3a2_e58ba449_orig.png&hash=b56e665a02eed9fe91f5766ea46e3dab)

В общем заколдованный круг...
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Александр Ривилис от 09-03-2018, 12:13:36
Вопрос с .NET 4.5 уже у нас на форуме обсуждался и там было решение: http://adn-cis.org/forum/index.php?topic=3063.0
Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Александр Ривилис от 09-03-2018, 15:17:56
Не поленился и проверил этот же код в AutoCAD 2015 SP2 x64. Всё работает нормально:

Название: Re: Проблема с отображением транзиентной штриховки
Отправлено: Debalance от 09-03-2018, 20:15:12
Вопрос с .NET 4.5 уже у нас на форуме обсуждался и там было решение: http://adn-cis.org/forum/index.php?topic=3063.0
Спасибо за ссылку по вопросу установки "сервис пака-2". После обновления всё работает корректно!