Язык программирования Lisp: функции, синтаксис, среда разработки
Более сорока лет назад разработан и внедрен в использование для выполнения целей искусственного интеллекта язык программирования LISP (ЛИСП), позднее ставший популярным среди пользователей ПО AutoCAD. Он создан для символьных вычислений. С течением времени был преобразован, чтобы соответствовать новым потребностям ИИ.
Начинающим пользователям, изучающим его архитектуру, рекомендуется рассматривать его в качестве формальной знаковой системы.
Это imperative language (императивный), действия которого описывают выполнение алгоритма, отличается от других, декларативных, предполагающих определение ограничений и соотношений в предметной сфере поставленной цели. По сравнению с другими подобными разработками С++ и FORTRAN, ЛИСП наделен большей функциональностью. Его популярность обусловлена большими возможностями для программирования в сочетании с мощным набором:
Это средства построения данных структур обозначения высокого уровня.
Конструкция
LISP синтаксис и семантика, разработанные программистами, обусловлены теорией рекурсивных функций. Символьные, s-выражения, являются элементами предложений, сочетаний. В них представлены софты и файлы. Они могут отображаться в виде списка (list) или атомов (atom).
Во втором варианте включены числовые комбинации, цифры, буквы латинского алфавита и знаки: *, -, +, /,@, %, , &, _, ,
Несколько поочередно идущих абзацев составляют каталог. Они обязательно разделяются пробелами и замыкаются в скобки.
Составляющими одних перечислений могут служить другие, более мелкие, подпункты. Символьные структуры разной формы и уровня сложности можно создавать благодаря произвольной углубленности и вложенности. Существует пустая строка, она обозначается – () и называется «nill». При возведении информационной структуры, а также при способе управления ею, она играет особенную роль, представляясь одновременно и атомом, и списком.
Язык LISP относится к языкам программирования, которые используются для создания дополнительных загрузок к ПО по проектированию и моделированию. Для их использования необязательно хорошо разбираться в компьютере на уровне профессионала.
После изучения основных принципов работы в таких пакетах, как AutoCAD или ZWCAD Professional, который является аналогом ACAD, появляется необходимость упростить выполнение длительных рутинных операций или полностью избавиться от них. Для этого дополнения и нужны. Если они написаны на ЛИСПе, скрипты называются LISP-приложения. Каждое из них представляет собой текстовый файл с определенным встроенным кодом для выполнения команды и подсказками от производителя. Определитесь с нужными для работы свойствами, выбирайте надстройку, скачивайте ее и загружайте в ZWCAD или другую платформу. Начиная с версии ZWCAD 2020, в платформу встроен Отладчик Lisp приложений, разработанный на базе Visual Studio Code от Microsoft.
Рассмотрим возможности одного такого модуля на образце скрипта «Выравнивание текстов».
Источник статьи: http://www.zwsoft.ru/stati/yazyk-programmirovaniya-lisp-funkcii-sintaksis-sreda-razrabotki
Как написать приложение для автокада
Мы перенаправили вас на аналогичную страницу русскоязычного сайта, где вы можете узнать о ценах и рекламных акциях в вашем регионе, а также приобрести продукты через
Разработка приложений для AutoCAD
AutoCAD® представляет собой гибкую платформу разработки специализированных приложений, предназначенных для автоматизированного проектирования. Открытая архитектура позволяет адаптировать AutoCAD под конкретные задачи пользователей. Образцами такой адаптации могут служить САПР на базе AutoCAD для различных отраслей проектирования, а также тысячи надстроек, разработанных участниками сети Autodesk® Developer Network.
Среда программирования ObjectARX® используется для адаптации и расширения функциональных возможностей AutoCAD и продуктов на его основе. Она обеспечивает непосредственный доступ к структурам базы данных AutoCAD, графической системе и определениям встроенных команд. С помощью объектно-ориентированных интерфейсов программирования на языке C++ разработчики могут создавать приложения для AutoCAD и других продуктов, входящих в это семейство – например AutoCAD® Architecture, AutoCAD® Mechanical и AutoCAD® Civil 3D®.
Система разработки приложений на языке Visual LISP® позволяет адаптировать среду исполнения AutoCAD, добавляя в продукт новые функциональные возможности.
В состав ObjectARX SDK входит также управляемый API, который часто называют AutoCAD .NET API. Для адаптации и расширения функциональных возможностей AutoCAD и продуктов на его основе может применяться любой язык программирования, поддерживающий .NET. Обеспечивается непосредственный доступ к структурам базы данных AutoCAD, определениям встроенных команд и другим внутренним программным элементам. Язык Microsoft® Visual Basic.NET (VB.NET) прост в освоении и использовании, и в то же время открывает перед разработчиками приложений весь спектр возможностей ObjectARX. О том, как научиться работать с интерфейсом AutoCAD .NET, рассказывается в онлайн-руководстве AutoCAD .NET Developer’s Guide.
Интерфейс ActiveX® позволяет обращаться к AutoCAD и в автоматическом режиме выполнять в нем необходимые действия посредством механизма COM-автоматизации. Такие обращения возможны, например, из автономных приложений, написанных на Microsoft® Visual C++® или Microsoft .NET Framework, а также из поддерживающих VBA приложений – таких как Microsoft Office. Кроме того, интерфейс ActiveX® могут использовать надстройки для AutoCAD, созданные с помощью Visual LISP, ObjectARX и AutoCAD .NET API.
Видео: Обзор тренинга «Моя первая программа для AutoCAD» Учебный курс «Моя первая программа для AutoCAD» представляет собой самоучитель для постепенного освоения мира программирования. Он предназначен для специалистов, знающих AutoCAD, но пока не имеющих опыта в программировании, и поможет вам освоить работу c AutoCAD .NET API и языком программирования Visual Basic .NET
Сообщество
Блоги
Получайте новости и рекомендации непосредственно от специалистов Autodesk.
Блог по программированию в AutoCAD: Through the Interface – Авторы: Kean Walmsley.
Блог специалистов технической поддержки ADN — ADN AutoCAD DevBlog
Форумы пользователей
Включайтесь в обсуждения проблем применения API на форумах, которые модерируются
специалистами Autodesk.
Техническая поддержка по программированию на платформах Autodesk на русском языке.
Если у вас есть вопросы по программированию на платформах Autodesk, вы можете задать их на
русскоязычном форуме технической поддержки.
Важные темы
Autodesk App Store для AutoCAD: Наращивайте функционал AutoCAD с помощью приложений,
разработанных для сообщества пользователей.
Облачные вычисления: Узнайте, как можно разработать и интегрировать с AutoCAD собственное
облачное решение (Software as a Service).
Источник статьи: http://www.autodesk.ru/autodesk-developer-network/software-platform-russian/develop-autocad
Урок 2. Пример простой программы на LISP.
LISP или AutoLISP это традиционный язык программирования для AutoCAD. С его помощью можно создавать свои программы в любой области проектирования. Создание таких программ избавляет пользователя от типовых, рутинных операций и существенно повышают производительность работы в AutoCAD.
В этом уроке мы рассмотрим пример простой программы на языке LISP. Подробно разберем ее программный код. В следующих уроках, двигаясь от простого к сложному, мы будем ее постепенно усложнять и модифицировать. Я надеюсь, что в результате, вы получите знания, которые сделают вашу работу в Автокад более эффективной.
Приставленные примеры предполагают, что у читателя уже есть начальные знания работы в AutoCAD.
Для выполнения примера нам понадобиться только программа AutoCAD. Специальная инсталляция AutoLISP не требуется. Он поставляется с каждой копией AutoCADа.
И первое с чего мы должны начать – это поставить перед собой задачу. И в качестве примера я предлагаю написать программу, которая попросит нас указать базовую точку р1. и после указания, построит куб со сторонами 200.
Программный код мы будем писать в редакторе «Visual Lisp». Чтобы его открыть, в начале нужно запустить AutoCAD.
Далее на ленте выбираем вкладку «Управление» и на панели «Приложение» щелкаем на пункте «Редактор Visual Lisp»
Создаем новый файл: щелкаем на кнопку обведенную красным .
И в открывшимся окне, набираем текст нашей программы или копируем его с сайта
Программный код на языке LISP:
Скачать программу Mp_kub.lsp (Размер файла: 449 bytes)
В программном коде после «;» можно оставлять свои комментарии, которые в дальнейшем никак не влияют на выполнение команды.
Давая имя командам и файлам, стараемся присвоить им уникальные имена. Чтобы в дальнейшем избежать пересечения со стандартными командами или с командами созданными другими пользователями. Я назову наш файл и команду «mp_kub» (подразумевая my program Kub)
В конце сохраняем нашу программу в удобном для вас месте. Я сохраняю ее в папке «D:/MyLisp» под именем «mp_kub».
Теперь, чтобы использовать нашу программу в AutoCADе, ее предварительно нужно загрузить. Щелкаем по кнопке выделенной зеленым .
Если программа набрана без ошибок. Ниже в окне «Консоль Visual LISP» появиться надпись о том, что наша программа загружена.
Переходим в AutoCAD, вводим «mp_kub» в командную строку и нажимаем Enter.
Появится подсказка: «Укажите базовую точку :» Щелкните в любой точки рабочего окна AutoCAD и он нарисует куб.
ДОПОЛНИТЕЛЬНЫЕ ПОЯСНЕНИЯ .
Давайте более подробно разберем функции языка LISP, которые мы использовали в программном коде.
Создание функции пользователя с именем «mp_kub».
Префикс «с:» означает, что эту функцию можно будет использовать как стандартную команду AutoCAD. Достаточно ввести имя в командную строку AutoCADа.
( / p1 p2 p3 p4 p5 p6 p7 p8 ) – временные переменные, которые используются в выражениях.
Функция getpoint – даёт возможность пользователю указать точку при помощи мыши.
Результатом функции будут координаты точки указанные пользователем.
«\nУкажите базовую точку : » — текст приглашения.
Префикс «\n» означает переход на новую командную строку.
Функция присвоения (setq p1 ) позволяет сохранить в переменной p1.
Функция ( polar p1 0 200 ) вычисляет координаты точки отстоящей от точки р1 на расстояние 200 в направлении луча образующим с ось Х угол 0 радиан.
( setq p2 ) — Затем эти координаты присваиваются р2 .
Функция command выполняет стандартные функции AutoCADа. В нашем случаи проводит отрезки по точкам с координатами р1, р2, р3, р4, р1 .
«_line» — имя стандартной функции AutoCAD.
«» — имитирует нажатие клавиши .
Таким образом в этой статье мы узнали:
Как запускать редактор Visual Lisp.
Как создавать программу на языке Lisp.
Как загружать программу и как запускать ее на выполнение.
Чтобы лучше, понять, как работают функции, поэкспериментируйте с ними, поменяйте какие либо значения, посмотрите, как это повлияет на результат.
В дополнение к этому уроку смотрите видео: Пример простой программы на LISP.
В следующем уроке мы будем учится создавать кнопку для запуска своих программ.
Пишите в комментариях: все ли у вас получилось?; трудно ли было выполнить этот урок?; где у вас возникли трудности? Я с удовольствием отвечу на все ваши комментарии.
Если вы хотите получать новости с моего сайта. Оформляйте подписку.
Источник статьи: http://acad-prog.ru/kub/
Создание плагинов для AutoCAD с помощью .NET API (часть 1 – первые шаги)
Решил рассказать о своем опыте работы с AutoCAD. Может быть, кому-то это поможет – ну или хотя бы интересным покажется.
Предыстория
Началось все достаточно просто: в очередной раз почувствовав острую нехватку денег, я решил, что пора бы уже начать их где-нибудь разыскивать. И вот после пары недель поиска на «Фрилансим» обнаружилась вакансия разработчика для создания программы, взаимодействующей с AutoCAD.
Скажу сразу: до того дня общаться с AutoCAD мне не доводилось. Однако объявление содержало в себе фразу «Опыт работы не требуется», которая наполнила мою душу надеждой. Я связался с разместившим вакансию человеком и получил тестовое задание.
Для пробы предлагалось создать на чертеже пару объектов, а также вывести текст. Несколько дней я искал информацию об API и пытался подружиться с непривычной программой. В конце концов фигуры были нарисованы, текст выведен, а тестовое задание отправлено на проверку. И через несколько дней я неожиданно узнал, что принят! Чудеса, да и только.
В следующих абзацах – мои впечатления, синяки и шишки, мысли и советы (возможно, вредные). Разработка велась под AutoCAD 2010, в качестве IDE использовалась верная Visual Studio 2013 Express. Язык разработки – C#.
1. Подготовка необходимых инструментов
1.1. Собственно AutoCAD
Тут все понятно. Качайте с официального сайта Autodesk, ставьте, 30 дней наслаждайтесь прекрасным инструментом. Потом узнайте цену покупки и повесьтесь. Для разработчиков действует специальная программа ADN , по которой можно получать девелоперские лицензии на продукты Autodesk. Стоимость базовой версии подписки, как указано на сайте, составляет от 700 долларов в год.
1.2. ObjectARX SDK – набор библиотек, необходимых для работы с AutoCAD
Последние три-четыре версии библиотек можно бесплатно скачать тут после регистрации. Более ранние придется поискать – скажем, тут. На всякий случай продублирую список прямо здесь – не такой уж он и длинный:
Версия SDK и ссылка для загрузки | Совместимость с версиями AutoCAD |
---|---|
2011 | 2011, 2012 |
2010 | 2010, 2011, 2012 |
2009 | 2009 |
2008 x86 | 2008, 2009 x86 |
2008 x64 | 2008, 2009 x64 |
2007 | 2007, 2008, 2009 x86 |
2006 | 2006 |
2005 | 2005, 2006 |
2004 | 2004, 2005, 2006 |
2002 | 2002 |
2000i | 2000i, 2002 |
2000 | 2000, 2000i, 2002 |
R14 | R14 |
Лично меня в свое время очень заинтересовал вопрос обратной совместимости ObjectARX. Как-то раз заказчик спросил: «А с какими версиями AutoCAD сможет работать программа?», и мне пришлось изрядно времени потратить на поиски ответа. В целом, ответ звучит так: «Autodesk поддерживает обратную совместимость в течение трех лет ». Какие версии совместимы между собой, можно посмотреть под спойлером выше.
Пока задачи перекомпилировать программу с другими библиотеками у меня не возникало. Думаю, что это хорошо: перспектива создавать отдельную версию продукта для других выпусков AutoCAD не радует совершенно.
1.3. MS Visual Studio 2013 Express
Великолепная IDE! Больше про нее и говорить-то нечего. Ссылок для скачивания масса – например, вот.
Можно, конечно, использовать и более ранние версии. Я начинал работу над проектом в MS Visual Studio 2010, но потом решил перейти на более современный выпуск.
1.4. Поисковик, усидчивость, здравый смысл
У меня был не такой большой опыт программирования – я привык решать простые задачи, для которых за глаза хватало средств самой платформы .NET. И первое мое знакомство с программированием под AutoCAD вышло не очень простым. Неприятной неожиданностью оказалось то, что у классов для работы с AutoCAD:
- нет привычных всплывающих подсказок о назначении класса, свойства или метода;
- нет подробной справки.
В итоге информацию я черпал из файлов помощи Object ARX (у меня они установлены в папку с именем C:\ObjectARX 2010\docs), а также из многочисленных форумов, блогов и сообществ разработчиков AutoCAD. Признаться, больше помогало последнее, чем первое. 🙂
В конце этой статьи приведен список ресурсов, на которых можно позадавать вопросы и, если повезет, получить на них ответы.
2. Создание проекта библиотеки
Первые шаги вполне внятно описаны здесь. Владеющие английским могут попробовать зайти еще и сюда. Правда, в материалах по последней ссылке упор сделан на Visual Basic, плюс нужно будет установить «AutoCAD .NET Wizard» – шаблон проекта для создания плагинов под AutoCAD. Люди знающие говорят, что этот шаблон сильно упрощает жизнь; я же никогда им не пользовался, поэтому скромно промолчу.
Вкратце продублирую основные этапы:
2.1. Создать проект «Библиотека классов» («Class Library»)
Если плагин предназначен для старой версии AutoCAD, то целесообразно сразу же задать в свойствах проекта версию .NET, которую будем использовать. Например, AutoCAD 2010 не может загружать плагины, созданные с использованием .NET Framework 4, поэтому я в качестве используемой версии указываю .NET Framework 3.5.
При понижении версии .NET Framework, используемой в проекте, могут появляться сообщения об ошибках. В моем случае Visual Studio ругается на отсутствие сборки «Microsoft.CSharp» – ее просто нужно исключить из ссылок (References).
2.2. Добавить ссылки на необходимые библиотеки AutoCAD .NET API
На этом пункте стоит остановиться чуть подробнее. AutoCAD .NET API включает в себя достаточно большое количество классов, которые разнесены по разным пространствам имен (namespaces). В свою очередь, эти пространства имен разнесены по нескольким контейнерам (проще говоря, DLL-файлам).
Эти DLL-файлы находятся в папке с именем inc- . Так, в моем случае я добавляю ссылки на библиотеки из папки C:\ObjectARX 2010\inc-win32.
Первое знакомство с API у меня заключалось в лихорадочных попытках скомпилировать хоть какой-нибудь из примеров, щедро разбросанных по Сети. И что сλка характерно, компилироваться они упорно не хотели, ругаясь на неизвестные пространства имен и классы. В попытках собрать свой первый проект я с горя включил в него чуть ли не все DLL-файлы, которые шли с ObjectARX. Плохой способ – так делать не надо.
Ну, это вопрос не ко мне. Я только могу сказать, что в начале примеров обычно идет перечисление используемых пространств имен – скажем, так:
То, что начинается со слова «Autodesk», – это и есть те дроиды пространства имен, которые мы ищем. Теперь осталось разыскать контейнеры, которые их содержат. Исчерпывающего перечня сопоставлений я найти не смог, поэтому все проверялось методом научного тыка. Если есть более правильный способ, было бы интересно его узнать…
А пока – вот список DLL-файлов, которые я использую в проекте, и содержащихся в них пространств имен:
Контейнер «AcMgd» (файл «AcMgd.dll»):
- Autodesk.AutoCAD.ApplicationServices
- Autodesk.AutoCAD.EditorInput
- Autodesk.AutoCAD.GraphicsSystem
- Autodesk.AutoCAD.Internal
- Autodesk.AutoCAD.Internal.Calculator
- Autodesk.AutoCAD.Internal.DatabaseServices
- Autodesk.AutoCAD.Internal.Forms
- Autodesk.AutoCAD.Internal.PreviousInput
- Autodesk.AutoCAD.Internal.PropertyInspector
- Autodesk.AutoCAD.Internal.Reactors
- Autodesk.AutoCAD.Internal.Windows
- Autodesk.AutoCAD.PlottingServices
- Autodesk.AutoCAD.Publishing
- Autodesk.AutoCAD.Runtime
- Autodesk.AutoCAD.Windows
- Autodesk.AutoCAD.Windows.Data
- Autodesk.AutoCAD.Windows.ToolPalette
Контейнер «AcDbMgd» (файл «AcDbMgd.dll»):
- Autodesk.AutoCAD.Colors
- Autodesk.AutoCAD.ComponentModel
- Autodesk.AutoCAD.DatabaseServices
- Autodesk.AutoCAD.DatabaseServices.Filters
- Autodesk.AutoCAD.Geometry
- Autodesk.AutoCAD.GraphicsInterface
- Autodesk.AutoCAD.GraphicsSystem
- Autodesk.AutoCAD.LayerManager
- Autodesk.AutoCAD.Runtime
Контейнер «AdWindows» (файл «AdWindows.dll»):
- Autodesk.Internal.InfoCenter
- Autodesk.Internal.Windows
- Autodesk.Internal.Windows.ToolBars
- Autodesk.Private.InfoCenter
- Autodesk.Private.SubAwareService
- Autodesk.Private.WebSearchService
- Autodesk.Private.Windows
- Autodesk.Private.Windows.ToolBars
- Autodesk.Private.WsCommCntrLib
- Autodesk.Windows
- Autodesk.Windows.Common.Utilities
- Autodesk.Windows.ToolBars
Контейнер «AcCui» (файл AcCui.dll»):
- Autodesk.AutoCAD.Customization
имена многих классов AutoCAD .NET API совпадают с именами стандартных классов .NET, что не очень удобно. Например, если обратиться в коде к классу Application , то Visual Studio выругается на неоднозначность этого определения: класс с таким именем есть как в пространстве имен System.Windows , так и в пространстве имен Autodesk.AutoCAD.ApplicationServices . Чтобы не писать каждый раз полное имя, можно добавить в начало файла строку
Теперь в любом месте этого файла можно вместо Autodesk.AutoCAD.ApplicationServices.Application писать acadApp .
Есть смысл провернуть такую операцию с наиболее часто употребляемыми классами. Непременно так делайте, код будет компактнее и понятнее. Цинизм данного совета заключается в том, что к тому моменту, когда вы наконец поймете, какие же классы являются у вас наиболее часто употребляемыми, что-то менять будет уже сильно лень.
Важный момент: обязательно запретите копирование библиотек AutoCAD .NET API в каталог сборки при построении проекта! Для этого найдите в свойствах каждой добавленной ссылки параметр CopyLocal и установите его в False .
2.3. Написать код плагина
Все очень просто. Вначале мы указываем необходимые пространства имен. Нам потребуются два.
В первом пространстве имен ( System.Windows.Forms ) хранится описание класса MessageBox , с помощью которого мы будем выводить сообщения. Чтобы сделать его доступным, необходимо добавить ссылку на одноименную сборку .NET.
Во втором пространстве имен ( Autodesk.AutoCAD.Runtime ) определены интерфейс IExtensionApplication и атрибут CommandMethod . Причем описание IExtensionApplication находится в файле AcDBMgd.dll, а описание CommandMethod – в файле AcMgd.dll, поэтому придется добавить ссылки на обе эти библиотеки.
Таким образом, всего необходимо добавить три ссылки:
UPD. 09.04.2018. Важное дополнение от lasteran: В новых версиях (предположительно начиная с AutoCAD 2013) класс CommandMethod содержится не в AcDBMgd.dll, а в AcCoreMgd.dll, так что придётся добавить ссылку ещё и на эту библиотеку. Учтите это, если работаете с новой версией!
Затем мы объявляем класс Commands . Именно он и будет «отправной точкой» плагина. Наш класс унаследован от интерфейса IExtensionApplication , поэтому в нем могут быть реализованы методы Initialize и Terminate . Первый из них автоматически выполняется при загрузке плагина, второй – при выгрузке.
AutoCAD не предоставляет разработчику возможность выгрузить плагин после того, как он будет загружен. Поэтому реально метод Terminate будет вызываться только в одном случае – при закрытии самого AutoCAD.
Почитать поподробнее про методы Initialize и Terminate можно тут (rus) и там (англ.).
Наконец, мы объявляем функцию MyCommand , которая будет реализовывать команду AutoCAD. Она обязательно должна ничего не принимать на вход и ничего не возвращать на выходе (не знаю, откуда у меня взялось это убеждение, но оно есть). Внутри этой функции можно делать все, что заблагорассудится (в пределах разумного, конечно), причем есть возможность работать как с AutoCAD .NET API, так и со стандартными классами .NET. Например, можно создать обычную форму Windows с полями ввода, отобразить ее на экране с помощью ShowModal() , а затем на основе введенных пользователем данных внести изменения в открытый в AutoCAD чертеж.
Чтобы «превратить» созданный метод в команду AutoCAD, применяется атрибут CommandMethod . В скобках после него указывается имя создаваемой команды, которое можно будет использовать непосредственно в среде AutoCAD.
После сборки этого проекта у нас получится готовый к употреблению плагин.
2.4. Загрузить созданный плагин
Нужно запустить AutoCAD и выполнить команду «NETLOAD»:
Затем в открывшемся окне указать путь к файлу плагина:
После этого плагин будет загружен в AutoCAD. Мы должны увидеть первое сообщение:
Если при загрузке плагина произошла критическая ошибка, она будет выведена в консоль AutoCAD:
Сообщения обычно понятные – помогут разобраться, если случай не сильно клинический. 🙂
Теперь, когда плагин загружен, можно выполнить нашу тестовую команду:
… и увидеть результат:
Работает. Теперь можно закрывать AutoCAD.
2.5. Отладить плагин (при необходимости)
Процедура запуска плагина для отладки очень хорошо расписана в этом посте Tepliuk.
Источник статьи: http://m.habr.com/ru/post/235723/