Roof equipment maintenance route automatic recommendation method
By automatically extracting the three-dimensional BIM model data of the roof and calibrating the obstacle properties of the grid node diagram, calculating and displaying the shortest path, the high cost and omission problems caused by complex roof traffic conditions in traditional methods are solved, and fast and accurate maintenance route planning is achieved.
Patent Information
- Application Number
- CN202411630622.2
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Filing Date
- 2024-11-15
- Publication Date
- 2025-03-18
AI Technical Summary
In construction projects, the traffic conditions of the roof are complex, and traditional methods rely on field investigations and visual roaming of BIM models. There is a lot of manpower and material consumption, the results rely on experience and are easy to miss, resulting in increased costs in the later stage.
It provides an automatic recommendation method for roofing equipment maintenance routes. By extracting the three-dimensional BIM model data of the roof, converting it into a triangular panel set, calibrating the obstacle properties of the grid node diagram, calculating the shortest path, and displaying the optimal path in the three-dimensional space.
It realizes the rapid and accurate judgment of the spatial accessibility of roof equipment maintenance routes, reduces the time and cost of field inspections and visual inspections, avoids omissions caused by insufficient experience, and improves the efficiency and accuracy of maintenance route planning.
Smart Images

Figure CN119648958A_ABST
Abstract
Description
Technical Field
[0001] The invention relates to a method for automatically recommending a maintenance route for roofing equipment. Background Art
[0002] In construction projects, the access conditions on the roof are usually complicated and there are many obstructions.
[0003] To ensure that the maintenance route from the roof stairwell to the mechanical and electrical equipment is unobstructed, the traditional method mainly relies on the owner, the property owner, and the
[0004] The owner or general contractor can make judgments through on-site inspections or conduct visual walk-through inspections in the BIM model.
[0005] These methods all have certain limitations, such as the need to consume a lot of manpower and material resources, the inspection results rely on experience, and the
[0006] It is easy to make omissions, which leads to the later addition of facilities such as horse paths and bridges, increasing costs. Summary of the invention
[0007] The object of the present invention is to provide a method for automatically recommending maintenance routes for roofing equipment.
[0008] In order to solve the above problems, the present invention provides a method for automatically recommending a roof equipment maintenance route, comprising:
[0009] Step 1: Extract the roof 3D BIM model data and convert it into a triangular face set meshTriangles;
[0010] Step 2: Extract the outline of the roof structure plate as the roof boundary and perform meshing to obtain a new mesh node map N_BMap;
[0011] Step 3: calibrate the attributes of the grid nodes of the first obstacle and the support obstacle in the grid node map N_BMap;
[0012] Step 4: Based on the triangle patch set meshTriangles, calibrate the attributes of the third obstacle in the mesh node map N_BMap;
[0013] Step 5: based on the attributes of the already calibrated grid nodes in the grid node map N_BMap, calibrate the attributes of the remaining grid nodes in the grid node map N_BMap; Step 6: determine the starting grid node and the target grid node;
[0014] Step 7: Based on the attributes of the calibrated grid nodes, the shortest path between the starting grid node and the target grid node is calculated;
[0015] Step 8: The path planning display module draws the path grid node plane diagram of the shortest path in three-dimensional space; and marks the grid nodes of the type of land on the shortest path, and marks the areas that can still be optimized in the optimal path.
[0016] Furthermore, in the above method, step 1: extracting the three-dimensional BIM model data of the roof and converting it into a triangular face set meshTriangles, includes:
[0017] Step 1.1: Open the comprehensive roof RVT model file in the roof 3D BIM model, extract the electromechanical pipeline elements Elements, and obtain the geometric information of the electromechanical pipeline elements Elements, that is, the geometric entity ElementSolids represented by BRep; traverse each face ElementFace in the entity ElementSolids, and triangulate each face ElementFace into ElementMesh, where the triangular face in ElementMesh is ElementTriangle, and all triangular face ElementTriangle are taken as the roof triangular face set;
[0018] Step 1.2: Extract the roof building and structure link model in the roof comprehensive RVT model file, convert it into a model group and then ungroup it into components to obtain the roof to building and structural elements, obtain the geometric information of the roof building and structural elements in the comprehensive RVT model, that is, the entity LinkedElementSolids represented by BRep, traverse each face LinkedElementFace in the entity LinkedElementSolids, and triangulate each face LinkedElementFace into LinkedElementMesh, where the triangle face in LinkedElementMesh is LinkedElementTriangle; take all LinkedElementTriangle as a linked model triangle face set;
[0019] Step 1.3: Merge the roof triangle patch set and the linked model triangle patch set into a triangle patch set meshTriangles.
[0020] Furthermore, in the above method, step 2: extracting the roof structure plate outline as the roof boundary and performing meshing processing to obtain a new mesh node map N_BMap includes:
[0021] Step 2.1: Get the spatial bounding box FloorBoundingbox of the roof structure plate, i.e. the floor, get the diagonal vertices of the spatial bounding box FloorBoundingbox in the horizontal plane, and use the obtained diagonal vertices as the diagonal vertices of the initial grid, wherein the grid width W_Node and the pedestrian passage width circulationWidth are defined, and the grid node graph Bmap is calculated with the diagonal vertices of the initial grid and the grid width W_Node; and W_Node = circulationWidth / 3;
[0022] Step 2.2: Get the geometric information of the roof structure plate, such as the geometric entity solid of the floor slab floor, and get the upper surface contour FloorFace of the geometric entity solid of the floor slab floor;
[0023] Step 2.3: Traverse the grid nodes node in the grid node map Bmap, obtain the center point point of each grid node, use the ray method to determine whether the center point point of the grid node node is within the upper surface contour FloorFace of the roof structure plate, and delete the grid nodes outside the upper surface FloorFace of the roof structure plate from the grid node map BMap to obtain a new grid node map N_BMap.
[0024] Furthermore, in the above method, step 2.1: obtain the spatial bounding box FloorBoundingbox of the roof structure plate, i.e. the floor, obtain the diagonal vertices of the spatial bounding box FloorBoundingbox in the horizontal plane, and use the obtained diagonal vertices as the diagonal vertices of the initial grid, wherein the grid width W_Node and the pedestrian passage width circulationWidth are defined, and the grid node graph Bmap is calculated with the diagonal vertices of the initial grid and the grid width W_Node, including:
[0025] Step 2.1.2, get the first spatial bounding box FloorBoundingbox of the floor, and get the minimum point minPoint and maximum point maxPoint of the first spatial bounding box FloorBoundingbox. According to the x and y coordinates of the maximum point maxPoint and the minimum point minPoint, calculate the length length and width width of the first spatial bounding box FloorBoundingbox, and calculate the number of grids in the x direction according to the integer multiple of one-third of the width of the moving line circulationWith. and the number of grids in the y direction Generate a grid node graph BMap based on the number of grids in the x direction and the number of grids in the y direction.
[0026] Further, in the above method, step 2.3 includes:
[0027] In step 2.3.1, loop through each grid node node in BMap to obtain the center point point of each grid node node.
[0028] In step 2.3.2, all edges of the upper surface contour FloorFace can be traversed to calculate the number of line segments crossings within the range of the line segment projection of each center point point in step 2.3.1, that is, the number of intersection points where a ray is drawn from the center point point and intersects the upper surface contour FloorFace; among them, if the number of line segments crossings is odd, then the center point point is within the upper surface contour FloorFace, that is, within the roof contour; screen out the grid nodes whose center point point is within the upper surface contour FloorFace, and generate a new grid node map N_BMap based on the screened grid nodes.
[0029] Further, in the above method, step 3: calibrate the attributes of the grid nodes of the first obstacle and the bracket obstacle types in the grid node map N_BMap, including:
[0030] In step 3.1, screen out building walls, structural columns, railings, mechanical and electrical equipment, and fire protection equipment in the roof 3D BIM model as the first obstacle elements blockElements, calculate the second spatial bounding box bbox of the first obstacle elements blockElements and its maximum point max and minimum point min, and calculate the set of grid coordinates occupied by the spatial bounding box bbox of the first obstacle elements blockElements on the plane based on the maximum point max and minimum point min of the second spatial bounding box bbox to obtain the first obstacle set blockGrids.
[0031] In step 3.2, screen out the brackets bracketElements in the roof 3D BIM model, obtain their bracket widths bracketWidth, if bracketWidth ≥ circulationWith, then the bracketElements can pass normally and no calculation is required; if bracketWidth < circulationWidth, then the bracket cannot pass normally, calculate the third spatial bounding box bracketBox of the bracketElements and its maximum point bracketMax and minimum point bracketMin, and calculate the set of grid coordinates occupied by the third spatial bounding box bracketBox of the spatial bounding box bracketBox on the plane to obtain the bracket obstacle set bracketGrids.
[0032] Step 3.3, traverse each grid node node in the grid node map N_BMap obtained in step 2. If the coordinates of a grid node node in the grid node map N_BMap are in the building wall obstacle set blockGrids, then set the type of the attribute of the grid node node to the first obstacle BlockMissile, with a weight of -2, where BlockMissile is the first obstacle type, including building walls, structural columns, railings, electromechanical equipment, and fire-fighting equipment; if the coordinates of a grid node node in the grid node map N_BMap are in the bracket set bracketGrids, then the type of the attribute is the bracket obstacle Bracket, with a weight of 100, where Bracket is the second obstacle type; if the coordinates of a grid node node in the grid node map N_BMap are not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids, then perform steps 4 to 5 until each grid node in the grid node map N_BMap is traversed and the weight of each grid node node is updated, and then perform step 6.
[0033] Furthermore, in the above method, step 4: based on the triangle patch set meshTriangles, calibrating the attributes of the third obstacle in the mesh node map N_BMap includes:
[0034] Step 4.1: Define the spannable pipe height pipeHeight according to the spatial occupancy, take the currently traversed grid node node that is not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids as a square bottom shape, the roof as the base elevation, and create a spatial entity NodeSolid1 with the bottom elevation as pipeHeight and the top elevation as 1200mm, and convert it into a triangle patch set meshTriangles1 according to step 1.1;
[0035] Step 4.2: Set the triangle number threshold in the octree space to 10;
[0036] Step 4.3: Get the spatial bounding box meshBound of the triangle patch set meshTriangles in step 1. meshBound.Center is the center of the spatial bounding box meshBound. meshBound.Extents is the distance from the center of the spatial bounding box Bound to each side. Divide the spatial bounding box Bound into 8 subspaces smallMeshBound. The length, width and height of each subspace smallMeshBound are half of its parent space, i.e. the spatial bounding box Bound. The coordinates of the centers of the 8 subspaces are meshBound.Center and move in eight directions. distance;
[0037] Step 4.4: Traverse the eight subspaces smallMeshBound, and determine whether each subspace smallMeshBound intersects with the triangle face set meshTriangles1. If only one subspace intersects with the triangle face set meshTriangles1, then use the subspace as the spatial bounding box Bound, and repeat step 3.3 until the number of triangle faces in the spatial bounding box Bound is less than the triangle number threshold Threshold, or there are two subspaces that intersect with the triangle face set meshTriangles1 at the same time, so as to obtain the final spatial bounding box Bound;
[0038] Step 4.5: Get the triangle patch set new_MeshTriangles in the final space bounding box Bound, traverse the triangle patch newtriangle in the triangle patch set new_MeshTriangles, and determine whether the triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle1 in the triangle patch set meshTriangles1;
[0039] Step 4.6: If any triangle patch triangle does not intersect with any triangle patch triangle1, go to step 5;
[0040] Step 4.7: If any triangle patch triangle intersects with any triangle patch meshTriangles1, the property of the currently traversed grid node corresponding to the triangle patch triangle1 in the grid node map N_BMap that is not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids is set to: type is the third obstacle MiddleElement, weight is 101.
[0041] Furthermore, in the above method, step 5: based on the attributes of the already calibrated mesh nodes in the mesh node map N_BMap, calibrating the attributes of the remaining mesh nodes in the mesh node map N_BMap includes:
[0042] Step 5.1: Filter the mesh nodes whose node types in the attributes of the mesh nodes node are other than the first obstacle BlockMissile, the bracket obstacle Bracket and the third obstacle type MiddleElemen from the mesh node map N_BMap as the mesh node set FilterMapNodes;
[0043] Step 5.2: Define the height limit for people to pass through circulationHeight and the height that people can cross pipeHeight according to the space occupation, traverse the mesh nodes node in the mesh node set FilterMapNodes of non-obstructions, take the currently traversed mesh node node as the square bottom shape, the roof as the basic elevation, 1200mm~circulationHeight to create a spatial entity NodeSolid2, and convert the spatial entity NodeSolid2 into a triangle face set meshTriangles2 according to step 1;
[0044] Step 5.3: Following steps 4.2 to 4.5, determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2. If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2, set the attribute of the currently traversed mesh node node in the mesh node set FilterMapNodes to: type is high element, weight is 21;
[0045] Step 5.4: If any triangle patch newtriangle in the triangle patch set new_MeshTriangles does not intersect with any triangle patch triangle2 in the triangle patch set meshTriangles2, take the currently traversed mesh node node as the square bottom shape, the roof as the basic elevation, 0mm~pipeHeight to create a spatial entity NodeSolid3 and convert it into the triangle patch set meshTriangles3 according to step 1;
[0046] Step 5.5: Following steps 4.2 to 4.5, determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3. If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3, then set the attribute of the currently traversed mesh node node in the mesh node set FilterMapNodes to: type is low pipeline LowElement, weight is 20; if any triangle patch newtriangle in the triangle patch set new_MeshTriangles still does not intersect with any triangle patch triangle3 in the triangle patch set meshTriangles3, then set the attribute of the currently traversed mesh node to: type is human accessible ground Land, weight is 10;
[0047] Step 5.6: Traverse the grid nodes of type LowElement in the grid node map N_Bmap. If there are more than three grid nodes of type LowElement distributed continuously horizontally or vertically, set the attributes of these continuously distributed grid nodes to: type is the third obstacle MiddleElement, and the weight is 101;
[0048] Step 5.7: Filter out the remaining grid nodes except the grid node types of the first obstacle blockGrids, bracket obstacle bracketGrids, third obstacle MiddleElemen, low pipe LowElemen and high pipe HighElemen from the grid node set FilterMapNodes, and set the grid properties of all the remaining grid nodes to: type is the pedestrian ground Land, and the weight is 10.
[0049] Furthermore, in the above method, step 7: calculating the shortest path between the starting grid node and the target grid node based on the attributes of the calibrated grid nodes includes:
[0050] Step 7.1: Construct an open list and a closed list. The open list is used to store the candidate path grid nodes, which are initially the starting grid nodes starNodes; and the closed list is used to store the path grid nodes of the shortest path, which is initially empty.
[0051] Step 7.2.1: Expand the starting grid node startNodes and the target grid node EndNodes to a size of a 3x3 grid range, and then use the central grid node as the representative of the actual pass grid; set the attributes of the 3x3 grid nodes around the starting grid node to: type Land, weight 10; set the attributes of the 3x3 grid nodes around the end grid node EndNodes to: type Land, weight 10;
[0052] Step 7.2.2, that is, expand each of the remaining grid nodes in the grid node map N_Bmap to occupy a size of a 3x3 grid range, and set the attributes of the 8 grids around the 3x3 grid of each of the remaining grid nodes to be the same as the attributes of the central grid node to which it belongs;
[0053] Step 7.3: Based on the central grid node in the latest closed list as the parent grid node, traverse the 8 grid nodes around it. If the 3×3 grid nodes centered on the grid node contain an obstacle grid node or the grid node has been stored in the closed list, skip the grid node; if there is no obstacle grid node, store the grid node in the open list; the obstacle grid nodes are the first obstacle blockGrids, the bracket obstacle bracketGrids and the third obstacle MinddleElement;
[0054] Step 7.4: Calculate the F(x) value of the grid node in the open list; where F(x) = G(x) + H(x),
[0055] Step 7.5: Select the grid node with the minimum F(x) value from the open queue, and transfer it from the open list to the closed list; obtain the grid nodes within the 3x3 range around the grid node with the minimum F(x) value that do not exceed the roof boundary and are not obstacles, and add the obtained grid nodes to the openList, then the grid node with the minimum F(x) value is the parent grid node of the obtained grid node; F(x) is the total weight value from the starting grid node startNodes to the end grid node EndNodes; G(x) is the sum of the actual moving distances of each grid node on the path from the starting grid node to the target grid node to the starting grid node startNodes; wherein, the larger the weight, the longer the moving distance;
[0056] G(x)=∑MapNode[i][j].weight
[0057] MapNode[i][j].weight is the weight of the grid node in the i-th row and j-th column in the grid node graph N_BMap;
[0058]
[0059] H(x) is the estimated moving distance from the current grid node (x1y1) to the end point (x2, y2) on the path from the starting grid node to the target grid node, calculated using the Euclidean distance;
[0060] Step 7.6: Repeat steps 7.3 to 7.5 until the closed list contains the target grid node EndNode or there is no grid node in the open list.
[0061] Furthermore, in the above method, step 8: the path planning display module draws a path grid node plane diagram of the shortest path in three-dimensional space; and marks the grid nodes of the type of land on the shortest path, and marks the areas that can still be optimized in the optimal path, including:
[0062] Step 8.1, obtain the center point of the grid node on the optimal route, and calculate the grid outline according to the coordinates of the center point and the pedestrian passage width circulationWidth / 3, and obtain the type of the grid node in the grid outline;
[0063] Step 8.2, draw the grid node fill pattern in Revit according to the grid outline. If the type of the grid node is land, fill the grid node with a blue pattern; if the type of the grid node is not land, fill the grid node with a red pattern. Finally, a visual optimal path containing blue and red patterns is formed.
[0064] Compared with the prior art, the present invention provides a method for automatically recommending maintenance routes for roof equipment and calibrating obstacles. Through intelligent algorithms, the maintenance routes of maintenance objects are quickly and automatically analyzed, passing areas and obstacle areas are marked, and the locations and reasons for reducing the convenience of passing the maintenance routes are given, providing references for subsequent adjustment plans, optimizing maintenance routes, and reducing costs. Through the present invention, users can quickly and accurately determine the spatial accessibility of maintenance routes for roof equipment, reducing the time and cost of field visits and visual inspections, avoiding omissions due to lack of experience, and improving the efficiency and accuracy of maintenance route planning. BRIEF DESCRIPTION OF THE DRAWINGS
[0065] Figure 1 This is a flow chart of a technical solution of an embodiment of the present invention;
[0066] Figure 2 A model processing algorithm according to an embodiment of the present invention;
[0067] Figure 3A grid node weight calculation algorithm according to an embodiment of the present invention;
[0068] Figure 4 An optimal route calculation algorithm according to an embodiment of the present invention;
[0069] Figure 5 This is a result picture of an embodiment of the present invention. DETAILED DESCRIPTION
[0070] The present invention is further described in detail below in conjunction with the accompanying drawings.
[0071] In a typical configuration of the present application, the terminal, the device of the service network and the trusted party all include one or more processors (CPU), input / output interfaces, network interfaces and memories.
[0072] The memory may include non-permanent storage in a computer-readable medium, random access memory (RAM) and / or non-volatile memory in the form of read-only memory (ROM) or flash RAM. The memory is an example of a computer-readable medium.
[0073] Computer readable media include permanent and non-permanent, removable and non-removable media that can be implemented by any method or technology to store information. Information can be computer readable instructions, data structures, program modules or other data. Examples of computer storage media include, but are not limited to, phase change memory (PRAM), static random access memory (SRAM), dynamic random access memory (DRAM), other types of random access memory (RAM), read-only memory (ROM), electrically erasable programmable read-only memory (EEPROM), flash memory or other memory technology, compact disk read-only memory (CD-ROM), digital versatile disk (DVD) or other optical storage, magnetic cassettes, magnetic tape disk storage or other magnetic storage devices or any other non-transmission media that can be used to store information that can be accessed by a computing device. As defined herein, computer readable media does not include non-transitory media such as modulated data signals and carrier waves.
[0074] like Figures 1 to 5 As shown, the present invention provides a method for automatically recommending a roof equipment maintenance route, the method comprising:
[0075] Step 1: Extract the roof 3D BIM model data and convert it into a triangular face set meshTriangles.
[0076] Step 1.1: Open the roof comprehensive RVT model file in the roof 3D BIM model, extract the electromechanical pipeline elements Elements (including the roof BIM model of electromechanical pipelines), and obtain the geometric information of the electromechanical pipeline elements Elements, that is, the geometric entity ElementSolids represented by BRep; traverse each face ElementFace in the entity ElementSolids, and triangulate each face ElementFace into ElementMesh, where the triangular face in ElementMesh is ElementTriangle;
[0077] Step 1.2: Extract the roof building and structure link model (roof building, structure model) in the roof comprehensive RVT model file, convert it into a model group and then ungroup it into normal components to obtain the roof to building and structure elements, obtain the geometric information of the roof building and structure elements in the comprehensive RVT model, that is, the entity LinkedElementSolids represented by BRep, traverse each face LinkedElementFace in the entity LinkedElementSolids, and triangulate each face LinkedElementFace into LinkedElementMesh, where the triangle face in LinkedElementMesh is LinkedElementTriangle; take all LinkedElementTriangle as a linked model triangle face set;
[0078] Step 1.3: Merge the roof triangle patch set ElementMesh and the linked model triangle patch set LinkedElementMesh into the triangle patch set meshTriangles;
[0079] Here, if Figure 1 and 2 As shown, in steps 1.1 to 1.3, the roof comprehensive electromechanical model file MEP.rvt can be opened, the roof building model AR.rvt and the structural model ST.rvt linked therein can be converted into a model group, and the model group can be ungrouped into multiple components, that is, the roof components can be concentrated into the same model.
[0080] In steps 1.1 to 1.3, all the components Elements are traversed to obtain the geometric entities ElementSolids of all the components Elements. In steps 1.1 to 1.3, all the faces of the geometric entity ElementSolids can be obtained, and the faces are triangulated to obtain a mesh with a maximum edge length of maxEdgeLength = 5feet = 1524mm. Traverse the mesh and separate each triangle into a vertex set List <point>Indicates that all triangles are converted to meshTriangles in the end, of type List <List<Point>>。
[0081] Step 2: Extract the outline of the roof structure plate as the roof boundary and perform meshing to obtain a new mesh node map N_BMap.
[0082] Step 2.1: Get the spatial bounding box FloorBoundingbox of the roof structure board, i.e. the floor, get the diagonal vertices of the spatial bounding box FloorBoundingbox in the horizontal plane, and use the obtained diagonal vertices as the diagonal vertices of the initial grid, wherein the grid width W_Node and the pedestrian passage width circulationWidth are defined, and the grid node map Bmap is calculated with the diagonal vertices of the initial grid and the grid width W_Node; and W_Node = circulationWidth / 3. Preferably, circulationWidth = 600mm, W_Node = 200mm.
[0083] Here, in step 2.1.1, the user can click the function button and enter the traffic width circulationWidth = 600mm, traffic height circulationHeight = 2000mm, crossable pipe width pipeWidth = 500mm, and crossable pipe height pipeHeight = 300mm in the pop-up page.
[0084] In step 2.1.2, you can get the first spatial bounding box FloorBoundingbox of the floor, and get the minimum point minPoint and maximum point maxPoint of the first spatial bounding box FloorBoundingbox. According to the x and y coordinates of the maximum point maxPoint and the minimum point minPoint, calculate the length length and width width of the first spatial bounding box FloorBoundingbox, and calculate the number of grids in the x direction according to the integer multiple of one-third of the width of the circulation line circulationWith. and the number of grids in the y direction Generate a grid node graph BMap based on the number of grids in the x direction and the number of grids in the y direction.
[0085] Step 2.2: Get the geometric information of the roof structure plate, such as the geometric entity solid of the floor slab floor, and get the upper surface contour FloorFace of the geometric entity solid of the floor slab floor;
[0086] Here, in step 2.2:, the geometric entity solid of the floor slab floor can be obtained, and its upper surface contour FloorFace can be obtained.
[0087] Step 2.3: Traverse the grid nodes node in the grid node map Bmap, obtain the center point point of each grid node node, use the ray method to determine whether the center point point of the grid node node is within the upper surface contour FloorFace of the roof structure plate, and delete the grid nodes outside the upper surface FloorFace of the roof structure plate from the grid node map BMap to obtain a new grid node map N_BMap.
[0088] Here, in step 2.3.1, each grid node node in the BMap can be looped through to obtain the center point point of each grid node node, wherein the Z coordinate of the center point point can be ignored.
[0089] In step 2.3.2, all edges of the upper surface contour FloorFace can be traversed to calculate the number of line segments crossings within the range of the line segment projection of each center point point in step 2.3.1, that is, the number of intersections of the ray with the center point point and the upper surface contour FloorFace; among them, if the number of line segments crossings is an odd number, then the center point point is within the upper surface contour FloorFace, that is, within the roof contour; screen out the grid nodes whose center point point is within the upper surface contour FloorFace, and generate a new grid node map N_BMap based on the screened out grid nodes.
[0090] Step 3: Calibrate the attributes of the grid nodes of the first obstacle and the support obstacle in the grid node map N_BMap, wherein the attributes of the grid nodes include: node type and node weight.
[0091] Here, step 3.1, in the roof 3D BIM model, building walls, structural columns, railings, electromechanical equipment and fire-fighting equipment are selected as the first obstacle element blockElements, and the second spatial bounding box bbox of the first obstacle element blockElements and its maximum point max and minimum point min are calculated. Based on the maximum point max and minimum point min of the second spatial bounding box bbox, the grid coordinate set occupied by the spatial bounding box bbox on the plane of the first obstacle element blockElements is calculated to obtain the first obstacle set blockGrids;
[0092] Step 3.2, screen the bracket elements in the roof 3D BIM model to obtain the width of the support and hanger bracketWidth of the bracket elements. If bracketWidth ≥ circulationWith, the bracket elements can pass through normally and no calculation is required; if bracketWidth < circulationWith, the bracket cannot pass through normally. Calculate the third spatial bounding box bracketBox, the maximum point bracketMax, and the minimum point bracketMin of the bracket elements, and calculate the set of grid coordinates occupied by the third spatial bounding box bracketBox on the plane of the spatial bounding box bracketBox to obtain the bracket obstacle set bracketGrids;
[0093] Step 3.3, traverse each grid node node in the grid node map N_BMap obtained in Step 2. If the coordinate of a certain grid node node in the grid node map N_BMap is in the building wall obstacle set blockGrids, set the type of the attribute of the grid node node to the first type of obstacle BlockMissile, and the weight to -2, where BlockMissile is the first type of obstacle in this application, including building walls, structural columns, railings, mechanical and electrical equipment, fire protection equipment, etc.; if the coordinate of a certain grid node node in the grid node map N_BMap is in the bracket set bracketGrids, set the type of the attribute of the grid node to the bracket obstacle Bracket, and the weight to 100, where Bracket is the bracket obstacle and is the second type of obstacle in the present invention; if the coordinate of a certain grid node node in the grid node map N_BMap is not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids, perform Steps 4 to 5 until each grid node in the grid node map N_BMap has been traversed and the weight of each grid node node has been updated, and then perform Step 6.
[0094] As Figure 3 shown, Step 4: Based on the triangle patch set meshTriangles, calibrate the attributes of the third obstacle in the grid node map N_BMap;
[0095] Step 4.1: Define the spannable pipe height pipeHeight according to the space occupancy, take the currently traversed grid node node that is not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids as a square bottom shape, the roof as the basic elevation, and create a spatial entity NodeSolid 1 with the bottom elevation as pipeHeight and the top elevation as 1200mm, and convert it into a triangle patch set meshTriangles1 according to step 1.1;
[0096] Here, based on the bottom surface of a grid node node in the coordinate grid node map N_BMap that is not in the first obstacle set blockGrids or the bracket obstacle set brackeGrids, it is stretched from a relative elevation of 300mm (pipeHeight) to 1200mm to form a spatial geometric entity Nodesolid1, and converted into a triangular face set meshTriangles1 by following the operation of step 1;
[0097] Step 4.2: Set the triangle number threshold in the octree space to 10;
[0098] Step 4.3: Get the spatial bounding box meshBound of the triangle patch set meshTriangles in step 1. meshBound.Center is the center of the spatial bounding box meshBound. meshBound.Extents is the distance from the center of the spatial bounding box Bound to each side. Divide the spatial bounding box Bound into 8 subspaces smallMeshBound. The length, width and height of each subspace smallMeshBound are half of its parent space, i.e. the spatial bounding box Bound. The coordinates of the centers of the 8 subspaces are meshBound.Center and move in eight directions. distance;
[0099] Here, the triangle number threshold Threshold in the octree space is set to 10, and the spatial bounding box meshBound of the triangle patch set meshTriangles is obtained. MeshBound.Center is the center of the spatial bounding box meshBound.Center = (25.8313, 153.1337, 175.9513), and meshBound.Extents is the distance from the center of the spatial bounding box to each side {dx = 97.6869 feet, dy = 52.8215 feet, dz = 4.4947 feet}. The spatial bounding box is divided into 8 subspaces smallMeshBound. The length, width and height of the subspace are all half of the parent space. The coordinates of the centers of the 8 subspaces smallMeshBound are Bound.Center and move in eight directions. distance;
[0100] Step 4.4: Traverse the eight subspaces smallMeshBound, and determine whether each subspace smallMeshBound intersects with the triangle face set meshTriangles1. If only one subspace intersects with the triangle face set meshTriangles1, then use the subspace as the spatial bounding box Bound, and repeat step 3.3 until the number of triangle faces in the spatial bounding box Bound is less than the triangle number threshold Threshold, or there are two subspaces that intersect with the triangle face set meshTriangles1 at the same time, so as to obtain the final spatial bounding box Bound;
[0101] Here, traverse the eight subspaces smallMeshBound to determine whether the subspace smallMeshBound intersects with meshTriangles1 (i.e., determine whether there are vertices of triangles in meshTriangles1 in smallMeshBound). If only one subspace intersects with the triangle face set NodeTriangles, then use this subspace as the spatial bounding box Bound and repeat steps 3 and 3 until the number of triangle faces in the spatial bounding box Bound is less than the triangle number threshold Threshold, or there are two subspaces intersecting with the triangle face set meshTriangles1 at the same time, so as to obtain the final spatial bounding box Bound.
[0102] Step 4.5: Get the triangle patch set new_MeshTriangles in the final space bounding box Bound, traverse the triangle patch newtriangle in the triangle patch set new_MeshTriangles, and determine whether the triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle1 in the triangle patch set meshTriangles1;
[0103] Here, get the triangle patch set new_MeshTriangles in the final space bounding box Bound, get any triangle triangle in new_MeshTriangles, any triangle triangle1 in meshTriangles1, and determine whether there is an edge in triangle that intersects with triangle1;
[0104] Step 4.6: If any triangle patch triangle does not intersect with any triangle patch triangle1, go to step 5;
[0105] Step 4.7: If any triangle patch triangle intersects with any triangle patch meshTriangles1, the properties of the currently traversed grid node corresponding to the triangle patch triangle1 in the grid node map N_BMap that is not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids are set to: type is the third obstacle MiddleElement, weight weight is 101.
[0106] Here, if there is an intersection, the type of the grid node node is set to MiddleElement, and the weight is 101; MiddleElement is the third obstacle type of the present invention, that is, an electromechanical pipeline set at an intermediate height that people cannot drill through or cross;
[0107] Traverse all grid nodes in the grid node map N_BMap that are not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids, and repeat steps 4.1 to 4.7.
[0108] Step 5: Based on the attributes of the mesh nodes that have been calibrated in the mesh node map N_BMap, calibrate the attributes of the remaining mesh nodes in the mesh node map N_BMap;
[0109] Step 5.1: Filter the mesh nodes whose node types in the attributes of the mesh nodes node are other than the first obstacle BlockMissile, the bracket obstacle Bracket and the third obstacle type MiddleElemen from the mesh node map N_BMap as the mesh node set FilterMapNodes;
[0110] Step 5.2: Define the height limit for people to pass (travel line height) circulationHeight and the height that people can cross (crossable pipe height) pipeHeight according to the space occupancy. Crossing the equipment pipe requires a passage weight, that is, traverse the grid node node in the grid node set FilterMapNodes of non-obstructions, take the currently traversed grid node node as the square bottom shape, the roof as the basic elevation, 1200mm~circulationHeight to create a spatial entity NodeSolid2, and convert the spatial entity NodeSolid2 into a triangle face set meshTriangles2 according to step 1;
[0111] Step 5.3: Following steps 4.2 to 4.5, determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2. If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2, set the attribute of the currently traversed mesh node node in the mesh node set FilterMapNodes to type type: HighElement (high pipeline), weight weight: 21;
[0112] Step 5.4: If any triangle patch newtriangle in the triangle patch set new_MeshTriangles does not intersect with any triangle patch trangle2 in the triangle patch set meshTriangles2, create a spatial entity NodeSolid3 with the currently traversed mesh node node as the square bottom shape, the roof as the basic elevation, 0mm~pipeHeight(0mm~300mm) and convert it into the triangle patch set meshTriangles3 according to step 1;
[0113] Step 5.5: Following steps 4.2 to 4.5, determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3. If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3, then set the attribute of the currently traversed mesh node node in the mesh node set FilterMapNodes to type type: LowElment (low pipeline), weight weight: 20; if any triangle patch newtriangle in the triangle patch set new_MeshTriangles still does not intersect with any triangle patch triangle3 in the triangle patch set meshTriangles3, then set the type of the attribute of the currently traversed mesh node node to Land (walkable ground), with a weight of 10;
[0114] Here, if any triangle patch newtriangle does not intersect with any triangle patch triangle1, then follow steps 4.2 to 4.5 at a relative elevation of 1200 mm to 2000 mm (circulationHeight) to determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2;
[0115] If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2, the attributes of the mesh node node are set to: type HighElement, weight 21;
[0116] If any triangle patch newtriangle in the triangle patch set new_MeshTriangles does not intersect with any triangle patch triangle2 in the triangle patch set meshTriangles2, then continue to repeat steps 4.2 to 4.5 at a relative elevation of 0mm to 300mm (pipeHeight) to determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3;
[0117] If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3, the attributes of the mesh node are set to: type is low pipeline LowElement; weight is 20;
[0118] If any triangle patch newtriangle in the triangle patch set new_MeshTriangles still does not intersect with any triangle patch triangle3 in the triangle patch set meshTriangles3, then the type in the attributes of the mesh node node is set to Land (walkable ground) with a weight of 10.
[0119] Step 5.6: In the grid node map N_Bmap, traverse the grid nodes of type LowElement. If there are more than three "LowElement" type grid nodes distributed continuously horizontally or vertically, set the attributes of these continuously distributed grid nodes to type: MiddleElement, weight: 101.
[0120] Step 5.7: Filter out the remaining grid nodes node except the node type of the first obstacle blockGrids, bracket obstacle bracketGrids, third obstacle MiddleElemen, low pipe LowElemen and high pipe HighElemen from the grid node set FilterMapNodes, and modify the grid properties of all remaining grid nodes node to "node type type: Land (land, pedestrian accessible ground), weight weight: 10".
[0121] Step 6: Determine the starting grid node and the target grid node. Read the door with the attribute "entrance and exit" in the BIM model as the starting point, and take the grid node where the door is located as the starting grid node StartNode; obtain the manually selected point that needs to be inspected as the target grid node EndNode, usually the door position on the side of the equipment, valve, and rooftop machine room; finally form a grid node map newBMap containing the starting grid node, target grid node, obstacles, components, and land.
[0122] Here, the user clicks on the floor component floor, clicks on the entrance and exit components doors (multiple selections are allowed) in the model as the starting grid node StartNode, and clicks on the equipment points devices (multiple selections are allowed) that need to be repaired in the model as the target grid node EndNod.
[0123] like Figure 4 As shown, step 7: based on the attributes of the calibrated grid nodes, the shortest path between the starting grid node and the target grid node is calculated.
[0124] Here, the A* algorithm with collision volume can be used to calculate the shortest path between the starting grid node startNodes and the target grid node EndNodes; wherein, the total weight function F(x), the actual weight function G(x), and the valuation heuristic function H(x) can be defined; the A* algorithm starts from the starting grid node startNodes and expands to the surrounding area, continuously calculating the total weight F(x) value of the surrounding adjacent grid nodes through the estimation function, and selects the grid node node with the smallest total weight F(x) value as the grid node node for the next expansion, and keeps looping according to this rule until the end grid node, i.e., the target grid node, is searched.
[0125] Total weight function: F(x) = G(x) + H(x)
[0126] Among them, F(x) is the total weight value from the starting grid node startNodes to the end grid node EndNodes;
[0127] G(x) is the sum of the actual moving distances of each grid node on the path from the starting grid node to the target grid node to the starting grid node startNodes, and each grid node moves along the generated path; the larger the weight, the longer the moving distance.
[0128] G(x)=∑MapNode[i][j].weight
[0129] MapNode[i][j].weight is the weight of the grid node in the i-th row and j-th column in the grid node map N_BMap.
[0130]
[0131] H(x) is the estimated moving distance from the current grid node (x1y1) to the end point (x2, y2) on the path from the starting grid node to the target grid node, calculated using the Euclidean distance.
[0132] The following takes the route from door1 to device1 as an example;
[0133] Step 7.1: Construct an open list and a closed list. The open list is used to store alternative path grid nodes, initially the starting grid node startNodes; and the closed list is used to store the path grid nodes of the shortest path (minimum weight), which is initialized to empty.
[0134] Here, an open list openList and a closed list closeList are constructed, and the starting grid node startNodesstartNode=N_BMap[door1.X=7,door1.Y=46] is stored in openList, and closeList is empty.
[0135] Step 7.2: Since the grid node width is W_Node, and the traffic width is Width_Cross, which is three times the grid node width, that is, the actual traffic grid is 9 grids of 3×3, each grid node in the grid node map N_Bmap is taken as the central grid node, and each grid node is expanded to a size of a grid range of 3x3. Subsequently, its central grid node is taken as the representative of the actual traffic grid. The grid node described below means the central grid node. The nodes stored in the open and closed lists are also the central grid nodes of each grid range of 3x3. The 9 grid nodes at the starting point are all set to Land=10, and the 9 grid nodes at the end point are all set to Land=10;
[0136] Here, step 7.2.1, obtain the positions of all doors in step 6, and set the grids they occupy as the starting grid node startNodes; expand the starting grid node startNodes and the target grid node EndNodes to a size occupying a 3x3 grid range, and subsequently use its central grid node as the representative of the actual passage grid; set the attributes of the 3x3 grid nodes around the starting grid node to: type is Land, weight is 10; obtain the positions of all equipment points devices that need to be repaired in step 6, set the grid nodes occupied by all equipment points devices that need to be repaired as the end grid node EndNodes, and set the attributes of the 3x3 grid nodes around the end grid node EndNodes to: type is Land, weight is 10.
[0137] Step 7.2.2, set the path radius to 2 grid nodes, that is, expand each of the remaining grid nodes in the grid node map N_Bmap to occupy a 3x3 grid range, and set the attributes of the 8 grids around the 3x3 grid of each remaining grid node to be the same as the attributes of the central grid node to which it belongs;
[0138] Here, with the middle grid as the center and 2 grids as the radius, we get a 3x3 grid;
[0139] Step 7.3: Based on the central grid node in the latest closed list as the parent grid node, traverse the 8 grid nodes around it. If the 3×3 grid nodes centered on the grid node contain an obstacle grid node or the grid node has been stored in the closed list, skip the grid node; if there is no obstacle grid node (no collision), store the grid node in the open list; the obstacle grid nodes are the first obstacle blockGrids, the bracket obstacle bracketGrids and the third obstacle MiddleElemen.
[0140] Step 7.4: Calculate the F(x) value of the grid node in the open list;
[0141] Here, we can traverse the grids in openList and find the grid node curNode with the smallest F(x) value. Currently, curNode = startNode. );
[0142] Step 7.5: Select the grid node with the minimum F(x) value from the open list, and transfer it from the open list to the closed list; obtain the grid nodes within the 3x3 range around the grid node with the minimum F(x) value that do not exceed the roof boundary and are not obstacles, and add the obtained grid nodes to the openList, then the grid node with the minimum F(x) value is the parent grid node of the obtained grid node;
[0143] Here, the mesh node curNode is moved from the openList to the closeList; the mesh nodes within the 3x3 range around the mesh node curNode that do not exceed the roof boundary and are not obstacles are obtained, and the obtained mesh nodes are added to the openList, and the mesh node curNode is the parent mesh node of the obtained mesh node;
[0144] Step 7.6: Repeat steps 7.3 to 7.5 until the closed list contains the target grid node EndNode or there is no grid node in the open list;
[0145] Here, steps 7.3 to 7.5 are repeated until the target mesh node is added to the closeList or the openList is empty.
[0146] Step 7.7: Finally, the nodes in the closed list form the shortest path bestPath to complete the path planning.
[0147] Here, if openList is empty and the target grid node endNOde is not added to closeList, the optimal route is not found; if the target grid node endNode is added to closeList, the optimal route is reversed from the target grid node endNode according to the order of the parent and child grid nodes, and finally the optimal path bestPath is calculated, the type is List <node>.
[0148] like Figure 5 As shown, step 8: the path planning display module draws the path grid node plane diagram of the shortest path bestPath in three-dimensional space; and marks the grid nodes of the type of land Land on the shortest path bestPath, and marks the areas that can still be optimized in the shortest path.
[0149] Here, in step 8.1, the center point of the grid node on the optimal route is obtained, and the grid outline is calculated according to the coordinates of the center point and the pedestrian passage width circulationWidth / 3, and the type of the grid node in the grid outline is obtained;
[0150] Step 8.2, draw the grid node fill pattern in Revit according to the grid outline. If the type of the grid node is land, fill the grid node with a blue pattern; if the type of the grid node is not land, fill the grid node with a red pattern, and finally form a visual optimal path containing blue and red patterns. Figure 5 The blue grid is the optimal route, and the red grid is where components on the optimal route can be optimized.
[0151] In summary, the present invention provides a method for automatically recommending maintenance routes for roof equipment and calibrating obstacles. Through intelligent algorithms, the maintenance routes of maintenance objects are quickly and automatically analyzed, passing areas and obstacle areas are marked, and the locations and reasons for reducing the convenience of passing the maintenance routes are given, providing references for subsequent adjustment plans, optimizing maintenance routes, and reducing costs. Through the present invention, users can quickly and accurately determine the spatial accessibility of maintenance routes for roof equipment, reducing the time and cost of field visits and visual inspections, avoiding omissions due to lack of experience, and improving the efficiency and accuracy of maintenance route planning.
[0152] The detailed contents of the device embodiments of the present invention can be found in the corresponding parts of the method embodiments, which will not be described in detail here.
[0153] Obviously, those skilled in the art can make various changes and modifications to the present application without departing from the spirit and scope of the present application. Thus, if these modifications and variations of the present application fall within the scope of the claims of the present application and their equivalents, the present application is also intended to include these modifications and variations.
[0154] It should be noted that the present invention can be implemented in software and / or a combination of software and hardware, for example, can be implemented using an application specific integrated circuit (ASIC), a general purpose computer or any other similar hardware device. In one embodiment, the software program of the present invention can be executed by a processor to implement the steps or functions described above. Similarly, the software program of the present invention (including related data structures) can be stored in a computer readable recording medium, for example, a RAM memory, a magnetic or optical drive or a floppy disk and the like. In addition, some steps or functions of the present invention can be implemented using hardware, for example, as a circuit that cooperates with a processor to perform each step or function.
[0155] In addition, a part of the present invention may be applied as a computer program product, such as a computer program instruction, which, when executed by a computer, can call or provide the method and / or technical solution according to the present invention through the operation of the computer. The program instruction for calling the method of the present invention may be stored in a fixed or removable recording medium, and / or transmitted through a data stream in a broadcast or other signal-bearing medium, and / or stored in a working memory of a computer device that runs according to the program instruction. Here, according to an embodiment of the present invention, a device is included, the device including a memory for storing computer program instructions and a processor for executing program instructions, wherein, when the computer program instruction is executed by the processor, the device is triggered to run the method and / or technical solution based on the aforementioned multiple embodiments of the present invention.
[0156] It is obvious to those skilled in the art that the present invention is not limited to the details of the exemplary embodiments described above, and that the present invention can be implemented in other specific forms without departing from the spirit or essential features of the present invention. Therefore, from any point of view, the embodiments should be regarded as exemplary and non-restrictive, and the scope of the present invention is defined by the appended claims rather than the above description, and it is intended that all changes falling within the meaning and scope of the equivalent elements of the claims are included in the present invention. Any figure mark in the claims should not be regarded as limiting the claims involved. In addition, it is obvious that the word "comprising" does not exclude other units or steps, and the singular does not exclude the plural. Multiple units or devices stated in the device claim can also be implemented by one unit or device through software or hardware. The words first, second, etc. are used to indicate names, and do not indicate any particular order.< / node> < / point>
Claims
1. A method for automatically recommending a roof equipment maintenance route, characterized in that: include: Step 1: Extract the roof 3D BIM model data and convert it into a triangular face set meshTriangles; Step 2: Extract the outline of the roof structure plate as the roof boundary and perform meshing to obtain a new mesh node map N_BMap; Step 3: calibrate the attributes of the grid nodes of the first obstacle and the support obstacle in the grid node map N_BMap; Step 4: Based on the triangle patch set meshTriangles, calibrate the attributes of the third obstacle in the mesh node map N_BMap; Step 5: Based on the attributes of the mesh nodes that have been calibrated in the mesh node map N_BMap, calibrate the attributes of the remaining mesh nodes in the mesh node map N_BMap; Step 6: Determine the starting grid node and the target grid node; Step 7: Based on the attributes of the calibrated grid nodes, the shortest path between the starting grid node and the target grid node is calculated; Step 8: The path planning display module draws the path grid node plane diagram of the shortest path in three-dimensional space; and marks the grid nodes of the type of land on the shortest path, and marks the areas that can still be optimized in the optimal path.
2. The method for automatically recommending a roof equipment maintenance route according to claim 1, characterized in that: Step 1: Extract the roof 3D BIM model data and convert it into a triangular face set meshTriangles, including: Step 1.1: Open the comprehensive roof RVT model file in the roof 3D BIM model, extract the electromechanical pipeline elements Elements, and obtain the geometric information of the electromechanical pipeline elements Elements, that is, the geometric entity ElementSolids represented by BRep; traverse each face ElementFace in the entity ElementSolids, and triangulate each face ElementFace into ElementMesh, where the triangular face in ElementMesh is ElementTriangle, and all triangular face ElementTriangle are taken as the roof triangular face set; Step 1.2: Extract the roof building and structure link model in the roof comprehensive RVT model file, convert it into a model group and then ungroup it into components to obtain the roof to building and structural elements, obtain the geometric information of the roof building and structural elements in the comprehensive RVT model, that is, the entity LinkedElementSolids represented by BRep, traverse each face LinkedElementFace in the entity LinkedElementSolids, and triangulate each face LinkedElementFace into LinkedElementMesh, where the triangle face in LinkedElementMesh is LinkedElementTriangle; take all LinkedElementTriangle as a linked model triangle face set; Step 1.3: Merge the roof triangle patch set and the linked model triangle patch set into a triangle patch set meshTriangles.
3. The method for automatically recommending a roof equipment maintenance route according to claim 2, characterized in that: Step 2: Extract the roof structure plate outline as the roof boundary and perform meshing to obtain a new mesh node map N_BMap, including: Step 2.1: Get the spatial bounding box FloorBoundingbox of the roof structure plate, i.e. the floor, get the diagonal vertices of the spatial bounding box FloorBoundingbox in the horizontal plane, and use the obtained diagonal vertices as the diagonal vertices of the initial grid, wherein the grid width W_Node and the pedestrian passage width circulationWidth are defined, and the grid node graph Bmap is calculated with the diagonal vertices of the initial grid and the grid width W_Node; and W_Node = circulationWidth / 3; Step 2.2: Get the geometric information of the roof structure plate, such as the geometric entity solid of the floor slab floor, and get the upper surface contour FloorFace of the geometric entity solid of the floor slab floor; Step 2.3: Traverse the grid nodes node in the grid node map Bmap, obtain the center point point of each grid node, use the ray method to determine whether the center point point of the grid node node is within the upper surface contour FloorFace of the roof structure plate, and delete the grid nodes outside the upper surface FloorFace of the roof structure plate from the grid node map BMap to obtain a new grid node map N_BMap.
4. The method for automatically recommending a roof equipment maintenance route according to claim 3, characterized in that: Step 2.1: Get the spatial bounding box FloorBoundingbox of the roof structure plate, i.e. the floor, get the diagonal vertices of the spatial bounding box FloorBoundingbox in the horizontal plane, and use the obtained diagonal vertices as the diagonal vertices of the initial grid, where the grid width W_Node and the pedestrian width circulationWidth are defined. The grid node graph Bmap is calculated with the diagonal vertices of the initial grid and the grid width W_Node, including: Step 2.1.2, get the first spatial bounding box FloorBoundingbox of the floor, and get the minimum point minPoint and maximum point maxPoint of the first spatial bounding box FloorBoundingbox. According to the x and y coordinates of the maximum point maxPoint and the minimum point minPoint, calculate the length length and width width of the first spatial bounding box FloorBoundingbox, and calculate the number of grids in the x direction according to the integer multiple of one-third of the width of the moving line circulationWith. and the number of grids in the y direction Generate a grid node graph BMap based on the number of grids in the x direction and the number of grids in the y direction.
5. The method for automatically recommending a roof equipment maintenance route according to claim 4, characterized in that: Step 2.3 includes: In step 2.3.1, loop through each grid node node in BMap and obtain the center point point of each grid node node; In step 2.3.2, all edges of the upper surface contour FloorFace can be traversed to calculate the number of line segments crossings within the range of the line segment projection of each center point point, that is, the number of intersections of the ray with the center point point and the upper surface contour FloorFace; among them, if the number of line segments crossings is an odd number, the center point point is within the upper surface contour FloorFace, that is, within the roof contour; the mesh nodes whose center point point is within the upper surface contour FloorFace are screened out, and a new mesh node map N_BMap is generated based on the screened out mesh nodes.
6. The method for automatically recommending a roof equipment maintenance route according to claim 5, characterized in that: Step 3: Calibrate the attributes of the grid nodes of the first obstacle and bracket obstacle types in the grid node map N_BMap, including: Step 3.1, Screen out building walls, structural columns, railings, mechanical and electrical equipment, and fire protection equipment in the roof 3D BIM model as the first obstacle elements blockElements. Calculate the second spatial bounding box bbox of the first obstacle elements blockElements and its maximum point max and minimum point min. Based on the maximum point max and minimum point min of the second spatial bounding box bbox, calculate the set of grid coordinates occupied by the spatial bounding box bbox of the first obstacle elements blockElements on the plane to obtain the first obstacle set blockGrids; Step 3.2, Screen out the brackets bracketElements in the roof 3D BIM model and obtain their hanger widths bracketWidth. If bracketWidth≥circulationWith, the bracket bracketElements can pass through normally and no calculation is required; if bracketWidth<circulationWith, the bracket cannot pass through normally. Calculate the third spatial bounding box bracketBox of the bracket bracketElements and its maximum point bracketMax and minimum point bracketMin. Calculate the set of grid coordinates occupied by the third spatial bounding box bracketBox of the spatial bounding box bracketBox on the plane to obtain the bracket obstacle set bracketGrids; Step 3.3, Traverse each grid node node in the grid node map N_BMap obtained in Step 2. If the coordinates of a certain grid node node in the grid node map N_BMap are in the building wall obstacle set blockGrids, set the type of the attribute of this grid node node to the first obstacle BlockMissile and the weight to -2, where BlockMissile is the first type of obstacle, including building walls, structural columns, railings, mechanical and electrical equipment, and fire protection equipment; if the coordinates of a certain grid node node in the grid node map N_BMap are in the bracket set bracketGrids, the type of the attribute is the bracket obstacle Bracket and the weight is 100, where Bracket is the second type of obstacle; if the coordinates of a certain grid node node in the grid node map N_BMap are not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids, perform Steps 4 to 5 until each grid node in the grid node map N_BMap has been traversed and the weight of each grid node has been updated, and then perform Step 6.
7. The method for automatically recommending a roof equipment maintenance route according to claim 6, characterized in that: Step 4: Based on the triangle patch set meshTriangles, calibrate the attributes of the third obstacle in the grid node map N_BMap, including: Step 4.1: Define the spannable pipe height pipeHeight according to the spatial occupancy, take the currently traversed grid node that is not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids as the square bottom shape, the roof as the basic elevation, and create a spatial entity NodeSolid 1 with the bottom elevation as pipeHeight and the top elevation as 1200mm, and convert it into a triangle patch set meshTriangles1 according to step 1.1; Step 4.2: Set the triangle number threshold in the octree space to 10; Step 4.3: Get the spatial bounding box meshBound of the triangle patch set meshTriangles in step 1. meshBound.Center is the center of the spatial bounding box meshBound. meshBound.Extents is the distance from the center of the spatial bounding box Bound to each side. Divide the spatial bounding box Bound into 8 subspaces smallMeshBound. The length, width and height of each subspace smallMeshBound are half of its parent space, i.e. the spatial bounding box Bound. The coordinates of the centers of the 8 subspaces are meshBound.Center and move in eight directions. *meshBound.Extents distance; Step 4.4: Traverse the eight subspaces smallMeshBound, and determine whether each subspace smallMeshBound intersects with the triangle face set meshTriangles1. If only one subspace intersects with the triangle face set meshTriangles1, then use the subspace as the spatial bounding box Bound, and repeat step 3.3 until the number of triangle faces in the spatial bounding box Bound is less than the triangle number threshold Threshold, or there are two subspaces that intersect with the triangle face set meshTriangles1 at the same time, so as to obtain the final spatial bounding box Bound; Step 4.5: Get the triangle patch set new_MeshTriangles in the final space bounding box Bound, traverse the triangle patch newtriangle in the triangle patch set new_MeshTriangles, and determine whether the triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle1 in the triangle patch set meshTriangles1; Step 4.6: If any triangle patch triangle does not intersect with any triangle patch triangle1, go to step 5; Step 4.7: If any triangle patch triangle intersects with any triangle patch meshTriangles1, the property of the currently traversed grid node corresponding to the triangle patch triangle1 in the grid node map N_BMap that is not in the first obstacle set blockGrids or the bracket obstacle set bracketGrids is set to: type is the third obstacle MiddleElement, weight is.
8. The method for automatically recommending a roof equipment maintenance route according to claim 1, characterized in that: Step 5: Based on the attributes of the already calibrated grid nodes in the grid node map N_BMap, calibrate the attributes of the remaining grid nodes in the grid node map N_BMap, including: Step 5.1: Filter the mesh nodes whose node types in the attributes of the mesh nodes node are other than the first obstacle BlockMissile, the bracket obstacle Bracket and the third obstacle type MiddleElemen from the mesh node map N_BMap as the mesh node set FilterMapNodes; Step 5.2: Define the height limit for people to pass through circulationHeight and the height that people can cross pipeHeight according to the space occupation, traverse the mesh nodes node in the mesh node set FilterMapNodes of non-obstructions, take the currently traversed mesh node node as the square bottom shape, the roof as the basic elevation, 1200mm~circulationHeight to create a spatial entity NodeSolid2, and convert the spatial entity NodeSolid2 into a triangle face set meshTriangles2 according to step 1; Step 5.3: Following steps 4.2 to 4.5, determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2. If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle2 in the triangle patch set meshTriangles2, set the attribute of the currently traversed mesh node node in the mesh node set FilterMapNodes to: type is high element, weight is 21; Step 5.4: If any triangle patch newtriangle in the triangle patch set new_MeshTriangles does not intersect with any triangle patch triangle2 in the triangle patch set meshTriangles2, take the currently traversed mesh node node as the square bottom shape, the roof as the basic elevation, 0mm~pipeHeight to create a spatial entity NodeSolid3 and convert it into the triangle patch set meshTriangles3 according to step 1; Step 5.5: Following steps 4.2 to 4.5, determine whether any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3. If any triangle patch newtriangle in the triangle patch set new_MeshTriangles intersects with any triangle patch triangle3 in the triangle patch set meshTriangles3, then set the attribute of the currently traversed mesh node node in the mesh node set FilterMapNodes to: type is low pipeline LowElement, weight is 20; if any triangle patch newtriangle in the triangle patch set new_MeshTriangles still does not intersect with any triangle patch triangle3 in the triangle patch set meshTriangles3, then set the attribute of the currently traversed mesh node to: type is human accessible ground Land, weight is 10; Step 5.6: Traverse the grid nodes of type LowElement in the grid node map N_Bmap. If there are more than three grid nodes of type LowElement distributed continuously horizontally or vertically, set the attributes of these continuously distributed grid nodes to: type is the third obstacle MiddleElement, and the weight is 101; Step 5.7: Filter out the remaining grid nodes except the grid node types of the first obstacle blockGrids, bracket obstacle bracketGrids, third obstacle MiddleElemen, low pipe LowElemen and high pipe HighElemen from the grid node set FilterMapNodes, and set the grid properties of all the remaining grid nodes to: type is the pedestrian ground Land, and the weight is 10.
9. The method for automatically recommending a roof equipment maintenance route according to claim 8, characterized in that: Step 7: Based on the attributes of the calibrated grid nodes, the shortest path between the starting grid node and the target grid node is calculated, including: Step 7.1: Construct an open list and a closed list. The open list is used to store the candidate path grid nodes, initially the starting grid node startNodes; and the closed list is used to store the path grid nodes of the shortest path, initially empty; Step 7.2.1: Expand the starting grid node startNodes and the target grid node EndNodes to a size of a 3x3 grid range, and then use the central grid node as the representative of the actual pass grid; set the attributes of the 3x3 grid nodes around the starting grid node to: type Land, weight 10; set the attributes of the 3x3 grid nodes around the end grid node EndNodes to: type Land, weight 10; Step 7.2.2, that is, expand each of the remaining grid nodes in the grid node map N_Bmap to occupy a size of a 3x3 grid range, and set the attributes of the 8 grids around the 3x3 grid of each of the remaining grid nodes to be the same as the attributes of the central grid node to which it belongs; Step 7.3: Based on the central grid node in the latest closed list as the parent grid node, traverse the 8 grid nodes around it. If the 3×3 grid nodes centered on the grid node contain an obstacle grid node or the grid node has been stored in the closed list, skip the grid node; if there is no obstacle grid node, store the grid node in the open list; the obstacle grid nodes are the first obstacle blockGrids, the bracket obstacle bracketGrids and the third obstacle MinddleElement; Step 7.4: Calculate the F(x) value of the grid node in the open list; where F(x) = G(x) + H(x), Step 7.5: Select the grid node with the minimum F(x) value from the open queue, and transfer it from the open list to the closed list; obtain the grid nodes within the 3x3 range around the grid node with the minimum F(x) value that do not exceed the roof boundary and are not obstacles, and add the obtained grid nodes to the openList, then the grid node with the minimum F(x) value is the parent grid node of the obtained grid node; F(x) is the total weight value from the starting grid node startNodes to the end grid node EndNodes; G(x) is the sum of the actual moving distances of each grid node on the path from the starting grid node to the target grid node to the starting grid node startNodes; wherein, the larger the weight, the longer the moving distance; G(x)=∑MapNode[i][j].weight MapNode[i][j].weight is the weight of the grid node in the i-th row and j-th column in the grid node graph N_BMap; H(x) is the estimated moving distance from the current grid node (x1y1) to the end point (x2, y2) on the path from the starting grid node to the target grid node, calculated using the Euclidean distance; Step 7.6: Repeat steps 7.3 to 7.5 until the closed list contains the target grid node EndNode or there is no grid node in the open list.
10. The method for automatically recommending a roof equipment maintenance route according to claim 9, characterized in that: Step 8: The path planning display module draws the path grid node plane diagram of the shortest path in three-dimensional space; and marks the grid nodes of the type of land on the shortest path, and marks the areas that can still be optimized in the optimal path, including: Step 8.1, obtain the center point of the grid node on the optimal route, and calculate the grid outline according to the coordinates of the center point and the pedestrian passage width circulationWidth / 3, and obtain the type of the grid node in the grid outline; Step 8.2, draw the grid node fill pattern in Revit according to the grid outline. If the type of the grid node is land, fill the grid node with a blue pattern; if the type of the grid node is not land, fill the grid node with a red pattern, and finally form a visual optimal path containing blue and red patterns.