Как создать конус, направленный вдоль заданной осиАвтор: Александр Ривилис
Вопрос: Как при помощи AutoCAD .NET API можно создать конус, который бы был направлен вдоль заданной пользователем оси?
Ответ: Для того, чтобы создать конус достаточно воспользоваться методом Solid3d.CreateFrustum. Созданный таким образом конус направлен вдоль оси Z, и начало координат находится в середине оси конуса. Дальше следует выполнить трансформацию конуса. Ниже исходный текст программы:
Создаём четыре видовых экрана модели и назначаем ортогональные виды
Недавно пользователю понадобилось модифицировать код для создания раздельных видовых экранов в модели и установить каждому из них различные ортогональные виды. Код ниже создаёт четыре раздельных видовых экрана в модели. Для этого мы создаём новые ViewportTableRecord, которые представляют новые видовые экраны, а их параметры устанавливаем на основе текущей ViewportTableRecord. Это гарантирует, что ViewportTableRecord будет правильно настроен для установки орфографического представления. И в конечном итоге мы выполняем показ до границ. Вот скриншот результирующего расположения видовых экранов.
Имитация штриховки при помощи DrawableOverrule
Если вам нужно временно заштриховать примитив – для этой цели можно воспользоваться DrawableOverrule. Рисование шаблона штриховки в WorldDraw / ViewportDraw может быть как простым, так и сложным в зависимости от того, какой шаблон штриховки используется. Чтобы корректно заштриховать границу штриховки при помощи шаблона штриховки можно воспользоваться подрезкой по контуру, создаваемой в Overrule. Это упрощает реализацию Overrule, так как отсечка шаблона штриховки за пределами объекта обеспечивается подрезкой по заданным границам объекта.
Доступ к файлам стандартов оформления AutoCAD (.dws)
У меня появился шанс исследовать эту проблему, когда я наткнулся на запрос на форуме.
Когда пользователь вызывает команду _LAYTRANS, появляется диалоговое окно транслятора слоёв, и пользователю разрешено сопоставление из загруженного рисунка на текущий рисунок.
Слои из загруженного чертежа сопоставляются со слоями в текущем чертеже или могут быть сопоставлены пользователем.
Эта настройка может быть сохранена в качестве файла стандартов (.dws), для будущего использования, когда пользователь получает рисунок от клиента, пользователь может проверить, соответствует ли чертеж указанным файлам стандартов.
Файл стандартов оформления содержит таблицу трансляции слоёв в виде расширенных данных для каждого из слоёв, которые могут быть сопоставлены или транслированы.
Например, в этом файле есть соответствие между слоями A,B,C и 1,2,3. Тогда слои A,B,C файла стандартов (исходного) транслируются в слои 1,2,3 текущего чертежа (назначения)
Чтение dws-файлов точно такое же как и чтение dwg-файлов, только с другим расширением (спасибо Lee за подсказку).
Установка исходной точки штриховки при её создании в .NET
У нас был вопрос, поднятый клиентом по поводу установки исходной точки штриховки в процессе её создания.
Было обнаружено, что исходную точку штриховки следует задавать не в той транзакции, в которой эта штриховка создаётся, для того чтобы исходная точка была установлена корректно.
Ниже код, который можно использовать для проверки :
Метод Editor.Snap для изменения режима привязки точки
При использовании метода Editor.GetEntity часто требуется получить в точности все координаты точки указания, используемые для выбора объекта.
Например, рассмотрим следующую ситуацию. Построим окружность с центром в точке point (0,0,5) и радиусом 5 в плоскости XY МСК при виде сверху.
При выборе точке на окружности с использованием Editor.GetEntity, PromptEntityResult.PickedPoint вернул : (3.50064192661003 , 3.35618169844321 , 0)
Как выполнить расчленение группы примитивов при помощи .NET APIАвтор: Александр Ривилис
Следующий код показывает как можно расчленить группу, заданную её именем:Доступна обновленная документация AutoCAD Plant 3D SDK
Обновленная версия документации Plant SDK, которая распространяется на версии с 2017 по 2022, доступна для скачивания в Центре разработчика: https://www.autodesk.com/developer-network/platform-technologies/autocad-p-id-and-plant-3d
Ссылка для загрузки документации: https://damassets.autodesk.net/content/dam/autodesk/files/autocad_plant_3d/autocad_plant_3d_sdk_2017_through_2022_english_documentation.zip
Определение активного пространства и активного листа
Database.CurrentSpaceId содержит ObjectId текущего пространства (Модели или Листа). Вы можете использовать ее для идентификации активного пространства. При помощи LayoutManager мы может узнать активный лист.Как подсветить примитив внутри блока или внешней ссылки - NETАвтор: Александр Ривилис
Вопрос: Для того чтобы подсветить примитив в текущем пространстве (Модели или Листа) достаточно воспользоваться методом Entity.Highlight(). А как подсветить примитив, который находится в составе блока (возможно вложенного блока) или во внешней ссылке?
Ответ: Для этой цели следует воспользоваться методом Entity.Highhlight(FullSubentPath subId), предварительно создав правильный FullSubentPath.
Ниже приведен код, который подсвечивает примитив внутри самого вложенного блока или внешней ссылки:
AutoCAD .NET API: метод IExtensionApplication.Terminate() не вызывается
Вопрос:
Я создаю и запускаю приложение с использованием AutoCAD .NET API, но после установки обновления AutoCAD 2020.1 Update, метод IExtensionApplication.Terminate() больше не вызывается.
Тоже самое касается и AutoCAD 2020.1.2 Update и AutoCAD 2021 со всеми обновлениями.
Что-то изменилось??
Как можно динамически поменять цвет фона в редакторе блоков BEDIT в .NET API?Автор: Александр Ривилис
Вопрос: Как можно поменять цвет фона в редакторе блоков (BEDIT) при помощи кода .NET API?
Ответ: В ObjectARX есть возможность менять цвет элементов интерфейса AutoCAD (в том числе и цвет фона редактора блоков). Воспользуемся P/Invoke для вызова этого кода из .NET:
Как запустить диалоговое окно калькулятора в 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. Смотрите пример использования:
Как преобразовать LineWeight в текстовую строку и обратно?Автор: Александр Ривилис
Вопрос: Как выполнить средствами AutoCAD .NET API преобразование из веса линии (LineWeight) в строку (String) и обратно?
Ответ: Для этой цели можно воспользоваться классом Autodesk.AutoCAD.DatabaseServices.LineWeightConverter
Вот пример кода, который выполняет прямое и обратное преобразование:
Как скрыть командную строку без запроса к пользователю?Автор: Александр Ривилис
Как скрыть командную строку без запроса к пользователю?
Вопрос: Я использую для скрытия командной строки метод Autodesk.AutoCAD.Internal.Utils.CloseCommandLine(); При этом возникает запрос:
Можно ли как-то избавится от этого запроса, как будто в этом окне мы ответили Да?
Ответ: Это возможно при использовании HideableDialogSettings:
Как изменить цвет ПСЕВДОРАЗРЕЗА (LIVESECTION)?Автор: Александр Ривилис
Как изменить цвет ПСЕВДОРАЗРЕЗА (LIVESECTION)? Вопрос: Как изменить цвет ПСЕВДОРАЗРЕЗа (LIVESECTION)? Можно ли это сделать при помощи API? Ответ: Средствами AutoCAD .NET API это возможно. Для этой цели необходимо задать цвет при помощи SectionSettings:RealDWG: Получение информации о цвете граней твердых тел
Используя RealDWG SDK следующий код позволяет получить цвета граней твердых тел в чертеже AutoCAD.
Для извлечения цветов из компонентов твердого тела используется BREP API, поэтому необходимо сослаться на сборку AcDbMgdBrep.dll из RealDWG SDK.
Разделение составных твердых тел на отдельные тела
Мы можем воспользоваться методом Solid3d.SeparateBody
Этот метод разделяет твердое тело на коллекцию непересекающихся твердых тел.
Вызывающее этот метод приложение должно что-то сделать с твердыми телами полученной коллекции (или добавить их в базу данных или удалить, если они больше не нужны). Когда вызывающее приложение закрывает твердое тело, результирующее твердое тело фиксируется в базе данных.
Таким образом если не добавить твердые тела из коллекции в базу данных, мы потеряем какую-то информацию.
Переопределение клавиши вызова Помощи при помощи CUI API
Существует общая потребность изменить назначение клавиши вызова Помощи с F1 на какую-нибудь другую клавишу (или сочетание клавиш), так как на клавиатуре F1 и ESC находятся рядом, а клавиша ESC используется для отмены запущенной команды или отмены выбранных объектов. Поскольку клавиша F1 соседствует с ESC - шансы нажатия этой клавиши случайно довольно высоки. F1 приводит к появлению окно справки, что в указанных случаях является контрпродуктивным.Чтобы избежать этого, мы можем присвоить F1 команде Отмена, а CTRL + ALT + H для справки.
Фильтр для выбора примитивов на разных слоях
Эта статья показывает простой способ для создания фильтра, который позволит выбрать примитив типа A на слое L и типа B на нескольких слоях L1, L2, L3…. И так далее.