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

15/01/2014

Синхронизация Ленты и системной переменной

Это пример кода, который показывает в комбобоксе Ленты список возможных значений системной переменной LUNITS и обеспечивает синхронизацию этой переменной и комбобокса. Системная переменная LUNITS используется только для демонстрации возможности синхронизации и этот код легко адаптируется для других системных переменных AutoCAD.
Опубликовано 15.01.2014     Читать далее >>>
10/01/2014

Как завершить "Editor.GetSelection" при выборе ключевого слова

Один из путей выхода из метода “GetSelection” по ключевому слову – это создать исключение в обработчике события ввода ключевых слов. Ниже простой пример объясняющий эту технику. При нажатии любого ключевого слова генерируется исключение “Autodesk.AutoCAD.Runtime.ErrorStatus.OK” с передачей ключевого слова. Это исключение обрабатывается в коде для идентификации введенного ключевого слова.
Опубликовано 10.01.2014     Читать далее >>>
08/01/2014

Доступ к COM-приложениям из Таблицы исполняющихся объектов (ROT)

Вот тема, которая то и дело всплывает: как перейти к определенному экземпляру COM-приложения, если есть несколько экземпляров имеющих аналогичный ProgId? Вызов GetActiveObject (progId) может вернуть только один объект, так что нет никакого способа, чтобы выбрать нужный конкретный экземпляр.

Обойти это ограничение можно используя Таблицу исполняющихся объектов (Running Object Table), которая может предоставить вам доступ к каждому экземпляру COM, работающему на машине.

Опубликовано 08.01.2014     Читать далее >>>
30/12/2013

Выбор вставок блоков с использованием фильтра

Этот пример запрашивает у пользователя выбор нескольких примитивов, а затем фильтрует все вставки блока с именем "ABC". А затем проходит по всему набору и вызывает метод erase() для каждой вставки блока.

Опубликовано 30.12.2013     Читать далее >>>
28/12/2013

Определение записи таблицы блоков связанной с Листом

Чтобы добавить примитивы на Лист, необходимо найти запись таблицы блоков, связанную с этим листом. Каждый лист хранит ObjectId записи таблицы блоков, с которой он ассоциирован. Ниже код добавляющий окружность к выбранному Листу.

Опубликовано 28.12.2013     Читать далее >>>
27/12/2013

Создаем блок из набора примитивов

Код ниже показывает алгоритм создания нового блока из выбранных на экране примитивов. Важнейшим методом для этого является “DeepCloneObjects” который получает набор ObjectId примитивов для копирования. Второй параметр – новый «владелец» скопированных примитивов. В следующем коде запись таблицы блоков с именем «тест» передаётся как новый владелец, так что копии выбранных примитивов попадают в этот блок.

Опубликовано 27.12.2013     Читать далее >>>
25/12/2013

Очистка набора предварительного выбора

Вы можете использовать метод “Editor.SetImpliedSelection” для очистки набора предварительного выбора. Код ниже получает список всех предварительно выбранных примитивов, а затем очищает его передавая пустой массив ObjectId в метод SetImpliedSelection.

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

Editor.SelectAll с фильтром выбора примитивов и слоёв

При использовании метода “Editor.SelectAll” можно создать фильтр выбора для отсеивания ненужных примитивов. Код ниже показывает как можно отфильтровать Отрезки и Круги, которые находятся только на определённых слоях (0, Layer1, Layer2).

Опубликовано 21.12.2013     Читать далее >>>
06/12/2013

Простая альтернатива использованию COM-объекта Preferences в AutoCAD

Недавно один из разработчиков столкнулся с проблемой при написании кода на LISP, когда он пытался добавить несколько путей к свойству PrinterStyleSheetPath. Код выглядел примерно так:
Опубликовано 06.12.2013     Читать далее >>>
29/11/2013

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

Следующий код делает невидимые определения атрибутов в блоке видимыми, а также обновляет все вставки этого блока для того, чтобы отразить изменения в определении блока.
Опубликовано 29.11.2013     Читать далее >>>
27/11/2013

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

Определения атрибутов хранятся вместе со всеми остальными примитивами, составляющими блок. А когда добавляется ссылка на блок, то вставляются и соответствующие ссылки атрибутов. Один из способов определить наличие определений атрибутов в блоке – это использование метода “BlockTableRecord.HasAttributeDefinitions” соответствующей записи таблицы блоков.
Опубликовано 27.11.2013     Читать далее >>>
25/11/2013

Удаление неиспользуемых блоков

Ниже код показывает процедуру очистки таблицы блоков. Обратите внимание на цикл Do/while для удаления вложенных блоков.
Опубликовано 25.11.2013     Читать далее >>>
22/11/2013

Удаление неиспользуемых слоёв из чертежа

Метод Database.Purge можно использовать для идентификации неиспользованных слоёв. Если установлено что слой неиспользованный, то его можно безопасно удалять из базы при помощи метода “erase”.

Заметим, что логика очень похожа на логику удаления неиспользованных зарегистрированных приложений из чертежа.

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

Удаление неиспользуемых имен приложений из базы

Метод Database.Purge API можно использовать для идентификации неиспользуемых имён приложений. Когда имена неиспользованных приложений получены, так сразу можно использовать метод “erase” для удаления их из базы.
Опубликовано 20.11.2013     Читать далее >>>
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     Читать далее >>>