Salome HOME
b1f5f97169b36edddb133ccfe5cd18863c50ac7c
[modules/geom.git] / src / GEOMAlgo / GEOMAlgo_GetInPlaceAPI.hxx
1 // Copyright (C) 2007-2023  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 // File:        GEOMAlgo_GetInPlaceAPI.hxx
23 // Created:
24 // Author:      Sergey KHROMOV
25
26 #ifndef _GEOMAlgo_GetInPlaceAPI_HeaderFile
27 #define _GEOMAlgo_GetInPlaceAPI_HeaderFile
28
29 #include <GEOM_Function.hxx>
30
31 #include <TopTools_IndexedMapOfShape.hxx>
32 #include <TopTools_ListOfShape.hxx>
33 #include <gp_Vec.hxx>
34
35 #include <vector>
36
37 class GEOMAlgo_GetInPlace;
38 class BRepExtrema_DistShapeShape;
39 class TopoDS_Face;
40 class TopoDS_Shape;
41
42 /**
43  * This is an API class for all GetInPlace algorithm.
44  * It facilitates using different GetInPlace algorithms:
45  * a new one(GEOMAlgo_GetInPlace), an old one and
46  * GetInPlaceByHistory.
47  */
48 class GEOMAlgo_GetInPlaceAPI
49 {
50
51 public:
52
53   /**
54    *  \brief New GetInPlace method implementation.
55    *  Initializes the GEOMAlgo_GetInPlace object with correct parameters and
56    *  performs computation (calls theGIP's method Perform. Returns
57    *  Standard_True in face of success; Standard_False otherwise.
58    */
59   Standard_EXPORT static Standard_Boolean GetInPlace
60                       (const TopoDS_Shape        &theWhere,
61                        const TopoDS_Shape        &theWhat,
62                              GEOMAlgo_GetInPlace &theGIP);
63
64   /*!
65    *  \brief Old implementation of GetInPlace algorithm.
66    *  This method searches among sub shapes of the shape theWhere parts that are
67    *  coincident with the shape theWhat. The result list of shape is returned as
68    *  an output parameter. It returns the error code with the following possible
69    *  values:
70    *    0 - Success;
71    *    1 - theWhere and/or theWhat TopoDS_Shape are Null;
72    *    2 - An attempt to extract a shape of not supported type;
73    *    3 - Not found any Results.
74    */
75   Standard_EXPORT static Standard_Integer GetInPlaceOld
76             (const TopoDS_Shape         &theWhere,
77              const TopoDS_Shape         &theWhat,
78                    TopTools_ListOfShape &theShapesInPlace);
79
80
81   /**
82    *  \brief GetInPlaceByHistory method implementation.
83    *  Returns Standard_True if something is found. Warning: theShapesInPlace
84    *  list is not cleared at first.
85    */
86   Standard_EXPORT static Standard_Boolean GetInPlaceByHistory
87                       (const Handle(GEOM_Function)      &theWhereFunction,
88                        const TopTools_IndexedMapOfShape &theWhereIndices,
89                        const TopoDS_Shape               &theWhat,
90                              TopTools_ListOfShape       &theShapesInPlace);
91
92   /**
93    *  \brief GetInPlaceMap method implementation.
94    *  For each sub-shape ID in theWhat fills an array of corresponding
95    *  sub-shape IDs in theWhere
96    */
97   Standard_EXPORT static Standard_Boolean GetInPlaceMap
98                       (const Handle(GEOM_Function)       &theWhereFunction,
99                        const TopoDS_Shape                &theWhat,
100                        std::vector< std::vector< int > > &theResVec);
101
102 protected:
103
104   /*!
105    * \brief Return normal to face at extrema point
106    */
107   static gp_Vec GetNormal(const TopoDS_Face                &theFace,
108                           const BRepExtrema_DistShapeShape &theExtrema);
109
110   /*!
111    * Return the global properties of the shape: center of mass and
112    * a size (length, area or volume depending on the shape type).
113    */
114   static void GetShapeProperties(const TopoDS_Shape  &theShape,
115                                        Standard_Real  theTab[],
116                                        gp_Pnt        &theVertex);
117
118 };
119
120
121
122 #endif