掌桥专利:专业的专利平台
掌桥专利
首页

一种基于dynamo的构件有序标记方法

文献发布时间:2023-06-19 19:28:50


一种基于dynamo的构件有序标记方法

技术领域

本公开涉及BIM技术领域,尤其涉及一种基于dynamo的构件有序标记方法。

背景技术

在我国加快发展建筑工业化的大背景下,幕墙,保温板和瓷砖等建筑构件的生产、裁切均开始向工厂化加工靠拢。为便于工厂化加工,这就需要在目标建筑的BIM三维模型中,根据矩阵排列的建筑构件的位置信息,对建筑构件进行有序的标记,形成二维标记图纸。相关技术中,手动对每个构件进行有序标记并绘制二维标记图,效率低下,出错率高。

发明内容

为克服相关技术中存在的问题,本公开提供一种基于dynamo的构件有序标记方法,以解决上述的问题。

根据本公开实施例的第一方面,提供一种基于dynamo的构件有序标记方法,所述方法包括:

获取构件分布排布的三维BIM模型;

利用dynamo程序获取所述三维BIM模型中的每个构件图元;

对所有的构件图元进行所在平面上的第一方向和第二方向排序;

利用Element.SetParameterByName节点确定排序后的每个构件图元的标记内容;

利用Tag.ByElementAndLocation节点根据所述标记内容为每个构件添加标记,形成二维标记图;

其中,Element.SetParameterByName节点的element输入端输入经过排序后的构件图元列表;ParameterName输入端输入编号;Value输入端输入设定的格式,其中,所述格式包括:字符数量,连接符。

在一种实施方式中,对所有的构件图元进行所在平面上的第一方向和第二方向排序,包括:

对所有的构件图元进行第一方向的排序得到多个不同的行;

在每一行中,对该行中的每个构件图元进行第二方向的排序;

对所有的构件图元进行第一方向的排序得到多个不同的行,包括:

利用Vector.Z节点和==节点确定每个构件图元的最大面积的第一外表面;具体为,Vector.Z节点的输出端连接==节点的x端输入端,==节点的y输入端设置为-1,==节点的输出端输出向量值为-1的最大面积的第一外表面;

利用Surface.PointAtParameter节点确定每个构件图元的所述第一外表面的中心点的参数,其中,所述Surface.PointAtParameter节点的u端和v端的参数设置为0.5;

利用Point.Z节点确定所述第一外表面的中心点Z坐标;

利用List.SortByKey节点对所述第一外表面的中心点Z坐标进行排序得到Z坐标的列表;

利用List.GroupByKey节点对所述Z坐标列表按照Z坐标值进行分组,得到多个组;

所述List.GroupByKey节点的keys输入端连接所述List.SortByKey节点的sortedkeys输出端;

所述List.GroupByKey节点的list输入端连接所述List.SortByKey节点的sortedlist输出端;

其中,每组作为一行。

在一种实施方式中,利用ListSortByKey节点对每个构件图元的外表面的中心点的Z坐标进行排序得到多个不同的Z坐标之前,还包括:对所述Z坐标进行缩小处理和取整处理,

具体包括:利用第一CodeBlock节点实现Z坐标缩小处理;在该节点中设置比例值;所述第一CodeBlock节点的输入端连接Point.Z节点的输出端;

利用Math.Round节点对缩小的Z坐标进行取整处理;所述Math.Round节点的输入端连接所述第一CodeBlock节点的输出端。

在一种实施方式中,在每一行中,对该行中的每个构件图元进行第二方向的排序,包括:

在每个同一个行组中的构件图元,利用Solid.Centroid节点确定每个构件图元的中心点;

利用Point.X节点获取每个构件图元的中心点的X坐标值;

利用Point.Y节点获取每个构件图元的中心点的Y坐标值;

利用第二ListSortByKey节点对每个构件图元按照X,和/或Y的值进行排序;

所述第二ListSortByKey节点的keys输入端连接所述第一CodeBlock的输出端。

在一种实施方式中,利用所述第二ListSortByKey节点对每个构件图元按照X和Y的值进行排序,包括:

利用第二CodeBlocek节点实现X值和Y值的相加运算,其中,所述第二CodeBlocek节点的n输入端连接Point.X节点的输出端;m输入端连接Point.Y节点的输出端;计算公式设置为:m+n;所述第二CodeBlocek节点的输出端连接了所述第二ListSortByKey节点的输入端。

在一种实施方式中,Value输入端输入设定的格式,包括:

利用第三CodeBlock节点设定连接符,以及所述连接符的左侧部分字符和右侧部分字符;

其中,第三CodeBlock节点的输出端连接所述Value输入端;

所述第三CodeBlock节点的第一输入端设定左侧部分;第二输入端设定右侧部分;

对于左侧部分字符,利用第一String.Remove节点确定每个构件图元的名称的字符串,以及所述名称中删除的字符数量;以及该名称的左侧第一个字符之前的空格数量;

其中,利用Element.GetParameterValueByname节点获取每个构件图元的名称。

在一种实施方式中,对于右侧部分字符,利用第一String.PadLeft节点确定每个构件图元的编号,以及每个编号的字符串的宽度;

利用Count节点确定构件的数量;

利用第四CodeBlock节点实现对于所述数量按照预定顺序进行排序,以得到每个构件的编号;所述编号输入到所述第一String.PadLeft节点的str输入端;

所述第四CodeBlock节点的输入端连接所述Count节点的输出端;

所述第一String.PadLeft节点的newWidth输入端输入字符串的宽度值。

在一种实施方式中,利用Tag.ByElementAndLocation节点根据所述标记内容为每个构件添加标记,包括:

使用Tag.ByElementAndLocation节点的location输入端输入标记的位置信息;

使用ZK.BoundingBox.CenterPoint节点确定所述标记的中心点;

所述ZK.BoundingBox.CenterPoint节点的输出端连接所述Tag.ByElementAndLocation节点location输入端。

在一种实施方式中,还包括:

采用Filter.Byname节点筛选出目标构件图元;

所述Filter.Byname节点的value输入端输入目标构件图元的名称关键字;

所述Filter.Byname节点的rule type输入端设置筛选的规则为“包含”。

在一种实施方式中,还包括:

根据每个构件的尺寸确定所述构件的标记类型,具体包括:

采用&&节点、第一==节点和第二==节点筛选出长度和宽度都等于标准值的类型为标准构件的构件图元,以及非标准构件的构件图元;

采用第一ChangeFamilyType节点为所述标准构件的构件图元设定类型为标准构件;

所述第一ChangeFamilyType节点的typeld输入端输入标准构件类型标识;Element输入端连接List.FilterByBoolMask节点的in输出端;

所述List.FilterByBoolMask节点的mask输入端连接所述&&节点输出端;list输入端输入所有的构件图元的标记列表;

采用第二ChangeFamilyType节点为所述非标准构件的构件图元设定类型为非标准构件;

所述第二ChangeFamilyType节点的typeld输入端输入非标准构件类型标识;Element输入端连接所述List.FilterByBoolMask节点的out输出端;

其中,所述第一==节点用于筛选出长度小于长度标准值的第一类构件图元;

所述第二==节点用于筛选出宽度小于宽度标准值的第二类构件图元;

所述&&节点用于对所述第一类构件图元和第二类构件图元取交集;

所述第一==节点的y输入端输入标准宽度值;x输入端输入每个构件图元的宽度值;

所述第二==节点的y输入端输入标准长度值;x输入端输入每个构件图元的长度值;

采用第一Element.GetParameterValueByname节点确定每个构件图元的宽度值;其中,所述Element.GetParameterValueByname节点的parameterName输入端输入值为宽度;

第一Element.GetParameterValueByname节点的输出端连接所述第一==节点的x输入端;

采用第二Element.GetParameterValueByname节点确定每个构件图元的长度值;其中,所述第二Element.GetParameterValueByname节点的parameterName节点输入值为长度;

第二Element.GetParameterValueByname节点的输出端连接所述第二==节点的x输入端。

本公开的实施例提供的技术方案可以包括以下有益效果:本申请的上述的方法,利用了dynamo语言预先编制了程序,dynamo语言程序具有可视化的特点,提高编程效率,方便用户进行操作,实现了自动根据构件的BIM的三维模型生成二维排布图,并且每个构件设置有标记,标记内容可以包括构件的编号,有利于对构件进行进一步的分析统计工作。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1是根据一示例性实施例示出的一种基于dynamo的构件有序标记方法的流程图;

图2是根据一示例性实施例示出的一种构件的二维分布示意图;

图3是根据一示例性实施例示出的图元排序的dynamo程序图;

图4是根据一示例性实施例示出的另一种图元排序的dynamo程序图;

图5是根据一示例性实施例示出的一种格式设置的dynamo程序图;

图6是根据一示例性实施例示出的一种标记设置的dynamo程序图;

图7是根据一示例性实施例示出的一种类型标记的dynamo程序图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

需要说明的是,本申请中所有获取信号、信息或数据的动作都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。

本申请提出了一种基于dynamo的构件有序标记方法,参见附图1所示的一种基于dynamo的构件有序标记方法的流程图;该方法可以包括以下的步骤:

步骤S102中,获取构件分布排布的三维BIM模型。

在本实施例中,上述构件可以包括,保温板,幕墙,瓷砖等。可以预先获取构件分布排布的目标建筑的目标墙面的BIM三维模型图。在该BIM三维模型图中,在目标墙面上分布排布有多个构件。

步骤S104中,利用dynamo程序获取所述三维BIM模型中的每个构件图元。

在本实施例中,可以预先编制dynamo程序,利用dynamo程序来获取三维BIM模型中的每个构件图元。

步骤S106中,对所有的构件图元进行所在平面上的第一方向和第二方向排序。

在本实施例中,可以预先编制dynamo程序,对所有的构件图元进行所在平面上的横向和纵向的排序,得到二维分布图。

步骤S108中,利用Element.SetParameterByName节点确定排序后的每个构件图元的标记内容。

其中,标记内容可以包括:该构件所在的立面墙的编号,以及该构件在该立面墙中的编号。

步骤S110中,利用Tag.ByElementAndLocation节点根据所述标记内容为每个构件添加标记,形成二维标记图。

其中,Element.SetParameterByName节点的element输入端输入经过排序后的构件图元列表;ParameterName输入端输入编号;Value输入端输入设定的格式,其中,所述格式包括:字符数量,连接符。

示例性的,构件的标记为:LM01-030,其中,LM01为立面墙的编号,-为连接符,字符数量为4,代表连接符左侧的字符数量为4个。030为该构件在所在的立面墙中的编号。

参见附图2所示的一种构件的二维分布示意图,在该二维分布示意图中,根据构件在三维模型中的排布位置,生成了二维分布图,并且,为每个构件生成了标记。

本申请的上述的方法,利用了dynamo语言预先编制了程序,dynamo语言程序具有可视化的特点,提高编程效率,方便用户进行操作,实现了根据构件的三维模型生成二维排布图,并且每个构件设置有标记,有利于对构件进行进一步的分析统计工作。

在一种实施方式中,步骤S106中,对所有的构件图元进行所在平面上的第一方向和第二方向排序,可以进一步包括以下步骤:

对所有的构件图元进行第一方向的排序得到多个不同的行;在每一行中,对该行中的每个构件图元进行第二方向的排序。

参见附图3-4所示的图元排序的dynamo程序图,对所有的构件图元进行第一方向的排序得到多个不同的行,包括:

利用Vector.Z节点和==节点确定每个构件图元的最大面积的第一外表面;具体为,Vector.Z节点的输出端连接==节点的x端输入端,==节点的y输入端设置为-1,==节点的输出端输出向量值为-1的最大面积的第一外表面。

示例性的,参见附图3中,在上述的Vector.Z节点之前,还设置有PolySurface.Surfaces节点,用于获取每个构件的所有的整个曲面。

利用Surface.PointAtParameter节点确定每个构件图元的所述第一外表面的中心点的参数,其中,所述Surface.PointAtParameter节点的u端和v端的参数设置为0.5。利用Point.Z节点确定所述第一外表面的中心点Z坐标。

利用List.SortByKey节点对所述第一外表面的中心点Z坐标进行排序得到Z坐标的列表。

利用List.GroupByKey节点对所述Z坐标列表按照Z坐标值进行分组,得到多个组。

所述List.GroupByKey节点的keys输入端连接所述List.SortByKey节点的sortedkeys输出端。

所述List.GroupByKey节点的list输入端连接所述List.SortByKey节点的sortedlist输出端。其中,每组作为一行。

为了消除Z坐标的误差而导致的遗漏现象,参见附图4,在一种实施方式中,利用ListSortByKey节点对每个构件图元的外表面的中心点的Z坐标进行排序得到多个不同的Z坐标之前,对所述Z坐标进行缩小处理和取整处理,具体包括:利用第一CodeBlock节点实现Z坐标缩小处理;在该节点中设置比例值;所述第一CodeBlock节点的输入端连接Point.Z节点的输出端。

利用Math.Round节点对缩小的Z坐标进行取整处理;所述Math.Round节点的输入端连接所述第一CodeBlock节点的输出端。

示例性的,在一排的十个构件中,九个构件的Z坐标都为1400毫米,可以把这九个构件都列为一组,在同一行。但是,第十个构件由于三维模型中的放置误差,可能其Z坐标为1450毫米,如果按照单纯的Z坐标考虑,就不会把该第十个构件列为上述的同一行中,造成遗漏。

所以,本申请的上述的方法中,可以把Z坐标先经过缩小处理,缩小处理时,可以设定上述比例值为0.01,Z坐标变为14.5,再经过Math.Round节点的去零取整,变为14。这样,就可以避免遗漏。当然,上述比例值也可以灵活设定为其他值。

在一种实施方式中,参见附图4,在每一行中,对该行中的每个构件图元进行第二方向的排序,包括:

在每个同一个行组中的构件图元,利用Solid.Centroid节点确定每个构件图元的中心点;

利用Point.X节点获取每个构件图元的中心点的X坐标值;

利用Point.Y节点获取每个构件图元的中心点的Y坐标值;

利用第二ListSortByKey节点对每个构件图元按照X,和/或Y的值进行排序;

所述第二ListSortByKey节点的keys输入端连接所述第一CodeBlock的输出端。

在一种实施例中,可以利用第二ListSortByKey节点对每个构件图元按照X的值进行排序。这种实施例中,每个构件的Y值相同,X值不同。也就是,构件所在的立面墙为水平横向设置,该立面墙平行于X轴。

在一种实施例中,可以利用第二ListSortByKey节点对每个构件图元按照Y的值进行排序。在这种实施例中,每个构件的X值相同,但是Y值不同。也就是,构件所在的立面墙为竖直纵向设置,该立面墙平行于Y轴。

在一些实施例中,参见附图4,利用所述第二ListSortByKey节点对每个构件图元按照X和Y的值进行排序,包括:

利用第二CodeBlocek节点实现X值和Y值的相加运算,其中,所述第二CodeBlocek节点的n输入端连接Point.X节点的输出端;m输入端连接Point.Y节点的输出端;计算公式设置为:m+n;所述第二CodeBlocek节点的输出端连接了所述第二ListSortByKey节点的输入端。在这种实施例中,每个构件的X值和Y值都不相同。也就是,构件所在的立面墙为斜向设置。可以计算每个构件的X值和Y值的和值,可以根据上述和值进行排序。

在一种实施方式中,参见附图5,Value输入端输入设定的格式,包括:

利用第三CodeBlock节点设定连接符,以及所述连接符的左侧部分字符和右侧部分字符。

其中,第三CodeBlock节点的输出端连接所述Value输入端。

所述第三CodeBlock节点的第一输入端设定左侧部分;第二输入端设定右侧部分。

对于左侧部分字符,利用第一String.Remove节点确定每个构件图元的名称的字符串,以及所述名称中删除的字符数量;以及该名称的左侧第一个字符之前的空格数量。

其中,该第一String.Remove节点的count输入端输入预定的视图名称中从左侧删除的字符串的数量,startindex输入端中输入空格数量,可以设置为0。

其中,利用Element.GetParameterValueByname节点获取每个构件图元的名称。

示例性的,视图名称为:双层集成标准真空保温板,如果设定删除两个字符之后,则视图名称为:集成标准真空保温板。

在一种实施方式中,参见附图5,对于右侧部分字符,利用第一String.PadLeft节点确定每个构件图元的编号,以及每个编号的字符串的宽度;

利用Count节点确定构件的数量。

利用第四CodeBlock节点实现对于所述数量按照预定顺序进行排序,以得到每个构件的编号;所述编号输入到所述第一String.PadLeft节点的str输入端。

所述第四CodeBlock节点的输入端连接所述Count节点的输出端。

所述第一String.PadLeft节点的newWidth输入端输入字符串的宽度值。

示例性的,如果构件的数量为100个,newWidth输入端输入字符串的宽度值为3,则构件的编号从001-100。

在一种实施方式中,参见附图6,利用Tag.ByElementAndLocation节点根据所述标记内容为每个构件添加标记,包括:

使用Tag.ByElementAndLocation节点的location输入端输入标记的位置信息;使用ZK.BoundingBox.CenterPoint节点确定所述标记的中心点。

所述ZK.BoundingBox.CenterPoint节点的输出端连接所述Tag.ByElementAndLocation节点location输入端。

示例性的,参见附图2中,每个构件的标记的位置位于构件图元的中心位置。

在一种实施方式中,还包括:采用Filter.Byname节点筛选出目标构件图元;所述Filter.Byname节点的value输入端输入目标构件图元的名称关键字;所述Filter.Byname节点的ruletype输入端设置筛选的规则为“包含”。

在本实施例中,可以输入目标构件图元的名称的关键字,比如,关键字设置为:真空板。Filter.Byname节点可以筛选出名字包含真空板的构件,也就是筛选出真空板。

在一种实施方式中,参见附图7,根据每个构件的尺寸确定所述构件的标记类型,具体包括:

采用&&节点、第一==节点和第二==节点筛选出长度和宽度都等于标准值的类型为标准构件的构件图元,以及非标准构件的构件图元。

其中,上述的&&节点用于将两个输入的数据进行与运算;上述的==节点用于判断两个输入的数据是否相等,如果相等,则输出为True,否则,输出false。

采用第一ChangeFamilyType节点为所述标准构件的构件图元设定类型为标准构件。其中,所述第一ChangeFamilyType节点的typeld输入端输入标准构件类型标识。Element输入端连接List.FilterByBoolMask节点的in输出端。

所述List.FilterByBoolMask节点的mask输入端连接所述&&节点输出端;list输入端输入所有的构件图元的标记列表。

采用第二ChangeFamilyType节点为所述非标准构件的构件图元设定类型为非标准构件。其中,所述第二ChangeFamilyType节点的typeld输入端输入非标准构件类型标识;Element输入端连接所述List.FilterByBoolMask节点的out输出端。

其中,所述第一==节点用于筛选出长度小于长度标准值的第一类构件图元。

所述第二==节点用于筛选出宽度小于宽度标准值的第二类构件图元。

所述&&节点用于对所述第一类构件图元和第二类构件图元取交集;

所述第一==节点的y输入端输入标准宽度值;x输入端输入每个构件图元的宽度值。

所述第二==节点的y输入端输入标准长度值;x输入端输入每个构件图元的长度值。

采用第一Element.GetParameterValueByname节点确定每个构件图元的宽度值;其中,所述Element.GetParameterValueByname节点的parameterName输入端输入值为宽度。

第一Element.GetParameterValueByname节点的输出端连接所述第一==节点的x输入端。

采用第二Element.GetParameterValueByname节点确定每个构件图元的长度值;其中,所述第二Element.GetParameterValueByname节点的parameterName节点输入值为长度。

第二Element.GetParameterValueByname节点的输出端连接所述第二==节点的x输入端。

本领域技术人员在考虑说明书及实践本公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

相关技术
  • 一种基于Dynamo的装配式构件信息提取方法及系统
  • 基于Dynamo的Revit内构件族快速编码的方法
技术分类

06120115919526