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

12/08/2013

Атрибуты, взаимосвязь между элементами и другие вопросы

Быстренько рассмотрим следующие темы в статье:

  • Настройки прозрачности вида
  • Определение массы элемента
  • Взаимосвязь компонентов составной стены
  • Определение цвета элемента
  • Ошибка при попытке получить BoundingBox

Настройки прозрачности вида

Вопрос: В диалоге Параметры отображения графики есть параметр Прозрачность.

 

Как можно изменить или получить значение прозрачности программно?

Ответ: Ответ есть в разделе “Revit 2014 API. Что нового”:

Параметры отображение графики.

Новые методы для чтения и записи параметров отображения графики:

  • View.GetBackground()
  • View.SetBackground()
  • View.ShadowIntensity
  • View.SunlightIntensity
  • View.SurfaceTransparency
  • View.ShowEdges
  • View.ShowSilhouettes
  • View.SilhouetteLineStyleId

Вам нужно свойство View.SurfaceTransparency для работы с прозрачностью. 0 – непрозрачный, 100 – полностью прозрачные элементы.

Определение массы элемента

Вопрос: Мне нужно получить массу различных элементов и у меня возникают трудности с доступом к информации геометрии элементов.

Я использую похожий метод как в примере ObjectViewer SDK. В проекте с которым я работаю обрабатываются только геометрия крыши и перекрытия.

Что мне нужно сделать чтобы получить также геометрию рамы окна?

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

Ответ: Вы можете получить геометрию любого элемента, извлечь из геометрии Solid (3х-мерное тело) и затем получить объем с помощью свойства Solid.Volume. Этот способ должен работать как для окон так и для крыш и перекрытий.

В некоторых случаях, вам придется пробежаться по всем вложенным элементам объекта Solid. Это продемонстрировано во многих примерах, включая OBJ viewer. Однако возможно для вашей задачи гораздо проще было бы использовать методы Element.GetMaterialIds(), Element.GetMaterialArea()  и Element.GetMaterialVolume() для определения массы различных материалов для конкретного элемента. Ознакомьтесь со статьей material quantity extraction (на англ.) а также с примером MaterialQuantities SDK чтобы понять, как использовать эти методы.

Взаимосвязь компонентов составной стены

Вопрос: Как мне определить основные типоразмеры составной стены? Я пытался с помощью RevitLookup что нибудь типа «структуры», но ничего похожего не нашел.

Ответ: Рад что вы пользуетесь REvitLookup. Этот инструмент должен быть у каждого разработчика и также может оказаться полезным для конечных пользователей.

Однако, на текущий момент Revit API не содержит каких-либо прямых методов для определения связей между составной стеной и ее компонентами. Тем не менее есть способ обойти это ограничение и получить требуемую информацию.

Первой способ определения структуры составной стены описан в статье curtain wall geometry (на англ.), где используются недокументированные возможности.

Более надежный способ – удалить составную стену и посмотреть какие связанные с ней стены удалятся.  Использвание такого метода описывается в статье  Анализ взаимоотношения между объектами (на англ.)

Определение цвета элемента

Вопрос: Мне нужно изменить цвет определенного экземпляра семейства. Как это можно сделать?

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

 

Ошибка при попытке получить BoundingBox

Вопрос: В своем приложении я использую вот такие три строчки кода для определения границы (Bounding Box) элемента Панель своем проекте:

Код - C#: [Выделить]
  1.  
  2.             View view = doc.GetElement(
  3.                  new ElementId(231354)) as View;
  4.  
  5.             Panel panel = doc.GetElement(
  6.               new ElementId(4944423)) as Panel;
  7.  
  8.             var bb = panel.get_BoundingBox(view);
 

 

Однако, даже при выполнение такого простого кода я получаю ошибку:

 

Что я делаю не так?

Ответ: Вы пытаетесь получить границы элемента на виде типа Шаблон. Это можно увидеть с помощью RevitLokup.

 

Обратите внимание на значение свойство IsTemplate. Элементы не имеют геометрии на шаблонах.

Проверяйте значение свойства IsTemplate для вида на котором вы пытаетесь получить геометрию элемента. Если результат равен true, то получить геометрию элемента на этом виде невозможно.

 

Источник: http://thebuildingcoder.typepad.com/blog/2013/08/attributes-relationships-and-other-stuff.html

Обсуждениеhttp://adn-cis.org/forum/index.php?topic=149.0

 

Опубликовано 12.08.2013
Отредактировано 12.08.2013 в 22:18:15