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

02/02/2017

Как реализовать PlotSettingsValidator.SetClosestMediaName в .NET

Комментарий в документации о методе "PlotSettingsValidator.SetClosestMediaName" гласит:

"Эта функция не реализована."

Ниже предложение того, как можно реализовать этот метод в C# используя AutoCAD .NET API:

Опубликовано 02.02.2017     Читать далее >>>
21/01/2017

Как определить, что мы находимся в контексте печати

Недавно я получил ряд запросов от разработчиков как идентифицировать состояние печати в overrule. Чтобы идентифицировать это состояние используем “Context.IsPlotGeneration” как показано ниже в коде:

Опубликовано 21.01.2017     Читать далее >>>
21/01/2017

AecModeler и AutoCAD 2017 Service Pack 1

В hideDisplay API класса Body в AecModeler для AutoCAD 2017 есть проблемы. Ниже обновленный модуль.

AecModeler для AutoCAD 2017 SP1

Опубликовано 21.01.2017     Читать далее >>>
21/01/2017

Стили строк и ячеек таблицы

Каждая строка и ячейка в таблице может иметь свой стиль. Вы можете получить или задать стиль, используя свойство CellRange.Style. Смотрите код ниже:

Опубликовано 21.01.2017     Читать далее >>>
26/12/2016

Как можно создать фильтр, содержащий все типы кривых в чертежеАвтор: Александр Ривилис

Вопрос: Мне нужно дать возможность пользователю выбирать любые типы кривых - все типы полилиний, сплайны, дуги и т.д., и в том числе и пока неизвестные пользовательские кривые… Как это можно сделать?

Ответ: Для этой цели следует проанализировать SystemObjects.ClassDictionary, найти все классы-наследники класса Curve и получить их DXF-коды. Ниже приведен код, который реализует этот алгоритм:

Опубликовано 26.12.2016     Читать далее >>>
14/11/2016

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

Это экзотическая ситуация, но может возникнуть необходимость полностью запретить команду AutoCAD. Один из вариантов – выполнение метода veto() в событии DocumentLockModeChanged. Но при этом команда есть в списке доступных команд и её выполнение начинается, а затем прерывается.

Есть более радикальный метод – использование метода RemoveCommand недокументированного класса Utils из пространства имён Autodesk.AutoCAD.Internal. Этот метод – обертка для метода AcEdCommandStack::removeCmd из ObjectARX. Ему передаются два параметра – имя группы команд и имя команды. Обычно достаточно передать глобальное имя команды, но бывают и исключения. Поэтому мы удалим команду и по глобальному и по локальному имени. Так как мы не знаем в какой локализации AutoCAD будет выполняться код, то нам нужно получить имя локализованной команды по её глобальному имени. Для этой цели в ObjectARX есть функция acedGetCName которая в версиях AutoCAD до 2012 включительно содержится в acad.exe, а позднее в accore.dll Мы воспользуемся P/Invoke для вызова её из .NET

Опубликовано 14.11.2016     Читать далее >>>
07/11/2016

Как получить 3D-полилинию, по которой получается тело сдвигаАвтор: Александр Ривилис

Вопрос: Имеется труба - твердое тело, полученной сдвигом круга (Circle) по траектории, образованной 3D-полилинией (3DPoly). Как получить вершины 3D-полилинии?

Ответ: Вариантов решения этой задачи несколько:

1) Использование метода GetGripPoints. Для тела у которого не очищена история редактирования если пропустить первые четыре ручки, то мы получим вершины 3D-полилинии. Но если история очищена, то получить вершины таким образом не получится, так как расположение ручек совсем другое.

2) Использовать BREP .NET API для получения информации о вершинах.

Второй вариант мы и рассмотрим, так как он более универсальный. Нам следует получить все ребра (Edge) твердого тела, выделить из них круглые (CircularArc3d) и эллиптические (EllipticalArc3d) и найти их центры.

Опубликовано 07.11.2016     Читать далее >>>
26/10/2016

Как выполнить Overrule для замкнутого сплайна так, чтобы он был заполнен своим цветомАвтор: Александр Ривилис

Вопрос: Как выполнить Overrule для замкнутого сплайна (Spline) так, чтобы он был заполнен своим цветом?

Ответ: Простейший способ – это выполнить аппроксимацию сплайна и рисовать сплайн при помощи Geometry.Polygon указав в качестве параметра точки аппроксимации.

Ниже пример как это можно реализовать:

Опубликовано 26.10.2016     Читать далее >>>
24/10/2016

Как в .NET выбрать грани 3DSOLID и изменить им цвет.Автор: Александр Ривилис

Недавно мы обсуждали как это сделать средствами ObjectARX. Сегодня рассмотрим, как это делается в .NET API:

Опубликовано 24.10.2016     Читать далее >>>
28/09/2016

Пример использования метода Curve.ExtendАвтор: Александр Ривилис

Вопрос:
Не нашел примера использования метода Curve.Extend. Подскажите, пожалуйста, как этот метод можно использовать для удлинения кривой.

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

Опубликовано 28.09.2016     Читать далее >>>
07/09/2016

Получение точек пересечения кривой и плоскостиАвтор: Александр Ривилис

Для получения пересечения кривой и плоскости можно пользоваться различными методами. Один из методов, который предложен в этой статье, это аппроксимация кривой с получением точек аппроксимации, а затем получение пересечения отрезков, образованных этими точками и плоскостью. Ниже пример кода, который реализует этот алгоритм:

Опубликовано 07.09.2016     Читать далее >>>
21/08/2016

Определение shx-файла, используемого в типе линии

Если тип линии использует shx-файл, то он ссылается на TextStyleTableRecord. Вот пример, который печатает имя shx-файла, который используется в типе линии ЗИГЗАГ (ZIGZAG).

Опубликовано 21.08.2016     Читать далее >>>
20/08/2016

Как перенести примитив из одного блока в другой

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

Опубликовано 20.08.2016     Читать далее >>>
04/08/2016

AutoCAD 2017 Service Pack 1 механизм Автозагрузки

AutoCAD 2017 Service Pack 1 механизм Автозагрузки

AutoCAD 2017 Service Pack 1 вносит ошибку, которая не позволяет AutoCAD автоматически загружать приложения.

Для исправления этой ошибки мы создали Исправление для AutoCAD 2017 Service Pack 1. Пожалуйста загрузите и установите его отсюда.

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

AutoCAD 2017 SP1 и отладка .NET приложений

Вышел Пакет обновлений 1 (SP1) для AutoCAD 2017. Для его загрузки перейдите сюда. Одно из важных улучшений - отладка .NET приложений в AutoCAD 2017 SP1 с использованием Visual Studio 2015. До сих пор разработчикам приходилось использовать обходной путь, как было сказано в статье Отладка AutoCAD 2017 с использованием Visual Studio 2015. Теперь же начиная с AutoCAD 2017 SP1 потребность в этом обходном пути отпала. Теперь вы можете даже воспользоваться возможностями Edit & Continue (Редактировать и продолжить) при отладке.
Опубликовано 28.07.2016     Читать далее >>>
26/07/2016

Загрузка и выполнение VBA-макроса из .NET приложения

Код ниже показывает процедуру загрузки и выполнения VBA-макроса из .NET сборки. Здесь используются методы LoadDVB и RunMacro из AutoCAD ActiveX API. Так как код использует ключевое слово dynamic (или Reflection), то отпадает необходимость подключать ссылки к AutoCAD ActiveX (interop) модулям.

Опубликовано 26.07.2016     Читать далее >>>
22/07/2016

Добавление полей к атрибутам блока, вставленными в пространство модели

Вот статья, которая объясняет, как вставить блок с атрибутами.

Ниже C#-код, вставляющий поле (field) в атрибут блока. Создайте чертеж с блоком с именем "test" содержащий окружность (Circle) и определение атрибута с произвольным именем для тестирования кода.

Опубликовано 22.07.2016     Читать далее >>>
21/07/2016

Выгрузка и загрузка PDF-подложек

Следующий код показывает как выгрузить (загрузить) все PDF-подложки. Для того, чтобы они исчезли (появились) необходима регенерация всех вставок PDF в чертеже. Для получения всех PDF-вставок используется метод PdfDefinition.GetPersistentReactorIds.
Опубликовано 21.07.2016     Читать далее >>>
21/07/2016

Как вставить блок с атрибутами в пространство модели

Определение блока содержится в BlockTableRecord. Если у блока есть атрибуты, то они содержатся в BlockTableRecord как AttributeDefinition – точно также как и любые другие примитивы.

Когда мы вставляем блок в чертеж (точнее в пространство модели), то мы вставляем BlockReference. Если у блока есть атрибуты, то для всех (кроме постоянных) AttributeDefinition в BlockTableRecord имеются соответствующие AttributeReference присоединённые к BlockReference. Постоянные атрибуты обрабатываются не так, потому что их текст одинаков во всех вставках этого блока (во всех BlockReference). Они находятся в BlockTableRecord, и не имеют соответствующих AttributeReference присоединённых к BlockReference.

Ниже простой C#-код для вставки блока с атрибутами в пространство модели. Создайте чертеж, содержащий блок с именем “CHECK” содержащий несколько атрибутов (часть постоянных, часть нет) для проверки кода.

Опубликовано 21.07.2016     Читать далее >>>
16/07/2016

Как позволить пользователю прервать длительную операцию в AutoCAD .NET

Если у вас запущена длительная операция, то вам может понадобится возможность прервать эту операцию (при помощи клавиши ESC). Следующий код работал в AutoCAD 2007…2009, но он продолжает по-прежнему исправно работать и в AutoCAD 2017.
Опубликовано 16.07.2016     Читать далее >>>