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