Revit:为什么我的墙BoundaryBox与它的LocationCurve不一致?

时间:2019-04-30 12:48:01

标签: revit-api revit

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

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

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

Overlapping wall

现在,这可能是一个编程错误,但是我在创建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 Min Max 属性,我可以看到它从17.388开始。并上升到28.871391076。这就是插图所显示的。.

此外,我在几何体中的其他一些墙壁上使用了这种分割方法,对此我没有任何问题,而且我确实获得了3幅很好的连续墙壁!

因此,我的问题是:我是否在某个地方丢失了某个属性,该属性会以某种方式从其“位置曲线”中“移动”墙壁BoundingBox?那将以某种方式解释这种行为? 我还能如何解释和纠正这个问题?

非常感谢! 阿诺。

3 个答案:

答案 0 :(得分:1)

也许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。我希望这个解释很清楚。图片会说出一千多个字...对于使用字代替的愚蠢尝试感到抱歉。

答案 1 :(得分:1)

通过将两个墙的location line JoinType property设置为JoinType.None,可以防止墙3与墙1接合。

答案 2 :(得分:0)

编辑:使用WallUtils.DisallowWallJoinAtEnd函数可以达到目的!

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

Walls not overlapping or auto-expanding

那没关系。 但这不能解决问题。我没有看到任何方法来防止BoundingBox的“自动扩展”,也没有控制它寻找另​​一面墙的最大距离的方法。

我还尝试过先强加3种不同的类型,然后将壁3的壁类型更改为与壁1相同的壁类型:当它们的壁类型不同时:不扩展。当我更改墙的类型时,即使墙已经创建,它也会扩展。

最后,真正奇怪的行为是对于某些墙壁,我根本没有这个问题。这是:与我遇到问题时一样的3个相同类型的墙,其中相同的长度为20厘米,是第2壁。最后一件事确实无法解释。

相关问题