![]() | ![]() |
Translate to: |
|||||
Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО |
Используйте AutoLISP как путь к VBA.
Если Вы уже знаете AutoLISP и хотите изучит VBA, ассоциируйте VBA с выражениями AutoLISP. Это - не курс AutoLISP или VBA, а сравнение двух языков. Из-за большего количества доступного AutoLISP-кода, проще транслировать существующий блок AutoLISP в VBA , чем повторно изобретать это. Также проще сравнить два кода, если имена переменных остаются те же самые.
Отправные точки
В AutoLISP, Вы используете функцию (setq), чтобы определить точку. Следующая строка назначает переменный PT1 переменный значение расположения точки 0,0,0, что относится к x -, y -, и z-координатам расположения точки:
(setq PT1 '(0 0 0))В VBA это действие требует еще нескольких строк кода:
Dim PT1(0 To 2) As Double PT1(0) = 0# PT1(1) = 0# PT1(2) = 0#
Вы используете декларацию Dim, чтобы объявить переменные в VBA. Точки всегда сохраняются в массиве из тремя элементами типа doubles. Массив не ничто больше чем список переменных. Переменные в массиве все имеют те же самые имена. Первая переменная в массиве использует индексное значение 0, таким образом это переменная PT1(0). Вторая переменная в массиве - PT1(1), и так далее. VBA использует символ # как указатель на тип данных double. В этом массиве, PT1(0) сохраняет значение для x-координаты, PT1(1) - значение для y-координаты, и PT1(2) - значение для z-координаты.
Теперь, когда Вы знаете, как хранить точку, мы можем писать макрокоманду VBA, чтобы провести линию между двумя точками. Сначала я буду показывать Вам, на что макрокоманда походит в AutoLISP, затем в VBA. Посмотрите код в Line1 (рис. 1).
В AutoLISP, Вы используете (defun), чтобы определить функцию, названную Line1, C: перед именем функции означает что пользователи могут выполнять эту функцию из приглашения ко вводу команды AutoCAD. Далее назначим две точки, а затем используем команду AutoCAD Line, чтобы начертить линию между двумя точками.
В VBA, процедура подпрограммы создает ту же самую функцию как выше. Загрузите VBA IDE (интегрированную среду разработки) и наберите код VBA как показано в Line1 (рис. 1).
Если Вам необходима помощь, чтобы загрузить VBA IDE, обратитесь к рис. 2. Чтобы запустить ваш макрос, обратитесь к рис. 3.
Первая строка в подпрограмме объявляет переменную NewLine как объект, который является элементом приложения. Примеры объектов - линии, просмотры, и уровни.
Затем, объявим две точки с помощью точечные массивов. В заключение, AutoCAD проводит линию от (0,0,0) до (4,4,0). Чтобы добавить линию в пространство модели, мы используем коллекцию объектов ModelSpace с методом AddLine а также начальную и конечную точки линии.
Коллекция объектов - это набор средств, на которые Вы можете ссылаться как на группу. Коллекции ModelSpace и PaperSpace содержат все графические объекты, найденные в чертеже. Они также содержат все неграфические объекты, которые являются частью чертежа, такие как уровни, linetypes, dimstyles, и наборы выбора.
Указание точек
В AutoLISP, Вы должны предупреждать пользователя, чтобы он выбрал точку, как показано в следующем примере в Line2. Вы можете выполнить это в VBA, используя метод GetPoint объекта Utility, с объявлением дополнительной переменной VarRet.
Метод выполняет действие на объект. Каждый графический объект имеет методы, которые позволяют приложению выполнять большинство команд редактирования в AutoCAD.
Объект Utility обеспечивает пользовательский ввод и конверсию функций. Переключитесь в VBA IDE и добавте код VBA в Line2 (рис. 4).
В это время, метод GetPoint возвращает тип данных Variant, который сохраняет данные любого типа. Чтобы использовать начальную и конечную точки, которые Вы выбрали и сохранили в переменной VarRet, Вы должны преобразовать данные из Variant в массив doubles, назначенный PT1 и PT2. Теперь, переключитесь в AutoCAD и запустите функцию LINE2.
Больше точек
Большинство программ требует больше чем две точки, чтобы создавать объекты внутри AutoCAD. В AutoLISP используют функцию (polar) в Rect (рис. 5). Переключитесь в VBA IDE и введите код VBA.
Метод AddLightWeightPolyline требует массив x- и y-координаты для каждой точки полилинии. Используйте метод GetDistance объекта Utility, чтобы найти ширину и высоту прямоугольника. Код передает эти значения методу PolarPoint чтобы найти требуемые три точки.
Метод PolarPoint в VBA подобен функции (polar) в AutoLISP. Он запрашивает точку, угол, и расстояние. Углы - в радианах и могут быть постоянным значением или переменной.
Эти простые примеры - основа для написания параметрических программ, которые дают доступ к данным из внешних файлов. Более подробнее об этом ниже.
Рисунок 1 |
AutoLISP code(defun C:LINE1 () VBA code Sub Line1() |
Следуйте этоим шагам, чтобы получить доступ к возможностям VBA в AutoCAD:
Чтобы запустить ваши VBA-макросы:
Рисунок 4 |
AutoLISP code(defun C:LINE2 () VBA code Sub Line2() |
Рисунок 5 |
AutoLISP code;Draw a rectangle using (polar) function VBA code 'Draw a rectangle using PolarPoint |
Файловый ввод-вывод.
Много программ требуют читать и записывать данные в файлы. AutoLISP и VBA обеспечивают некоторые общие функции работы с файлами и выражения, обеспечивающие ввод-вывод в дисковую систему.
Текстовые процессоры, электронные таблицы, и программы баз данных создают ряд типов файлов. Однако, AutoLISP может обрабатывать только текстовый файл ASCII, которые могут генерировать много программ. Вы можете открывать файлы большинства программ Windows с помощью VBA. С целью сравнения, этот раздел будет рассматривать только файловый Ввод - вывод для текстовых файлов ASCII.
Открытие файлов
Обработка файлов относительно проста. Прежде, чем Вы можете записывать файл на диск или читать его, Вы должны открыть файл. После открытия, Вы можете читать и записывать данные одновременно посимвольно или построчно. Это истинно и для AUTOLISP и для VBA программам.
Чтобы открыть файл в AutoLISP, используйте выражение: (setq #1 (open "c:/temp/test.txt" "w")). AutoLISP возвращает файловую метку или указатель который сохраняется в переменной #1.
Поскольку Вы можете записывать и читать файл, Вы должны точно определить, какой режим доступа вам необходим во время открытия файла. Режим - один символ нижнего регистра, как показано в таблице 1 ниже.
Чтобы открыть файл в VBA, используйте: Open "c:\temp\test.txt" For Output as #1. В VBA Вы должны указать режим открытия, как показанно в таблице 2 ниже. VBA режимы подобны режимам AutoLISP в таблице 1. Номер файла #1 есть номер от 1 до 255 и ассоциируется с открытым файлом с этим номером. Предшествующий знак (#) является произвольным. На обоих языках имя файла c:\temp\test.txt должно быть строковая величина или переменная, которая содержит имя файла. Однако, в AutoLISP Вы должны использовать косую черту (/) или две наклонных черты влево (\\), чтобы показать путь к файлу внутри строки имени файла.
Закрытие файлов
Оба языка используют оператор Close, чтобы освободить файл для других приложений и возвращать номер файла или переменную обратно вашему приложению в случае, если Вы хотите использовать их в последующем в операторе Open.
Каждая программа, которая открывает файл, должна его и закрыть. В AutoLISP Вы используете выражение: (close #1). Вы закрываете каждый файл точно определяя переменную, используемую для открытия файла в выражении (setq).
Оператор Close в VBA имеет один из двух форматов: Close #1 или Close #1, #2, #3, и Close. Первый формат закрывает один или большее файлов по их номерам открытия. Close закрывает все файлы, которые Вы открыли. Убедитесь, что закрыли все открытые файлы перед перед выходом из программы или когда вы - не нуждаетесь в доступе к этим файлам.
Запись в файл
Когда Вы записываете в файл, AutoLISP обеспечивает функцию (write-line) , чтобы записать данные в файл или на экран и добавляет
В VBA, оператор write# допускает Вам записывать данные в любом формате в любой файл на диске, открытый в режиме Output или Append. Write# записывает строки, числа, постоянные, и переменные в любой и всех комбинациях в дисковый файл и добавляет Enter> в конце строки: Write #1, "THIS IS THE FIRST LINE".
Распечатка 1 показывает AutoLISP и VBA код для записи двух строк в файл test.txt . Создайте файл в C:\TEMP или используйте существующий подкаталог на вашем компьютере.
Первая строка - строка, записанная непосредственно в файл функцией (write-line) или оператлором Write# . Вторая строка назначена переменной LINE2, затем записана в файл, используя имя переменной внутри операторов (write-line) и Write# .
Распечатка 2 показывает код AutoLISP и VBA, добавляющий данные в конец файла данных.
Чтение файлов данных
Другие языки программирования дают Вам возможность произвольного доступа - они позволяют Вам перемещаются в определенные локализации внутри файла. Функция AutoLISP (read-line) читает файлы только последовательно cверху вниз.
В AutoLISP чтобы читать из файла, необходимо открыть файл в режиме "r" и извлечь данные функцией (read-line). AutoLISP автоматически переходит на следующую строку с каждым вызовом (read-line). Когда достигается конец файла, AutoLISP возвращает nil. Распечатка 3 показывает пример кода, который устанавливает переменную для каждой из четырех строк в файле test.txt.
Вы можете вызвать ошибку, когда попытаетесь читать большее количество данных из файла чем файл содержит. Распечатка 3 показывает что файл test.txt имеет четыре строки, и это правильно. Для других файлов данных, число строк или записей различно.
Функция (eof) на обоих языках - встроенная функция конца файла, которая определяет, когда (read-line) или Input достигают конца файла. (eof) возвращает True, когда достигнут конец файла и False, когда файл еще имеет данные для чтения. Большинство вводимых данных программирует в цикле, пока (eof) не true.
Распечатка 4 показывает пример этого цикла для каждого языка. В примере для AutoLISP, функция (while) продолжается в цикле и отображать каждую линию в окне предупреждения до конца. В VBA, цикл Do Until показывает каждую строку в окне сообщения, пока не достигает конца файла .
Таблица 1. Режимы доступа к файлам в AutoLISP |
Mode Description r Open for reading existing files only. w Open for writing; creates a new file. a Open for appending data to an existing file or creates a new one. |
Таблица 2. Режимы VBA для Open |
Mode Description Input Open for reading only existing files. Output Open for writing; creates a new file. Append Open for appending data to an existing file or creates a new one. |
Распечатка 1. Запись строк в файл. |
AutoLISP code(defun C:WRITETXT () VBA code Sub WriteTxt () |
Распечатка 2. Добавление строк в файл. |
AutoLISP code(defun C:ADDTXT () VBA code Sub AddTxt () |
Распечатка 3. Чтение данных из файла. |
AutoLISP code(defun C:READTXT () VBA code Sub ReadTxt () |
Распечатка 4. Чтение всего файла. |
AutoLISP code(defun C:LOOPTXT () VBA code Sub LoopTxt () |
Copyright © Сайт поддержки пользователей САПР by Victor Tkachenko