ADN Open CIS
Сообщество программистов Autodesk в СНГ

14/04/2021

Как подсветить примитив внутри блока или внешней ссылки - NETАвтор: Александр Ривилис

Вопрос: Для того чтобы подсветить примитив в текущем пространстве (Модели или Листа) достаточно воспользоваться методом Entity.Highlight(). А как подсветить примитив, который находится в составе блока (возможно вложенного блока) или во внешней ссылке?

Ответ: Для этой цели следует воспользоваться методом Entity.Highhlight(FullSubentPath subId), предварительно создав правильный FullSubentPath.

Ниже приведен код, который подсвечивает примитив внутри самого вложенного блока или внешней ссылки:

Опубликовано 14.04.2021     Читать далее >>>
28/02/2021

AutoCAD .NET API: метод IExtensionApplication.Terminate() не вызывается

Вопрос:

Я создаю и запускаю приложение с использованием AutoCAD .NET API, но после установки обновления AutoCAD 2020.1 Update, метод IExtensionApplication.Terminate() больше не вызывается.

Тоже самое касается и AutoCAD 2020.1.2 Update и AutoCAD 2021 со всеми обновлениями.

Что-то изменилось??

Опубликовано 28.02.2021     Читать далее >>>
29/10/2020

Как можно динамически поменять цвет фона в редакторе блоков BEDIT в .NET API?Автор: Александр Ривилис

Вопрос: Как можно поменять цвет фона в редакторе блоков (BEDIT) при помощи кода .NET API?

Ответ: В ObjectARX есть возможность менять цвет элементов интерфейса AutoCAD (в том числе и цвет фона редактора блоков). Воспользуемся P/Invoke для вызова этого кода из .NET:

Опубликовано 29.10.2020     Читать далее >>>
28/10/2020

Как запустить диалоговое окно калькулятора в AutoCAD, используя .NET API?Автор: Александр Ривилис

Вопрос: Можно ли запустить диалоговое окно калькулятора AutoCAD (не путать с палитрой калькулятора, вызываемой командой _QUICKCALC) и получить результаты вычисления?

Ответ: Диалоговое окно калькулятора (как и палитра калькулятора) упрятаны в сборке AcCalcUi.dll. Эта сборка не входит в состав ObjectARX SDK, так что следует сослаться на сборку в составе AutoCAD. Не забывайте указывать в свойствах сборки CopyLocal = False, чтобы не копировать эту сборку к своему приложению. Сборка содержит пространства имён:

Autodesk.AutoCAD.CalculatorUI
Autodesk.AutoCAD.CalculatorUI.CalculatorControl
Autodesk.AutoCAD.CalculatorUI.LayoutParser
Autodesk.AutoCAD.CalculatorUI.VariableParser

В простейшем случае для вызова калькулятора мы можем воспользоваться методом QCalcApplication.ShowModalCalculator. Смотрите пример использования:

Опубликовано 28.10.2020     Читать далее >>>
30/09/2020

Как преобразовать LineWeight в текстовую строку и обратно?Автор: Александр Ривилис

Вопрос: Как выполнить средствами AutoCAD .NET API преобразование из веса линии (LineWeight) в строку (String) и обратно?

Ответ: Для этой цели можно воспользоваться классом Autodesk.AutoCAD.DatabaseServices.LineWeightConverter

Вот пример кода, который выполняет прямое и обратное преобразование:

Опубликовано 30.09.2020     Читать далее >>>
30/08/2020

Как скрыть командную строку без запроса к пользователю?Автор: Александр Ривилис

Как скрыть командную строку без запроса к пользователю?

Вопрос: Я использую для скрытия командной строки метод Autodesk.AutoCAD.Internal.Utils.CloseCommandLine(); При этом возникает запрос:

Можно ли как-то избавится от этого запроса, как будто в этом окне мы ответили Да?

Ответ: Это возможно при использовании HideableDialogSettings:

Опубликовано 30.08.2020     Читать далее >>>
30/08/2020

Как изменить цвет ПСЕВДОРАЗРЕЗА (LIVESECTION)?Автор: Александр Ривилис

Как изменить цвет ПСЕВДОРАЗРЕЗА (LIVESECTION)? Вопрос: Как изменить цвет ПСЕВДОРАЗРЕЗа (LIVESECTION)? Можно ли это сделать при помощи API? Ответ: Средствами AutoCAD .NET API это возможно. Для этой цели необходимо задать цвет при помощи SectionSettings:
Опубликовано 30.08.2020     Читать далее >>>
31/07/2020

RealDWG: Получение информации о цвете граней твердых тел

Используя RealDWG SDK следующий код позволяет получить цвета граней твердых тел в чертеже AutoCAD.

Для извлечения цветов из компонентов твердого тела используется BREP API, поэтому необходимо сослаться на сборку AcDbMgdBrep.dll из RealDWG SDK.

Опубликовано 31.07.2020     Читать далее >>>
19/06/2020

Разделение составных твердых тел на отдельные тела

Мы можем воспользоваться методом Solid3d.SeparateBody

Этот метод разделяет твердое тело на коллекцию непересекающихся твердых тел.
Вызывающее этот метод приложение должно что-то сделать с твердыми телами полученной коллекции (или добавить их в базу данных или удалить, если они больше не нужны). Когда вызывающее приложение закрывает твердое тело, результирующее твердое тело фиксируется в базе данных.
Таким образом если не добавить твердые тела из коллекции в базу данных, мы потеряем какую-то информацию.

Опубликовано 19.06.2020     Читать далее >>>
18/06/2020

Переопределение клавиши вызова Помощи при помощи CUI API

Существует общая потребность изменить назначение клавиши вызова Помощи с F1 на какую-нибудь другую клавишу (или сочетание клавиш), так как на клавиатуре F1 и ESC находятся рядом, а клавиша ESC используется для отмены запущенной команды или отмены выбранных объектов. Поскольку клавиша F1 соседствует с ESC - шансы нажатия этой клавиши случайно довольно высоки. F1 приводит к появлению окно справки, что в указанных случаях является контрпродуктивным.

Чтобы избежать этого, мы можем присвоить F1 команде Отмена, а CTRL + ALT + H для справки.

Опубликовано 18.06.2020     Читать далее >>>
01/06/2020

Фильтр для выбора примитивов на разных слоях

Эта статья показывает простой способ для создания фильтра, который позволит выбрать примитив типа A на слое L и типа B на нескольких слоях L1, L2, L3…. И так далее.

Опубликовано 01.06.2020     Читать далее >>>
31/05/2020

Определение геометрического центра LWPOLYLINE, 2DPoly и 3DPoly

К сожалению, нет прямого API для получения геометрического центра для трех видов полилиний. Кто-то может использовать топологические библиотеки, а кто-то предпочтет простейший из возможный способов – конвертирование AcDbPolyline, AcDb2Polyline, AcDb3dPolyline в область (AcDbRegion) без добавления его в чертеж, чтобы получить геометрический центр.

Опубликовано 31.05.2020     Читать далее >>>
14/04/2020

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

Опубликовано 14.04.2020     Читать далее >>>
29/02/2020

Как временно заблокировать интерфейс AutoCAD при помощи .NET и C++Автор: Александр Ривилис

При длительных операциях с AutoCAD иногда возникает потребность заблокировать его интерфейс, чтобы не дать возможность пользователю изменять чертеж. В AutoCAD API специальных средств для этого нет, но можно воспользоваться Win32 API.
Опубликовано 29.02.2020     Читать далее >>>
29/10/2019

Установка типа колонки мультитекста при его создании

Мы получили недавно сообщение о том, что в программе возникает исключение eNotApplicable при попытке установить тип колонки (ColumnType) при создании мультитекста таким кодом:
Опубликовано 29.10.2019     Читать далее >>>
29/10/2019

Управляемый HLR API для AutoCAD

Мы получили значительное количество запросов от разработчиков о создании управляемой обертки для классического HLR API, который входит в состав ObjectARX SDK для AUtoCAD.

Оригинальный пример был написан Cyrille Fauvel , а я исправил несколько ошибок, связанных с функцией обратного вызова индикатора прогресса и мигрировал проект для AutoCAD 2019.

Опубликовано 29.10.2019     Читать далее >>>
29/10/2019

Как определить использовалась ли Базовая точка при вставке выбранных объектов

Это сообщение на форуме заставило меня написать эту статью, которая как раз совпала с внутренним обсуждением аналогичной проблемы.

Когда мы используем команду _COPYBASE с заданной базовой точкой, выбранные объекты копируются во временный dwg-файл и системная переменная INSBASE этого временного файла содержит введённую базовую точку.

Эта программа использует этот факт при вставке при помощи _PASTORG в другой чертеж.

Спасибо Joel Petersen за предложенную идею

Опубликовано 29.10.2019     Читать далее >>>
28/07/2019

Создание таблиц с различной высотой строк с помощью .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 в цикле для создания строк различной высоты. Ряды различной высоты могут быть созданы следующим образом:

Опубликовано 28.07.2019     Читать далее >>>
28/07/2019

Как изменить установки ГРАФИКАНАСТР при помощи .NET

Вам следует использовать GraphicsSystem.Configuration API для включения и выключения различных эффектов графической системы.

Вот пример включения «Сглаживания линий»:

Опубликовано 28.07.2019     Читать далее >>>
15/06/2019

Нахождение геометрического центра для LWPOLYLINE, 3DPoly и 2DPoly

К сожалению, в AutoCAD API нет прямого метода для определения геометрического центра всех трех типов полилиний. Можно использовать библиотеки топологии, чтобы выяснить это. Проще же всего преобразовать LWPOLYLINE, AcDb2dPolyline, AcDb3dPolyline в AcDbRegion в памяти и применить AutoCAD API для получения геометрического центра области (AcDbRegion).

Опубликовано 15.06.2019     Читать далее >>>