• xBIM 格式之间转换


         目录

         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.");
                    }
                }
    
            }
        }
    }
  • 相关阅读:
    仅允许修改输入框括号中内容
    Wget/httrack 爬取整站资源
    413 Request Entity Too Large 问题及方案详细分析
    python 安装 tensorflowjs
    WiFi TIM DTIM
    免费 CDN 玩法 —— 文件一键上传到 NPM
    函数式编程 —— 将 JS 方法函数化
    uniapp 复制操作
    splice() 方法用于添加或删除数组中的元素
    uni更改顶部标题
  • 原文地址:https://www.cnblogs.com/w2011/p/8418441.html
Copyright © 2020-2023  润新知