Проблема с отображением транзиентной штриховки

Автор Тема: Проблема с отображением транзиентной штриховки  (Прочитано 9417 раз)

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

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

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Пытаюсь реализовать простенький код с транзиентной штриховкой:
Код - 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. Что не так?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я сильно сомневаюсь, что допустимо использовать AcDbHatch для транзитной графики если её предварительно не добавить в базу.
Здесь пример с использованием .NET, но переделать его несложно: http://drive-cad-with-code.blogspot.com/2011/01/mimicking-autocads-area-command-with_20.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще немного поэкспериментировал и обнаружил, что AcDbHatch нормально работает в транзитной графике только если визуальный стиль отличен от 2D Wireframe. Это видно на видео:

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

Отмечено как Решение Debalance 01-03-2018, 21:32:41

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ха! А если заменить kAcGiDirectTopmost на kAcGiMain, то работает и в 2D Wireframe:

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

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Еще немного поэкспериментировал...
С каким кодом Вы экспериментировали? Вы добавляете в базу штриховку или нет?

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
На мой взгляд - добавление в базу какое-то странное алогичное действие при работе с временной графикой. Получается надо делать объект невидимым, добавлять его в базу, а потом отрисовывыть поверх временной графикой...  :o Так что-ли...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы добавляете в базу штриховку или нет?
Нет. В твоём коде сделал замену kAcGiDirectTopmost на kAcGiMain и всё.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Нет. В твоём коде сделал замену kAcGiDirectTopmost на kAcGiMain и всё.
Да, я уже разобрался, спасибо.

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Тема получила некое развитие - транзитная штриховка не хочет работать на AutoCAD 2015. Причём последовательно осуществлял тестирование на ряде версий AutoCAD: 2012, 2013, 2014, 2015, 2016, 2017, 2018. Что характерно: код собранный на OARX2015 корректно "пашет" на AutoCAD 2016.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Тема получила некое развитие - транзитная штриховка не хочет работать на AutoCAD 2015.
Со всеми обновлениями?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Со всеми обновлениями?
Не стоит второй "сервис пак". Попытки его установить натыкаются на данную проблему:


Пробую установить .NET 4.5:


В общем заколдованный круг...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вопрос с .NET 4.5 уже у нас на форуме обсуждался и там было решение: http://adn-cis.org/forum/index.php?topic=3063.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не поленился и проверил этот же код в AutoCAD 2015 SP2 x64. Всё работает нормально:

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

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

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Вопрос с .NET 4.5 уже у нас на форуме обсуждался и там было решение: http://adn-cis.org/forum/index.php?topic=3063.0
Спасибо за ссылку по вопросу установки "сервис пака-2". После обновления всё работает корректно!