Временная графика

Автор Тема: Временная графика  (Прочитано 4689 раз)

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Временная графика
« : 24-10-2019, 17:36:09 »
Графика, создана при помощи acedGrDraw.

Как зафиксировать её на экране при изменении текущего вида, вызванного zoom, pan, redraw ?

AcEditorReactor::viewChanged() не подходит, т.к. "It is recommended that no expensive computation be performed during the callback" и acedGrDraw при этом callback не работает...
AcEditorReactor::commandEnded() не фиксирует zoom и pan, если они
работают напрямую от мыши (команды не используются)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #1 : 24-10-2019, 17:37:18 »
Как зафиксировать её на экране при изменении текущего вида, вызванного zoom, pan, redraw ?
Зафиксировать её нельзя. Ты имеешь в виду перерисовать?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Временная графика
« Ответ #2 : 24-10-2019, 17:46:38 »
имеешь в виду перерисовать?
Именно

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #3 : 24-10-2019, 21:12:11 »
Sergey_K,
Может тебе подойдёт это: https://adn-cis.org/ispolzovanie-tranzitnoj-grafiki.html ?
Она сама не стирается при операциях ZOOM/PAN/REGEN/REDRAW и т.д.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Временная графика
« Ответ #4 : 24-10-2019, 22:27:42 »
Она сама не стирается
Именно по этому не подойдёт

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #5 : 24-10-2019, 22:28:44 »
Именно по этому не подойдёт
Тогда объясни подробнее что тебе нужно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Временная графика
« Ответ #6 : 24-10-2019, 22:40:51 »
Нужно уловить момент окончания команд PAN, ZOOM, REDRAW, REGEN, чтобы запустить grdraw.

Как я понял, в варианте с транзитной графикой кроме её отрисовки ещё нужно затем стирать её. Накладно

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #7 : 24-10-2019, 22:45:32 »
Накладно
Накладно как раз отлавливать окончание всех этих команд, а еще изменение размеров окна документа и т.д. и т.п.
Тут понадобится использовать кучу реакторов, хуки, возможно таймеры...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Sergey_K 28-10-2019, 16:49:01

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #8 : 24-10-2019, 23:01:41 »
Впрочем попробуй такой вариант:
Код - C++ [Выбрать]
  1. const int ID_TIMERNUM = 12345;
  2. const int tInterval = 10;
  3.  
  4. VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
  5. {
  6.   ::KillTimer(hwnd, ID_TIMERNUM);
  7.   // Здесь рисуем при помощи acedGrDraw
  8.   AcGePoint3d p1(0, 0, 0), p2(100, 0, 0), p3(100, 100, 0), p4(0, 100, 0);
  9.   acedGrDraw(asDblArray(p1), asDblArray(p2), 4, 0);
  10.   acedGrDraw(asDblArray(p2), asDblArray(p3), 4, 0);
  11.   acedGrDraw(asDblArray(p3), asDblArray(p4), 4, 0);
  12.   acedGrDraw(asDblArray(p4), asDblArray(p1), 4, 0);
  13. }
  14.  
  15.  
  16. void MyEditorReactor::viewChanged()
  17. {
  18.   ::SetTimer(adsw_acadMainWnd(), ID_TIMERNUM, tInterval, &TimerProc);
  19. }

В данном случае таймер помогает:

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

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Временная графика
« Ответ #9 : 24-10-2019, 23:10:43 »
СПС, попробую

На основе grdraw сделан алфавит и куча символов + можно добавлять любые символы по надобности и не напрягаться с их временем жизни.
Держать массив примитивов для последующего уничтожения не хочется ) Тем более, что размер этого массива может быть приличным

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Временная графика
« Ответ #10 : 24-10-2019, 23:12:05 »
На основе grdraw сделан алфавит и куча символов + можно добавлять любые символы по надобности и не напрягаться с их временем жизни.
Держать массив примитивов для последующего уничтожения не хочется ) Тем более, что размер этого массива может быть приличным
С транзитной графикой можно было бы просто использовать AcDbText или AcDbMtext...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Временная графика
« Ответ #11 : 24-10-2019, 23:14:30 »
можно было бы просто использовать AcDbText или AcDbMtext...

Буду смотреть и этот вариант