0027067: Avoid use of virtual methods for implementation of destructors in legacy...
[occt.git] / src / TopOpeBRepBuild / TopOpeBRepBuild_ShapeSet.hxx
... / ...
CommitLineData
1// Created on: 1993-06-16
2// Created by: Jean Yves LEBEY
3// Copyright (c) 1993-1999 Matra Datavision
4// Copyright (c) 1999-2014 OPEN CASCADE SAS
5//
6// This file is part of Open CASCADE Technology software library.
7//
8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
13//
14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
16
17#ifndef _TopOpeBRepBuild_ShapeSet_HeaderFile
18#define _TopOpeBRepBuild_ShapeSet_HeaderFile
19
20#include <Standard.hxx>
21#include <Standard_DefineAlloc.hxx>
22#include <Standard_Handle.hxx>
23
24#include <TopAbs_ShapeEnum.hxx>
25#include <TopOpeBRepTool_ShapeExplorer.hxx>
26#include <TopTools_ListOfShape.hxx>
27#include <TopTools_ListIteratorOfListOfShape.hxx>
28#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
29#include <TopoDS_Shape.hxx>
30#include <Standard_Integer.hxx>
31#include <TCollection_AsciiString.hxx>
32#include <TopTools_IndexedMapOfOrientedShape.hxx>
33#include <Standard_Boolean.hxx>
34#include <Standard_OStream.hxx>
35class TopoDS_Shape;
36class TCollection_AsciiString;
37
38
39
40//! Auxiliary class providing an exploration of a set
41//! of shapes to build faces or solids.
42//! To build faces : shapes are wires, elements are edges.
43//! To build solids : shapes are shells, elements are faces.
44//! The ShapeSet stores a list of shapes, a list of elements
45//! to start reconstructions, and a map to search neighbours.
46//! The map stores the connection between elements through
47//! subshapes of type <SubShapeType> given in constructor.
48//! <SubShapeType> is :
49//! - TopAbs_VERTEX to connect edges
50//! - TopAbs_EDGE to connect faces
51//!
52//! Signature needed by the BlockBuilder :
53//! InitStartElements(me : in out)
54//! MoreStartElements(me) returns Boolean;
55//! NextStartElement(me : in out);
56//! StartElement(me) returns Shape; ---C++: return const &
57//! InitNeighbours(me : in out; S : Shape);
58//! MoreNeighbours(me) returns Boolean;
59//! NextNeighbour(me : in out);
60//! Neighbour(me) returns Shape; ---C++: return const &
61class TopOpeBRepBuild_ShapeSet
62{
63public:
64
65 DEFINE_STANDARD_ALLOC
66
67
68 //! Creates a ShapeSet in order to build shapes connected
69 //! by <SubShapeType> shapes.
70 //! <checkshape>:check (or not) the shapes, startelements, elements added.
71 Standard_EXPORT TopOpeBRepBuild_ShapeSet(const TopAbs_ShapeEnum SubShapeType, const Standard_Boolean checkshape = Standard_True);
72
73 Standard_EXPORT virtual ~TopOpeBRepBuild_ShapeSet();
74
75 //! Adds <S> to the list of shapes. (wires or shells).
76 Standard_EXPORT virtual void AddShape (const TopoDS_Shape& S);
77
78 //! (S is a face or edge)
79 //! Add S to the list of starting shapes used for reconstructions.
80 //! apply AddElement(S).
81 Standard_EXPORT virtual void AddStartElement (const TopoDS_Shape& S);
82
83 //! for each subshape SE of S of type mySubShapeType
84 //! - Add subshapes of S to the map of subshapes (mySubShapeMap)
85 //! - Add S to the list of shape incident to subshapes of S.
86 Standard_EXPORT virtual void AddElement (const TopoDS_Shape& S);
87
88 //! return a reference on myStartShapes
89 Standard_EXPORT const TopTools_ListOfShape& StartElements() const;
90
91 Standard_EXPORT void InitShapes();
92
93 Standard_EXPORT Standard_Boolean MoreShapes() const;
94
95 Standard_EXPORT void NextShape();
96
97 Standard_EXPORT const TopoDS_Shape& Shape() const;
98
99 Standard_EXPORT void InitStartElements();
100
101 Standard_EXPORT Standard_Boolean MoreStartElements() const;
102
103 Standard_EXPORT void NextStartElement();
104
105 Standard_EXPORT const TopoDS_Shape& StartElement() const;
106
107 Standard_EXPORT virtual void InitNeighbours (const TopoDS_Shape& S);
108
109 Standard_EXPORT Standard_Boolean MoreNeighbours();
110
111 Standard_EXPORT void NextNeighbour();
112
113 Standard_EXPORT const TopoDS_Shape& Neighbour() const;
114
115 Standard_EXPORT TopTools_ListOfShape& ChangeStartShapes();
116
117 //! Build the list of neighbour shapes of myCurrentShape
118 //! (neighbour shapes and myCurrentShapes are of type t)
119 //! Initialize myIncidentShapesIter on neighbour shapes.
120 Standard_EXPORT virtual void FindNeighbours();
121
122 Standard_EXPORT virtual const TopTools_ListOfShape& MakeNeighboursList (const TopoDS_Shape& E, const TopoDS_Shape& V);
123
124 Standard_EXPORT Standard_Integer MaxNumberSubShape (const TopoDS_Shape& Shape);
125
126 Standard_EXPORT void CheckShape (const Standard_Boolean checkshape);
127
128 Standard_EXPORT Standard_Boolean CheckShape() const;
129
130 Standard_EXPORT Standard_Boolean CheckShape (const TopoDS_Shape& S, const Standard_Boolean checkgeom = Standard_False);
131
132 Standard_EXPORT void DumpName (Standard_OStream& OS, const TCollection_AsciiString& str) const;
133
134 Standard_EXPORT void DumpCheck (Standard_OStream& OS, const TCollection_AsciiString& str, const TopoDS_Shape& S, const Standard_Boolean chk) const;
135
136 Standard_EXPORT virtual void DumpSS();
137
138 Standard_EXPORT virtual void DumpBB();
139
140 Standard_EXPORT void DEBName (const TCollection_AsciiString& N);
141
142 Standard_EXPORT const TCollection_AsciiString& DEBName() const;
143
144 Standard_EXPORT void DEBNumber (const Standard_Integer I);
145
146 Standard_EXPORT Standard_Integer DEBNumber() const;
147
148 Standard_EXPORT virtual TCollection_AsciiString SName (const TopoDS_Shape& S, const TCollection_AsciiString& sb = "", const TCollection_AsciiString& sa = "") const;
149
150 Standard_EXPORT virtual TCollection_AsciiString SNameori (const TopoDS_Shape& S, const TCollection_AsciiString& sb = "", const TCollection_AsciiString& sa = "") const;
151
152 Standard_EXPORT virtual TCollection_AsciiString SName (const TopTools_ListOfShape& S, const TCollection_AsciiString& sb = "", const TCollection_AsciiString& sa = "") const;
153
154 Standard_EXPORT virtual TCollection_AsciiString SNameori (const TopTools_ListOfShape& S, const TCollection_AsciiString& sb = "", const TCollection_AsciiString& sa = "") const;
155
156
157
158
159protected:
160
161
162 Standard_EXPORT void ProcessAddShape (const TopoDS_Shape& S);
163
164 Standard_EXPORT void ProcessAddStartElement (const TopoDS_Shape& S);
165
166 Standard_EXPORT void ProcessAddElement (const TopoDS_Shape& S);
167
168
169 TopAbs_ShapeEnum myShapeType;
170 TopAbs_ShapeEnum mySubShapeType;
171 TopOpeBRepTool_ShapeExplorer mySubShapeExplorer;
172 TopTools_ListOfShape myStartShapes;
173 TopTools_ListIteratorOfListOfShape myStartShapesIter;
174 TopTools_IndexedDataMapOfShapeListOfShape mySubShapeMap;
175 TopTools_ListIteratorOfListOfShape myIncidentShapesIter;
176 TopTools_ListOfShape myShapes;
177 TopTools_ListIteratorOfListOfShape myShapesIter;
178 TopoDS_Shape myCurrentShape;
179 TopTools_ListOfShape myCurrentShapeNeighbours;
180 Standard_Integer myDEBNumber;
181 TCollection_AsciiString myDEBName;
182 TopTools_IndexedMapOfOrientedShape myOMSS;
183 TopTools_IndexedMapOfOrientedShape myOMES;
184 TopTools_IndexedMapOfOrientedShape myOMSH;
185 Standard_Boolean myCheckShape;
186
187
188private:
189
190
191
192
193
194};
195
196
197
198
199
200
201
202#endif // _TopOpeBRepBuild_ShapeSet_HeaderFile