Integration of OCCT 6.5.0 from SVN
[occt.git] / src / BRepTest / BRepTest_PrimitiveCommands.cxx
CommitLineData
7fd59977 1// File: DBRep_1.cxx
2// Created: Thu Jul 22 11:46:12 1993
3// Author: Remi LEQUETTE
4// <rle@nonox>
5
6
7#include <BRepTest.hxx>
8#include <DBRep.hxx>
9#include <Draw_Interpretor.hxx>
10#include <Draw_Appli.hxx>
11#include <DrawTrSurf.hxx>
12#include <TopoDS_Solid.hxx>
13#include <BRep_Builder.hxx>
14#include <BRepBuilderAPI.hxx>
15#include <BRepPrimAPI_MakeBox.hxx>
16#include <BRepPrimAPI_MakeWedge.hxx>
17#include <BRepPrimAPI_MakeCylinder.hxx>
18#include <BRepPrimAPI_MakeCone.hxx>
19#include <BRepPrimAPI_MakeSphere.hxx>
20#include <BRepPrimAPI_MakeTorus.hxx>
21#include <BRepPrimAPI_MakeSphere.hxx>
22#include <Geom_Plane.hxx>
23#include <gp_Pln.hxx>
24
25
26//=======================================================================
27// box
28//=======================================================================
29
30static Standard_Integer box(Draw_Interpretor& , Standard_Integer n, const char** a)
31{
32 if (n < 5) return 1;
33 Standard_Real dx = atof(a[n-3]);
34 Standard_Real dy = atof(a[n-2]);
35 Standard_Real dz = atof(a[n-1]);
36
37 TopoDS_Solid S;
38
39 if (n > 5) {
40 if (n < 8) return 1;
41 Standard_Real x = atof(a[2]);
42 Standard_Real y = atof(a[3]);
43 Standard_Real z = atof(a[4]);
44 S = BRepPrimAPI_MakeBox(gp_Pnt(x,y,z),dx,dy,dz);
45 }
46 else {
47 S = BRepPrimAPI_MakeBox(dx,dy,dz);
48 }
49
50 DBRep::Set(a[1],S);
51 return 0;
52}
53
54//=======================================================================
55// wedge
56//=======================================================================
57
58static Standard_Integer wedge(Draw_Interpretor& , Standard_Integer n, const char** a)
59{
60 TopoDS_Solid S;
61
62// Standard_Integer i = 0;
63 if ( n == 15 || n == 18) {
64 gp_Pnt LocalP(atof(a[2]),atof(a[3]),atof(a[4]));
65 gp_Dir LocalN(atof(a[5]),atof(a[6]),atof(a[7]));
66 gp_Dir LocalVx(atof(a[8]),atof(a[9]),atof(a[10]));
67 gp_Ax2 Axis(LocalP,LocalN,LocalVx);
68// gp_Ax2 Axis(gp_Pnt(atof(a[2]),atof(a[3]),atof(a[4])),
69// gp_Dir(atof(a[5]),atof(a[6]),atof(a[7])),
70// gp_Dir(atof(a[8]),atof(a[9]),atof(a[10])));
71 if ( n == 15) {
72 S = BRepPrimAPI_MakeWedge(Axis,
73 atof(a[11]),atof(a[12]),atof(a[13]),atof(a[14]));
74 }
75 else {
76 S = BRepPrimAPI_MakeWedge(Axis,
77 atof(a[11]),atof(a[12]),atof(a[13]),
78 atof(a[14]),atof(a[15]),atof(a[16]),atof(a[17]));
79 }
80 }
81 else if (n == 6) {
82 S = BRepPrimAPI_MakeWedge(atof(a[2]),atof(a[3]),atof(a[4]),atof(a[5]));
83 }
84 else if (n == 9){
85 S = BRepPrimAPI_MakeWedge(atof(a[2]),atof(a[3]),atof(a[4]),
86 atof(a[5]),atof(a[6]),atof(a[7]),atof(a[8]));
87 }
88 else
89 return 1;
90
91 DBRep::Set(a[1],S);
92 return 0;
93}
94
95//=======================================================================
96// cylinder
97//=======================================================================
98
99static Standard_Integer cylinder(Draw_Interpretor& , Standard_Integer n, const char** a)
100{
101 if (n < 3) return 1;
102 TopoDS_Solid S;
103 Handle(Geom_Plane) P =
104 Handle(Geom_Plane)::DownCast(DrawTrSurf::Get(a[2]));
105
106 if (n == 4) {
107 S = BRepPrimAPI_MakeCylinder(atof(a[2]),atof(a[3]));
108 }
109 else if (n == 5) {
110 if (P.IsNull())
111 S = BRepPrimAPI_MakeCylinder(atof(a[2]),atof(a[3]),atof(a[4]) * PI180);
112 else
113 S = BRepPrimAPI_MakeCylinder(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]));
114 }
115 else if (n == 6) {
116 if (P.IsNull())
117 return 1;
118 else
119 S = BRepPrimAPI_MakeCylinder(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]),atof(a[5]) * PI180);
120 }
121 else
122 return 1;
123
124 DBRep::Set(a[1],S);
125 return 0;
126}
127
128//=======================================================================
129// cone
130//=======================================================================
131
132static Standard_Integer cone(Draw_Interpretor& , Standard_Integer n, const char** a)
133{
134 if (n < 3) return 1;
135 TopoDS_Solid S;
136
137 Handle(Geom_Plane) P =
138 Handle(Geom_Plane)::DownCast(DrawTrSurf::Get(a[2]));
139
140 if (n == 5) {
141 S = BRepPrimAPI_MakeCone(atof(a[2]),atof(a[3]),atof(a[4]));
142 }
143 else if (n == 6) {
144 if (P.IsNull())
145 S = BRepPrimAPI_MakeCone(atof(a[2]),atof(a[3]),atof(a[4]),atof(a[5]) * PI180);
146 else
147 S = BRepPrimAPI_MakeCone(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]),atof(a[5]));
148 }
149 else if (n == 7) {
150 S = BRepPrimAPI_MakeCone(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]),atof(a[5]),atof(a[6]) * PI180);
151 }
152 else
153 return 1;
154
155 DBRep::Set(a[1],S);
156 return 0;
157}
158
159//=======================================================================
160// sphere
161//=======================================================================
162
163static Standard_Integer sphere(Draw_Interpretor& , Standard_Integer n, const char** a)
164{
165 if (n < 3) return 1;
166 TopoDS_Solid S;
167
168 Handle(Geom_Plane) P =
169 Handle(Geom_Plane)::DownCast(DrawTrSurf::Get(a[2]));
170
171 if (n == 3) {
172 S = BRepPrimAPI_MakeSphere(atof(a[2]));
173 }
174 else if (n == 4) {
175 if (P.IsNull())
176 S = BRepPrimAPI_MakeSphere(atof(a[2]),atof(a[3]) * PI180);
177 else
178 S = BRepPrimAPI_MakeSphere(P->Pln().Position().Ax2(),atof(a[3]));
179 }
180 else if (n == 5) {
181 if (P.IsNull())
182 S = BRepPrimAPI_MakeSphere(atof(a[2]),atof(a[3]) * PI180,atof(a[4]) * PI180);
183 else
184 S = BRepPrimAPI_MakeSphere(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]) * PI180);
185 }
186 else if (n == 6) {
187 if (P.IsNull())
188 S = BRepPrimAPI_MakeSphere(atof(a[2]),atof(a[3]) * PI180,atof(a[4]) * PI180,atof(a[5]) * PI180);
189 else
190 S = BRepPrimAPI_MakeSphere(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]) * PI180,atof(a[5]) * PI180);
191 }
192 else if (n == 7) {
193 S = BRepPrimAPI_MakeSphere(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]) * PI180,atof(a[5]) * PI180,atof(a[6]) * PI180);
194 }
195 else
196 return 1;
197
198 DBRep::Set(a[1],S);
199 return 0;
200}
201
202//=======================================================================
203// torus
204//=======================================================================
205
206static Standard_Integer torus(Draw_Interpretor& , Standard_Integer n, const char** a)
207{
208 if (n < 3) return 1;
209 TopoDS_Solid S;
210
211 Handle(Geom_Plane) P =
212 Handle(Geom_Plane)::DownCast(DrawTrSurf::Get(a[2]));
213
214 if (n == 4) {
215 S = BRepPrimAPI_MakeTorus(atof(a[2]),atof(a[3]));
216 }
217 else if (n == 5) {
218 if (P.IsNull())
219 S = BRepPrimAPI_MakeTorus(atof(a[2]),atof(a[3]),atof(a[4]) * PI180);
220 else
221 S = BRepPrimAPI_MakeTorus(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]));
222 }
223 else if (n == 6) {
224 if (P.IsNull())
225 S = BRepPrimAPI_MakeTorus(atof(a[2]),atof(a[3]),
226 atof(a[4]) * PI180,atof(a[5]) * PI180);
227 else
228 S = BRepPrimAPI_MakeTorus(P->Pln().Position().Ax2(),
229 atof(a[3]),atof(a[4]),atof(a[5]) * PI180);
230 }
231 else if (n == 7) {
232 if (P.IsNull())
233 S = BRepPrimAPI_MakeTorus(atof(a[2]),atof(a[3]),
234 atof(a[4]) * PI180,atof(a[5]) * PI180,atof(a[6]) * PI180);
235 else
236 S = BRepPrimAPI_MakeTorus(P->Pln().Position().Ax2(),atof(a[3]),
237 atof(a[4]),atof(a[5]) * PI180,atof(a[6]) * PI180);
238 }
239 else if (n == 8) {
240 S = BRepPrimAPI_MakeTorus(P->Pln().Position().Ax2(),atof(a[3]),atof(a[4]),
241 atof(a[5]) * PI180,atof(a[6]) * PI180,atof(a[7]) * PI180);
242 }
243 else
244 return 1;
245
246 DBRep::Set(a[1],S);
247 return 0;
248}
249
250
251
252//=======================================================================
253//function : PrimitiveCommands
254//purpose :
255//=======================================================================
256
257void BRepTest::PrimitiveCommands(Draw_Interpretor& theCommands)
258{
259 static Standard_Boolean done = Standard_False;
260 if (done) return;
261 done = Standard_True;
262
263 DBRep::BasicCommands(theCommands);
264
265 const char* g = "Primitive building commands";
266
267 theCommands.Add("box","box name [x1 y1 z1] dx dy dz",__FILE__,box,g);
268 theCommands.Add("wedge","wedge name [Ox Oy Oz Zx Zy Zz Xx Xy Xz] dx dy dz ltx / xmin zmin xmax zmax",__FILE__,wedge,g);
269
270 theCommands.Add("pcylinder","pcylinder name [plane(ax2)] R H [angle]",__FILE__,cylinder,g);
271 theCommands.Add("pcone", "pcone name [plane(ax2)] R1 R2 H [angle]",__FILE__,cone,g);
272 theCommands.Add("psphere", "psphere name [plane(ax2)] R [angle1 angle2] [angle]",__FILE__,sphere,g);
273 theCommands.Add("ptorus", "ptorus name [plane(ax2)] R1 R2 [angle1 angle2] [angle]",__FILE__,torus,g);
274}
275
276