簡體   English   中英

IfcOpenShell 從 IfcWall 中查找坐標

[英]IfcOpenShell find coordinates from IfcWall

我想從 IFC model 中找到兩點之間的長度。這是 IFC model 中的 IfcWall 示例。

#26322= IFCWALL('3vpWoB_K1EZ8RCaYmNGsB2',#42,'Basiswand:Bestand 08.0:162343',$,'Basiswand:Bestand 08.0:161894',#25861,#26318,'162343',.NOTDEFINED.); 
#26325= IFCPROPERTYSET('3vpWoB_K1EZ8RCcT4NGsB2',#42,'Pset_WallCommon',$,(#787,#788,#848,#25851));
#26327= IFCRELDEFINESBYPROPERTIES('0rDc6OePf5NBrNT2GfJ3hm',#42,$,$,(#26322),#26325);
#26331= IFCCARTESIANPOINT((12.5832056790716,5.54096330043285,0.));
#26333= IFCAXIS2PLACEMENT3D(#26331,#20,#18);
#26334= IFCLOCALPLACEMENT(#140,#26333);
#26335= IFCCARTESIANPOINT((4.24,0.));
#26337= IFCPOLYLINE((#10,#26335));
#26339= IFCSHAPEREPRESENTATION(#102,'Axis','Curve2D',(#26337));

IFCPOLYLINE 有兩個點(#10=0,0 和 #26335=4.24,0。)我想找出這兩個點之間的距離。

其他牆有一定的長度,但這一面沒有。 以下是其他牆壁的示例:

#730= IFCWALL('1ZwJH$85D3YQG5AK5ER10a',#42,'Basiswand:Bestand 50.0:148105',$,'Basiswand:Bestand 50.0:150882',#701,#726,'148105',.NOTDEFINED.);
#745= IFCQUANTITYLENGTH('Height',$,$,4.99,$);
#746= IFCQUANTITYLENGTH('Length',$,$,16.675,$);

這是我的代碼示例:

import ifcopenshell
walls = ifc_file.by_type('IfcWall')
print(len(walls))

import math

p1 = [0.,0.]
p2 = [16.765,0.]
distance = math.sqrt( ((p1[0]-p2[0])**2)+((p1[1]-p2[1])**2) )
print(distance)

要應用數學公式,我必須從牆上提取 p1 和 p2 的坐標。 我不會在這里走得更遠。

先感謝您!

您需要通過 object 圖表,從牆上開始:

#26322 IfcWall.Representation (attribute 7) references #26318
#26318 is not included in your snippet, but likely an IfcProductDefinitionShape

從那里您可能會找到另一條類似於您在片段中包含的折線。 請參閱下文了解如何到達那里。 可能還有另一面牆,由折線 #25337 表示。 從那里開始,您到達折線如下:

#XXXXX IfcWall.Representation (attribute 7) references #YYYYY likely IfcProductDefinitionShape
#YYYYY IfcProductDefinitionShape.Representations (attribute 4) likely references #26339 (the 2D representation) and a 3D representation
#26339 IfcShapeRepresentation.Items (attribute 4) references #26337
#25337 IfcPolyline.Points (attribute 1) references #10 and #26335

您可以研究IFC 規范以了解實體如何通過其屬性連接以及如何調用屬性。

對於這種特殊情況,跟蹤 object 圖可能很容易。 困難的部分是具有多種類型的模式的語義豐富性,這些類型共享一些屬性並在其他方面有所不同,這是通過 inheritance 組織的。 例如,IfcShapeRepresentation 實體的 Item 屬性引用類型為 IfcRepresentationItem 的實體,它有許多子類型,IfcPolyline 只是其中之一。 您必須檢查遇到的類型,並且僅當它是 IfcPolyline 時,您的計算方法才適用 - 例如,如果它是 IfcBSplineCurve,則不適用。

IfcOpenShell 等庫投入了大量工作來覆蓋所有或至少大部分模式,尤其是幾何,如果我沒記錯的話,還可以計算長度、面積、體積等度量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM