Как получить доступ к параметрам марки (Tag) через Revit API

|  Revit API

Проверив свойство Parameters через Revit Lookup я не обнаружил параметров, которые я задавал марке через файл общих параметров. Однако марка содержит эти параметры. Где же? Читаем дальше.

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

К примеру к элементам Room привязана марка RoomTag. Поэтому, получив марку RoomTag, обращаемся к элементу Room, и получаем свойства Parameters

RoomTag tagRoom;

tagRoom.Room.Parameters;

К сожалению, я пока не смог методами Revit API какие именно параметры из этого списка использует марка. Вот полный код макроса для самостоятельного изучения:

using System;

using Autodesk.Revit.UI;

using Autodesk.Revit.DB;

using Autodesk.Revit.UI.Selection;

using Autodesk.Revit.DB.Architecture;

using System.Collections.Generic;

using System.Linq;

 

namespace GetParametersTag

{

    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]

    [Autodesk.Revit.DB.Macros.AddInId("BDF97A5D-05B8-4025-8970-E318C75C26D9")]

public partial class ThisDocument

{

public void aaa()

{

                var uidoc = Application.ActiveUIDocument;

                Selection selection = uidoc.Selection;

 

                List <ElementId> selectedIds = uidoc.Selection.GetElementIds().ToList();

                SpatialElementTag tag = uidoc.Document.GetElement(selectedIds[0]) as SpatialElementTag;

                RoomTag tagRoom = tag as RoomTag;

               ParameterSet plist = tagRoom.Room.Parameters;

                String s = String.Empty;

                foreach (Parameter p in plist){

                s+=p.Definition.Name + "\n";

                }

                

                TaskDialog.Show("revit api", s);

}

private void Module_Startup(object sender, EventArgs e)

{

 

}

 

private void Module_Shutdown(object sender, EventArgs e)

{

 

}

 

#region Revit Macros generated code

private void InternalStartup()

{

this.Startup += new System.EventHandler(Module_Startup);

this.Shutdown += new System.EventHandler(Module_Shutdown);

}

#endregion

}

}

Код демонстрирует, что все марки наследуются от класса SpatialElementTag. Для работы с RoomTag мне пришлось добавить еще и библиотеку Autodesk.Revit.DB.Architecture. Кроме того этот код не проводит никаких проверок выборок пользователем. Поэтому выберите марку помещения на плане и запустите макрос. В ответ получите список параметров помещения, к которым имеет доступ марка.

Поддержите мои бесплатные приложения для Revit. Нажмайте "Нравится"!

Узнавайте о новых расширениях для Revit подписавшись на страницу BIM3D в Твиттере!

Извините за предствленные неудобства. Всплывающее окно не побеспокоит Вас в ближайшее время!

Назад