Revit日常设计与绘图中,最常见的分享合作方式是模型保存为rvt文件,并拷贝给他人。
然而在一些特定情境下,模型的导出,尤其是导出为IFC格式也是不可避免的。类似情景可能为:
1. 需要与其他软件进行数据交流:
IFC作为通用的数据交流格式,被很多软件支持兼容,例如ArchiCAD,还有结构专业的SAP2000, ETABS等。
2. 知识产权的保护:
设计人员并不想把包含项目所有信息的rvt文件拷贝给整个设计施工过程中所有的参与方,尤其rvt文件还会包含花费大量时间制作的族文件。
3. 长时间的模型保存:
Revit恐怕并不能保证每个版本对于相同rvt文件的解析都是完全一致的,尤其是考虑到3年以上的时间周期。
然而由于Revit对于IFC格式的兼容并非100%,在导出过程中往往会出现不匹配的情况,其中类型和坐标的匹配问题是最多的。于是在阅读了一些相关解答分析的文章之后,尤其是一篇来自于Dion Moult的“How to create better IFC files with Revit”(如何用Revit创建更高质量的Ifc文件),在这里围绕这些话题进行了整理和补充。
一. 类型匹配
正如Revit里面有墙,板,柱这些类别。IFC文件里也有对应的墙(IfcWall)板(IfcSlab)柱(IfcColumn)这些预先定义好的类。
然而问题在于,Revit 的类与IFC实体并非一一对应。例如Revit里设备管线(Mechanical Equipment)可能对应IFC的IfcBoiler, IfcCondenser or IfcChiller,形成一对多的对应关系。于是,使用Revit 官方提供的IFC Option对于定制导出非常必要。
这里提供了两个匹配区域,IFC类名称和IFC类型。要注意的是这里的IFC类型并不指IFC文件格式中的IfcTypeObject类,而是指相应IFC类中的预定义类型(PredefinedType)属性。
以梁(Beam)这个类型为例,IFC中对应的IFC类名称为IfcBeam。而IFC类型是指IfcBeam中的预定义类型这个属性,也就是IfcBeamTypeEnum这个枚举类型,其中可选项为:梁(通常被水平放置的标准梁)、楼面梁(支撑地面或者吊顶的梁)、空心板(常被用于楼板构件的空心预应力宽梁)、过梁(门窗洞口之上的梁或水平构件)……
但是IfcBeamType又是什么呢?
IFC的官方定义是“用于定义梁的规格和类型(该类型下所有的实例共有的产品信息)”。类似于梁的一种抽象父类,在IFC中的结构关系也是通过“IfcRelDefinesByType”与“IsTypedBy”定义。在Revit里面所指就是如下图,一个族所对应的不同类型了。
以上是Revit提供的基于类这个级别的匹配方式。另外还有一种针对于每个族和每个族实例的微操方式,就是通过参数的绑定。
首先需要在项目参数中增加IfcExportAs这个参数,无论类型或者实例皆可,但要放在IFC参数分组下使用文字参数类型。之后就可以在导出中,以自定义的类型进行导出。例如假设参数中填写的是IfcBeam.JOIST, 就会导出为Ifc的梁元素并把其预定义类型属性赋值为JOIST。
然而这种方法的并不适用于系统族,只是适用于用户自建族和内建模型。
Revit可以通过这两种方式提高导出的质量,而导出质量的评判方式,则是IfcBuilidingElementProxy(默认被自动匹配的类型)的出现次数的多少。
二. 坐标系统
一些观点认为,Revit并不能很好的支持项目中的局部坐标与真实世界的GIS坐标的转化。从而在导出到其他软件中产生错误,甚至导回Revit也会失败。若要弄清楚这些问题的根源,那么必须要对Ifc和Revit的坐标系统进行对比分析。
Revit导出选项中的三种参考点:
在导出IFC文件时,可以对项目原点进行指定:
测量点(survey point):
项目基点(project base point):
内部原点(Internal Origin):
Revit的内部原点是不可移动的,基于此可构建项目坐标系统和反映真实世界坐标的测量坐标系统:
而Ifc在设计其坐标体系的时候,思路有所不一样,并且这种不一致会在一些地方导致两者坐标转化产生问题。
IFC分以下几个层次定义其坐标参考系:
1. 项目的坐标系:
在IFCx4中,ifc项目(IfcProject)中一个重要特性在于其提供了项目坐标系与实际地勘坐标的转化关系。这种转化关系是由IfcProject所附带的几何相关内容IfcGeometricRepresentationContext
包含的IfcMapConversion元素所决定。更具体的讲,这种局部坐标系往全局坐标系的转化需要借助大地测量学中用到的赫尔默特转换, 从局部坐标(X,Y,Z)转化到(X’,Y’,Z’)为这样的关系:
其中所用参数就来自于IFC中所定义的IfcMapConversion元素的属性。
然而在Revit中以上的坐标转化完全缺失了。Revit导出的项目信息包含:坐标空间维度(CoordinateSpaceDimension),精度(Precision)和正北(TrueNorth),并没有IfcMapConversion项目。Revit和IFC的信息包含关系如下图:
这部分信息的丢失导致了Revit导出的信息无法进行赫尔默特转换,从而与一些基于IFC的软件产生坐标上的差异。
所以有些人会采用把eastings和northings的坐标直接加到项目基点与测量点中。这样会导致其坐标值过大,当被其他软件解析时,有可能突破其坐标上限,从而导致错误的产生。甚至Revit自己都无法导回这样的Ifc文件。
2. 场地(IfcSite)的坐标系和建筑物(IfcBuilding)的坐标系:
不同于IfcProject的有且只能有一个实例,IfcSite在一个项目中可以存在多个。而一个场地可以包含多个建筑物。
从IFC的构件来看,IfcSite和IfcBuilding与IfcProject有不同的继承关系。无论是IfcSite还是IfcBuilding都继承于IfcProduct, 这就导致了这两个元素都会有ObjectPlacement性质,会有一组坐标和方向来表达其在项目中的相对位置。而他们各种又有自己的独有的属性,比如场地的经纬度,高程。
对于IfcSite,其相对经纬度信息RefLatitude 和RefLongitude,皆来自于Revit中设定的位置信息。对于IFC4来说,这部分信息属于冗余,为了兼容IFC2x3而设,如果这部分信息与之前定义的IfcMapConversion有冲突,则以IfcMapConversion为准。另外这部分信息也与Revit设置的测量点没有关系,取自于Revit项目设置中的位置信息,这也一定程度反映了Revit项目中是不支持多场地的。ObjectPlacement性质由位置坐标和方向两部分组成。方向部分与项目设置的正北方向一致,但是方向向量的Z坐标,可通过以下设置赋值为相对标高信息RefElevation的数值,如果此项不勾选,则Z默认设为0:
位置坐标部分比较复杂,其坐标为3维坐标,但Z值常设为0。XY坐标与项目基点有如下的转换关系:
对于IfcBuilding, 其相对布置坐标常设为(0,0,0)所以位置信息全部继承自Ifcsite。
以上则为Revit和Ifc类型和坐标差异的一些总结,希望在Revit导出问题中提供一些参考。
参考文献
1. “13 TIPS TO UNDERSTAND REVIT BASE POINTS AND COORDINATE SYSTEM”
2. “Revit IFC manual —Detailed instructions for handling IFC files”, AUTODESK
3. “IFC Coordinate Reference Systems and Revit”,Dion Moult
4. “Autodesk Knowledge Network”, AUTODESK
为了方便大家交流技术和互通行业资讯,
请添加我们“转自:非解构-公众号”微信,
加入相关讨论交流群。