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

ADN Club => ObjectARX => Тема начата: Sergey_K от 24-10-2019, 17:36:09

Название: Временная графика
Отправлено: Sergey_K от 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, если они
работают напрямую от мыши (команды не используются)
Название: Re: Временная графика
Отправлено: Александр Ривилис от 24-10-2019, 17:37:18
Как зафиксировать её на экране при изменении текущего вида, вызванного zoom, pan, redraw ?
Зафиксировать её нельзя. Ты имеешь в виду перерисовать?
Название: Re: Временная графика
Отправлено: Sergey_K от 24-10-2019, 17:46:38
имеешь в виду перерисовать?
Именно
Название: Re: Временная графика
Отправлено: Александр Ривилис от 24-10-2019, 21:12:11
Sergey_K,
Может тебе подойдёт это: https://adn-cis.org/ispolzovanie-tranzitnoj-grafiki.html ?
Она сама не стирается при операциях ZOOM/PAN/REGEN/REDRAW и т.д.
Название: Re: Временная графика
Отправлено: Sergey_K от 24-10-2019, 22:27:42
Она сама не стирается
Именно по этому не подойдёт
Название: Re: Временная графика
Отправлено: Александр Ривилис от 24-10-2019, 22:28:44
Именно по этому не подойдёт
Тогда объясни подробнее что тебе нужно.
Название: Re: Временная графика
Отправлено: Sergey_K от 24-10-2019, 22:40:51
Нужно уловить момент окончания команд PAN, ZOOM, REDRAW, REGEN, чтобы запустить grdraw.

Как я понял, в варианте с транзитной графикой кроме её отрисовки ещё нужно затем стирать её. Накладно
Название: Re: Временная графика
Отправлено: Александр Ривилис от 24-10-2019, 22:45:32
Накладно
Накладно как раз отлавливать окончание всех этих команд, а еще изменение размеров окна документа и т.д. и т.п.
Тут понадобится использовать кучу реакторов, хуки, возможно таймеры...
Название: Re: Временная графика
Отправлено: Александр Ривилис от 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. }

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

Название: Re: Временная графика
Отправлено: Sergey_K от 24-10-2019, 23:10:43
СПС, попробую

На основе grdraw сделан алфавит и куча символов + можно добавлять любые символы по надобности и не напрягаться с их временем жизни.
Держать массив примитивов для последующего уничтожения не хочется ) Тем более, что размер этого массива может быть приличным
Название: Re: Временная графика
Отправлено: Александр Ривилис от 24-10-2019, 23:12:05
На основе grdraw сделан алфавит и куча символов + можно добавлять любые символы по надобности и не напрягаться с их временем жизни.
Держать массив примитивов для последующего уничтожения не хочется ) Тем более, что размер этого массива может быть приличным
С транзитной графикой можно было бы просто использовать AcDbText или AcDbMtext...
Название: Re: Временная графика
Отправлено: Sergey_K от 24-10-2019, 23:14:30
можно было бы просто использовать AcDbText или AcDbMtext...

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