| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как из ObjectArx (.Net) вызвать функцию Лисп, передать в нее параметры и получить измененные параметры назад?

Как из ObjectArx (.Net) вызвать функцию Лисп, передать в нее параметры и получить измененные параметры назад?

Ответ
Поиск в этой теме
Непрочитано 15.04.2020, 18:15 #1
Как из ObjectArx (.Net) вызвать функцию Лисп, передать в нее параметры и получить измененные параметры назад?
nickname2019
 
Регистрация: 18.11.2019
Сообщений: 1,039

Требуется (в Autocad) вызвать из приложения ObjectArx (.Net и т.д.) внешнюю функцию на лиспе, передать в нее параметры:

1. Текстовый файл со списком переменных и значениями типа
[ключ1]значение1
[ключ2]значение2
и т.д.
2. Массив идентификаторов графических объектов, которые находятся в открытых документах Autocad.

После выполнения в качестве измененных параметров получить:
1. Измененный текстовый файл со списком измененных переменных и значениями типа
[ключ1]значение4
[ключ2]значение5
и т.д.
2. Массив идентификаторов измененных (ЛИСПовой программой) графических объектов, которые находятся в открытых документах Autocad.

Я вижу такой путь:
1. Договориться о наличии некоторой директории, куда до вызова функции лисп я сохраняю текстовый файл с определенным именем
2. В этот файл пишу переменные и их значения
3. Передаю перечень графических объектов как их хендлы в виде строк (пишу в этот же файл)
(handle().getIntoAsciiBuffer(...);
4. Вызываю лисп функцию, которая делает свои дела и возвращает мне результаты своей работы том-же самом формате, в этой же самой директории.

Т.е. разработчик лисп функции должен знать эти мои заморочки и лисп функцию писать с учетом этих формальных правил передачи параметров.

Есть ли какой способ сформировать эти параметры в памяти (типа resbuf и т.д.) и вызвать лисп-функцию по человечески?
Просмотров: 2166
 
Непрочитано 15.04.2020, 19:02
1 | 1 #2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 9,509


Извращайтесь )
Сергей812 вне форума  
 
Автор темы   Непрочитано 15.04.2020, 20:01
#3
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,039


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Спасибо. Попробую. Хотя не уверен, что это проще, чем путь, описанный в теме.
nickname2019 вне форума  
 
Непрочитано 15.04.2020, 21:10
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 38,413


Передать в качестве строки полный путь файла, потом его же прочитать и работать дальше - если невозможно переписать lisp на NET (в чем лично я сомневаюсь).
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.04.2020, 23:29
#5
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,039


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Передать в качестве строки полный путь файла, потом его же прочитать и работать дальше - если невозможно переписать lisp на NET (в чем лично я сомневаюсь).
На самом деле, дело не в конкретном коде. Я хочу решить (понять пути решения на данном этапе) проблему в общем случае - вызов из некоторого моего скрипта (произвольного) внешней функции, которая пишется юзером на языке, который ему удобен. Допустим, у меня есть скрипт, отрисовывающий балку, а юзер хочет, чтобы параметры армирования не задавались жестко, а брались из внешнего алгоритма, который у него реализован на каком-то другом языке (или даже в экселе).
Я спросил про Лисп, так как Лисп я вообще не знаю, но вижу, что у него есть устойчивое сообщество. Не факт, что обеспечение возможности вызова внешней функции именно лиспа будет для моего скрипта полезной функцией, на реализацию которой нужно потратить силы. (Говорят, что лисп не собираются дальше развивать.)
Варианты:
1. Я могу установить правило вызова только внешних exe файлов с передачей/возвращением параметров как указано в теме, а внешняя exe -программа может взаимодействовать с Autocad через интерфейс COM сервера (что суть тормоза при взаимодействии с акадом). Но это просто. Достаточно вызвать exe файл и дать в командной сроке путь к файлу с исходными данными - а юзер пусть сам пишет этот exe-файл (питон ему в помощь).

2. Я могу попытаться организовать вызов более "родных" автокаду технологий (lisp или .net) через создание стандарта некоторой функции с определенным набором параметров, которая бы обеспечивала прием-передачу параметров при вызове внешнего файла с кодом (lisp, net). В этом случае вызывается не exe, а исполняемый код.

В этом случае, пожалуй, наиболее перспективным вижу тот же вызов функции с передачей в нее только пути к текстовому файлу (как ты предложил), в который она после работы также пишет свои параметры в определенном формате (подобно xml).

Вопрос как к профессионалу лиспа: стоит ли дать возможность вызова именно лисп-функций? или это мертвая технология?

P.S. Ривилис снизу отписался , что это просто. Значит просто. Разберусь, отпишусь. Это неделя работы.

Последний раз редактировалось nickname2019, 15.04.2020 в 23:44.
nickname2019 вне форума  
 
Непрочитано 15.04.2020, 23:38
1 | #6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,375
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Всё намного проще при помощи Application.Invoke
Александр Ривилис вне форума  
 
Непрочитано 15.04.2020, 23:43
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 9,509


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Всё намного проще при помощи Application.Invoke
второй пост по ссылке...) Или вы что-то другое имели в виду?
Сергей812 вне форума  
 
Непрочитано 15.04.2020, 23:43
1 | #8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,375
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Вопрос как к профессионалу лиспа: стоит ли дать возможность вызова именно лисп-функций? или это мертвая технология?
Мне кажется сама идея, описанная в теме мертворожденной. Но настаивать на своей точке зрения, как и объяснять её не буду.

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
второй пост по ссылке...) Или вы что-то другое имели в виду?
Ты всё правильно написал. Я просто глянул на первый пост темы, в котором приведен мой код, написанный для AutoCAD 2007, когда еще не было Application.Invoke, и дальше уже тему не смотрел.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.04.2020, 23:48
#9
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,039


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Мне кажется сама идея, описанная в теме мертворожденной. Но настаивать на своей точке зрения, как и объяснять её не буду.
Спасибо. Вы реально крут. 90%, что я знаю про ObjectArx я учил по Вашим постам.
nickname2019 вне форума  
 
Непрочитано 16.04.2020, 06:16
#10
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 12,697


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
В этом случае, пожалуй, наиболее перспективным вижу тот же вызов функции с передачей в нее только пути к текстовому файлу (как ты предложил), в который она после работы также пишет свои параметры в определенном формате (подобно xml).
Подобное приходилось делать раньше, когда современных возможностей в Автокаде еще не было. Например, ещё в AutoCAD R10, да и в R14 тоже.
Делали какой-то exe, в котором было то, что невозможно в Автолисп - например визуальная работа с базой данных.

В exe передавался единственный параметр - имя INI-файла, в котором можно было записать любое количество "заданий". Там могло быть имя файла базы данных, имя таблицы и даже SQL-запрос к БД.

В этот же INI записывался результат, который читал Lisp.
Здесь главное

а) Уметь запускать EXE "модально"
б) Научить Lisp читать INI.

И даже сейчас такая связка применяется в случае работы с другими приложениями, не имеющими возможностей работы через COM. Например программа составления спецификаций оборудования может обратиться к Автокаду для вычисления "длин" или "штук". И наоборот. А может это будет совсем не Автокад, а какая-то другая программа.

Если же работать только с AutoCAD то нет никаких причин отказываться от его современных возможностей.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как из ObjectArx (.Net) вызвать функцию Лисп, передать в нее параметры и получить измененные параметры назад?

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# .NET Как получить координаты курсора? Shraybicus .NET 18 13.10.2011 21:25
LISP. Как вызвать VBA и передать в нее VLA-OBJECT IXMLDOMDocument3? LastGraff LISP 4 12.08.2011 15:41
Получить блок программно, не используя функцию entsel Nextk Программирование 23 16.12.2010 15:43
Как правильно вызвать функцию? paradoxvaha Программирование 7 09.07.2008 16:25
как получить параметры бумаги принтеров? ASLYS Программирование 1 21.04.2008 19:04