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