Аналог acedRedraw в C#?

Автор Тема: Аналог acedRedraw в C#?  (Прочитано 8463 раз)

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

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

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Аналог acedRedraw в C#?
« : 18-05-2016, 16:30:36 »
Кто знает аналог acedRedraw в C#?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог acedRedraw в C#?
« Ответ #1 : 18-05-2016, 16:31:26 »
На выбор: Editor.DrawVector и Editor.DrawVectors
Неправильно понял вопрос. :(
« Последнее редактирование: 18-05-2016, 17:08:38 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: Аналог acedRedraw в C#?
« Ответ #2 : 18-05-2016, 16:32:21 »
Не то!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог acedRedraw в C#?
« Ответ #3 : 18-05-2016, 16:33:36 »
Стоп. Полного аналога нет. Можно конечно через P/Invoke. Какой вариант тебя интересует?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Alxd 14-07-2016, 09:47:28

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

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

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: Аналог acedRedraw в C#?
« Ответ #5 : 19-05-2016, 06:30:53 »
О! Решение с импортом функции вполне подходит.
Очередной раз убеждаюсь, что написание приложений под AutoCAD на С++ гибче, чем на C#. Ээх... модные тенденции... :)

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: Аналог acedRedraw в C#?
« Ответ #6 : 14-07-2016, 12:34:11 »
Непонятно, как из C# вызвать acedRedraw(NULL,1);
Попробовал передать созданный с помощью оператора new пустой ads_name, функция возвращает 5100, типа перерисовала, но на самом деле ничего не перерисовала. Не стирается ранее нарисованное с помощью ed.DrawVector.
Беда :(

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог acedRedraw в C#?
« Ответ #7 : 14-07-2016, 12:39:50 »
А Editor.UpdateScreen тебе не подходит?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: Аналог acedRedraw в C#?
« Ответ #8 : 14-07-2016, 12:52:14 »
Может быть я что-то не так делаю?
Есть функции:
Код - C# [Выбрать]
  1. private void drawPoint(Editor ed, Point3d center, double size, int color)
  2.         {
  3.             ed.DrawVector(center - new Vector3d(size/2, 0, 0), center + new Vector3d(size/2, 0, 0), color, false);
  4.             ed.DrawVector(center - new Vector3d(0, size / 2, 0), center + new Vector3d(0, size / 2, 0), color, false);
  5.         }
  6.  
  7.         private void redrawPoints(Document doc, ObjectId objId1, ObjectId objId2, double size, bool switched)
  8.         {
  9.             using (OpenCloseTransaction tr = doc.TransactionManager.StartOpenCloseTransaction())
  10.             {
  11.                 Curve curve1 = (Curve)tr.GetObject(objId1, OpenMode.ForRead);
  12.                 Curve curve2 = (Curve)tr.GetObject(objId2, OpenMode.ForRead);
  13.  
  14.                 drawPoint(doc.Editor, curve1.StartPoint, size, 3);
  15.                 drawPoint(doc.Editor, switched ? curve2.EndPoint : curve2.StartPoint, size, 4);
  16.  
  17.                 tr.Commit();
  18.             }
  19.         }
  20.  

вызываю redrawPoints из основной функции

Код - C# [Выбрать]
  1. double pointSize = 1.0;
  2. redrawPoints(doc, objId1, objId2, pointSize, false);
  3. ed.UpdateScreen();
  4.  

Все отрисовалось, думаю и и без UpdateScreen. Далее следует цикл обработки ввода пользователя, и если он вызывает из команды нужную опцию, то опять вызываю:

Код - C# [Выбрать]
  1. redrawPoints(doc, objId1, objId2, pointSize, _switched);
  2. ed.UpdateScreen();
  3.  

Но в итоге на экране остается и прежняя ранее нарисованные крестики, и новые. Почему старые не стираются, не пойму.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог acedRedraw в C#?
« Ответ #9 : 14-07-2016, 12:53:58 »
Попробуй так:

Код - 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.   Editor ed =
  7.     Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  8.   ed.DrawVector(new Point3d(0, 0, 0),
  9.     new Point3d(10000, 10000, 0), 1, false);
  10.   ed.GetString("\nНажмите ввод!");
  11.   acedRedraw(IntPtr.Zero, 1);
  12. }

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Аналог acedRedraw в C#?
« Ответ #10 : 14-07-2016, 13:19:16 »
Далее следует цикл обработки ввода пользователя, и если он вызывает из команды нужную опцию, то опять вызываю:
Ты же вызываешь очистку экрана сразу после отрисовки. Думаешь если бы экран очищался, то ты что-нибудь увидел бы?
Очистку нужно ставить после запроса у пользователя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение