2010-09-10 1 views
0

Я хочу перебрать все оборудование на чертеже и получить название оборудования.Revit MEP 2011 C# повторить все оборудование

Вот что у меня есть:

UIApplication uiapp = commandData.Application; 
UIDocument uidoc = uiapp.ActiveUIDocument; 
Application app = uiapp.Application; 
Document doc = uidoc.Document; 

// get all PanelScheduleView instances in the Revit document. 
FilteredElementCollector fec = new FilteredElementCollector(doc); 
ElementClassFilter EquipmentViewsAreWanted = 
    new ElementClassFilter(typeof(ElectricalEquipment)); 
fec.WherePasses(EquipmentViewsAreWanted); 
List<Element> eViews = fec.ToElements() as List<Element>; 

StringBuilder Disp = new StringBuilder(); 

foreach (ElectricalEquipment element in eViews) 
{ 
    Disp.Append("\n" + element.); 
} 

System.Windows.Forms.MessageBox.Show(Disp.ToString()); 

Я получаю следующее сообщение об ошибке в петле foreach:

Не удается преобразовать тип 'Autodesk.Revit.DB.Element' в «Autodesk. Revit.DB.Electrical.ElectricalOquipment '

Любые предложения?

ответ

0

eViews - это список Element, тогда как вы пытаетесь перебирать их, как если бы они были ElectricalEquipment. Если Element наследует от ElectricalEquipment или имеет явный оператор литья, вы не сможете этого сделать.

Если вы меняете цикл для:

foreach(Element element in eViews) 
{ 
    Disp.Append("\n" + element); 
} 

Он будет компилировать, однако он не может получить требуемый результат.

+0

Не совсем ответ, но это привело меня к тому, что я искал. В принципе, вы можете сделать Электрическое оборудование в массив с fec.toArray() вместо toElements; затем итерации. Спасибо за помощь. – CornCat

 Смежные вопросы

  • Нет связанных вопросов^_^