0024002: Overall code and build procedure refactoring -- automatic
[occt.git] / src / BRepPrimAPI / BRepPrimAPI_MakeBox.cxx
CommitLineData
b311480e 1// Created on: 1993-07-23
2// Created by: Remi LEQUETTE
3// Copyright (c) 1993-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 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
973c2be1 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.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
42cf5bc1 17
7fd59977 18#include <BRepBuilderAPI.hxx>
a104bb8f 19#include <BRepPrim_Direction.hxx>
42cf5bc1 20#include <BRepPrim_Wedge.hxx>
21#include <BRepPrimAPI_MakeBox.hxx>
22#include <gp_Ax2.hxx>
23#include <gp_Pnt.hxx>
24#include <Standard_DomainError.hxx>
25#include <Standard_OutOfRange.hxx>
26#include <StdFail_NotDone.hxx>
27#include <TopoDS.hxx>
28#include <TopoDS_Face.hxx>
29#include <TopoDS_Shell.hxx>
30#include <TopoDS_Solid.hxx>
7fd59977 31
32inline gp_Pnt pmin(const gp_Pnt& p,
33 const Standard_Real dx,
34 const Standard_Real dy,
35 const Standard_Real dz)
36{
37 gp_Pnt P = p;
38 if (dx < 0) P.SetX(P.X()+dx);
39 if (dy < 0) P.SetY(P.Y()+dy);
40 if (dz < 0) P.SetZ(P.Z()+dz);
41 return P;
42}
43
44//=======================================================================
45//function : BRepPrimAPI_MakeBox
46//purpose :
47//=======================================================================
48
49BRepPrimAPI_MakeBox::BRepPrimAPI_MakeBox(const Standard_Real dx,
50 const Standard_Real dy,
51 const Standard_Real dz) :
52 myWedge(gp_Ax2(pmin(gp_Pnt(0,0,0),dx,dy,dz),gp_Dir(0,0,1),gp_Dir(1,0,0)),
53 Abs(dx),Abs(dy),Abs(dz))
54{
55}
56
57
58//=======================================================================
59//function : BRepPrimAPI_MakeBox
60//purpose :
61//=======================================================================
62
63BRepPrimAPI_MakeBox::BRepPrimAPI_MakeBox(const gp_Pnt& P,
64 const Standard_Real dx,
65 const Standard_Real dy,
66 const Standard_Real dz) :
67 myWedge(gp_Ax2(pmin(P,dx,dy,dz),gp_Dir(0,0,1),gp_Dir(1,0,0)),
68 Abs(dx),Abs(dy),Abs(dz))
69{
70}
71
72
73//=======================================================================
74//function : BRepPrimAPI_MakeBox
75//purpose :
76//=======================================================================
77
78inline gp_Pnt pmin(const gp_Pnt& p1, const gp_Pnt& p2)
79{
80 return gp_Pnt(Min(p1.X(),p2.X()),Min(p1.Y(),p2.Y()),Min(p1.Z(),p2.Z()));
81}
82
83BRepPrimAPI_MakeBox::BRepPrimAPI_MakeBox(const gp_Pnt& P1, const gp_Pnt& P2) :
84 myWedge(gp_Ax2(pmin(P1,P2),gp_Dir(0,0,1),gp_Dir(1,0,0)),
85 Abs(P2.X()-P1.X()),
86 Abs(P2.Y()-P1.Y()),
87 Abs(P2.Z()-P1.Z()))
88{
89}
90
91
92//=======================================================================
93//function : BRepPrimAPI_MakeBox
94//purpose :
95//=======================================================================
96
97BRepPrimAPI_MakeBox::BRepPrimAPI_MakeBox(const gp_Ax2& Axes,
98 const Standard_Real dx,
99 const Standard_Real dy,
100 const Standard_Real dz) :
101 myWedge(Axes,dx,dy,dz)
102{
103}
104
105
106//=======================================================================
107//function : Wedge
108//purpose :
109//=======================================================================
110
111BRepPrim_Wedge& BRepPrimAPI_MakeBox::Wedge()
112{
113 return myWedge;
114}
115
116
117//=======================================================================
118//function : Shell
119//purpose :
120//=======================================================================
121
122const TopoDS_Shell& BRepPrimAPI_MakeBox::Shell()
123{
124 myShape = myWedge.Shell();
125 Done();
126 return TopoDS::Shell(myShape);
127}
128
129//=======================================================================
130//function : Build
131//purpose :
132//=======================================================================
133
134void BRepPrimAPI_MakeBox::Build()
135{
136 Solid();
137}
138
139//=======================================================================
140//function : Solid
141//purpose :
142//=======================================================================
143
144const TopoDS_Solid& BRepPrimAPI_MakeBox::Solid()
145{
146 BRep_Builder B;
147 B.MakeSolid(TopoDS::Solid(myShape));
148 B.Add(myShape,myWedge.Shell());
149 Done();
150 return TopoDS::Solid(myShape);
151}
152
153
154
155//=======================================================================
156//function : operator
157//purpose :
158//=======================================================================
159
160BRepPrimAPI_MakeBox::operator TopoDS_Shell()
161{
162 return Shell();
163}
164
165//=======================================================================
166//function : operator
167//purpose :
168//=======================================================================
169
170BRepPrimAPI_MakeBox::operator TopoDS_Solid()
171{
172 return Solid();
173}
174
175
176//=======================================================================
177//function : BottomFace
178//purpose :
179//=======================================================================
180
181const TopoDS_Face& BRepPrimAPI_MakeBox::BottomFace () {
182
a104bb8f 183 return myWedge.Face (BRepPrim_ZMin);
7fd59977 184}
185
186
187
188//=======================================================================
189//function : BackFace
190//purpose :
191//=======================================================================
192
193const TopoDS_Face& BRepPrimAPI_MakeBox::BackFace () {
194
a104bb8f 195 return myWedge.Face (BRepPrim_XMin);
7fd59977 196}
197
198
199//=======================================================================
200//function : FrontFace
201//purpose :
202//=======================================================================
203
204const TopoDS_Face& BRepPrimAPI_MakeBox::FrontFace () {
205
a104bb8f 206 return myWedge.Face (BRepPrim_XMax);
7fd59977 207}
208
209
210//=======================================================================
211//function : LeftFace
212//purpose :
213//=======================================================================
214
215const TopoDS_Face& BRepPrimAPI_MakeBox::LeftFace () {
216
a104bb8f 217 return myWedge.Face (BRepPrim_YMin);
7fd59977 218}
219
220
221//=======================================================================
222//function : RightFace
223//purpose :
224//=======================================================================
225
226const TopoDS_Face& BRepPrimAPI_MakeBox::RightFace () {
227
a104bb8f 228 return myWedge.Face (BRepPrim_YMax);
7fd59977 229}
230
231
232//=======================================================================
233//function : TopFace
234//purpose :
235//=======================================================================
236
237const TopoDS_Face& BRepPrimAPI_MakeBox::TopFace () {
238
a104bb8f 239 return myWedge.Face (BRepPrim_ZMax);
7fd59977 240}
241
242
243
244
245
246