|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
18.04.2012, 17:14 | #1 | |
Возможно ли получить результат выполнения SendCommand в Delphi?
Регистрация: 18.04.2012
Сообщений: 5
|
||
Просмотров: 4708
|
|
||||
Думаю, что так не получится.
Если выполняется лисп-выражение, как в примере, то результат можно записать лисп-программой в пользовательскую переменную, в реестр, в файл, откуда уже делфи-программа сможет взять эти данные. |
||||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Чтобы такие вопросы не задавать, надо открыть acadauto.chm и читать справку по объектам. SendCommand - это метод, который ничего не возвращает.
Добраться до текстового окна Автокада путем разных ухищрений наверняка можно (как до любого окна в Windows, но пытаться прочиталь из него результат выполнения LISP-выражения совершенно бессмысленно. В окне может оказаться что угодно. Do$ правильно подсказывает - надо результат помещать в переменную, а переменную в подходящее для чтения место. |
|||
|
||||
Регистрация: 18.04.2012
Сообщений: 5
|
Спасибо за ответы, особенно Do$, Вы действительно направили меня на путь истинный. Просто я не совсем хорошо знаком с объектной моделью AutoCAD.
Подправил Lisp функцию чтобы она записывала в USERS1, а из Delphi считываю результат. Все работает. AcadApp.ActiveDocument.SendCommand('(load "C:\\1lisp\\test")'+#13); AcadApp.ActiveDocument.SendCommand('(AX:GETTAGTEXTSTRING doc "GOSTFORM" "FILE_NAME")'+#13); pt := AcadApp.ActiveDocument.GetVariable('USERS1'); ListBox1.Items.Add(pt); p.s. Вообще стояла задача считывания атрибутов, мною было реализовано считывание, но из-за модели COM AutoCAD приходилось считывать все объекты ModelSpace или PaperSpace затем перебирать, определять атрибуты, считывание файла с 15000 элементов готового чертежа занимало порядка 15-20 секунд. Поэтому решил воспользоваться Lisp, такой способ гораздо быстрее. |
|||
|
||||
Да ну... А отфильтровать только вставки блоков с атрибутами было "слабо"?
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
Регистрация: 18.04.2012
Сообщений: 5
|
Уважаемый, Александр Ривилис, в связи с тем, что это мое первое приложения для AutoCAD на Delphi, мне трудно понять о чем вы, просто я так понимаю что для того чтобы получить объекты нужно перебирать все элементы PaperSpace.Item(), которых будет PaperSpace.Count.
До этого я делал так(к примеру если чертеж выполнен в PaperSpace): BlkRef:= Acad.ActiveDocument.PaperSpace.Item(i); //Делал проверку на ссылку на блок if BlkRef.ObjectName = 'AcDbBlockReference' then //Извлекал атрибуты, проверял на нужный и выводил на TextString по TagString AttrArray := BlkRef.GetAttributes; LBnd:= VarArrayLowBound(AttrArray, 1); HBnd:= VarArrayHighBound(AttrArray, 1); for j:= LBnd to HBnd do begin AttrRef:= AttrArray[j]; if AttrRef.TagString = 'FNAME' then begin ListBox1.Items.Add(AttrRef.TagString); ListBox1.Items.Add(AttrRef.TextString); end; end; p.s. Отфильтровать вставки блоков действительно было "слабо", возможно подскажете в какую сторону копать. |
|||
|
||||
На Delphi я вообще не пишу, но речь ведь не о языке программирования, а о технологии. Так вот в объектной модели для объекта SelectionSet есть метод Select, которому можно передать фильтр выбора объектов. В качестве фильтра используются коды DXF. Например код 0 соответствует типу примитива (для вставки блока "INSERT"), а код 66 - код наличия атрибутов у блока (1 - есть, 0 - нет).
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
Регистрация: 18.04.2012
Сообщений: 5
|
Спасибо за подсказку)
Буду разбираться теперь. Еще два вопроса по этому поводу: 1. Если я пишу на AutoLisp функцию выборки атрибутов блока, и если использую SelectionSet.Select по быстродействию выполнения будет одинаково? 2. Я так понимаю в SelectionSet.Select можно сделать выборку к примеру примитивов TEXT в области заданной прямоугольником? |
|||
|
||||
Цитата:
Можно.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Документация Проектировщику на Torrents | DEM | Разное | 262 | 24.02.2024 17:19 |
Можно ли в ANSYS 12, получить результат нагрузки элемента с температурой? | Freeman2010new | ANSYS | 7 | 18.09.2011 16:17 |
Как не выводить в командную строку результат выполнения функции (lisp)? | Иванов Дмитрий | LISP | 6 | 28.11.2010 17:54 |
_copy и _array - результат выполнения? | Кулик Алексей aka kpblc | Программирование | 11 | 28.03.2007 13:13 |