【发布时间】:2016-10-21 06:04:27
【问题描述】:
我需要找出穿过选定墙壁的参考平面的数量及其名称。我可以获取特定文档的所有参考平面,但我该如何为特定墙执行此操作。
您的帮助将不胜感激! 谢谢。
【问题讨论】:
我需要找出穿过选定墙壁的参考平面的数量及其名称。我可以获取特定文档的所有参考平面,但我该如何为特定墙执行此操作。
您的帮助将不胜感激! 谢谢。
【问题讨论】:
如果ElementIntersectFilter 不能满足您的需求,您必须提取墙壁和参考平面的几何图形并直接使用它们。
将参考平面与墙体相交可以工作,但如果我正确理解您的问题,可以使用更简单的答案。我假设您只想要参考平面的绿线相交的墙壁,而不是将参考平面对象视为无限几何平面。在下面的屏幕截图中,我假设您想要找到复选标记,而不是红色的 X。 我还假设您将其视为计划练习,而不是专门设置参考平面的垂直范围(这只是基于我看到大多数人使用 Revit 的方式)。以下函数将单面墙和参考平面列表(您提到您已经拥有所有参考平面的集合)作为输入,并将返回与墙壁相交的参考平面列表。
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;
}
【讨论】:
我会先尝试内置的ElementIntersectFilter。该文档有一个很好的示例,将“FamilyInstance”替换为“referencePlane”就可以了。
http://www.revitapidocs.com/2017/19276b94-fa39-64bb-bfb8-c16967c83485.htm
如果这不起作用,您需要提取墙的实体并与参考平面相交。
【讨论】: