Получение поверхности (Face) из ReferenceIntersector
Вопрос: С помощью API мне нужно получить поверхность, которая находится на пересечении заданной точки и заданного направления. Для этого я использую класс ReferenceIntersector. Вот пример моего кода:
ReferenceIntersector refIntersector= new ReferenceIntersector( id,
FindReferenceTarget.Face, selectedView );
XYZ origin = new XYZ( x, y, z );
ReferenceWithContext refContext
= refIntersector.FindNearest(
origin, new XYZ( 0, 0, -1 ) );
Reference refObject = refContext.GetReference();
А что мне делать дальше с refObject? Как мне в итоге получить ссылку на поверхность?
Использование потоков (Thread) для фоновой обработки
Вопрос:Внутри моей команды я хочу запустить фоновую задачу для синхронизации с базой данных. Как только эта задача заканчивается я хотел бы при помощи AutoCAD .NET API сделать некоторые изменения в базе данных. Однако, когда я вызываю функции AutoCAD API из этой задачи, они не работают. Например, the MdiActiveDocument равен null.
Ответ:
AutoCAD .NET API не позволяют использовать мультизадачность. Необходимо вызывать функции API из главной задачи.
Если вы находитесь в другой задаче, вам необходимо настроить вызов из главной задачи. Самый простой способ достичь этого – это создать объект System.Windows.Forms.Control в главной задаче и использовать его метод Invoke() для запуска функции которая и выполнит окончательную обработку.
Как определить присоединен ли экземпляр семейства к другому элементу
Вопрос: Есть ли какой-нибудь метод, с помощью которого можно определить, присоединен ли экземпляр семейства к чему-либо?
Я попытался с помощью RevitLookup найти что-то похожее, но так и не увидел ничего, что позволило бы это определить.
Доступ к настройкам из ленты и закрепление всплывающей панели
Вопрос: Как можно с помощью Revit API получить доступ к кнопке закрепления всплывающей панели и стрелочке, по которой открываются настройки?
Как удалить описание общего параметра
Еще один небольшой пример, демонстрирующий достоинства утилиты RevitLookup.
В данной статье покажем это на примере удаления описания общего параметра, который предоставил нам Trevor Taylor из компании ZGF.
Задача
Когда я удаляю описание общего параметра, то оно исчезает в пользовательском интерфейсе. Однако, фактически оно не удаляется из самой модели.
Лёгкое программирование под Autodesk Vault Часть 39
Получение указателя на объект по ObjectID
Иногда необходимо по ObjectID получить указатель на объект. Казалось бы, ничего особо сложного нет - в ActiveX есть метод vla-ObjectIdToObject с соответствующим параметрами. Но не все так просто, как хотелось бы.Определение типа электрооборудования
Вопрос: Как правильно определить различия между распределительным щитом и щитом осветительных и бытовых приборов с помощью API? Например, из базового примера проекта Revit MEP, как мне определить тип оборудования SWB и MDP-1?
Ассоциативный Массив и его API
В AutoCAD 2012 появился так называемый ассоциативный массив. Одновременно с этим появилось и API для его создания, редактирования и получения информации о существующем ассоциативном массиве. Например, вот так можно получить характеристики массива:
Уникальность наименования и класс NamingUtils
В Revit API полно сюрпризов. Вот один из них, которых правел нас к новому вспомогательному классу, который раньше был не замеченным.
Как удалить неиспользуемые и необработанные ссылки на данные (DataLink)?Автор: Александр Ривилис
Для необработанных ссылок на данные свойство IsValid всегда равно false. А вот с неиспользуемыми ссылками на данные несколько сложнее. Метод DataLink.GetTargets() возвращает коллекцию ObjectId объектов/примитивов, которые используют эту связь. Если таблица (Table) использовала связь, то её ObjectId содержится в коллекции DataLink.GetTargets(). Если эту таблицу стереть, то DataLink.GetTargets() не будет содержать ObjectId таблицы, а будет содержать ObjectId для объекта TableContent (это не примитив, т.е. не является наследником Entity). Таким образом, если DataLink.GetTargets() не содержит ObjectId ни одного примитива, то соответственно он не используется и его можно удалить. Следующий код это и показывает:
Как получить неиспользуемые внешние ссылки, растры и подложки?Автор: Александр Ривилис
Вопрос: Мне нужно средствами AutoCAD .NET API получить неиспользуемые внешние ссылки (XREF), растры (IMAGE), pdf-подложки (PDFUNDERLAY) и dwf-подложки (DWFUNDERLAY). Как это можно сделать?
Ответ: Для внешних ссылок достаточно найти все записи таблицы блоков (BlockTableRecord), свойство XrefStatus которых отлично от NotAnXref и для них справедливо выражение GetBlockReferenceIds(false, true).Count == 0
Для растров и подложек процедура несколько иная. Необходимо найти соответствующую таблицу (ACAD_IMAGE_DICT – для IMAGE, ACAD_PDFDEFINITIONS – для PDFUNDERLAY, ACAD_DWFDEFINITIONS – для DWFUNDERLAY) и получить из неё все ObjectId элементов. После этого достаточно воспользоваться методом Database.Purge(), чтобы получить только те ObjectId элементов, которые не используются.
Лёгкое программирование под Autodesk Vault Часть 38Автор: Дмитрий Емельянов
Свойства. ВведениеЛёгкое программирование под Autodesk Vault Часть 37Автор: Дмитрий Емельянов
Элементы. Обновление информацииЛёгкое программирование под Autodesk Vault Часть 36Автор: Дмитрий Емельянов
Элементы. СозданиеВерсия документа и количество сохранений
Александр Бушман (Alexander Buschmann) из компании IDAT Ingenieurbüro für Datenverarbeitung in der Technik GmbH прокомментировал статью о том, как отследить изменение семейства:
В Revit 2015 есть класс DocumentVersion, в котором есть свойства GUID и количество сохранений файла.
Имея эту информацию можно определить, были ли сделаны изменения или нет.
Можно сохранить эту информацию в параметр только для чтения и не надо изобретать никаких велосипедов по вычисления контрольной суммы.
Лёгкое программирование под Autodesk Vault Часть 35Автор: Дмитрий Емельянов
Элементы. Получение информацииОбработка случая дублирования типоразмеров при копировании элементов через API
При использовании метода ElementTransformUtils.CopyElements можно получить вот такое вот предупреждение:
Обработка случая дублирования типоразмеров при копировании элементов через API
Это окно может появится, когда вы копируете тип, которого не существует в проекте, но вложенный тип уже находится в этом же проекте.
Синхронизация видов Пространства Модели
Это пример кода синхронизирующий параметры двух ВЭкранов пространства Модели. Для простоты код подразумевает, что Пространство Модели уже разделено вертикально на два ВЭкрана одинаковой ширины. Если ширина ВЭкранов не одинакова код сделает её одинаковой перед синхронизацией параметров ВЭкранов.