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

ADN Club => AutoCAD .NET API => Тема начата: Andrey от 26-02-2014, 09:36:44

Название: Вставка блока
Отправлено: Andrey от 26-02-2014, 09:36:44
Здравствуйте!
Суть вопроса: необходимо переделать код вставки блока с LISP на NET:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun InsertBlock (BlockName /)
  2.     (setq FirstPoint (getpoint "\nУкажите точку вставки блока:"))
  3.     (if (= FirstPoint NIL) (exit))
  4.     (setq Rotate (getangle FirstPoint "\nУкажите направление поворота блока:"))
  5.     (setq CoordX (rtos (nth 0 FirstPoint) 2 4))
  6.     (setq CoordY (rtos (nth 1 FirstPoint) 2 4))
  7.     (vl-cmdf "_.-insert" BlockName (strcat CoordX "," CoordY ",0.00") "1" "1" (angtos Rotate 0 4))
  8. )
Переделка должна быть выполнена так, чтобы сохранялась временная графика с изображением блока при запросе угла поворота и появлялось окно заполнения атрибутов (для соответствующих блоков) как на LISP.
После вставки блока должно продолжиться выполнения кода NET.
Были неудачные попытки использовать за основу следующий код:
Код - C# [Выбрать]
  1. object ActiveDocument = doc.GetAcadDocument();
  2. object[] data = { "_.BLOCKICON " + blk.Name + "\n" };
  3. ActiveDocument.GetType().InvokeMember("SendCommand", System.Reflection.BindingFlags.InvokeMethod, null, ActiveDocument, data);
Спасибо.
Название: Re: Вставка блока
Отправлено: Андрей Бушман от 26-02-2014, 10:15:16
В редакторе сообщений пользуйся тэгами оформления кода.
Название: Re: Вставка блока
Отправлено: Дмитрий Загорулькин от 26-02-2014, 10:29:07
Переделка должна быть выполнена так, чтобы сохранялась временная графика с изображением блока
Думаю, тут не обойтись без JIGs: http://through-the-interface.typepad.com/through_the_interface/2007/05/using_a_jig_fro.html
Название: Re: Вставка блока
Отправлено: Андрей Бушман от 26-02-2014, 10:37:12
Andrey,
Там в раскрывающемся списке есть возможность выбрать конкретный язык, дабы синтаксис подсвечивался надлежащим образом. :)
Название: Re: Вставка блока
Отправлено: Andrey от 26-02-2014, 11:13:17
Появилась идея - есть ли возможность управлять на NET параметрами, передаваемыми в командную строку - запустить команду и где надо передавать фиксированные значения , а где надо прерывать и дать пользователю указать точку и угол
Название: Re: Вставка блока
Отправлено: Дима_ от 26-02-2014, 11:43:19
Для "красивого" переноса блока открытых API нет ни в каком диалекте программирования автокада, можно либо вызвать командные методы, либо рисовать запрос точки самому, но тогда если в очередной версии изениться "интерфейс" команды будут различия, другой вопрос - надо ли их делать один-в-один с родными. На dwg.ru была тема про это http://forum.dwg.ru/showthread.php?t=62361 (http://forum.dwg.ru/showthread.php?t=62361), там правда лисп в основном, но в данном случае разницы большой нет  -что там, что здесь (.Net) либо командно, либо в рукопашную.
з.ы. есть еще api express tools...
Название: Re: Вставка блока
Отправлено: Александр Ривилис от 27-02-2014, 16:18:52
там правда лисп в основном, но в данном случае разницы большой нет  -что там, что здесь (.Net) либо командно, либо в рукопашную.
В ObjectARX и .NET есть JIG и если постараться можно получить очень красивую вставку без всяких командных методов.
Например: http://through-the-interface.typepad.com/through_the_interface/2009/03/jigging-an-autocad-block-with-attributes-using-net.html
Название: Re: Вставка блока
Отправлено: Дима_ от 27-02-2014, 16:41:29
и если постараться можно получить очень красивую вставку без всяких командных методов.
Я про то и пишу - в лиспе тоже можно "без всяких командных методов" - но надо постараться - в той же теме http://forum.dwg.ru/showpost.php?p=687658&postcount=51 (http://forum.dwg.ru/showpost.php?p=687658&postcount=51)