Нахождение примитивов под курсором в момент выбора примитивов
Функция обратного вызова PointMonitor в .Net позволяет получить доступ к примитивам, находящимся внутри апертуры курсора, когда пользователь наводит мышь, однако эта возможность заблокирована в момент, когда выполняется Editor.GetEntity.
Существует обходной путь для этой ситуации, который использует P/Invoke для вызова ряда методов ObjectARX. Ниже приводится пример на C#.
Получение вложенных примитивов под апертурой курсора с использованием .NET API
Некоторое время назад мне был задан вопрос членом ADN о возможности в реальном времени получать примитивы внутри апертуры курсора, когда пользователь перемещает указатель мыши. Вопрос не сложен пока нас не интересуют вложенные объекты, такие как объекты во внешних ссылках…
Получение примитивов в указанной точке к сожалению не обеспечивается управляемым (.NET) кодом, так что нам придется использовать P/Invoke, и в частности, функции acedSSGet and acedSSName с опцией “:N”. Но эти функции не возвращают вложенные примитивы, а основные как например вставку блока. Чтобы получить вложенные примитивы требуется вызов acedSSNameX, и сигнатура этого метода не слишком интуитивна для вызова P/Invoking из .Net: требуется объявление структуры “resbuf”, а также кусок небезопасного кода для того чтобы сопоставить управляемые и неуправляемые объекты.
Включение/выключение привязок
Чтобы включить или выключить привязку во время выполнения кода достаточно установить системную переменную SNAPMODE в 1 или 0.Список элементов инженерной системыАвтор: Виктор Чекалин
Инженерная система в Revit API описывается классом MEPSystem.Для того чтобы получить список всех элементов, входящих в систему, достаточно воспользоваться свойством MEPSystem.Elements.
Но, как оказалось, это свойство не всегда возвращает полный список элементов, принадлежащих системе.
Работа с профилями AutoCAD через VisualLISP
Евгений Елпанов предоставил очень интересный код, который показывает некоторые возможности работы с профилями AutoCAD через VisualLISP. Известно, что системная переменная "cprofile" имеет доступ "ReadOnly", поэтому обычными средствами профиль AutoCAD'a не сменить.AutoCAD API для ленты с использованием C++/CLI
Есть уже несколько примеров на блоге иллюстрирующих использование API Ленты с помощью .NET, но пока нет ни одного использующего C++/CLI, так что пусть этот будет первым. Кроме того такой вопрос уже задавался членами ADN в прошлом…Как получить значение BuiltInCategory для объекта класса CategoryАвтор: Виктор Чекалин
Категории в Revit API определяются двумя различными способами: классом Category и перечислением BuiltInCategory.
Если перечисление по сути представляет собой некое целочисленное значение, то класс Category содержит в себе более полную информацию, такую как наименование (локализованное название), подкатегории, а также методы для управления видимостью объектов категории на заданном виде.
Ошибка AutoLISP progn - слишком много аргументов
Как получить список канонических имен для плоттера?
Следующий код позволяет получить правильный размер листа, определенный в диалоге параметров листа.Загружаем тип линии в неактивный документ
Следующий код загружает типы линий, начинающиеся на литеру 'H' из файла acad.lin во все открытые документы. Заметим что команда должна быть зарегистрирована для контекста приложения (т.е. с флагом ACRX_CMD_SESSION).
Решение по созданию стены со смещением
Как вы знаете, при создании стены, ее осевая линия всегда располагается по середине стены. Мы это обсуждали в статье Структурные слои стены.
Совместимость макросов VBA в AutoCAD2014x64
Нередко возникают вопросы, связанные с переходом на AutoCAD 2014 x64 с более ранних версий (или с 32-разрядной версии AutoCAD 2014). Звучит это примерно так: "Мой макрос VBA использует несколько дополнительных контролов (далее OCX) или библиотек типов (TypeLibrary). Макрос прекрасно работал в AutoCAD вплоть до версии 2014. Сейчас макрос выдает ошибку, связанную именно с этими OCX/TypeLibrary"Идеология версий API PLM 360
Описывается логика смены версий и длительность поддержки устаревающих версийЛёгкое программирование под Autodesk Vault. Часть 2Автор: Дмитрий Емельянов
Что такое Vault APIСоздаем копию текущего документа в новом документе.
Вопрос:
Как можно создать точную копию текущего документа в новом документе?
Решение:
Одно из решений – сначала создание временного файла-шаблона из текущего файла, а затем создание нового чертежа из этого шаблона. Затем шаблон можно удалить. Вот шаги, которые последовательно нужно проделать:
Разделение воздуховода или трубы, имеющих врезки
Разделение на страницы в PLM 360
Рассматриваются особенности отображения запрошенной информации на страницахКак оставить видимыми элементы Ленты во время выполнения?
AutoCAD API для работы с Лентой - достаточно удобен для настройки интерфейса. Однако изменения в интерфейсе не являются постоянными. Это значит, что есть ситуации когда требуется дополнительный код для того, чтобы элементы Ленты, созданные через этот API, оставались видимыми: обычно это при переключении Рабочего пространства или когда что-то изменено в командах НПИ (_CUI) и БЫСТРНПИ (_QUICKCUI).Вот как можно оставить эти элементы видимыми и убедиться, что ваша Лента остается видимой.
Подавление команд AutoCAD
Метод acedRegCmds->removeCmd(), работает только с командами, зарегистрированными из ARX приложения. Этим способом нельзя отменить встроенные команды AutoCAD. Команда AutoCAD _UNDEFINE предназначена именно для подавления встроенных команд. Так как после команд _OPEN и/или _NEW команды переопределяются AutoCAD’ом, необходимо вызывать команду _UNDEFINE каждый раз, когда AutoCAD посылает уведомление kLoadDwgMsgвашей программе.Два различных типа соединений элементов
В Revit очень много элементов имеют взаимосвязь друг с другом.
Мы уже ранее затрагивали пару раз тему работы с объединением элементов:
- AutoJoinElements
- Joined Beam Geometry Access
- Wall Joins and Geometry
- Перемещение соединений воздуховодов