目錄
STEP 簡要介紹
STEP簡要介紹:自動化系統和集成-產品數據表示和交換。代表“產品模型數據交換標准”。可以代表計算機輔助設計(CAD)和相關信息中得3D對象。STEP 可適用於在CAD,計算機輔助制造,計算機輔助工程,產品數據管理/企業數據建模和其他系統之間交換數據。2014年12月,ISO發布了第一版新的主要應用協議AP242基於模型的3d工程,它們以向上兼容的方式組合和替換了以前的以下AP:
- AP 201,明確的繪圖。與產品相關的簡單2D繪圖幾何。沒有關聯,沒有組裝層次。
- AP 202,聯想繪圖。有關聯的2D / 3D繪圖,但沒有產品結構。
- AP 203,機械零件和組件的配置控制3D設計。
- AP 204,使用邊界表示的機械設計
- AP 214,汽車機械設計過程的核心數據
此外AP242版本1包含擴展和重大更新
- 幾何尺寸和公差
- 運動學
- 鑲嵌
xBIM 使用的是最新的STEP ISO 10303-21 簡稱 STEP21.
EXPRESS 簡要介紹
EXPRESS 是一個標准的數據建模語言和產品數據。一個簡單EXPRESS 數據模型如圖1所示
圖 1 EXPRESS-G圖
EXPRESS 代碼如下所示:
SCHEMA家族;
ENTITY人
(ONEOF(男,女))的抽象超模;
名字:STRING;
母親:可選女性;
父親:可選男性;
END_ENTITY;
ENTITY女性
(人)的子類型;
END_ENTITY;
ENTITY男性
(Person)的SUBTYPE;
END_ENTITY;
END_SCHEMA;
它包含一個超類型實體人與兩個亞型男性和女性。由於Person被聲明為ABSTRACT(抽象),因此只有(ONEOF)亞型男性或女性可以存在。每個人的事件都有一個強制性的名字屬性,並且可以選擇屬性母親和父親。對於某些實體類型的屬性,有一種固定的閱讀方式:
- 一個女人可以扮演一個人的母親的角色
- 一個男人可以扮演一個人的父親的角色
xBIM Tookit 實現100%的 IFC2 x 3和 IFC4模式,並且支持所有的物理表示。STEP21 實在EXPRESS定義的數據的物理表示。這是IFC的原始定義。非常適合產品建模。從這個簡單的例子可能不是太明顯。但EXPRESS比任何XSD更有意識。更容易閱讀。EXPRESS定義如下:
ENTITY IfcAppliedValue SUPERTYPE OF (ONEOF (IfcCostValue)); Name : OPTIONAL IfcLabel; Description : OPTIONAL IfcText; AppliedValue : OPTIONAL IfcAppliedValueSelect; UnitBasis : OPTIONAL IfcMeasureWithUnit; ApplicableDate : OPTIONAL IfcDate; FixedUntilDate : OPTIONAL IfcDate; Category : OPTIONAL IfcLabel; Condition : OPTIONAL IfcLabel; ArithmeticOperator : OPTIONAL IfcArithmeticOperatorEnum; Components : OPTIONAL LIST [1:?] OF IfcAppliedValue; INVERSE HasExternalReference : SET [0:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects; END_ENTITY;
STEP表示也非常緊湊和有意識。一旦習慣了它,也很容易閱讀和導航。
ISO-10303-21; HEADER; FILE_DESCRIPTION ((''), '2;1'); FILE_NAME ('', '2016-10-27T13:14:43', (''), (''), 'Xbim File Processor version 3.2.0.0', 'Xbim version 3.2.0.0', ''); FILE_SCHEMA (('IFC4')); ENDSEC; DATA; #1=IFCPROJECT('2t0OftVsP8UBH3rtAB$yJv',#2,'Basic Creation',$,$,$,$,(#20,#23),#8); #2=IFCOWNERHISTORY(#5,#6,$,.ADDED.,$,$,$,0); #3=IFCPERSON($,'Santini Aichel','Johann Blasius',$,$,$,$,$); #4=IFCORGANIZATION($,'Independent Architecture',$,$,$); #5=IFCPERSONANDORGANIZATION(#3,#4,$); #7=IFCORGANIZATION($,'xBIM Team',$,$,$); #6=IFCAPPLICATION(#7,$,'xBIM Toolkit','xBIM'); #8=IFCUNITASSIGNMENT((#9,#10,#11,#12,#13,#14,#15,#16,#17)); #9=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.); #10=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); #11=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); #12=IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.); #13=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); #14=IFCSIUNIT(*,.MASSUNIT.,$,.GRAM.); #15=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.); #16=IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.); #17=IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.LUMEN.); #18=IFCCARTESIANPOINT((0.,0.,0.)); #19=IFCAXIS2PLACEMENT3D(#18,$,$); #20=IFCGEOMETRICREPRESENTATIONCONTEXT('Building Model','Model',3,1.E-05,#19,$); #21=IFCCARTESIANPOINT((0.,0.)); #22=IFCAXIS2PLACEMENT2D(#21,$); #23=IFCGEOMETRICREPRESENTATIONCONTEXT('Building Plan View','Plan',2,1.E-05,#22,$); #24=IFCWALL('1YTVCro6L0$OJQL2X7wICY',#2,'The very first wall',$,$,$,$,$,$); #27=IFCPROPERTYSINGLEVALUE('Text property',$,IFCTEXT('Any arbitrary text you like'),$); #28=IFCPROPERTYSINGLEVALUE('Length property',$,IFCLENGTHMEASURE(56.),$); #29=IFCPROPERTYSINGLEVALUE('Number property',$,IFCNUMERICMEASURE(789.2),$); #30=IFCPROPERTYSINGLEVALUE('Logical property',$,IFCLOGICAL(.T.),$); #26=IFCPROPERTYSET('2u_olyjv13oRt0GvSVSxHS',#2,'Basic set of properties',$,(#27,#28,#29,#30)); #25=IFCRELDEFINESBYPROPERTIES('3I5GuvWn95PRXcxoFGfJAL',#2,$,$,(#24),#26); ENDSEC; END-ISO-10303-21;
IFC也由XSD定義,XSD從EXPRESS定義派生,其物理表示是眾所周知的XML。XSD定義不包含所有的IFC功能,如WHERE
規則和INVERSE
屬性,這些功能對於數據中的雙向導航非常方便。IFC4也做了一些反轉關系,並且在EXPRESS和XSD之間使用了不同的映射規則,因此任何為IFC2x3 XML編寫的工具對於IFC4都是完全沒有用的。使用xBIM為IFC2x3編寫的代碼非常容易升級到與IFC4兼容。
備注:由於XML數據的性質和簡單IFC模型的復雜性。XML 格式模型始終使用更多CPU 和內存資源。
XSD 定義如下所示:
<xs:element name="IfcAppliedValue" type="ifc:IfcAppliedValue" substitutionGroup="ifc:Entity" nillable="true"/> <xs:complexType name="IfcAppliedValue"> <xs:complexContent> <xs:extension base="ifc:Entity"> <xs:sequence> <xs:element name="AppliedValue" nillable="true" minOccurs="0"> <xs:complexType> <xs:group ref="ifc:IfcAppliedValueSelect"/> </xs:complexType> </xs:element> <xs:element name="UnitBasis" type="ifc:IfcMeasureWithUnit" nillable="true" minOccurs="0"/> <xs:element name="Components" nillable="true" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element ref="ifc:IfcAppliedValue" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAppliedValue"/> <xs:attribute ref="ifc:cType" fixed="list"/> <xs:attribute ref="ifc:arraySize" use="optional"/> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/> <xs:attribute name="Description" type="ifc:IfcText" use="optional"/> <xs:attribute name="ApplicableDate" type="ifc:IfcDate" use="optional"/> <xs:attribute name="FixedUntilDate" type="ifc:IfcDate" use="optional"/> <xs:attribute name="Category" type="ifc:IfcLabel" use="optional"/> <xs:attribute name="Condition" type="ifc:IfcLabel" use="optional"/> <xs:attribute name="ArithmeticOperator" type="ifc:IfcArithmeticOperatorEnum" use="optional"/> </xs:extension> </xs:complexContent> </xs:complexType>
上面的例子看起來像IFCXML格式。但是請注意,IFC4 XML 比IFC2x3XML 要少很多。但模型的文件還是比較大。
<?xml version="1.0" encoding="utf-8"?> <ifcXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ifc="http://www.buildingsmart-tech.org/ifcXML/IFC4/Add1" xsi:schemaLocation="http://www.buildingsmart-tech.org/ifcXML/IFC4/Add1 http://www.buildingsmart-tech.org/ifcXML/IFC4/Add1/IFC4_ADD1.xsd" id="uos_1" express="http://www.buildingsmart-tech.org/ifc/IFC4/Add1/IFC4_ADD1.exp" configuration="http://www.buildingsmart-tech.org/ifcXML/IFC4/Add1/IFC4_ADD1_config.xml" xmlns="http://www.buildingsmart-tech.org/ifcXML/IFC4/Add1"> <header> <time_stamp>2016-10-31T09:35:30</time_stamp> <preprocessor_version>Xbim File Processor version 4.0.0.0</preprocessor_version> <originating_system>Xbim version 4.0.0.0</originating_system> </header> <IfcProject id="i1" GlobalId="1Ozgvj0H5Bd8HqZRp$$1gG" Name="Basic Creation"> <OwnerHistory id="i2" xsi:type="IfcOwnerHistory" ChangeAction="added" CreationDate="0"> <OwningUser id="i5" xsi:type="IfcPersonAndOrganization"> <ThePerson id="i3" xsi:type="IfcPerson" FamilyName="Santini Aichel" GivenName="Johann Blasius" MiddleNames="" PrefixTitles="" SuffixTitles="" /> <TheOrganization id="i4" xsi:type="IfcOrganization" Name="Independent Architecture" /> </OwningUser> <OwningApplication id="i6" xsi:type="IfcApplication" Version="4.0" ApplicationFullName="xBIM Toolkit" ApplicationIdentifier="xBIM"> <ApplicationDeveloper id="i7" xsi:type="IfcOrganization" Name="xBIM Team" /> </OwningApplication> </OwnerHistory> <RepresentationContexts> <IfcGeometricRepresentationContext id="i20" pos="0" ContextIdentifier="Building Model" ContextType="Model" CoordinateSpaceDimension="3" Precision="1E-05"> <WorldCoordinateSystem> <IfcAxis2Placement3D id="i19"> <Location id="i18" xsi:type="IfcCartesianPoint" Coordinates="0 0 0" /> </IfcAxis2Placement3D> </WorldCoordinateSystem> </IfcGeometricRepresentationContext> <IfcGeometricRepresentationContext id="i23" pos="1" ContextIdentifier="Building Plan View" ContextType="Plan" CoordinateSpaceDimension="2" Precision="1E-05"> <WorldCoordinateSystem> <IfcAxis2Placement2D id="i22"> <Location id="i21" xsi:type="IfcCartesianPoint" Coordinates="0 0" /> </IfcAxis2Placement2D> </WorldCoordinateSystem> </IfcGeometricRepresentationContext> </RepresentationContexts> <UnitsInContext id="i8" xsi:type="IfcUnitAssignment"> <Units> <IfcSIUnit id="i9" pos="0" UnitType="lengthunit" Prefix="milli" Name="metre" /> <IfcSIUnit id="i10" pos="1" UnitType="areaunit" Name="square_metre" /> <IfcSIUnit id="i11" pos="2" UnitType="volumeunit" Name="cubic_metre" /> <IfcSIUnit id="i12" pos="3" UnitType="solidangleunit" Name="steradian" /> <IfcSIUnit id="i13" pos="4" UnitType="planeangleunit" Name="radian" /> <IfcSIUnit id="i14" pos="5" UnitType="massunit" Name="gram" /> <IfcSIUnit id="i15" pos="6" UnitType="timeunit" Name="second" /> <IfcSIUnit id="i16" pos="7" UnitType="thermodynamictemperatureunit" Name="degree_celsius" /> <IfcSIUnit id="i17" pos="8" UnitType="luminousintensityunit" Name="lumen" /> </Units> </UnitsInContext> </IfcProject> <IfcWall id="i24" GlobalId="0CYq5lt8fES8dUWMOwav6U" Name="The very first wall"> <OwnerHistory ref="i2" xsi:type="IfcOwnerHistory" xsi:nil="true" /> <IsDefinedBy> <IfcRelDefinesByProperties id="i25" pos="0" GlobalId="1Wt5lOOef8C8PngqD19enP"> <OwnerHistory ref="i2" xsi:type="IfcOwnerHistory" xsi:nil="true" /> <RelatingPropertyDefinition> <IfcPropertySet id="i26" GlobalId="0JTSUXsqP9QRLClhbnQBnS" Name="Basic set of properties"> <OwnerHistory ref="i2" xsi:type="IfcOwnerHistory" xsi:nil="true" /> <HasProperties> <IfcPropertySingleValue id="i27" pos="0" Name="Text property"> <NominalValue> <IfcText-wrapper>Any arbitrary text you like</IfcText-wrapper> </NominalValue> </IfcPropertySingleValue> <IfcPropertySingleValue id="i28" pos="1" Name="Length property"> <NominalValue> <IfcLengthMeasure-wrapper>56</IfcLengthMeasure-wrapper> </NominalValue> </IfcPropertySingleValue> <IfcPropertySingleValue id="i29" pos="2" Name="Number property"> <NominalValue> <IfcNumericMeasure-wrapper>789.2</IfcNumericMeasure-wrapper> </NominalValue> </IfcPropertySingleValue> <IfcPropertySingleValue id="i30" pos="3" Name="Logical property"> <NominalValue> <IfcLogical-wrapper>true</IfcLogical-wrapper> </NominalValue> </IfcPropertySingleValue> </HasProperties> </IfcPropertySet> </RelatingPropertyDefinition> </IfcRelDefinesByProperties> </IsDefinedBy> </IfcWall> </ifcXML>
通過以上兩種格式對比,那么我的觀點就是IFC 作為STEP21存儲和處理要好得多。但xBIM 也支持XML ,在個別的情況下需要轉換為STEP21。
using System; using Xbim.Ifc; using Xbim.Ifc4.Interfaces; namespace BasicExamples { public class StepToXmlExample { public static void Convert() { //打開 STEP21 文件 using (var stepModel = IfcStore.Open("SampleHouse.ifc")) { //保存為XML格式 stepModel.SaveAs("SampleHouse.ifcxml"); //打開XML格式 using (var xmlModel = IfcStore.Open("SampleHouse.ifcxml")) { //實體數量 var stepCount = stepModel.Instances.Count; var xmlCount = xmlModel.Instances.Count; //牆壁數量 var stepWallsCount = stepModel.Instances.CountOf<IIfcWall>(); var xmlWallsCount = xmlModel.Instances.CountOf<IIfcWall>(); Console.WriteLine($"STEP21 file has {stepCount} entities. XML file has {xmlCount} entities."); Console.WriteLine($"STEP21 file has {stepWallsCount} walls. XML file has {xmlWallsCount} walls."); } } } } }