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

一种基于Dynamo的闸门设备批量建模方法

文献发布时间:2024-04-18 19:58:30


一种基于Dynamo的闸门设备批量建模方法

技术领域

本发明涉及建筑信息数字化模型技术领域,具体而言,涉及一种基于Dynamo的闸门设备批量建模方法。

背景技术

Building Information Modeling(BIM)技术正在逐渐成为建筑行业的主流,并在不断发展和普及。建筑设计、施工、维护到运营管理等多个阶段都在使用BIM技术。BIM技术为不同阶段的工程目标的实现提供高效的帮助。Revit凭借其协作性、可视化性、精确性、可扩展性等优点,成为BIM技术在建筑行业中广泛运用的软件工具。Dynamo是基于Revit的二次开发平台,能够通过其可视化的编程语言进行程序设计,能够解决Revit中难以实现的问题。

目前Revit对于建筑工程的BIM领域展现出很好的适配性,尤其是其众多软件功能以及扩展插件,能够满足其技术运用的需要。但是对于市政污水、给水厂站工程的BIM运用,尤其是对于厂站中的闸门设备的建模,还难以达到批量快速、精确建模的目的。市政厂站工程中一般都含有大量闸门设备,在Revit中进行单个的放置,需要花费大量的时间。针对这种批量建模技术,一般是通过Dynamo读取放置点的XYZ坐标,进行批量放置。但是这种方法对于闸门的批量建模工作量依然很大,一是需要收集整理图纸中三维坐标,特别的,对于CAD图纸中目标Z坐标的整理收集,即使通过外界插件进行提取,也需要提前对每个目标进行块的编辑,并对块的属性赋予Z坐标值;其二是每个闸门设备在厂站工程的安装方向具有随机性,不能统一确定,需要人工收集整理图纸中每个闸门不同的放置方向;其三是每个闸门设备的安装面具有差异性,不能统一选择,难以在Revit环境中快速、同时选取每个闸门对应的安装墙面,因此人工操作的巨大工作量并没有解决,建模效率较低。

发明内容

本发明提供一种基于Dynamo的闸门设备批量建模方法,通过对Revit环境中预先创建的安装环境模型的部分构件进行分析筛选,然后结合闸门构件中已有的二维坐标计算出闸门构件的三维坐标值,结合闸门构件中已有的二维坐标与安装环境模型构件的相对位置关系,计算出闸门构件的安装方向及安装面,从而免于人工收集闸门构件的三维坐标,免于人工整理安装方向,免于人工选择安装面,减少劳动强度、提高建模效率。

本发明通过下述技术方案实现:

一种基于Dynamo的闸门设备批量建模方法,包括以下步骤:

获取放置基准点二维坐标,以及第一待放置构件和第二待放置构件的尺寸参数;

在Revit中创建第一待放置构件和第二待放置构件的参数化族;

提取Revit中预先构建的所有楼板图元,将每一个楼板图元与其余楼板图元分别进行两两配对,判断每对楼板图元在Z轴负方向上的投影是否有重合;

提取在Z轴负方向上投影有重合的楼板图元对,根据高程从大到小将每对所含的两个楼板图元划分为水池的顶板和底板;

提取所述顶板的Z坐标值并赋予对应的第一待放置构件以组成放置基准点三维坐标;

根据所述放置基准点三维坐标将所述第一待放置构件放置于顶板;

基于所述第一待放置构件的放置基准点三维坐标,计算出第二待放置构件在安装墙体上的放置基准点,计算出第二待放置构件的安装方向,计算出第二待放置构件的安装面以进行第二待放置构件的放置。

在一些实施方式中,判断每对楼板图元在Z轴负方向上的投影是否有重合时包括以下步骤:

筛选每个楼板图元的所有几何体表面;

计算每个楼板图元中每个几何体表面的法向量,筛选每个楼板图元中法向量方向与Z轴方向重合的几何体表面作为基面;

将两个楼板图元的基面沿Z轴负方向进行拉伸以形成拉伸几何体,求解两个拉伸几何体的交集类型,从而判断两个楼板图元在Z轴负方向上的投影是否有重合。

在一些实施方式中,计算每个楼板图元中每个几何体表面的法向量,筛选每个楼板图元中法向量方向与Z轴方向重合的几何体表面作为基面包括以下内容:

计算楼板图元几何体表面的原点;

计算几何体表面原点处的法向量;

将几何体表面原点处的法向量方向与Z轴向量方向进行判定,其中,与Z轴平行的法向量输出布尔值为“真”,否则输出布尔值为“假”;

根据几何体表面对应法向量的布尔值,筛选对应布尔值为“真”的几何体表面,该几何体表面即为基面。

在一些实施方式中,

将两个楼板图元的基面沿Z轴负方向进行拉伸以形成拉伸几何体,求解两个拉伸几何体的交集类型,从而判断两个楼板图元在Z轴负方向上的投影是否有重合,包括以下内容:

获取所有楼板图元的底部高程;

对所有楼板图元底部高程进行排序并提取最大值;

以所述最大值为拉伸长度对基面进行拉伸;

计算出每对楼板图元拉伸几何体的交集;

筛选出交集结果的类型名称为“Solid”的对应的楼板图元对,即在Z轴负方向上的投影有重合的楼板图元对。

在一些实施方式中,筛选出交集结果的类型名称为“Solid”的对应的楼板图元对,即在Z轴负方向上的投影有重合的楼板图元对,包括以下内容:

计算出每对拉伸几何体交集结果的类型;

将每对拉伸几何体按照交集结果类型进行分组,相同交集结果类型的为同一组;

选择交集结果的类型名称为“Solid”的这组相对应的楼板图元对。

在一些实施方式中,提取所述顶板在Z轴上的坐标值并赋予对应的第一待放置构件以组成放置基准点三维坐标包括以下内容:

获取顶板的顶面高程;

将所述所有顶面高程分别赋予到每一个放置基准点的二维坐标上形成三维坐标点;

计算顶板的上表面;

判断所述三维坐标点是否位于顶板的上表面,筛选出位于顶板上表面的点;

将上述三维坐标点作为对应的第一待放置构件的放置三维坐标点。

在一些实施方式中,计算顶板的上表面包括以下内容:

计算顶板的楼板图元几何体表面的原点;

计算几何体表面原点处的法向量;

将几何体表面原点处的法向量方向与Z轴向量方向进行判定,其中,与Z轴平行的法向量输出布尔值为“真”,否则输出布尔值为“假”;

根据几何体表面对应法向量的布尔值,筛选对应布尔值为“真”的几何体表面,选择高程较大的几何体表面作为顶板的上表面。

在一些实施方式中,判断所述三维坐标点是否位于顶板上,筛选出位于顶板上的点包括以下内容:

计算三维坐标点与顶板的上表面是否存在交集,存在交集的输出布尔值为“真”,否则输出布尔值为“假”;

根据三维坐标点与顶板的上表面是否存在交集对应的布尔值,筛选对应布尔值为“真”的三维坐标点,该三维坐标点即为第一待放置构件的三维坐标点。

在一些实施方式中,所述第一待放置构件包括启闭机和启闭机预埋件。

在一些实施方式中,所述第二待放置构件包括闸门、闸框和闸框预埋件。

在一些实施方式中,计算出第二待放置构件在安装墙体上的放置基准点包括以下内容:

获取闸门(5)的厚度;

计算闸门(5)的中心位置坐标;

以闸门(5)的中心为圆心并以闸门(5)厚度参数为直径构造垂直于Z轴的判定圆;

获取预先构建的墙体图元的几何体;

提取墙体几何体与判定圆相交的墙体图元作为第二待放置构件的安装墙体(4);

将闸门(5)的中心位置坐标投影到对应的安装墙体(4),获得闸门(5)的放置基准点,并以此为基础,根据闸框放置基准点、闸框预埋件放置基准点与闸门(5)的放置基准点的位置关系,计算出对应的闸框放置基准点、闸框预埋件放置基准点。

在一些实施方式中,计算第二待放置构件的安装方向包括以下内容:

计算出起点为闸门(5)中心位置坐标点,终点为闸门(5)的放置基准点的向量,作为第二待放置构件的安装方向。

在一些实施方式中,计算第二待放置构件的安装面包括以下内容:

获取预先构建的墙体的所有表面图元;

计算预先构建的墙体表面图元的法向量;

将墙体表面图元的法向量与Z轴向量方向进行判定,其中,与Z轴平行的法向量输出布尔值为“真”,否则输出布尔值为“假”;

根据墙体表面图元对应法向量的布尔值,筛选对应布尔值为“假”的墙体表面图元,该图元为墙体侧表面的表面图元。

判断墙体的侧表面图元与闸门的放置点是否存在交集,存在交集的布尔值为“真”,筛选对应布尔值为“真”的墙体表面图元,即为安装面。

本发明与现有技术相比,具有如下的优点和有益效果:

本发明提供的一种基于Dynamo的闸门设备批量建模方法,首先在Revit中预先构建的模型中筛选出第一待放置构件的安装构件,即楼板图元中的顶板,然后利用安装构件的空间位置结合已有的第一待放置构件的二维坐标来确定第一待放置构件的三维坐标,再根据第一待放置构件的三维坐标,结合安装环境模型构件的相对位置关系,确定第二待放置构件的安装位置、方向等,从而实现了第一待放置构件放置点三维坐标、第二待放置构件放置点三维坐标、第二待放置构件安装方向、第二待放置构件安装面的自动获取,减少人工劳动强度、提高建模效率,最终能够利于第一待放置构件和第二待放置构件的批量放置。

附图说明

为了更清楚地说明本发明示例性实施方式的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例提供的基于Dynamo的闸门设备批量建模方法的流程示意图;

图2为本发明实施例提供的楼板图元交集结果类型说明示意图;

图3为本发明实施例提供的闸门设备安装状态下的简易结构示意图;

图4为本发明实施例中将楼板配对分组形成二级列表的操作界面说明示意图。

附图中标记及对应的零部件名称:

1-启闭机,2-顶板,3-底板,4-安装墙体,5-闸门,6-闸框。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。

在以下描述中,为了提供对本发明的透彻理解阐述了大量特定细节。然而,对于本领域普通技术人员显而易见的是:不必采用这些特定细节来实行本发明。在其他实施例中,为了避免混淆本发明,未具体描述公知的结构、电路、材料或方法。

在整个说明书中,对“一个实施例”、“实施例”、“一个示例”或“示例”的提及意味着:结合该实施例或示例描述的特定特征、结构或特性被包含在本发明至少一个实施例中。因此,在整个说明书的各个地方出现的短语“一个实施例”、“实施例”、“一个示例”或“示例”不一定都指同一实施例或示例。此外,可以以任何适当的组合和、或子组合将特定的特征、结构或特性组合在一个或多个实施例或示例中。此外,本领域普通技术人员应当理解,在此提供的示图都是为了说明的目的,并且示图不一定是按比例绘制的。这里使用的术语“和/或”包括一个或多个相关列出的项目的任何和所有组合。

在本发明的描述中,术语“前”、“后”、“左”、“右”、“上”、“下”、“竖直”、“水平”、“高”、“低”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明保护范围的限制。

如图1-图2所示,本发明实施例提供一种基于Dynamo的闸门设备批量建模方法,该建模方法包括以下步骤:

S1.获取启闭机放置基准点二维坐标,以及第一待放置构件和第二待放置构件的尺寸参数;

第一待放置构件可以包括启闭机1和启闭机预埋件;第二待放置构件可以包括闸门5、闸框6和闸框预埋件。在EXCEL表格中,整理启闭机的XY坐标,以及第一待放置构件和第二待放置构件的尺寸参数。其中,其中闸门5、闸框6、闸框/启闭机的预埋件的尺寸参数可以作为施工安装阶段的指导,同时作为后期运维管理的信息存储在建模模型中。

S2.在Revit中创建闸门设备的参数化族;

即在Revit中制作启闭机1的参数族、启闭机预埋件的参数族、闸门5的参数族、闸框6的参数族、闸框预埋件的参数族。

S3.提取Revit中预先构建的所有楼板图元,将每一个楼板图元与其余楼板图元分别进行两两配对,判断每对楼板图元在Z轴负方向上的投影是否有重合;

启闭机1以及启闭机预埋件的放置位置均位于水池构筑物中的顶板2上,厂站工程中水池构筑物较多,每个水池构筑物的高程因水力流程的原因而不一致,例如个别水池构筑物中的底板3高于其他水池构筑物中的顶板2,因此若采用简单的通过楼板的高程值大小来筛选水池的顶板2的方法并不适用。

为了从所有楼板中筛选出顶板2,可以将楼板进行两两对比,如果任意一对楼板在Z轴负方向上的投影有重合部分,则这一对楼板是属于同一个水池的底板3和顶板2,继而可以根据这对楼板的高程差筛选到顶板2,最后读取所有顶板2在Revit项目中的参数顶部高程,将参数顶部高程的数值作为Z坐标,结合所有启闭机1的放置基准点二维坐标便可以得到待放置的启闭机1、启闭机预埋件的放置基准点三维坐标。

具体的,在Dynamo中将Revit楼板图元两两配对分组后转化成被Dynamo识别的几何体;为了简化后续程序,对上述Dynamo中分组配对形成的列表进行结构设计,分别提取每一对分组中的两个元素,构造分别存储它们的两个列表:即提取Revit项目中的所有楼板,然后将每个Revit楼板图元和其余的楼板图元配对分为一组,将其转化成Dynamo几何体。配对分组可以按照以下内容:将获取的所有楼板图元标记为T1,T2,T3,T4……Tn,其中n为楼板图元的总个数,T1则分别与T2,T3,T4……Tn分组配对成n-1个组,T2则分别与T1,T3,T4……Tn分组配对成n-1个组,T3则分别与T1,T2,T4……Tn分组配对成n-1个组,以此类推,Tn则分别与T1,T2,T4……Tn-1分组配对成n-1个组;上述配对分组形成的列表是一个含有多组子列表二级列表,具体可参阅图4作辅助理解。为了避免后续步骤再次增加列表的级数,简化程序步骤,在判定每个组中的两个楼板元素是否属于同一个水池的底板3和顶板2的步骤前,将此二级列表进行分组降级处理,将上述每个组的第一个元素提取出来形成一个一级列表,将上述每个组的第二个元素提取出来形成另外一个一级列表。

具体实施时:在Dynamo中,利用Categories节点选取Revit中预先构建的安装环境模型的所有楼板族,然后利用AllElementsofCategory节点选取上述楼板族的所有Revit图元,得到含有楼板图元的一级列表,记为列表1。利用List.Permutations节点,将列表1中的所有图元按顺序进行两两配对分组,形成了每两个图元为一个子列表的二级列表,记为列表2,需要说明的是,节点List.Permutations相当于先将一个图元列表复制成两个图元列表,然后将其中一个列表的元素与另一个列表的其他不同元素分别两两配对形成二级列表,例如对于楼板图元列表(T1,T2,T3,T4……Tn),利用List.Permutations节点操作后便形成了具有n*(n-1)个楼板图元对的二级列表。然后利用节点Element.Geometry将该二级列表的所有Revit图元转化成Dynamo几何体,形成一个几何体集合,记为列表3。接下来利用节点List.Map,以列表3的每个子列表为对象,利用List.GetItemAtIndex节点分别提取每个子列表的第一个几何体元素,形成的几何体集合,记为列表4;以列表3的每个子列表为对象,利用List.GetItemAtIndex节点分别提取每个子列表的第二个几何体元素,形成的几何体集合,记为列表10。

将所有的楼板图元进行配对分组后,便可以进行每对楼板图元在Z轴负方向上是否投影重合的判断,具体可以包括以下内容:

筛选每个楼板图元的所有几何体表面;

计算每个楼板图元的几何体表面的法向量,筛选法向量方向与Z轴方向平行的几何体表面作为基面;

上述步骤的目的是筛选出楼板几何体的上表面或者下表面,过滤掉楼板几何体的侧表面。

具体实施时可以包括以下内容:

利用节点Geometry.Explode计算列表4中所有几何体的表面,形成的几何面集合记为列表5,列表5为一个二级列表,上述单个几何体的所有表面组成该二级列表下对应的一个子列表。利用节点Surface.PointAtParameter计算列表5中每个几何面上的原点,形成的点集合,记为列表6。然后利用节点Surface.NormalAtPoint计算列表5中的每个面在列表6中对应的原点处的法向量,得到的向量集合,记为列表7。然后利用节点Vector.IsParallel将列表7中的向量与Z轴向量方向进行判定,与Z轴平行的向量,输出布尔值为“真”,否则输出布尔值为“假”,得到的一组布尔值集合,记为列表8。利用节点List.FilterByBoolMask在列表5中进行筛选,选择出列表8中法向量为“真”值对应的几何体表面,得到的几何体表面集合,记为列表9,这些几何体表面即为楼板图元的上表面与下表面,且列表9也为一个二级列表,基于楼板几何体的特性,每个子列表含有的两个元素分别为一个楼板的上表面和下表面。然后利用节点List.Map,以列表9每个子列表为对象,分别提取子列表的第一个元素或者第二个元素,得到的几何表面集合,记为列表11。利用前述方法对列表10进行上述相同的处理步骤,得到的几何体表面集合,记为列表12。

将上述筛选出来的两组基面集合,沿Z轴负方向进行拉伸以形成两组拉伸几何体的集合,拉伸长度取楼板图元的最大高程,基面即为楼板图元的上表面或者下表面。然后对两组拉伸几何体集合中一一对应的几何体元素进行交集类型的计算,即可根据每对的交集类型判断出相对应的每对楼板图元中的两个楼板是否属于同一个水池的构筑物。

需要说明的是,如图2所示,拉伸几何体的交集类型主要为三类,一类是空集,一类是线段重合,一类是体积重合,其中,体积重合表示对应楼板图元对中的两个楼板属于同一水池的构筑物且一个为顶板2而另一个为底板3。

具体实施时包括以下内容:

利用节点Element.GetParameterValueByName提取列表1中Revit楼板图元的“底部高程”参数,然后利用节点List.Sort将参数值的大小按照升序排列,得到的参数集合,记为列表13。然后利用节点Count计算列表13中元素的个数,记为“n”,根据个数来计算最大值的排序序号,最大值序号可以利用CodeBlock节点编辑公式“n-1”来计算,然后利用节点List.GetItemAtIndex按照该序号提取出最大值,记为“a”。

利用节点Surface.Thicken分别将列表11和列表12中的基面进行拉伸,拉伸长度利用CodeBlock节点编辑公式“-a”来计算,a为楼板图元参数“底部高程”的最大值,得到的两组几何体集合,分别记为列表13和列表14。然后利用节点Geometry.Intersect,节点连缀方式为“最短”,计算出列表13和列表14中元素序号对应一致的元素相互之间的布尔交集,得到的交集集合记为列表15。利用节点List.Map以列表15中每个子列表为对象,利用节点List.GetItemAtIndex提取其中的第一个元素,然后将利用节点StringfromObject输出交集结果对应的字符名称,分别为以下三种字符名称:Line、null、Solid,字符名称集合记为列表16。利用节点List.GroupByKey,对列表2中的子列表进行分类,,根据列表16中对应结果类型的字符名称类型:Line、null、Solid进行分类,然后利用节点List.GetItemAtIndex选择字符名称为Solid的对应的子列表,该子列表的集合记为列表17。

S4.提取在Z轴负方向上投影有重合的楼板图元对,根据高程从大到小将每对所含的两个楼板图元划分为顶板2和底板3;

具体实施时包括以下内容:

利用节点Element.GetParameterValueByName,提取列表17中每个子列表中Revit楼板图元的参数“底部高程”,形成的参数数值集合,记为列表18。然后利用节点List.Map以列表18的每个子列表为对象,利用节点SortIndexByValue对每个子列表中的参数数值按照从小到大的顺序,将参数数值对应的元素序号进行排序,得到的列表记为19。然后利用节点List.GetItemAtIndex,提取列表19中每个子列表中最后一个序号的元素,得到的序号元素集合,记为列表20。然后利用节点List.Chop,将列表20转化成二级列表,每个序号元素,作为子列表的单独元素,该二级列表记为列表21。然后利用节点List.GetItemAtIndex,根据列表21中的序号元素,提取列表17中对应序号的Revit楼板图元,得到的楼板图元集合记为列表22。然后利用节点Flatten,将列表22从二级列表转化成一级列表,再利用节点List.UniqueItems去除其中相同的图元,得到的楼板图元集合,记为列表23,列表23中的图元即为所有的顶板2图元。

S5.提取所述顶板2的Z坐标值,并赋予对应的第一待放置构件以组成放置基准点三维坐标;

即提取所有顶板2的图元参数“顶部高程”,然后将每一个“顶部高程”的数值作为Z坐标,一一自动赋值到EXCEL中的每一个启闭机1的XY坐标上,得到一系列XYZ坐标,因为不是每个顶板上都有放置启闭机及相应的启闭机预埋件,所以需要判断得到的XYZ坐标点是否在顶板2的上表面,即能计算出所求放置点的XYZ坐标。

具体实施时包括以下内容:

利用节点Excel.ReadFromFile读取EXCEL表格,EXCEL表格的读取路径利用节点FilePath和节点File.FromPath获取,并利用节点List.Deconstruct去除表格的表头栏目,利用节点List.Transpose整理列表格式,利用节点List.GetItemAtIndex分别将X坐标与Y坐标提取出来,然后利用节点Point.ByCoordinates创建以上述X坐标、Y坐标为基础的,Z坐标为0的相应的点集合,记为列表24。利用节点Element.GetParameterValueByName提取列表23中楼板图元的“顶部高程”参数,然后利用节点Geometry.Translate将每个参数值作为Y坐标,赋予到列表24中的每一个坐标点上,节点的连缀方式选择叉积,得到的点集合,记为列表25。

以列表23为对象,计算顶板2的上表面。首先利用节点Element.Geometry将列表23中的顶板2图元转化成Dynamo几何体,然后利用节点Geometry.Explode提取几何体的表面,形成的几何面集合记为列表26;然后利用节点Surface.PointAtParameter计算列表26中每个几何面上的原点,形成的点集合,记为列表27;然后利用节点Surface.PointAtParameter,计算列表26中的每个面在列表27中对应的原点处的法向量,得到的向量集合,记为列表28。然后利用节点Vector.IsParallel,将列表28中的向量与Z轴向量方向进行判定,与Z轴平行的向量,输出布尔值为“真”,否则输出布尔值为“假”,得到的一组布尔值集合,记为列表29。利用节点List.FilterByBoolMask,将列表26中的几何体表面进行筛选,根据列表29中几何体表面法向量对应的布尔值,选择对应布尔值为“真”的几何体表面,得到的几何体表面集合,记为列表30;然后利用节点Flatten将该列表转成二级列表,利用List.Map以该二级列表的每个子列表为对象,利用List.GetItemAtIndex提取序号为0的上表面,得到的几何面集合,记为列表31。

利用节点Geometry.DoesIntersect计算列表25中每个坐标点与列表31中每个几何面是否存在交集,节点连缀形式选择叉积,所得的结果记为列表32。为了让分组对象的列表与分组条件的列表保持一致的结构,利用节点List.OfRepeatedItem以整个列表25为对象进行重复复制,复制构造成一个三级列表,复制次数利用节点Count计算出列表32含有子列表的个数,得到的这个坐标点集合的三级列表记为列表33,列表33与列表32的结构一致,于是利用List.FilterByBoolMask以列表33中坐标点为对象,根据对应的列表32的布尔值结果,筛选计算出与“真”值相对应的坐标点,然后利用节点List.UniqueItems去除其中重复的点,最后得到的这些点与顶板2的上表面存在交集,是放置在顶板2表面上的,即为启闭机1/启闭机预埋件放置的XYZ坐标点,该点集合记为列表34。

S6.根据所述放置基准点三维坐标将所述第一待放置构件放置于顶板2;

具体实施时,利用节点FamilyTypes选择启闭机1族,然后利用节点FamilyInstance.ByPoint在列表34中坐标点集合上进行批量放置。

利用节点FamilyTypes选择启闭机预埋件族,然后利用节点FamilyInstance.ByPoint在列表34中的坐标点集合上进行批量放置。

最后利用Element.SetParameterByName对放置的族进行参数赋值。利用节点Excel.ReadFromFile读取EXCEL表格,EXCEL表格的读取路径利用节点FilePath和节点File.FromPath获取,并利用节点List.Deconstruct去除表格的表头栏目,利用节点List.Transpose整理列表格式,利用节点List.GetItemAtIndex提取对应的设计参数。

S7.基于所述第一待放置构件的放置基准点三维坐标,计算出第二待放置构件在安装墙体上的放置基准点,计算出第二待放置构件的安装方向,计算出第二待放置构件的安装面,最后在放置基准点上,按照上述方向,按照上述面放置。

确定第二待放置构件的放置基准点,需要先确定放置基准点所在的安装墙体。主要是通过闸门设备以及水池的特性来筛选出第二待放置构件的放置基准点所在的安装墙体。工程上为了保障密封的严密性,闸门5直接紧贴安装在安装侧墙体上,其余墙体都是距离闸门5有一定距离的;并且启闭机1相对于闸门5处于闸门5中心的Z轴正方向上来控制闸门5在Z轴方向的升降,即在Z轴方向上,启闭机1和闸门5中心是共线的。因此在Z轴俯视方向上,相比于闸门5长度方向两侧的墙体、闸门5迎水侧的墙体,只有安装侧的墙体到启闭机1放置点的直线距离是最短的。因此以启闭机1放置点在Z轴俯视方向的点为圆心,创建闸门5厚度尺寸为直径的判定圆,若墙体完全处于判定圆外部的,说明墙体是闸门5长度方向两侧的墙体或者迎水侧的墙体,统统过滤排除,从而筛选出与判定圆相切的墙体,即每个闸门5对应的安装墙体4。

具体实施时包括以下内容:

利用节点Excel.ReadFromFile读取EXCEL表格,EXCEL表格的读取路径利用节点FilePath和节点File.FromPath获取,并利用节点List.Deconstruct去除表格的表头栏目,利用节点List.Transpose整理列表格式,利用节点List.GetItemAtIndex提取闸门5厚度与闸门5中心高度,数值集合分别记为列表35、列表36。

利用节点Geometry.Translate将列表34中的启闭机1放置点,延Z轴负方向,移动到闸门5中心点所在的高度,距离利用CodeBlock节点编辑公式“-b”,其中b为列表36中的闸门5中心高度,得到的闸门5中心位置的点集合,记为列表37。利用节点Circle.ByCenterPointRadius以列表37中的各个点为圆心,其半径利用CodeBlock节点编辑公式“c*1000/2”,c为列表36中的闸门5厚度,得到的判定圆集合,记为列表38。利用节点Categories选择墙体族为目标,然后利用节点AllElementsofCategory把Revit项目中所有的墙体图元选择出来,利用Element.Geometry将其转化成Dynamo几何图形,利用节点Flatten将列表拍平,得到的墙体几何体集合,记为列表39。利用节点Geometry.DoesIntersect计算列表38中每个判定圆与列表39中每个墙体几何体是否存在交集的布尔值,节点的连缀方式选择叉积,若存在交集,布尔值即为“真”,不存在交集,布尔值即为“假”,得到的布尔值集合,记为列表40。为了让分组对象的列表与分组条件的列表保持一致的结构,利用节点List.OfRepeatedItem以整个列表39为对象进行重复复制,复制构造成一个二级列表,复制次数利用节点Count计算出列表38含有子列表的个数,得到的墙体几何体集合,记为列表41,该列表的结构形式与列表38一致。利用List.FilterByBoolMask以列表41为对象,根据与墙体几何体相对应的列表38中的布尔值结果,选择出布尔值为“真”值相对应的墙体几何体,得到安装墙体4几何体的集合,记为列表42。

利用节点List.Chop将列表37闸门5中心高度点构造成一个二级列表,列表每一个元素作为一个子列表,新的列表记为43。利用节点List.Chop将列表42安装墙体4的几何体构造成一个二级列表,列表每一个元素作为一个子列表,新的列表记为44。然后利用节点Geometry.ClosestPointTo计算出列表43中每个闸门5的中心点到列表44中对应的每个闸门5的安装墙体4几何体距离最近的点,即每个闸门5中心点在对应安装墙体4几何体上的投影点,得到的点集合为闸门5族的放置点,记为列表45。利用节点Vector.ByTwoPoints计算出起点为列表45的闸门5族放置点,终点为列表43的闸门5中心点的向量,即为安装墙面在闸门5族放置点处的平面法向量,该向量集合记为列表46。利用节点Vector.Rotate以Z轴为中心轴,将列表46中的向量旋转90°使之与安装墙体4的墙面平行,一是作为两侧闸框预埋件安装定位点的相对位置向量,二是作为闸门5、闸框6、闸框预埋件族放置的方向向量,该向量的集合,记为列表47。

利用节点Excel.ReadFromFile读取EXCEL表格,EXCEL表格的读取路径利用节点FilePath和节点File.FromPath获取,并利用节点List.Deconstruct去除表格的表头栏目,利用节点List.Transpose整理列表格式,利用节点List.GetItemAtIndex分别提取闸框预埋件上下侧离孔洞距离、预埋件左右侧离孔洞距离、闸门5长度、宽度,得到的参数值集合,分别记为列表48、列表49、列表50、列表62;需要说明的是,此处的孔洞是指与闸门5对应的过水的孔洞。利用节点Geometry.Translate以列表45闸门5族的放置点为基准,沿列表47向量方向移动一定的距离,移动的距离利用CodeBlock节点编辑公式“(d+c/2)*1000”,其中d为闸框预埋件左右侧离孔洞距离,c为闸门5长度,接着利用Geometry.Translate,再延Z轴方向进行移动,移动的距离利用CodeBlock节点编辑公式“-(f/2)*1000”,其中f为闸门5宽度,最后到得到的点集合,即为右侧预埋件放置点,记为列表51。

利用节点Geometry.Translate以列表45闸门5族的放置点为基准,沿列表47向量方向移动一定的距离,移动的距离利用CodeBlock节点编辑公式“-(d+c/2)*1000”,其中d为闸框预埋件左右侧离孔洞距离,c为闸门5长度,接着利用Geometry.Translate,再延Z轴方向进行移动,移动的距离利用CodeBlock节点编辑公式“-(f/2)*1000”,其中f为闸门5宽度,最后到得到的点集合,即为左侧预埋件放置点,记为列表52。

利用节点Geometry.Translate以列表45闸门5族的放置点为基准,沿Z轴方向移动一定的距离,移动的距离利用CodeBlock节点编辑公式“-(f/2+e)*1000”,其中f为闸门5宽度,e为闸框预埋件上下侧离孔洞距离,最后到得到的点集合,即为下侧预埋件放置点,记为列表53。

利用节点Geometry.Translate以列表45闸门5族的放置点为基准,沿Z轴方向移动一定的距离,移动的距离利用CodeBlock节点编辑公式“(f/2+e)*1000”,其中f为闸门5宽度,e为闸框预埋件上下侧离孔洞距离,最后到得到的点集合,即为上侧预埋件放置点,记为列表54。

利用节点SelectFaces选择Revit项目中所有墙体表面图元,选择前首先利用Revit选择过滤器的功能,将墙体以外的图元全部隐藏,得到的墙体表面图元集合,记为列表55。然后利用节点Surface.NormalAtParameter创建列表55墙体表面图元的法向量,该向量集合,记为列表56。利用节点Vector.IsParallel计算列表56的向量与Z轴向量是否平行,若平行则输出布尔值为“真”,否则输出布尔值为“假”,得到的布尔值的集合,记为列表57。利用节点List.FilterByBoolMask以列表55墙体表面图元为对象,根据其相对应的列表57的布尔值,计算过滤出对应布尔值为“假”的墙体表面图元,即为侧墙面集合,最后利用Flatten将列表拍平,记为列表58。利用节点Geometry.DoesIntersect计算列表45放置点与列表58侧墙面图元交集的布尔值,然后利用节点Flatten将该集合降为二级列表,记为列表59。为了让分组对象的列表与分组条件的列表保持一致的结构,利用节点List.OfRepeatedItem以整个列表58为对象复制构造成一个二级列表,复制次数利用节点Count计算出列表45含有子列表的个数,记为列表60,该列表的结构形式与列表59一致。利用节点List.FilterByBoolMask以列表60为对象,根据相对应的列表59的布尔值,计算筛选出与“真”值相对应的侧墙表面图元,最后利用节点Flatten将其拍平,得到每个闸门5、闸框6、闸框预埋件族所放置的墙面图元集合,记为列表61。

利用节点FamilyTypes选择闸门5族,然后利用节点FamilyInstance.ByFace以列表45的点集合作为每个族的放置点,以列表47的向量集合作为每个族的放置方向,以列表61中的墙体表面集合作为每个族的放置面,进行放置闸门5。

利用节点FamilyTypes选择闸框6族,然后利用节点FamilyInstance.ByFace以列表45的点集合作为每个族的放置点,以列表47的向量集合作为每个族的放置方向,以列表61中的墙体表面集合作为每个族的放置面,进行放置闸框6。

利用节点FamilyTypes选择闸框6左右侧预埋件族,然后利用节点FamilyInstance.ByFace以列表51的点集合作为每个族的放置点,以列表47的向量集合作为每个族的放置方向,以列表61中的墙体表面集合作为每个族的放置面,进行放置右侧预埋件。

利用节点FamilyTypes选择闸框6左右侧预埋件族,然后利用节点FamilyInstance.ByFace以列表52的点集合作为每个族的放置点,以列表47的向量集合作为每个族的放置方向,以列表61中的墙体表面集合作为每个族的放置面,进行放置左侧预埋件。

利用节点FamilyTypes选择闸框6上下侧预埋件族,然后利用节点FamilyInstance.ByFace以列表53的点集合作为每个族的放置点,以列表47的向量集合作为每个族的放置方向,以列表61中的墙体表面集合作为每个族的放置面,进行放置下侧预埋件。

利用节点FamilyTypes选择闸框6上下侧预埋件族,然后利用节点FamilyInstance.ByFace以列表54的点集合作为每个族的放置点,以列表47的向量集合作为每个族的放置方向,以列表61中的墙体表面集合作为每个族的放置面,进行放置上侧预埋件。

最后利用Element.SetParameterByName对放置的族进行参数赋值。利用节点Excel.ReadFromFile读取EXCEL表格,EXCEL表格的读取路径利用节点FilePath和节点File.FromPath获取,并利用节点List.Deconstruct去除表格的表头栏目,利用节点List.Transpose整理列表格式,利用节点List.GetItemAtIndex提取对应的设计参数。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种基于Dynamo的管廊隧道工程设备布置建模方法
  • 一种基于Revit结合Dynamo的批量创建车位模型的方法
技术分类

06120116502392