我需要找出通过选定墙的参考平面及其名称的数量。我可以获得特定文档的所有参考平面,但我该如何为特定的墙做这个。
你的帮助将不胜感激! 感谢。
答案 0 :(得分:1)
我首先尝试内置的ElementIntersectFilter
。文档有一个很好的例子,替换" FamilyInstance
"用" referencePlane
"那可能会这样做。
http://www.revitapidocs.com/2017/19276b94-fa39-64bb-bfb8-c16967c83485.htm
如果这不起作用,您需要提取墙的实体并与参考平面相交。
答案 1 :(得分:0)
如果ElementIntersectFilter
不能满足您的需求,您必须提取墙和参考平面的几何图形并直接使用它们。
将参考平面与墙体实体相交可以起作用,但如果我正确理解您的问题,可以使用更简单的答案。我假设你只想要与ref平面的绿线相交的墙,而不是将参考平面对象视为无限几何平面。在下面的屏幕截图中,我假设您要查找复选标记,但不是红色X。 我也假设您将此视为计划练习,而不是专门设置参考平面的垂直范围(这仅仅基于我看到大多数人使用Revit的方式)。以下函数将单个墙和ref平面列表(您提到已经拥有所有ref平面的集合)作为输入,并将返回与墙相交的ref平面列表。
public static List<ReferencePlane> getRefPlanesIntersectingWall( Wall wal, List<ReferencePlane> refPlanesIn)
{
//simplify this to a 2D problem, using the location curve of the wall
List<ReferencePlane> refPlanesOut = new List<ReferencePlane>();
LocationCurve wallLocation = wal.Location as LocationCurve;
Curve wallCurve = wallLocation.Curve;
Double wallZ = wallLocation.Curve.GetEndPoint(0).Z;
foreach (ReferencePlane rp in refPlanesIn)
{
XYZ startPt = new XYZ(rp.BubbleEnd.X, rp.BubbleEnd.Y, wallZ);
XYZ endPt = new XYZ(rp.FreeEnd.X, rp.FreeEnd.Y, wallZ);
Line rpLine = Line.CreateBound(startPt, endPt);
SetComparisonResult test = wallCurve.Intersect(rpLine);
if (test == SetComparisonResult.Overlap ||
test == SetComparisonResult.Subset ||
test == SetComparisonResult.Superset ||
test == SetComparisonResult.Equal )
{
refPlanesOut.Add(rp);
}
}
return refPlanesOut;
}