|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
В дополнение сказанному hwd - я вижу только одно "разумное" дополнение автолиспа - которое сделать сможет только автодекс - т.к. ни какой встроенный функционал такого не может - сделать интерфейс с Net (наподобие как в свое время добавили возможность работать с com объектами), вот это "реально" будет интересно - а всякие библиотеки примочки реализующие отдельные API это дело бессмысленное и бесконечное. Ну а если они еще и сам лисп "облагородят" (замыкания, макросы, отложенные вычисления, классы (хотя если сделать предыдущие вещи они (классы) будут нужны только для "приходящих" из ООП) и прочие "современные" фишки (хотя разрабатывались они 50-30 лет назад)) - то это вобще будет настоящий праздник (по крайней мере лично для меня).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
1. (nc-get-object "путь_к_сборке" "полное_имя_класса") - создает объект указанного класса и возвращает дескриптор (например целочисленный). 2. (nc-invoke-method дескриптор "имя_метода" список_аргументов) 3. (nc-get-property дескриптор "свойство") - возвращает атомарное значение. 4. (nc-set-property дескриптор "свойство" значение) - устанавливает атомарное значение. 5. (nc-release-object дескриптор) - уничтожает объект. Ограничения будут касаться только типов передаваемых и возвращаемых параметров - строки, целые числа, действительные числа и логические T и nil.
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Offtop: Да простит меня автор топика
То Пастор - все верно но есть одно существенное НО - которое перечеркивает всю красоту Вашего предложения (которое действительно вполне возможно написать + "конверторы" типов) - загрузите Вы, например System.Windows.Forms - "нарисуете" что угодно - а как на "кнопочку" действие повесите? лямбду (функцию) передать текущая модель не позволяет - только в виде строки - то есть надо парсинг лиспа СВОЙ писать (ну или тупо отправить его как есть в командную строку), но здесь велика вероятность что автокад просто в "удачный" момент вылетит (т.к. не поддерживает многопоточности), в vl придумали чудо называемое "реакторами" - которые работают ТОЛЬКО сами с собой - ни с какими "внешними" объектами - то есть по сути придеться целиком новый лисп писать - а в чем тогда смысл - проще готовый взять. Без помощи автодеска (своими силами) возможно только запуск функции без аргументов (ну или с фиксированными - что одно и тоже) - чтобы она сама "внешние" данные читала и исходя из них что-то делала - мне "такой хокей не нужен" - я быстрей на C# (никому не в обиду - это мои личные тараканы и предпочтения - язык хороший - с каждым годом все "человечней" становится и дальше от С уходит) буду писать чем на таком "недолиспе".
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
инженер Регистрация: 15.09.2009
Брест
Сообщений: 55
|
Интересное решение предлагает господин из manusoft
Автоматический загрузчик AutoLisp http://www.manusoft.com/resources/ar...ndloadvlx.html LspLoad.arx переименовываем в наш проект .vlx и тогда функция (GetPathOfXXXXX) ГДЕ XXXXX - базовое имя модуля. и вызвав ::GetModuleFileName( _hdllInstance, szPath, MAX_PATH ); Мы получаем что хотели. Все гениальное просто. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Не понимаю всех этих сложностей, если можно просто в файл acaddoc.lsp поместить набор инструкций для загрузки требуемых VLX-файлов.
Файл acaddoc.lsp кладется в некоторую директорию - общий корень для всех подгружаемых приложений. Корневой каталог любого приложения является непосредственным подкаталогом общего корневого каталога. Путь к общему корневому каталогу регистрируется в качестве пути поддержки AutoCAD (один единственный; то, о чем писал hwd в посте №17). Тогда каждая инструкция загрузки vlx-модуля будет выглядеть следующим образом: Код:
Код:
Offtop: Для Дима_. Речь не идет о использовании объектов любых классов из любых сборок. Речь идет об использовании объектов классов, спроектированных для нужд лисп-приложений под AutoCAD и находящихся с соответствующих (самодельных ![]() Эти сборки могут не использовать библиотеки AcMgd.dll и AcDbMgd.dll, т.е. гарантированно быть пригодными для любых современных и будущих версий AutoCAD. А могут и ссылаться на указанные библиотеки, и тем самым, ничем не отличаться от "штатных" .NET приложений для AutoCAD за исключением механизма их загрузки/использования.
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 19.06.2011 в 13:08. |
|||
![]() |
|
||||
инженер Регистрация: 15.09.2009
Брест
Сообщений: 55
|
Для того чтобы использовать findfile необходимо добавить папку с AutoLisp ом в Support File Search Path
это хорошо когда у вас небольшой один проект где Lisp файлы в одном месте. Но когда количество увеличивается возникают проблемы. Наверное даже есть ограничение на Support File Search Patch Замечал что добавляешь пути к <Support File ... > а в следующий сеанс часть путей пропало. Решение предложенное господином Mansur Mamkin ым очень красивое и изящное : 1. При установки своего приложения Autolisp имея заглушку arx можно создать автоматический загрузчик не вмешиваясь в acaddoc.lsp или acad.lsp причем загружаются не только файлы в текущей директории а все вложенные файлы. 2. имеем доступ к файлам и ресурсам программы не используя findfile тк имеет некоторое неудобство выше указанное. Кстати Мансур Мамкин припоминается написал функция для autoLisp вызов функции из любой DLL с произвольным количеством и произвольными типами данных. Достойная библиотечная функция увеличивающая возможности AutoLIspa. |
|||
![]() |
|
||||
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Цитата:
Я у своих пользователей убиваю такой шлак, даже не берусь его изучать/править, т.к. проще самому решение написать, чем за кем-то подчищать его хвосты (ещё и не факт, что написанные без ошибок).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Offtop: Боюсь это не только Ваша "проблемма" ИХМО 90% лисптописателей считают "свои" стандарты самыми правильными - и старательно изобретают велосипеды - по моему порядка здесь никогда не будет по причине "мультипрагмидности" (причем каждая в отдельности реализованна серединка-на-половинку) языка и как следствие - огромному диапазону уровней программирования (начиная с командных методов и до...)
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
кто "вы" и какой "фигней"?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DwgRuLispLib: Функция открытия диалога Open\Save As файла (файлов) | Supermax | Библиотека функций | 20 | 14.03.2018 10:05 |
написать программу-листинг в AutoLisp | students | LISP | 31 | 23.05.2011 23:47 |
Autolisp функция как аргумент другой функции | xsakabsx | LISP | 9 | 17.12.2010 14:15 |
структурированный список | Holon | Программирование | 22 | 11.09.2007 14:09 |
Написать текст (autolisp) | Torero | LISP | 2 | 23.10.2004 23:53 |