数据映射示例
强制和默认值
文件交换场景通常要求某些数据字段不能为空,或者每个数据字段必须有一个默认值。为确保强制数据字段总包含值,在数据映射公式的末尾包含一个常量。
公式:
=FIRSTNONEMPTY(Style.'Function', 'NOTDEFINED')
=FIRSTNONEMPTY(OBJECTDATA('General Name'), Style.'Name', 'Roof')
如果所有数据字段都需要默认值,但您需要某些对象的特定值,则创建一个记录格式,并为将作为数据源的字段设置一个默认值。然后,将该记录仅附加到具有特定值的对象,这样您就可以根据需要更改附加记录中的默认值。没有附加记录的对象将获得默认值。
公式:
=FIRSTNONEMPTY('Pricing Details'.'Discount', FORMATFIELD('Pricing Details','Discount'))
组合字段和常量
可以使用数据映射公式来提高易读性,添加所需的前缀或后缀,或者组合或计算来自多个数据源的数据。
在本例中,我们需要对自动扶梯进行更好的说明,包括关于制造商和台阶宽度的重要信息。还可以添加一些文字来提高易读性。
公式:
=CONCAT('Escalator: ', 'Escalator'.'Type', ' Width: ', 'Escalator'.'Step width')
结果:
自动扶梯:Otis 510 M 宽度: 1000 (3' 3")
在另一个例子中,我们需要设置来自 Vectorworks 名称的窗对象的名称。如果没有 Vectorworks 名称,可以组合 ID 前缀、ID 标签和 ID 后缀字段。如果所有这些参数都为空,可以使用文字“窗户”来标识窗户。
公式:
=FIRSTNONEMPTY(OBJECTDATA('General Name'), CONCAT('Window'.'IDPrefix', 'Window'.'IDLabel', 'Window'.'IDSuffix'), 'Window')
没有 Vectorworks 名称的结果:
W-01A1
记录格式映射
在添加自定义记录和数据到绘图时,要将他们自动附加到 Vectorworks 插件对象,使用所需的数据字段创建记录格式,然后将字段映射到该对象的适当常量值、参数或样式。这样,可以更容易地使用报告对象数据(例如工作表、数据标记和数据可视化)的各种 Vectorworks 功能。
在本例中,“柜子计算”记录格式已创建,并将其添加为“底柜”插件对象的数据集。
工作台面长度:映射到柜子的长度参数(工作台面的线性测量)
工作台面面积:我们在工作台面上添加 50 毫米的悬垂并计算面积,然后除以 1000*1000 以将结果从平方毫米转换为平方米(长度/深度单位为毫米)
公式: =('Base Cabinet'.'Length' * ('Base Cabinet'.'Depth' + 50)) / 1000000
邻墙:未映射;在“对象信息”面板的“数据”选项卡中,用户定义橱柜是否与墙相邻,从而确定是否需要后挡板
后挡板面积:如果需要后挡板,面积为 0.6 米(后挡板面板宽度) * 工作台面长度/1000(将米换算为毫米)。注意,此公式涉及到同一记录中的其他两个字段。
公式: =IF(FIRSTNONEMPTY('Cabinet Calculations'.'Adjacent to Wall', FORMATFIELD('Cabinet Calculations', 'Adjacent to Wall')), (0.6*FIRSTNONEMPTY('Cabinet Calculations'.'Countertop Length', FORMATFIELD('Cabinet Calculations', 'Countertop Length'))/1000), 0)
如果从映射中删除记录格式,则记录将从绘图中的所有底柜实例中分离。
当将底柜放置在绘图中时,“对象信息”面板的“数据”选项卡将显示已自动附加的记录数据。对于每个映射的字段,按“数据管理器”的编辑 ( )列中的设置控制该字段的编辑方式。
函数
在本例中,我们希望根据窗口对象的设置来计算IfcWindow.OverallHeight。
只要窗户没有窗台,高度参数包含正确的值,如果有窗台,那就是一个 Brick 窗台类别。在任何其他情况下,窗台高度 (4)的值需要添加至窗户高度。
公式:
='Window'.'OverallHeight' + IF('Window'.'IncludeSill' & ('Window'.'SillStyle' <> 'Brick'), 'Window'.'SillHeight', 0)
结果,当没有窗台,或者窗台类型为砖(将高度值增加 0):
2000.0
结果,当有一个窗台,且不是砖(将高度值增加 150.0):
2150.0
使用选择器函数映射数据源
IFC 数据需要许多“枚举”类型的数据字段,例如 PredefinedType、OperationType、ShapeType,等等。有时,没有一一对应的关系,当前设置与 IFC 不同,不能直接映射有效的数据源,或者值是以其他语言编写。
在本例中,我们将使用一个选择器函数将配置列表从窗户映射至所需的 IFC 窗户面板数据集的 OperationType。
公式:
=FIRSTNONEMPTY(IFS('Window'.'Configuration' = 'Opening', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Cased Opening', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Fixed Glass', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Fixed Glass - No Sash', 'FIXEDCASEMENT',
'Window'.'Configuration' = 'Single Hung', 'SLIDINGVERTICAL',
'Window'.'Configuration' = 'Double Hung', 'SLIDINGVERTICAL',
'Window'.'Configuration' = 'Casement', 'SIDEHUNGLEFTHAND',
'Window'.'Configuration' = 'Bi-parting Casement', 'SIDEHUNGLEFTHAND',
'Window'.'Configuration' = 'Horizontal Slider', 'SLIDINGHORIZONTAL',
'Window'.'Configuration' = 'Awning', 'TOPHUNG',
'Window'.'Configuration' = 'Hopper', 'BOTTOMHUNG',
'Window'.'Configuration' = 'Tilt/Turn', 'TILTANDTURNLEFTHAND',
'Window'.'Configuration' = 'Vertical Pivot', 'PIVOTVERTICAL'), NOTDEFINED')
条件
条件可让您处理更复杂的情况,更精确地控制 IFC 数据布局。
将墙样式映射到不同实体的条件
例如,你可能有一个包含四种墙样式的文件:ExternWall、InteriorWall、Footing 和 VirtualWall。在墙插件对象的数据映射中,我们添加两个新的主要实体:IfcCovering 和 IfcFooting。使用条件字段,我们设置一个规则,按墙样式映射适当的 IFC 实体。
公式:
=IF(Style.'Name'='ExternWall', 'IfcWallStandardCase', IF(Style.'Name'='InteriorWall', 'IfcCovering', IF(Style.'Name'='Footing', 'IfcFooting', 'No-Export')))
结果:
导出的文件将包含具有三个 IFC 实体之一的墙,具体取决于墙样式。具有 VirtualWall 墙样式的墙不会被映射到任何东西,也不会被导出。
楼板对象的特性集条件
公式:
=(FIND('Structural', Style.'Name')=0)
结果:
如果楼板对象的样式名称以 “Structural” 开头,则分类 Pset 将附加到楼板上。
将对象导出为多个实体的条件
将单个对象导出为单独的实体时,可以使用条件。这是一个具有多个组件的墙。使用墙样式中的“功能”字段,可以在导出期间将不同的 IFC 实体映射到每个组件。
公式:
=IF(OBJECTDATA('Component', 'Function', T=INDEX)='Load-Bearing', 'IfcWallStandardCase', IF(OBJECTDATA('Component', 'Function', T=INDEX)='Inner Finish', 'IfcCovering', IF(OBJECTDATA('Component', 'Function', T=INDEX)='Outer Finish', 'IfcCovering', IF(OBJECTDATA('Component', 'Function', T=INDEX)='OTHER', 'IfcBuildingElementProxy', 'NoExport'))))
结果:
在 IFC 文件中,墙用三种不同的实体表示:两个 IfcCovering、IfcWallStandardCase 和 IfcBuildingElementProxy。标记为“气隙”功能的组件不导出。
因为有可能存在没有核心组件的墙,并且“对象信息”面板上的数据窗格只允许可视化一个实体,所以可视化的实体总是被映射到第一个组件的实体。在这种情况下,不会影响导出。
符号和自定义几何图形
符号和自定义几何图形必须附加或映射 IFC 数据才能导出。它们的 IFC 数据映射基于其指定的 IFC 实体类型的设置。
在“数据管理器”对话框中,我们添加 Pset_ColumnCommon 并将“参照”字段映射到对象的类名称。也可以为 IsExternal 和 LoadBearing 添加固定值 TRUE。
可以在“对象信息”面板的“数据”选项卡中看到默认的映射。
对于符号,可以基于符号的 IFC 名称或符号定义的名称创建映射。在“数据管理器”中,我们可以选择符号定义,然后单击添加数据集以定义我们想导出的所需的 IFC 数据集。例如,我们添加 Pset_ManufacturerTypeInformation,然后将所有字段映射到固定值,因为它们对于此符号的所有实例都相同。
现在,甚至不需要将 IFC 数据附加到符号定义或任何符号实例上,该符号就可被导出为带有 Pset_ManufacturerTypeInformation 的 IfcFurnishingElement。可以在“对象信息”面板的“数据”选项卡中看到默认的映射。
主要和次要实体:
对于聚合对象,主要实体和次要实体可以实现更精确的 IFC 数据布局。在本例中,幕墙的主要实体集为 IfcCurtainWall。次要实体是 IfcMember (框架)和 IfcPlate (面板)。通过关闭、替换或完全删除次要实体,可以控制框架和面板的导出。