0028838: Configuration - undefine macros coming from X11 headers in place of collision
[occt.git] / src / TopoDS / TopoDS_Shape.hxx
1 // Created on: 1990-12-11
2 // Created by: Remi Lequette
3 // Copyright (c) 1990-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 _TopoDS_Shape_HeaderFile
18 #define _TopoDS_Shape_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <TopLoc_Location.hxx>
25 #include <TopAbs_Orientation.hxx>
26 #include <Standard_Boolean.hxx>
27 #include <TopAbs_ShapeEnum.hxx>
28 #include <Standard_Integer.hxx>
29 class TopoDS_TShape;
30
31 // resolve name collisions with X11 headers
32 #ifdef Convex
33   #undef Convex
34 #endif
35
36 //! Describes a shape which
37 //! - references an underlying shape with the potential
38 //! to be given a location and an orientation
39 //! - has a location for the underlying shape, giving its
40 //! placement in the local coordinate system
41 //! - has an orientation for the underlying shape, in
42 //! terms of its geometry (as opposed to orientation in
43 //! relation to other shapes).
44 //! Note: A Shape is empty if it references an underlying
45 //! shape which has an empty list of shapes.
46 class TopoDS_Shape 
47 {
48 public:
49
50   DEFINE_STANDARD_ALLOC
51
52   
53   //! Creates a NULL Shape referring to nothing.
54     TopoDS_Shape();
55   
56   //! Returns true if this shape is null. In other words, it
57   //! references no underlying shape with the potential to
58   //! be given a location and an orientation.
59     Standard_Boolean IsNull() const;
60   
61   //! Destroys the reference to the underlying shape
62   //! stored in this shape. As a result, this shape becomes null.
63     void Nullify();
64   
65   //! Returns the shape local coordinate system.
66     const TopLoc_Location& Location() const;
67   
68   //! Sets the shape local coordinate system.
69     void Location (const TopLoc_Location& Loc);
70   
71   //! Returns a  shape  similar to <me> with   the local
72   //! coordinate system set to <Loc>.
73     TopoDS_Shape Located (const TopLoc_Location& Loc) const;
74   
75   //! Returns the shape orientation.
76     TopAbs_Orientation Orientation() const;
77   
78   //! Sets the shape orientation.
79     void Orientation (const TopAbs_Orientation Orient);
80   
81   //! Returns  a    shape  similar  to  <me>   with  the
82   //! orientation set to <Or>.
83     TopoDS_Shape Oriented (const TopAbs_Orientation Or) const;
84   
85     const Handle(TopoDS_TShape)& TShape() const;
86   
87   //! Returns the value of the TopAbs_ShapeEnum
88   //! enumeration that corresponds to this shape, for
89   //! example VERTEX, EDGE, and so on.
90   //! Exceptions
91   //! Standard_NullObject if this shape is null.
92     TopAbs_ShapeEnum ShapeType() const;
93   
94   //! Returns the free flag.
95     Standard_Boolean Free() const;
96   
97   //! Sets the free flag.
98     void Free (const Standard_Boolean F);
99   
100   //! Returns the locked flag.
101     Standard_Boolean Locked() const;
102   
103   //! Sets the locked flag.
104     void Locked (const Standard_Boolean F);
105   
106   //! Returns the modification flag.
107     Standard_Boolean Modified() const;
108   
109   //! Sets the modification flag.
110     void Modified (const Standard_Boolean M);
111   
112   //! Returns the checked flag.
113     Standard_Boolean Checked() const;
114   
115   //! Sets the checked flag.
116     void Checked (const Standard_Boolean C);
117   
118   //! Returns the orientability flag.
119     Standard_Boolean Orientable() const;
120   
121   //! Sets the orientability flag.
122     void Orientable (const Standard_Boolean C);
123   
124   //! Returns the closedness flag.
125     Standard_Boolean Closed() const;
126   
127   //! Sets the closedness flag.
128     void Closed (const Standard_Boolean C);
129   
130   //! Returns the infinity flag.
131     Standard_Boolean Infinite() const;
132   
133   //! Sets the infinity flag.
134     void Infinite (const Standard_Boolean C);
135   
136   //! Returns the convexness flag.
137     Standard_Boolean Convex() const;
138   
139   //! Sets the convexness flag.
140     void Convex (const Standard_Boolean C);
141   
142   //! Multiplies the Shape location by <position>.
143     void Move (const TopLoc_Location& position);
144   
145   //! Returns  a shape similar  to  <me> with a location
146   //! multiplied  by <position>.
147     TopoDS_Shape Moved (const TopLoc_Location& position) const;
148   
149   //! Reverses the orientation, using the Reverse method
150   //! from the TopAbs package.
151     void Reverse();
152   
153   //! Returns    a shape  similar    to  <me>  with  the
154   //! orientation  reversed, using  the   Reverse method
155   //! from the TopAbs package.
156     TopoDS_Shape Reversed() const;
157   
158   //! Complements the orientation, using the  Complement
159   //! method from the TopAbs package.
160     void Complement();
161   
162   //! Returns  a   shape  similar  to   <me>   with  the
163   //! orientation complemented,  using   the  Complement
164   //! method from the TopAbs package.
165     TopoDS_Shape Complemented() const;
166   
167   //! Updates the  Shape Orientation by composition with
168   //! <Orient>, using the Compose method from the TopAbs
169   //! package.
170     void Compose (const TopAbs_Orientation Orient);
171   
172   //! Returns  a  shape   similar   to  <me>   with  the
173   //! orientation  composed  with <Orient>,   using  the
174   //! Compose method from the TopAbs package.
175     TopoDS_Shape Composed (const TopAbs_Orientation Orient) const;
176   
177   //! Returns True if two shapes  are partners, i.e.  if
178   //! they   share   the   same  TShape.  Locations  and
179   //! Orientations may differ.
180     Standard_Boolean IsPartner (const TopoDS_Shape& other) const;
181   
182   //! Returns True if two shapes are same, i.e.  if they
183   //! share  the  same TShape  with the same  Locations.
184   //! Orientations may differ.
185     Standard_Boolean IsSame (const TopoDS_Shape& other) const;
186   
187   //! Returns True if two shapes are equal, i.e. if they
188   //! share the same TShape with  the same Locations and
189   //! Orientations.
190     Standard_Boolean IsEqual (const TopoDS_Shape& other) const;
191   Standard_Boolean operator == (const TopoDS_Shape& other) const
192 {
193   return IsEqual(other);
194 }
195   
196   //! Negation of the IsEqual method.
197     Standard_Boolean IsNotEqual (const TopoDS_Shape& other) const;
198   Standard_Boolean operator != (const TopoDS_Shape& other) const
199 {
200   return IsNotEqual(other);
201 }
202   
203   //! Returns a hashed value  denoting <me>.  This value
204   //! is in the range  1..<Upper>.  It is  computed from
205   //! the  TShape  and the  Location. The Orientation is
206   //! not used.
207   Standard_EXPORT Standard_Integer HashCode (const Standard_Integer Upper) const;
208   
209   //! Replace   <me> by  a  new   Shape with the    same
210   //! Orientation and Location and a new TShape with the
211   //! same geometry and no sub-shapes.
212     void EmptyCopy();
213   
214   //! Returns a new Shape with the  same Orientation and
215   //! Location and  a new TShape  with the same geometry
216   //! and no sub-shapes.
217     TopoDS_Shape EmptyCopied() const;
218   
219     void TShape (const Handle(TopoDS_TShape)& T);
220
221
222
223
224 protected:
225
226
227
228
229
230 private:
231
232
233
234   Handle(TopoDS_TShape) myTShape;
235   TopLoc_Location myLocation;
236   TopAbs_Orientation myOrient;
237
238
239 };
240
241
242 #include <TopoDS_Shape.lxx>
243
244
245
246 inline Standard_Integer HashCode(const TopoDS_Shape& me,const Standard_Integer Upper) {
247  return me.HashCode(Upper);
248 }
249
250
251
252 #endif // _TopoDS_Shape_HeaderFile