editor.DrawVector после zoom/Pan

Автор Тема: editor.DrawVector после zoom/Pan  (Прочитано 7285 раз)

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

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

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
editor.DrawVector после zoom/Pan
« : 14-07-2016, 13:32:13 »
Временно отрисовываю крестики на чертеже с помощью ed.DrawVector(...), но при панорамировании или зумировании чертежа они исчезают. Как отследить завершение прозрачной операции zoom/pan, чтобы после нее сразу отрисовать крестики снова?

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: editor.DrawVector после zoom/Pan
« Ответ #1 : 14-07-2016, 13:36:00 »
А не проще будет использовать Transient-графику?

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: editor.DrawVector после zoom/Pan
« Ответ #2 : 14-07-2016, 13:36:42 »
Ради такой мелочи не хочется городить огород с транзиентной графикой. Чесслово. :)

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: editor.DrawVector после zoom/Pan
« Ответ #3 : 14-07-2016, 13:38:25 »
Мне кажется когда дело доходит до перехвата событий - то любой другой метод уже будет проще. Безопасней по крайней мере. Не?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: editor.DrawVector после zoom/Pan
« Ответ #4 : 14-07-2016, 14:11:33 »
Попробуй событие Document.ViewChanged:
http://adn-cis.org/kak-opredelit-izmenenie-vida-v-autocad.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: editor.DrawVector после zoom/Pan
« Ответ #5 : 14-07-2016, 14:51:38 »
Неа. Перехват идет, но отрисовки нет. Жаль...

Отмечено как Решение Alxd 14-07-2016, 15:33:31

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: editor.DrawVector после zoom/Pan
« Ответ #6 : 14-07-2016, 15:04:17 »
Неа. Перехват идет, но отрисовки нет. Жаль...
Да ладно... Ну чуть сложнее:
Код - C# [Выбрать]
  1. [DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl)]
  2. private static extern int acedRedraw(IntPtr name, int mode);
  3. [CommandMethod("MyRedraw")]
  4. public void MyRedraw()
  5. {
  6.   Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  7.   Editor ed = doc.Editor;
  8.   doc.ViewChanged += doc_ViewChanged;
  9.   drawVecs();
  10.   Application.Idle += Application_Idle;
  11.   ed.GetPoint("\nДля выхода укажите точку: ");
  12.   Application.Idle -= Application_Idle;
  13.   doc.ViewChanged -= doc_ViewChanged;
  14.   acedRedraw(IntPtr.Zero, 1);
  15. }
  16.  
  17. void drawVecs()
  18. {
  19.   Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  20.   Editor ed = doc.Editor;
  21.   // ed.UpdateScreen();
  22.   Point3d center3d = (Point3d)Application.GetSystemVariable("VIEWCTR");
  23.   double height = (double)Application.GetSystemVariable("VIEWSIZE");
  24.   Point2d screensize = (Point2d)Application.GetSystemVariable("SCREENSIZE");
  25.   double aspect = screensize.X / screensize.Y;
  26.   double width = height * aspect;
  27.  
  28.   Point3d leftUp = new Point3d(center3d.X - width * 0.4, center3d.Y + height * 0.4, 0);
  29.   Point3d leftDown = new Point3d(center3d.X - width * 0.4, center3d.Y - height * 0.4, 0);
  30.   Point3d rightUp = new Point3d(center3d.X + width * 0.4, center3d.Y + height * 0.4, 0);
  31.   Point3d rightDown = new Point3d(center3d.X + width * 0.4, center3d.Y - height * 0.4, 0);
  32.   acedRedraw(IntPtr.Zero, 1);
  33.   ed.DrawVector(leftDown, leftUp, 2, false);
  34.   ed.DrawVector(leftUp, rightUp, 2, false);
  35.   ed.DrawVector(rightUp, rightDown, 2, false);
  36.   ed.DrawVector(rightDown, leftDown, 2, false);
  37.   ed.DrawVector(leftUp, rightDown, 2, false);
  38.   ed.DrawVector(leftDown, rightUp, 2, false);
  39. }
  40. bool redraw = false;
  41. void Application_Idle(object sender, EventArgs e)
  42. {
  43.   if (redraw)
  44.   {
  45.     drawVecs();
  46.     redraw = false;
  47.   }
  48. }
  49. void doc_ViewChanged(object sender, EventArgs e)
  50. {
  51.   redraw = true;
  52. }

Только не говори, что у тебя не работает!
« Последнее редактирование: 14-07-2016, 16:09:16 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: editor.DrawVector после zoom/Pan
« Ответ #7 : 14-07-2016, 15:09:51 »
« Последнее редактирование: 14-07-2016, 16:08:01 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение