Диалоговое окно выбора файла vba autocad
Коллекция Documents и объект Document обеспечивают доступ к файловым функциям.
Для этого следует использовать один из методов Add, Close, Save, SaveAs, Import, Export. Пример открытия рисунка:
Пример создания рисунка Пример сохранения рисунка Проверка были ли в рисунке какие-то изменения с момента последнего сохранения
УСТАНОВКА СОБСТВЕННЫХ ПРЕДПОЧТЕНИЙ
Доступ к объекту Preferences После чего можно получить доступ к любому объекту Preference (предпочтений) пользуясь свойствами Display, Drafting, Files, OpenSave, Output, Profile, Selection, System, и User properties. Например сменить размер перекрестия
DATABASE PREFERENCES
УПРАВЛЕНИЕ ОКНОМ ПРИЛОЖЕНИЯ
Пример смены размера и положения окна, минимизация и увеличение до максимума Проверка состояния окна Сделать окно невидимым
УПРАВЛЕНИЕ ОКНОМ РИСУНКА
ИСПОЛЬЗОВАНИЕ ZOOM.
Виды это особые комбинации расположения, масштаба и ориентации рисунка. Команда zoom не меняет размер рисунка, она влияет только на размер его отображения на экране. Автокад предлагает несколько путей "зуммирования" по указанному окну, вписать рисунок в окно, указать масштаб вручную. Для "зуммирования" с указанием границ используются методы ZoomWindow или ZoomPickWindow Первый из них позволяет все сделать чисто программно, второй требует ввода границ окна от пользователя. Пример:
МАСШТАБИРОВАНИЕ ВИДА
- Относительно границ рисунка
- Относительно текущего вида
- Относительно единиц вычерчивания на листе
ЦЕНТРИРОВАНИЕ
ПОКАЗ ГРАНИЦ (LIMITS) И ПРОТЯЖЕННОСТИ (EXTENTS) РИСУНКА
Для отображения границ рисунка или границ объектов используется методы ZoomAll, ZoomExtents, ZoomPrevious . Первый из них показывает рисунок полностью. Если границы объектов выходят за пределы границ рисунка, то показывается по границам объектов и наооборот.ZoomExtents позволяет указать в активном видовом экране границы рисунка в котором отображаются все ранее построенные объекты текущей вкладки рисунка, находящиеся на включенных и размороженных слоях.
ZoomAll аналогично ZoomExtents но при этом включается еще и зона границ. Если зона границ окажется заполнена мало все окно может оказаться пустым. Наиболее удобный вариант просмотра всего рисунка - первый
ИСПОЛЬЗОВАНИЕ ИМЕНОВАННЫХ ВИДОВ
Виды можно именовать, для того чтобы использовать их в дальнейшем, в имени могут использоваться до 255 символов, ключая цифры и спецсимволы. Видовой экран можно разбивать на части методами: acViewport2Horizontal, acViewport2Vertical, acViewport3Left, acViewport3Right, acViewport3Horizontal, acViewport3Vertical, acViewport3Above, acViewport3Below, acViewport4. Пример разбивки видовых экранов и перебор открытых окон Обновление содержимого экрана нужно потому что не все методы сразу это делают
ПЕРЕУСТАНОВКА АКТИВНЫХ ОБЪЕКТОВ
Изменение большинства активных объектов (слоев, типов линий) вступает в силу немедленно, однако некоторые активные объекты требуют повторной установки. (это стили текста, видовые экраны и ПСК). Для их переустановки требуется установка свойств ActiveTextStyle, ActiveUCS, ActiveViewport.
УСТАНОВКА И СЧИТЫВАНИЕ СИСТЕМНЫХ ПЕРЕМЕННЫХ
У объекта Document есть два метода на этот случай SetVariable и GetVariable. Пример ThisDrawing.SetVariable "TEXTFILL", 1
ВЫСОКОТОЧНОЕ ВЫЧЕРЧИВАНИЕ
Автокад позволяет вычерчивать объекты с точно заданными характеристиками, не прибегая при этом к утомительным вычислениям. Ограничем VBA для Autocad 2000 является то что через VBA нельзя установить изометрическую сетку и привязку, установить объектную привязку, указать измеряемые отрезки на объекте или поделить объект на сегменты.
РЕГУЛИРОВКА ПРИВЯЗКИ И ВЫРАВНИВАНИЯ СЕТКИ
Изменение угла и базовой точки. В данном примере базовая точка устанавливается равной 1,1 и угол наклона сетки 30 градусов. Включение режима ОРТО (нужен для простой отрисовки перпендикуляров)ThisDrawing.ActiveViewport.OrthoOn = True
Построение конструкционных линий (это те которые в обе стороны бесконечны) Опрос конструкционных линий. В примере ищется базовая точка и направляющий вектор
СОЗДАНИЕ, ОПРОС И РЕДАКТИРОВАНИЕ ЛУЧЕЙ
ВЫЧИСЛЕНИЯ С ИСПОЛЬЗОВАНИЕМ ВЫРАЖЕНИЙ
- Найти угол линии от оси X методом AngleFromXAxis
- Преобразовать угол из строки в вещественное (двойной точности) методом AngleToReal
- Преобразовать угол из вещественного (двойной точности) в строку методом AngleToString
- Преобразовать расстояние из строки в вещественное (двойной точности) методом DistanceToReal
- Создать переменную типа Variant, содержащую массив целых, с плавающей точкой двойной точности и т.д. методом CreateTypedArray
- Найти точку отложенную на заданном расстоянии и под заданным углом методом PolarPoint
- Перевести точку в другую систему координат методом TranslateCoordinates
- Найти расстояние между двумя точками методом GetDistance
ПОДСЧЕТ ПЛОЩАДЕЙ
ПОЛУЧЕНИЕ ВВОДА ОТ ПОЛЬЗОВАТЕЛЯ
Объект Utility может получать ввод от пользователя данных определенного типа, например метод GetString возвращает строку, GetPoint возвращает значение типа Variant и GetInteger возвращает целое. Управление вводом пользователя можно осуществлять методом InitializeUserInput . Он позволяет проверять пустой ввод (NULL), ввод отрицательных значений. Метод GetString принимает два параметра, если первый из них равен 0, то пробел сразу завершает ввод, второй - строка подсказка. Метод GetPoint тоже принимает два параметра, необязательную первую точку и строку подсказки. Для ограничения выбора пользователя при вводе может использовать вызов метода InitializeUserInput . Метод GetKeyword принимает только один параметр, это ключевое слово Autocad и так же может использовать вызова метода InitializeUserInput .Более дружественный для пользователя вариант выбирает один из вариантов как выбор по умолчанию, осуществляющийся при нажатии Enter
УПРАВЛЕНИЕ ВВОДОМ ПОЛЬЗОВАТЕЛЯ
Применение метода InitializeUserInput позволяет определить ключевые слова или ограничить тип вводимых значений. Данный метод может применяться совместно со следующими методами GetAngle, GetCorner, GetDistance, GetInteger, GetKeyword, GetOrientation, GetPoint, GetReal (но не с GetString, в этом случае есть метод GetInput для получения строкового значения).Метод InitializeUserInput принимает два параметра - первый битовое значение, определяющее опции ввода, второй строковый - определяет допустимые ключевые слова.
ПОЛУЧЕНИЕ ЦЕЛОГО ИЛИ КЛЮЧЕВОГО СЛОВА ПУТЕМ ВВОДА В КОМАНДНОЙ СТРОКЕ
ДОСТУП К КОМАНДНОЙ СТРОКЕ AUTOCAD
Имитировать ввод команд в командную строку с возможностью передачи параметров команде позволяет метод SendCommand . Пробел в данной строке эквивалентен нажатию Enter. Вызов данного метода без аргументов не допускается.Следующий пример создает окружность с центром (2,2,0) и радиусом 4. Обратите внимание на пробел в конце каждой строки.
ЕСЛИ НЕ ОТКРЫТ НИ ОДИН ДОКУМЕНТ
- Открыть документ
- Создать документ
- Импортировать документ
- Выйти из Autocad
ИМПОРТ ФАЙЛОВ ДРУГИХ ФОРМАТОВ
Метод Import позволяет импортировать файлы форматов DXF, SAT, BMP, PostScript. Он принимает три параметра: имя файла, точку вставки и фактор масштабирования.
Здесь вы можете скачать документацию и программы для САПР AutoCAD, PCAD, 3DS, Inventor, Pro/E, Solidworks и других CAD CAM CAE EDA GIS
Объекты AutoCAD
Доступ к Windows API из VBA
Функции Windows API доступны для любых приложений и позволяют реализовать все возможности программирования под Windows. Чтобы этим воспользоваться следует сначала объявить функцию Windows API, с помощью оператора Declare который в качестве параметров требует указания имени динамической библиотеки (DLL) содержащей нужную функцию, имени процедуры как она называется в DLL, имени процедуры как она будет называться в вашей программе, параметров процедуры которые она ожидает, типа возвращаемых данных если процедура вызывается как функция.
Оператор Declare можно поместить в любое место программы, так если его поместить в стандартном модуле - процедура будет доступна для любого модуля программы, если конечно не ограничить диапазон ее действия ключевым словом Private . Если объявить процедуру в модуле формы или класса, то она только там и будет доступна. Использование оператора Declare довольно сложно и требует хороших знаний от программиста, т.к. очень легко ошибиться, что может привести к тяжелым последствиям. Для облегчения данного процесса Microsoft создала специальные файлы в которых уже прописано объявление большинства часто используемых процедур. Они хранятся в файле Win32api.txt поставляемым совместно с Visual Basic и Office. За дополнительной информацией обращаться к MSDN
Существует три типа событий - уровня приложения, уровня документа и уровня объекта. Первое из них отвечает например за открытие, сохранение, закрытие и печать документа, загрузку-выгрузку приложений, изменение системных переменных. Второе за добавление, удаление, изменение объектов, активацию меню, изменение размеров окна рисунка, регенерацию, открытие, закрытие, печать рисунка и др. И последние возникает только если объект изменился.
НАПИСАНИЕ ОБРАБОТЧИКОВ СОБЫТИЙ
ОБРАБОТЧИКИ СОБЫТИЙ УРОВНЯ ПРИЛОЖЕНИЯ
- AppActivate - происходит сразу перед активацией главного окна приложения
- AppDeactivate - происходит сразу перед деактивацией главного окна приложения
- ARXLoaded - происходит при загрузке ARX-приложения
- ARXUnLoaded - происходит при выгрузке ARX-приложения
- BeginCommand - происходит как только начала выполняться команда, но еще не завершена.
- BeginFileDrop - происходит когда файл "сброшен" в главное окно приложения
- BeginLISP - происходит когда Автокад получает запрос на выполнение выражения LISP
- BeginModal - происходит сразу перед появлением модального окна
- BeginOpen - происходит сразу после того как Автокад получает запрос на открытие файла
- BeginPlot - происходит сразу после того как Автокад получает запрос на печать
- BeginQuit - происходит сразу перед тем как завершается сессия
- BeginSave - происходит сразу после получения Автокадом запроса на сохранение
- EndCommand - происходит сразу при завершении команды
- EndLISP - происходит сразу при завершении вычисления выражения LISP
- EndModal - происходит сразу после закрытия модального окна диалога
- EndOpen - происходит сразу после окончания процесса открытия чертежа
- EndPlot - происходит сразу после завершения отправки на принтер
- EndSave - происходит сразу по завершении сохранения
- LISPCancelled - происходит при отмене выражения LISP
- NewDrawing - происходит сразу перед созданием чертежа
- SysVarChanged - происходит когда меняется значение системной переменной
- WindowChanged - происходит при изменении окна приложения
- WindowMovedOrResized - происходит при перемещении или изменении размера окна приложения
КАК РАЗРЕШИТЬ СОБЫТИЯ УРОВНЯ ПРИЛОЖЕНИЯ
ОБРАБОТКА СОБЫТИЙ УРОВНЯ ДОКУМЕНТА
- Activate - происходит в момент активации документа
- BeginClose - происходит перед закрытием документа
- BeginCommand - происходит сразу после начала выполнения команды, но до ее завершения
- BeginDoubleClick - происходит в момент двойного щелчка мышью
- BeginLISP - происходит сразу после получения Автокадом запроса на вычисление выражения LISP
- BeginPlot - происходит сразу после получения Автокадом запроса на печать документа
- BeginRightClick - происходит после "правого щелчка" мышью в окне документа
- BeginSave - происходит сразу после получения Автокадом запроса на сохранение документа
- BeginShortcutMenuCommand - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме команд
- BeginShortcutMenuDefault - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме по-умолчанию
- BeginShortcutMenuEdit - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме редактирования
- BeginShortcutMenuGrip - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме "ручки"
- BeginShortcutMenuOsnap - происходит после "правого щелчка" мышью, но до появления всплывающего меню в режиме объектной привязки
- Deactivate - происходит при деактивации окна документа
- EndCommand - происходит сразу после завершения команды
- EndLISP - происходит при завершении вычисления выражения LISP
- EndPlot - происходит после отправки документа на печать
- EndSave - происходит когда окончено сохранение документа
- EndShortcutMenu - происходит после появления всплывающего меню
- LayoutSwitched - происходит после переключения на другой Layout
- LISPCancelled - происходит когда прервано вычисление выражения LISP
- ObjectAdded - происходит когда добавлен объект
- ObjectErased - происходит когда удален объект
- ObjectModified - происходит когда изменен объект
- SelectionChanged - присходит когда изменен выбор
- WindowChanged - происходит когда изменено окно документа
- WindowMovedOrResized - происходит сразу после изменения размера или перемещения окна документа
ПРИМЕР КОДИРОВАНИЯ ОБРАБОТЧИКОВ СОБЫТИЙ УРОВНЯ ДОКУМЕНТА
Для этого нужно просто выбрать объект AutocadDocument из выпадающего меню в окне кода среды VBA IDE. Доступные события появятся в окне процедур, после выбора любой из них будет вставлен каркас процедуры обработки события. Данные процедуры будут касаться только активного документа. Пример обновления всплывающего меню при возникновении событий BeginShortcutMenuDefault и EndShortcutMenu путем добавления к нему пункта. Изменение не за трагивает файлы меню.
Работа с DAO (Data Access Object) для доступа к базам данным
С помощью DAO можно работать с любой базой данных поддерживающие интерфейс Microsoft Jet, (Access, dBase, FoxPro, Paradox, а также базами данных ODBC MS SQL Server и Oracle). Возможности следующие: создание БД, изменение структуры, добавление таблиц, определение связей между ними, создание и выполнение запросов, добавление, изменение или удаление записей. Для всего это нужно выполнить три основных шага: 1. Создать ссылку на объектную библиотеку MS DAO 2. Открыть базу данных 3. Написать код используя объектные модели Autocad и DAO.
Для выполнения первого из этих шагов следует в среде VBA IDE выбрать пункт меню Tools->References и поставить галочку против Microsoft DAO Object Library. После чего все объекты, методы и свойства DAO станут доступными для просмотра в "просмотрщике" объектов. Причем установленная ссылка действует только для текущего проекта (чтобы не было лишних тормозов) Второй шаг (открытие базы данных) можно выполнить так: Наиболее важным и часто используемым объектом в DAO является объект RecordSet представляющий набор записей возвращаемых таблицей на основе запроса SQL. Вообще по этому поводу не лишне ознакомиться со справочной системой Microsoft Access.
Тему читают: 1 гость
Форумы CADUser → Программирование → VBA → взять данные из автокада (текст) и экспортировать в VBA
Возможно два варианта - внедрение в файл чертежа или отдельным файлом. В отдельном файле удобно хранить общие процедуры.
Меню и панели инструментов
Пример процедуры, добавляющей к AutoCAD новое меню
Эта процедура добавляет к основным меню AutoCAD выпадающее меню "VBA Tools", в котором четыре пункта: "VBA Editor", "Macros List", "VBA Manager" и "Aec VBA".
Отображение экранного меню
Процедура не только отображает меню, если оно не видно, но и скрывает его, если оно отображено.
Загрузка меню из файла mnc с помощью VBA
Создание кнопки панели инструментов с закрепленной процедурой VBA
После запуска процедуры CreateIfMissing к последней загруженной группе меню будет дабавлена панель инструментов "Sample" с одной кнопкой, при нажатии на которую будет запускаться макрос SampleStuff
Создание панели инструментов для заморозки слоя по объекту и для разморозки всех слоев
Для работы этого примера Вам понадобятся два значька кнопок
Скрытие и отображение всех панелей инструментов
Сохранение и восстановление состояния слоев (информация о слоях сохраняется в текстовом файлее
Приведенный ниже пример позволяет сохранить информацию о состоянии всех слоев текущего чертежа в текстовом файле с расширенимем *.lay (процедура SaveSnapShot), и, при необходимости, восстановить состояние слоев открыв этот файл (процедура RestoreSnapShot).
Для начала обеспечим отображение окон сохранения и открытия файлов с помощью Windows API функций. Поместите следующий код в стандартный модуль:
Теперь получение информации о слоях, ее сохранение и восстановление. Создайте еще один стандартный модуль и поместите в него следующий код:
Создание базы данных с информацией о слоях
Эта процедура создает базу данных mdb в папке текущего файла и с именем текущего файла. Созданная база данных состоит из одной таблицы, в которой содержится информация обо всех слоях текущего чертежа.
Вставте процедуру CreateLayerDB в стандартный модуль и не забудьте сделать ссылку на библиотеку Microsoft DAO 3.51 Object Library
Изменение имени слоев чертежа
Функция, заменяющая заданный префикс имени всех слоев чертежа на другой. Префикс должен быть отделен от основного имени знаком “-”
Создайте в чертеже несколько слоев, имя которых начинается с ADR-, например, ADR-LName (вместо LName можно использовать любое имя), и запустите процедуру TEST_ChangeLayerPrefix. При этом в имени всех слоев перфикс ADR будет заменен на HRV
Удаление всех объектов с заданного слоя
Сортировка примитивов чертежа по типам линий на разные слои
После запуска TEST_LayersFromLineTypes будут просмотрена информация о типе линии всех примитивов текущего чертежа. Будут созданы слои, с именами, совпадающими с именами используемых типов линий. Все примитивы чертежа будут перемещены на соответствующие их типу линии слои.
Управление активностью слоя
После запуска TEST_CanBeActive у пользователя запрашивается имя слоя. Если такой слой в чертеже есть, и, если он может стать активным (если он не заморожен и не отключен), то функция CanBeActive делает этот слой текущим
Пример диалогового окна с информацией о слоях
Создайте диалоговое окно, в которое поместите 3 КомбоБокса и 1 метку как на рисунке:
И поместите в модуль формы следующий код:
Теперь поместите в стандартный код следующую ниже процедуру. После запуска процедуры TEST_LayNfoForm будет отображено диалоговое окно, в котором при выборе имени слоя в одном из комбобоксов в нижней строке формы будет отображена соответствующая информация.
Процедура для заполнения списка наименованиями слоев
Заморозка всех слоев чертежа кроме последнего
Пороцедура делает все слои чертежа, кроме того, который был добавлен последним, замороженными. Последний добавленный в чертеж слой становится текущим
Нужно считать определенный текст из автокада, т.е. выделить его и чтобы этот текст отобразился в VBA в TextBox. Заранее спасибо.
Нужно считать определенный текст из автокада, т.е. выделить его и чтобы этот текст отобразился в VBA в TextBox. Заранее спасибо.
fixo. myTextObj объявлять как какой объект? и еще как зайти в автокад,чтобы выбрать текст
заранее спасибо
помогите как выделить текст в автокаде?
помогите как выделить текст в автокаде?
fixo, спасибо,все получилось, а не мог бы ты еще подсказать код, чтобы выбрать сразу несколько однострочных текстов, а не по одному
fixo, спасибо,все получилось, а не мог бы ты еще подсказать код, чтобы выбрать сразу несколько однострочных текстов, а не по одному
Надо бы тебе немного в Хэлпе покопаться
Все оч просто
еще вопрос?
с помощью этого кода, fixo:
выбор происходит по индивидуальным номерам, т.е. как я понимаю каждому текстовому объекту присвоен свой номер, и в таком же порядке он он представляет этот выбор в VB, а не по порядку как расположены на чертеже (слева направо, а потом сверху вниз)
можешь помочь как сделать, чтобы выбор считывал слева направо, а потом сверху вниз
Заранее, огромное спасибо.
еще вопрос?
с помощью этого кода, fixo:
выбор происходит по индивидуальным номерам, т.е. как я понимаю каждому текстовому объекту присвоен свой номер, и в таком же порядке он он представляет этот выбор в VB, а не по порядку как расположены на чертеже (слева направо, а потом сверху вниз)
можешь помочь как сделать, чтобы выбор считывал слева направо, а потом сверху вниз
Заранее, огромное спасибо.
Переделай под свою ситуацию, настоящая рутина
просто перенумеровывает текст по порядку как в таблице
ВЗАИМОДЕЙСТВИЕ С ДРУГИМИ ПРИЛОЖЕНИЯМИ, БАЗАМИ ДАННЫХ И WINDOWS API
- Установить ссылку на другое приложение
- Создать экземпляр этого приложения
- Собственно писать программу, использующую методы и свойства приложения
Читайте также: