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

18/11/2013

Создание и доступ к информации фильтра слоёв

Ниже примеры с использованием ObjectARX и .NET создания и манипулирования фильтрами слоёв. Простейший способ для того, чтобы узнать выражение фильтра слоёв – это создать его средствами AutoCAD и использовать этот код для поиска фильтра слоёв. Это можно затем использовать в коде для создания нового фильтра слоёв.
Опубликовано 18.11.2013     Читать далее >>>
17/11/2013

Получение копии примитива

Следующий код демонстрирует использование метода “DeepCloneObjects” для получения копии примитива, который уже находится в базе. Сначала код просит указать один примитив, затем делает его «глубокую копию» и меняет цвет примитива на красный. Для идентификации нового примитива код использует класс “IdMapping”, который позволяет получить связь между оригинальным объектом и его копией.

Опубликовано 17.11.2013     Читать далее >>>
15/11/2013

Генерирование данных об использовании слоёв перед очисткой/удалением

Иногда случается, что не удаётся очистить слой и его свойство "IsUsed" возвращает trueдаже если этот слой не используется. Причина этого в том, что AutoCAD хранит информацию об использованных слоях и обновляет её только тогда, когда это требуется. Чтобы форсировать обновление этих данных следует использовать метод "GenerateUsageData" объекта LayerTable.

Это пример кода, который пытается удалить записи таблицы слоёв после вызова "GenerateUsageData".

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

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

Если у определения блока для данной вставки блока есть невидимое определение атрибута, тогда и у вставки блока будет невидимый атрибут. Но вы можете сделать такие атрибуты видимыми при помощи кода, как показано ниже. Невидимые вставки атрибутов идентифицируются свойством “AttributeReference.Invisible”
Опубликовано 14.11.2013     Читать далее >>>
13/11/2013

Очистка чертежа от анонимных блоков

Вопрос:

Как я могу удалить из чертежа все неименованные (и не вставленные) блоки из чертежа программно?

Ответ:

Очистить чертеж от всех неимеющих ссылок объектов можно при помощи метода PurgeAll

Опубликовано 13.11.2013     Читать далее >>>
11/11/2013

Создание PolyfaceMesh из 3D Solid

Это пример кода, создающего многогранную сеть из твердого тела. Большая часть в этом коде из статьи в блоге Kean Walmsleyна похожую тему с некоторыми дополнениями создающую многогранную сеть. Как и в оригинальной статье, я тестировал код со сферой, так что для более сложных тел возможно потребуется настройка параметров.
Опубликовано 11.11.2013     Читать далее >>>
09/11/2013

Предотвращение удаления примитива

Один из путей для предотвращения удаления примитива – это использование объектного переопределение (overrule). При помощи этого переопределения можно переопределить функционал удаления (“Erase”) таким образом, что примитив нельзя будет удалить.
Опубликовано 09.11.2013     Читать далее >>>
07/11/2013

Использование .NET API для добавления и удаления расширенных данных

Чтение/запись свойства XData экземпляра класса Autodesk.AutoCAD.DatabaseServices.DBObject используется для чтения и установки расширенных данных любого объекта из базы чертежа. Этот пример демонстрирует тоже самое для примитива..
Опубликовано 07.11.2013     Читать далее >>>
06/11/2013

Переопределение точек привязки для вставки блока

При переопределении точек привязки примитива BlockReference, мы можем хотеть отключить все остальные точки привязки, в том числе и те, которые получаются из примитивов, составляющих блок. Для этой цели мы переопределяем метод "IsContentSnappable" класса "OsnapOverrule".

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

Опубликовано 06.11.2013     Читать далее >>>
04/11/2013

Удаление вершин 3D-полилинии

Следующий код показывает, как можно удалить указанную вершину у 3D-полилинии. Сначала программа проходится по всем вершинам полилинии и создаёт список вершин для удаления.

Опубликовано 04.11.2013     Читать далее >>>
02/11/2013

Редактирование по месту файлов внешних ссылок

Код ниже показывает процедуру редактирования файла внешней ссылки. Для этой цели используется класс “XrefFileLock”, который обрабатывает управление блокировкой файлов внешних ссылок:

Опубликовано 02.11.2013     Читать далее >>>
31/10/2013

Управление видимостью Точки в AutoCAD

Системная переменная “PDMODE” управляет отображением примитива Точка в AutoCAD. Эта переменная может иметь значения между 0 и 5, между 32 и 36, между 64 и 68 и между 96 и 100. Это значение можно изменить меняя свойство “Pdmode” для Database.

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

Использование пользовательских данных чертежа в полях

.NET/ObjectARX API позволяет использовать пользовательские свойства в полях. Следующий код показывает, как это сделать на примере пользовательского свойства Адрес (“Address”).

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

Зеркальное отображение примитива однострочного текста (DBText)

Некоторое время назад, когда этого блога еще не было, был написан следующий .NET код для отзеркаливания однострочного текста (DBText), чтобы решить один из запросов от члена AND. Через какое-то время снова возникла необходимость в этом коде. Вы сами сможете увидеть, что он не так прост, как могло бы показаться:

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

Выравнивание примитива по трем точкам

Ниже приведен пример кода, который выравнивает выбранный примитив по трем базовым и трем целевым точкам. Порядок, в котором точки выбираются, показан на картинке. Приведен пример чертежа для проверки кода.

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

Добавление поля, содержащего данные другого примитива

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

Опубликовано 24.10.2013     Читать далее >>>
21/10/2013

Изменение цвета вложенных примитивов AutoCAD с помощью .NET

Меня спрашивали как изменить цвет всех примитивов внутри блоков.

Следующий код использует рекурсивную вспомогательную функцию для итерирования внутри блоков, изменяющую цвет множества примитивов (не вставок блока – для них простая рекурсия).

Опубликовано 21.10.2013     Читать далее >>>
17/10/2013

Получение кода поля (field) из объекта Field

Следующая программа показывает процедуру получения кода поля текстового примитива. Сначала она проверяет есть ли поля, ассоциированные с этим текстовым примитивом, при помощи метода “HasFields”. Затем используется метод “GetField” для получения объекта Field, а из него при помощи метода “GetFieldCode” получается код поля.

Опубликовано 17.10.2013     Читать далее >>>
15/10/2013

Получение всех полей (field) примитива AutoCAD

Такие примитивы AutoCAD как MText и Text могут содержать более одного поля. Чтобы получить доступ к этим полям нужно использовать метод “GetChildren”. Код ниже показывает каким образом следует использовать метод “GetChildren”. Чтобы получить объект Field используется метод “GetField” (без параметров).

Опубликовано 15.10.2013     Читать далее >>>
13/10/2013

Обратное преобразование растрового изображения

Вставка блока (BlockReference) предоставляет матрицу преобразования "BlockTransform", которая очень полезна, когда необходимо преобразовать примитив так, чтобы свести на нет последствия перемещения, вращения и масштабирования. А растровое изображение (RasterImage) не предоставляет такой матрицы. Но мы можем её создать сами, зная значения поворота, смещения и масштабирования по X и Y. Вот код примера, который устраняет масштабирование, смещение и поворот выбранного растрового изображения:
Опубликовано 13.10.2013     Читать далее >>>