0031336: Modeling data - extend BRepPrimAPI_MakeBox with planar shape creation
[occt.git] / src / BRepPrim / BRepPrim_GWedge.hxx
1 // Created on: 1991-09-18
2 // Created by: Christophe MARION
3 // Copyright (c) 1991-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 _BRepPrim_GWedge_HeaderFile
18 #define _BRepPrim_GWedge_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <BRepPrim_Builder.hxx>
25 #include <gp_Ax2.hxx>
26 #include <Standard_Real.hxx>
27 #include <TopoDS_Shell.hxx>
28 #include <Standard_Boolean.hxx>
29 #include <TopoDS_Vertex.hxx>
30 #include <TopoDS_Edge.hxx>
31 #include <TopoDS_Wire.hxx>
32 #include <TopoDS_Face.hxx>
33 #include <BRepPrim_Direction.hxx>
34 class Standard_DomainError;
35 class Standard_OutOfRange;
36 class BRepPrim_Builder;
37 class gp_Ax2;
38 class TopoDS_Shell;
39 class TopoDS_Face;
40 class gp_Pln;
41 class TopoDS_Wire;
42 class TopoDS_Edge;
43 class gp_Lin;
44 class TopoDS_Vertex;
45 class gp_Pnt;
46
47
48 //! A wedge is defined by  :
49 //!
50 //! Axes : an Axis2 (coordinate system)
51 //!
52 //! YMin, YMax the  coordinates of the  ymin and ymax
53 //! rectangular faces parallel to the ZX plane (of the
54 //! coordinate systems)
55 //!
56 //! ZMin,ZMax,XMin,XMax the rectangular
57 //! left (YMin) face parallel to the Z and X axes.
58 //!
59 //! Z2Min,Z2Max,X2Min,X2Max the rectangular
60 //! right (YMax) face parallel to the Z and X axes.
61 //!
62 //! For a box Z2Min = ZMin, Z2Max = ZMax,
63 //! X2Min = XMin, X2Max = XMax
64 //!
65 //! The wedge can be open in the corresponding direction
66 //! of its Boolean myInfinite
67 class BRepPrim_GWedge 
68 {
69 public:
70
71   DEFINE_STANDARD_ALLOC
72
73   //! Default constructor
74   Standard_EXPORT BRepPrim_GWedge();
75   
76   //! Creates a  GWedge  algorithm.   <Axes> is  the axis
77   //! system for the primitive.
78   //!
79   //! XMin, YMin, ZMin are set to 0
80   //! XMax, YMax, ZMax are set to dx, dy, dz
81   //! Z2Min = ZMin
82   //! Z2Max = ZMax
83   //! X2Min = XMin
84   //! X2Max = XMax
85   //! The result is a box
86   //! dx,dy,dz should be positive
87   Standard_EXPORT BRepPrim_GWedge(const BRepPrim_Builder& B, const gp_Ax2& Axes, const Standard_Real dx, const Standard_Real dy, const Standard_Real dz);
88   
89   //! Creates  a GWedge  primitive. <Axes> is   the  axis
90   //! system for the primitive.
91   //!
92   //! XMin, YMin, ZMin are set to 0
93   //! XMax, YMax, ZMax are set to dx, dy, dz
94   //! Z2Min = ZMin
95   //! Z2Max = ZMax
96   //! X2Min = ltx
97   //! X2Max = ltx
98   //! The result is a STEP right angular wedge
99   //! dx,dy,dz should be positive
100   //! ltx should not be negative
101   Standard_EXPORT BRepPrim_GWedge(const BRepPrim_Builder& B, const gp_Ax2& Axes, const Standard_Real dx, const Standard_Real dy, const Standard_Real dz, const Standard_Real ltx);
102   
103   //! Create  a GWedge primitive.   <Axes>  is  the  axis
104   //! system for the primitive.
105   //!
106   //! all the fields are set to the corresponding value
107   //! XYZMax - XYZMin should be positive
108   //! ZX2Max - ZX2Min should not be negative
109   Standard_EXPORT BRepPrim_GWedge(const BRepPrim_Builder& B, const gp_Ax2& Axes, const Standard_Real xmin, const Standard_Real ymin, const Standard_Real zmin, const Standard_Real z2min, const Standard_Real x2min, const Standard_Real xmax, const Standard_Real ymax, const Standard_Real zmax, const Standard_Real z2max, const Standard_Real x2max);
110   
111   //! Returns the coordinates system from <me>.
112   Standard_EXPORT gp_Ax2 Axes() const;
113   
114   //! Returns Xmin value from <me>.
115   Standard_EXPORT Standard_Real GetXMin() const;
116   
117   //! Returns YMin value from <me>.
118   Standard_EXPORT Standard_Real GetYMin() const;
119   
120   //! Returns ZMin value from <me>.
121   Standard_EXPORT Standard_Real GetZMin() const;
122   
123   //! Returns Z2Min value from <me>.
124   Standard_EXPORT Standard_Real GetZ2Min() const;
125   
126   //! Returns X2Min value from <me>.
127   Standard_EXPORT Standard_Real GetX2Min() const;
128   
129   //! Returns XMax value from <me>.
130   Standard_EXPORT Standard_Real GetXMax() const;
131   
132   //! Returns YMax value from <me>.
133   Standard_EXPORT Standard_Real GetYMax() const;
134   
135   //! Returns ZMax value from <me>.
136   Standard_EXPORT Standard_Real GetZMax() const;
137   
138   //! Returns Z2Max value from <me>.
139   Standard_EXPORT Standard_Real GetZ2Max() const;
140   
141   //! Returns X2Max value from <me>.
142   Standard_EXPORT Standard_Real GetX2Max() const;
143   
144   //! Opens <me> in <d1> direction. A face and its edges
145   //! or vertices are said nonexistant.
146   Standard_EXPORT void Open (const BRepPrim_Direction d1);
147   
148   //! Closes   <me>  in <d1>  direction.  A face and its
149   //! edges or vertices are said existant.
150   Standard_EXPORT void Close (const BRepPrim_Direction d1);
151   
152   //! Returns True if <me> is open in <d1> direction.
153   Standard_EXPORT Standard_Boolean IsInfinite (const BRepPrim_Direction d1) const;
154   
155   //! Returns the Shell containing the Faces of <me>.
156   Standard_EXPORT const TopoDS_Shell& Shell();
157   
158   //! Returns True if <me> has a Face in <d1> direction.
159   Standard_EXPORT Standard_Boolean HasFace (const BRepPrim_Direction d1) const;
160   
161   //! Returns the Face of <me> located in <d1> direction.
162   Standard_EXPORT const TopoDS_Face& Face (const BRepPrim_Direction d1);
163   
164   //! Returns the plane  of the Face  of <me> located in
165   //! <d1> direction.
166   Standard_EXPORT gp_Pln Plane (const BRepPrim_Direction d1);
167   
168   //! Returns True if <me> has a Wire in <d1> direction.
169   Standard_EXPORT Standard_Boolean HasWire (const BRepPrim_Direction d1) const;
170   
171   //! Returns the Wire of <me> located in <d1> direction.
172   Standard_EXPORT const TopoDS_Wire& Wire (const BRepPrim_Direction d1);
173   
174   //! Returns True if <me> has an Edge in <d1><d2> direction.
175   Standard_EXPORT Standard_Boolean HasEdge (const BRepPrim_Direction d1, const BRepPrim_Direction d2) const;
176   
177   //! Returns the Edge of <me> located in <d1><d2> direction.
178   Standard_EXPORT const TopoDS_Edge& Edge (const BRepPrim_Direction d1, const BRepPrim_Direction d2);
179   
180   //! Returns the line of  the Edge of <me>  located  in
181   //! <d1><d2> direction.
182   Standard_EXPORT gp_Lin Line (const BRepPrim_Direction d1, const BRepPrim_Direction d2);
183   
184   //! Returns True if <me> has a  Vertex in <d1><d2><d3>
185   //! direction.
186   Standard_EXPORT Standard_Boolean HasVertex (const BRepPrim_Direction d1, const BRepPrim_Direction d2, const BRepPrim_Direction d3) const;
187   
188   //! Returns the Vertex of <me> located in <d1><d2><d3>
189   //! direction.
190   Standard_EXPORT const TopoDS_Vertex& Vertex (const BRepPrim_Direction d1, const BRepPrim_Direction d2, const BRepPrim_Direction d3);
191   
192   //! Returns the point of the Vertex of <me> located in
193   //! <d1><d2><d3> direction.
194   Standard_EXPORT gp_Pnt Point (const BRepPrim_Direction d1, const BRepPrim_Direction d2, const BRepPrim_Direction d3);
195
196   //! Checkes a shape on degeneracy
197   //! @return TRUE if a shape is degenerated
198   Standard_EXPORT Standard_Boolean IsDegeneratedShape();
199
200
201 protected:
202
203
204
205
206
207 private:
208
209
210
211   BRepPrim_Builder myBuilder;
212   gp_Ax2 myAxes;
213   Standard_Real XMin;
214   Standard_Real XMax;
215   Standard_Real YMin;
216   Standard_Real YMax;
217   Standard_Real ZMin;
218   Standard_Real ZMax;
219   Standard_Real Z2Min;
220   Standard_Real Z2Max;
221   Standard_Real X2Min;
222   Standard_Real X2Max;
223   TopoDS_Shell myShell;
224   Standard_Boolean ShellBuilt;
225   TopoDS_Vertex myVertices[8];
226   Standard_Boolean VerticesBuilt[8];
227   TopoDS_Edge myEdges[12];
228   Standard_Boolean EdgesBuilt[12];
229   TopoDS_Wire myWires[6];
230   Standard_Boolean WiresBuilt[6];
231   TopoDS_Face myFaces[6];
232   Standard_Boolean FacesBuilt[6];
233   Standard_Boolean myInfinite[6];
234
235
236 };
237
238
239
240
241
242
243
244 #endif // _BRepPrim_GWedge_HeaderFile