A modeling method of large coal yard curved surface grid based on dynamo
By combining the Dynamo plugin with Revit, a large-scale coal yard curved surface grid model can be generated, solving the problems of complex modeling and difficult modification in existing technologies, and realizing efficient and realistic 3D design.
Patent Information
- Authority / Receiving Office
- CN · China
- Patent Type
- Patents(China)
- Current Assignee / Owner
- CHINA UNITED ENG
- Filing Date
- 2023-01-10
- Publication Date
- 2026-05-29
AI Technical Summary
In existing technologies, when using software such as Revit and Rhino to model large coal yard curved space frames, there are problems such as complex models, difficulty in modification, and low efficiency of BIM design.
By combining the Dynamo plugin and Revit software, a series of node commands are used to generate curves of the space frame section in Dynamo, fit line segments, calculate coordinate points, form various rods and spheres, and finally import and verify the model in Revit.
It achieves simple operation, efficient modeling, convenient modification, and fast running, generating realistic 3D space frame models, thus improving the efficiency and informatization level of BIM design.
Smart Images

Figure CN116029028B_ABST
Abstract
Description
Technical Field
[0001] This invention relates to a modeling method for large-scale coal yard curved space frame based on Dynamo. Background Technology
[0002] With the strong implementation of national environmental protection policies, the original open-air coal storage yards of thermal power plants have been transformed into fully enclosed coal storage buildings. These coal storage buildings widely adopt curved space frame forms. Three-dimensional architectural design requires accurate and vivid representation of the spatial space frame model. Currently, conventional methods such as using Revit to build space frames result in numerous members, complex spaces, a huge workload, and parametric processing that consumes a lot of computer memory and is prone to causing system crashes. Furthermore, architectural design schemes are constantly being modified and changed during the design process. If modeling and importing using software such as Rhino, the workload of modification is very large, and the model also needs to be updated at any time.
[0003] It is known that it is difficult to build a space frame model using Revit's "metric conventional model based on curtain wall infill pattern". Even if it can be built, the above problems exist. Moreover, if software such as Rhino is used for modeling, the amount of importing and modification is large, which affects the development of BIM forward design. Summary of the Invention
[0004] The purpose of this invention is to overcome the above-mentioned shortcomings in the prior art and provide a modeling method for large coal yard curved space frame based on Dynamo with reasonable structural design, which makes up for the shortcomings of complex modeling and difficult modification of curved space frame in existing Revit 3D design.
[0005] The technical solution adopted by this invention to solve the above problems is: a modeling method for large coal yard curved surface grid structures based on Dynamo, characterized by including the following steps:
[0006] Step 1: Draw the curve of the grid section, and then import it in Dynamo through the select model elements node command. Use element.geometry to convert it into an element that Dynamo can recognize. If it is composed of multiple line segments, you need to use the polycurve.byjoinedcurves node to fit multiple line segments into a single line segment that Dynamo can recognize. This line segment is the basis for generating all other elements.
[0007] Step 2: Generating all coordinate points in the first row of the upper section: Take the line segment picked in Step 1, measure the length of the line segment using the curve.length node, divide it by the unit width of the grid unit cone, and then divide it by 2 to obtain all coordinate points in the first row of the upper section;
[0008] Step 3: Generating all coordinate points in the second row of the upper section: Take the point list from the first row of Step 2, use the node geometry.tranlate command to copy the second row, and copy the distance by dividing the length of the grid by the number of grid elements to get the distance from the first row to the second row, and then get all coordinate points in the second row;
[0009] Step 4: Obtain all coordinates of the first row of the lower section: First, use the curve.offset node offset command of Dynamo to offset the line segment from Step 1 inward by the height of the section. Then, use the geometry.tranlate node command to copy half the length of the unit of the space frame along the length of the space frame to obtain the line segment of the first row of the lower section. Similarly, use the curve.pointparameter node to obtain the point corresponding to the upper section point. Due to the characteristics of the space frame cone, the first and last points will be reduced by a total of two points. Therefore, the list.dropItem node command is needed to remove the first and last points.
[0010] Step 5: Form the first group of diagonal members of the space frame: First, use `list.DropEverynthItem` to filter out the odd-numbered points in the first and second rows of the upper section and the first row of the lower section respectively; based on the characteristics of the cone-shaped space frame unit, the group of diagonal members is divided into four groups: the first and third groups are connected by connecting the vertices of the first row of the lower section to the odd-numbered points on the left side of the first row of the upper section, using `cylinder.bypointsradius` for cylindrical nodes, and inputting the radius to connect them into members; for the diagonal members in the opposite direction, use `list.reverse` to turn the list of lower section points of the nodes counterclockwise, and then connect them to the corresponding odd-numbered points on the left side of the first row of the upper section, using `c`. The first group uses `ylinder.bypointsradius` to create cylindrical nodes, and the radius is input to connect them into rods in the opposite direction. The second and fourth groups are the odd-numbered points on the left side of the second row of the upper axis corresponding to the vertices of the first row of the lower axis. They are connected into diagonal rods using `cylinder.bypointsradius`, and the radius is input. The diagonal rods in the opposite direction are connected to the corresponding odd-numbered points on the left side of the second row of the upper axis using `list.reverse` to make the list of lower axis points counterclockwise, and then connected into rods in the opposite direction using `cylinder.bypointsradius`, and the radius is input.
[0011] Step 6: Complete all diagonal braces: Use the list.create node to group the four groups of diagonal braces from step 5 into a group, and then use the geometry.translate node to copy them along the length of the space frame. The copy distance is the length of the space frame divided by the number of space frame units, forming a list of distances from the first row;
[0012] Step 7: All horizontal and vertical members of the upper purlin:
[0013] Longitudinal members: First, use the geometry.translate node to copy the top point of the first row in step 2 to the last row of the space frame length. The copy distance is the space frame length. Use list.Dropitems to filter out the points corresponding to the cones in both the first and last rows. Then, use cylinder.bypointsradius cylinder nodes and input the member radius to connect them to form longitudinal members.
[0014] Horizontal members: Connect all the coordinate points from step 2 into the first row of curved surface members using cylinder nodes (cylinder.bypointsradius) and inputting the member radius. Then use geometry.translate to copy all members along the length direction, with the copy distance being the length of the space frame divided by the number of space frame elements, to form a list of distances from the first row.
[0015] Step 8: All horizontal and vertical members of the lower purlin:
[0016] Longitudinal members: First, copy the first row of the lower xuan point in step 4 to the last row of the space frame length using the geometry.translate node. The copy distance is the space frame length minus one space frame unit width. Use list.Dropitems to filter out the points corresponding to the cones in both the first and last rows. Then, use cylinder.bypointsradius cylinder nodes and input the radius to connect the beginning and end to form a longitudinal member.
[0017] Horizontal members: First, connect all the coordinate points from step 4 end to end using cylinder nodes (cylinder.bypointsradius) to form the first row of curved members. Then, use geometry.translate to copy all members along the length direction, with the copy distance being the length of the space frame divided by the number of space frame elements, to form a list of distances from the first row.
[0018] Step 9: Complete the spheres on all nodes; First, use list.Dropitems to filter out the points corresponding to the cones from all coordinate points in the first row of the upper section of Step 2 and all coordinate points in the lower section of Step 4. Then, use geometry.translate to copy all coordinate points along the length direction, with the copy distance being the length of the grid divided by the number of grid elements, forming a list of distances from the first row. Note that you should subtract the last item in the list using list.Dropitems; Use the lis.creat node command to combine the positions of all sphere points in the upper and lower sections, and then use the sphere.bycenterpointradius node command, inputting the radius of the sphere, to generate all the grid spheres in the upper and lower sections;
[0019] Step 10: Verify using Dynamo Player: Launch the Dynamo Player in the massing or interior modeling section of Revit software, input the project parameters, and you can create the required large coal yard curved space frame model. Then save the file or import it directly into the Revit project to complete the spatial 3D model of the curved space frame BIM.
[0020] In step 1 of this invention, the curve of the space frame section is drawn in the elevation view of the newly created conceptual mass in Revit.
[0021] In step 2 of this invention, the result of division is often not an integer. Therefore, it is necessary to write a few lines of code using python.script to obtain an integer, and then return this integer to obtain the number of lower convex cone units of this line segment as the input value of the line list param in the curve.pointparameter node. Then, the position coordinates of all coordinate points on this line segment are obtained using the curve.pointparameter node.
[0022] In step 6 of this invention, the resulting distance list should be calculated by subtracting the last item in the list from list.Dropitems.
[0023] In step 7 of this invention, the resulting distance list should be calculated by subtracting the last item in the list from list.Dropitems.
[0024] In step 8 of this invention, the last item in the list should be subtracted from list.Dropitems.
[0025] Compared with the prior art, the present invention has the following advantages and effects:
[0026] (1) Simple operation, efficient modeling, convenient modification, and fast running;
[0027] (2) It makes up for the shortcomings of existing Revit 3D design, such as complex modeling of curved space frame, difficulty in modification, and the fact that Revit is basically unable to model large coal yard curved space frame;
[0028] (3) It makes BIM 3D design more realistic, parametric and information-based;
[0029] (4) Large irregular and regular curved surfaces in other industrial and civil fields can be modeled using this invention to create realistic three-dimensional space frame models. Attached Figure Description
[0030] Figure 1-6 A split diagram of the overall program diagram written for this invention.
[0031] Figure 7This is a 3D model of a large coal yard curved grid structure modeled using an embodiment of the present invention. Detailed Implementation
[0032] The present invention will be further described in detail below with reference to the accompanying drawings and embodiments. The following embodiments are explanations of the present invention, but the present invention is not limited to the following embodiments.
[0033] This invention provides a modeling method for a large coal yard curved space frame based on Dynamo. Utilizing the node commands provided by the Dynamo plugin in Revit, the relevant nodes of each member are completed in Dynamo. Then, based on different input parameters, the operability of the coal yard curved space frame model is tested. After completion, the model can be run through the Dynamo Player menu in Revit, and the finished product is imported into Revit. Specifically, the following steps are included:
[0034] Step 1: In the elevation drawing of the new conceptual mass in Revit, draw the curves of the space frame section. You can also import surfaces from CAD into Revit. Then, import them into Dynamo using the select model elements node command. Use element.geometry to convert them into elements that Dynamo recognizes. If it consists of multiple line segments, you need to use the polycurve.byjoinedcurves node to fit the multiple line segments into a single line segment that Dynamo recognizes. This line segment is the basis for generating all other elements.
[0035] Step 2: Generating all coordinate points in the first row of the upper section: First, use the `curve.length` node to measure the length of the line segment, then divide it by the width of the cone of the space frame unit, and then divide by 2 to obtain the number of cross-sectional directions. The space frame is composed of cones of units. The upper section is a quadrilateral formed by the base of the cone by four points, and the lower section is the vertex of the cone. The number of base points of the upper section is set to twice as many to derive the vertex on the vertical line where the four points of the base of the cone intersect. The coordinate points of the upper cone are obtained by filtering odd-numbered points using the `list.DropEverynthItem` node to get the four points of the quadrilateral. The vertex of the cone can be obtained by filtering even-numbered points using the `list.DropEverynthItem` node and using the `curve.offset` node offset command to offset inward by the height of the upper section and then copying half the distance of the cone vertically.
[0036] It should be noted that the result of division is often not an integer. Therefore, a few lines of code need to be written in python.script to obtain an integer, and then return this integer to get the number of lower convex cone units of this line segment as the input value of the line list param in the curve.pointparameter node. Then, the curve.pointparameter node is used to get the position coordinates of all coordinate points on this line segment.
[0037] Step 3: Generating all coordinate points in the second row of the upper structure: Take the point list from the first row in Step 2, use the node geometry.tranlate command to copy the second row, and copy the distance by dividing the length of the space frame by the number of space frame elements to get the distance from the first row to the second row, and then obtain the coordinate points of the second row of the space frame.
[0038] Step 4: Obtain all coordinate points of the first row of the lower section: First, use the Dynamo's curve.offset node offset command to offset the line segment from Step 1 inward by the height of the section. Then, use the geometry.tranlate node command to copy half the length of the unit of the space frame along the length of the space frame to obtain the line segment of the first row of the lower section. Similarly, use the curve.pointparameter node to obtain the point corresponding to the upper section point. Due to the characteristics of the space frame cone, the first and last points will be reduced by a total of two points. Therefore, the list.dropItem node command is needed to remove the first and last points.
[0039] Step 5: Form the first group of diagonal braces for the space frame: First, use `list.DropEverynthItem` to filter out the odd-numbered points in the first and second rows of the upper truss and the first row of the lower truss. Based on the characteristics of the cone-shaped space frame unit, the group of diagonal braces is divided into four groups: The first and third groups are formed by connecting the vertices of the first row of the lower truss to the odd-numbered points on the left side of the first row of the upper truss, using `cylinder.bypointsradius` cylindrical nodes and inputting the radius to connect them into members; For the diagonal braces in the opposite direction, use `list.reverse` to turn the list of lower truss points counterclockwise, and then connect them to the corresponding odd-numbered points on the left side of the first row of the upper truss, using `cylinder.bypointsradius` cylindrical nodes and inputting the radius to connect them into members in the opposite direction; The second and fourth groups are formed by connecting the vertices of the first row of the lower truss to the odd-numbered points on the left side of the second row of the upper truss, using `cylinder.bypointsradius` cylindrical nodes and inputting the radius to connect them into diagonal braces. For the diagonal bar in the opposite direction, use list.reverse to change the list of lower vertices of the node to a counterclockwise direction, and then connect it to the odd-numbered point in the second row of the upper vertices on the left. Use cylinder nodes with cylinder.bypointsradius and input the radius to connect them into bars in the opposite direction.
[0040] Step 6: Complete all diagonal braces: Take the four groups of diagonal braces from Step 5, group them into a cluster using the list.create node, and then use the geometry.translate node to copy them along the length of the space frame. The copy distance is the length of the space frame divided by the number of space frame units, forming a list of distances from the first row. Note that you should use list.Dropitems to subtract the last item in the list.
[0041] Step 7: All horizontal and vertical members of the top truss: For vertical members, first use the geometry.translate node to copy the top truss points from the first row in Step 2 to the last row of the space frame length. The copy distance is the space frame length. Use list.Dropitems to filter out the points corresponding to the cones in both the first and last rows. Then use cylinder nodes with cylinder.bypointsradius and input the member radius to connect them to form vertical members. For horizontal members, use all the points from Step 2. Use cylinder nodes with cylinder.bypointsradius and input the member radius to connect them end to end to form the first row of curved members. Then use geometry.translate to copy all members along the length direction. The copy distance is the space frame length divided by the number of space frame elements, forming a list of distances from the first row. Note that you should subtract the last item in the list using list.Dropitems.
[0042] Step 8: All horizontal and vertical members of the lower truss: For vertical members, the first row of the lower truss points from Step 4 is copied to the last row of the space frame length using the geometry.translate node. The copy distance is the space frame length minus one space frame unit width. The first and last rows are both filtered using list.Dropitems to select the points corresponding to the cones. Then, cylinder nodes are used with cylinder.bypointsradius, and the radius is entered to connect the ends to form the vertical members. For horizontal members, all the points from Step 4 are first connected end to end using cylinder nodes with cylinder.bypointsradius to form the first row of curved members. Then, geometry.translate is used to copy all members along the length direction, with the copy distance being the space frame length divided by the number of space frame units, forming a list of distances from the first row. Note that the last item in the list should be subtracted using list.Dropitems.
[0043] Step 9: Complete the spheres on all nodes; First, use list.Dropitems to filter out the points corresponding to the cones from all coordinate points in the first row of the upper section of Step 2 and all coordinate points in the lower section of Step 4. Then, use geometry.translate to copy all coordinate points along the length direction, with the copy distance being the length of the grid divided by the number of grid elements, forming a list of distances from the first row. Note that you should subtract the last item in the list using list.Dropitems; Use the lis.creat node command to combine the positions of all sphere points in the upper and lower sections, and then use the sphere.bycenterpointradius node command, inputting the radius of the sphere, to generate all the grid spheres in the upper and lower sections.
[0044] Step 10: Verify using Dynamo Player: Launch the Dynamo Player in the massing or interior modeling section of Revit software, input the project parameters, and you can create the required large coal yard curved space frame model. Then save the file or import it directly into the Revit project to complete the spatial 3D model of the curved space frame BIM.
[0045] Furthermore, it should be noted that the specific embodiments described in this specification may differ in the shape and name of their components, etc. The above description is merely illustrative of the invention. All equivalent or simple variations made based on the structure, features, and principles described in this patent concept are included within the protection scope of this patent. Those skilled in the art can make various modifications or additions to the described specific embodiments or use similar methods to replace them, as long as they do not deviate from the structure of the invention or exceed the scope defined by the claims, all of which should fall within the protection scope of this invention.
Claims
1. A modeling method for large-scale coal yard curved surface grid structures based on Dynamo, characterized in that: Includes the following steps: Step 1: Draw the curves of the space frame section in Revit. Then, import them into Dynamo using the "Select Model Elements" command. Use "Element.Geometry" to convert them into elements recognized by Dynamo. If it consists of multiple line segments, use the "Polycurve.ByJoinedCurves" node to fit the multiple line segments into a single line segment recognized by Dynamo. This line segment is the basis for generating all other elements. In this step, draw the curves of the space frame section in the elevation view of the newly created conceptual mass in Revit. Step 2: Generating all coordinate points in the first row of the upper section: Take the line segment picked in Step 1, measure the length of the line segment using the curve.length node, divide it by the unit width of the grid unit cone, and then divide it by 2 to obtain all coordinate points in the first row of the upper section; Step 3: Generating all coordinate points in the second row of the upper section: Take the point list from the first row of Step 2, use the node geometry.tranlate command to copy the second row, and copy the distance by dividing the length of the grid by the number of grid elements to get the distance from the first row to the second row, and then get all coordinate points in the second row; Step 4: Obtain all coordinates of the first row of the lower section: First, use the curve.offset node offset command of Dynamo to offset the line segment from Step 1 inward by the height of the section. Then, use the geometry.tranlate node command to copy half the length of the unit of the space frame along the length of the space frame to obtain the line segment of the first row of the lower section. Similarly, use the curve.pointparameter node to obtain the point corresponding to the upper section point. Due to the characteristics of the space frame cone, the first and last points will be reduced by a total of two points. Therefore, the list.dropItem node command is needed to remove the first and last points. Step 5: Form the first group of diagonal members of the space frame: First, use list.DropEverynthItem to filter out the odd-numbered points on the first and second rows of the upper section and the first row of the lower section respectively; according to the characteristics of the cone of the space frame unit, the group of diagonal members is divided into four groups: the first and third groups are connected to the odd-numbered points on the left side of the first row of the upper section corresponding to the vertices of the first row of the lower section, using cylinder nodes with cylinder.bypointsradius and inputting the radius to connect them into members; for the diagonal members in the opposite direction, use list.reverse to turn the list of nodes of the lower section counterclockwise, and then connect them to the odd-numbered points on the left side of the first row of the upper section, using cylinder nodes with cylinder.bypointsradius and inputting the radius to connect them into members in the opposite direction; The second and fourth groups are the odd-numbered points on the left side of the second row of the upper section corresponding to the vertices of the first row of the lower section. They are connected using cylinder nodes with the radius input to form diagonal rods. The diagonal rods in the opposite direction are connected by turning the list of lower section points of the node into a counterclockwise direction using list.reverse, and then connecting them with the corresponding odd-numbered points on the left side of the second row of the upper section. They are connected using cylinder nodes with the radius input to form rods in the opposite direction. Step 6: Complete all diagonal braces: Use the list.create node to group the four groups of diagonal braces from step 5 into a group, and then use the geometry.translate node to copy them along the length of the space frame. The copy distance is the length of the space frame divided by the number of space frame units, forming a list of distances from the first row; Step 7: All horizontal and vertical members of the upper purlin: Longitudinal members: First, use the geometry.translate node to copy the top point of the first row in step 2 to the last row of the space frame length. The copy distance is the space frame length. Use list.Dropitems to filter out the points corresponding to the cones in both the first and last rows. Then, use cylinder.bypointsradius cylinder nodes and input the member radius to connect them to form longitudinal members. Horizontal members: Connect all the coordinate points from step 2 into the first row of curved surface members using cylinder nodes (cylinder.bypointsradius) and inputting the member radius. Then use geometry.translate to copy all members along the length direction, with the copy distance being the length of the space frame divided by the number of space frame elements, to form a list of distances from the first row. Step 8: All horizontal and vertical members of the lower purlin: Longitudinal members: First, copy the first row of the lower xuan point in step 4 to the last row of the space frame length using the geometry.translate node. The copy distance is the space frame length minus one space frame unit width. Use list.Dropitems to filter out the points corresponding to the cones in both the first and last rows. Then, use cylinder.bypointsradius cylinder nodes and input the radius to connect the beginning and end to form a longitudinal member. Horizontal members: First, connect all the coordinate points from step 4 end to end using cylinder nodes (cylinder.bypointsradius) to form the first row of curved members. Then, use geometry.translate to copy all members along the length direction, with the copy distance being the length of the space frame divided by the number of space frame elements, to form a list of distances from the first row. Step 9: Complete the spheres on all nodes; First, use list.Dropitems to filter out the points corresponding to the cones from all coordinate points in the first row of the upper section of Step 2 and all coordinate points in the lower section of Step 4. Then, use geometry.translate to copy all coordinate points along the length direction, with the copy distance being the length of the grid divided by the number of grid elements, forming a list of distances from the first row. Note that you should subtract the last item in the list using list.Dropitems; Use the lis.creat node command to combine the positions of all sphere points in the upper and lower sections, and then use the sphere.bycenterpointradius node command, inputting the radius of the sphere, to generate all the grid spheres in the upper and lower sections; Step 10: Verify using Dynamo Player: Launch the Dynamo Player in the massing or interior modeling section of Revit software, input the project parameters, and you can create the required large coal yard curved space frame model. Then save the file or import it directly into the Revit project to complete the spatial 3D model of the curved space frame BIM.
2. The modeling method for large coal yard curved surface grid structures based on Dynamo according to claim 1, characterized in that: In step 2, the result of division is often not an integer. Therefore, it is necessary to write a few lines of code in python.script to obtain an integer and then return this integer. The number of lower convex cone units of this line segment is used as the input value of the line list param in the curve.pointparameter node. Then, the position coordinates of all coordinate points on this line segment are obtained using the curve.pointparameter node.
3. The modeling method for large coal yard curved surface grid structures based on Dynamo according to claim 1, characterized in that: In step 6, the resulting distance list should be calculated by subtracting the last item from list.Dropitems.
4. The modeling method for large coal yard curved surface grid structures based on Dynamo according to claim 1, characterized in that: In step 7, the resulting distance list should be calculated by subtracting the last item from list.Dropitems.
5. The modeling method for large coal yard curved surface grid structures based on Dynamo according to claim 1, characterized in that: In step 8, you should subtract the last item in the list from list.Dropitems.