Как запустить dvb autocad

Обновлено: 25.06.2024

Решил рассказать о своем опыте работы с AutoCAD. Может быть, кому-то это поможет – ну или хотя бы интересным покажется.

Предыстория

Началось все достаточно просто: в очередной раз почувствовав острую нехватку денег, я решил, что пора бы уже начать их где-нибудь разыскивать. И вот после пары недель поиска на «Фрилансим» обнаружилась вакансия разработчика для создания программы, взаимодействующей с AutoCAD.

Скажу сразу: до того дня общаться с AutoCAD мне не доводилось. Однако объявление содержало в себе фразу «Опыт работы не требуется», которая наполнила мою душу надеждой. Я связался с разместившим вакансию человеком и получил тестовое задание.

Для пробы предлагалось создать на чертеже пару объектов, а также вывести текст. Несколько дней я искал информацию об API и пытался подружиться с непривычной программой. В конце концов фигуры были нарисованы, текст выведен, а тестовое задание отправлено на проверку. И через несколько дней я неожиданно узнал, что принят! Чудеса, да и только.

1. Подготовка необходимых инструментов

1.1. Собственно AutoCAD

Тут все понятно. Качайте с официального сайта Autodesk, ставьте, 30 дней наслаждайтесь прекрасным инструментом. Потом узнайте цену покупки и повесьтесь. Для разработчиков действует специальная программа ADN , по которой можно получать девелоперские лицензии на продукты Autodesk. Стоимость базовой версии подписки, как указано на сайте, составляет от 700 долларов в год.

1.2. ObjectARX SDK – набор библиотек, необходимых для работы с AutoCAD

Последние три-четыре версии библиотек можно бесплатно скачать тут после регистрации. Более ранние придется поискать – скажем, тут. На всякий случай продублирую список прямо здесь – не такой уж он и длинный:

ссылки для загрузки ObjectARX SDK для версий AutoCAD 2000 – 2011
Версия 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. Поисковик, усидчивость, здравый смысл
  • нет привычных всплывающих подсказок о назначении класса, свойства или метода;
  • нет подробной справки.

В конце этой статьи приведен список ресурсов, на которых можно позадавать вопросы и, если повезет, получить на них ответы.

2. Создание проекта библиотеки

Вкратце продублирую основные этапы:

2.1. Создать проект «Библиотека классов» («Class Library»)

Эти DLL-файлы находятся в папке с именем inc-<наименование_архитектуры>. Так, в моем случае я добавляю ссылки на библиотеки из папки C:\ObjectARX 2010\inc-win32.

у меня дома установлена 32-разрядная ОС, у заказчика – 64-разрядная. Пока серьезных проблем с совместимостью не возникало. Но однажды я все же напоролся на то, что у меня функция возвращала Int32 , а у заказчика – Int64 . Линковщик ОЧЕНЬ расстраивался. Нужно иметь эту особенность в виду.

Первое знакомство с API у меня заключалось в лихорадочных попытках скомпилировать хоть какой-нибудь из примеров, щедро разбросанных по Сети. И что сλка характерно, компилироваться они упорно не хотели, ругаясь на неизвестные пространства имен и классы. В попытках собрать свой первый проект я с горя включил в него чуть ли не все DLL-файлы, которые шли с ObjectARX. Плохой способ – так делать не надо.

Ну, это вопрос не ко мне. Я только могу сказать, что в начале примеров обычно идет перечисление используемых пространств имен – скажем, так:


То, что начинается со слова «Autodesk», – это и есть те дроиды пространства имен, которые мы ищем. Теперь осталось разыскать контейнеры, которые их содержат. Исчерпывающего перечня сопоставлений я найти не смог, поэтому все проверялось методом научного тыка. Если есть более правильный способ, было бы интересно его узнать…

А пока – вот список DLL-файлов, которые я использую в проекте, и содержащихся в них пространств имен:


Теперь в любом месте этого файла можно вместо Autodesk.AutoCAD.ApplicationServices.Application писать acadApp .

Есть смысл провернуть такую операцию с наиболее часто употребляемыми классами. Непременно так делайте, код будет компактнее и понятнее. Цинизм данного совета заключается в том, что к тому моменту, когда вы наконец поймете, какие же классы являются у вас наиболее часто употребляемыми, что-то менять будет уже сильно лень.

2.3. Написать код плагина

Все очень просто. Вначале мы указываем необходимые пространства имен. Нам потребуются два.

Таким образом, всего необходимо добавить три ссылки:



UPD. 09.04.2018. Важное дополнение от lasteran: В новых версиях (предположительно начиная с AutoCAD 2013) класс CommandMethod содержится не в AcDBMgd.dll, а в AcCoreMgd.dll, так что придётся добавить ссылку ещё и на эту библиотеку. Учтите это, если работаете с новой версией!

Затем мы объявляем класс Commands . Именно он и будет «отправной точкой» плагина. Наш класс унаследован от интерфейса IExtensionApplication , поэтому в нем могут быть реализованы методы Initialize и Terminate . Первый из них автоматически выполняется при загрузке плагина, второй – при выгрузке.

AutoCAD не предоставляет разработчику возможность выгрузить плагин после того, как он будет загружен. Поэтому реально метод Terminate будет вызываться только в одном случае – при закрытии самого AutoCAD.

Почитать поподробнее про методы Initialize и Terminate можно тут (rus) и там (англ.).

Чтобы «превратить» созданный метод в команду AutoCAD, применяется атрибут CommandMethod . В скобках после него указывается имя создаваемой команды, которое можно будет использовать непосредственно в среде AutoCAD.

После сборки этого проекта у нас получится готовый к употреблению плагин.

2.4. Загрузить созданный плагин

Нужно запустить AutoCAD и выполнить команду «NETLOAD»:




Затем в открывшемся окне указать путь к файлу плагина:




Если при загрузке плагина произошла критическая ошибка, она будет выведена в консоль AutoCAD:


если плагин не смог загрузиться из-за ошибки, то перед тестированием очередного (исправленного) варианта нужно закрыть и заново запустить AutoCAD. В противном случае он может отказаться загружать плагин, даже если ошибок в коде уже не будет.

Теперь, когда плагин загружен, можно выполнить нашу тестовую команду:




… и увидеть результат:


Работает. Теперь можно закрывать AutoCAD.

2.5. Отладить плагин (при необходимости)

Процедура запуска плагина для отладки очень хорошо расписана в этом посте Tepliuk.


Cоздание утилиты для AutoCAD 2000 с помощью VBA

С появлением AutoCAD 2000, VBA в AutoCAD достиг совершеннолетия. Новая версия избавилась от многих ограничений начальной реализации VBA в AutoCAD R14, и добавила реальные функциональные возможности непосредственно к AutoCAD.

Чтобы почуствовать, что Вы можете теперь делать с помощью VBA, эта статья, представляет простую утилиту MRU +. Эта утилита, показанная на рисунке 1, сохраняет список последних открытых чертежей, показывает Вам те, которые загружены в настоящее время, и позволяет Вам загружать и выгружать чертежы просто устанавливая галочку рядом с названием чертежа. Хотя это простая утилита, но MRU + демонстрирует многие из новых возможнстей VBA в AutoCAD, и должна помочь научить вас владеть средой VBA в AutoCAD.


Рис. 1 MRU+ - утилита, которая позволяет следить за недавно использоваными файлами AutoCAD
  • Впервые, AutoCAD имеет среду окружения MDI, позволяя Вам, открывать много чертежей в одно время. Каждый чертеж может содержать:
  • Множество закладок, отображающих различные варианты размещения чертежа.
  • Инструментальные средства для загрузки отдельных объектов и частей чертежей были по существу улучшены.
  • Трехмерное вращение в реальном времени, улучшенное твердотельное моделирование, и более гибкие виды, делают работу с трехмерным объектами намного проще.
  • Расширенная объектная модель впервые позволяет программам VBA, манипулировать меню и инструментальными панелями. VBA может также посылать команды непосредственно в командную строку AutoCAD.
  • Модель событий для AutoCAD и его чертежей существенно улучшена.
  • Вы можете открывать и сохранять файлы непосредственно из Интернет.
  • Новые мастера делают печать намного более просто чем это было в предыдущих версиях.

Два типа проектов в VBA

  • Извлекать внедренный проект из загруженного чертежа в глобальный проект
  • Внедрять загруженный глобальный проект в любой открытый чертеж
  • Создавать новый глобальный проект
  • Сохранять глобальный проект под новым названием
  • Загружать глобальный проект с жесткого диска
  • Выгрузить глобальный проект из памяти
  • Посмотреть макросы в любом или всех загруженных проектах
  • Запустить Редактор Visual Basic

Рис. 2. Диалоговое окно VBA Managerпозволяет Вам манипулировать внедренными и глобальными проектами VBA.

Конечно, глобальный проект более предпочтителен для утилиты, разработанной, чтобы фиксировать информацию относительно множества чертежей. В случае MRU +, глобальный проект это фалй MRUPlus.dvb. Расширение "dvb" используется AutoCAD для глобальных проектов, сохраненных на диске.

Загрузка при запуске

AutoCAD 2000 автоматически не инициализирует VBA всякий раз, когда Вы его запускаете. Скорее, VBA загружается по требованию. Однако, имеются два способа когда Вы можете загружать и запускать код VBA при запуске. Во первых, Вы можете создавать глобальный проект VBA, с названием acad.dvb, и сохранять его в вашем каталоге AutoCAD. Любой проект с этим названием будет автоматически загружен при запуске AutoCAD. Далее, если это содержит макроc ( процедуру Sub ) с названием AcadStartup, эта макрокоманда будет автоматически выполняться, как только файл acad.dvb загружен.

Как вариант, Вы можете расположить команды AutoLisp в файле acad.lsp, который также должен быть в каталоге AutoCAD. Любая функция AutoLisp названая STARTUP в этом файле будет автоматически выполняться, когда файл загружен. Как вы будете видеть в этой статье, Autodesk сделала хорошую работу по созданию связи между старшим языком Lisp и более новым языком VBA, что бы стало возможно для кода Lisp, вызвать код VBA и наоборот.

Для приложения, хорошая мысль, модифицировать файл acad.lsp, чтобы загружать приложение при запуске. Большинство пользователей AutoCAD знакомы с изменением этого файла и с языком Autolisp, так что добавление строки кода, чтобы загрузить ваше приложение должно быть для них просто. Вы можете просто загружать приложение, или можете загружать приложение и запускать макрос из него в то же самое время.

Чтобы загрузить приложение, Вы можете использовать код Autolisp, чтобы вызвать команду AutoCAD vbaload:

Или, чтобы запустить процесс инициализации в приложении, Вы можете вызывать команду vbarun:

Аргумент команды vbarun может быть полностью квалифицирован в форме:

Если указанный файл не загружен, он будет сначала загружен, и затем будет выполнен макрос. По умолчанию, команды vbarun или vbaload загружают файлы только из главного каталога AutoCAD. Если ваша утилита сохранена в другом месте, вы будете должны указать полный путь и имя файла в аргументе. В этом случае, Вы нуждаетесь в "escape" из знаков наклонной черты влево, удваивая их. Например, это имело силу бы в файле acad.lsp:

Как часть своего загрузочного кода, MRU + добавляет себя к меню AutoCAD File, только выше встроенного списка последних использованных файлов. В предыдущих версиях AutoCAD, эта операция была полностью невозможна для кода VBA. Теперь новая ветвь объектной модели AutoCAD делает такие вещи тривиальными.

Рисунок 3 показывает новый объекты AutoCAD, доступные для манипулирования инструментальной панелью и меню. Объект MenuBar контролирует все меню, в настоящее время отображенные в главной строке меню AutoCAD. Вы можете вставилять и удалять меню, вызывая методы InsertInMenuBar и RemoveFromMenuBar объекта PopupMenu.


Рис. 3. Объекты для манипуляции меню и панелями инструментов.

Объект PopupMenu представляет стандартное падающее меню, или меню вызываемое по правой кнопке мыши. Объект PopupMenuItem представляет единственный пункт меню.

Система MenuGroups содержит набор объектов MenuGroup. Каждый MenuGroup может содержать меню и панели инструментов. Вы можете загружать группы меню из файла на диске. После того, как вы загрузили группу меню, ее содержание станет доступным, чтобы загрузиться в MenuBar или сокращенные меню.

Система Toolbars содержит объекты Toolbar, каждый из которых представляет панель инструментов. Индивидуальные кнопки панели представлены объектами ToolbarItem.

Утилита MRU + делает самую простую возможную операцию с этими объектами: Она прибавляет пункт меню, который отображает интерфейс пользователя к файловому меню. Это делается одной строкой кода:

Этот код добавляет новый пункт к 20-й позиции (считая с нуля) системы PopupMenuItems на крайнем левом PopupMenu в установленному по умолчанию MenuBar (другими словами, к меню File). Второй аргумент - текст, который будет отображаться в меню, и третий аргумент - макрос меню AutoCAD, который вызывается, когда этот пункт меню выбран.

Использование макросов меню AutoCAD имеет почти тот же самый синтаксис как команды AutoCAD, но и имеет некоторые различия. Один из них - вызов команды vbarun, используя синтаксис подчеркивания и черты чтобы подавить показ диалогового окна, которое это обычно вызвало бы. Заметьте присутствие пробела после имени макроса VBA, для выполнения. В макросах меню, конечные пробелы интерпретируется как конец фрагмента входа. Без этого, название макрокоманды VBA было бы внесено в командную строку AutoCAD, но не выполненно.

Использование ThisDrawing

Хотя можно иметь несколько одновременно загруженных глобальных проектов VBA, они все используют единственный объект названный ThisDrawing. Этот объект представляет собой активный документ в интерфейсе пользователя AutoCAD, и имеет класс AcadDocument. (В отличие от многих других объектных моделей, в модели AutoCAD имена всех объектов начинаються с префикса "Acad", чтобы гарантировать однозначность в операциях). Если несколько проектов VBA включают обработчики для событий для объекта ThisDrawing, каждый из обработчиков событий вызывается по очереди.

Использование событий ThisDrawing просто. Каждый глобальный проект VBA, который Вы создаете автоматически, содержит пример объекта ThisDrawing который не может быть удален. В приложении MRU + событие ThisDrawing.BeginClose используется, чтобы сообщить главной форме, когда рисунок выгружается из пользовательского интерфейса. Это событие содержит минимум кода, чтобы вызвать метод public формы интерфейса пользователя, чтобы расположить соответствующий ListItem в ListView и не контролировать это.

Таблица ниже содержит списки событий, поддерживаемые ThisDrawing. Как Вы можете видеть, многие из этих событий - новые в AutoCAD. В частности события BeginShortcutMenu, BeginLisp, и Object позволяют осуществлять новые способы взаимодействия с другими языками программирования в AutoCAD.

События объекта AcadDocument
Имя события Новое Исполняется когда:
Activate Да Окно чертежа выбирается
BeginClose Да Пользователь или программа пытается закрыть чертеж
BeginCommand Да Запущена команда
BeginDoubleClick Да Пользователь осуществляет двойной щелчек мышью на любом объекте чертежа
BeginLisp Нет Lisp-выражение посылается на исполнение
BeginPlot Да Начинается операция печати
BeginRightClick Да Пользователей нажимает правую кнопку мыши на любом объекте в черетеже
BeginSave Да Пользователь начинает сохранять чертеж
BeginShortcutMenuCommand Да Пользователь выдает сокращенного меню коммандного режима
BeginShortcutMenuDefault Да Пользователь выдает сокращенное меню по умолчанию
BeginShortcutMenuEdit Да Пользователь выдает сокращенное меню EDIT
BeginShortcutMenuGrip Да Пользователь выдает сокращенное меню GRIP
BeginShortcutMenuOsnap Да Пользователь выдает сокращенное меню OSNAP
Deactivate Да Окно чертежа становиться не активным
EndCommand Нет Завершается выполнение команды
EndLisp Да Завершается вычисление Lisp-выражения
EndPlot Да Завершается операция печати
EndSave Да Завершается операция записи
EndShortcutMenu Да Любое сокращенное меню фактически появляется.
LayoutSwitched Да Пользователь переключатеся на другой layout
LispCancelled Да Выполнение lisp-выражения прервано
ObjectAdded Да Любой объект добавлен к чертежу
ObjectErased Да Любой объект удален из чертежа
ObjectModified Да Любой объект модифицирован
SelectionChanged Да Текущий набор выбора изменен
WindowChanged Да Окно максимизируется или минимизируется
WindowMovedOrResized Да Окно перемещается или изменяется его размер

Зацепление объекта Application

Помимо наличия ThisDrawing, который представляет активный документ, утилита MRU + также должна контролировать события объекта AcadApplication (представляющего непосредственно AutoCAD) чтобы знать, когда новый рисунок был открыт. В отличие от объекта ThisDrawing, однако, глобальные VBA объекты не получают автоматически образец объекта AcadApplication. К счастью, Вы можете использовать в VBA ключевое слово WithEvents, чтобы создать ваш собственный. Последовательность событий, что использует MRU+, чтобы зацепить cобытие EndOpen объекта AcadApplication, который испольняется всякий раз, когда открывается новый рисунок, выделенный в следующих абзацах.

Файл acad.lsp, как Вы уже видели, содержит код вызова процедуры LoadMRUPlus в basMRUPlus. Наряду с другим загрузочным кодом, эта процедура устанавливает образец частного класса называемого CApp и устанавливает одно из его свойств:

Класс CApp существует исключительно как оболочка для объекта AcadApplication. Встроенный объект ThisDrawing содержит свойство Application что указывает на единственный образец объекта AcadApplication, что позволяет просто коду запуска находить это. Ниже показан код для класса CApp. Важным является здесь - то, что частная переменная типа AcadApplication объявлена WithEvents. Это специальное ключевое слово делает события AcadApplication доступными для кодирования в модули класса. Распечатка кода для утилиты MRU + в конце статьи.

События объекта AcadApplication полностью новые в AutoCAD 2000. В таблице ниже показан список новыех событий предмета AcadApplication.

События объекта AcadApplication
Имя события Когда исполняется
AppActivate AutoCAD получает фокус
AppDeactivate AutoCAD теряет фокус
ARXLoaded приложение ObjectARX загружается
ARXUnloaded приложение ObjectARX выгружается
BeginCommand Команда запущена из командной строки AutoCAD
BeginFileDrop Файл положен на рабочее пространство AutoCAD
BeginLisp Вычисляется Lisp-выражение
BeginModal Модальное диалоговое окно собирается отобразиться.
BeginOpen Чертеж собирается открыться
BeginPlot Чертеж отправляется на печать
BeginQuit Сессия AutoCAD собирается завершиться
BeginSave Документ отправле на сохранение
EndCommand Команда завершает исполнение
EndLisp Lisp-выражение вычислено
EndModal Модальный диалог отклонен.
EndOpen Чертеж открыт
EndPlot Чертеж напечатан
EndSave Чертеж сохранен
LispCancelled Вычисление Lisp-выражения прервано
NewDrawing Создан новый чертеж
SysVarChanged Изменено значение системной переменной
WindowChanged Окно минимизировано или максимизировано
WindowMovedOrResized Окно перемещено или изменен его размер

С AutoCAD 2000, VBA в AutoCAD перестал быть являющийся интересным "доказательство концепции", и стал довольно полезным средством. Добавление структурированной объектной модели, способность загружать несколько VBA-проектов и выполнять код при загрузке, а так же интегрирование с Lisp, командной строкой, меню, и панелями инструментов - все это делает возможным писать полезные утилиты, объединенные со стандартным интерфейсом AutoCAD.

Хотя MRU + утилита, показанная здесь только как доказательство концепции, она демонстрирует все схемы, которые вы были бы должны делать с любой утилитой для AutoCAD. Autodesk вложил много усилия в создании VBA как первоклассной средой окружения для AutoCAD.

alt

Мы рассматривали LISP-приложения для AutoCAD. Теперь давайте разберёмся, как внедрить LISP в работу.

Для Автокада доступны приложения со следующим расширением файла: *.arx, *.crx, *.lsp, *.dvb, *.dbx, *.vlx, *.fas. Рассмотрим на примере ЛИСПа, который позволяет выравнивать текст относительно указанной точки по оси X или Y (скачать файл «Выравнивание текста .lsp»).

Как установить файл *.lsp в Автокад?

1. Перейдите во вкладку «Управление». На панели «Приложения» выберите команду «Загрузить приложение». Воспользуйтесь командной строй в Автокаде и введите «_appload».

2. Откроется диалоговое окно «Загрузка/выгрузка приложений». Найдите подходящий файл с расширением *.lsp или др.

Рис.2 – Автозагрузка приложения для Автокада

3. После проделанных действий нажмите кнопку «Загрузить».

Как запустить команду приложения lisp?

В AutoCAD lisp-команды посмотреть нельзя. Следует отталкиваться от исходного файла, который был загружен в программу.

Файл скрипта можно открыть через обычный «Блокнот». В верхней части этого текстового документа разработчики оставляют необходимую информацию для работы. В том числе название команды, которая будет запускать ЛИСП. В данном примере это «z-text-align», поэтому в командную строку нужно вводить именно такой запрос для вызова инструмента.

Рис. 4 – Название команды, которая запускает LISP в Автокаде

Далее следуйте указаниям командной строки и пошагово выполняйте запросы установленного скрипта.

Как подгрузить lisp в Автокад LT?

Как установить лисп в Автокад - понятно. Но как его загрузить в схожие программы, например, Автокад Electrical/Mechanical?

К сожалению, приложения, написанные на AutoLISP, работают только на полной версии программы AutoCAD. Поэтому такие скрипты нельзя внедрить в AutoCAD LT или др. версии.

Исключением могут являться специализированные приложения типа LT Extender и подобные ему, которые были разработаны с целью запуска файлов *.lsp или *.arx непосредственно в среде Автокад LT.

Более сорока лет назад разработан и внедрен в использование для выполнения целей искусственного интеллекта язык программирования LISP (ЛИСП), позднее ставший популярным среди пользователей ПО AutoCAD. Он создан для символьных вычислений. С течением времени был преобразован, чтобы соответствовать новым потребностям ИИ.

Начинающим пользователям, изучающим его архитектуру, рекомендуется рассматривать его в качестве формальной знаковой системы.

Это imperative language (императивный), действия которого описывают выполнение алгоритма, отличается от других, декларативных, предполагающих определение ограничений и соотношений в предметной сфере поставленной цели. По сравнению с другими подобными разработками С++ и FORTRAN, ЛИСП наделен большей функциональностью. Его популярность обусловлена большими возможностями для программирования в сочетании с мощным набором:

Это средства построения данных структур обозначения высокого уровня.

Конструкция

LISP синтаксис и семантика, разработанные программистами, обусловлены теорией рекурсивных функций. Символьные, s-выражения, являются элементами предложений, сочетаний. В них представлены софты и файлы. Они могут отображаться в виде списка (list) или атомов (atom).

Во втором варианте включены числовые комбинации, цифры, буквы латинского алфавита и знаки: *, -, +, /,@, %, , &, _, ,


Несколько поочередно идущих абзацев составляют каталог. Они обязательно разделяются пробелами и замыкаются в скобки.


Составляющими одних перечислений могут служить другие, более мелкие, подпункты. Символьные структуры разной формы и уровня сложности можно создавать благодаря произвольной углубленности и вложенности. Существует пустая строка, она обозначается – () и называется «nill». При возведении информационной структуры, а также при способе управления ею, она играет особенную роль, представляясь одновременно и атомом, и списком.

Язык LISP относится к языкам программирования, которые используются для создания дополнительных загрузок к ПО по проектированию и моделированию. Для их использования необязательно хорошо разбираться в компьютере на уровне профессионала.

После изучения основных принципов работы в таких пакетах, как AutoCAD или ZWCAD 2018 Professional, который является аналогом ACAD, появляется необходимость упростить выполнение длительных рутинных операций или полностью избавиться от них. Для этого дополнения и нужны. Если они написаны на ЛИСПе, скрипты называются LISP-приложения. Каждое из них представляет собой текстовый файл с определенным встроенным кодом для выполнения команды и подсказками от производителя. Определитесь с нужными для работы свойствами, выбирайте надстройку, скачивайте ее и загружайте в «ЗВКАД» или другую платформу. Рассмотрим возможности одного такого модуля на образце скрипта «Выравнивание текстов».





Примеры программ на ЛИСПе (lisp) для Автокада

Приложение форматирует страницу горизонтально и вертикально по заданной точке. Это полезная возможность, непредусмотренная в основном ПО. Файл с расширением *.lsp открывается двумя кликами левой кнопки мыши. В окне появится «блокнот».


Чтобы сгладить и уподобить несколько напечатанных строк в готовом чертеже, обычно приходится выполнять однообразные действия много раз. Со скачанным скриптом это выполняется одной командой (в примере указана Z-TEXT-ALIGN).

Подобные дополнения полезны на любом этапе проектирования. Их существует очень много, но совсем необязательно устанавливать все. Перед скачиванием, посмотрите, подходит ли скрипт для выполнения нужных конкретных задач. Для каждой области написаны подходящие:

  • для инженерного проектирования в строительстве;
  • коммунальных структур, занимающихся планированием и укладкой сетей;
  • ЛИСПы Автокада для геодезистов.

Как загрузить вспомогательную часть в ПО

После выбора нужного вложения возникает надобность его внедрения. Если речь идет об ACAD, для него доступны файлы с такими расширениями:

Помимо файлов lisp также поддерживается загрузка форматов:

На примере того же модуля для выравнивания текста рассмотрим, как подгрузить в основную программу его файл.

Обратите внимание: при скачивании архивированного лисп-приложения, распакуйте его, чтобы на ПК фрагмент сохранился перед загрузкой.

Этапы установки LISP (их можно отследить по истории):

  1. Перейдите по пути «Управление» – «Приложения» – «Загрузить».
  2. В командной строке основного ПО введите «_appload».
  3. В окне «Загрузка/Выгрузка» найдите файл с одним из вышеперечисленных расширений и кликните «Загрузить».
  4. Процедура завершена. Переходите к тестированию и написанию кода.


Важно: при каждом запуске базовой утилиты нажмите кнопку «Добавить» в разделе «Добавить в автозагрузку». Если этого не сделать, то будет выполнен единоразовый вход в модуль, который не сохраняется с закрытием софта.

Команды LISP-программы для Автокада (Autocad)

В главном ПО их посмотреть невозможно, поэтому нужно обратиться к исходному файлу дополнения. Он открывается в «Блокноте», вверху которого находится название команды для запуска лиспа и вся необходимая информация для работы от его создателей. В примере указано z-text-align, что и нужно ввести в командную строку, чтобы вызвать нужный инструмент.

После этого, следите за указаниями вложения. Обычно такие скрипты интуитивно понятны и не требуют дополнительных разъяснений относительно дальнейших действий пользователя.


Обратите внимание: в случае отсутствия подобной подсказки, ищите ее в коде – в строке «defun c: z-text-align».

Вложения, написанные на диалекте, разработаны только для внедрения в полную версию ACAD и в схожие программы, например, ZWCAD 2018 Professional, NanoCAD, они не подгружаются. Для них существуют другие приложения.

Список функций лисп (LISP) – языка программирования для Autocad

С оператора defun начинается определение задач. С его помощью создают опции с переменными. Зависимо от назначения, каждая из них будет действовать по-разному.

Варианты, производимые этим оператором:

  • с префиксом «С:» (circle) – команда на выполнение s-выражения в сфере деятельности;
  • без приставки – их вычисления используются в теле программы-дополнения.

В каждом модуле, написанном этим диалектом, есть встроенный интерпретатор. Он выполняет вычисление введенных данных и возвращает их в программную среду для дальнейшей обработки. Готовые наработки передаются на высший уровень системы или сохраняются в переменной. Это значит, что скрипт получает информацию, когда ее вводит пользователь, или при самостоятельном выборе из существующей. Он сохраняет ее в переменную, и производит вычисления, включающие неизвестное значение и функцию.

Есть участок кода: (setq gh (+ 4 5)), где setq – одна из прописанных единиц. Она объявляет вариацию gh. В скобках знак + тоже опция, числа 4 и 5 – данные, которые были введены в систему. Значение выражения в gh сохранится, то есть 4+5 =9, gh=9. При заданном условии (setqhj (* gh 2), в результат hj сохраняется 18 – gh = 9, 9 умножить на 2 равно 18.

Синтаксис отличен от привычной большинству математики. Его порядок представлен сначала задачей, а потом переменными. В школьном счете это выглядит, как (3+2), а здесь (+ 3 2), однако, смысл одинаковый.

Список функций lisp, работа которых является основой дополнительных приложений:

  • для преобразования данных (float);
  • вычислений (fix);
  • организации циклов (if);
  • логические (and, nul,=, , or и другие);
  • арифметические (+, -,

При помощи этого программного диалекта создают новые уравнения 3-х классов:

Язык, который не позволяет этого – бесполезен. Часто используется LISP в геодезии, инженерии и строительстве, применяя надстройку «Автокада».

С помощью ЛИСП изучают рекурсивную функцию, используя такую возможность, как «трассировка». Это основной и весьма эффективный способ организации вычислений, повторяющихся несколько раз.

На входе в эту ячейку печатают значения входящих параметров, а на выходе появляются результаты, полученные в ходе операции. Для этого есть специальная опция класса FSURB, называемая TRACE. При ее успешном завершении, возвращается наименование задачи. При неудачном – возврат «NIil».

Пример включения рассматриваемой возможности SUMLIST и произведения математических манипуляций, суммирования элементов списка (1 2 3 4 5):


Обратите внимание на то, что ответ на поставленную задачку ведется в ином порядке – от последнего к первому.

Используемые только для AutoCAD (Автокад) LISP программы, устанавливаются исключительно на полноценную версию и не подходят по списку функций и команд для работы в пакетах типа Autodesk LT, Electrical, Mechanical. Исключений немного, ими выступают специальные разработки типа LT Extender, с типом расширения *.arx, *.lsp.

Если имеются растры с файлами привязки .TAB (MapInfo, ТРАНСФОРМ), .jgw или .tfw , которые необходимо подгрузить в Автокад, то это приложение в помощь Вам. С ним нет необходимости подгружать, масштабировать перемещать и разворачивать каждый растр по отдельности, а достаточно установить данное приложение и выбрать необходимые файлы для загрузки.

Иногда будет удобно воспользоваться и тем, что данное приложение помимо подгрузки растров, может сформировать файлы привязки .TAB и tfw уже подгруженных растров.

Загрузка растра с файлом привязки в AutoCAD. Установка

1. Качаем архив с VLX файла для загрузки растра в AutoCAD здесь.

2. Распаковываем архив и сохраняем файл в папочку где хранятся все наши приложения, а если такой еще нет например в D:MyLisp.

3. Запускаем AutoCAD и устанавливаем VLX аналогично установке Lisp стандартным способом. Если не знаем как, читаем здесь.

4. Ну все можно пользоваться, набираем в командной строке:

5. Ну и для вывода команд с кнопки, создаем их стандартным способом и в поле макрос пишем следующее:

Полезно. Если не знаем как создать свою кнопку читаем здесь.

Примечание: Перед загрузкой растра, убедитесь что он не был загружен раннее, в противном случаи удалите его через палитру "Внешние ссылки" вызвав из пункта меню "Вставка" или набрав в командной строке _externalreferences.

Установка приложения для подгрузки растра с файлом привязки в Автокад. Видеоурок

Видео наглядно демострирует как подгрузить в координаты подложки имеющие файлы .TAB, .jgw или .tfw.


Ранее мы уже рассмотрели, что из себя представляет LISP-приложения для AutoCAD. Теперь давайте рассмотрим, как его внедрить в работу.

Для Автокада доступны приложения со следующим расширением файла: *.arx, *.crx, *.lsp, *.dvb, *.dbx, *.vlx, *.fas. Рассмотрим на примере ЛИСПа, который позволяет выравнивать текст относительно указанной точки по оси X или Y (скачать файл «Выравнивание текста .lsp»).

Как установить файл *.lsp в Автокад?

1. Перейдите во вкладку «Управление» и на панели «Приложения» выберите команду «Загрузить приложение». Можно воспользоваться командной строй в Автокаде и ввести «_appload».

2. Откроется диалоговое окно «Загрузка/выгрузка приложений», через которое вам нужно найти подходящий файл с расширением *.lsp или др, которое было перечислено выше.


3. После проделанных действий нажмите кнопку «Загрузить».


Как запустить команду приложения lisp?

В AutoCAD lisp команды посмотреть нельзя. Следует отталкиваться от исходного файла, который был загружен в программу.

Ранее мы говорили, что файл скрипта можно открыть через обычный «Блокнот». Как правило, в самом верху этого текстового документа разработчики оставляют всю необходимую информацию для работы, в том числе и название команды, которая будет запускать ЛИСП. В данном примере это «z-text-align», поэтому в командную строку нужно вводить именно такой запрос для вызова инструмента.


Далее следуйте указаниям командной строки и пошагово выполняйте запросы установленного скрипта. Как правило, все достаточно интуитивно понятно.

Как подгрузить lisp в Автокад LT?

С вопросом: «Как установить лисп в Автокад» все понятно. Но, как его загрузить в схожие программы, например, Автокад Electrical/Mechanical?

К сожалению, приложения, написанные на AutoLISP, работают только на полной версии программы AutoCAD. Поэтому такие скрипты нельзя внедрить в AutoCAD LT или др. версии.

Исключением могут являться специализированные приложения типа LT Extender и подобные ему, которые были разработаны чтобы запускать файлы *.lsp или *.arx непосредственно в среде Автокад LT.


Текст касается тех, кто значительно изменил / дополнил штатный функционал AutoCAD, и кого волнует последовательность загрузки собственных дополнений в AutoCAD. Вполне вероятно, что разъяснение загрузки, например, LISP-файлов, позволит выяснить причину некорректной их работы. В качестве примера здесь используется AutoCAD 2009, но подобные принципы используются во всех версиях AutoCAD начиная с 2006.

При старте AutoCAD прежде всего загружает свои CUI(X) файлы меню. Сначала загружается корпоративный файл меню (EnterpriseMenu), затем - основной файл меню (MainMenu), а затем - частичные меню (PartialMenu), присоединенные к основному, и в последнюю очередь - частичные файлы меню, присоединенные к корпоративному. Немного странная последовательность, но что есть то есть. Частичные файлы меню загружаются в той последовательности, в которой они были впервые загружены в AutoCAD. Обратите внимание - загружены, а не перечислены в команде _.menuload или _.cui. Этот порядок загрузки меню можно изменить. Самый простой способ - выгрузить частичные файлы меню и снова их загрузить в новом порядке. Можно, используя текстовые редакторы, вручную внести исправления в соответствующие CUI или CUIX файлы.

Рассмотрим подробнее механизм ручного изменения CUI/CUIX файлов. В качестве основных инструментов будем использовать текстовый редактор Notepad++ (распространяется бесплатно) и архиватор 7z (также бесплатен).
Для ручного внесения изменений в CUI-файл (используется в AutoCAD версии до 2009 включительно; при загрузке в последующие версии автоматически преобразовывается в CUIX) выполним такую последовательность действий:

Открытие cui в Notepad++
Откроем CUI файл в Notepad++
Установка форматирования
Установим форматирование XML для удобства работы
Находим PartialMenuFile
Найдем PartialMenuFile: ветка Header - CommonConfiguration
Меняем местами строки и сохраняем файл CUI. Может возникнуть желание удалить ненужные элементы, но я бы не советовал это делать: однажды подобным шагом я просто "убил" файл меню. Для редактирования CUIX-файла придется дополнительно выполнить несколько действий:
Открытие CUIX в 7z
Открываем файл CUIX в 7z
Открытие CUI из-под 7z

Важно!

Вернемся к последовательности загрузки.

Итак, AutoCAD загрузил свои CUI / CUIX файлы. Если в CUI / CUIX внедрены какие-либо LISP-файлы, то эти файлы в текущий момент еще не загружены.

Следом, если Вы создавали файл acad.rx и положили его в один из каталогов поиска AutoCAD, загружаются arx-модули, перечисленные в нем. Это один из путей автоматической загрузки arx-модулей.

После этого выполняется загрузка acad*.lsp-файлов. Сначала загружается acadXXXX.lsp, где XXXX - номер версии (для AutoCAD 2009 это будет файл acad2009.lsp, для AutoCAD 2013 - acad2013.lsp и т.п.). Если AutoCAD найдет файл acad.lsp, будет загружен этот файл. Меняя значение системной переменной ACADLSPASDOC, можно указать - либо файл acad.lsp будет грузиться только один раз в течение сессии, либо в каждый документ. В случае, если ACADLSPASDOC установлена в 1, то acad.lsp будет загружаться в каждый документ, следом за ним будет загружен файл acadXXXX.lsp, и / или acaddoc.lsp

Небольшое отступление: перечисленные файлы последовательно ищутся AutoCAD'ом сначала в каталоге с открываемым документом dwg, потом по всем каталогам поиска. Этим пользовались некоторые "вирусописатели" для AutoCAD, но в последних версиях Autodesk предприняла некоторые шаги по обеспечению безопасности своих пользователей.

Стоит особо отметить, что в принципе Вы можете дополнять / менять содержание этих файлов. Но Autodesk не рекомендует это делать: выход любого обновления может перезаписать эти файлы, и Вы потеряете все сделанные изменения.

Я очень давно не работал с VBA в AutoCAD, поэтому могу сказать только одно - если Вы создавали файл acad.dvb и положили его в один из путей поддержки AutoCAD, этот файл будет загружен. И загрузка будет выполнена именно сейчас.

Сейчас уже загружены все acad*.* файлы, пришло время загружать LISP-файлы, ассоциированные с меню. Если найден(ы) файлы MNL, лежащие рядом с файлом меню и имеющие такие же имена, выполняется их загрузка. Последовательно загрузки MNL такова же, какова и последовательность загрузки самих меню.

После MNL выполняется загрузка LISP, интегрированных в CUI / CUIX. Т.е. для любого меню сначала загружается MNL, потом внедренные в CUI / CUIX соответствующие LSP.

И только сейчас AutoCAD начинает опрашивать StartupSuite, загружая приложения оттуда в отображаемом порядке.

Фактически на данный момент загружены все модули и коды, но это еще не финал. Сейчас AutoCAD уже готов к выполнению команд и функций, вносящих изменения в базу чертежа. В принципе, есть неофициальные рекомендации выполнять подобные действия через специальную процедуру запуска, а не во время загрузки кодов. Но лично я этому не следую - пока нареканий не встречал.

Если у Вас есть в загрузке dvb-модуль, содержащий процедуру AcadStartup(), то эта функция начнет выполняться именно сейчас. При старте нового чертежа будет вызываться AcadDocument_Activate() вместо AcadStartup(). Но проверить это лично я не могу - опять же, не пишу на VBA.

Если в загрузку попали lsp-файлы, содержащие функцию (S::STARTUP), она автоматически выполняется. Для обеспечения полной корректности работы можно порекомендовать не полностью переопределять функцию (S::STARTUP), а дополнять ее код. В качестве примера можно привести такой код:

Читайте также: