Использование элементов ActiveX в Visual LISP
Сквозное проектирование
подразумевает комплексное и взаимосвязанное решение задач различных этапов и уровней ( так называемое сквозное проектирование) в рамках одной САПР
При этом с помощью САПР выполняют полный цикл проектирования и производства: составление технического задания, разработку объекта, моделирование его работы, автоматизированное изготовление объекта, оформление документации. По этой причине все чаще говорят о системе CAD/CAM (Computer-Aided Design/Computer-AidedManufacturing) — системе автоматизированного проектирования и производства, которая охватывает широкий спектр задач от начального конструирования до подготовки данных, необходимых для реального производства изделия.
сквозной цикл “проектирование-производство”. Сквозной цикл из-
готовления изделия (рис. 2.1) включает: конструирование, технологическое проектирование, инженерный анализ, управляющие программы. Это обеспечивает целостность геометрии при переходе к каждому последующему этапу.Системы автоматизированного проектирования высокого уровня значительно сокращают цикл “проектирование-производство” за счет сквозного параллель-
ного проектирования. Повышается также качество продукта.
Сквозные технологии проектирования и подготовки производства востребованы в России. В машиностроении появились компании, купившие мощные станки с ЧПУ для изготовления продукции под заказ. За счет использования средств 3D-моделирования и сквозного проектирования с передачей модели прямо на станок им удается выполнять такие работы быстро и качественно.
Основные функции CAM-систем: разработка технологических процессов, синтез управляющих программ для технологического оборудования с числовым программным управлением (ЧПУ), моделирование процессов обработки, в том числе построение траекторий относительного движения инструмента и заготовки в процессе обработки, генерация постпроцессоров для конкретных типов обору-
дования с ЧПУ (NC — Numerical Control), расчет норм времени обработки.
Наиболее известны (к 1999 г.) следующие CAE/CAD/CAM-системы, предназначенные для машиностроения. “Тяже-
лые” системы (в скобках указана фирма, разработавшая или распространяющая продукт): Unigraphics (EDS Unigraphics);
Solid Edge (Intergraph); Pro/Engineer (PTC — Parametric Technology Corp.), CATIA (Dassault Systemes), EUCLID (Matra
Datavision), CADDS.5 (Computervision, ныне входит в PTC) и др.
“Легкие” системы: AutoCAD (Autodesk); АДЕМ; bCAD (ПроПро Группа, Новосибирск); Caddy (Ziegler Informatics);
Компас (Аскон, С.Петербург); Спрут (Sprut Technology, Набережные Челны); Кредо (НИВЦ АСК, Москва).
Системы, занимающие промежуточное положение (среднемасштабные): Cimatron, Microstation (Bentley), Euclid
Prelude (Matra Datavision), T-FlexCAD (Топ Системы, Москва) и др. C ростом возможностей персональных ЭВМ грани
между “тяжелыми” и “легкими” CAD/CAM-системами постепенно стираются.
Функции CAЕ-систем довольно разнообразны, так как связаны с проектными процедурами ана-
лиза, моделирования, оптимизации проектных решений. В состав машиностроительных CAE-систем
прежде всего включают программы для следующих процедур:
— моделирование полей физических величин, в том числе анализ прочности, который чаще все-
го выполняется в соответствии с МКЭ;
— расчет состояний и переходных процессов на макроуровне;
— имитационное моделирование сложных производственных систем на основе моделей массо-
вого обслуживания и сетей Петри.
Автоматизированное производство computer-aided manufacturing — САМ — это технология, состоящая в использовании компьютерных систем для планирования, управления и контроля операций производства через прямой или косвенный интерфейс с производственными ресурсами предприятия, или автоматизированная система управления производственным оборудованием АСУПР. САМ — общий термин для обозначения программных средств подготовки информации для станков с ЧПУ, исходными данными для таких систем являются геометрические модели деталей, получаемые из систем CAD.
− CAM (Computer Aided Manufacturing) системы − компьютерная под-
держка изготовления. Предназначены для проектирования обработки изделий
на станках с числовым программным управлением (ЧПУ) и выдачи программ
для этих станков (фрезерных, сверлильных, эрозионных, пробивных, токарных,
шлифовальных и др.). CAM системы еще называют автоматизированными сис-
темами технологической подготовки производства (АСТПП). В настоящее вре-
мя они являются практически единственным способом для изготовления слож-
нопрофильных деталей и сокращения цикла их производства. Как правило, в
CAM системах используется трехмерная модель детали, созданная в CAD сис-
теме;
2 Инструментальные средства разработки программных приложений в среде AutoCAD (VisualLISP, VBA, ObjectARX, .NET API).
К средствам программирования AutoCAD относятся следующие языки:
- Visual C++;
- AutoLisp;
- Visual Basic for Application (VBA);
- Delphi;
- ARX;
- DCL.
Будучи частью AutoCAD, AutoLisp позволяет оперировать переменными различных типов и передавать их значения командам AutoCAD при вводе данных. При ответах на запросы команд AutoCAD существует возможность использовать выражения АutоL_sр, в которых могут выполняться различные арифметические и условные операции над числовыми значениями и значениями определенных переменных.
Помимо средств выполнения различных расчетов, AutoLisp содержит функции и средства, которые предоставляют доступ к графической базе данных текущего чертежа AutoCAD. Кроме того, AutoLisp позволяет управлять графическим редактором AutoCAD и обращаться к собственным командам системы. Благодаря возможностям программ АutоL_sр создаются функции, настроенные на конкретную область применения. Эти функции включают запросы к пользователю (диалоги), возможность выбора по условию из нескольких вариантов или использования нескольких значений по умолчанию. Хотя макроопределения, созданные при написании меню AutoCAD, могут быть довольно сложными, при отсутствии АutоL_sр они остаются всего лишь комбинациями стандартных команд системы. Включив же в меню функций макроопределения АutоL_sр, вы превращаете меню AutoCAD в интеллектуальное средство автоматизации проектирования.
Возможности, которые обеспечивает AutoLisp:
- использование переменных и выражений при ответах на запросы команд AutoCAD;
- чтение и создание внешних файлов (таким образом осуществляется обмен информацией с внешними программами, которые можно запускать из AutoCAD);
- создание различных функций и новых команд AutoCAD, что обеспечивает настройку и расширение графических возможностей системы;
- программный доступ (чтение и редактирование) к данным, которые относятся к объектам проектирования, а также к таблицам AutoCAD, содержащим информацию о блоках, слоях, видах, стилях и типах линий;
- программное управление графическим экраном AutoCAD, а также вводом/выводом из различных устройств.
Заметим, что AutoLisp может использоваться для автоматизации проектирования почти в любой области народного хозяйства: от машино- и кораблестростроения до строительства, геодезии и картографии.
На AutoLisp не составляет большого труда написать программу для отрисовки детали любой сложности. А поскольку AutoLisp представляет собой язык создания интеллектуальных систем и располагает широким набором математических функций, он подходит для выполнения сложных математических расчетов с последующей передачей результатов в среду AutoCAD.
В то же время у AutoLisp, одного из старейших языков AutoCAD, есть и серьезный недостаток – он является языком создания скриптов, командных и пакетных файлов, не позволяющим создавать программы с графическим интерфейсом, программы для обмена данными с внешними устройствами и другие решения, предназначенные для взаимодействия с системными функциями операционной системы.
При создании на АutоL_sр довольно сложных программ не всегда удается сделать наглядным и удобным ввод информации через командную строку. Диалог с программой можно усовершенствовать, используя язык программирования DCL (Dialog Control Language), который предоставляет графические меню, средства редактирования атрибутов и диалоговых окон. При совместном использовании с комплексом команд АutоL_sр этот язык обеспечивает возможность вызова и управления диалогом из Lisp-программы. Все это значительно расширяет возможности адаптации AutoCAD под конкретные прикладные задачи. Язык DCL позволяет влиять на способ вывода окна, а также на его состав: кнопки, списки, шкалы и т.д. Ограничения на размер и местоположение окна заданы правилами конструирования диалоговых окон. Расположение элементов окна напоминает расположение абзацев в форматированном тексте, поэтому нет необходимости задавать точные координаты фрагментов окон. Диалоговое окно из меню AutoCAD вызывается через функцию АutоL_sр, которая руководит диалогом.
Таким образом, использование этих двух языков программирования позволяет создавать довольно сложные системы автоматизированного проектирования на базе программного комплекса AutoCAD.
Одним из наиболее современных языков программирования под AutoCAD является язык VBA (Visual Basic for Application), который взаимодействует с AutoCAD через интерфейс ActiveХ Automation. В плане расширения возможностей AutoCAD этот язык существенно превосходит возможности AutoLisp. Через интерфейс ActiveХ Automation он получает доступ ко всем элементам среды AutoCAD, всем переменным и командам, благодаря чему можно без больших усилий модифицировать пользовательский графический интерфейс (изменять меню, линейки инструментов, графическое окружение, добавлять новые команды, работать с графической базой данных AutoCAD: слоями, блоками, вьюпортами, стилями отображения текста, линий, заливок).
Язык VBA имеет собственный набор переменных и развитую систему инструментов для выполнения математических, логических и системных операций. Это позволяет не только создавать программы осуществления сложных математических расчетов, модификации баз данных AutoCAD, автоматизации процессов черчения, но и использовать VBA при написании более сложных программ, связанных с системными событиями. Например, с помощью VBA несложно создать программы взаимодействия с системными командами Windows, а также с другими программами (Word, Excel, Access и др.). К достоинствам этого языка следует отнести и наличие разнообразных инструментов для взаимодействия с различными базами данных (Access, Oracle, FoxPro, dBase, Paradox).
Упомянутые возможности программирования на языке VBA позволяют создавать сложные системы автоматизации проектирования и подготовки конструкторской документации в режиме реального времени. В подтверждение достаточно упомянуть существующие системы для разработки электрических схем с автоматической вставкой электронных компонентов и последующим внесением информации о компонентах и всей электронной схеме в базы данных. По завершении разработки электронной схемы пользователь может получить в Excel или Access полную спецификацию использованных компонентов.
Таким образом VBA объединяет в себе функциональные возможности AutoLisp и DCL, дополнительно предлагая инструменты взаимодействия с программной средой Windows и прикладными программами различных фирм-разработчиков, которые поддерживают технологию ActiveХ Automation.
Продолжим наш обзор рассмотрением ObjectARX – объектно-ориентированного расширения программной среды AutoCAD. Используя язык программирования Visual C++ и библиотеки языка C++, ObjectARX позволяет разрабатывать программы, расширять классы AutoCAD и протоколы, а также создавать новые команды, которые работают аналогично командам, встроенным в AutoCAD.
Программы ObjectARX являются динамическими библиотеками (DLL), которые разделяют адресное пространство AutoCAD и выполняют прямые обращения к ядру AutoCAD. Это обеспечивает возможность создания новых примитивов, которые ведут себя как обычные примитивы AutoCAD (точки, линии, круги и т.д.).
ObjectARX открывает прямой доступ к базам данных AutoCAD, графической системе и всей системе команд. Следовательно, появляется возможность разрабатывать программы для взаимодействия со средой проектирования, создавать любые графические интерфейсы пользователя, обращаясь к библиотеке MFC, создавать программы с многооконными интерфейсами, формировать собственные классы и протоколы взаимодействия, взаимодействовать с другими программными средами и внешними устройствами.
Таким образом, ObjectARX позволяет создавать программы любой сложности. По функциональным возможностям он в несколько раз превосходит AutoLisp, DCL и VBA. Этот язык программирования позволяет написать и простой скрипт, и инструменты перепрограммирования ядра AutoCAD, а также взаимодействия с внешними устройствами. На ObjectARX и Visual C++ написаны Autodesk Mechanical Desktop, Autodesk Land Desktop, Autodesk Map, Autodesk Civil Design и многие другие приложения к AutoCAD.
Описанное позволяет сделать следующие выводы:
1. Используя современные языки программирования, можно существенно дополнить возможности базового программного обеспечения.
2. Четкое представление о возможностях каждого из языков позволяет оптимизировать процесс создания прикладных программ.
3. Каждый из языков наилучшим образом соответствует вполне определенным задачам:
- AutoLisp – автоматизация процесса подготовки проектирования, создание новых команд, получение и сохранение информации по текущему чертежу, создание скриптов и изменение информации в текущем файле;
- VBA – изменение и дополнение графического интерфейса пользователя, создание новых команд, объединение Windows-программ и AutoCAD в единый комплекс;
- ObjectARX – дополнение AutoCAD новыми объектами, классами, протоколами, методами и механизмами обработки информации; установление связи AutoCAD с различными системными событиями и внешними устройствами.
При разработке программы следует учитывать следующие два важных фактора. Первый – необходимость быстрого написания программного кода, второй – быстродействие создаваемой программы. Если более существенным представляется первый фактор, можно и нужно использовать совместный подход к написанию: параллельно задействовать все языки, упомянутые выше, и получить комплексный код программы. При этом используется определенный язык программирования, который позволяет выполнить задачу наиболее удобно и быстро. Если же преобладают соображения быстродействия, следует отдать безусловное предпочтение языкам C++, Assembler и ARX.
NET
В состав ObjectARX SDK входит также управляемый API, который часто называют AutoCAD .NET API. Для адаптации и расширения функциональных возможностей AutoCAD и продуктов на его основе может применяться любой язык программирования, поддерживающий .NET. Обеспечивается непосредственный доступ к структурам базы данных AutoCAD, определениям встроенных команд и другим внутренним программным элементам. Язык Microsoft® Visual Basic.NET (VB.NET) прост в освоении и использовании, и в то же время открывает перед разработчиками приложений весь спектр возможностей ObjectARX.
Платформа .NET Framework — это встроенный компонент Windows, который поддерживает создание и выполнение нового поколения приложений и веб-служб. Основными компонентами .NET Framework являются общеязыковая среда выполнения (CLR) и библиотека классов .NET Framework, включающая ADO.NET, ASP.NET, Windows Forms, Windows Presentation Foundation (WPF) и Windows Workflow Foundation (WF). .NET Framework предоставляет среду управляемого выполнения, возможности упрощения разработки и развертывания, а также возможности интеграции со многими языками программирования.
NET Framework — программная технология от компании Microsoft, предназначенная для создания обычных программ и веб-приложений.
Одной из основных идей Microsoft .NET является совместимость различных служб, написанных на разных языках. Например, служба, написанная на C++ для Microsoft .NET, может обратиться к методу класса из библиотеки, написанной на Delphi; на C# можно написать класс, наследованный от класса, написанного на Visual Basic .NET, а исключение, созданное методом, написанным на C#, может быть перехвачено и обработано в Delphi. Каждая библиотека (сборка) в .NET имеет сведения о своей версии, что позволяет устранить возможные конфликты между разными версиями сборок.
Среды разработки .NET-приложений:
Microsoft Visual Studio (C#, Visual Basic .NET, Managed C++),
SharpDevelop,
MonoDevelop,
Eclipse,
Borland Developer Studio (Delphi for .NET, C#),
PascalABC.NET и т. д.
Приложения также можно разрабатывать в текстовом редакторе и использовать консольный компилятор.
Подобно технологии Java, среда разработки .NET создаёт байт-код, предназначенный для исполнения виртуальной машиной. Входной язык этой машины в .NET называется MSIL (Microsoft Intermediate Language), или CIL (Common Intermediate Language, более поздний вариант), или просто IL. Применение байт-кода позволяет получить кроссплатформенность на уровне скомпилированного проекта (в терминах .NET: сборка), а не только на уровне исходного текста, как, например, в С. Перед запуском сборки в среде исполнения CLR байт-код преобразуется встроенным в среду JIT-компилятором (just in time, компиляция на лету) в машинные коды целевого процессора. Также существует возможность скомпилировать сборку в родной (native) код для выбранной платформы с помощью поставляемой вместе с .NET Framework утилиты NGen.exe
С выходом AutoCAD 2010, пользователи, которые создают для него приложения в среде Visual Basic for Applications оказались на перепутье. Они еще имеют возможность создавать и запускать проекты на VBA, но эту возможность следует активировать. Для этого следует загрузить соответствующий вашей версии Windows модуль VBA со страницы http://www.autodesk.com/vba-download . С другой стороны, следует учитывать, что Autodesk объявил о переходе от поддержки VBA к .NET неспроста. .NET APIболее удобно, и что важно, намного более мощно и позволяет создавать команды и функции AutoLISP которе не могут быть созданы с помощью API ActiveX и VBA. В этой статье описаны азы перехода от VBA к .NET в AutoCAD 2010.
Заключение
В настоящее время не существует официальной временной линии касательно того, когда VBA больше не будет доступен в AutoCAD, но в конечном счете это произойдет..NET API предлагает много выгод по сравнению с API ActiveX и VBA, поэтому если вы в настоящее время используете VBA, мы советуем вам начать изучение .NET . Начать лучше с написания элементарных подпрограммы, а затем перейти к чему-то более сложному. Хорошим началом будет перезапись существующего проекта на VBA.
~ в Visual LISP единого представления функций и данных в виде списков больше нет! AutoLISP, начиная с версии 2000, больше не является "натуральным", то есть не работает со списками кода, которые могли объединяться во время работы. Теперь LISP-программы всегда выполняются в откомпилированном виде, даже если они загружались из LSP-файлов или вообще вводились в командной строке. Компилирование происходит всегда и в памяти.
~в Visual LISP появилось много новых функций, которых так не хватало в AutoLISP - работа с файлами, реестром, сортировка, дополнительные функции для работы со списками и т. п. Специально мы их разбирать не будем, применение таких функций очевидно.
~ самое главное, Visual LISP поддерживает технологию ActiveX Automation, разработанную и внедряемую фирмой Microsoft.
При работе по технологии ActiveX одни приложения (клиенты) имеют доступ к объектам других приложений (серверов) и могут этими объектами управлять. Самым важным приложением-сервером для программ, написанных на Visual LISP (далее VL-программ), является AutoCAD. Для доступа к объектам AutoCAD в Visual LISP включено очень много функций (все они имеют префикс vla- или vlax-).
Однако из VL-программ можно получить доступ и к объектам других приложений. Обычно в пример приводят программы Microsoft Office, но такие программы вы можете написать и сами. Найдите на компьютере все файлы с расширениями tlb и olb и вы получите впечатляющий, но неполный список серверов, к объектам которых вы имеете доступ! А в ветвях реестра HKEY_CLASSES_ROOT*Clsid вы найдете полный список серверов автоматизации, которые только и мечтают, чтобы к ним обратились из VL-программ.
5 объектная модель (лек)
Вкратце, для непосвящённых, объектная модель AutoCad - это структура объектов: приложения AutoCad, его документов (открытых чертежей), объектов черчения (точки, линии и т.п.), словарей (смотри документацию по AutoLisp), их свойств и методов. Все эти объекты описаны в системе COM и предоставлены любым языкам программирования. Описание объектной модели осуществлено в файлах с расширением tlb (type library - библиотека типов), а доступ к объёктам и их свойствам описано в реестре.
СМ ВОПРОС 3)
Ключевые термины
COM (Component Object Model) - спецификация метода создания компонентов, из которых строятся приложения.
ActiveX Automation - технология автоматизации встраивания и связывания объектов в разных приложениях, реализующая принципы объектно-ориентированного программирования.
Базовые интерфейсы - компоненты, предназначенные для реализации базовых инструментов объектной технологии. В них описываются все типичные свойства и методы базовых объектов. Например, базовым интерфейсом всех графических примитивов является IAcadEntity. Он является родительским для интерфейсаIAcadLine. С помощью этого интерфейса создаются объекты семейства AcDLine, представителем которого является объект Line.
vla-, vlax-, vlr-функции- функции, реализующие технологию ActiveX в Visual LISP. Доступ к этим функциям можно получить только после выполнения в данном сеансе AutoCAD функции vl-load-com.
Реактор - отклик системы на события, обеспечиваемые функциями vlr-.
Краткие итоги
В модели ActiveX Automation работающее приложение представляется совокупностью объектов, свойств, методов и событий. С помощью функций ActiveX можно создавать объекты, извлекать и модифицировать информацию об объектах, получать доступ к документам. Особыми объектами ActiveX являются реакторы, задающие отклик на события.
Объектная модель AutoCAD основана на концепции COM (Component Object Model) . Это спецификация метода создания компонентов, из которых строятся приложения. Система AutoCAD поддерживает технологию ActiveX Automation, которая реализует принципы объектно-ориентированного программирования. В этой технологии модель работающего приложения представляется совокупностью объектов, свойств, методов и событий. Для каждого из этих элементов имеется свой алгоритм реализации в виде операций и данных, которые обеспечивают взаимодействие с пользователем.
Объекты ActiveX в системе AutoCAD рассматриваются как иерархия, содержащая примитивы, символьные таблицы, словари и пр. Однотипные объекты объединяются в семейства (collections).
Высшим элементом в иерархии является объект Application (AcadApplication) . Этот объект является родительским для следующих объектов:
- Preferences (Настройки);
- VBE (объект интегрированной среды VBA-приложений);
- Documents (Документы);
- MenuBar (Строка меню);
- MenuGroups (Группы меню).
Эти объекты, в свою очередь, являются родительскими для объектов более низких уровней. Семейство Documents включает в себя объекты Document - открытые документы или рисунки. В семейство MenuGroups входят объекты типа MenuGroup(Группа меню или Группа адаптации). В семейство MenuBar входят объекты типа PopupMenu (Падающие меню, загруженные в строку меню).
Наиболее важным для практики является объект Document. Он включает в себя, в частности, такие семейства:
- Blocks (Блоки);
- ModelSpase (Пространство модели);
- PaperSpace (Пространство листа);
- Dictionaries (Словари);
- DimStyles (Размерные стили);
- Groups (Группы);
- Layers (Слои);
- Layouts (Листы);
- Linetypes (Типы линий);
- Plot (Печать);
- PlotConfigurations (Конфигурации печати);
- Preferences (Настройки чертежа);
- RegisteredApplications (Зарегистрированные приложения);
- SummaryInfo (Свойства чертежа);
- SelectionSets (Выделенные наборы);
- TextStyles (Текстовые стили);
- UCSs (Пользовательские системы координат);
- Utility (Утилита);
- Viewports (Видовые экраны);
- Views (Виды).
Для реализации базовых инструментов объектной технологии в модели предусмотрены компоненты, называемые интерфейсами. В базовом интерфейсе описываются все типичные свойства и методы. Например, базовым интерфейсом всех графических примитивов является IAcadEntity. Он является родительским для интерфейсаIAcadLine. С помощью этого интерфейса создаются объекты семейства AcDLine, представителем которого является объект Line.
Каждый объект в технологии ObjectX имеет свои свойства и методы. Свойства можно читать или изменять с помощью соответствующих функций. Функции, соответствующие методам, реализуются в командах с соответствующими параметрами. Элементами объектной модели являются также события. Они возникают в результате действий пользователя (Click) или при изменениях в программе (onLoad). Программа может отслеживать события и реализовать сценарий отклика на события.
Функции и типы данных
Функции, реализующие технологию ActiveX в Visual LISP, имеют префиксы vla-, vlax-, vlr. Доступ к этим функциям можно получить только после выполнения в данном сеансе AutoCAD функции vl-load-com.
Работа с каждым из объектов в технологии ActiveX ведется на уровне указателей. Они носят название VLA-объекты. VLA-объектами являются указатели не только графических примитивов, но и документов, пространства модели и приложений.
Практически обязательной для всех приложений, использующих ActiveX, является следующая структура функций:
(defun begin_activex ( / )(vl-load-com)(setq acad_app (vlax-get-acad-object))(setq active_doc (vla-get-activedocument acad_app))(setq model_space (vla-get-modelspace active_doc))(setq paper_space (vla-get-paperspace active_doc))); defunВ результате выполнения функции begin_activex будут получены следующие VLA-объекты:
- acad_app приложение AutoCAD;
- active_doc активный документ;
- model_space пространство модели;
- paper_space пространство листа.
После получения основных VLA-объектов можно через них обращаться к другим элементам иерархии системы AutoCAD (примитивам, таблицам и пр.) для получения или модификации их свойств и методов. Основным средством получения VLA-объекта для примитива является функция vlax-ename-<vla-object. Обратная функция vlax-vla-object-<ename.
Кроме VLA-объектов, в ActiveX используют новые типы данных: безопасные массивы и варианты.
Безопасные массивы являются массивами однотипных объектов. Они создаются с помощью функций
- vlax-make-safearray;
- vlax-safearray-put-element;
- vlax-safearray-fill.
Для извлечения данных из безопасных массивов с целью использования обычных LISP-функций применяются функции:
vlax-safearray-get-dim;vlax-safearray-get-l-bound;vlax-safearray-get-u-bound;vlax-safearray-get-element;vlax-safearray-type.Для преобразования массива в список используют функцию
vlax-safearray-<list.Варианты - это структуры, которые могут хранить однотипные данные. Тип данных является типом варианта. Создание варианта выполняется с помощью функции(vlax-make-variant [<данное> [<целое>]]).
В качестве второго аргумента передается целое число, задающее тип варианта. Если оно опущено, то тип варианта определяется по типу первого аргумента. В качестве значения аргумента <целое> используются зарезервированные константы.
Константа | Значение | Описание |
Vlax-vbEmpty | Неинициализированный (значение по умолчанию) | |
Vlax-vbNull | Пустой (без данных) | |
Vlax-vbInteger | Короткое целое число | |
Vlax-vbLong | Длинное целое число | |
Vlax-vbSingle | Вещественное число | |
Vlax-vbDouble | Вещественное число с двойной точностью | |
Vlax-vbString | Строка | |
Vlax-vbObject | Объект | |
Vlax-vbBoolean | Булево значение | |
Vlax-vbArray | Массив |
Примеры функций, выполняющих операции с вариантами:
- vlax-variant-type - получение типа варианта;
- vlax-variant-value - получение значения варианта;
- vlax-variant-change-type - изменение типа варианта;
- vlax-variant-type - оформление трехмерной точки как варианта.
Использование элементов ActiveX в Visual LISP
Элементы ActiveX - это программный интерфейс, который используется в поддерживающих его языках программирования. Элементы ActiveX обеспечивают взаимодействие между объектами, с одной стороны, и пользователем или приложением, с другой стороны. Технология ActiveX позволяет получать информацию об объектах чертежа с помощью функций доступа (get functions) и модифицировать объекты с помощью функций модификации (put functions).
Выше было рассмотрено, как извлекать и модифицировать информацию об объектах с помощью функций-интерфейсов на языке AutoLISP. Элементы ActiveXобеспечивают аналогичный способ получения и модификации информации. Однако для этого необходима определенная подготовка.
AutoCAD предоставляет все свои объекты, включая функции доступа и модификации, в распоряжение элементов ActiveX. Вначале в Visual LISP необходимо перед началом сеанса работы загрузить все функции ActiveX с помощью функции (vl-load-com) ↵
При этом все функции-интерфейсы ActiveX станут доступными. Загрузив интерфейс ActiveX, можно выполнить необходимые действия над созданным ранее отрезком. Но вначале нужно преобразовать имя сущности в объект vla. Этот объект ActiveX практически ничем не отличается от имени сущности, но содержит ряд свойств, которые отсутствуют в его аналоге в языке AutoLISP. Для преобразования используется функция vlax-ename-<vla-object. Пример обращения к этой фунции:
(setq vla-line (vlax-ename-<vla-object (entlast)))↵Среда Visual LISP возвратит следующее выражение:#<VLA-OBJECT IAcadLine 03612b14>Протокол операций будет выглядеть следующим образом:
Command: _line Specify first point: 5,5,0Specify next point or [Undo]: 15,-5,0Specify next point or [Undo]: *Cancel*Command: '_.zoom _eCommand: (vl-load-com)Command: (setq vla-line (vlax-ename-<vla-object (entlast)))#<VLA-OBJECT IAcadLine 01f1bb4c>Возвращаемое значение переменной есть объект vla. Теперь можно визуально отслеживать значения этой переменной, выделив ее и выбрав команду VIEW - INSPECT. То же самое можно сделать в окне CONSOLE, запустив функцию (vlax-dump-object vla-line) ↵
Возникающее окно инспектора показано на рис. 9.2.
Рис. 9.2. Окно инспектора объекта VLA
Для получения начальной точки объекта используется функция VLA-GET-STARTPOINT. В рассматриваемом примере отрезок был преобразован в объект vla, свойства которого содержит переменная vla-line. Для получения начальной точки можно ввести следующее выражение:
(setq Starting (vla-get-startpoint vla-line))↵В ответ будет выдано сообщение:
#<variant 8197 …>Чтобы преобразовать координаты начальной точки из типа данных variant к координатному формату, введите следующую строку кода:
(safe-array-value (vlax-variant-value Starting))↵Теперь Visual LISP возвратит координаты начальной точки отрезка: (5.0 5.0 0)
Чтобы изменить значение свойства StartPoint на (0,0,0), напишите выражение:
(vla-put-startpoint vla-line (vlax-3d-point '(0 0 0)))↵Проверьте отрезок в окне AutoCAD. Для проверки значения свойства StartPoint можно также воспользоваться функцией VLA-GET-STARTPOINT.
(safe-array-value (vlax-variant-value (vla-get-startpoint vla-line)))↵Теперь Visual LISP возвратит такое значение: 1. 0.0 0.0
В 1996 году начинается внедрение технологии ActiveX Automation - стандартного метода Microsoft предоставления доступа к частям одного приложения для использования другими приложениями. В 1997 году для использования возможностей ActiveX в AutoCAD вводится возможность разработки приложения на VBA (Visual Basic for Applications). Язык VBA базируется на стандартном Visual Basic и, по идее Microsoft, может внедряться в любые приложения. Используя VBA можно создавать программы, управляющие теми частями основного приложения, доступ к которым предоставлен через ActiveX Automation.
Вообще-то ActiveX Automation позволяет создавать приложения на любом языке, который поддерживает интерфейс ActiveX Automation: C++ , Delphi, Visual Basic. Все это отдельные среды, не интегрированые в AutoCAD. VBA встроен в среду AutoCAD (конечно, не бесплатно) и якобы нет необходимости приобретать дополнительные программные средства - Microsoft свою долю с вас уже получила.
В 1998 году новая среда разработки LISP-программ Visual LISP также получает возможность использования механизмов ActiveX. Это открывает новые возможности, недоступные в добром старом AutoLISP.
Каждый объект содержит набор ассоциирующихся с ним свойств и методов. Свойства описывают индивидуальные аспекты объекта, в то время как методы являются действиями, которые могут быть применены к индивидуальному объекту. Единожды созданный объект можно опросить, а так же отредактировать его посредством свойств и методов оного объекта.
Например объект класса Circle (окружность) имеет свойство Center (центр). Это свойство представляет собой точку в мировой системе координат (МСК [прим. переводчика: WCS - англ. вариант]), являющуюся центром окружности. Для изменения центра окружности можно легко присвоить свойству Center новую точку. Объект [прим. переводчика: класса] Circle так же имеет метод под названием GetOffsetCurves. Этот метод создаёт новый объект, смещённый относительно существующей окружности на указанное расстояние.
DXF-коды
Все данные, описывающие примитив, - это список, состоящий из подсписков, в которых сгруппирована по функциональному назначению вся информация о примитиве, как геометрическая, так и общая; слой, цвет и т.п. Подсписки отличаются по специальным кодам формата DXF (Drawing exchange Format - формат обмена рисунками), позволяющим определить, какой тип данных хранится в подсписке. Каждый подсписок имеет две части. Первая - код DXF, вторая - данные. Целое число 0, например, представляет собой код типа примитива. Код 8 говорит о том, что следующее за ним число - номер слоя. Код 10 - начальная точка примитива, код 11 - конечная и т.п. Отметим, что набор кодов DXF различен для примитивов разных типов. Однако сами коды относятся ко всем примитивам - имя примитива, например, всегда хранится в подсписке с кодом DXF -1.
Представим часть полученного списка EDATA в более понятном виде:
( (-1 . <Имя примитива: 60000020>)
(0 . "LINE") - Тип примитива
(8 . "0") - Слой
(10 1.0 2.0 0.0) - Начальная точка
(11 6.0 6.0 0.0)
) - Конечная точка
Пользуясь кодами DXF, можно извлечь из списка EDATA любую информацию о примитиве. Такой доступ к рисунку более сложен, но позволяет изменять практически все свойства примитивов. При работе со списками данных о примитивах необходимо использовать кодировку кодов DXF.
9 (см 4 и htm страницу?? )
Рекомендуется следующий алгоритм работы с объектной моделью:
· Изучить объектную модель и найти место интересующего объекта (или семейства) в иерархии объектов.
· Получить по иерархическому дереву указатель на интересующий объект.
· Изучить свойства и методы объекта.
· Получить наименование нужного свойства или метода.
· Установить нужное свойство или применить нужный метод.
Это укрупненная схема, при реализации нужно учитывать много деталей, например, проверять, доступно ли свойство для изменения.
Мы обычно поступаем следующим образом:
· В IDE Visual LISP вызываем справку.
· В разделе "ActiveX and VBA Reference" выбираем требуемый объект (например, Objects > Block Object).
· На выведенной странице по объекту изучаем его общее описание и списки доступных методов (Methods), свойств (Properties) и событий (Events).
· Щелкаем по кнопкам в верхней части страницы, чтобы просмотреть, в какие объекты может входить данный объект, какие объекты может содержать данный объект и какие он поддерживает интерфейсы.
· При необходимости изучаем соответствующие методы и свойства (и примеры, правда, на VBA) в таком же порядке.
Для преобразования данных из традиционного представления в объектное и обратно необходимо использовать специальные функции, такие как:
· vlax-ename->vla-object,
· vlax-vla-object->ename,
· vlax-safearray->list
11 Варианты - это структура, которая может хранить объекты разных типов. (vlax-make-variant)
Безопасный массив - массив понятно, безопасный - потому что система постоянно контролирует тип и количество элементов (vlax-make-safearray- создаётvlax-safearray-fill - заполняет)
13 отладка
~~