Revit:为什么我的墙BoundaryBox与其LocationCurve不相符?

问题描述 投票:0回答:3

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

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

然后我用这些线创建一个墙,它们是连续的并且是对齐的。结果与预期不符,因为第三个墙与第二个墙重叠,请参见下图。

Overlapping wall

现在,这可能是一个编程错误,但我在创建3个墙之前打印了Lines的终点,这些点按照正确的顺序完全连续。打印看起来像这样(我删除了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 Addin检查有问题的墙,我看到它的LocationCurve的起源确实位于(18.044619423,...)。但是如果我看一下它的BoundingBox Min和Max属性,我可以看到它从17.388开始......然后上升到28.871391076。这就是插图所示......

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

因此,我的问题是:我是否错过了某个地方的某个属性,它会以某种方式将墙壁BoundingBox从其位置曲线“移位”?这会以某种方式解释这种行为吗?我怎么解释和纠正这个?

非常感谢!阿尔诺。

revit-api revit
3个回答
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
投票

您可以通过将墙壁3上的location line JoinType property设置为JoinType.None来防止墙壁3与墙壁1连接。


0
投票

编辑:使用WallUtils.DisallowWallJoinAtEnd函数做了伎俩!

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

Walls not overlapping or auto-expanding

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.