SHAPER 9.16.0
GeomAPI_ShapeHierarchy.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 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
51public:
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
98private:
101 GeomShapePtr collectSubs(const GeomShapePtr theTopLevelCompound,
102 const SetOfShape& theExcluded = SetOfShape(),
103 const MapShapeToShape& theModified = MapShapeToShape()) const;
104
105public:
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