Vba autocad выделить объект
Диалоговое окно создается в редакторе VBA в виде формы по команде Insert - UserForm . Возникает пустая форма, ограниченная маркерами. Одновременно возникают панель инструментов ToolBox (рис.8.1).
Как правило, оформление формы производят вручную, хотя можно это выполнить в программе. Элементы управления перетаскивают на форму мышью из панели ToolBox . Свойства выбирают или устанавливают в окне Properties .
На панели ToolBox имеются следующие элементы управления:
Создать три одинаковых тора . Радиусы малой и большой окружностей задать в диалоговом окне. Соединить все три тора либо в конструкцию "тор в торе" либо цепочкой. Закрасить торы в три последовательных цвета.
Составим таблицу элементов управления для UserForm :
Разместим элементы на форме, например, так, как показано на рис.8.1. Текстовые надписи выполнены с помощью инструмента Label . Текстовые поля созданы элементом TextBox , а числовые значения вписаны в них в строке Text окна Properties . Переключатели (радиокнопки) установлены путем перетаскивания на форму элементов OptionButton . Кнопки с надписями OK и Cancel образованы элементом управления CommandButton . Имена элементам следует задавать близкие к выполняемым ими функциям.
При выделенной форме нужно открыть модуль и записать там процедуру инициализации. Наиболее краткая форма этой процедуры выглядит так:
Обычно в файле инициализации производят заполнение списков, вносят первоначальные данные в текстовые окна, включают радиокнопки и флажки. Чтобы составить процедуру для элемента формы, нужно выделить этот элемент двойным щелчком мыши. В открывшемся модуле будет подготовлена заготовка для процедуры.
Вставьте модуль и скопируйте в него следующий текст:
Сохраните эту программу как файл Project_Torus. dvb . Картинки, приведенные ниже, сохраните в файлах Tor_in_tor.jpg и Chain.jpg . Файлы проекта и картинок поместите в одну папку.
Одной из задач программирования является организация интерактивности, т.е. возможности получения программой информации от пользователя. Это можно сделать двумя способами - из командной строки и через диалоговое окно.
Рассмотрим обращение к объекту Utility . Он принадлежит объекту Document и управляет методами получения информации от пользователя.
Здесь переменной iReturn присваивается целое число, введенное пользователем в командную строку. Такой метод применяется для ввода коротких и простых данных: чисел, текста или объекта. Чтобы избежать появления нескольких приглашений в одной строке, используют константу vbCrLf в начале приглашения:
Приведем перечень встроенных методов, наиболее часто применяемых для получения данных от пользователя. Во всех случаях приглашение является необязательным параметром.
Создать процедуру, получающую информацию от пользователя
Создайте новый чертеж. Выберите команду Tools - Macro - VBA Manager . Щелкните по кнопке NEW , а затем по кнопке Visual Basic Editor . Выберите команду Insert - Module , а затем Insert - Procedure . Наберите в модуле следующий текст:
Сохраните проект как Project_HappyFace. dvb в папке AutoCAD2007\Support . Вернитесь к чертежу и выберите команду Tools - Macro - Macros . В диалоговом окне выберите процедуру HappyFace и щелкните по кнопке Run . Ответьте на приглашения.
В основе приведенного примера лежит функция GetDistance . Благодаря ей пользователь может задать радиус с помощью мыши. Указанная ранее точка центра будет использована функцией GetDistance в качестве опорной. Кроме того, процедура выполняет преобразование градусов в радианы. Поэтому расположение глаз и губ будет соотноситься и с центром, и с радиусом.
Как и во всех языках программирования, в VBA существует развитая технология поиска ошибок. Простейший сеанс отладки сводится к установке точек прерывания. Перейдите в редакторе в процедуру, где предполагается наличие ошибки. Поместите курсор в первую выполняемую строку и нажмите F9 или выберите команду Debug - Toggle Breakpoint . В строку будет добавлена точка прерывания.
Выполните операторы по одному, нажимая клавишу F8 . На каждом шаге просматривайте значения переменных. При помещении указателя мыши на переменные типов Integer, Double , и String в подсказке выводится их текущее значение.
Когда ошибка обнаружена, выберите команду Run - Reset и внесите исправления в код. При следующем запуске процедуры точка прерывания останется активной. Отключить ее можно нажатием клавиши F9 . Нормальный запуск процедуры можно осуществить командой Run Sub , либо нажатием клавиши F5 .
Если программа зависает в редакторе Visual Basic , то выйдите в окно AutoCAD и прервите выполнение команды нажатием клавиши ESC .
Ключевые термины
Объектная модель AutoCAD - Иерархическая структура всех объектов AutoCAD .
Доступ - доступ к иерархии объектов, в частности, к свойствам и методам объекта Document , обеспечивается посредством объекта ThisDrawing .
Variant - тип, который может принимать данные любого типа, за исключением строк фиксированной длины и типов данных, определяемых пользователем.
Родительский объект - объект более высокого ранга. с которым данный объект постоянно связан. Все объекты имеют свойство Application , как непосредственную ссылку на корневой объект.
Пользовательская форма - диалоговое окно с элементами управления.
Реактор - процедура, которая дает возможность приложению реагировать на события, происходящие где угодно в AutoCAD .
Команда Zoom (Масштабирование)
Пример функции, масштабирующей изображение по габаритам заданного примитива.
Пример функции, масштабирующей изображение по блоку, выбранному с помощью диалогового окна.
Добавьте в проект форму, создайте в ней один список (ListBox) и две командные кнопки (CommandButton). У Вас должно получиться что-то похожее на это:
Теперь добавьте в модуль этой формы следующий код:
Теперь добавьте в проект стандартный модуль и добавьте в него следующую процедуру:
Вставьте в чертеж несколько блоков и запустите процедуру TestIt. При запуске формы список будет заполнен именами вставленных блоков, и при двойном щелчке по любому из них изображение будет масштабировано таким образом, что выбранный блок будет отображен на весь экран.
Коллекция 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. Он принимает три параметра: имя файла, точку вставки и фактор масштабирования.
Команда Purge (Очистка базы данных чертежа)
Удаление из базы данных чертежа неиспользуемых блоков
Удаление из базы данных чертежа неиспользуемых типов линий.
Удаление из базы данных чертежа неиспользуемых слоев.
Удаление из базы данных чертежа неиспользуемых блоков, слоев или типов линий по выбору
Удаление из базы данных чертежа неиспользуемых групп объектов
Очистка базы данных чертежа от всех неиспользуемых элементов с помощью диалогового окна.
В пакет входит пример диалогового окна с запросом на удаление вышеперечисленных элементов.
Поместите следующий код в стандартный модуль:
Для тестирования процедур создайте диалоговое окно с двумя кнопками и четырьмя чекбоксами. Поместите в модуль формы следующий код:
Для запуска формы добавьте в стандартный модуль следующий код:
Изменение свойств объектов
Изменения цвета объектов с помощью диалогового окна,
вызываемого из файла ACAD.EXE
В этом примере используется вызов функции acedSetColorDialog из файла acad.exe.
Команда Break (Разрыв объекта)
Набор функций для разрыва отрезка по двум заданным точкам
Кроме основной функции используется вспомогательная функция NearestTo, которая возвращает точку, ближайшую к заданной и лежащую на заданном отрезке
Примитивы чертежей AutoCAD
Пример создания класса для работы с примитивами AutoCAD
Сейчас мы попробуем создать класс объекта, который позволит нам задавать параметры и получать значения свойств отрезка. Создайте VBA проект, добавте в него модуль класса. Задайте этому модулю класса имя "imaLine".
Добавим в класс два свойства Начальную точку (StartPoint) и Конечную точку (EndPoint). Для этого опишем две переменные в разделе General Declarations модуля класса и добавим соответствующие функции:
Ну а теперь давйте придумаем, зачем нам это все было нужно и как это можно использовать.
Откройте модуль "ThisDrawing" и добавьте в него следующий код
Теперь, если Вы запустите процедуру NotARealLine и укажете две точки, то будет создан объект objLine как экземпляр класса imaLine, его свойствам будут присвоены указанные Вами точки, Х координаты которых будут напечатаны в окне Immediate.
"Ну и что с того?" - спросите Вы. И правильно спросите. Пока ничего. Надо еще доработать наш класс. Добавим в него свойство Lenght, определяющее длину линии. Это будет свойство "Только для чтения", поэтому процедура Property Let не нужна. Чтобы создать свойство Lenght добавте в модуль класса следующий код:
Подправим наш код в модуле ThisDrawing и опять запустим процедуру NotARealLine
Теперь наш класс не только занимает место на диске в виде программного кода, но и выполняет полезную работу. Вычисляет длину между указанными точками.
А представьте, ведь в этот класс можно добавить, например, метод DrawLine (Отрисовать линию). Давайте попробуем. Добавьте в модуль класса следующий код:
Снова подправим наш код в модуле ThisDrawing и опять запустим процедуру NotARealLine
Теперь мы не только получаем информацию о длине нашей линии, но и отрисовываем ее
А можно пойти и дальше, создать свойства MidPoint (Средняя точка), LineType (Тип линии, задающий собственно Тип линии, ее толщину и цвет). И это далеко не все, что можно придумать.
Можно создать класс Кольцевой сектор, со всевозможными свойствами типа Радиуса, Площадь, Периметр. И, естественно, с методом DrawSector.
Как Вам простор для деятельности?
Команда Offset (Эквидистанта)
Эквидистантная копия объекта на заданный слой
с примером диалогового окна для выбора слоев
Поместите следующий код в стандартный модуль:
Создайте диалоговое окно как на рисунке
И поместите в модуль форму следующий код:
Выбор объектов
Процедура сохранения всех объектов с заданного слоя в отдельном чертеже.
Работа с SelectionSet (Набор объектов)
- Добавление объектов в набор путем указания мышью
- Определение количества объектов в наборе
- Удаление набора
Проверка, есть ли в заданной точке текстовый объект
Перед запуском процедуры создайте в текущем чертеже текстовый объект в точке X = -1.75, Y = 1.063, Z = 0. Функция вернет содержимое текстового объекта.
Получение набора объектов, пересекающихся с выбранной линией
Определение габаритов группы выбранных объектов
После запуска процедуры выберите несколько объектов и изображение будет масштабировано по их габаритам.
При запуске этой процедуры будут выбраны только текстовые объекты
Обеспечение фильтра выбора объектов
Перед запуском процедуры создайте в чертеже три слоя Prova1, Prova2 и Prova3. Разместите по несколько объектов на каждом из этих слоев. После запуска процедуры будут выбраны только те объекты, которые не находятся на слоях Prova1 и Prova2
Использование меток для создания набора
Отслеживание выбора пользователем примитивов
Если переменная blnOn равна True, то при выборе пользователем в чертеже примитива будет возникать диалоговое окно с информацией об объекте.
Команды Copy (Копирование), Move (Перемещение) и Rotate (Поворот)
Пример перемещения текстовых объектов
Эта процедура предлагает выбрать несколько примитивов чертежа рамкой. Затем все текстовые объекты полученного набора подвергаются следующему:
- Определяется содержимое текстового объекта.
- Если содержимое текстового объекта является числом, то Z составляющая точки вставки текста устанавливается раной этому числу.
Коприрование и поворот выбранных объектов
Группы объектов
Группировка примтивов по слоям
Поместите в стандартный модуль приведенный ниже код. Затем создайте в чертеже два слоя. Разместите на каждом из этих слоев по несколко примитивов POINT (ТОЧКА) и запустите процедуру GroupPntsByLayer. Точки будут сгруппированы по слоям и имена групп будут совпадать с именами слоев.
Пороверка наличия в чертеже групппы с заданным именем
Пример функции, проверяющей, используется ли в текущем чертеже заданная строка как имя группы. Если заданное имя уже есть, то генерируется новое имя, которое в текущем чертеже еще не используется. Эта процедура необходима при программном создании новых групп объектов. После внесения очивидных изменений на базе этой функции можно создать анологичные функции для слоев, блоков стилей и пр.
Здесь вы можете скачать документацию и программы для САПР AutoCAD, PCAD, 3DS, Inventor, Pro/E, Solidworks и других CAD CAM CAE EDA GIS
КомандаArray(Массив копий)
Использование команды ArrayRectangular.
Создание прямоугольного массива копий группы объектов с заданным именем, количеством колонок и строк, отстоящих друг от друга на заданное расстояние.
Создайте группу объектов с именем "TestGroupName" и запустите процедуру TEST_ArrayGroup
Краткие итоги
Объектно-ориентированный язык VBA открывает широкие возможности автоматизации работы в среде AutoCAD . Все объекты AutoCAD организованы в виде иерархической структуры с корнем дерева в виде объекта Application . Связь VBA с активным чертежом AutoCAD обеспечивается посредством объекта ThisDrawing . С его помощью можно получить немедленный доступ ко всем свойствам и методам объекта Document , а также ко всем другим объектам иерархии. Кроме того, у всех объектов есть свойство Application , которое и является ссылкой на объект Application . Пользовательские формы VBA являются удобным способом создания диалоговых окон для введения в программу пользовательских данных.
__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
Попробуй посмотреть свойство OwnerID и потом преобразовывай его в указатель на пространство (насколько я помню, ObjectIDToObject - но там были возможны варианты: в некоторых версиях требовалось ObjectIDToObject, в некоторых - ObjectIDToObject32).
----- добавлено через ~11 мин. -----
P.S. VBA у меня сходит с ума при попытке выбора объекта, так что
----- добавлено через ~12 мин. -----
Обрати внимание - в 2013 используются OwnerID32 и ObjectIdToObject32. В других версиях может быть по-другому (а сделать универсальные коды в VBA, по-моему, не получится).
--- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
Попробуй посмотреть свойство OwnerID и потом преобразовывай его в указатель на пространство (насколько я помню, ObjectIDToObject - но там были возможны варианты: в некоторых версиях требовалось ObjectIDToObject, в некоторых - ObjectIDToObject32).
----- добавлено через ~11 мин. -----
P.S. VBA у меня сходит с ума при попытке выбора объекта, так что
----- добавлено через ~12 мин. -----
Обрати внимание - в 2013 используются OwnerID32 и ObjectIdToObject32. В других версиях может быть по-другому (а сделать универсальные коды в VBA, по-моему, не получится).
Да, в 2016 без "32".. И тип переменной стал ownID "дважды длинный".. LongLong. В Автокаде - все работает.
..А вот при попытке из Экселя этот финт ушами провернуть - эксель вылетает. Может, потому, что конфликт идет между типами (в excel вроде нету LongLong?).
__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
----- добавлено через ~57 мин. -----
Все же элементарно делается из экселя
----- добавлено через ~57 мин. -----
Все же элементарно делается из экселя
При попытке извлечь lSelAcadObj.OwnerID Excel умирает..
__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
При попытке извлечь lSelAcadObj.OwnerID Excel умирает.. |
Ну, делаю я это для того, что бы получить то, что обозначено в названии темы..
А строчка закомментирована не просто как?
__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
Пост 2 от Алексея читаем) Там просто два варианта привел сразу - а какой из них работает, проверяйте на своей связке Excel-Акад
Пост 2 от Алексея читаем) Там просто два варианта привел сразу - а какой из них работает, проверяйте на своей связке Excel-Акад
Да я понял, что для разных вариантов акада.. Но, повторюсь, при использование lSelAcadObj.OwnerID в связке эксель - А2016 эксель мрёт..
__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
так надо использовать lSelAcadObj.OwnerID32 и желательно, чтобы разряднось Excel'я совпадала с разрядносьтью Акада
так надо использовать lSelAcadObj.OwnerID32 и желательно, чтобы разряднось Excel'я совпадала с разрядносьтью Акада
__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
а ObjectIDToObject и ObjectIDToObject32 присутствуют? Если да - пробуйте с ними OwnerID по очереди. Заодно посмотрите в отладчике перед вызовом этих функций - есть ли вообще что-то удобоваримое в этом OwnerID. Ну и контрольный вопрос - все обновления установлены?
Таким образом, для кода для работы в 64-разрядных версий Office необходимо найти и изменить все существующие инструкции Declare для использования спецификатора PtrSafe . И необходимо найти и изменить все типы данных в пределах эти инструкции Declare , дескрипторы ссылку или указатели на использование совместимого 64-разрядная версия LongPtr введите псевдоним и типы, которые необходимы для хранения целых чисел 64-разрядная версия с новой LongLong Тип данных. Кроме того необходимо обновить любые пользовательские типы, которые содержат указатели или значками и 64-разрядных целых чисел используйте типы данных 64-разрядная версия и проверить все назначения переменной, верны для предотвращения ошибок Несоответствие типа. |
..хотя я пытался объявлять переменную as LongPtr, и в нее запихивать lSelAcadObj.OwnerID, все равно вылетало..
Кстати сказать, при работе Excel2016 с A2012 и использовании lSelAcadObj.OwnerID32 - тоже вылет экселя..
. А, блин, эксель у меня 32 битный, вот он и не может скушать автокадовский указатель на тип LongLong.. И как его можно экселю скормить?
__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
Проблема именно тут. Может быть ObjectIdToObject, а может быть и ObjectIdToObject32. И что оно потребует - тайна
Здесь вы можете скачать документацию и программы для САПР AutoCAD, PCAD, 3DS, Inventor, Pro/E, Solidworks и других CAD CAM CAE EDA GIS
Команды AutoCAD
Поместите пример в модуль ThisDrawing
Теперь, если пользователь использует команду ERASE и глобальная переменная blnNoErase=False, то команда отменяется. Если же blnNoErase=True, то команда выполняется.
Запуск процедуры VBA из командной строки
Создвайте файл AutoLISP, в который добавте следующее:
Добавьте в стандартный модуль проекта следующий код:
Затем добавьте в модуль ThisDrawing следующий код:
Отрезки
Определение длины выбранного отрезка
Определение координат середины отрезка
Процедура отрисовки двойной ломанной линии заданной ширины
через указываемые точки
Ключевые термины
Объектная модель AutoCAD - Иерархическая структура всех объектов AutoCAD .
Доступ - доступ к иерархии объектов, в частности, к свойствам и методам объекта Document , обеспечивается посредством объекта ThisDrawing .
Variant - тип, который может принимать данные любого типа, за исключением строк фиксированной длины и типов данных, определяемых пользователем.
Родительский объект - объект более высокого ранга. с которым данный объект постоянно связан. Все объекты имеют свойство Application , как непосредственную ссылку на корневой объект.
Пользовательская форма - диалоговое окно с элементами управления.
Реактор - процедура, которая дает возможность приложению реагировать на события, происходящие где угодно в AutoCAD .
Размеры
Замена значениия размера его текстовым выражением
Процедура SelfOverRide заменяет значение размера его текстовым эквивалентом. Т.е. если текст размера равен "<>", и в чертеже отображается значение размера, например, 89,31, то процедура SelfOverRide заменит символы "<>" на символы "89,31"
К сожалению данный алгоритм работает только с линейными размерами.
Простановка вертикального или горизонтального линейного размера
Создайте в чертеже отрезок и добавьте в стандартный модуль следующий ниже код. Запустите процедуру TEST_DimLine_Horizontal_Vertical и на запрос "Выберите отрезок:" укажите созданный. Теперь осталось только указать местоположения размерных линий для вертикального и горизонтального размеров.
Команда Trim (Обрезка)
Обрезка одной линии по другой
Кроме основной процедуры здесь использована вспомогательная функция GetLength, определяющая длину отрезка, соединяющего две заданные точки
Читайте также: