我有一个功能,我希望得到属于某个类别,类型和家庭的所有元素。我将他们的名字作为字符串,并希望获得符合标准的实际元素。
我尝试了以下几点:
internal static void getElemetWithId(Document doc,string catName, string famname, string symbname)
{
Category category=null;
foreach (var cat in doc.Settings.Categories){
if (((Category)cat).Name.Contains(catName))
{
category = (Category)cat;
break;
}
}
HashSet<Element> elements = new HashSet<Element>();
elements.AddRange(GetFilteredElementCollector(doc, new ElementRetrievalOptions())
.OfCategory(category).WhereElementIsElementType(famname).ToElements());
}
但是这不起作用,因为OfCategory不接受Category作为参数(它确实适用于builtInCategory)并且WhereElementIsElementType似乎不接受任何参数。
这个函数的可能输入是document, "Doors" , "M_Single-Flush" , "0915 x 2134mm"
您应该查看Revit SDK,http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=16777469,并查看一些示例代码。您还可以查看Jeremy的页面:http://thebuildingcoder.typepad.com和Harry的页面:https://boostyourbim.wordpress.com以获取更多示例代码。
您应该使用FilteredElementCollector类来查找您要查找的所有元素:
FilteredElementCollector allInstances = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).Where(q => q.Symbol.Name == symbname);
您可以使用FilteredElementCollector类获取属于特定类别的所有元素。在查询中传递特定系列名称的名称,您将获得所需系列和类型的所有元素。我最近在Revit 2019上尝试了这个。
List<Element> listOfElements = new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol)).WhereElementIsElementType()
.ToElements().Where(e => e.Name == elementName).ToList<Element>();
ElementId symbolId = listOfElements[0].Id;
FamilyInstanceFilter familyInstanceFilter= new FamilyInstanceFilter(doc, symbolId);
IList<Element> familyInstances = new FilteredElementCollector(doc).WherePasses(familyInstanceFilter).ToElements();