1 // Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File: GEOMAlgo_GetInPlaceAPI.hxx
24 // Author: Sergey KHROMOV
26 #ifndef _GEOMAlgo_GetInPlaceAPI_HeaderFile
27 #define _GEOMAlgo_GetInPlaceAPI_HeaderFile
29 #include <GEOM_Function.hxx>
31 #include <TopTools_IndexedMapOfShape.hxx>
32 #include <TopTools_ListOfShape.hxx>
37 class GEOMAlgo_GetInPlace;
38 class BRepExtrema_DistShapeShape;
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.
48 class GEOMAlgo_GetInPlaceAPI
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.
59 Standard_EXPORT static Standard_Boolean GetInPlace
60 (const TopoDS_Shape &theWhere,
61 const TopoDS_Shape &theWhat,
62 GEOMAlgo_GetInPlace &theGIP);
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
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.
75 Standard_EXPORT static Standard_Integer GetInPlaceOld
76 (const TopoDS_Shape &theWhere,
77 const TopoDS_Shape &theWhat,
78 TopTools_ListOfShape &theShapesInPlace);
82 * \brief GetInPlaceByHistory method implementation.
83 * Returns Standard_True if something is found. Warning: theShapesInPlace
84 * list is not cleared at first.
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);
93 * \brief GetInPlaceMap method implementation.
94 * For each sub-shape ID in theWhat fills an array of corresponding
95 * sub-shape IDs in theWhere
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);
105 * \brief Return normal to face at extrema point
107 static gp_Vec GetNormal(const TopoDS_Face &theFace,
108 const BRepExtrema_DistShapeShape &theExtrema);
111 * Return the global properties of the shape: center of mass and
112 * a size (length, area or volume depending on the shape type).
114 static void GetShapeProperties(const TopoDS_Shape &theShape,
115 Standard_Real theTab[],