基于Dynamo和Revit的幕墙模型快速建立方法与流程

文档序号:36802647发布日期:2024-01-23 12:29阅读:39来源:国知局
基于Dynamo和Revit的幕墙模型快速建立方法与流程

本发明属于建模,具体涉及一种基于dynamo和revit的幕墙模型快速建立方法。


背景技术:

1、现阶段,基于revit建立的幕墙模型通常存在幕墙构件难以定制化、立面修改以及细节修改难以实现、下料信息过于局限、针对曲面的适用性差等缺点。

2、目前,通常情况选择利用其他软件进行建模后再导入至revit中,这种方法不仅涉及了其他软件和插件,还会增加部分成本,同时,使用这种方法转化后的模型不仅无法在revit中进行调整,还可能出现图形损坏的现象。

3、综上所述,当前针对幕墙模型的建立存在效率低、修改速度慢、适用范围较窄的问题。


技术实现思路

1、本发明的目的在于提供一种建模效率提高、修改速度加快、适用范围增加的基于dynamo和revit的幕墙模型快速建立方法。

2、本发明提供的这种基于dynamo和revit的幕墙模型快速建立方法,包括如下步骤:

3、s1.获取设计图纸信息;

4、s2.采用步骤s1获取得到的设计图纸信息,构建基础幕墙模型,同时构建对应的直线幕墙族和弧形幕墙族;

5、s3.按照需求拾取构件,构建对应的构件列表,并进行过滤处理;

6、s4.采用步骤s3过滤处理后的构件列表,构建几何面三级列表、几何面数量列表、几何面空值判断列表,同时采用构建的几何面空值判断列表分离过滤后的构建列表和几何面三级列表;

7、s5.采用步骤s4中分离后的构件列表,构建轮廓线三级列表,并通过拆分处理,构建拆分后的轮廓线三级列表;

8、s6.采用步骤s5构建的拆分后轮廓线三级列表,构建轮廓线平面列表;

9、s7.采用步骤s4中分离后的几何面三级列表,构建首项几何面列表和第二项几何面列表;

10、s8.采用步骤s7构建的首项几何面列表和第二项几何面列表,构建数值判定表,并通过提取处理,构建外侧中点列表;

11、s9.采用步骤s6构建的轮廓线平面列表和步骤s8构建的外侧中点列表,构建平面最近点列表和外侧法线列表;

12、s10.采用步骤s7构建的首项几何面列表和第二项几何面列表,构建外侧向量列表;

13、s11.采用步骤s5构建的拆分后轮廓线三级列表,构建轮廓线向量三级列表和向量角度三级列表,并针对拆分后轮廓线三级列表进行排序处理;

14、s12.采用步骤s11中排序处理后的轮廓线三级列表,构建排序首项列表、首项线段列表、线段长度列表;

15、s13.采用步骤s12构建的排序首项列表,构建弧线段列表、弧线段长度列表、拱高列表;

16、s14.采用步骤s12构建的排序首项列表,构建排序向量角度列表、排序向量判断列表、族类型列表;

17、s15.采用步骤s11中排序处理后的轮廓线三级列表,构建排序尾项列表、排序线段列表、排序线段向量列表与排序线段长度列表;

18、s16.采用步骤s12构建的首项线段列表,构建首项线段中点列表、平面圆形列表、圆形平面列表,同时采用构建的圆形平面列表,构建实例构建列表和返回实例构件列表;

19、s17.采用步骤s16构建的返回实例构件列表,构建实例几何面三级列表、实例几何面列表,采用步骤s14构建的族类型列表,构建族实例列表;

20、s18.采用步骤s17构建的族实例列表,构建族方向列表,采用步骤s15构建的排序线段向量列表,构建族角度列表,同时采用构建得到的族方向列表和族角度列表,通过旋转处理,构建旋转后的族实例列表;

21、s19.采用步骤s12构建的线段长度列表、步骤s13构建的拱高列表、步骤s15构建的排序线段长度列表、步骤s18构建的旋转后族实例列表,构建更新构件列表;

22、s20.采用步骤s19构建的更新构件列表,构建最终判断列表,同时采用构建的最终判断列表,针对步骤s16构建的返回实例构件列表进行删除处理,完成幕墙模型的建立;

23、步骤s2所述的采用步骤s1获取得到的设计图纸信息,构建基础幕墙模型,同时构建对应的直线幕墙族和弧形幕墙族,具体包括:

24、采用步骤s1获取得到的设计图纸信息,通过revit,利用幕墙系统或面墙系统,建立基础幕墙模型,同时修改默认幕墙嵌板族,建立对应的直线幕墙族与弧形幕墙族;具体包括:

25、建立基础幕墙模型包括建立幕墙或幕墙系统、划分幕墙的网格线;

26、修改默认幕墙嵌板族将默认幕墙嵌板族中的“偏移”参数对应的值修改为设定值;

27、建立对应的直线幕墙族包括设置“模块宽度”与“模块高度”参数,按照设计图纸设置剩余相关参数,同时确保族参数的正确设置;

28、建立对应的弧线幕墙族包括设置“模块宽度”、“模块高度”与“弧高”参数,按照设计图纸设置剩余相关参数,同时确保族参数的正确设置;

29、步骤s3所述的按照需求拾取构件,构建对应的构件列表,并进行过滤处理,具体包括:

30、通过selectmodel elements节点,按照需求拾取构件,构建对应的构件列表;

31、通过element.getcategory节点获取当前构件列表中各项构件的类别名称;

32、通过string from object节点将各项构件的类别名称转化为文本;

33、通过“==”节点对类别名称的文字字符与“幕墙嵌板”文字字符进行全等判定,得到文字判断列表;

34、通过list.filterbyboolmask节点,利用文字判断列表将构件列表进行分离,得到过滤后的构件列表;

35、步骤s4所述的采用步骤s3过滤处理后的构件列表,构建几何面三级列表、几何面数量列表、几何面空值判断列表,同时采用构建的几何面空值判断列表分离过滤后的构建列表和几何面三级列表,具体包括:

36、通过element.faces节点获取过滤后的构件列表中各项构件的几何面图形,得到几何面三级列表;

37、通过list.count节点计算几何面三级列表中各二级列表内的数量,得到几何面数量列表;

38、通过object.isnull节点,针对得到的几何面数量列表中的各项进行空值判断;通过空值判断,确定判断项对应的值是否为null值,如果输入值为null值,则输出值为true;若输入值不为null值,则输出值为false;最终获得几何面空值判断列表;

39、通过list.filterbyboolmask节点,利用几何面空值判断列表将过滤后的构件列表与几何面三级列表进行分离,得到分离后的构件列表与分离后的几何面三级列表;

40、步骤s5所述的采用步骤s4中分离后的构件列表,构建轮廓线三级列表,并通过拆分处理,构建拆分后的轮廓线三级列表,具体包括:

41、通过curtainpanel.boundaries节点获取分离后的构件列表中各项构件的轮廓线,形成轮廓线三级列表;

42、通过list.firstitem节点提取轮廓线三级列表中各二级列表的首项,形成轮廓线列表;

43、通过polycurve.curves节点将轮廓线列表中各项多段线进行拆分,形成拆分后的轮廓线三级列表;

44、步骤s6所述的采用步骤s5构建的拆分后轮廓线三级列表,构建轮廓线平面列表,具体包括:

45、通过curve.startpoint节点获取拆分后的轮廓线三级列表中各项线段的起点,形成轮廓线起点三级列表;

46、通过plane.bybestfitthroughpoints节点将轮廓线起点三级列表各二级列表中的所有点拟合成对应的几何平面,得到轮廓线平面列表;

47、步骤s7所述的采用步骤s4中分离后的几何面三级列表,构建首项几何面列表和第二项几何面列表,具体包括:

48、通过list.sortbyfunction、surface.area与list.reverse节点将分离后的几何面三级列表中的各二级列表按照几何面的大小进行递增排序,并通过倒置处理得到递减后的几何面三级列表;

49、通过list.firstitem与list.getitematindex节点提取递减后的几何面三级列表中各二级列表的首项,形成首项几何面列表;提取递减后的几何面三级列表中各二级列表的第二项,形成第二项几何面列表;

50、步骤s8所述的采用步骤s7构建的首项几何面列表和第二项几何面列表,构建数值判定表,并通过提取处理,构建外侧中点列表,具体包括:

51、通过surface.pointatparameter节点获取首项几何面列表中各项面的中点,形成首项中点列表;获取第二项几何面列表中各项面的中点,形成第二项中点列表;

52、通过geometry.distanceto节点将首项中点列表中各项点与轮廓线平面列表中各项平面依次进行最近距离分析,得到首项距离列表;将第二项中点列表中各项点与轮廓线平面列表中各项平面依次进行最近距离分析,得到第二项距离列表;

53、通过“>=”节点依次判断首项距离列表中各项数值是否大于且等于第二项距离列表中各项数值,如果输入的首项距离列表中的值大于且等于第二项距离列表中对应项的值,则输出值为true;如果输入的首项距离列表中的值小于第二项距离列表中对应项的值,则输出值为false;最终获得数值判定列表;

54、通过if节点,将首项中点列表中的各项点与第二项中点列表中的各项点按照数值判定列表中的各项布尔值进行提取处理:

55、如果数值判定列表中当前项为true项,获取首项中点列表中对应序号项的点,如果数值判定列表中当前项为false项,获取第二项中点列表中对应序号项的点;根据输入数值判定列表依次进行判定,得到由首项中点列表中的对应值与第二项中点列表中的对应值组合形成的外侧中点列表;

56、步骤s9所述的采用步骤s6构建的轮廓线平面列表和步骤s8构建的外侧中点列表,构建平面最近点列表和外侧法线列表,具体包括:

57、通过geometry.closestpointto节点获取轮廓线平面列表中各项平面到外侧中点列表中对应项点的最近点,形成平面最近点列表;

58、通过vector.bytwopoints节点将平面最近点列表中的各点与外侧中点列表中对应项点,进行首尾相连形成相应的向量,得到外侧法线列表;

59、步骤s10所述的采用步骤s7构建的首项几何面列表和第二项几何面列表,构建外侧向量列表,具体包括:

60、通过surface.tangentatuparameter节点获取首项几何面列表中各项面的中点u方向向量,形成首项向量列表;获取第二项几何面列表中各项面的中点u方向向量,形成第二项向量列表;

61、通过vector.z、vector.x与“>=”节点提取首项向量列表中各项向量的z坐标值与x坐标值,判断提取得到的值是否大于等于零;如果输入的vector.z、vector.x列表中的值大于且等于零,则输出值为true;如果输入的vector.z、vector.x列表中的值小于零,则输出值为false;最终获得坐标z判断列表与坐标x判断列表;

62、通过“&&”节点将坐标z判断列表中各项布尔值与坐标x判断列表中对应项布尔值进行“逻辑与”判定,只有参与判定的两个逻辑值都是true,结果才是true,进而形成逻辑判断列表;

63、通过if节点将首项向量列表中的各项向量与第二项向量列表中的各项向量按照逻辑判断列表中的各项布尔值进行提取,形成外侧向量列表;

64、步骤s11所述的采用步骤s5构建的拆分后轮廓线三级列表,构建轮廓线向量三级列表和向量角度三级列表,并针对拆分后轮廓线三级列表进行排序处理,具体包括:

65、通过curve.pointatparameter节点获取拆分后的轮廓线三级列表中各项线段的中点,形成轮廓线中点三级列表;

66、通过plane.origin节点获取轮廓线平面列表中各项平面的原点,形成平面原点列表;

67、通过vector.bytwopoints节点将轮廓线中点三级列表中各二级列表内所有点分别与平面原点列表中的轮廓线中点三级列表中的二级列表对应序号项的点进行首尾相连,形成对应的向量,得到轮廓线向量三级列表;

68、通过vector.anglewithvector节点计算轮廓线向量三级列表中各二级列表中所有向量与外侧向量列表中的轮廓线向量三级列表中的二级列表对应序号项的向量所形成夹角度数,得到向量角度三级列表;

69、通过list.sortbykey节点将拆分后的轮廓线三级列表中各二级列表内所有线段按照向量角度三级列表中对应序号的二级列表内所有角度的角度大小进行递增排序,得到排序后的轮廓线三级列表;

70、步骤s12所述的采用步骤s11中排序处理后的轮廓线三级列表,构建排序首项列表、首项线段列表、线段长度列表,具体包括:

71、通过list.firstitem节点提取排序后的轮廓线三级列表中各二级列表的首项,形成排序首项列表;

72、通过curve.startpoint、curve.endpoint与line.bystartpointendpoint节点将排序首项列表各项线段的起点和终点依次连接成线段,形成首项线段列表;

73、通过curve.length节点获取首项线段列表中各项线段的长度,形成线段长度列表;

74、步骤s13所述的采用步骤s12构建的排序首项列表,构建弧线段列表、弧线段长度列表、拱高列表,具体包括:

75、通过curve.pointsatequalchordlength与arc.bybestfitthroughpoints节点将排序首项列表中各项线段按长度均匀划分为二十一段形成二十个中间点,其中,不包含线段的起点和终点;

76、判定划分得到的二十个点能否形成相应的弧线:如果采用划分得到的二十个点能够形成相应的弧线,则输出值为对应弧线;如果采用划分得到的二十个点无法形成相应的弧线,则输出值为“空”值;最终得到弧线段列表;

77、通过arc.radius节点获取弧线段列表中各项弧线的长度,形成弧线段长度列表;

78、通过codeblock节点与数学公式,根据首项线段长度列表中的各项长度与弧线段长度列表中的各项长度得到拱高列表;数学公式如下所示:

79、r-dscore.math.sqrt(r*r-l*l/4)

80、其中,r表示弧线段长度列表项输入的值;l表示首项线段长度列表输入的值;dscore.math.sqrt(·)表示在dynamo中调用math模块下的sqrt平方根算法;

81、步骤s14所述的采用步骤s12构建的排序首项列表,构建排序向量角度列表、排序向量判断列表、族类型列表,具体包括:

82、通过curve.tangentatparameter与vector.anglewithvector节点计算排序首项列表中各项线段的起点切向量与终点切向量形成夹角度数,得到排序向量角度列表;

83、通过“>=”节点判断排序向量角度列表中各项角度是否大于或等于1,如果角度大于等于1,则输出值为true,如果角度小于1,则输出值为false;最终得到排序向量判断列表;

84、通过if节点,根据排序向量判断列表中的布尔值提取相应的族类型列表,其中,布尔值为true时,族类型列表对应序号值为直线幕墙族,布尔值为false时,族类型列表对应序号值为弧形幕墙族;

85、步骤s15所述的采用步骤s11中排序处理后的轮廓线三级列表,构建排序尾项列表、排序线段列表、排序线段向量列表与排序线段长度列表,具体包括:

86、通过list.lastitem节点提取排序后的轮廓线三级列表中各二级列表的尾项,形成排序尾项列表;

87、通过curve.pointatparameter与line.bystartpointendpoint节点将排序首项列表中各项线段的中点与排序尾项列表中对应项线段的中点连接成线段,形成排序线段列表;

88、通过line.direction与curve.length节点获取排序线段列表中的各项线段的线段方向与线段长度,形成排序线段向量列表与排序线段长度列表;

89、步骤s16所述的采用步骤s12构建的首项线段列表,构建首项线段中点列表、平面圆形列表、圆形平面列表,同时采用构建的圆形平面列表,构建实例构建列表和返回实例构件列表,具体包括:

90、通过curve.pointatparameter节点获取首项线段列表中各项线段的中点,形成首项线段中点列表;

91、通过plane.byoriginnormalxaxis节点将首项线段中点列表的各项点、排序线段向量列表中对应项向量和外侧法线列表中对应项向量分别作为平面的原点、z轴方向向量与x轴方向向量,形成相应的平面;

92、通过circle.byplaneradius节点基于形成的平面,按照设定的半径大小,绘制出一个圆形,得到平面圆形列表;

93、通过surface.bypatch节点将平面圆形列表中各项圆形转化为面,形成圆形平面列表;

94、通过importinstance.bygeometry节点将圆形平面列表中各项圆形平面转化为revit实例构件,得到实例构件列表;

95、通过transaction.end节点结束当前dynamo事务,返回实例构件列表的内容,得到返回实例构件列表;

96、步骤s17所述的采用步骤s16构建的返回实例构件列表,构建实例几何面三级列表、实例几何面列表,采用步骤s14构建的族类型列表,构建族实例列表,具体包括:

97、通过element.faces节点获取返回实例构件列表中各项构件的几何面图形,形成实例几何面三级列表;

98、通过list.firstitem节点提取实例几何面三级列表中各二级列表的首项,形成实例几何面列表;

99、通过familyinstance.byface节点,根据族类型列表中的各项与首项线段中点列表对应项点、外侧法线列表对应项向量和实例几何面列表对应项面放置相应的族类型,形成族实例列表,具体包括:

100、以几何面和点作为放置面与放置点、向量作为放置方向,依次放置族类型列表中各项族类型;

101、步骤s18所述的采用步骤s17构建的族实例列表,构建族方向列表,采用步骤s15构建的排序线段向量列表,构建族角度列表,同时采用构建得到的族方向列表和族角度列表,通过旋转处理,构建旋转后的族实例列表,具体包括:

102、通过familyinstance.facingorientation节点获取族实例列表中各项族当前的放置方向,形成族方向列表;

103、通过vector.angleaboutaxis节点,以排序线段向量列表中的各项向量作为旋转轴,计算外侧法线列表中对应项向量与族方向列表中对应项向量之间的夹角角度,得到族角度列表;

104、通过familyinstance.setrotation节点将族实例列表中各项族按照族角度列表中对应项角度进行旋转,得到旋转后的族实例列表;

105、步骤s19所述的采用步骤s12构建的线段长度列表、步骤s13构建的拱高列表、步骤s15构建的排序线段长度列表、步骤s18构建的旋转后族实例列表,构建更新构件列表,具体包括:

106、通过element.setparameterbyname节点,选择线段长度列表与排序线段长度列表中各项值,依次输入至旋转后的族实例列表中对应项族的“模块宽度”与“模块高度”参数中,得到修改后的族实例列表;

107、通过element.setparameterbyname节点,将拱高列表中各项值输入至修改后的族实例列表中对应项族的“弧高”参数中;

108、通过element.setlocation节点将修改后的族实例列表中各项族按照首项线段中点列表中对应项点更新族放置位置,得到更新构件列表;

109、步骤s20所述的采用步骤s19构建的更新构件列表,构建最终判断列表,同时采用构建的最终判断列表,针对步骤s16构建的返回实例构件列表进行删除处理,完成幕墙模型的建立,具体包括:

110、通过object.isnull节点判断更新构件列表中各值是否为空,如果输入值为null值,则输出值为true;如果输入值不为null值,则输出值为false;最终形成判断构件列表;

111、通过list.alltrue节点判断判断构件列表中所有值是否全为布尔值true值,如果输入值全为“true”值,则输出值为true;如果输入值不全为“true”值,则输出值为false;最终得到最终判断列表;

112、通过spring.document.deleteelements节点,根据最终判断列表删除返回实例构件列表中所有revit实例构件;进而完成幕墙模型的建立。

113、本发明方法提供的这种基于dynamo和revit的幕墙模型快速建立方法,利用revit参数化族与dynamo可视化编程功能,提供一种幕墙模型快速建立方法;本发明方法建立了一种可定制化、模块化、同时能够绘制单曲的幕墙模型;本发明方法的建模效率提高、修改速度加快、适用范围增加。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1