Как обновить выбранные поля не выполняя регенерацию всего чертежаАвтор: Александр Ривилис
Вопрос: Мне необходимо выполнить обновление некоторых полей в чертеже, но мне не хотелось бы выполнять полную регенерацию. Как это можно осуществить?
Ответ: В ObjectARX есть семейство функций acdbEvaluateFields, которые и позволяют обновить поля в чертеже. Пример использования функции acdbEvaluateFields смотрите ниже:
Как определить изменение вида в AutoCAD
Недавно один из партнеров ADN задал мне вопрос о том, как можно идентифицировать изменение вида в AutoCAD при выполнении зуммирования и панорамирования при помощи мыши. Чтобы отловить такое событие в ObjectARX следует использовать реактор редактора viewChanged() (AcEditorReactor::viewChanged()). А вот в AutoCAD.NET API эквивалентом этом реактору будет событие класса документа Document::ViewChangedКак средствами ObjectARX получить точки пересечения кривой и плоскостиАвтор: Александр Ривилис
Вопрос: Имеется кривая (наследник AcDbCurve) и задана плоскость AcGePlane. Каким образом можно получить все точки пересечения кривой и плоскости?
Ответ: Для этой цели мы воспользуемся геометрической библиотекой. Во-первых, при помощи функции acdbConvertAcDbCurveToGelibCurve мы преобразуем AcDbCurve (и любого его наследника) в AcGeCurve3d. Во-вторых, воспользуемся классом AcGeCurveSurfInt для получения точек пересечения кривой и плоскости.
Ниже вы видите исходный код функции, которая запрашивает у пользователя кривую, начальный и конечный уровень для горизонтальных плоскостей и шаг между горизонтальными плоскостями. Результат её работы – желтые точки, отмечающие пересечение плоскостей и кривой.
Добавление иконки к имени команды без использования CUIXАвтор: Александр Ривилис
Вопрос: как программно добавить иконку для своей команды в контекстное меню, возникающее при наборе команды вручную? Один из способов мне известен – это регистрация команды в cuix-файле, как описано здесь: Adding Icon Next To Custom Command. Хотелось бы добиться такого же результата, но без создания cuix-файла.
Ответ: средствами ObjectARX это возможно. Думаю, что можно и при помощи AutoCAD .NET API, но понадобится активно использовать P/Invoke для большого числа функций из Win32 и ObjectARX. Я покажу здесь как это можно сделать при помощи ObjectARX:
Использование CustomExporter для 2D
Вопрос: Я пытаюсь получить двумерное представление заданного элемента в модели. При помощи CustomExporter я получаю все видимые элементы на 3D виде. Я читал несколько статей и в одной из них я прочел, что нужно использовать что-то вроде «переключение на двумерный план этажа и запросить представление этого элемента на заданном виде». Сейчас я застрял на этапе как мне получить нужный план этажа, если у меня их в модели несколько? Можете направить меня в нужное русло?
Форматирование плавающего числа в строку
В ObjectARX для конвертации плавающего числа в строку используется функция acdbRToS. Эта функция также заботится о преобразовании строки в нужный формат ("Архитектурные", "Десятичные", "Инженерные", "Дробные" и "Научные"), как показано в коде ниже.Объединение блоков AutoCAD с использованием .NET API
Вопрос: У меня есть два блока с разными атрибутами, которые я хочу объединить в единый блок. При этом я не хочу создавать вложенные блоки. Как это можно осуществить при помощи AutoCAD .NET API?
Ответ: Вот C#-код, который использует метод Database.DeepCloneObjects() для создания нового блока на основе двух других:
Как получить границы области (Region)Автор: Александр Ривилис
Вопрос: Как средствами AutoCAD .NET API можно получить границы (контура) области (Region)?
Ответ: Для этой цели следует воспользоваться возможностями Brep .NET API. Пример получения граничных контуров ниже. Внешние контура красного цвета, внутренние - желтого.
AppPackage API в AutoCAD I/O API - Часть 2
Рассматриваются примеры AppPackage API в AutoCAD I/O APIAppPackage API в AutoCAD I/O API - Часть 1
Рассматриваются примеры AppPackage API в AutoCAD I/O APIWorkItem в AutoCAD I/O API - часть 2
Рассматриваются примеры использования API деятельности в WorkItem I/O APIWorkItem в AutoCAD I/O API - часть 1
Рассматриваются примеры использования API деятельности в WorkItem I/O APIAPI деятельности в AutoCAD I/O API - Часть 2
Рассматриваются примеры использования API деятельности в AutoCAD I/O APIМедицинский анализ в Fusion 360
Рассматриваются особенности нового функционала Autodesk Fusion 360API деятельности в AutoCAD I/O API - Часть 1
Рассматриваются примеры использования API деятельности в AutoCAD I/O APIКонвертация AcDb3DSolid в AcDbPolyFaceMesh средствами ObjectARXАвтор: Александр Ривилис
Вопрос: Стоит задача получить на основе AcDb3DSolid сеть AcDbPolyFaceMesh. Как это можно сделать?
Ответ: Ниже код, который позволяет это сделать. Возможны вариации в настройке AcBrMesh2dControl, определяющей насколько сеть будет повторять контуры твердого тела и какие элементы будут в основе этой сети.
Установка цвета всем граням твёрдого тела
Ниже вы видите код, который показывает как пройти по всем граням твердого тела и покрасить каждую из граней в свой цвет:Управление форматом вывода данных чисел в Панели свойств AutoCADАвтор: Александр Ривилис
Управление форматом вывода данных чисел в Панели свойств AutoCAD
В статье Как показать правильно числовое значение в Панели Свойств (OPM)? в общих чертах описывается возможность управлять форматом вывода числовых значений в Панели свойств. Всё более-менее просто если свойство статическое. В этом случае имеется возможность указать формат числа в idl-файле. А вот в случае динамического свойства требуется выполнить специальную подготовку. Форматом вывода управляют методы GetCurrentValueName и GetCurrentValueType. Вот пример, обеспечивающий независящее от единиц представление действительного числа:
Превращение всех элементов в DirectShape
Новый интересный пример использования DirectShape предоставил наь Nikolay Shulga, старший инженер из команды разработчиков Revit.
Вот что он пишет: