Salome HOME
To show notebook variables in the Object Browser.
[modules/geom.git] / src / GEOM / GEOM_Object.hxx
1 // Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 //
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License.
8 //
9 // This library is distributed in the hope that it will be useful
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 // Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 //
20 #ifndef _GEOM_Object_HeaderFile
21 #define _GEOM_Object_HeaderFile
22
23 #ifndef _Standard_TypeMismatch_HeaderFile
24 #include <Standard_TypeMismatch.hxx>
25 #endif
26 #ifndef _Standard_HeaderFile
27 #include <Standard.hxx>
28 #endif
29 #ifndef _Standard_Macro_HeaderFile
30 #include <Standard_Macro.hxx>
31 #endif
32 #ifndef _Standard_HeaderFile
33 #include <Standard.hxx>
34 #endif
35 #ifndef _Handle_MMgt_TShared_HeaderFile
36 #include <Handle_MMgt_TShared.hxx>
37 #endif
38 #ifndef _MMgt_TShared_HeaderFile
39 #include <MMgt_TShared.hxx>
40 #endif
41 #ifndef _Standard_GUID_HeaderFile
42 #include <Standard_GUID.hxx>
43 #endif
44 #ifndef _TopoDS_Shape_HeaderFile
45 #include <TopoDS_Shape.hxx>
46 #endif
47 #ifndef _TDF_Label_HeaderFile
48 #include <TDF_Label.hxx>
49 #endif
50 #ifndef _TColStd_HSequenceOfTransient_HeaderFile
51 #include <TColStd_HSequenceOfTransient.hxx>
52 #endif
53 #ifndef _TCollection_AsciiString_HeaderFile
54 #include <TCollection_AsciiString.hxx>
55 #endif
56
57 #include "SALOMEconfig.h"
58 #include CORBA_SERVER_HEADER(SALOMEDS)
59 #include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
60
61 class Handle_TColStd_HSequenceOfTransient;
62 class Standard_Transient;
63 class Handle_Standard_Type;
64 class Handle(MMgt_TShared);
65 class GEOM_Object;
66
67
68 Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOM_Object);
69
70 class Handle(GEOM_Object) : public Handle(MMgt_TShared) {
71   public:
72     inline void* operator new(size_t,void* anAddress)
73       {
74         return anAddress;
75       }
76     inline void* operator new(size_t size)
77       {
78         return Standard::Allocate(size);
79       }
80     inline void  operator delete(void *anAddress)
81       {
82         if (anAddress) Standard::Free((Standard_Address&)anAddress);
83       }
84
85     Handle(GEOM_Object)():Handle(MMgt_TShared)() {}
86     Handle(GEOM_Object)(const Handle(GEOM_Object)& aHandle) : Handle(MMgt_TShared)(aHandle)
87      {
88      }
89
90     Handle(GEOM_Object)(const GEOM_Object* anItem) : Handle(MMgt_TShared)((MMgt_TShared *)anItem)
91      {
92      }
93
94     Handle(GEOM_Object)& operator=(const Handle(GEOM_Object)& aHandle)
95      {
96       Assign(aHandle.Access());
97       return *this;
98      }
99
100     Handle(GEOM_Object)& operator=(const GEOM_Object* anItem)
101      {
102       Assign((Standard_Transient *)anItem);
103       return *this;
104      }
105
106     GEOM_Object* operator->()
107      {
108       return (GEOM_Object *)ControlAccess();
109      }
110
111     GEOM_Object* operator->() const
112      {
113       return (GEOM_Object *)ControlAccess();
114      }
115
116    Standard_EXPORT ~Handle(GEOM_Object)() {};
117
118    Standard_EXPORT static const Handle(GEOM_Object) DownCast(const Handle(Standard_Transient)& AnObject);
119 };
120
121
122 #include <Standard_GUID.hxx>
123 #include <TDataStd_TreeNode.hxx>
124 #include "GEOM_Function.hxx"
125 #include "GEOM_Engine.hxx"
126
127 class GEOM_Object : public MMgt_TShared
128 {
129  friend class GEOM_Engine;
130
131  public:
132   inline void* operator new(size_t,void* anAddress)
133     {
134       return anAddress;
135     }
136   inline void* operator new(size_t size)
137     {
138       return Standard::Allocate(size);
139     }
140   inline void  operator delete(void *anAddress)
141     {
142       if (anAddress) Standard::Free((Standard_Address&)anAddress);
143     }
144
145   // Type management
146   //
147   Standard_EXPORT friend Handle_Standard_Type& GEOM_Object_Type_();
148   Standard_EXPORT const Handle(Standard_Type)& DynamicType() const  { return STANDARD_TYPE(GEOM_Object) ; }
149   Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const
150            { return (STANDARD_TYPE(GEOM_Object) == AType || MMgt_TShared::IsKind(AType)); }
151
152  private:
153   GEOM_Object(TDF_Label& theLabel);
154
155  public:
156   Standard_EXPORT GEOM_Object(TDF_Label& theEntry, int theType);
157   Standard_EXPORT ~GEOM_Object() {;}
158
159   //Finds a GEOM_Object on the label theLabel
160   Standard_EXPORT static Handle(GEOM_Object) GetObject(TDF_Label& theLabel);
161
162   //Finds a GEOM_Object by a reference, stored on the label theLabel
163   Standard_EXPORT static Handle(GEOM_Object) GetReferencedObject(TDF_Label& theLabel);
164
165   //Returns a GEOM_Object common GUID
166   Standard_EXPORT static const Standard_GUID& GetObjectID();
167
168   //Returns a GUID associated with a sub shape object
169   Standard_EXPORT static const Standard_GUID& GetSubShapeID();
170
171   //###########################################################
172   //Access to properties
173   //###########################################################
174
175   //Returns a TreeNode that presents a root of a function tree for this GEOM_Object
176   Standard_EXPORT Handle(TDataStd_TreeNode) GetRootNode() { return _root; }
177
178   //Returns a label of this GEOM_Object
179   Standard_EXPORT TDF_Label GetEntry() { return _label; }
180
181   //Returns a type of this GEOM_Object (GEOM_POINT, GEOM_VECTOR...)
182   Standard_EXPORT int GetType();
183
184   //Sets the type of this GEOM_Object
185   Standard_EXPORT void SetType(int theType);
186
187   //Modifications counter management
188   Standard_EXPORT int  GetTic();
189   Standard_EXPORT void SetTic(int theTic);
190   Standard_EXPORT void IncrementTic();
191
192   //Returns an ID of the OCAF document where this GEOM_Object is stored
193   Standard_EXPORT int GetDocID();
194
195   //Returns a value (as TopoDS_Shape) of this GEOM_Object
196   Standard_EXPORT TopoDS_Shape GetValue();
197
198   //Sets a name of this GEOM_Object
199   Standard_EXPORT void SetName(const char* theName);
200
201   //Returns a name of this GEOM_Object
202   Standard_EXPORT char* GetName();
203
204   //Sets a color of this GEOM_Object
205   Standard_EXPORT void SetColor(const SALOMEDS::Color& theColor);
206
207   //Returns a color of this GEOM_Object
208   Standard_EXPORT SALOMEDS::Color GetColor();
209
210   //Toggles an auto color mode on this GEOM_Object
211   Standard_EXPORT void SetAutoColor(CORBA::Boolean theAutoColor);
212
213   //Returns a flag of auto color mode of this GEOM_Object
214   Standard_EXPORT CORBA::Boolean GetAutoColor();
215
216   //Sets an auxiliary data
217   Standard_EXPORT void SetAuxData(const char* theData);
218
219   //Returns an auxiliary data
220   Standard_EXPORT TCollection_AsciiString GetAuxData();
221
222   //Set a notebook variables used for object creation
223   Standard_EXPORT void SetParameters(const TCollection_AsciiString& theParameters)
224   {_parameters = theParameters;}
225
226   //Get a notebook variables used for object creation
227   Standard_EXPORT TCollection_AsciiString GetParameters() const
228   {return _parameters;}
229
230   //###########################################################
231   // Sub shape methods
232   //###########################################################
233
234   //Returns false if the object is a sub shape of another object
235   Standard_EXPORT bool IsMainShape();
236
237   //###########################################################
238   // CORBA related methods
239   //###########################################################
240
241   //Sets an IOR of CORBA GEOM_Object_i which refers to this object
242   Standard_EXPORT void SetIOR(TCollection_AsciiString& theIOR) { _ior = theIOR; }
243
244   //Returns an IOR of CORBA GEOM_Object_i which refers to this object
245   Standard_EXPORT TCollection_AsciiString GetIOR() { return _ior; }
246
247   //###########################################################
248   //Functions methods
249   //###########################################################
250
251   //Adds a function with a driver GUID = theGUID and a type theFunctionType
252   //to the function tree of this GEOM_Object
253   Standard_EXPORT Handle(GEOM_Function) AddFunction(const Standard_GUID& theGUID, int theFunctionType);
254
255   //Returns a number of functions of this GEOM_Object
256   Standard_EXPORT int GetNbFunctions();
257
258   //Returns a function with given number theFunctionNumber
259   Standard_EXPORT Handle(GEOM_Function) GetFunction(int theFunctionNumber);
260
261   //Return the last function of this GEOM_Object
262   Standard_EXPORT Handle(GEOM_Function) GetLastFunction();
263
264   //Returns all dependencies of the object
265   Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetAllDependency();
266
267   //Returns the dependencies of the last function
268   Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetLastDependency();
269
270   //###########################################################
271   // Internal methods
272   //###########################################################
273
274   //Returns a label which could be used to store some additional data
275   Standard_EXPORT TDF_Label GetFreeLabel();
276
277  private:
278   Handle(TDataStd_TreeNode) _root;
279   TDF_Label                 _label;
280   TCollection_AsciiString   _ior;
281   TCollection_AsciiString   _parameters;
282 };
283
284 #endif