<Revit二次开发>详细介绍Autodesk.Revit.DB.HostObject类的FindInserts 方法
在 在 Revit API 里,Autodesk.Revit.DB.HostObject 类代表了可以承载其他元素的主体对象,像墙体、楼板、天花板等。FindInserts 方法是 HostObject 类中一个实用的方法,用于查找插入到该主体对象中的元素。下面从方法概述、方法签名、参数说明、返回值、使用场景、示例代码以及注意事项等方面进行详细介绍。
一、方法概述
FindInserts 方法主要用于在一个主体对象(如墙体)中查找所有插入的元素,例如门窗、洞口等。通过该方法,开发者可以方便地获取主体对象上插入元素的相关信息,进而对这些元素进行管理、分析或修改。
二、方法体
public IList<ElementId> FindInserts(
bool addRectOpenings,
bool includeShadows,
bool includeEmbeddedWalls,
bool includeSharedEmbeddedInserts
)
三、参数
● includeHidden:
○ 类型:bool。
○ 含义:指定是否包含隐藏的插入元素。若设置为 true,则会返回隐藏的插入元素;若为 false,则只返回可见的插入元素。
● includeNonVisible:
○ 类型:bool。
○ 含义:指定是否包含不可见的插入元素。这里的不可见元素可能是由于视图设置等原因导致在当前视图中不可见。若设置为 true,则会返回不可见的插入元素;若为 false,则只返回可见的插入元素。
● includeFamilyInstances:
○ 类型:bool。
○ 含义:指定是否包含族实例类型的插入元素。若设置为 true,则会返回所有族实例类型的插入元素(如门窗族实例);若为 false,则不返回族实例类型的插入元素。
● includeSharedElements:
○ 类型:bool。
○ 含义:指定是否包含共享元素类型的插入元素。若设置为 true,则会返回所有共享元素类型的插入元素;若为 false,则不返回共享元素类型的插入元素。
四、返回值
● 类型:ICollection。
● 含义:返回一个包含所有符合条件的插入元素的 ElementId 集合。通过这些 ElementId,可以进一步从文档中获取对应的元素对象,进行后续的操作。
五、应用场景
● 类型:ICollection。
● 含义:返回一个包含所有符合条件的插入元素的 ElementId 集合。通过这些 ElementId,可以进一步从文档中获取对应的元素对象,进行后续的操作。
六、代码案例
选择一堵墙,并使用FindInserts方法获取基于该墙的所有元素。
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uiDoc = uiApp.ActiveUIDocument;
Application app = uiApp.Application;
Document doc = uiDoc.Document;
// 开始事务,因为创建墙是一个修改文档的操作
using (Transaction trans = new Transaction(doc, "Create Wall"))
{
trans.Start();
Reference reference = uiDoc.Selection.PickObject(ObjectType.Element, "请选择宿主元素");
HostObject hostObject=doc.GetElement(reference) as HostObject;
List<ElementId> ids = hostObject.FindInserts(true, true, true, true).ToList();
StringBuilder sb = new StringBuilder();
sb.AppendLine($"共发现对象:{ids.Count}个;");
foreach (ElementId id in ids)
{
Element el = doc.GetElement(id);
sb.AppendLine($"对象:{el.GetType().ToString()};{el.Id}");
}
TaskDialog.Show("结果", sb.ToString());
trans.Commit();
}
return Result.Succeeded;
}
五、结论
通过以上实验深入了解了FindInserts方法的用法,为后续开发提供了参考。
注意事项
● 元素 ID 的有效性:确保使用的主体对象 ElementId 是有效的,否则无法获取到主体对象,会导致方法调用失败。
● 性能问题:如果主体对象上插入的元素较多,调用 FindInserts 方法可能会影响性能。在实际应用中,可根据需要合理设置参数,减少不必要的元素查找。
● 参数设置:根据具体需求准确设置 FindInserts 方法的参数,以获取符合要求的插入元素。例如,若只关注可见的族实例类型的插入元素,可将 includeHidden 和 includeNonVisible 设置为 false,将 includeFamilyInstances 设置为 true,将 includeSharedElements 设置为 false