44b4e462420877864b25ef6b5f802bf3dc653791
[occt.git] / src / IFSelect / IFSelect_GeneralModifier.hxx
1 // Created on: 1993-10-19
2 // Created by: Christian CAILLET
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 _IFSelect_GeneralModifier_HeaderFile
18 #define _IFSelect_GeneralModifier_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
22
23 #include <Standard_Boolean.hxx>
24 #include <Standard_Transient.hxx>
25 class IFSelect_Selection;
26 class IFSelect_Dispatch;
27 class TCollection_AsciiString;
28
29 class IFSelect_GeneralModifier;
30 DEFINE_STANDARD_HANDLE(IFSelect_GeneralModifier, Standard_Transient)
31
32 //! This class gives a frame for Actions which modify the effect
33 //! of a Dispatch, i.e. :
34 //! By Selections and Dispatches, an original Model can be
35 //! split into one or more "target" Models : these Models
36 //! contain Entities copied from the original one (that is, a
37 //! part of it). Basically, these dispatched Entities are copied
38 //! as identical to their original counterparts. Also the copied
39 //! Models reproduce the Header of the original one.
40 //!
41 //! Modifiers allow to change this copied content : this is the
42 //! way to be used for any kind of alterations, adaptations ...
43 //! They are exploited by a ModelCopier, which firstly performs
44 //! the copy operation described by Dispatches, then invokes the
45 //! Modifiers to work on the result.
46 //!
47 //! Each GeneralModifier can be attached to :
48 //! - all the Models produced
49 //! - a Dispatch (it will be applied to all the Models obtained
50 //! from this Dispatch) designated by its Ident in a ShareOut
51 //! - in addition, to a Selection (facultative) : this adds a
52 //! criterium, the Modifier is invoked on a produced Model only
53 //! if this Model contains an Entity copied from one of the
54 //! Entities designated by this Selection.
55 //! (for special Modifiers from IFAdapt, while they must work on
56 //! definite Entities, this Selection is mandatory to run)
57 //!
58 //! Remark : this class has no action attached, it only provides
59 //! a frame to work on criteria. Then, sub-classes will define
60 //! their kind of action, which can be applied at a precise step
61 //! of the production of a File : see Modifier, and in the
62 //! package IFAdapt, EntityModifier and EntityCopier
63 class IFSelect_GeneralModifier : public Standard_Transient
64 {
65
66 public:
67
68   //! Returns True if this modifier may change the graph of
69   //! dependences (aknowledged at creation time)
70   Standard_EXPORT Standard_Boolean MayChangeGraph() const;
71   
72   //! Attaches to a Dispatch. If <disp> is Null, Resets it
73   //! (to apply the Modifier on every Dispatch)
74   Standard_EXPORT void SetDispatch (const Handle(IFSelect_Dispatch)& disp);
75   
76   //! Returns the Dispatch to be matched, Null if not set
77   Standard_EXPORT Handle(IFSelect_Dispatch) Dispatch() const;
78   
79   //! Returns True if a Model obtained from the Dispatch <disp>
80   //! is to be treated (apart from the Selection criterium)
81   //! If Dispatch(me) is Null, returns True. Else, checks <disp>
82   Standard_EXPORT Standard_Boolean Applies (const Handle(IFSelect_Dispatch)& disp) const;
83   
84   //! Sets a Selection : a Model is treated if it contains one or
85   //! more Entities designated by the Selection
86   Standard_EXPORT void SetSelection (const Handle(IFSelect_Selection)& sel);
87   
88   //! Resets the Selection : this criterium is not longer active
89   Standard_EXPORT void ResetSelection();
90   
91   //! Returns True if a Selection is set as an additional criterium
92   Standard_EXPORT Standard_Boolean HasSelection() const;
93   
94   //! Returns the Selection, or a Null Handle if not set
95   Standard_EXPORT Handle(IFSelect_Selection) Selection() const;
96   
97   //! Returns a short text which defines the operation performed
98   Standard_EXPORT virtual TCollection_AsciiString Label() const = 0;
99
100   DEFINE_STANDARD_RTTIEXT(IFSelect_GeneralModifier,Standard_Transient)
101
102 protected:
103
104   //! Sets the Modifier criteria to default Values
105   //! (i.e. "always applies")
106   //! <maychangegraph> must be provided at creation time, to :
107   //! - False if this GeneralModifier surely lets the graph of
108   //! dependencies unchanged (NO edition of any reference, BUT
109   //! also NO entity added or replaced or removed)
110   //! - True if there is a possibility of changing the graph of
111   //! dependencies when this modifier is applied
112   Standard_EXPORT IFSelect_GeneralModifier(const Standard_Boolean maychangegraph);
113
114 private:
115
116   Handle(IFSelect_Selection) thesel;
117   Handle(IFSelect_Dispatch) thedisp;
118   Standard_Boolean thechgr;
119
120 };
121
122 #endif // _IFSelect_GeneralModifier_HeaderFile