2.3 案例3:自定义施工编码
1.案例背景
建设工程项目管理过程中,为满足不同参建单位间的协同工作或对不同维度构件的施工管理应用,有些施工管理平台要求对BIM模型中的构件进行编码。编码规则一般是由不同字段名称缩写加连接符构成,例如按“楼层_构件规格_构件类型_构件定位_顺序码”进行编码。编码的工作量非常巨大,但编码规则又具有一定逻辑性,因此可以利用Dynamo进行批量处理。本案例将把最终组合的构件编码信息写入Revit模型构件的“标记”实例参数中。
2.解决方案
编码字段中的所有信息就是族的各个参数值通过连接符连接而形成的组合,如“楼层_构件规格_构件类型_构件定位_顺序码”。通过Dynamo数据处理,可以将模型构件中的各类信息提取出来并组合使用。涉及构件信息的读取和写入,需要用到Element.GetParameterValueByName(根据参数名获取参数值)节点和Element.SetParameterByName(根据参数名设置参数值)节点。本案例以结构柱为例。
提取构件信息→按要求格式组合字段并生成编码→写入构件实例参数“标记”。
3.案例知识点
● Element. GetParameterValueByName
● Element. SetPatameterByName
● FamilyType. Name
● FamilyType. ByName
4.案例详解
(1)编码要求。打开Revit案例文件,项目中已经绘制了一系列分属于不同楼层且不同类型的结构柱。
提取结构柱的构件信息,按“楼层_构件规格_构件类型_构件定位_顺序码”的格式组成编码,再写入结构柱。
“楼层”即为标高信息,在Revit中可以读取结构柱的实例参数“底部标高”;“构件规格”即为类型名称,如“HM298×201×9×14”;“构件类型”即为类型参数“类型注释”的相关信息;“构件定位”即为实例参数“柱定位标记”;构件“顺序码”在Revit中并没有,根据本章案例2的相关知识,按要求排序,并写入实例参数“注释”或其他空白参数里,最后再提取使用即可,如图2-37所示。
图2-37
(2)设置顺序码。进入Dynamo编辑界面,按类别选择所有结构柱构件,结合之前学的知识,先随机排序,然后用Element.SetPatameterByName(根据参数名设置参数值)节点将顺序码写入结构柱构件的实例参数“注释”中,如图2-38所示,这样便完成了简单顺序码的写入工作。
图2-38
(3)获取编码标高字段。接下来提取“底部标高”作为楼层信息字段:读取构件信息使用Element.Get ParameterValue By Name(根据参数名获取参数值)节点,如图2-39所示。
图2-39
提取出来的“底部标高”有名称和标高值两个信息,这里只需要标高的名称。在Revit→Elements(Revit图元)→Level(标高)→Name(获取标高名称),如图2-40所示。通过Level.Name(获取标高名称)节点便能提取标高名称。
图2-40
(4)获取编码标高及顺序码数据。同样的方法,提取实例参数“柱定位标记”和刚刚写入实例参数“注释”里的顺序码,如图2-41所示。
图2-41
(5)获取类型参数值。继续往下做会发现,同样的方法对“类型注释”的信息提取无效,如图2-42所示。
图2-42
这是因为在Revit中“类型注释”属于类型参数,区别于“注释”“柱定位标记”等实例参数,它代表一类构件的属性,不能直接从族类别这个层级即All Elements of Category(在项目中获取该族类别所有构件)节点中提取。类型参数和实例参数是Revit中相对重要的概念,通过Dynamo操作Revit,需要熟悉Revit的属性。
对于Revit中类型参数信息的读取或写入,需要先通过数据处理,得到FamilyType(族类型)或ElementType(实例类型)结果后,再进行参数读取或写入。
如图2-43所示,先通过FamilyType.Name(获取族类型名称)节点获取elements(Revit图元)族类型名称,再通过族类型名称获取族类型。
图2-43
在Revit→Elements(Revit图元)→FamilyType(族类型)中选择Name(获取族类型名称),先通过FamilyType.Name(获取族类型名称)节点提取元素的类型名称,再用FamilyType.ByName(根据名称获取族类型)节点返回族类型,如图2-44所示。看上去节点重复,实际上是先在族类别的层级下找到这类构件,然后再进行处理。
图2-44
(6)自定义编码。连接已有节点,现在只需要将信息按“楼层_构件规格_构件类型_构件定位_顺序码”的格式串联起来即可。
在之前的章节中已经讲过如何使用Code Block节点将字符串相加,读者可以自行尝试,如图2-45所示。
图2-45
最后通过Element.SetParameterByName(通过参数名设置参数值)节点将信息录入构件,这便按要求格式完成了编码工作。读者可以尝试通过Data.ExportExcel(将数据导入到Excel)节点将编码数据再写入Excel表格。