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

27/01/2015

Отслеживание меток примитивов в команде БЛОКРЕД

Метки примитивов в AutoCAD являются уникальными внутри базы, но AutoCAD может их менять, при этом оставляя их уникальными. Редактирование блока при помощи команды БЛОКРЕД (BEDIT) – это одна из операций, когда можно ожидать что метки примитивов будут меняться. Если ваш код хранит значений меток примитивов внутри BlockTableRecord, вам может быть интересным отследить изменение значений меток примитивов при редактировании блока.

Опубликовано 27.01.2015     Читать далее >>>
26/01/2015

Выбор примитивов для изменения свойств

Чтобы выбрать примитивы и оставить видимыми свойства выбранных примитивов в Панели Свойств необходимо вашей команде установить флаг CommandFlags.Redraw. Это гарантирует то, что AutoCAD оставит выбранные примитивы подсвеченными. После этого вы можете изменить их общие свойства по своему разумению. Далее небольшой фрагмент кода для выбора всех примитивов:
Опубликовано 26.01.2015     Читать далее >>>
14/01/2015

Установка прозрачности слоя в .NET

Слою можно назначить (начиная с версии AutoCAD 2011) прозрачность при помощи диалога команды слой.

Это пример того, как можно достигнуть такого же результата при помощи AutoCAD .Net API.

Перед тем как попробовать этот код не забудьте установить системную переменную TRANSPARENCYDISPLAY в 1.

Опубликовано 14.01.2015     Читать далее >>>
24/12/2014

Быстрое получение количества примитивов в Пространстве Модели

LINQ предлагает легкий способ нахождения числа примитивов в Пространстве Модели без итерации по ней. Интерфейс IEnumerator обеспеченный классом BlockTableRecord может быть приведён к IEnumerable<ObjectId> для подсчета количества. Ниже пример кода :
Опубликовано 24.12.2014     Читать далее >>>
23/12/2014

Получение свойств и методов класса ActiveX/COM из .NET

Если вы используете COM-интерфейс AutoCAD или Inventor из .NET-приложения и хотите найти какие свойства и методы есть у объектов, то почитайте прекрасную статью (на английском), которая показывает, как это следует делать. Этот метод работает даже если ваш проект не ссылается на соответствующую библиотеку или сборку и вы используете позднее связывание:

Получение информации о типе имеющих IDispatch-интерфейс COM-объектов из управляемого кода

Опубликовано 23.12.2014     Читать далее >>>
19/12/2014

Просмотр чертежа в WPF палитре

Как мы уже знаем пример BlockView.Net демонстрирует использование Графической системы для просмотра чертежа на форме Windows. Этот пример для версии AutoCAD 2015 доступен здесь: http://adn-cis.org/izmeneniya-v-grafike-v-autocad-2015.html
Опубликовано 19.12.2014     Читать далее >>>
22/11/2014

Связывание клавиши помощи F1 с кнопкой на Ленте

Вопрос:

Я хотел бы, чтобы показывался мой chm-файл при нажатии клавиши F1 когда в подсказке кнопки на ленте появляется сообщение "Нажмите F1 для получения дополнительной справки.". Можно посмотреть пример как это сделать?

Ответ:

Свойства "HelpSource" и "HelpTopic" класса RibbonItem должны быть установлены для того, чтобы AutoCAD показал ваш chm-файл. "HelpSource" - это Uri к chm-файлу, а "HelpTopic" – это идентификатор темы (topic id) страницы в chm-файле.

Ниже кусок кода. Вы должны изменить строки "HelpSource" и "HelpTopic" для указания chm-файла у вас в системе и идентификатора темы в нём. Так же не забудьте подключить "AdWindows.dll" к своему проекту.

Опубликовано 22.11.2014     Читать далее >>>
21/11/2014

Как получить список всех масштабов аннотаций средствами .NET API?Автор: Александр Ривилис

Следующий код на C# показывает как это можно сделать:

Опубликовано 21.11.2014     Читать далее >>>
21/11/2014

Использование .NET API для добавления масштаба аннотаций в чертеж

Следующий код на C# показывает последовательность действий для добавления нового масштаба в список масштабов:
Опубликовано 21.11.2014     Читать далее >>>
19/11/2014

Как управлять Параметрами скрытых сообщений в .NETАвтор: Александр Ривилис

Вопрос:

В AutoCAD имеется ряд диалоговых окон, которые имеют метки, предотвращающие повторный вызов этих диалоговых окон в дальнейшем.

Например, диалоговое окно «Ссылки – необработанные файлы ссылок»:

В команде Настройка (OPTIONS) можно управлять видимостью этих диалоговых окон:

А можно ли управлять появлением этих диалоговых окон из AutoCAD .NET API?

Опубликовано 19.11.2014     Читать далее >>>
17/11/2014

Как добавить к Размеру Метку и/или Процент контроля (DIMINSPECT)?Автор: Александр Ривилис

Как добавить к Размеру Метку и/или Процент контроля (DIMINSPECT)?

Вопрос:

Необходимо к размеру в чертеже добавить Метку контроля средствами .NET API. Я прочитал статью Киана Уомсли : http://through-the-interface.typepad.com/through_the_interface/2008/09/more-quiet-comm.html В ней используется командный метод, но он не позволяет присвоить только Метку контроля без Процента контроля.

Ответ:

Есть несколько методов:

Опубликовано 17.11.2014     Читать далее >>>
10/11/2014

Пример использования Автозагрузки для запуска команды в AutoCAD

Инициализация AutoCAD UI из вашего метода .NET Initialize() не рекомендуется. Причина в том, что ваш .NET DLL может быть загружен при старте AutoCAD, и в этот момент определенным подсистемы AutoCAD (например, Лента, Палитры, COM и т.д.) еще не полностью инициализированы и обращение к ним может быть безуспешным.
Опубликовано 10.11.2014     Читать далее >>>
04/11/2014

Определение наличия имени приложения в расширенных данных примитива

Вы можете использовать метод GetXDataForApplication класса DBobject для определения наличия имени приложения в расширенных данных (Xdata). Следующий код показывает есть ли расширенные данные приложения "ADSK" у примитива или нет:

Опубликовано 04.11.2014     Читать далее >>>
27/10/2014

Включение шрифтов и других файлов при использовании eTransmit API

Недавно мой коллега спросил меня о возможности найти все шрифты и другие файлы, которые включаются в комплект при использовании eTransmit API. Чтобы сконфигурировать, что именно будет сочтено в качестве зависящих компонентов когда чертеж добавляется в операцию TransmittalOperation, требуется настроить TransmittalInfo.
Опубликовано 27.10.2014     Читать далее >>>
26/10/2014

Формы внутри асинхронных команд внутри AutoCAD

Возможно вы уже попробовали очень приятную возможность асинхронного выполнения (async) в .NET 4.5

Когда внутри асинхронной команды AutoCAD 2015 мы используем формы, часто случается, что контекст синхронизации не восстанавливается корректно после закрытия формы. Это часто провоцирует непредсказуемое поведение. Например, результат работы Editor.WriteMesage не отображается в командной строке.

Простейший способ обойти эту проблему – это сохранить текущий контекст перед показом формы и восстановить его после закрытия формы.

Опубликовано 26.10.2014     Читать далее >>>
14/10/2014

Мультивыноска может привести к исключению eInvalidContext

Примитив MLeader (и эквивалентный ему AcDbMLeader in C++) поддерживает возможность использования блока в качестве текстового компонента, как описано в предыдущей статье. Один из необходимых шагов – это установка свойства BlockPosition (или setBlockPosition в C++), но это может привести к исключению eInvalidContext.
Опубликовано 14.10.2014     Читать далее >>>
10/10/2014

Как создать мультивыноску в .NET?

Ниже два примера, которые иллюстрируют создание мультивыноски (MLeader) в C#.
Опубликовано 10.10.2014     Читать далее >>>
05/10/2014

Удаление кнопок с панели быстрого доступа убивает AutoCAD

Если вы добавляете кнопки ленты на панель быстрого доступа AutoCAD (ПБД) убедитесь, что вы обеспечили уникальный ID для кнопки. Если у кнопки нет уникального ID, тогда AutoCAD может аварийно завершиться при скрытии/удалении любой другой стандартной кнопки ПБД.

Опубликовано 05.10.2014     Читать далее >>>
26/09/2014

Расчленение вложенных блоков с помощью .NET

Некоторое время назад я написал статью о том, как использовать метод Entity.Explode() чтобы получить те же результаты, что и в команде РАСЧЛЕНИ (_EXPLODE). В комментариях я получил замечание, что с этим лучше справляется метод BlockReference.ExplodeToOwnerSpace.

Мне захотелось использовать этот же метод для расчленения вложенных блоков, но так как BlockReference.ExplodeToOwnerSpace() не возвращает список созданных объектов, мне пришлось приспособить событие Database.ObjectAppended для этого и для рекурсивного вызова моей функции ExplodeBlock() со всеми вновь созданными блоками. Мы можем так же удалить оригинальный примитив (или примитивы если функция вызвана рекурсивно).

Опубликовано 26.09.2014     Читать далее >>>
24/09/2014

Как средствами AutoCAD определить расположение точки относительно контура.Автор: Александр Ривилис

Вопрос:

Есть ли встроенные средства для определения как расположена точка относительно контура в AutoCAD .NET API?

Ответ:

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

  1. С использованием BREP .NET API (Autodesk.AutoCAD.BoundaryRepresentation) – Если превратить контур в Region, то можно будет воспользоваться возможностью Brep для определения положения точки внутри Region. Для этого можно воспользоваться методом BrepEntity.GetPointContainment, который возвращает объект-перечисление PointContainment, которое может принимать одно из трёх значений: Inside (внутри), Outside (снаружи), OnBoundary (на самом контуре).
  2. C использованием класса примитива MPolygon. Обычно этот класс используется в Civil 3D, но так как он есть и в базовом AutoCAD, то мы можем им воспользоваться.

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

Опубликовано 24.09.2014     Читать далее >>>