Revit:为什么我的墙 BoundaryBox 与其 LocationCurve 不重合?

Revit: Why is my wall BoundaryBox not Coinciding with its LocationCurve?

使用 Revit API,我将一堵墙分成 3 部分。为此,我创建了 3 行:

Line.CreateBound(p1, p2)
Line.CreateBound(p2, p3)
Line.CreateBound(p3, p4)

然后我用这些连续且对齐的线条创建了一堵墙。结果与预期不同,因为第三面墙与第二面墙重叠,请参见下图。

现在,这可能是一个编程错误,但我在创建 3 面墙之前打印了线条的端点,这些点以正确的顺序完全连续。印刷品看起来像这样(我删除了 Y 和 Z 坐标,它们是常数):

Now creating a new wall, from (11.811023622, ...) to (17.388451444, ...)
Now creating a new wall, from (17.388451444, ...) to (18.044619423, ...)
Now creating a new wall, from (18.044619423, ...) to (28.871391076, ...)

如果我随后使用 RevitLookup 插件检查那堵有问题的墙,我发现它的 LocationCurve 原点确实位于 (18.044619423, ...)。 但是 如果我看它是 BoundingBox MinMax属性,我可以看到它从 17.388.. 开始,一直到 28.871391076。如图所示..

此外,我在我的几何图形中的其他一些墙上使用了这种拆分方法,对此我没有任何问题,而且我确实获得了 3 个漂亮的连续墙!

因此,我的问题是:我是否在某处遗漏了一个 属性,它会以某种方式 'shift' 从其位置曲线中的墙 BoundingBox?那会以某种方式解释这种行为吗? 我还能如何解释和纠正这个问题?

非常感谢! 阿诺.

也许 Revit 会以某种方式自动连接墙,并修改它们的几何图形以便将它们连接好。例如,想象一下沿 X 轴和 Y 轴分别从 (0,0) 到 (1,0) 和 (0,1) 的两个垂直壁,壁厚为 0.2。 Revit 将连接它们。为此,它会将它们延伸到它们在原点相遇的角落。因此,它们的边界框都不会像您预期的那样以 (0,0)(或 (0,-0.1) 和 (-0.1,0))结束。相反,它们将在 (-0.1,-0.1) 处有一个公共角。因此,两个边界框的最大扩展都是 1.1 而不是 1.0。我希望这个解释很清楚。一张图片会说一千多个字...对于使用文字代替的愚蠢尝试感到抱歉。

编辑:使用 WallUtils.DisallowWallJoinAtEnd 函数成功了!

这是经过一番调查后的状态:第三面墙确实在自动扩展其 BoundaryBox,以便它连接到第一面墙。这样做,它与小墙重叠(见下图中的“墙 2 - 这堵墙的类型 与墙 1 和 3(相同类型)不同,因此是当墙 3 正在寻找连接的地方时被忽略)在它们之间(只有 20 厘米长)。 使 "Wall 2" 长一点(40 厘米)有助于并防止第三面墙自动扩展到第一面墙,这就是我在这里所做的:

那就好了。 但这并不能解决问题。我没有看到任何方式来阻止 BoundingBox 的 "auto-expansion",或者任何方式来控制它寻找另​​一面墙的最大距离。

我也试过先拼3种不同的类型,然后把墙3的墙类型改成和墙1一样的墙类型:当他们的墙类型不同时:不扩展。当我更改墙类型时,它会扩展,即使墙已经创建。

最后,真正奇怪的行为是,对于某些墙,我根本没有这个问题。这是:相同 类型的 3 面墙,当我遇到问题时,相同 墙 2 的长度为 20 厘米。最后一件事是真是莫名其妙。

您可以通过设置 location line JoinType property on both of them to JoinType.None 来防止墙 3 与墙 1 连接。