SHAPER 9.16.0
Selector_Algo.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 Selector_Algo_H_
21#define Selector_Algo_H_
22
23#include "Selector.h"
24
25#include <Standard_GUID.hxx>
26#include <TDF_Label.hxx>
27#include <TDF_LabelList.hxx>
28#include <TopoDS_Shape.hxx>
29
31
37{
38 TopAbs_ShapeEnum myShapeType;
39
40 TDF_Label myLab;
41 TDF_Label myBaseDocumentLab;
42 bool myGeometricalNaming;
43 bool myAlwaysGeometricalNaming;
44 bool myUseNeighbors;
45 bool myUseIntersections;
46
47public:
57 };
58
60 SELECTOR_EXPORT Selector_Algo();
61
62 virtual ~Selector_Algo() {}
63
71 SELECTOR_EXPORT static Selector_Algo* select(
72 const TopoDS_Shape theContext, const TopoDS_Shape theValue,
73 const TDF_Label theAccess, const TDF_Label theBaseDocument,
74 const bool theGeometricalNaming = false,
75 const bool theUseNeighbors = true, const bool theUseIntersections = true,
76 const bool theAlwaysGeometricalNaming = false);
77
79 SELECTOR_EXPORT virtual void store() = 0;
80
83 SELECTOR_EXPORT virtual bool restore() = 0;
84
87 SELECTOR_EXPORT virtual TDF_Label restoreByName(std::wstring theName,
88 const TopAbs_ShapeEnum theShapeType, Selector_NameGenerator* theNameGenerator) = 0;
89
91 SELECTOR_EXPORT virtual bool solve(const TopoDS_Shape& theContext) = 0;
92
94 SELECTOR_EXPORT virtual std::wstring name(Selector_NameGenerator* theNameGenerator) = 0;
96 SELECTOR_EXPORT TopoDS_Shape value();
98 SELECTOR_EXPORT static Selector_Algo* restoreByLab(TDF_Label theLab, TDF_Label theBaseDocLab);
101 SELECTOR_EXPORT static Selector_Algo* restoreByName(
102 TDF_Label theLab, TDF_Label theBaseDocLab, std::wstring theName,
103 const TopAbs_ShapeEnum theShapeType, const bool theGeomNaming,
104 Selector_NameGenerator* theNameGenerator, TDF_Label& theContextLab);
105
107 static bool sameGeometry(const TopoDS_Shape theShape1, const TopoDS_Shape theShape2);
108
110 SELECTOR_EXPORT static Selector_Algo* relesectWithAllGeometry(
111 Selector_Algo* theOldAlgo, const TopoDS_Shape theContext);
114 {myGeometricalNaming = true;}
115
116protected:
118 const TDF_Label& label() const
119 {return myLab;}
121 void storeBaseArray(const TDF_LabelList& theRef, const TDF_Label& theLast);
123 bool restoreBaseArray(TDF_LabelList& theRef, TDF_Label& theLast);
125 void store(const TopoDS_Shape theShape);
127 const TDF_Label& baseDocument() const
128 {return myBaseDocumentLab;}
130 bool geometricalNaming() const
131 {return myGeometricalNaming;}
134 {return myAlwaysGeometricalNaming;}
136 bool useNeighbors() const
137 {return myUseNeighbors;}
139 bool useIntersections() const
140 {return myUseIntersections;}
142 static const Standard_GUID& weakID()
143 {
144 static const Standard_GUID kWEAK_INDEX("e9373a61-cabc-4ee8-aabf-aea47c62ed87");
145 return kWEAK_INDEX;
146 }
148 static const Standard_GUID& shapeTypeID()
149 {
150 static const Standard_GUID kSHAPE_TYPE("864b3267-cb9d-4107-bf58-c3ce1775b171");
151 return kSHAPE_TYPE;
152 }
154 static const std::wstring& oldWeakNameID()
155 {
156 static const std::wstring kWEAK_NAME_IDENTIFIER = L"weak_name_";
157 return kWEAK_NAME_IDENTIFIER;
158 }
160 static const std::wstring& oldPureWeakNameID()
161 {
162 static const std::wstring kPURE_WEAK_NAME_IDENTIFIER = L"_weak_name_";
163 return kPURE_WEAK_NAME_IDENTIFIER;
164 }
166 static const std::wstring& weakNameID()
167 {
168 static const std::wstring kWEAK_NAME_IDENTIFIER = std::wstring(L"new_") + oldWeakNameID();
169 return kWEAK_NAME_IDENTIFIER;
170 }
172 static const std::wstring& pureWeakNameID()
173 {
174 static const std::wstring kPURE_WEAK_NAME_IDENTIFIER =
175 std::wstring(L"_new") + oldPureWeakNameID();
176 return kPURE_WEAK_NAME_IDENTIFIER;
177 }
179 void storeType(const Selector_Type theType);
180
183 bool findNewVersion(const TopoDS_Shape& theContext, TopoDS_Shape& theResult) const;
184};
185
186#endif
Definition: Selector_Algo.h:37
const TDF_Label & baseDocument() const
Returns an access-label of the document that may contain initial shapes.
Definition: Selector_Algo.h:127
virtual void store()=0
Stores the name to the label and sub-labels tree.
static const std::wstring & oldWeakNameID()
old string identifier of the weak name in modification or intersection types of algorithm
Definition: Selector_Algo.h:154
void setGeometricalNaming()
Sets geometrical naming flag to true.
Definition: Selector_Algo.h:113
virtual bool solve(const TopoDS_Shape &theContext)=0
Updates the current shape by the stored topological name.
bool useNeighbors() const
Returns use neighbors flag.
Definition: Selector_Algo.h:136
Selector_Algo()
Initializes the algorithm.
Definition: Selector_Algo.cpp:63
bool geometricalNaming() const
Returns the geometrical naming flag.
Definition: Selector_Algo.h:130
virtual TDF_Label restoreByName(std::wstring theName, const TopAbs_ShapeEnum theShapeType, Selector_NameGenerator *theNameGenerator)=0
Restores the selected shape by the topological name string.
static Selector_Algo * restoreByLab(TDF_Label theLab, TDF_Label theBaseDocLab)
Restores sub-algorithm of a given type by the storage-label.
Definition: Selector_Algo.cpp:365
bool findNewVersion(const TopoDS_Shape &theContext, TopoDS_Shape &theResult) const
Searches the newer version of the shape in the document if the base shape does not belong to context.
Definition: Selector_Algo.cpp:472
bool useIntersections() const
Returns use intersections flag.
Definition: Selector_Algo.h:139
static const std::wstring & weakNameID()
string identifier of the weak name in modification or intersection types of algorithm
Definition: Selector_Algo.h:166
static const std::wstring & oldPureWeakNameID()
old string identifier of the pure weak name
Definition: Selector_Algo.h:160
bool alwaysGeometricalNaming() const
Returns always geometrical naming flag.
Definition: Selector_Algo.h:133
virtual bool restore()=0
Restores the selected shape by the topological naming kept in the data structure Returns true if it c...
TopoDS_Shape value()
Returns the current sub-shape value (null if can not resolve)
Definition: Selector_Algo.cpp:357
bool restoreBaseArray(TDF_LabelList &theRef, TDF_Label &theLast)
Restores references to the labels: references to elements of ref-list, then the last.
Definition: Selector_Algo.cpp:294
static const std::wstring & pureWeakNameID()
string identifier of the pure weak name
Definition: Selector_Algo.h:172
static bool sameGeometry(const TopoDS_Shape theShape1, const TopoDS_Shape theShape2)
Returns true if the given shapes are based on the same geometry.
Definition: Selector_Algo.cpp:334
static const Standard_GUID & shapeTypeID()
Returns GUID for the type of the shape, stored in case it is intersection or container.
Definition: Selector_Algo.h:148
void storeBaseArray(const TDF_LabelList &theRef, const TDF_Label &theLast)
Stores the array of references to theLab: references to elements of ref-list, then the last.
Definition: Selector_Algo.cpp:268
static const Standard_GUID & weakID()
Returns GUID for the weak index (integer attribute) of the sub-shape.
Definition: Selector_Algo.h:142
static Selector_Algo * select(const TopoDS_Shape theContext, const TopoDS_Shape theValue, const TDF_Label theAccess, const TDF_Label theBaseDocument, const bool theGeometricalNaming=false, const bool theUseNeighbors=true, const bool theUseIntersections=true, const bool theAlwaysGeometricalNaming=false)
Initializes the selector structure on the label.
Definition: Selector_Algo.cpp:113
const TDF_Label & label() const
Returns label where this algorithm is attached to, or just an access label to the document.
Definition: Selector_Algo.h:118
void storeType(const Selector_Type theType)
Stores the type of an algorithm in the data tree (in myLab)
Definition: Selector_Algo.cpp:455
virtual std::wstring name(Selector_NameGenerator *theNameGenerator)=0
Returns the naming name of the selection.
static Selector_Algo * relesectWithAllGeometry(Selector_Algo *theOldAlgo, const TopoDS_Shape theContext)
Creates a new selection algorithm for selection of all topology based on the same geometry.
Definition: Selector_Algo.cpp:261
Selector_Type
Type of a selector algorithm: on this type depends what is stored in this label and how to restore it...
Definition: Selector_Algo.h:50
@ SELTYPE_FILTER_BY_NEIGHBOR
identification by neighbor shapes in context
Definition: Selector_Algo.h:55
@ SELTYPE_CONTAINER
just a container of sub-elements, keeps the shape type of container
Definition: Selector_Algo.h:51
@ SELTYPE_PRIMITIVE
sub-shape found as a primitive on some label
Definition: Selector_Algo.h:53
@ SELTYPE_MODIFICATION
modification of base shapes to the final label
Definition: Selector_Algo.h:54
@ SELTYPE_WEAK_NAMING
pure weak naming by weak index in context
Definition: Selector_Algo.h:56
@ SELTYPE_INTERSECT
sub-shape is intersection of higher level objects
Definition: Selector_Algo.h:52
An interface for generation of the naming name basing on the current selection and document informati...
Definition: Selector_NameGenerator.h:34