SHAPER 9.16.0
GeomAlgoAPI_ShapeTools.h
1// Copyright (C) 2014-2026 CEA, EDF
2//
3// This library is free software; you can redistribute it and/or
4// modify it under the terms of the GNU Lesser General Public
5// License as published by the Free Software Foundation; either
6// version 2.1 of the License, or (at your option) any later version.
7//
8// This library is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11// Lesser General Public License for more details.
12//
13// You should have received a copy of the GNU Lesser General Public
14// License along with this library; if not, write to the Free Software
15// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16//
17// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18//
19
20#ifndef GeomAlgoAPI_ShapeTools_H_
21#define GeomAlgoAPI_ShapeTools_H_
22
23#include "GeomAlgoAPI.h"
24
25#include <GeomAPI_Shape.h>
26#include <GeomAPI_Vertex.h>
27#include <GeomAPI_Pnt.h>
28#include <map>
29#include <set>
30#ifdef WIN32
31#include<array>
32#endif
33
34class GeomAPI_Ax1;
35class GeomAPI_Edge;
36class GeomAPI_Dir;
37class GeomAPI_Face;
39class GeomAPI_Pln;
40class GeomAPI_Pnt;
41class GeomAPI_Wire;
43class ModelAPI_Object;
44
49{
50public:
52 GEOMALGOAPI_EXPORT static double length(const std::shared_ptr<GeomAPI_Shape> theShape);
53
55 GEOMALGOAPI_EXPORT static double volume(const std::shared_ptr<GeomAPI_Shape> theShape);
56
58 GEOMALGOAPI_EXPORT static double area(const std::shared_ptr<GeomAPI_Shape> theShape);
59
67 GEOMALGOAPI_EXPORT static bool isContinuousFaces(const GeomShapePtr& theFace1,
68 const GeomShapePtr& theFace2,
69 const GeomPointPtr& thePoint,
70 const double & theAngle,
71 std::string& theError);
72
77 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Pnt>
78 centreOfMass(const std::shared_ptr<GeomAPI_Shape> theShape);
79
82 GEOMALGOAPI_EXPORT static double radius(const std::shared_ptr<GeomAPI_Face>& theCylinder);
83
85 GEOMALGOAPI_EXPORT static double minimalDistance(const GeomShapePtr& theShape1,
86 const GeomShapePtr& theShape2);
87 GEOMALGOAPI_EXPORT static double minimalDistance(const GeomShapePtr& theShape1,
88 const GeomShapePtr& theShape2,
89 std::array<double, 3> & fromShape1To2);
90
93 GEOMALGOAPI_EXPORT static double shapeProximity(const GeomShapePtr& theShape1,
94 const GeomShapePtr& theShape2);
95
100 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Shape> combineShapes(
101 const std::shared_ptr<GeomAPI_Shape> theCompound,
102 const GeomAPI_Shape::ShapeType theType, ListOfShape& theResults);
103
107 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Shape>
108 groupSharedTopology(const std::shared_ptr<GeomAPI_Shape> theCompound);
109
114 GEOMALGOAPI_EXPORT static bool hasSharedTopology(const ListOfShape& theShapes,
115 const GeomAPI_Shape::ShapeType theShapeType);
116
121 GEOMALGOAPI_EXPORT static
122 std::list<std::shared_ptr<GeomAPI_Pnt> > getBoundingBox(const ListOfShape& theShapes,
123 const double theEnlarge = 0.0);
124
129 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Face> fitPlaneToBox(
130 const std::shared_ptr<GeomAPI_Shape> thePlane,
131 const std::list<std::shared_ptr<GeomAPI_Pnt> >& thePoints);
132
139 GEOMALGOAPI_EXPORT static void findBounds(const std::shared_ptr<GeomAPI_Shape> theShape,
140 std::shared_ptr<GeomAPI_Vertex>& theV1,
141 std::shared_ptr<GeomAPI_Vertex>& theV2);
142
146 GEOMALGOAPI_EXPORT static void makeFacesWithHoles(const std::shared_ptr<GeomAPI_Pnt> theOrigin,
147 const std::shared_ptr<GeomAPI_Dir> theDirection,
148 const ListOfShape& theWires,
149 ListOfShape& theFaces);
150
154 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Pln> findPlane(const ListOfShape& theShapes);
155
160 GEOMALGOAPI_EXPORT static bool isSubShapeInsideShape(
161 const std::shared_ptr<GeomAPI_Shape> theSubShape,
162 const std::shared_ptr<GeomAPI_Shape> theBaseShape);
163
165 GEOMALGOAPI_EXPORT static bool isShapeValid(const std::shared_ptr<GeomAPI_Shape> theShape);
166
168 GEOMALGOAPI_EXPORT static
169 std::shared_ptr<GeomAPI_Shape> getFaceOuterWire(const std::shared_ptr<GeomAPI_Shape> theFace);
170
172 GEOMALGOAPI_EXPORT static bool isTangent(const std::shared_ptr<GeomAPI_Edge> theEdge1,
173 const std::shared_ptr<GeomAPI_Edge> theEdge2,
174 const std::shared_ptr<GeomAPI_Vertex> theTgPoint);
175
177 GEOMALGOAPI_EXPORT static bool isParallel(const std::shared_ptr<GeomAPI_Edge> theEdge,
178 const std::shared_ptr<GeomAPI_Face> theFace);
179
183 GEOMALGOAPI_EXPORT static std::list<std::shared_ptr<GeomAPI_Vertex> > intersect(
184 const std::shared_ptr<GeomAPI_Edge> theEdge, const std::shared_ptr<GeomAPI_Face> theFace);
185
186 typedef std::map<std::shared_ptr<GeomAPI_Pnt>,
187 std::pair<std::list<std::shared_ptr<GeomDataAPI_Point2D> >,
188 std::list<std::shared_ptr<ModelAPI_Object> > > > PointToRefsMap;
193 GEOMALGOAPI_EXPORT static void splitShape(const std::shared_ptr<GeomAPI_Shape>& theBaseShape,
194 const PointToRefsMap& thePointsInfo,
195 std::set<std::shared_ptr<GeomAPI_Shape> >& theShapes);
196
201 GEOMALGOAPI_EXPORT static void splitShape_p(const std::shared_ptr<GeomAPI_Shape>& theBaseShape,
202 const std::list<std::shared_ptr<GeomAPI_Pnt> >& thePoints,
203 std::set<std::shared_ptr<GeomAPI_Shape> >& theShapes);
204
205 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Shape> findShape(
206 const std::list<std::shared_ptr<GeomAPI_Pnt> >& thePoints,
207 const std::set<std::shared_ptr<GeomAPI_Shape> >& theShapes);
208
209#ifdef FEATURE_MULTIROTATION_TWO_DIRECTIONS
214 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Dir> buildDirFromAxisAndShape(
215 const std::shared_ptr<GeomAPI_Shape> theBaseShape,
216 const std::shared_ptr<GeomAPI_Ax1> theAxis);
217#endif
218
220 GEOMALGOAPI_EXPORT static std::shared_ptr<GeomAPI_Edge> wireToEdge(
221 const std::shared_ptr<GeomAPI_Wire>& theWire);
222
226 GEOMALGOAPI_EXPORT static ListOfShape getLowLevelSubShapes(const GeomShapePtr& theShape);
227
234 GEOMALGOAPI_EXPORT static void computeThroughAll(const ListOfShape& theObjects,
235 const ListOfShape& theBaseShapes,
236 const std::shared_ptr<GeomAPI_Dir> theDir,
237 double& theToSize, double& theFromSize);
238
242 GEOMALGOAPI_EXPORT static ListOfShape getSharedFaces(const GeomShapePtr& theShape);
243};
244
245#endif
The class represents an axis in 3D space.
Definition: GeomAPI_Ax1.h:31
3D direction defined by three normalized coordinates
Definition: GeomAPI_Dir.h:34
Interface to the edge object.
Definition: GeomAPI_Edge.h:38
Interface to the face object.
Definition: GeomAPI_Face.h:36
Interface to the set of edges located in one plane.
Definition: GeomAPI_PlanarEdges.h:40
\Plane in 3D place, defined by normal, center and x-direction.
Definition: GeomAPI_Pln.h:38
3D point defined by three coordinates
Definition: GeomAPI_Pnt.h:38
ShapeType
Shape type enum.
Definition: GeomAPI_Shape.h:46
Interface to the wire object.
Definition: GeomAPI_Wire.h:31
Useful tools for working with shapes.
Definition: GeomAlgoAPI_ShapeTools.h:49
static double minimalDistance(const GeomShapePtr &theShape1, const GeomShapePtr &theShape2)
Calculate minimal distance between shapes.
Definition: GeomAlgoAPI_ShapeTools.cpp:530
static std::shared_ptr< GeomAPI_Pln > findPlane(const ListOfShape &theShapes)
Return a plane for list of shapes if they are all planar.
Definition: GeomAlgoAPI_ShapeTools.cpp:1177
static double area(const std::shared_ptr< GeomAPI_Shape > theShape)
Definition: GeomAlgoAPI_ShapeTools.cpp:186
static void splitShape_p(const std::shared_ptr< GeomAPI_Shape > &theBaseShape, const std::list< std::shared_ptr< GeomAPI_Pnt > > &thePoints, std::set< std::shared_ptr< GeomAPI_Shape > > &theShapes)
Performs the split of the shape by points.
Definition: GeomAlgoAPI_ShapeTools.cpp:1446
static bool isShapeValid(const std::shared_ptr< GeomAPI_Shape > theShape)
Definition: GeomAlgoAPI_ShapeTools.cpp:1279
static ListOfShape getLowLevelSubShapes(const GeomShapePtr &theShape)
Get non-composite sub-shapes of the given shape.
Definition: GeomAlgoAPI_ShapeTools.cpp:1636
static void computeThroughAll(const ListOfShape &theObjects, const ListOfShape &theBaseShapes, const std::shared_ptr< GeomAPI_Dir > theDir, double &theToSize, double &theFromSize)
Calculate prism sizes to ensure that it passes through all objects.
Definition: GeomAlgoAPI_ShapeTools.cpp:1677
static bool isSubShapeInsideShape(const std::shared_ptr< GeomAPI_Shape > theSubShape, const std::shared_ptr< GeomAPI_Shape > theBaseShape)
Checks that vertex/edge is inside face or vertex inside wire.
Definition: GeomAlgoAPI_ShapeTools.cpp:1205
static bool isTangent(const std::shared_ptr< GeomAPI_Edge > theEdge1, const std::shared_ptr< GeomAPI_Edge > theEdge2, const std::shared_ptr< GeomAPI_Vertex > theTgPoint)
Definition: GeomAlgoAPI_ShapeTools.cpp:1332
static void findBounds(const std::shared_ptr< GeomAPI_Shape > theShape, std::shared_ptr< GeomAPI_Vertex > &theV1, std::shared_ptr< GeomAPI_Vertex > &theV2)
Finds the start and end vertices of theShape.
Definition: GeomAlgoAPI_ShapeTools.cpp:1118
static std::shared_ptr< GeomAPI_Shape > getFaceOuterWire(const std::shared_ptr< GeomAPI_Shape > theFace)
Definition: GeomAlgoAPI_ShapeTools.cpp:1291
static std::shared_ptr< GeomAPI_Pnt > centreOfMass(const std::shared_ptr< GeomAPI_Shape > theShape)
Definition: GeomAlgoAPI_ShapeTools.cpp:303
static bool isContinuousFaces(const GeomShapePtr &theFace1, const GeomShapePtr &theFace2, const GeomPointPtr &thePoint, const double &theAngle, std::string &theError)
indicate if two faces are continuous with an angular tolerance used for G1 continuity to compare the ...
Definition: GeomAlgoAPI_ShapeTools.cpp:203
static std::shared_ptr< GeomAPI_Shape > combineShapes(const std::shared_ptr< GeomAPI_Shape > theCompound, const GeomAPI_Shape::ShapeType theType, ListOfShape &theResults)
Combines faces with common edges to shells, or solids to compsolids.
Definition: GeomAlgoAPI_ShapeTools.cpp:668
static ListOfShape getSharedFaces(const GeomShapePtr &theShape)
Get shared faces of a shape.
Definition: GeomAlgoAPI_ShapeTools.cpp:1785
static double radius(const std::shared_ptr< GeomAPI_Face > &theCylinder)
Obtain radius of cylindrical face.
Definition: GeomAlgoAPI_ShapeTools.cpp:325
static std::shared_ptr< GeomAPI_Face > fitPlaneToBox(const std::shared_ptr< GeomAPI_Shape > thePlane, const std::list< std::shared_ptr< GeomAPI_Pnt > > &thePoints)
Enlarges or reduces plane to fit bounding box.
Definition: GeomAlgoAPI_ShapeTools.cpp:1063
static double volume(const std::shared_ptr< GeomAPI_Shape > theShape)
Definition: GeomAlgoAPI_ShapeTools.cpp:166
static bool hasSharedTopology(const ListOfShape &theShapes, const GeomAPI_Shape::ShapeType theShapeType)
Check group of shapes has shared sub-shapes of the given type.
Definition: GeomAlgoAPI_ShapeTools.cpp:1010
static bool isParallel(const std::shared_ptr< GeomAPI_Edge > theEdge, const std::shared_ptr< GeomAPI_Face > theFace)
Definition: GeomAlgoAPI_ShapeTools.cpp:1347
static void makeFacesWithHoles(const std::shared_ptr< GeomAPI_Pnt > theOrigin, const std::shared_ptr< GeomAPI_Dir > theDirection, const ListOfShape &theWires, ListOfShape &theFaces)
Creates faces with holes from wires.
Definition: GeomAlgoAPI_ShapeTools.cpp:1145
static std::shared_ptr< GeomAPI_Edge > wireToEdge(const std::shared_ptr< GeomAPI_Wire > &theWire)
Re-approximate a wire to build a single edge.
Definition: GeomAlgoAPI_ShapeTools.cpp:1576
static double length(const std::shared_ptr< GeomAPI_Shape > theShape)
Definition: GeomAlgoAPI_ShapeTools.cpp:150
static void splitShape(const std::shared_ptr< GeomAPI_Shape > &theBaseShape, const PointToRefsMap &thePointsInfo, std::set< std::shared_ptr< GeomAPI_Shape > > &theShapes)
Performs the split of the shape by points.
Definition: GeomAlgoAPI_ShapeTools.cpp:1396
static double shapeProximity(const GeomShapePtr &theShape1, const GeomShapePtr &theShape2)
Calculate maximal value of all possible distances between shapes.
Definition: GeomAlgoAPI_ShapeTools.cpp:551
static std::shared_ptr< GeomAPI_Shape > groupSharedTopology(const std::shared_ptr< GeomAPI_Shape > theCompound)
Groups shapes with shared topology to compounds.
Definition: GeomAlgoAPI_ShapeTools.cpp:880
static std::list< std::shared_ptr< GeomAPI_Vertex > > intersect(const std::shared_ptr< GeomAPI_Edge > theEdge, const std::shared_ptr< GeomAPI_Face > theFace)
Computes intersection point between the edge curve and a face surface (only one point,...
Definition: GeomAlgoAPI_ShapeTools.cpp:1362
static std::list< std::shared_ptr< GeomAPI_Pnt > > getBoundingBox(const ListOfShape &theShapes, const double theEnlarge=0.0)
Calculates bounding box for theShapes.
Definition: GeomAlgoAPI_ShapeTools.cpp:1029
Attribute that contains 2D point coordinates.
Definition: GeomDataAPI_Point2D.h:37
Represents any object in the data model and in the object browser.
Definition: ModelAPI_Object.h:45