Секция 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] Последние Изменения
AutoLISP, определенно, будет поддерживаться в будущих версиях AutoCAD.
VB был представлен, чтобы упростить Автоматизацию делопроизводства: ACAD <-> Excel/Access.
Оба языка имеют свои достоинства и недостатки. Рекомендуется ознакомиться с обоими.
VB более графический а AutoLISP более логичный..
Объектная концепция VBA, кажется, проще для изучения, но Вы не можете выполнять в нем команды как в AutoLISPе.
Новый VBA (в R14.1) чрезвычайно быстр. См. также [5.2].
Будущее AutoLISP в работе с Visual Lisp.
Для более подробной информации см. [5.3]
Некоторые большие сайты, посвященные 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)
Не имеется никакого архива 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
До 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 ежегодно.
- 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
Все руководства по 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 файлов.
Большинство примеров, которые напечатаны в журналах или размещены на различных сайтах 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 как переменные! Это функции системы!
- 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 компиляторы
Лучшая поддержка, которую Вы можете иметь для отладки - это запись вашего кода в хорошо разработанном, модульном стиле, выделяя различные задачи в отдельные функции и затем свободно использовать вложенные вызовы функций. Это позволит Вам использовать функцию TRACE что необходимо, чтобы обнаружить любые ошибки.
Примеры:
;;; Отладочные функции
(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)
чтобы проскочить большие циклы.
"Вы действительно нужно защитить их?
Если Вы хотите распространить код среди своих друзей, то почему бы просто не отдать им код? Ваш исходный текст в любом случае защищен авторским правом.
Работая с другими Вы получаета возможность получения новых идей и писать более совершенные программы.
Многие из моих утилит были улучшены моими друзьями, а я улучшил многие их утилиты." (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, то могут быть расшифрованы только с её же помощью.
Рассматриваться будут три 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 проекты.
- 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), но я не имею их описания.
Средства проверки соответствия круглых скобок можно больше не использовать.
Редакторы должны уметь это делать.
- ALLY30.ZIP
- Shareware LISP анализатор. Проверяет синтаксис и выводит статистику
(в соответствии со структурой функций), на [1]
- lck21b.zip
- LCK LISP Checker 2.1b (графический)
- paran.zip
- Простой
- PARNCH.ZIP
- Простой
Существуют AutoLISP программы которые подсчитывают скобки.
Внешние:
- FMT202S.ZIP
- Lisp, DCL и FRM форматировщик исходного текста
- LB.EXE
- Autodesk's форматировщики кода (source code beautifier).
Найти можно в SDK2 или см. [1]. Имеет проблемы с длинными строками, и новым-стилем в строчных комментариях.
- PPRINT.LSP
- Найти можно в SDK2 или см. [1].
Внутренние:
Visual Lisp, Vital LISP, Emacs и Codekey, насколько я знаю, содержат внутренние форматировщики кода.
Не имеется почти никаких известных серьезных ошибок в 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]
Обзор алгоритмов сортировки см. на
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 встроенный, для строк)
Это - не часто задаваемый вопрос, а очень интересный момент в 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
То же самое что с рекурсией, это не часто задаваемый вопрос, но это необходимо знать.
Итерационные операторы в 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 - Предыдущая - Следующая
© faqs.org.ru