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

25/04/2015

Как задать виды для печати с помощью Revit API

Если вы хотим изменить настройки печати в Revit, то первое, с чего мы должны начать – это свойство Document.PrintManager. PrintManager.ViewSheetSetting используется для установки видов, которые вы хотите напечатать.

Однако, когда вы обращаетесь к методу PrintManager.ViewSheetSetting вы можете получить вот такое исключение: This property is only available when user choose Select of Print Range (Свойство доступно только когда пользователь выбрал ‘выбранные виды’ в настройках печати.)

Опубликовано 25.04.2015     Читать далее >>>
24/04/2015

Использование метода FindInserts для поиска всех проемов в стене

Недавно я представил новый пример использования класса SpatialElementGeometryCalculator для вычисления полезной и общей площади стен.

В статье обсуждалось несколько интересных моментов:

  • Использование класса SpatialElementGeometryCalculator
  • Портирование надстройки, написанной на VB.NET в C#
  • Использование временной транзакции для решения задач
  • Использование FilteredElementCollector для поиска всех проемов в стене
  • Оптимизация поиска при использовании FilteredElementCollector
Опубликовано 24.04.2015     Читать далее >>>
12/04/2015

Не добавляйте и не удаляйте элементы при перечислении коллекций элементов

Пользователь столкнулся с проблемой, что при загрузке семейства через API, Revit закрывается.

Вот его код:

Код - C#: [Выделить]
 UIApplication rvtApp = commandData.Application;

UIDocument rvtDoc = rvtApp.ActiveUIDocument;

 

FilteredElementCollector collector =

    new FilteredElementCollector(rvtDoc.Document)

    .OfClass(typeof(Family));

FilteredElementIterator itr =

    collector.GetElementIterator();

while (itr.MoveNext())

{

    Element elem = (Element)itr.Current;

    ReloadFamily(rvtApp, rvtDoc, elem);

}

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

Вычисление общей и полезной площади пверхности стен

Вопрос: мне нужно определить площадь, занимаемая окнами и дверями в стене. Я думал это можно легко сделать просто, взяв значение параметра HOST_AREA_COMPUTED, так как при первоначальном тестировании значение параметра показывало верную цифру. Но, при дальнейшем тестирование это оказалось не так.

В тестовом файле есть стена с двумя дверями. Внешне они выглядят одинаково, но для одной площадь равна 4м2, для другой – 2м2.

Почему так? Что же на самом деле возвращает параметр HOST_AREA_COMPUTED? Какой самый правильный способ определения площади окон и дверей в стене?

Опубликовано 11.04.2015     Читать далее >>>
10/04/2015

Надстройка для работы с Тонкими линиями с помощью UI Automation

Разработчика надстроек для Revit давно уже просят добавить методы для включения отключения тонких линий.

К счастью, в Revit 2015 R2 это наконец-то стало возможным.

Опубликовано 10.04.2015     Читать далее >>>
31/03/2015

Изменение размера области подрезки

Наблюдается странное поведение при изменении размера области подрезки.

Что я делал. Сначала я создал вид, затем установил область подрезки:

Код - C#: [Выделить]
 ViewFamilyType vTypeElev = Class1.getviewfamilytypes(

    ViewFamily.FloorPlan, RevitDoc).First<ViewFamilyType>();

var view = ViewPlan.Create(RevitDoc, vTypeElev.Id,

    RevitDoc.ActiveView.GenLevel.Id);

view.CropBoxActive = true;

BoundingBoxXYZ box = new BoundingBoxXYZ();

box.Min = new XYZ(100, 100, 0);

box.Max = new XYZ(200, 200, 100);

view.CropBox = box;

В этом случае все работает, как и ожидалось.

Однако, когда я только меняю область подрезки, без создания вида, то ничего не происходит.

Опубликовано 31.03.2015     Читать далее >>>
22/03/2015

Определение идентификатора или геометрических ссылок вершин кривой

Вопрос: Я пытаюсь получить вершины всех граней в Revit.

Я пробовал воспользоваться методом Edge.AsCurve().GetEndPoint(0/1), который возвращает координаты начальной и конечной точки кривой.

Но мне также хотелось бы получить уникальный идентификатор каждой вершины, таким образом, чтобы я мог исключить повторяющиеся вершины.

Опубликовано 22.03.2015     Читать далее >>>
21/03/2015

Событие по изменению выделенного элемента

Много разработчиков интересуются возможностью получить оповещения, когда меняется выделение текущего объекта в пользовательском интерфейсе.

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

Опубликовано 21.03.2015     Читать далее >>>
10/03/2015

Пример использования метода PostRequestForElementTypePlacement

Метод NewFamilyInstance предоставляет возможность программно создать новый экземпляр семейства в проекте или вложенный экземпляр семейства в редакторе семейств.

Но он совсем не поддерживает какие-либо взаимодействие с пользователем.

Небольшое взаимодействие с пользователем появилось в методе PromptForFamilyInstancePlacement, который был представлен в Revit 2011 API.

По крайней мере он показывает пред просмотр экземпляра семейства и предлагает пользователю выбрать месторасположение экземпляра.

Опубликовано 10.03.2015     Читать далее >>>
09/03/2015

Открытие файла проекта в событиях Revit API

Вопрос: Довольно понятная и четкая ошибка возникает при попытке выполнить метод Application.OpenandActivateDocument() дважды (т.е. пока нет активных документов, метод работает).

Я пробую выполнить этот метод в обработчике события Idling. Я думал я могу выполнять открытие документа в обработчике события.

Опубликовано 09.03.2015     Читать далее >>>
08/03/2015

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

Вопрос: Я пишу надстройку для Revit 2015 где мне нужно вставить семейство в проект.

Я хочу вставить семейство сразу на поверхность существующего элемента. Но, в зависимости от ситуации, я должен его вставить на различный тип поверхности. Например, на плоскую поверхность или цилиндрическую. Проблема в том, что я не могу определить тип поверхности перед тем как делать вставку.

Опубликовано 08.03.2015     Читать далее >>>
25/02/2015

Как добавить связь с файлом Revit

В Revit можно создать связь с другим файлом Revit в помощью команды Вставка > Связать с Revit.

 

А как можно сделать то же самое, но используя API?

Опубликовано 25.02.2015     Читать далее >>>
24/02/2015

Как программно извлечь список горячих клавиш

Вопрос: Подскажите как можно получить список горячих клавиш с помощью Revit API.

Опубликовано 24.02.2015     Читать далее >>>
23/02/2015

Как получить параметры доступные для использования фильтрации спецификации

В Revit мы можем создать спецификацию с определенным фильтром. Таким образом, только элементы, удовлетворяющие фильтру, будут выведены в спецификации. Например, мы можем выбрать элементы, находящиеся только на уровне 1.

Есть ли какой-либо способ, получить все параметры, по которым можно отфильтровать для заданной категории?

Опубликовано 23.02.2015     Читать далее >>>
22/02/2015

Пример использования групп транзакций

Вопрос: Я создаю приложение, в котором мне нужно:

  1. Загрузить семейство из файла
  2. Получить объект FamilyManager из редактора семейств и получить доступ к некоторым параметрам.
  3. Поместить экземпляр семейства в проект.

Загрузка семейства в проект, осуществляется в транзакции.  Затем, чтобы открыть редактор семейств, транзакция должна быть закрыта. А для размещения экземпляра изменённого семейства в проект, транзакция снова должна быть открыта.

По этой причине Revit создает два состояния, которые можно отменить с помощью операция «Отмена» - одно для каждой транзакции.

Если ли способ объединить две транзакции в одну, таким образом, чтобы была лишь одна операции отмены?

Я использую TransactionMode.Manual.

Опубликовано 22.02.2015     Читать далее >>>
21/02/2015

Автозагрузка проекта при запуске Revit

Вопрос: Мне интересно, как можно загрузить файл автоматически при загрузке Revit.

Класс UIControlledApplication является единственным параметром метода OnStartup класса, реализующего интерфейс IExternalApplication. А метод OpenAndActivateDocument есть только в классе UIApplication.

Как же вызвать метод UIApplication.OpenAndActivateDocument из метода OnStartup? Или может как-то можно решить эту проблему по-другому?

Опубликовано 21.02.2015     Читать далее >>>
15/02/2015

Сортировка и расположение кривых для создания замкнутого контура

Мне нужно определить полигон, определяющий границу мебели и оборудования для манипуляций с ним на мобильном устройстве.

Для отображения полигона с помощью SVG в браузере мобильного устройства мне определенно необходим набор последовательных кривых, образующих замкнутый контур.

Я упоминал использование класса ExtrusionAnalyzer для определения границ экземпляра семейства. При тестировании данного подхода, я обнаружил, что возвращаемые кривые не отсортированы.

Опубликовано 15.02.2015     Читать далее >>>
14/02/2015

Прерывание вставки экземпляра семейства

Вопрос: В некоторых случаях нам нужно ограничить вставку семейства при использовании метода PromptForFamilyInstancePlacement() и разершить пользователю вставить только одно семейство.

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

Как получить зеркальный объект после применения метода ElementTransformUtils.MirrorElement

Для получения симметричного объекта в Revit API есть два метода:

  • ElementTransformUtils.MirrorElement
  • ElementTransformUtils.MirrorElements

Проблема в том, что эти методы не возвращают какое-либо значение. А это значит, что на прямую мы не можем получить результат, т.е. объект, полученный в результате зеркального отображение исходного объекта.

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