系列目录    【已更新最新开发文章,点击查看详细】 
一、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 代码如下所示:

SCHEMA家族;ENTITY人(ONEOF(男,女))的抽象超模;名字:STRING;母亲:可选女性;父亲:可选男性;
END_ENTITY;ENTITY女性(人)的子类型;
END_ENTITY;ENTITY男性(Person)的SUBTYPE;
END_ENTITY;END_SCHEMA;

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

  • 一个女人可以扮演一个母亲的角色
  • 一个男人可以扮演一个父亲的角色
三、将STEP物理文件转换为XML将STEP物理文件 转换为XML
  xBIM Toolkit实现了100%的IFC2x3和IFC4模式,它支持所有物理表示。 STEP21是EXPRESS中定义的数据的物理表示。它是IFC的原始定义,非常适合产品建模。从这个简单的例子中可能并不明显,但是EXPRESS比任何XSD更有意识,更容易阅读。EXPRESS定义如下所示:
ENTITY IfcAppliedValueSUPERTYPE 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;INVERSEHasExternalReference : 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定义,它源自EXPRESS定义,其物理表示是众所周知的XML。XSD定义不包含WHERE规则和INVERSE属性等所有IFC功能,这些功能对于数据中的双向导航非常方便。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比IFC2x3 XML简洁得多,但模型的文件还是比较大。

<?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(){//open STEP21 fileusing (var stepModel = IfcStore.Open("SampleHouse.ifc")){//save as XMLstepModel.SaveAs("SampleHouse.ifcxml");//open XML fileusing (var xmlModel = IfcStore.Open("SampleHouse.ifcxml")){//just have a look that it contains the same number of entities and walls.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.");}}}}
}

系列目录    【已更新最新开发文章,点击查看详细】 

转载于:https://www.cnblogs.com/SavionZhang/p/10967950.html

xBIM 基础06 将STEP物理文件转换为XML相关推荐

  1. HarmonyOS之将SVG文件转换为XML文件

    SVG(Scalable Vector Graphics)可缩放矢量图形,是一种图像文件格式.目前由于 HarmonyOS 图形渲染引擎不支持 SVG 格式图片的渲染,开发者需要将 SVG 格式的图片 ...

  2. 用C#把文件转换为XML

    using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...

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

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

  4. 将SVG文件转换为XML文件

    第一步:图标下载的地址:https://www.iconfont.cn/,下载SVG图标 第二步:将SVG图标转换成XML文件,使用转换工具. 链接: https://pan.baidu.com/s/ ...

  5. Visdrone2019数据集.txt标签文件转换为voc格式.XML标签文件

    最近有同学问是否有Visdrone数据集的xml文件,由于本人之前训练数据的时候没有保存xml文件,所以无法共享. 为了解决这个问题,重新写了转换代码并贴出,供大家共同学习使用.(文末附上数据下载网盘 ...

  6. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

    目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...

  7. OpenCASCADE(OCC)读取 STEP 模型文件并在MFC中显示

    先上  运行结果图>> OpenCASCADE具有支持读取STEP的翻译器: 1.对于STEP: STEP标准广泛地用于各种软件之间的数据交换,涉及CAD.PDM.Analysis等等,S ...

  8. 基础002. Editplus编辑远程文件

    本文"植物微生物组"公众号原创,ID: plantmicrobiome 作者:刘永鑫 编辑:翟志文 原文链接:基础002. Editplus编辑远程文件 Editplus 远程打开 ...

  9. TF之TFOD-API:基于tensorflow框架利用TFOD-API脚本文件将YoloV3训练好的.ckpt模型文件转换为推理时采用的.pb文件

    TF之TFOD-API:基于tensorflow框架利用TFOD-API脚本文件将YoloV3训练好的.ckpt模型文件转换为推理时采用的frozen_inference_graph.pb文件 目录 ...

最新文章

  1. 组合计数 ---- codeforces1312 D. Count the Arrays
  2. python 进度条
  3. Django MTV模型思想
  4. 解决python安装第三方库速度很慢的问题(opencv为例)
  5. webGIS(离线版)研究路线归总
  6. Windows下 更改 pip默认缓存目录
  7. m3u8地址_「波波带你手动提取网页视频」04讲 Network和Elements提取m3u8链接
  8. 【华为云技术分享】从部署和运维说说DLI(1)
  9. mac 下安装 lua5.3 + cjson
  10. Windows 命令行及Git操作
  11. ubuntu 终端透明
  12. IMO船舶材料防火安全规范
  13. python短时傅里叶变换_短时傅里叶变换(Short Time Fourier Transform)原理及 Python 实现...
  14. 易康EPS2的使用(一)
  15. 通过图书编号查询python,基于Python的ISBN书号查询示例代码-六派数据
  16. 用python采集modbus_python modbus_tk库学习记录
  17. MFC-CEdit派生一个只允许输入16进制数据的新类
  18. 关于混入(minxs)的使用
  19. webuploader+上传文件夹
  20. office2016安装后新建图标(word\excel\ppt)等文件图标均显示白色

热门文章

  1. MacBook 与其他设备的低成本高性能数据传输方案
  2. zTree 异步加载
  3. PyTorch 源码解读之 cpp_extension:讲解 C++/CUDA 算子实现和调用全流程
  4. dtree.js下拉树控件
  5. 如何解决html字体发虚,CSS3动画过程中文字模糊如何解决?
  6. 汉字转换拼音_WinDev
  7. 【Python快排】快速排序优化
  8. ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点
  9. scp linux 命令加密码,scp命令_Linux scp 命令用法详解:加密的方式在本地主机和远程主机之间复制文件...
  10. linux 发送邮件 mutt,Linux发送邮件:mutt中级技巧