SHAPER  9.12.0
GeomAPI_ShapeHierarchy.h
1 // Copyright (C) 2014-2023 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 GeomAPI_ShapeHierarchy_H_
21 #define GeomAPI_ShapeHierarchy_H_
22 
23 #include "GeomAPI.h"
24 #include "GeomAPI_Shape.h"
25 
26 #include <map>
27 #include <set>
28 #include <vector>
29 
34 {
35  typedef std::pair<GeomShapePtr, ListOfShape> ShapeAndSubshapes;
36  typedef std::map<GeomShapePtr, GeomShapePtr, GeomAPI_Shape::Comparator> MapShapeToShape;
37  typedef std::map<GeomShapePtr, size_t, GeomAPI_Shape::Comparator> MapShapeToIndex;
38  typedef std::set<GeomShapePtr, GeomAPI_Shape::Comparator> SetOfShape;
39 
40  ListOfShape myObjects;
41  MapShapeToShape myParent;
44  MapShapeToIndex myParentIndices;
46  std::vector<ShapeAndSubshapes> mySubshapes;
47 
48  SetOfShape myProcessedObjects;
49  MapShapeToShape myModifiedObjects;
50 
51 public:
53  GEOMAPI_EXPORT void addObject(const GeomShapePtr& theObject);
54 
58  GEOMAPI_EXPORT void addParent(const GeomShapePtr& theShape, const GeomShapePtr& theParent);
59 
62  GEOMAPI_EXPORT GeomShapePtr parent(const GeomShapePtr& theShape, bool theMarkProcessed = true);
65  GEOMAPI_EXPORT GeomShapePtr root(const GeomShapePtr& theShape, bool theMarkProcessed = true);
66 
68  GEOMAPI_EXPORT void markProcessed(const GeomShapePtr& theShape);
70  GEOMAPI_EXPORT void markProcessed(const ListOfShape& theShapes);
71 
73  GEOMAPI_EXPORT void markModified(const GeomShapePtr& theSource, const GeomShapePtr& theModified);
74 
76  GEOMAPI_EXPORT void splitCompound(const GeomShapePtr& theCompShape,
77  ListOfShape& theUsed,
78  ListOfShape& theNotUsed) const;
79 
81  GEOMAPI_EXPORT void compoundsOfUnusedObjects(ListOfShape& theDestination) const;
82 
84  GEOMAPI_EXPORT void topLevelObjects(ListOfShape& theDestination) const;
85 
87  GEOMAPI_EXPORT bool empty() const;
88 
90  const ListOfShape& objects() const { return myObjects; }
92  GEOMAPI_EXPORT const ListOfShape& objects(GeomShapePtr theParent) const;
94  GEOMAPI_EXPORT void objectsByType(ListOfShape& theShapesByType, ListOfShape& theOtherShapes,
95  const GeomAPI_Shape::ShapeType theMinType = GeomAPI_Shape::COMPOUND,
96  const GeomAPI_Shape::ShapeType theMaxType = GeomAPI_Shape::SHAPE) const;
97 
98 private:
101  GeomShapePtr collectSubs(const GeomShapePtr theTopLevelCompound,
102  const SetOfShape& theExcluded = SetOfShape(),
103  const MapShapeToShape& theModified = MapShapeToShape()) const;
104 
105 public:
106  class iterator : public std::iterator<std::forward_iterator_tag, GeomShapePtr>
107  {
108  public:
109  GEOMAPI_EXPORT iterator() {}
110 
111  protected:
112  iterator(GeomAPI_ShapeHierarchy* theHierarchy, bool isBegin = true);
113 
114  void skipAlreadyProcessed();
115 
116  public:
117  GEOMAPI_EXPORT bool operator==(const iterator&) const;
118  GEOMAPI_EXPORT bool operator!=(const iterator&) const;
119 
120  GEOMAPI_EXPORT iterator& operator++();
121  GEOMAPI_EXPORT iterator operator++(int);
122 
123  GEOMAPI_EXPORT GeomShapePtr operator*() const;
124 
125  private:
126  GeomAPI_ShapeHierarchy* myHierarchy;
127  ListOfShape::iterator myObject;
128 
129  friend class GeomAPI_ShapeHierarchy;
130  };
131 
132  GEOMAPI_EXPORT iterator begin();
133  GEOMAPI_EXPORT iterator end();
134 };
135 
136 #endif
Definition: GeomAPI_ShapeHierarchy.h:107
Storage for the hierarchy of shapes and their parents (compounds or compsolids)
Definition: GeomAPI_ShapeHierarchy.h:34
void objectsByType(ListOfShape &theShapesByType, ListOfShape &theOtherShapes, const GeomAPI_Shape::ShapeType theMinType=GeomAPI_Shape::COMPOUND, const GeomAPI_Shape::ShapeType theMaxType=GeomAPI_Shape::SHAPE) const
Separate objects of the given range of types and all other objects.
Definition: GeomAPI_ShapeHierarchy.cpp:111
void splitCompound(const GeomShapePtr &theCompShape, ListOfShape &theUsed, ListOfShape &theNotUsed) const
Split compound/compsolid shape for subshapes selected for operation and the others.
Definition: GeomAPI_ShapeHierarchy.cpp:136
void markProcessed(const GeomShapePtr &theShape)
Mark the shape as already processed.
Definition: GeomAPI_ShapeHierarchy.cpp:76
bool empty() const
Return true if there is no object in hierarchy.
Definition: GeomAPI_ShapeHierarchy.cpp:159
void topLevelObjects(ListOfShape &theDestination) const
Generates the list of top-level compounds, with modified objects of operation.
Definition: GeomAPI_ShapeHierarchy.cpp:164
void compoundsOfUnusedObjects(ListOfShape &theDestination) const
Generates the list of top-level compounds, which exclude the objects of operation.
Definition: GeomAPI_ShapeHierarchy.cpp:197
void addParent(const GeomShapePtr &theShape, const GeomShapePtr &theParent)
Store link between shape and its parent.
Definition: GeomAPI_ShapeHierarchy.cpp:32
GeomShapePtr parent(const GeomShapePtr &theShape, bool theMarkProcessed=true)
Return parent shape for the given, or empty if it is a high-level shape.
Definition: GeomAPI_ShapeHierarchy.cpp:48
const ListOfShape & objects() const
Return list of objects.
Definition: GeomAPI_ShapeHierarchy.h:90
void markModified(const GeomShapePtr &theSource, const GeomShapePtr &theModified)
Mark the shape as modified and store its image.
Definition: GeomAPI_ShapeHierarchy.cpp:94
void addObject(const GeomShapePtr &theObject)
Add an object of the operation (low-level shape in the hierarchy)
Definition: GeomAPI_ShapeHierarchy.cpp:27
GeomShapePtr root(const GeomShapePtr &theShape, bool theMarkProcessed=true)
Get root shape for the specified sub-shape.
Definition: GeomAPI_ShapeHierarchy.cpp:63
ShapeType
Shape type enum.
Definition: GeomAPI_Shape.h:46