APP下载

Dynamo for Revit在基坑围护结构建模中的应用

2020-11-24孔祥平

土木建筑工程信息技术 2020年2期
关键词:工时图层钢板

吴 樊 闫 智 孔祥平

(上海城建信息科技有限公司,上海 200120)

1 BIM的发展现状

国内外近几年都在大力推广BIM技术,这个以数字化和信息化集成的技术在国内外都得到了快速认可[9]。BIM 技术集成了工程全生命周期的信息,可以帮助工程技术人员对工程项目的具体信息准确把控,使工程各个阶段紧密联合,BIM技术实施以三维数字设计与工程软件作为支撑,二者形成了可视化的数字建筑模型[1]。

可视化的数字模型是BIM技术中应用的基础,建筑信息模型几何信息与非几何信息的完整度、精细度和准确度是BIM技术应用的关键[11]。Autodesk Revit是一款三维建模软件,在国内市场应用最为广泛,软件可以进行建筑、结构、风系统、水系统、电系统、场布等建模工作,而其自带的参数化功能可实现构件的参数化生成、编辑及属性赋值等功能,可以大大提高工作效率,提升建筑信息模型的精度与品质。目前,Revit现有的建模方式有四种,自由形式建模,自带族库建模,外部引入族建模,Dynamo for Revit参数化建模[2]。

Dynamo是一个基于Revit的可视化编程平台,Dynamo为BIM工程师提供了一个可视化编程工具[10],让BIM工程师通过定义程序流程,探索参数化的方案设计和自动化建模与模型检查工作流[3]。Dynamo可以根据读取到的线路信息生成、调整和放置Revit的族[7],更快地解决设计细节,通过Dynamo可以实现盾构隧道模型、地质模型、桥梁模型等复杂模型的快速创建。

2 项目概况

钢板桩以其承载力好,水密性好,耐久性好,施工简便环保,作业高效并可回收反复使用的特点,经常使用在土木工程中。在进行围护结构建模的时候需要放置钢板桩,同一项目所需要放置钢板桩的样式通常是一样的,但是每个钢板桩的尺寸差异较大,对于一个2万m2的场地,放置钢板桩是一个麻烦而又耗时的过程。

项目要求:第一步按照表格给的尺寸创建三维模型; 第二步将模型按照图纸放置到对应位置; 第三步将表格中的参数输入到对应的钢板桩上; 第四步根据图纸对钢板桩进行编码,便于后期放入到平台监测和维护; 最后给每个钢板桩添加标注,便于后期出图。钢板桩的尺寸大小不一样需要建立多个模型,人工放置模型又是一件十分费时费力的任务,针对项目特点,所以决定采用Dynamo参数化建模的方式生成模型。

3 技术路线

根据Dynamo for Revit参数化建模方法可以得技术路线如图1所示。

图1 技术路线图

图2 提取图层信息

首先分析现有的项目概况知道需要解决什么问题即在已给的地形中放置钢板桩并赋予相应的属性信息,其次根据已有的项目信息获取可用的条件,即根据图纸获取放置路径,然后建立适合本项目特点的钢板桩自适应族,根据路径放置钢板桩,接着整理需要复制的参数信息,用Dynamo所写的程序将整理好的信息赋值到每个模型中,最后给每个模型添加标注,生成最终的参数化模型。

4 基坑围护结构钢板桩的参数化模型构建方法研究

4.1 参数化设计方法

(1)读取CAD并筛选出需要的线

用Dynamo读取导入到Revit中的.dwg文件的图层信息,对比结果筛选出需要的信息如图2所示。

(2)取短线中点并两两成组

根据建模要求,结合建模思路,容易发现,我们只需获得放置Sheetpile的点,就可以放置Sheetpile。对比图纸信息,我们需要读取图纸中短线的中点,然后将获取的点,按照X值递增顺序进行排序,之后再将排序后的点两两成组生成List,每一组的两个点就可以精确放置一个Sheetpile。

(3)删除间断位置的点数组

根据实际情况如图3所示,Sheetpile的放置路径不是一条连续的线,而是多条间断路径,所以需要将这些间断的地方从第2步中生成的List中去掉,如图4所示。

图3 放置路径

图4 去除间断点

(4)奇偶分组

Sheetpile的方向是对称放置的,现在有两种方式放置,一是在Revit中用Dynamo参数化建模生成全部Sheetpile,然后手动调整为对称模型,二是用Dynamo直接生成对称模型。因为用Dynamo生成也就是奇数的数组和偶数的数组处Sheetpile的方向是不一样的,所以要对第2步生成的List进行奇偶分组。Sheetpile整体放置顺序由X轴从小到大放置,奇数组放置顺序为左边点1到右边点2。偶数组是对称的,所以放置顺序为右边点1到左边点2,如图5所示。

图5 偶数组倒序

(5)放置自适应族

Sheetpile是自适应族,将表格按照Mark顺序重新排序,放置族。族有四个参数,其中每个Sheetpile相对应的参数不一样,将整理好的表格中的数据,按照参数名称为列,提取出来,并赋值到对应的Sheetpile相对应的参数上。

(6)用标签族添加标注,然后手动调整标签族的位置。

生成模型结果如图6所示,模型参数信息如图7所示。

图6 Sheetpile成果图

图7 Sheetpile信息参数

4.2 参数化建模方式与手动建模的效率对比

我们用Dynamo解决参数化建模的目的是为了保证工作质量的同时提高工作效率,如图8柱状图分析,我们在处理项目问题的时候将工作分为了四部分,分别为:在对应的点处放置自适应族; 放好后将偶数位的族翻转过来; 在每个族中输入Mark、Length、Top level等信息; 添加标注。四项工作分别耗时约1工时、0.5工时、2.5工时和2.5工时,而用Dynamo放置自适应族,只需要耗时约50分钟写好程序,然后用几分钟的时间运行程序。根据柱状图的最后一列可以明显看出,传统方式处理问题所耗费的时间约为用Dynamo参数化建模所耗费的时间6.5倍,而当所需要放置的模型量越大,这种数据结果对比程度更加明显,也就是说用Dynamo参数化建模的效率更加显著。

图8 工作效率分析对比图

5 利用Dynamo快速放置Revit族并赋值属性信息

在实际工程中会遇到很多类似问题,比如在做桩模型的时候也可以用这个思路来解决问题。如图9所示,项目需要创建结构钻孔桩模型,其中桩的类型有两种,每种类型有三种管径,总共有两千多个桩。如果手动放置大概需要消耗一个工作人员一天的工时,然后按照要求,两个桩之间不能有剪切现象,则再需一个工作人员一天的工时去取消剪切。所以我们借用上一个问题的思路,并根据这个的实际项目难点,来解决放桩问题。

图9 放置路径

从图9可以看出,此任务和上一个任务的区别在于,钢板桩是沿线放置的,但是此项目的桩是按照桩的中心点放置的。解决问题步骤如下:

(1)用CAD处理图纸,筛选出来需要的信息,导入到Revit中。

(2)用Dynamo提取导入到Revit中的CAD数据,选出需要的图层,读取需要的红、蓝两图层的信息,如图10所示。

图11 处理图层信息

图10 获取图层信息

(3)处理图层信息:因为桩径分为三种:600, 750, 900,所以每个图层都按照桩径划分为三类,如图11所示。

(4)桩是圆柱形桩,创建的桩族中心点是桩的圆心,所以放置桩的位置是CAD图中圆的圆心,即需提取圆中心点的数据。

(5)选择每个桩径对应的族,结合圆心点位置,用Dynamo生成参数化模型。

(6)Revit生成的构件默认自动剪切,所以调用不连接节点,使放置好自动剪切的桩分开,如图12所示。

图12 Getjoined节点和unjoin节点

Dynamo自带节点中没有让两个构件不连接的节点,但是Revit API中有GetJoinedElements找出连接构件命令和UnjoinGeometry使构件不连接命令,要想实现这两个命令我们可以在Dynamo中用代码调用Revit中的API写成节点[5],让其可以判断读取到的数据,并让数据之间不连接[4]。

首先将两个类型的三种尺寸规格的桩通过Dynamo放置到准确位置,然后每个类型的桩分别排列成一个List,然后,通过Get joined节点获取与放置的第一个类型的桩相互连接的桩,并生成列表。最后,通过Unjoin节点将放置的第一个类型的桩与通过Get joined节点获取的与之相连接的桩,取消相互连接。

此两个节点的部分关键代码如下:

doc=DocumentManager.Instance.CurrentDBDocument

items1=UnwrapElement(IN[0])

def getjoin(doc, item1):

try:

out=JoinGeometryUtils.GetJoinedElements(doc,item1)

return out

except:return False

TransactionManager.Instance.EnsureInTransaction(doc)

if isinstance(IN[0], list):

a=[getjoin(doc, x)for x in items1]

else:

a=getjoin(doc, items1)

TransactionManager.Instance.TransactionTaskDone()

JE=[]

if isinstance(a, list):

for je in a:

#for aa in je:

JE.append(Document.GetElement(doc,aa).ToDSType(True)for aa in je)

else:

JE.append(Document.GetElement(doc,aa).ToDSType(True)for aa in a)

#LJE=[JE]

OUT=JE

doc=DocumentManager.Instance.CurrentDBDocument

items1=UnwrapElement(IN[0])

items2=UnwrapElement(IN[1])

def unjoin(doc, item1, item2):

try:

JoinGeometryUtils.UnjoinGeometry(doc,item1,item2)

return True

except:return False

TransactionManager.Instance.EnsureInTransaction(doc)

if isinstance(IN[0], list):

if isinstance(IN[1], list):

for x,y in zip(items1,items2):

OUT=[unjoin(doc, x, a)for a in y]

else:OUT=[unjoin(doc, x, items2)for x in items1]

else:

if isinstance(IN[1], list):OUT=[unjoin(doc, items1, x)for x in items2]

else:OUT=unjoin(doc, items1, items2)

TransactionManager.Instance.TransactionTaskDone()

生成模型结果如图13所示。

图13 生成桩结果图

与建钢板桩模型相比,本节参数化建立结构钻孔桩模型都是用Dynamo节点库写好程序,然后参数化生成模型,但是也有区别,本节在使用现有的节点已经不能快速完成模型,于是调用Revit的API写了新的适合本项目的节点解决了问题。两种方法都能生成模型,但是对待不同的项目应该具体问题具体分析,选择出最适合本项目的方法,快速高效地解决问题。

6 结论与展望

用Dynamo参数化建模可以将复杂的问题简单化,沿用此种方法,可以解决很多建模问题[6],当一个简单而又重复性的工作摆在你面前,可以使用参数化的方式解决,不仅高效而且准确[8]。参数化建模具有以下优点:

(1)提高建模速度。用参数化建模方法可以批量建模,相比于传统建模方法大大提高了建模效率。

(2)确保模型精度。用参数化建模的方法可以避免人工失误,提高模型的准确率以及模型精度。

(3)全过程可视化。Dynamo是可视化的插件,整个参数化的过程都是可以在Dynamo或者是Revit中可以看到的,如果有问题可以及时发现及时修正。

(4)应用范围广。参数化模型具有属性信息可以直接放在平台上管理,也可以直接进行出图。

在钢板桩的参数化建模中使用现有的节点可以解决问题,但在结构钻孔桩参数化建模的时候,使用自行编写的Python节点才能解决建模需求[12]。上述表明,虽然Dynamo现有的节点能够解决大量的问题,但是节点是有限的,且不具有普遍适用性,这就跟Revit的族库一样,我们可以将自己写的节点扩充到节点库,让对解决实际工作进程和效益有着很大的帮助。

猜你喜欢

工时图层钢板
双钢板与锁定钢板在复杂肱骨近端骨折治疗中的疗效比较
探讨拉森钢板桩在市政工程基坑支护中的应用
浅析国有企业如何推行标准工时管理
为《飞舞的空竹龙》加动感
特殊工时制不能成为企业“变相剥削”的工具
非加劲钢板剪力墙显著屈服位移角的研究
解密照片合成利器图层混合模式
钢板组装式屏蔽体的关键技术浅析
用Photoshop图层技术制作精美邮票
随心所欲制作逼真阴影效果