Определение геометрического центра LWPOLYLINE, 2DPoly и 3DPoly
К сожалению, нет прямого API для получения геометрического центра для трех видов полилиний. Кто-то может использовать топологические библиотеки, а кто-то предпочтет простейший из возможный способов – конвертирование AcDbPolyline, AcDb2Polyline, AcDb3dPolyline в область (AcDbRegion) без добавления его в чертеж, чтобы получить геометрический центр.
OPMNetExt для AutoCAD 2021Автор: Александр Ривилис
Вопрос: Имеется ли версия OPMNetExt для AutoCAD 2021?
Пояснение: Модуль OPMNetExt был создан Cyrille Fauvel для добавления динамических свойств в Панель свойств AutoCAD и впервые был опубликован Kean Walmsley у него в блоге: https://through-the-interface.typepad.com/through_the_interface/2009/05/modifying-an-autocad-objects-state-via-a-dynamic-property-defined-in-net.html
Ответ: Я портировал OPMNextExt для работы с AutoCAD 2021
Как временно заблокировать интерфейс AutoCAD при помощи .NET и C++Автор: Александр Ривилис
При длительных операциях с AutoCAD иногда возникает потребность заблокировать его интерфейс, чтобы не дать возможность пользователю изменять чертеж. В AutoCAD API специальных средств для этого нет, но можно воспользоваться Win32 API.Установка типа колонки мультитекста при его создании
Мы получили недавно сообщение о том, что в программе возникает исключение eNotApplicable при попытке установить тип колонки (ColumnType) при создании мультитекста таким кодом:Управляемый HLR API для AutoCAD
Мы получили значительное количество запросов от разработчиков о создании управляемой обертки для классического HLR API, который входит в состав ObjectARX SDK для AUtoCAD.Оригинальный пример был написан Cyrille Fauvel , а я исправил несколько ошибок, связанных с функцией обратного вызова индикатора прогресса и мигрировал проект для AutoCAD 2019.
Как определить использовалась ли Базовая точка при вставке выбранных объектов
Это сообщение на форуме заставило меня написать эту статью, которая как раз совпала с внутренним обсуждением аналогичной проблемы.Когда мы используем команду _COPYBASE с заданной базовой точкой, выбранные объекты копируются во временный dwg-файл и системная переменная INSBASE этого временного файла содержит введённую базовую точку.
Эта программа использует этот факт при вставке при помощи _PASTORG в другой чертеж.
Спасибо Joel Petersen за предложенную идею
Создание таблиц с различной высотой строк с помощью .NET
Создание таблицы с использованием методов Table.InsertColumns и Table.InsertRows достаточно сложное, и ниже приведены некоторые сценарии, которые могут быть полезны:
Сценарий 1: Использование только метода Table.InsertColumns:
Наряду с указанным числом столбцов, создается строка по умолчанию (без ячеек) с индексом строки 0
Сценарий 2. Использование только метода Table.InsertRows:
Наряду с указанным количеством строк создается один столбец по умолчанию (с ячейками) с индексом столбца 0.
Например, table.InsertRows (0, 5, 3); создает таблицу как показано ниже:
Сценарий 3: Использование индекса для создания строк или столбцов:
Здесь используется метод table.InsertRows (int row, double height, int rows)
int row = индекс строки
double height = rows (без строки по умолчанию)
int rows = число добавленых строк
Как и в приведенном выше примере, table.InsertRows (0, 5, 3); создает таблицу с 4 строками (3 + 1 строка по умолчанию) и 1 столбцом с индексом 0.
Поскольку первый параметр (индекс) равен 0, каждая строка вставляется в позицию 0 и толкает ранее вставленную строку (если есть) ниже. Таким образом, мы можем найти строку по умолчанию в самой нижней позиции после создания.
Сценарий 4: Мы можем использовать table.InsertRows в цикле для создания строк различной высоты. Ряды различной высоты могут быть созданы следующим образом:
Как изменить установки ГРАФИКАНАСТР при помощи .NET
Вам следует использовать GraphicsSystem.Configuration API для включения и выключения различных эффектов графической системы.
Вот пример включения «Сглаживания линий»:
Нахождение геометрического центра для LWPOLYLINE, 3DPoly и 2DPoly
К сожалению, в AutoCAD API нет прямого метода для определения геометрического центра всех трех типов полилиний. Можно использовать библиотеки топологии, чтобы выяснить это. Проще же всего преобразовать LWPOLYLINE, AcDb2dPolyline, AcDb3dPolyline в AcDbRegion в памяти и применить AutoCAD API для получения геометрического центра области (AcDbRegion).
Как управлять установками GRAPHICSCONFIG при помощи .NET
Для включения или выключения эффектов графической системы нужно пользоваться GraphicsSystem.Configuration API.Вот пример для включения сглаживания линий (LineSmoothing)
Как проверить, что при редактировании XREF он сохранён или отвергнут в .NETАвтор: Александр Ривилис
Madhukar Moogala в этой статье описал как можно используя ObjectARX определить были ли сохранены изменения при редактировании внешней ссылки по месту или нет. А вот как можно добиться аналогичного результата, используя AutoCAD .NET API:
Как определить что свойства примитива изменены при помощи Панели Свойств в .NET?Автор: Александр Ривилис
Вопрос: В ObjectARX как мы знаем есть возможность узнать, что свойства примитива изменены в Панели свойств (OPM). Этому посвящена статья Как определить что свойства примитива изменены при помощи Панели Свойств? А как можно это же сделать используя только средства .NET API?
Ответ: В AutoCAD .NET API есть недокументированное пространство имён Autodesk.AutoCAD.Internal.PropertyInspector, содержащее класс PropertyInspectorEventManager, который позволяет подписаться на события propertyWillChange (которое происходит перед началом изменения свойства) и propertyChanged (которое происходит сразу после изменения свойства). Им мы и воспользуемся для решения нашей задачи.
Как получить локализованные имена свойств примитива в Панели свойств?Автор: Александр Ривилис
Ниже приводится код, который выводит все свойства, которые видны в Панели свойств:Как определить локализованное имя примитива в OPM?Автор: Александр Ривилис
Ответ на этот вопрос даёт следующий код:Вставка формы (SHAPE) в чертеж AutoCAD при помощи .NET APIАвтор: Александр Ривилис
Вопрос: Как при помощи AutoCAD .NET API вставить в чертеж форму, как это делает команда ФОРМА (_SHAPE)?
Ответ: Как оказалось эта информация нигде не освещена. Для того чтобы вставить форму в чертеж необходимо:
- Создать текстовый стиль, указывающий на файл содержащий форму
- Создать примитив Shape, который имеет соответствующий стиль и имя соответствующее имени формы. Имеются определённые особенности, которые отражены в коде ниже:
Определение радиуса и центра кругового конуса при помощи .NET
Мы можем использовать BREP API для определения радиуса и центра кругового конуса (свойства, показанные на изображении панели свойств).
Ниже фрагмента кода .NET, который можно использовать:
Установка исходной точки при создании штриховки с помощью .NET
У нас был вопрос, поднятый клиентом относительно установления исходной точки штриховки в процессе создания штриховки.Просмотр внешнего вида типа линии
Я получил такое задание от пользователя – получить внешний вид типа линии при помощи API.Мы воспользуемся свойством Comments чтобы получить описание типа линии в форме строки:
Как получить пересечение прямой и твердого тела в NET?Автор: Александр Ривилис
По аналогии с тем, как это делается в ObjectARX, это можно сделать при помощи B-Rep API и в AutoCAD .NET API. Следующий код иллюстрирует как получить пересечение линейного примитива (ОТРЕЗОК, ЛУЧ, ПРЯМАЯ) с примитивом, который представляется в виде ACIS (т.е. твердое тело - SOLID, область - REGION, или тело BODY).