X
返回顶部
当前位置: 首页> BIM资讯> BIM技术

Revit梁创建方法:Dynamo for Revit 自动生成门窗过梁

发布:中文网小编3号 浏览:4442人 分享
发布于:2020-11-07 18:26

    我们用Revit画门窗洞口上方的过梁时,需要准确定位过梁的标高,如果门窗洞口的高度不一,洞口数量较多时,绘制过梁的时候工作量巨大。本文利用Dynamo来自动生成过梁,创建一次Dynamo文件即可多次重复利用,可以方便快捷地完成过梁的创建。

    我们用一个简单点的项目来演示,如下图所示。这个项目中有两中类型的墙,外墙为240mm厚,内墙为120mm厚,意味着我们要在不同的墙上创建不同尺寸的过梁。并且,这个项目中有两种类型的窗和两种类型的门,不同的类型它们的高度不一样,算是添加一点小难度。

image.png

    一个小项目

    第一步:创建不同截面尺寸的过梁

    创建不同族类型的过梁

    第二步:在Dynamo中选择所有的墙和门窗

    我们使用族类别的方式可以一次选择所有的门、窗和墙,选择Revit元素的方式有很多,大家也可以用其他的方式进行选择。

    节点如下图所示:

image.png

    选择所有门、窗和墙

    第三步:判断门、窗分别在哪堵墙上

    判断门、窗分别在哪堵墙上,核心的节点是“Geometry.DoesIntersect”,通过判断两个构件是否相交,比如某扇门和某堵墙在该节点中比较后的结果为true,表示该扇门在该堵墙上。首先,我们要将Revit元素转化为Dynamo图元(Geometry)才能使用这个节点。

image.png

    如上图所示:右侧红圈中0list下有0-6共7个list,分别表示第0号门和所有的墙(0-6共7堵墙)比较的结果。在右边红圈中0list下的7个list中,只有一个list中包含true,上图中为4list中包含true,表示第0扇门在第4号墙上。

    同样的,每扇门与所有的墙比较都能生成7个@L2级别的list,一共生成了3×7=21个@L2级别的list。在这21个list中,只有3个list中包含true,因此,我们将墙重复3次(重复的次数和门的数量一致)后为21堵墙,与list数量匹配,然后使用“List.FilterByBoolMask”节点就可以找出每扇门对应在哪堵墙上。

    同样的方法找出每扇窗在哪堵墙上。

    节点如下:

image.png

    判断门、窗分别在哪堵墙上

    第四步:获取门、窗的位置

    获取门、窗的位置的方法很简单,只需使用“Element.GetLocation”节点,门和窗的位置都是一个点。

    节点如下:

image.png

    获取门窗的位置

    第五步:创建过梁的定位线

    Dynamo中创建梁是通过梁的定位线和梁的类型来生成的,因此我们需要先创建梁的定位线,生成梁定位线的方法比较复杂。

    虽然复杂,但是其核心思路仍然比较好理解,这里以门的过梁定位线为例:

    核心思路:通过门的位置,即门的定位点平移两次,第一次沿着墙长的一个方向平移过梁长度的一半,第二次沿着墙长的另一个方向偏移相同的长度,通过两点连线生成过梁定位线。

    需要解决的问题:

    获取墙的方向:通过墙的定位线求向量

    获取过梁长度的一半:通过求门的宽度,取一半,加上过梁伸入墙中的长度,这里为了方便,240过梁取伸入墙中240mm,120过梁取伸入墙中120mm。

    针对第一个问题的解决方法,我们知道,需要先获取墙的定位线,然后通过“Line.Direction”节点获取定位线的方向。

    针对第二个问题的解决方法,门的宽度是类型参数,用“Element.GetParameterValueByName”节点无法直接获取元素的参数值,这个节点只能直接获取实例参数的值。因此我们用“Element.ElementType”节点先获取元素的族类型,然后再通过“Element.GetParameterValueByName”节点可以获取类型参数的值。

    获取了门的宽度以后,我们还需判断该扇门所在的墙是240mm还是120mm。如果是240墙,一侧需加上伸入墙的长度为240mm;如果是120墙,一侧需加上伸入墙的长度为120mm。在第三步操作中我们已经判断出了哪扇门在哪堵墙上,只需要直接加上所在墙的墙厚即可。因为墙的厚度参数为类型参数,因此我们同样需要用上面的方法来获得类型参数的参数值。

    有了上述值以后,我们使用“Geometry.Translate”节点来平移门的定位点。

    平移两次以后得到两个点,这是过梁定位线的两个端点,通过“Line.ByStartPointEndPoint”节点即可生成门过梁的定位线。

    窗过梁的定位线同样根据上述操作可以获得。节点如下。

image.png

    创建过梁定位线

    第六步:生成过梁,调整参数

    有了定位线以后,通过“StructuralFraming.BeamByCurve”节点可以生成过梁。

    这里有一个点需要注意,不同的墙上过梁的类型是不同的,因此我们在创建门或窗的过梁时,需要用“If”节点先判断门或窗所在的墙是240墙还是120墙。如果是240墙选择240过梁类型进行创建,否则使用120过梁类型进行创建。

    节点如下:

image.png

    创建过梁

    第七步:调整过梁参数

    但是我们切换到Revit中可以发现过梁的高度位置不正确,如下图所示。

image.png

    过梁位置不正确

    我们需要设置过梁的几个参数才能定位到正确的位置。在Revit中我们发现有几个参数控制着过梁的位置,如下图所示。

image.png

    控制过梁位置的参数

    首先我们需要设置“参照标高”,这里我们设置为“标高1”。

    接着设置“起点标高偏移”和“终点标高偏移”,过梁是水平的,所以这两个参数的值相同,都是“门或窗的顶高度加上过梁的高度”。

    知道了方法以后我们需要获取门或窗的“顶标高”参数值,“顶标高”参数为实例参数,只需使用“Element.GetParameterValueByName”节点即可获取。

    然后我们需要获取过梁的高度,过梁的高度和所在墙的厚度是一致的,因此,我们可以直接使用之前获取的墙厚值。

    有了上述参数值以后,只需要通过节点赋值给相应的参数以后就可以了。节点如下。

image.png

    调整过梁位置

    通过修改相应的参数值以后,在Revit中可以发现过梁都处在正确的位置上了。如下图所示。

image.png

    调整位置后


BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.wanbim.com),一起共同探讨学习BIM技术,了解BIM应用!