原創作者:flowell,轉載請標明出處:https://www.cnblogs.com/flowell/p/10839433.html
在IFC標准中,由IfcRepresentationMap支持圖元的復用。IfcRepresentationMap包含一個或多個IfcMappedItem,IfcShapeRepresentation可以應用笛卡爾變換算子將自身(ShapeRepresentation)變換到另一個本地坐標系,這個變換算子包含在IfcMappedItem中。IfcMappedItem的坐標笛卡爾變換被限制為平移,旋轉,鏡像和縮放,對應的矩陣必須是TRS矩陣。因此,通過包含IfcRepresentationMap屬性便可以達到將同樣的ShapeRepresentation應用在不同的IfcProduct中。
圖1 通過IfcRepresentationMap復用ShapeRepresentation
如下圖,在同一個模型中的高亮的兩把椅子。兩把椅子的外形一致,材質紋理和大小在視覺上都是一致的,它們位於坐標系中不同的坐標。根據這個Representation實例的EntityLabel推斷,這兩把椅子分別屬於不同的ShapeRepresentation。
圖2 IFC模型中的一把椅子
圖3 IFC模型中的另一把椅子
追蹤兩把椅子的ShapeRepresentation,可以發現最終抵達了同一個元素。這個元素的Type是IfcShapeRepresentation,說明這也是一個ShapeRepresentation,但是在圖中並沒有顯示出來。該ShapeRepresentation擁有的是真實的圖形數據,可以看到列表中包含了8個圖元信息,這些信息真是地構成了一張完整的椅子。而這個ShapeRepresentation擁有PresentationMap屬性,該屬性擁有多個IfcMappedItem,這些IfcMappedItem又正好對應着上圖椅子里的IfcShapeRepresentation所引用的IfcMappedItem。總而言之,一個IfcMappedItem便對應着一個坐標變換,通過坐標變換從而使得同樣的椅子出現在空間中的不同坐標中。
圖4 構件共用的IfcShapeRepresentation
因為坐標轉換已經包含在IFC文件中了,對於構件而言,其本地坐標系到世界坐系的轉換坐標已經包含在構件本身的屬性里,所以本章的工作無需再次計算變換的矩陣,只要讀取構件的變換矩陣並保存即可。
基於以上理論依據,本文提出以下輕量化算法:
算法流程:
圖5 模型輕量化的算法流程