eManual.ru - электронная документация
Секция 1 из 3 - Предыдущая - Следующая
Все секции
- 1
- 2
- 3
Reini Urban
comp.cad.autocad AutoLISP ЧаВо
Частозадаваемые Вопросы об автолиспе
comp.cad.autocad AutoLISP FAQ
Название: comp.cad.autocad AutoLISP FAQ
Название файла: CAD/autolisp-faq
URL: http://xarch.tu-graz.ac.at/autocad/news/faq/autolisp.html
Версия: 2.1
Изменения от: 20 Янв. 1999
Posted-By: Reini Urban <rurban@xarch.tu-graz.ac.at>
Обновление: ежемесячно
Права: см. Приложение [А]
Добро пожаловать на comp.cad.autocad AutoLISP FAQ!
AutoLISP - встроенный язык AutoCAD, общеизвестного CAD-пакета.
Этот AutoLISP FAQ зарегистрирован в comp.cad.autocad, alt.cad.autocad и
распространяется еженедельно.
Существует еще один AutoCAD FAQ - на http://www.autodesk.com/support/faqs/faqs.htm
но он не зарегистрирован в comp.cad.autocad.
В данном FAQ рассматриваются все версии AutoLISP, начиная с версии для AutoCAD R10, кроме этого включает в себя информацию о Visual Lisp, Vital Lisp и ACOMP.
Это не группа новостей посвященная AutoLISP. Пожалуйста на путайте с comp.lang.lisp!
Все исходные тексты данного ЧаВо смотрите в FAQ-CODE.LSP
(чтобы узнать где находится см.: [A.1]).
Благодарю всех кто содействовал в составление данного документа. Исправления и пополнения присылайте по адресу rurban@sbox.tu-graz.ac.at, всегда рад.
(В данном документе приняты следующие обозначения для | изменений, как
+ новое в тексте, а примечания и замечания заключаются в <..>)
Оглавление
Часть 1: Общая
[0] Будущее AutoLISP? Что я должен изучать LISP или VB ?
[1] Где найти AutoLISP программы в Интернет? [изменения]
[1.1] Сохраняются ли статьи из comp.cad.autocad где-нибудь?
[1.2] Autodesk's SDK
[2] Лучшие книги для изучения AutoLISP.
[2.1] Интерактивная AutoLISP документация, Winhelp [удалён]
[2.2] Стиль программирования в AutoLISP
[3] Как мне отладить AutoLISP программы?
[3.1] AutoLISP-отладчики
[3.2] Модульный стиль, TRACE
[3.3] функция BREAK, печать отладки
[4] Как защитить мои программы AutoLISP? Безопасность
[4.1] Kelvinate
[4.2] Protect
[4.3] Kelvinate and Protect
[4.4] Convert
[4.5] ACOMP
[4.6] Vital LISP Professional
[4.7] Lisp2C
[4.8] Visual Lisp от Autodesk
[5] AutoLISP - компиляторы
[5.1] ACOMP
[5.2] Vital LISP Professional
[5.3] Visual Lisp от Autodesk
[6] AutoLISP редакторы и другие инструментальные средства
[6.1] AutoLISP редакторы
[6.2] Программы проверки круглых скобок
[6.3] Форматирование исходного текста
[7] Проблемы и ошибки в AutoLISP
[8] Сортировка в AutoLISP
[9] Рекурсия
[10] Итерация с использованием MAPCAR, ...
[11] Мой LISP больше не загружается при запуске
[12] Как сделать чтобы мои программы загружались автоматически (AUTOLOAD)?
[13] Как передать разное количество аргументов одной и той же функции LISP?
[14] Как мне избежать переполнения стека?
[15] (command "ROTATE3D") не работает! Почему?
[16] Программы LISP, работающие с несколькими чертежами.
[17] Как экспортировать функции из Visual Lisp в AutoLISP/AutoCAD?
Часть 2: Примеры, код.
[20] Общие функции
[20.1] Обработка списков
[20.2] Обработка строк
[20.3] Символ - > строка
[20.4] Доступ к примитивам AutoCAD
[21] Примеры Lisp программ:
[21.1] Изменения параметров текста и полилиний, утилиты для работы со слоями и установка даты
[21.2] Диалог вывода на печать из LISP. Использование DDE и ActiveX.
[21.3] (entmod) и (entmake) Слои, без (command "_LAYER"...)
[21.4] Как выбирать множество файлов в LISP? (как в FILES - Unlock)
[21.5] Замена нескольких блоков
[21.6] (vports), VIEWPORT примитив, преобразование пикселей
[21.7] Выбор всех видимых объектов: координаты масштабирования
[21.8] Как записывать XYZ данные выбранных объектов в файл?
[22] Атрибуты блоков
[22.1] Как обращаться к атрибутам блоков?
[22.2] Как модифицировать атрибуты блоков? DATESTAMP.LSP
[22.3] Как сделать UPDATE (обновление) атрибутов блоков?
[22.4] Как сделать ENTMAKE Сложного Блочного Объекта в AutoLISP
[23] Полилинии
[23.1] Как получить доступ к VERTICES (узлам) полилинии?
[23.2] Как объединить несколько линий в полилинию?
[23.3] Изменения толщину нескольких полилиний?
[23.4] Создание полилиний или сплайнов: с использованием (ENTMAKE) или (COMMAND)
[23.5] Как вычислить ДЛИНУ полилиний?
[23.6] Как изменить направление полилинии?
[24] Немного тригонометрии для скругленных сегментов
[25] DCL: диалоговые списки (listboxes) с метками табуляции или монотекстовым шрифтом
[26] EED Расширенные Данные Примитива (Extended Entity Data): Получить и Сохранить
[26.1] Выбор объектов по их EED с использованием (ssget "X")
[26.2] Получение EED из объекта
[27] Как прервать команду в LISP?
[28] Как декодировать внутреннюю геометрию ACIS с помощью LISP?
--
[A] Замечания от авторов
[A.1] Местонахождение ЧаВо (FAQ)
[B] Благодарности
[C] Последние Изменения
[0] Будущее AutoLISP. Должен ли я изучать LISP или VB ?
AutoLISP, определенно, будет поддерживаться в будущих версиях AutoCAD.
VB был представлен, чтобы упростить Автоматизацию делопроизводства: ACAD <-> Excel/Access.
Оба языка имеют свои достоинства и недостатки. Рекомендуется ознакомиться с обоими.
VB более графический а AutoLISP более логичный..
Объектная концепция VBA, кажется, проще для изучения, но Вы не можете выполнять в нем команды как в AutoLISPе.
Новый VBA (в R14.1) чрезвычайно быстр. См. также [5.2].
Будущее AutoLISP в работе с Visual Lisp.
Для более подробной информации см. [5.3]
[1] Где найти AutoLISP программы в Интернет?
Некоторые большие сайты, посвященные shareware для AutoCAD:
CADalog - The AutoCAD Shareware Clearinghouse (Mike Clark)
http://www.cadalog.com/
Rolling Stock Software (David Whynot)
http://www.cadsyst.com/
Они специализируются на программном обеспечении для AutoCAD и имеют очень хорошие AutoLISP-коллекции. URL ардеса других AutoLisp коллекций можно найти в различных группах новостей.
Другие места с AutoLISP коллекциями:
xarch AutoCAD Info & Tools (Reini Urban)
http://xarch.tu-graz.ac.at/autocad/
(with search)
CADalyst magazine code (compiled by "Hot Tip Harry" Art Liddle) [fixed]
http://www.cadonline.com/cadfile.htm
CADENCE magazine code (Peter Sheerin) [old, fixed]
ftp://ftp.mfi.com/pub/cadence/
AutoCAD Tech Journal code (Peter Sheerin) (old)
http://www.atj.com
The CADshack (Jeff Foster)
http://www.cadshack.com/lispfile.htm
SimTel - Coast To Coast - Archive (mostly old stuff)
http://www.coast.net/SimTel/msdos/autocad.html
http://www.coast.net/SimTel/win3/cad.html
Bob Jones (broken link)
http://www.io.com/~bcjones/files.html
PIRS Online (tm) [starting a new service at 15.Jan 99]
http://www.insa.com/
Henry Francis
http://www.ez-sys.net/~coopfra/
Owen Wengerd
http://www.manusoft.com
Desi Moreno
http://www.invsn.com/desmos/autolisp.htm
Dr.Lisp Utilities (Alexander Medwedew)
http://tribeca.ios.com:80/~compvent/drlutils.html
UCCB AutoCAD and AutoLISP page (Paul Standing)
http://ucad1.uccb.ns.ca/acad/cad.htm
Theo L.A. Groenenberg [fixed]
http://members.xoom.com/acadvice/autolisp.htm
McNeel's lisp archive
ftp://ftp.mcneel.com/lisp/
Lisp Factory
(Jay Garnett) [new]
http://members.tripod.com/~spotter10/autolisp/
На http://www.autodesk.com/support/autocad/ находятся документы Autodesk Product Support отвечающие на технические вопросы. (Их FAQ's)
[1.1] Сохраняются ли статьи из comp.cad.autocad где-нибудь?
Не имеется никакого архива comp.cad.autocad, но существуют некоторые поисковые машины, которые сохраняют статьи из новостей.
В частности:
http://www.dejanews.com/ -
Крупнейший архив новостей
Непосредственно из http://search.dejanews.com/dnquery.xp?query=~g%20comp.cad.autocad
http://www.altavista.com/
http://www.altavista.digital.com/cgi-bin/query?pg=aq&what=news
http://www.excite.com/
http://www.excite.com/search.gw?collection=news
http://www.phoaks.com/phoaks/comp/cad/autocad/
перечень Web ресурсов
Некоторые особые новости также сохранены на
http://xarch.tu-graz.ac.at/autocad/news/contents.html
[1.2] Autodesk's SDK
До AutoCAD R12 SDK было доступно непосредственно от Autodesk. SDK2 поставлялись с международной версией AutoCAD R12 бесплатно. Эти SDK включали в себя много ADS и AutoLISP исходников и библиотек.
С AutoCAD R13 Autodesk обеспечивает специальную сеть разработчиков, сравнимую с Микрософт, - ADN. Новый компакт-диск (CD) c SDK сопоставим со старым SDK, но преимущественно предназначен для ObjectARX разработчиков.
Войдите в контакт с Вашим близжайшим представителем Autodesk для получения.
Некоторые LISPы есть на http://xarch.tu-graz.ac.at/autocad/code/adesk/SDK2/
В США, членство в ADN стоит $ 495.00 ежегодно.
+ [2] Лучшие книги для изучения AutoLISP.
AutoLISP: Programming for Productivity,
William Kramer, Autodesk Press, ISBN 0-8273-5832-6
Essential AutoLISP,
Roy Harkow, Springer-Verlag, ISBN 0-387-94571-7
AutoLISP in Plain English; A Practical Guide for Non-Programmers,
George O. Head, Ventana Press, ISBN: 1566041406
"Maximizing AutoLISP"
Rusty Gesner, Tony and Mark Middlebrook, Tony Tanzillo.
Новая Maximizing AutoLISP R13/R14 будет опубликована рано или поздно.
Но книга о R12 book все еще является рекомендуемой покупкой хотя её уже довольно трудно найти.
Подробнее на http://www.group-a.com/~rusty/
"AutoLISP Reference Manual"
by Autodesk Press.
"AutoLISP Reference Manual" от Autodesk Press.
До AutoCAD R12 существовал отдельный AutoLISP-Справочник. Затем AutoLISP стал частью Руководства Настройки для R13. С R14 это руководство скомпилировано как Winhelp.
Помимо этого есть еще много книг о AutoLISP.
Рекомендуемые книги по LISP (не AutoLISP!):
ANSI Common Lisp, (Common Lisp primer)
Paul Graham, Prentice Hall, ISBN 0-13-370875-6
Structure and Interpretation of Computer Programs, (high-level Scheme) [new]
H.Abelson, GJ. Sussman, J. Sussman, MIT Press, ISBN 0-262-01153-0
LISP, 3rd Edition,
Patrick Henry Winston and Berthold Klaus Paul Horn, Addison-Wesley Publishing Company, ISBN 0-201-08319-1
Looking at LISP,
Tony Hasemer, Addison-Wesley Publishing Company, ISBN 0-201-12080-1
[2.1] Интерактивная AutoLISP документация, Winhelp [был удален в предыдущей версии]
Все руководства по R14 преобразованы в формат Winhelp.
Существующие AutoLISP Winhelp файлы можно найти с:
R14 (целый набор)
Visual Lisp от Autodesk preview, см. [5.3]
старым Visual Lisp редактором (1.0 - бесплатный), см. [1]
Vital LISP, ('справка' (help) поставляемая и с демо версиеи), см. [6.1]
Для DOS существует резидентная программа - LISPHLP.EXE
(активируется Ctrl-RightShift-R, 1988)
LSPDOC: At http://xarch.tu-graz.ac.at/autocad/lsp_tools/#lspdoc - это утилита которая автоматически создает Winhelp для LISP файлов.
[2.2] Стиль программирования в AutoLISP
Большинство примеров, которые напечатаны в журналах или размещены на различных сайтах Web написаны ужасно, делая процесс обучения AutoLISP даже тяжелее для новичков. LISP-код должен легко читаться, во всяком случае из-за его краткости и бесчисленного числа круглых скобок. Текст программ Autodesk всегда понятно написаны иногда даже слишком. :)
Автоматические форматировщики, или так называемый beautifiers (см.[6.3]) автоматически форматируют код согласно стандарту.
На R12 CD-ROM в SDK2 ACG.DOC или на
http://xarch.tu-graz.ac.at/autocad/docs/acg.txt находится превосходная документация Autodesk относительно кодирования, комментирования и международных стандартов для обеспечения удобства читаемости LISP-кода.
Наиболее важные пункты:
Комментируйте ваш код.
используя ";;; " в 1 строке, ";; " внутри кода ";" для конечных комментариев (в строке 39)
Следуйте за стандартами выравнивания что дает автоматическим форматировщикам лучше записать структурный код, чтобы он стал более читаемым.
Особенно это важно для SETQ, DEFUN, IF, COND, PROGN
Старайтесь избегать глобальных переменных. Если Вы используете их (для эффективности), то пометьте их, поместите их между звездочками, например: *GLOBAL*
Не забудь объявить переменные (после "/" в списке параметров DEFUN). Для отладки их можно не помещать (временно).
Всегда располпгаете первым символ подчеркивания в любой строке (команде и опции) которые передаются в COMMAND и OSNAP. Имеются много коммерческих программ, которые не работают в международных версиях. (command "_PEDIT" ss "_J") лучше чем (command "PEDIT" ss "J")
Защита имен: с тех пор как AutoLISP не обеспечивает никакой защиты пространства имен, легко перезаписать системные функции. Используйте уникальные короткие префиксы по крайней мере, когда Вы публикуете или отдаете ваш код.
Я использую UR- для функций и UR: для переменных. ADGE и Autodesk требует даже 4 префиксных символа. Так Ваши имена будут защищены от перезаписывания другими функциями.
Всегда используйте символ подчеркивания с строками (commands and
options) передаваемым COMMAND и OSNAP. Итак много коммерческих программ не работающих в международных версиях. (command "_PEDIT" ss "_J") лучшее чем
(command "PEDIT" ss "J")
Не используй слишком много SETQ: LISP был первоначально языком функций, без любых переменных. Имеются достаточно конструкций которые работают эффективно со списками без потребности немедленного сохранения значений в переменных. (См. пример кода [21]...)
Но для удобочитаемости и целей отладки Вы должны всегда устанавливать переменные.
В старом LISP было правило: Любая хорошая функция не дольше быть больше 6 строк.(LISP - второй самый старый компьютерный язык, он изобретен Джоном McCarthy в MIT в 1958)
Предпочтительно используй CONS вместо APPEND: три CONS, и один REVERSE лучше чем APPEND. Для приемов с конкатенированием (опущением nil) смотрите esp. Serge's тексты: например удаление в [20.1] или сравнение стиля в [23.1])
Используйте английские символы и комментарии
Не используйте T, MIN, MAX или LAST как переменные! Это функции системы!
[3] Как мне отладить программы на AutoLISP?
[3.1] AutoLISP-отладчики:
ACOMP для R10, распространяется бесплатно. Вы можете его использовать и для более поздних версий но возможности будут ограничены R10 версией, например не поддерживается WCMATCH функция.
Vital LISP Professional поддерживают IDE (это лучший!).
Ld, AutoLISP Debugger для R14, R13c4 и R12/Dos от Cz (новый и бесплатный)
at http://www.cadstudio.cz/ftp.htm
См. [5] AutoLISP компиляторы
[3.2] Модульный стиль и функция TRACE
Лучшая поддержка, которую Вы можете иметь для отладки - это запись вашего кода в хорошо разработанном, модульном стиле, выделяя различные задачи в отдельные функции и затем свободно использовать вложенные вызовы функций. Это позволит Вам использовать функцию TRACE что необходимо, чтобы обнаружить любые ошибки.
[3.3] Вы можете включить функцию BREAK и отладочный-вывод в свой исходный текст.
Примеры:
;;; Отладочные функции
(defun break (s)
(if *BREAK*
(progn
(princ "BREAK>> (stop with )nBREAK>> ")(princ s)
(while (/= (setq s (getstring "nBREAK>> ")) "")
(print (eval (read s))))))) ;исправлена v1.3!
(defun dbg-print (s) ;принимает и атомы и списки
(if *DEBUG*
(if (listp s)
(MAPCAR 'print s)
(print s))))
(defun C:DEBUG () (setq *DEBUG* (not *DEBUG*))) ;переключатель вкл./выкл.
(defun C:BREAK () (setq *BREAK* (not *BREAK*)))
(defun CONT () (setq *BREAK* nil)) ;продолжать не прерываясь
;;;Пример
(setq *BREAK* T *DEBUG* T)
(defun C:TEST ()
(foreach x '("1" "1.0" "1e-3")
(break "in foreach") ; останавливает если *BREAK* вкл., Вы можете
; задать значение x и будет выводиться его значение
; пока не введете Enter
(setq x (atof x)) ; это код обработки x
(dbg-print x) ; вывод нового значения x
; если *DEBUG* - вкл.
)
)
Command: TEST
BREAK>> (stop with )
BREAK>> in foreach
BREAK>> x
1.0
BREAK>> (CONT) ; отключить функцию break
nil
BREAK>>
1.0
1.0
0.001
Вы можете также выключить отладочный-вывод
BREAK>> (setq *DEBUG* nil)
чтобы проскочить большие циклы.
[4] Как мне защитить свои AutoLISP программы?
"Вы действительно нужно защитить их?
Если Вы хотите распространить код среди своих друзей, то почему бы просто не отдать им код? Ваш исходный текст в любом случае защищен авторским правом.
Работая с другими Вы получаета возможность получения новых идей и писать более совершенные программы.
Многие из моих утилит были улучшены моими друзьями, а я улучшил многие их утилиты." (Dennis)
[4.1] Kelvinate
С помощью KELV.EXE (можно найти на R12 CD-ROM или на AutoLISP сайтах
[1])
'де-кельвировать' лиспы можно любым форматировщиком кода.
Но имена (переменные) будут в изменненном виде и будут утеряны примечания.
[4.2] Protect
С помощью PROTECT.EXE (можно найти на R12 CD-ROM или на AutoLISP сайтах
[1])
Хочу обратить внимание, на то что существуют и сниматели защиты (unprotect).
[4.3] Kelvinate and Protect
Сначала kelvinate делает код нечитаемым, и только после этого защищает его.
[4.4] Convert 3.5
Shareware Lisp Шифровщик/Дешифровщик от Maciej Lukasiewicz
Больше не нужно использовать Decryptor v2.0. С помощью Convert
зашифрованные "Protected Lisps" не могу быть расшифрованы с помощью других программ, хотя сам Convert может это сделать.
[4.5] ACOMP
AutoLISP компилятор ACOMP.EXE,
найти можно с R12 international release или на AutoLISP сайтах. Распространяется бесплатно.
Более подробную документацию о ACOMP см. на http://xarch.tu-graz.ac.at/autocad/bi4/
Также см. [5.1] AutoLISP компиляторы
[4.6] Vital LISP Professional
http://www.basissoftware.com/vill.htm
Читай "ViLL". Очень дорогой. См. [5.2] AutoLISP компиляторы
[4.7] Lisp2C
Из LISP в C конвертер, для R12/R13 Dos/Win (Watcom, Metaware, MSVC Libs)
Вам нужен компилятор C.
http://www.basic.si
[4.8] Visual Lisp от Autodesk
Читай "vlisp". Будущее автолиспа. См. [5.3]
FAS Безопасность:
Недавно в группах новостей было широкое обсуждение , начатое Tony Tanzillo, по поводу FAS безопастности.
FAS оказлся более защищенным чем ARX, т.к. сначала кодируется а потом компилируется. C и Java декомпиляторы существуют а LISP-ых пока нет. Имена переменных, строчные и цифровые значения являются более незащищенными чем сам алгоритм. Откомпилорованный код в FAS с опцией Optimized/Internal не сохраняет имена переменных.
Вывод:
Серьезное шифрование теперь обеспечивается Autodesk, чтобы помочь профессиональным AutoLISP-разработчикам. Kelvinate [4.1] делает LISP файлы нечитаемыми и быстрее загружаемыми. Protected [4.2] - легко расшифровывается. Другие не расшифровываются. Если LISPы зашифрованы Convert -e$GUARD, то могут быть расшифрованы только с её же помощью.
[5] AutoLISP компиляторы
Рассматриваться будут три AutoLISP компилятора. Может вскоре появяться более совершенные (Allegro CL и Lispworks для Windows с поддержкой ActiveX)
[5.1] ACOMP
ACOMP поддерживался вплоть до R12 только для международных версий. Распространяется бесплатно. Бесплатен, но не работает ни с R13, ни с R12/Win.
Он создает *.BI4 файлы и нуждается специальный ACADL.EXP поставляемый как ACADLC.EXP. См. http://xarch.tu-graz.ac.at/autocad/bi4/
Предупреждения компилятора более явные на локальных переменных чем у ViLL/VLisp.
[5.2] Vital LISP Professional
от Basis Software Inc. USA. Просто - лучший.
Бесплатные, для лицензированных пользователей, runtime модули для R12/R13/R14 DOS/Windows/NT
См. http://www.basissoftware.com/vill.htm
Некоторые дилеры все еще имею на складе.
Последняя версия - 3.2. Версия для R14 (ViLL 3.x) включает в себя ActiveX
(как VB) и поддерживает 'реакторы'.
См. также [6.1] и [4.6]
[5.3] Visual Lisp от Autodesk
vlisp, является пеемником Vital Lisp, в основном то же что и vill 3.2.
Были изменены только интерфейс пользователя (GUI), некоторые имена функций и файлы справки:
vill- => vlisp-, vlx- => vl- префиксы. Некоторые vlax- функции имеют больше дефисов.
Basis навсегда прекратила разработку Vital Lisp, так что теперь Visual Lisp является их преемником и будущим AutoLISP.
Стоимость - около $100. Ограниченная временем (time-delimited) демонстрационная версия доступна на http://www.autodesk.com/products/acadr14/compapps/vlisp.htm
Скачать прямо сейчас можно на http://www.autodesk.com/products/acadr14/compapps/vlisp.htm
VLX являются FAS файлами с дополнительными DCL ресурсами, используемыми R15 или пользователями с уже загруженными runtime модулями.
Вывод:
AutoLISP компиляторы нуждаются в модулях поддержки выполнения(runtime).
Вы не можете создавать автономные программы, хотя ViLL/vlisp генерирует автономный ARX. Искомый текст шифруется. Будущие AutoCAD релизы будут поставляться с системными исплняемыми модулями (vlisp runtime system), чтобы распространялись только FAS файлы или VLX проекты.
[6] AutoLISP редакторы и прочие утилиты
[6.1] AutoLISP редакторы
Visual Lisp от Autodesk
См.[5.3].
Лучшее из рекомендуемых средств.
Vital LISP
Упрощенная Версия (Lite Edition) (только редактор) стоит около $50, Стандартная Версия (+ отладчик) - $350 и Профессиональная Версия (+ компилятор, расширения) - $675.
Обладая Стандартной Версии Вы имеете превосходный инструмент.
См. [5.2] AutoLISP компиляторы
LispPad
AutoLISP Editor от Tony Tanzillo.
http://ourworld.compuserve.com/homepages/tonyt/LispPad.htm
LispLink
AutoLISP Editor.
См. http://www.flash.net/~caelink/ll14_desc.html
Visual Lisp от WSSW
Старый небольшой Windows Lisp Editor. Версия 1.0 абсолютно бесплатная.
См. [1]
WCEDIT 2.02
ADS редактор для DOS R12, может оценить lisp код из редактора,
распространяется бесплатно.
See [1]
CODEKEY
старый коммерческий DOS IDE, внутрений форматировщик кода, шифровка, расшифровка, kelvinator, <доступность?>
ALLY 3.0 и CADET
Shareware Lisp Анализатор(Analyzer) и Редактор (Editor).
См. [6.2]
pred
бесплатно распространяемый, маленький DOS редактор который осуществляет выделение скобок.
На ftp://xarch.tu-graz.ac.at/pub/autocad/lsp_tools/pred.zip
Аналогичный этому - редактор ADE.
Emacs для NT
Громозский и тяжелый в обучении использования редактор, зато написан и расширяемый в lisp.
Бесплатен, для всех платформ.
Смотри на
http://xarch.tu-graz.ac.at/autocad/lsp_tools/ntemacs.html
Также широко используются различные, настраиваемые, редакторы для ппрограммистов, такие как MultiEdit Pro 7, WinEdit, E! или PFE.
Как правило они не поддерживают ни Lisp синтаксис, ни форматирование кода, но поддерживают multi-файловый поиск/замену и имеют настраиваемое выделение синтаксиса.
Существуют и другие не такие хорошие редакторы (ADE), но я не имею их описания.
[6.2] Средства проверки соответствия круглых скобок
Средства проверки соответствия круглых скобок можно больше не использовать.
Редакторы должны уметь это делать.
ALLY30.ZIP
Shareware LISP анализатор. Проверяет синтаксис и выводит статистику
(в соответствии со структурой функций), на [1]
lck21b.zip
LCK LISP Checker 2.1b (графический)
paran.zip
Простой
PARNCH.ZIP
Простой
Существуют AutoLISP программы которые подсчитывают скобки.
[6.3] Форматировщики кода
Внешние:
FMT202S.ZIP
Lisp, DCL и FRM форматировщик исходного текста
LB.EXE
Autodesk's форматировщики кода (source code beautifier).
Найти можно в SDK2 или см. [1]. Имеет проблемы с длинными строками, и новым-стилем в строчных комментариях.
PPRINT.LSP
Найти можно в SDK2 или см. [1].
Внутренние:
Visual Lisp, Vital LISP, Emacs и Codekey, насколько я знаю, содержат внутренние форматировщики кода.
[7] Проблемы и ошибки в AutoLISP (особенно в R13)
Не имеется почти никаких известных серьезных ошибок в AutoLISP. Интерпретатор Autolisp непосредственно (ACADL.EXE/.EXP) работает несомненно хорошо.
Некоторые ограничения основаны на принципах работы AutoCAD и Proteus(DCL). Некоторые программы LISP-поддержки (например DDMODIFY.LSP) часто дефектны.
По вопросам о Visual Lisp см. README.txt содержащий перечень всех известных ошибок и ограничений. Сбои при использовании реакторов являются ошибками автокада.
+ При предачи AutoLISP-ом в Visual LISP или обратно, списка аргументов содержащий ТОЧЕЧНЫЕ ПАРЫ, могут быть утеряны крайние члены.
См. Visual Lisp README (недокументированный Vital Lisp)
+ СПИСКИ С ОДНИМ АТОМОМ (SINGLE ATOM LISTS) возвращаются некорректно из ВНЕШНИХ ПРИЛОЖЕНИЙ (EXTERNAL APPS)
Visual LISP не понимает различие между СПИСОКОМ с одним атомом (элементом) и просто с атомом, возвращаемом из внешнего ObjectARX или ADS приложения.
ENTGET используемый с LWPOLYLINE, HATCH (только r14)
Координата Z (caddr (getval 10 ele)) - является случайным числом и часто вызывает ошибку с плавающей точкой, т.к. может быть как слишком малым, так и слишком большим числом..
См. также часть 2, п.[23.1]
ENTMAKE VERTEX от Terry Dotson (только r14)
Ошибка может случиться во время процесса использования (entmake), при создании полилинии, Вы должны назначить слой каждому из УЗЛОВ (VERTEX) (по инструкциям Autodesk), но оказывается что необходимо садать слой и для SEQEND. Отсутствие этого заставит SEQEND остановиться в текущем слое, который может быть позже заморожен. Попытка переместить этот фрагмент геометрии вызовет EREGEN ошибку и сбой самого R14 (только для этой версии).
ACAD_STRLSORT: Странный порядок сортировки в Windows.
Сортировка символов в Windows не соответствует ASCII правилам!
Зависит текущей кодовой странице (getvar "SYSCODEPAGE") котроая не является одинаковой для разных языков.
Windows: (acad_strlsort '("-1" "+1")) -> ("-1" "+1"),
DOS: (acad_strlsort '("-1" "+1")) -> ("+1" "-1")
Both: (mapcar 'ascii ("-" "+")) -> (45 43)
Более подробно см. http://xarch.tu-graz.ac.at/autocad/docs/strlsort-bug.html
AI_PROPCHK
(ai_propchk) переименовался в (C:AI_PROP) в R13c3 обновлении.
"Функция AutoLISP ai_propchk заменена на c:ai_prop
так чтобы она работала как и другие комманды.
Это позволяет нажатием ENTER возобновлять действие комманды DDMODIFY если сначала она была вызвана из панельки инстр.(toolbar)."
См. http://www.autodesk.com/support/techdocs/td11/td111682.htm
Дефектные обратные вызовы в R13 DCL-коде приводят к краху AutoCAD
Имеется ошибка в R13/R14, где AutoCAD терпит крах с Фатальной Ошибкой если ошибка происходит в AutoLISP коде в течение обратного вызова из полоса прокрутки (слайдера) в диалоговом окне. Например, если Вы попробуете вычислить нулевую функцию во время обратного вызова, AutoCAD терпит крах немедленно. Технически, это не ошибка AutoLISP интерпретатора, но все равно считается AutoLISP-ошибкой.
Вы не можете полагаться на значение бита 64 в флаге 70 в символьных таблицах. Не только в R13, но и во всех предшествующих версиях.
Что еще? См. неофициальный перечень ошибок AutoCAD поддерживаемый Steve Johnson для большинства дефектных программ AutoLISP, http://www.awa.com/nct/software/13bug04.html
(esp: 33, 124, 126, 127, 139, 153, 158, 165, 176, 182, 192, 193,
238, 240, 254, 272, 295)
Защищенные лисп файлы
В предварительной версии pre-c4 R13 защищенные LISP файлы небыли защищены в памяти.
По нашему мнению, с этой проблемой должны быть ознакомлены все, т.к. разработчики полагают что их "защищенный код" не защищен от посторонних глаз.
Эта FAQ тема вызвала большой переполох на AutoCAD Форуме CompuServe.
Ограниченное число открытых наборов (selection sets)
Они сохраняются во временных файлах. Избавьтесь от ненужных наборов установив их переменные в nil и выполните (gc), сборщик мусора, который затем фактически закрывает эти файлы.
Максимальное число зависит от операционной системы, то есть в DOS число файлов - FILES= определяется в CONFIG.SYS.
R13 увеличил число.
Числа: диапазон, точность
Целые числа в АвтоЛИСПе работают как long ( 32-разрядные, со знаком), но от AutoLISP AutoCAD принимает только 16-разрядный short в диапазоне -32766 .. + 32767, т.к. AutoCAD работает только сним (short).
Числа с плавающей точкой являются double (64-разрадные IEEE). Все внуртренние AutoLISP и AutoCAD численные вычисления осуществляются в double формате, который является достаточно точным. По крайнее мере первые 14 разрядов десятичного числа точны.
Однако, во время выполнений геометрических сравнений часто случаются несоответствия, например при сравнениях:
(equal pt1 pt2 1e-6) ; 0.000001 ошибка погрешности вычисления
вместо (equal pt1 pt2), особенно это справедливо к действиям над углами.
См. http://www.autodesk.com/support/techdocs/td30/td301207.htm
ACOMP правила для (EQ)
К откомпилированной [5.1] ACOMPом программе нужно быть особенно внимательным, т.к. правила для (EQ) в BI4 более строгие чем в AutoLISP.
В AutoLISP (eq "1" "1") принимает значение T, а в компилированном acomp коде принимает значение nil
Далее перечисленны ошибки, которые приводят к краху AutoLISP либо возвращают ложные результаты. Они являются лишь следствием плохой реализации языка.
AND и OR AND и OR не должны возвратить значение NIL вместо T. См. http://xarch.tu-graz.ac.at/autocad/docs/and-bug.html
MAX и MIN должен обрабатывать строки, т.к. < and > принимает и обрабатывает строки.
См. выше ACAD_STRLSORT (сортитровка строк)
Об ошибках переполнения стека см.[14]
[8] Сортировка в AutoLISP
Обзор алгоритмов сортировки см. на
http://xarch.tu-graz.ac.at/autocad/lisp/#sort
В LISP обычно используют сортировку с объединением (использован в (str-sort) в примере TABLES.LSP от AutoDesk) потому что это естественный метод для связи списков. Обычно (например в C) вы используете сортировку методом кучи (heap) (для любых данных) или qsort (для случайных данных) и сортировку методом вставки для маленьких списков (<7) или подсписков внутри алгоритма.
Имеется LISP-коды для сортировки методами оболочки (shell), пузырьков (bubble), вставки (insertion), и быстрая сортировка (quick). Они доступны для любых данных, списков и индексов списков. В LISP Вы можете передавать предикатную функцию, чтобы jceotcndkznm сортировre, которая вычисляется как run-time (здесь называется 'метод' "method"). Именно поэтому Вам нудна только одна функция сортировки для различных типов данных (то есть чисел, точек, строк, ...)
(sort data method) ;метод: less-than-predicate
;числа по умолчанию: '<
Некоторые примеры см. на http://xarch.tu-graz.ac.at/autocad/lisp/sort/ur_sort.lsp:
сортировка 100 элементов:
bubble sort: 13.639008 сек/ 30.08%
insertion sort: 13.368042 сек/ 29.48% (быстрый для сортиров. списков)
shell sort: 13.478973 сек/ 29.73% (плохая реализация)
merge sort: 2.232971 сек/ 4.92%
quick sort: 2.433960 сек/ 5.37%
vlx-sort: 0.099976 сек/ 0.22% (Vital LISP встроенный)
acad_strlsort: 0.089996 сек/ 0.20% (AutoLISP встроенный, для строк)
[9] Рекурсия
Это - не часто задаваемый вопрос, а очень интересный момент в LISP,
потому что LISP, непосредственно определен рекурсивным, и это - часто
самый простой способ ясно сформулировать проблемы.
Существуют несколько прекрасных документов относительно рекурсий на
http://xarch.tu-graz.ac.at/autocad/lisp
, и особенно http://xarch.tu-graz.ac.at/autocad/lisp/recursive.html
Учебник от Dennis Shinn.
Там это объясняется более подробно:
(defun fact (n)
(cond
((zerop n) 1)
(T (* n (fact (1- n))))))
Примечания:
Обратите внимание: имеется также самоизменяющийся пример этой функции, см.
http://xarch.tu-graz.ac.at/autocad/lisp/self-mod.lsp
[10] Итерации с помощью MAPCAR, ...
То же самое что с рекурсией, это не часто задаваемый вопрос, но это необходимо знать.
Итерационные операторы в AutoLISP: WHILE, REPEAT, FOREACH и MAPCAR. Мы используем их широко в этом FAQ, потому что они позволяют сократить код.
Имеется пример короткого кода с LAMBDA, QUOTE, MAPCAR... от Vladimir Nesterowsky:
>> "There are 14 paths and 12 pigs.
>> How can there be 24 ducks?"
>> Имеется ли lisp-команда, которая позволит мне выбирать
>> строки текста, и распознают число(а) в каждой строке,
>> чтобы, скажем, увеличить каждое номер в два раза?
>> Оставляя структуру предложения неповрежденной?
Это - один способ. (Я уверен, что имеются много других способов)
(defun mult2 (strng) ; (c) by Vladimir Nesterowsky
(strlgather
(mapcar
'(lambda (s / n)
(if (zerop (setq n (atof s)))
s
(rtos (* n 2))))
(strlparse strng " ")) ; parse by spaces
" ")) ; gather back with spaces
пояснения на http://members.tripod.com/~vnestr/mapcar.txt
;;; перемещение строк и столбцов в матрице
(defun transpose (l) ; (c) by Doug Wilson
(apply 'mapcar (cons 'list l)))
пояснения на http://xarch.tu-graz.ac.at/autocad/lisp/transpose.002.html
Секция 1 из 3 - Предыдущая - Следующая
|