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

03/05/2017

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

Как получить список доступных плоттеров/форматов в AutoCAD?

Вопрос: Как получить список доступных плоттеров в AutoCAD и список канонических имён форматов для каждого из доступных плоттеров?

Ответ: Для получения списка доступных плоттеров нужно воспользоваться методом PlotSettingsValidator.GetPlotDeviceList, а для получения канонических имён форматов – PlotSettingsValidator.GetCanonicalMediaNameList

Ниже пример того, как можно выбрать только плоттеры, в имени которых есть строка «PDF», и получить список канонических имён их форматов:

Опубликовано 03.05.2017     Читать далее >>>
23/03/2017

Определение внешних ссылок, требующих обновленияАвтор: Александр Ривилис

Определение внешних ссылок, требующих обновления

Вопрос: Как определить, что в чертеже есть внешние ссылки, которые требуют обновления?

Ответ: Это возможно только в том случае, когда системная переменная XREFNOTIFY отлична от 0 (в противном случае AutoCAD не отслеживает изменение внешних ссылок и не уведомляет об изменениях).

Для получения информации об изменившихся внешних ссылках следует пробежаться по графу внешних ссылок и найти те, статус (XrefNotificationStatus) которых равен ResolvedUpdateAvailable

Код может выглядеть так:

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

Мониторинг изменения рабочего пространства

Если вам нужно отслеживать переключения рабочего пространства (например, в случае если вы используете Ribbon Runtime API для добавления элементов управления в Ленту), то вам достаточно отслеживать изменение системной переменной WSCURRENT
Опубликовано 28.02.2017     Читать далее >>>
28/02/2017

Как запретить выполнение конкретной команды AutoCAD

Вы можете запретить выполнение команды внутри события “DocumentCollection.DocumentLockModeChanged”. Это событие вызывается сразу перед тем как AutoCAD начнёт выполнение этой команды. Посмотрите как можно запретить завершение работы AutoCAD.

Опубликовано 28.02.2017     Читать далее >>>
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     Читать далее >>>