目录

  • xBIM 应用与学习 (一)

  • xBIM 应用与学习 (二)

  • xBIM 基本的模型操作

  • xBIM 日志操作

  • XBIM 3D 墙壁案例

  • xBIM 格式之间转换

  • xBIM 使用Linq 来优化查询

  • xBIM IFC 输出 Excel 报表

  • xBIM IFC 层次结构

  • xBIM 多个IFC文件合并

  • xBIM 插入复制功能

  • XBIM 基于 WexBIM 文件在 WebGL 浏览和加载

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 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定义,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.");}}}}
}

转载于:https://www.cnblogs.com/w2011/p/8418441.html

xBIM 格式之间转换相关推荐

  1. 如何在 Unix 和 DOS 格式之间转换文本文件

    本文介绍如何在 Unix 和 DOS 格式之间转换文本文件.DOS 文本文件带有回车符( \r )和换行符( \n )作为它们的换行符,而 Unix 文本文件只有( \n )换行符作为换行符. 有多种 ...

  2. cdr存成html格式的文件格式,CDR必备!CDR保存与各种格式之间转换!-cdr文件用什么打开...

    cdr功能毋庸置疑的强悍.只要发挥得当工资与地位自然是会让你得到你想要的.但在新手操作的时候总会出现这些或者那些一些问题,下面咱们就来总结一下cdr的打开方式与各种格式之间的转换吧! 一.cdr文件打 ...

  3. JKS、BKS、PFX证书格式之间转换

    常用的证书密钥库格式:  JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型,JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJC ...

  4. 证书格式简介及不同格式之间的转换方式

    1.证书格式 PEM 格式 PEM格式通常用于数字证书认证机构(Certificate Authorities,CA),扩展名为.pem, .crt, .cer, and .key.内容为Base64 ...

  5. linux音频文件格式转换,Linux下常见音频格式之间的转换方法

    下面简单介绍下Linux环境常见音频格式之间的转换方法: MP3 相关工具: lame OGG 相关工具: vorbis-tools APE 相关工具: mac FLAC 相关工具: flac WAV ...

  6. 有关于格式的转换(时间、各种类型、集合、Json之间)

    作为一名开发人员,从前端 接收到各种各样的数据需要转变成为我们所用的格式,比如前端如果传来一个date,那我们需要获取到之后进行一系列的操作,那接下来就分成几块来记录关于格式的转换. 一.时间的转换 ...

  7. 【nv12 格式转换】不同图像数据格式之间转换代码实操

    文章目录 1 问题先行 2 nv12介绍 2.1 YUV格式 2.2 NV12排布 3 不同数据格式之间转换实操 4 参考链接 1 问题先行 nv12是什么格式?和常见的rgb/bgr有什么关系吗?他 ...

  8. 能在不同的深度学习框架之间转换模型?微软的MMdnn做到了

    Microsoft/MMdnn:深度学习框架随心切换 学习深度学习的各位同学都希望自己的模型能在不同的深度学习框架之间随意转换,比如,斯坦福大学CVGL实验室的Saumitro Dasgupta就做过 ...

  9. Linux版rpm与deb格式,如何转换从RPM到DEB和DEB到RPM包使用Alien

    正如我敢肯定你已经知道,有大量的安装在Linux软件的方式:利用你的发行提供的包管理系统( 资质,Yum,或zypper的 ,仅举几例),从源代码编译(虽然有点罕见的,这些天,这是唯一的方法,在Lin ...

最新文章

  1. 清华成立视觉智能研究中心,邓志东任中心主任
  2. Nature Protocols:整合宏基因组、代谢组和表型分析的的计算框架
  3. Linux常用命令大全-toolfk程序员在线工具网
  4. UITableView 局部刷新
  5. Java配置多数据源access,java联接MS ACCESS,无需配置数据源
  6. 机器学习中的规则化范数(L0, L1, L2, 核范数)
  7. C#实现异步消息队列
  8. 对于一个ul列表,单击弹出每个li对应的索引
  9. linux gst qt,【ARM-Linux开发】Gstreamer+QT+摄像头 编程总结
  10. Js实现异步刷新(原创)
  11. linux ip隧道技术,linux之IP隧道配置
  12. B端——复杂业务表单设计
  13. Python OpenCV学习笔记之:使用MOG2视频背景消除
  14. 运行Django,Python崩溃
  15. make指定输出目录
  16. IBM Jdk环境启动jboss,出现如下错误:SunX509 KeyManagerFactory not available
  17. Q1营收7740万元亏损大幅收窄,转型自救的途牛能否追赶携程艺龙?
  18. [vue-router] Named Route ‘Layout‘ has a default child route. When navigating to this named route (:t
  19. 新颖的自我介绍_简单新颖的自我介绍范文
  20. MySQL变量的使用

热门文章

  1. NFT 项目 Loot 生态发展如何?
  2. 字符串匹配 - 正则表达式
  3. python---win10下安装zipline
  4. 大学生选择CAXA3D,获大赛一等奖和团体奖!
  5. 计算机术语shebang,Linux中的释伴#!(shebang)
  6. ai前世识别_ai人脸扫描前世身份
  7. java sortedmap,使用自定义Comparator在Java中创建SortedMap
  8. wireshark抓包分析TCP数据包
  9. 用VLOOKUP函数在Excel中批量替换值
  10. linux下miniconda卸载