一、STEP标准简介

  STEP,它是Standard for the Exchange of Product model data的缩写。
产品数据交换标准STEP (Product data exchange standard STEP) 指国际标准化组织(ISO)制定的系列标准ISO 10303 《产品数据的表达与交换》。这个标准的主要目的是解决制造业中计算机环境下的设计和制造(CAD/CAM)的数据交换和企业数据共享的问题。中国陆续将其制定为同名国家标准,标准号为GB/T 16656。

  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语言
  STEP标准描述方法中的一个重要的标准是ISO 10303 - 11 EXPRESS语言参考手册。EXPRESS语言是描述方法的核心,也是STEP标准的基础。该标准是一种形式化描述语言,但不是计算机编程语言。它吸收了现代编程语言的优点,主要目的是为了建立产品的数据模型,对产品的几何、拓扑、材料、管理信息等进行描述。

  EXPRESS语言为了能够描述客观事物、客观事物的特性、事物之间的关系,它引入了实体(ENTITY)和模式(SCHEMA)的概念。在EXPRESS语言中把一般的事物(或概念)抽象为实体,若干实体的集合组成模式。这意味着小的概念可组成大的概念。事物的特性在EXPRESS语言中用实体的属性(attribute)表示。实体的属性可以是简单数据类型,如实数数据类型可描述实体与数字有关或与几何有关的特性,字符串数据类型可描述实体或属性的名称或需要用文字说明的特性。当然属性还可以是聚合数据类型或布尔数据类型用以描述相对复杂的产品特性。

  描述实体之间的关系用子类(SUBTYPE)和超类(SUPERTYPE)说明的办法。一个实体可以是某一实体的子类,也可以是某个其他实体的超类。例如,人这一概念可以分为男人和女人。在EXPRESS中把“人”这个实体作为“男人实体”和“女人实体”的超类,而“男人实体”和“女人实体”作为“人实体”的子类。这种子类和超类的说明可以描述客观事物之间的复杂网状关系。EXPRESS语言还允许定义复杂的函数以描述客观事物中任何复杂的数量关系或逻辑(布尔)关系,并进行相应的几何和拓扑等描述。

  为了能够直观的表示所建立的数据模型,在标准中还规定可以用EXPRESS-G图表示实体、实体的属性,实体和属性之间的关系、实体之间的关系等等。这种表示法主要使用框图和框图之间的连线的办法,非常直观,易于理解。

EXPRESS 代码如下所示:

  1. SCHEMA家族;
  2.  
  3. ENTITY
  4. ONEOF(男,女))的抽象超模;
  5. 名字:STRING;
  6. 母亲:可选女性;
  7. 父亲:可选男性;
  8. END_ENTITY;
  9.  
  10. ENTITY女性
  11. (人)的子类型;
  12. END_ENTITY;
  13.  
  14. ENTITY男性
  15. Person)的SUBTYPE;
  16. END_ENTITY;
  17.  
  18. END_SCHEMA;

它包含一个超类型实体与两个亚型男性女性。由于Person被声明为ABSTRACT(抽象),因此只有(ONEOF)亚型男性女性可以存在。每个人的事件都有一个强制性的名字属性,并且可以选择属性母亲父亲。对于某些实体类型的属性,有一种固定的阅读方式:

  • 一个女人可以扮演一个母亲的角色
  • 一个男人可以扮演一个父亲的角色
 
三、将STEP物理文件转换为XML将STEP物理文件转换为XML
  xBIM Toolkit实现了100%的IFC2x3和IFC4模式,它支持所有物理表示。 STEP21EXPRESS中定义的数据的物理表示。它是IFC的原始定义,非常适合产品建模。从这个简单的例子中可能并不明显,但是EXPRESS比任何XSD更有意识,更容易阅读。EXPRESS定义如下所示:
  1. ENTITY IfcAppliedValue
  2. SUPERTYPE OF (ONEOF
  3. (IfcCostValue));
  4. Name : OPTIONAL IfcLabel;
  5. Description : OPTIONAL IfcText;
  6. AppliedValue : OPTIONAL IfcAppliedValueSelect;
  7. UnitBasis : OPTIONAL IfcMeasureWithUnit;
  8. ApplicableDate : OPTIONAL IfcDate;
  9. FixedUntilDate : OPTIONAL IfcDate;
  10. Category : OPTIONAL IfcLabel;
  11. Condition : OPTIONAL IfcLabel;
  12. ArithmeticOperator : OPTIONAL IfcArithmeticOperatorEnum;
  13. Components : OPTIONAL LIST [:?] OF IfcAppliedValue;
  14. INVERSE
  15. HasExternalReference : SET [:?] OF IfcExternalReferenceRelationship FOR RelatedResourceObjects;
  16. END_ENTITY;

STEP表示也非常紧凑和有意识。一旦习惯,它也易于阅读和导航。

  1. ISO--;
  2. HEADER;
  3. FILE_DESCRIPTION ((''), '2;1');
  4. FILE_NAME ('', '2016-10-27T13:14:43', (''), (''), 'Xbim File Processor version 3.2.0.0', 'Xbim version 3.2.0.0', '');
  5. FILE_SCHEMA (('IFC4'));
  6. ENDSEC;
  7. DATA;
  8. #=IFCPROJECT('2t0OftVsP8UBH3rtAB$yJv',#,'Basic Creation',$,$,$,$,(#,#),#);
  9. #=IFCOWNERHISTORY(#,#,$,.ADDED.,$,$,$,);
  10. #=IFCPERSON($,'Santini Aichel','Johann Blasius',$,$,$,$,$);
  11. #=IFCORGANIZATION($,'Independent Architecture',$,$,$);
  12. #=IFCPERSONANDORGANIZATION(#,#,$);
  13. #=IFCORGANIZATION($,'xBIM Team',$,$,$);
  14. #=IFCAPPLICATION(#,$,'xBIM Toolkit','xBIM');
  15. #=IFCUNITASSIGNMENT((#,#,#,#,#,#,#,#,#));
  16. #=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
  17. #=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
  18. #=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
  19. #=IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.);
  20. #=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
  21. #=IFCSIUNIT(*,.MASSUNIT.,$,.GRAM.);
  22. #=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
  23. #=IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.);
  24. #=IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.LUMEN.);
  25. #=IFCCARTESIANPOINT((.,.,.));
  26. #=IFCAXIS2PLACEMENT3D(#,$,$);
  27. #=IFCGEOMETRICREPRESENTATIONCONTEXT('Building Model','Model',,.E-,#,$);
  28. #=IFCCARTESIANPOINT((.,.));
  29. #=IFCAXIS2PLACEMENT2D(#,$);
  30. #=IFCGEOMETRICREPRESENTATIONCONTEXT('Building Plan View','Plan',,.E-,#,$);
  31. #=IFCWALL('1YTVCro6L0$OJQL2X7wICY',#,'The very first wall',$,$,$,$,$,$);
  32. #=IFCPROPERTYSINGLEVALUE('Text property',$,IFCTEXT('Any arbitrary text you like'),$);
  33. #=IFCPROPERTYSINGLEVALUE('Length property',$,IFCLENGTHMEASURE(.),$);
  34. #=IFCPROPERTYSINGLEVALUE('Number property',$,IFCNUMERICMEASURE(789.2),$);
  35. #=IFCPROPERTYSINGLEVALUE('Logical property',$,IFCLOGICAL(.T.),$);
  36. #=IFCPROPERTYSET('2u_olyjv13oRt0GvSVSxHS',#,'Basic set of properties',$,(#,#,#,#));
  37. #=IFCRELDEFINESBYPROPERTIES('3I5GuvWn95PRXcxoFGfJAL',#,$,$,(#),#);
  38. ENDSEC;
  39. END-ISO--;

IFC也由XSD定义,它源自EXPRESS定义,其物理表示是众所周知的XML。XSD定义不包含WHERE规则和INVERSE属性等所有IFC功能,这些功能对于数据中的双向导航非常方便。IFC4也使得一些反向关系再次反转并在EXPRESS和XSD之间使用不同的映射规则,因此为IFC2x3 XML编写的任何工具对于IFC4都是完全无用的。使用xBIM为IFC2x3编写的代码非常容易升级为IFC4兼容。

还要注意,由于XML数据的性质和复杂性甚至简单的IFC模型,XML模型总会使用更多的内存和CPU资源。

XSD定义如下所示:

  1. <xs:element name="IfcAppliedValue" type="ifc:IfcAppliedValue" substitutionGroup="ifc:Entity" nillable="true"/>
  2. <xs:complexType name="IfcAppliedValue">
  3. <xs:complexContent>
  4. <xs:extension base="ifc:Entity">
  5. <xs:sequence>
  6. <xs:element name="AppliedValue" nillable="true" minOccurs="">
  7. <xs:complexType>
  8. <xs:group ref="ifc:IfcAppliedValueSelect"/>
  9. </xs:complexType>
  10. </xs:element>
  11. <xs:element name="UnitBasis" type="ifc:IfcMeasureWithUnit" nillable="true" minOccurs=""/>
  12. <xs:element name="Components" nillable="true" minOccurs="">
  13. <xs:complexType>
  14. <xs:sequence>
  15. <xs:element ref="ifc:IfcAppliedValue" maxOccurs="unbounded"/>
  16. </xs:sequence>
  17. <xs:attribute ref="ifc:itemType" fixed="ifc:IfcAppliedValue"/>
  18. <xs:attribute ref="ifc:cType" fixed="list"/>
  19. <xs:attribute ref="ifc:arraySize" use="optional"/>
  20. </xs:complexType>
  21. </xs:element>
  22. </xs:sequence>
  23. <xs:attribute name="Name" type="ifc:IfcLabel" use="optional"/>
  24. <xs:attribute name="Description" type="ifc:IfcText" use="optional"/>
  25. <xs:attribute name="ApplicableDate" type="ifc:IfcDate" use="optional"/>
  26. <xs:attribute name="FixedUntilDate" type="ifc:IfcDate" use="optional"/>
  27. <xs:attribute name="Category" type="ifc:IfcLabel" use="optional"/>
  28. <xs:attribute name="Condition" type="ifc:IfcLabel" use="optional"/>
  29. <xs:attribute name="ArithmeticOperator" type="ifc:IfcArithmeticOperatorEnum" use="optional"/>
  30. </xs:extension>
  31. </xs:complexContent>
  32. </xs:complexType>

与上面相同的例子看起来像IFCXML。请注意,IFC4 XML比IFC2x3 XML简洁得多,但模型的文件还是比较大。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <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">
  3. <header>
  4. <time_stamp>--31T09::</time_stamp>
  5. <preprocessor_version>Xbim File Processor version 4.0.0.0</preprocessor_version>
  6. <originating_system>Xbim version 4.0.0.0</originating_system>
  7. </header>
  8. <IfcProject id="i1" GlobalId="1Ozgvj0H5Bd8HqZRp$$1gG" Name="Basic Creation">
  9. <OwnerHistory id="i2" xsi:type="IfcOwnerHistory" ChangeAction="added" CreationDate="">
  10. <OwningUser id="i5" xsi:type="IfcPersonAndOrganization">
  11. <ThePerson id="i3" xsi:type="IfcPerson" FamilyName="Santini Aichel" GivenName="Johann Blasius" MiddleNames="" PrefixTitles="" SuffixTitles="" />
  12. <TheOrganization id="i4" xsi:type="IfcOrganization" Name="Independent Architecture" />
  13. </OwningUser>
  14. <OwningApplication id="i6" xsi:type="IfcApplication" Version="4.0" ApplicationFullName="xBIM Toolkit" ApplicationIdentifier="xBIM">
  15. <ApplicationDeveloper id="i7" xsi:type="IfcOrganization" Name="xBIM Team" />
  16. </OwningApplication>
  17. </OwnerHistory>
  18. <RepresentationContexts>
  19. <IfcGeometricRepresentationContext id="i20" pos="" ContextIdentifier="Building Model" ContextType="Model" CoordinateSpaceDimension="" Precision="1E-05">
  20. <WorldCoordinateSystem>
  21. <IfcAxis2Placement3D id="i19">
  22. <Location id="i18" xsi:type="IfcCartesianPoint" Coordinates="0 0 0" />
  23. </IfcAxis2Placement3D>
  24. </WorldCoordinateSystem>
  25. </IfcGeometricRepresentationContext>
  26. <IfcGeometricRepresentationContext id="i23" pos="" ContextIdentifier="Building Plan View" ContextType="Plan" CoordinateSpaceDimension="" Precision="1E-05">
  27. <WorldCoordinateSystem>
  28. <IfcAxis2Placement2D id="i22">
  29. <Location id="i21" xsi:type="IfcCartesianPoint" Coordinates="0 0" />
  30. </IfcAxis2Placement2D>
  31. </WorldCoordinateSystem>
  32. </IfcGeometricRepresentationContext>
  33. </RepresentationContexts>
  34. <UnitsInContext id="i8" xsi:type="IfcUnitAssignment">
  35. <Units>
  36. <IfcSIUnit id="i9" pos="" UnitType="lengthunit" Prefix="milli" Name="metre" />
  37. <IfcSIUnit id="i10" pos="" UnitType="areaunit" Name="square_metre" />
  38. <IfcSIUnit id="i11" pos="" UnitType="volumeunit" Name="cubic_metre" />
  39. <IfcSIUnit id="i12" pos="" UnitType="solidangleunit" Name="steradian" />
  40. <IfcSIUnit id="i13" pos="" UnitType="planeangleunit" Name="radian" />
  41. <IfcSIUnit id="i14" pos="" UnitType="massunit" Name="gram" />
  42. <IfcSIUnit id="i15" pos="" UnitType="timeunit" Name="second" />
  43. <IfcSIUnit id="i16" pos="" UnitType="thermodynamictemperatureunit" Name="degree_celsius" />
  44. <IfcSIUnit id="i17" pos="" UnitType="luminousintensityunit" Name="lumen" />
  45. </Units>
  46. </UnitsInContext>
  47. </IfcProject>
  48. <IfcWall id="i24" GlobalId="0CYq5lt8fES8dUWMOwav6U" Name="The very first wall">
  49. <OwnerHistory ref="i2" xsi:type="IfcOwnerHistory" xsi:nil="true" />
  50. <IsDefinedBy>
  51. <IfcRelDefinesByProperties id="i25" pos="" GlobalId="1Wt5lOOef8C8PngqD19enP">
  52. <OwnerHistory ref="i2" xsi:type="IfcOwnerHistory" xsi:nil="true" />
  53. <RelatingPropertyDefinition>
  54. <IfcPropertySet id="i26" GlobalId="0JTSUXsqP9QRLClhbnQBnS" Name="Basic set of properties">
  55. <OwnerHistory ref="i2" xsi:type="IfcOwnerHistory" xsi:nil="true" />
  56. <HasProperties>
  57. <IfcPropertySingleValue id="i27" pos="" Name="Text property">
  58. <NominalValue>
  59. <IfcText-wrapper>Any arbitrary text you like</IfcText-wrapper>
  60. </NominalValue>
  61. </IfcPropertySingleValue>
  62. <IfcPropertySingleValue id="i28" pos="" Name="Length property">
  63. <NominalValue>
  64. <IfcLengthMeasure-wrapper></IfcLengthMeasure-wrapper>
  65. </NominalValue>
  66. </IfcPropertySingleValue>
  67. <IfcPropertySingleValue id="i29" pos="" Name="Number property">
  68. <NominalValue>
  69. <IfcNumericMeasure-wrapper>789.2</IfcNumericMeasure-wrapper>
  70. </NominalValue>
  71. </IfcPropertySingleValue>
  72. <IfcPropertySingleValue id="i30" pos="" Name="Logical property">
  73. <NominalValue>
  74. <IfcLogical-wrapper>true</IfcLogical-wrapper>
  75. </NominalValue>
  76. </IfcPropertySingleValue>
  77. </HasProperties>
  78. </IfcPropertySet>
  79. </RelatingPropertyDefinition>
  80. </IfcRelDefinesByProperties>
  81. </IsDefinedBy>
  82. </IfcWall>
  83. </ifcXML>

通过以上两种格式对比,我的观点是IFC 作为STEP21存储和处理要好得多。但xBIM 也支持XML ,在个别的情况下需要转换为STEP21。

  1. using System;
  2. using Xbim.Ifc;
  3. using Xbim.Ifc4.Interfaces;
  4.  
  5. namespace BasicExamples
  6. {
  7. public class StepToXmlExample
  8. {
  9. public static void Convert()
  10. {
  11. //open STEP21 file
  12. using (var stepModel = IfcStore.Open("SampleHouse.ifc"))
  13. {
  14. //save as XML
  15. stepModel.SaveAs("SampleHouse.ifcxml");
  16.  
  17. //open XML file
  18. using (var xmlModel = IfcStore.Open("SampleHouse.ifcxml"))
  19. {
  20. //just have a look that it contains the same number of entities and walls.
  21. var stepCount = stepModel.Instances.Count;
  22. var xmlCount = xmlModel.Instances.Count;
  23.  
  24. var stepWallsCount = stepModel.Instances.CountOf<IIfcWall>();
  25. var xmlWallsCount = xmlModel.Instances.CountOf<IIfcWall>();
  26.  
  27. Console.WriteLine($"STEP21 file has {stepCount} entities. XML file has {xmlCount} entities.");
  28. Console.WriteLine($"STEP21 file has {stepWallsCount} walls. XML file has {xmlWallsCount} walls.");
  29. }
  30. }
  31.  
  32. }
  33. }
  34. }
 

xBIM 基础06 将STEP物理文件转换为XML的更多相关文章

  1. uiautomator日志文件转换为xml格式文件

    如果想把uiautomator的日志文件,转换成漂亮的xml文件,那么可以使用automator-log-converter.jar工具, 工具使用方法: 使用工具automator-log-conv ...

  2. xBIM 基础07 创建WebBIM文件

    系列目录    [已更新最新开发文章,点击查看详细]  xBIM项目提供了一个IFC文件的Web查看器.当你想把IFC转换成紧凑的WexBIM时,需要 xBIM Essentials 和 xBIM G ...

  3. javaSE基础06

    javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...

  4. sqlserver错误"试图扩大物理文件时,MODIFY FILE 遇到操作系统错误 112(磁盘空间不足。)。"处理

    正常还原的时候报错: Microsoft SQL-DMO (ODBC SQLState: 42000)---------------------------试图扩大物理文件时,MODIFY FILE  ...

  5. 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  6. MySQL 物理文件体系结构的简单整理说明

    本文出处:http://www.cnblogs.com/wy123/p/7102128.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  7. xBIM 基础01 简介

    系列目录    [已更新最新开发文章,点击查看详细]  一.xBIM 简介 BIM(Building Information Modelling)建筑信息模型,xBIM(eXtensible Buil ...

  8. SQL Server附加数据库报错:无法打开物理文件,操作系统错误5

    问题描述:      附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...

  9. C# 将PDF文件转换为word格式

    Pdf(Portable Document Format)意为“便携式文档格式”,是现在最流行的文件格式之一,它有很多优点如:尺寸较小.阅读方便.操作系统平台通用等,非常适合在网络上传播和使用.如今在 ...

随机推荐

  1. 高斯混合模型Gaussian Mixture Model (GMM)——通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布

    从几何上讲,单高斯分布模型在二维空间应该近似于椭圆,在三维空间上近似于椭球.遗憾的是在很多分类问题中,属于同一类别的样本点并不满足“椭圆”分布的特性.这就引入了高斯混合模型.——可以认为是基本假设! ...

  2. 一名3年工作经验的java程序员应该具备的技能

    一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容.我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价.拿到的薪水势必也越高 ...

  3. SQLserver中用convert函数转换日期格式(1)

    SQLserver中用convert函数转换日期格式2008-01-15 15:51SQLserver中用convert函数转换日期格式 SQL Server中文版的默认的日期字段datetime格式 ...

  4. BZOJ 2957 分块

    思路: 记录每栋楼楼顶与原点连线的斜率 那么一栋楼可见当且仅当前面所有楼的斜率都小于这栋楼 将n栋楼分为√(0.5*n*logn)块 每一块内维护一个单调上升子序列(注意不是LCS) 比如说4 1 2 ...

  5. line-height与间距总总

    一点说明(个人吐槽,可以略过) 之所以想写这篇文章,是因为自己工作的经验总结.以前的页面编写极度不注重间距大小,特别是行级元素间距.认为只要差不多好就行了,没必要花那么大的精力去抠几px的小细节.事实 ...

  6. node.js流复制文件

    转自:http://segmentfault.com/a/1190000000519006 nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source ...

  7. JQurey大纲

  8. Unity设置Turorials-Wide布局

    在bilibili上看关于UGUI官翻视频时,很喜欢对方的布局,自己照着改了下,改的步骤如下: 1, 先选用 2by3 布局 2, 把Project面板拖到Hierarchy下边 3, 把2列布局改成 ...

  9. spring-session与redis实现session共享

    一.准备 两个不同端口号的输出request.getLocalPort() + " ---> " + request.getSession(true).getId()的简单S ...

  10. codecademy练习记录--Learn Python(70%)

    ############################################################################### codecademy python 5. ...