0024023: Revamp the OCCT Handle -- general
[occt.git] / src / TestTopOpeDraw / TestTopOpeDraw_Displayer.cxx
1 // Created on: 1996-09-09
2 // Created by: Jean Yves LEBEY
3 // Copyright (c) 1996-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 #include <TestTopOpeDraw_Displayer.hxx>
18
19 #include <TestTopOpeDraw_DrawableSHA.hxx>
20 #include <TestTopOpeDraw_DrawableP3D.hxx>
21 #include <TestTopOpeDraw_DrawableP2D.hxx>
22 #include <TestTopOpeDraw_DrawableC3D.hxx>
23 #include <TestTopOpeDraw_DrawableC2D.hxx>
24 #include <TestTopOpeDraw_DrawableSUR.hxx>
25 #include <TestTopOpeDraw_TTOT.hxx>
26
27 #include <Precision.hxx>
28 #include <DBRep.hxx>
29 #include <Draw.hxx>
30 #include <Draw_Appli.hxx>
31 #include <DBRep.hxx>
32 #include <DBRep_DrawableShape.hxx>
33
34 #ifdef WNT
35 Standard_IMPORT Draw_Viewer dout;
36 #endif
37
38 //=======================================================================
39 //function : TestTopOpeDraw_Displayer
40 //purpose  : 
41 //=======================================================================
42
43 TestTopOpeDraw_Displayer::TestTopOpeDraw_Displayer()
44
45   InitDisplayer();
46 }
47
48 //=======================================================================
49 //function : TestTopOpeDraw_Displayer
50 //purpose  : 
51 //=======================================================================
52
53 TestTopOpeDraw_Displayer::TestTopOpeDraw_Displayer(const TCollection_AsciiString& namedbrep,const TopoDS_Shape& S)
54 {
55   InitDisplayer();
56   DisplayShape(namedbrep,S);
57 }
58
59 //=======================================================================
60 //function : TestTopOpeDraw_Displayer
61 //purpose  : 
62 //=======================================================================
63
64 TestTopOpeDraw_Displayer::TestTopOpeDraw_Displayer
65 (const TCollection_AsciiString& namedbrep,const TCollection_AsciiString& namedisp,const TopoDS_Shape& S)
66 {
67   InitDisplayer();
68   DisplayShape(namedbrep,namedisp,S);
69 }
70
71 //=======================================================================
72 //function : DisplayShape
73 //purpose  : 
74 //=======================================================================
75
76 void TestTopOpeDraw_Displayer::DisplayShape(const TCollection_AsciiString& namedbrep, const TopoDS_Shape& S)
77 {
78   if (S.IsNull()) return;
79   SetShape(namedbrep,S);
80   DisplayShapePrivate();
81 }
82
83 //=======================================================================
84 //function : DisplayShape
85 //purpose  : 
86 //=======================================================================
87
88 void TestTopOpeDraw_Displayer::DisplayShape
89 (const TCollection_AsciiString& namedbrep,const TCollection_AsciiString& namedisp,const TopoDS_Shape& S)
90 {
91   if (S.IsNull()) return;
92   SetShape(namedbrep,S);
93   myNameDisplay = namedisp;
94   DisplayShapePrivate();
95 }
96
97 //=======================================================================
98 //function : DisplayShapePrivate
99 //purpose  : 
100 //=======================================================================
101
102 void TestTopOpeDraw_Displayer::DisplayShapePrivate()
103 {
104   if (myShape.IsNull()) return; 
105   TopAbs_ShapeEnum t = myShape.ShapeType();
106
107   myNameDisplay.Prepend(" ");
108   if ( ! myNameColorIs ) myNameColor = TestTopOpeDraw_TTOT::ShapeColor(myShape);
109   
110   if (myDisplayNameWithOrientation) TestTopOpeDraw_TTOT::CatOrientation(myShape,myNameDisplay);
111   if (myDisplayNameWithGeometry) TestTopOpeDraw_TTOT::CatGeometry(myShape,myNameDisplay);
112   Draw_Color ConnCol = Draw_jaune;
113   if (t == TopAbs_VERTEX) ConnCol = myNameColor;
114   Draw_Color EdgeCol = Draw_rouge;
115   if (myColIs) {
116     ConnCol = EdgeCol = myCol;
117   }
118   Handle(TestTopOpeDraw_DrawableSHA) D;
119   Standard_Integer nbisos = mySnbisos;
120   Standard_Boolean nbisosdef = mySnbisosdef;
121   Standard_Integer discret = mySdiscret;
122   Standard_Boolean discretdef = mySdiscretdef;
123   Standard_CString csn = myNameDBRep.ToCString(); 
124   Handle(DBRep_DrawableShape) DBS = Handle(DBRep_DrawableShape)::DownCast(Draw::Get(csn));
125   if (!DBS.IsNull() && !nbisosdef) {
126     nbisos = DBS->NbIsos();
127   }
128   if (!DBS.IsNull() && !discretdef) {
129     discret = DBS->Discret();
130   }
131   D = new TestTopOpeDraw_DrawableSHA
132     (myShape,
133      Draw_vert,ConnCol,EdgeCol,Draw_bleu,//free,shared,other,isos
134      mySsize,nbisos,discret,
135      myNameDisplay.ToCString(),myNameColor,
136      myDisplayGeometry);
137   
138   if (myTol != 0.0 ) D->SetTol(myTol);
139   if (myPar != -1.0 ) D->SetPar(myPar);
140   
141   char* pname = (char *)myNameDBRep.ToCString();
142   Draw::Set(pname,Handle(DBRep_DrawableShape)::DownCast(D));
143 }
144
145 //=======================================================================
146 //function : InitDisplayer
147 //purpose  : 
148 //=======================================================================
149
150 void TestTopOpeDraw_Displayer::InitDisplayer()
151 {
152   myDisplayGeometry = Standard_False;
153   myDisplayNameWithGeometry = Standard_False;
154   myDisplayNameWithOrientation = Standard_False;
155
156   myShape.Nullify();
157   NameDBRep().Copy(""); 
158   NameDisplay().Copy("");
159
160   mySsize    = 100.;
161   mySnbisos  = DBRep::NbIsos();
162   mySnbisosdef = Standard_False;
163   mySdiscret = DBRep::Discretisation();
164   mySdiscretdef = Standard_False;
165   myTol = 0.0;
166   myTolIs = Standard_False;
167   myPar = -1.0;
168   myParIs = Standard_False;
169   myCol = Draw_blanc;
170   myColIs = Standard_False;
171   myNameColor = Draw_blanc;
172   myNameColorIs = Standard_False;
173 }
174
175 //=======================================================================
176 //function : SetShape
177 //purpose  : 
178 //=======================================================================
179
180 void TestTopOpeDraw_Displayer::SetShape(const TCollection_AsciiString& namedbrep,const TopoDS_Shape& S)
181 {
182   myShape = S;
183   myNameDBRep = namedbrep;
184   myNameDisplay = namedbrep;
185   if (myDisplayNameWithOrientation) TestTopOpeDraw_TTOT::CatOrientation(myShape,myNameDisplay);
186   if (myDisplayNameWithGeometry) TestTopOpeDraw_TTOT::CatGeometry(myShape,myNameDisplay);
187 }
188
189 //=======================================================================
190 //function : TestTopOpeDraw_P3DDisplayer
191 //purpose  : 
192 //=======================================================================
193
194 TestTopOpeDraw_P3DDisplayer::TestTopOpeDraw_P3DDisplayer()
195 {}
196
197 //=======================================================================
198 //function : TestTopOpeDraw_P3DDisplayer
199 //purpose  : 
200 //=======================================================================
201
202 TestTopOpeDraw_P3DDisplayer::TestTopOpeDraw_P3DDisplayer(const TCollection_AsciiString& namedbrep, const gp_Pnt& P)
203 {
204   DisplayP3D(namedbrep,P);
205 }
206
207 //=======================================================================
208 //function : TestTopOpeDraw_P3DDisplayer
209 //purpose  : 
210 //=======================================================================
211
212 TestTopOpeDraw_P3DDisplayer::TestTopOpeDraw_P3DDisplayer
213 (const TCollection_AsciiString& namedbrep,const Standard_Real x, const Standard_Real y, const Standard_Real z)
214 {
215   DisplayP3D(namedbrep,x,y,z);
216 }
217
218 //=======================================================================
219 //function : DisplayP3D
220 //purpose  : 
221 //=======================================================================
222
223 void TestTopOpeDraw_P3DDisplayer::DisplayP3D
224 (const TCollection_AsciiString& namedbrep,const Standard_Real x, const Standard_Real y, const Standard_Real z)
225 {
226   gp_Pnt P(x,y,z);
227   DisplayP3D(namedbrep,P);
228 }
229
230 //=======================================================================
231 //function : DisplayP3D
232 //purpose  : 
233 //=======================================================================
234
235 void TestTopOpeDraw_P3DDisplayer::DisplayP3D
236 (const TCollection_AsciiString& namedbrep,const gp_Pnt& P)
237 {
238   TCollection_AsciiString namedisp(" "); namedisp += namedbrep;
239   Handle(TestTopOpeDraw_DrawableP3D) D = 
240     new TestTopOpeDraw_DrawableP3D(P,Draw_Square,
241                                    Draw_Color(Draw_rouge),
242                                    namedisp.ToCString(),
243                                    Draw_Color(Draw_cyan),1);
244   char* pname = (char *)namedbrep.ToCString();
245   Draw::Set(pname,D);
246   dout<<D;
247 }
248
249 //=======================================================================
250 //function : TestTopOpeDraw_P2DDisplayer
251 //purpose  : 
252 //=======================================================================
253
254 TestTopOpeDraw_P2DDisplayer::TestTopOpeDraw_P2DDisplayer()
255 {
256   SetColor(Draw_Color(Draw_rouge));
257   SetNameColor(Draw_Color(Draw_cyan));
258 }
259
260 //=======================================================================
261 //function : TestTopOpeDraw_P2DDisplayer
262 //purpose  : 
263 //=======================================================================
264
265 TestTopOpeDraw_P2DDisplayer::TestTopOpeDraw_P2DDisplayer
266 (const TCollection_AsciiString& namedbrep, const gp_Pnt2d& P)
267 {
268   DisplayP2D(namedbrep,P);
269 }
270
271 //=======================================================================
272 //function : TestTopOpeDraw_P2DDisplayer
273 //purpose  : 
274 //=======================================================================
275
276 TestTopOpeDraw_P2DDisplayer::TestTopOpeDraw_P2DDisplayer
277 (const TCollection_AsciiString& namedbrep,const Standard_Real x, const Standard_Real y)
278 {
279   DisplayP2D(namedbrep,x,y);
280 }
281
282 //=======================================================================
283 //function : DisplayP2D
284 //purpose  : 
285 //=======================================================================
286
287 void TestTopOpeDraw_P2DDisplayer::DisplayP2D
288 (const TCollection_AsciiString& namedbrep,const Standard_Real x, const Standard_Real y)
289 {
290   gp_Pnt2d P(x,y);
291   DisplayP2D(namedbrep,P);
292 }
293
294 //=======================================================================
295 //function : DisplayP2D
296 //purpose  : 
297 //=======================================================================
298
299 void TestTopOpeDraw_P2DDisplayer::DisplayP2D
300 (const TCollection_AsciiString& namedbrep,const gp_Pnt2d& P)
301 {
302   TCollection_AsciiString namedisp(" "); namedisp += namedbrep;
303   Handle(TestTopOpeDraw_DrawableP2D) D;
304   D = new TestTopOpeDraw_DrawableP2D(P,
305                                      Draw_Square,myCol,
306                                      namedisp.ToCString(),myNameColor,
307                                      1);
308   char* pname = (char *)namedbrep.ToCString();
309   Draw::Set(pname,D);
310   dout<<D;
311 }
312
313 //=======================================================================
314 //function : TestTopOpeDraw_C3DDisplayer
315 //purpose  : 
316 //=======================================================================
317
318 TestTopOpeDraw_C3DDisplayer::TestTopOpeDraw_C3DDisplayer()
319 {
320   InitC3DDisplayer();
321 }
322
323 //=======================================================================
324 //function : TestTopOpeDraw_C3DDisplayer
325 //purpose  : 
326 //=======================================================================
327
328 TestTopOpeDraw_C3DDisplayer::TestTopOpeDraw_C3DDisplayer(const Handle(Geom_Curve)& C)
329 {
330   InitC3DDisplayer();
331   DisplayC3D(C);
332 }
333
334 //=======================================================================
335 //function : InitC3DDisplayer
336 //purpose  : 
337 //=======================================================================
338
339 void TestTopOpeDraw_C3DDisplayer::InitC3DDisplayer()
340 {
341   myCDdiscret = 16;
342   myCDdeflect = 0.01;
343   myCDdrawmod = 1;
344   myCDdisplayorigin = Standard_True;
345 }
346
347 //=======================================================================
348 //function : DisplayC3D
349 //purpose  : 
350 //=======================================================================
351
352 void TestTopOpeDraw_C3DDisplayer::DisplayC3D(const Handle(Geom_Curve)& C)
353 {
354   if (C.IsNull()) return;
355   Draw_ColorKind col = TestTopOpeDraw_TTOT::GeometryColor(TopOpeBRepDS_CURVE);
356   Handle(TestTopOpeDraw_DrawableC3D) D;
357   D = new TestTopOpeDraw_DrawableC3D
358     (C,col,
359      "",col,
360      myCDdiscret,myCDdeflect,myCDdrawmod,myCDdisplayorigin);
361   dout<<D;
362 }
363
364 //=======================================================================
365 //function : TestTopOpeDraw_C2DDisplayer
366 //purpose  : 
367 //=======================================================================
368
369 TestTopOpeDraw_C2DDisplayer::TestTopOpeDraw_C2DDisplayer()
370 {
371   InitC2DDisplayer();
372 }
373
374 //=======================================================================
375 //function : TestTopOpeDraw_C2DDisplayer
376 //purpose  : 
377 //=======================================================================
378
379 TestTopOpeDraw_C2DDisplayer::TestTopOpeDraw_C2DDisplayer
380 (const Handle(Geom2d_Curve)& C)
381 {
382   InitC2DDisplayer();
383   DisplayC2D(C);
384 }
385
386 //=======================================================================
387 //function : InitC2DDisplayer
388 //purpose  : 
389 //=======================================================================
390
391 void TestTopOpeDraw_C2DDisplayer::InitC2DDisplayer()
392 {
393   myC2Ddiscret = 16;
394   myC2Ddisplayorigin = Standard_True;
395   myC2Ddisplaycurvradius = Standard_False;
396   myC2Dradiusmax = 1.e3;
397   myC2Dradiusratio = 0.1;
398   Draw_ColorKind col = TestTopOpeDraw_TTOT::GeometryColor(TopOpeBRepDS_CURVE);
399   SetColor(Draw_Color(col));
400   SetNameColor(Draw_Color(col));
401 }
402
403 //=======================================================================
404 //function : DisplayC2D
405 //purpose  : 
406 //=======================================================================
407
408 void TestTopOpeDraw_C2DDisplayer::DisplayC2D(const Handle(Geom2d_Curve)& C)
409 {
410   if (C.IsNull()) return;
411   Handle(TestTopOpeDraw_DrawableC2D) D = new TestTopOpeDraw_DrawableC2D
412     (C,myCol,"",myNameColor,
413      myC2Ddiscret,myC2Ddisplayorigin,
414      myC2Ddisplaycurvradius,myC2Dradiusmax,myC2Dradiusratio);
415   dout<<D;
416 }
417
418 //=======================================================================
419 //function : DisplayC2D
420 //purpose  : 
421 //=======================================================================
422
423 void TestTopOpeDraw_C2DDisplayer::DisplayC2D
424 (const TCollection_AsciiString& namedbrep,const TCollection_AsciiString& namedisp,const Handle(Geom2d_Curve)& C)
425 {
426   Handle(TestTopOpeDraw_DrawableC2D) D = new TestTopOpeDraw_DrawableC2D
427     (C,myCol,namedisp.ToCString(),myNameColor,
428      myC2Ddiscret,myC2Ddisplayorigin,
429      myC2Ddisplaycurvradius,myC2Dradiusmax,myC2Dradiusratio);
430   char* pname = (char *)namedbrep.ToCString();
431   Draw::Set(pname,D);
432 }
433
434 //=======================================================================
435 //function : TestTopOpeDraw_SurfaceDisplayer
436 //purpose  : 
437 //=======================================================================
438
439 TestTopOpeDraw_SurfaceDisplayer::TestTopOpeDraw_SurfaceDisplayer()
440 {
441   InitSurfaceDisplayer();
442 }
443
444 //=======================================================================
445 //function : TestTopOpeDraw_SurfaceDisplayer
446 //purpose  : 
447 //=======================================================================
448
449 TestTopOpeDraw_SurfaceDisplayer::TestTopOpeDraw_SurfaceDisplayer
450 (const Handle(Geom_Surface)& S)
451 {
452   InitSurfaceDisplayer();
453   DisplaySurface(S);
454 }
455
456 //=======================================================================
457 //function : InitDisplayer
458 //purpose  : 
459 //=======================================================================
460
461 void TestTopOpeDraw_SurfaceDisplayer::InitSurfaceDisplayer()
462 {
463   mySDBoundColor = Draw_vert;
464   mySDIsoColor = Draw_bleu;
465   mySDNormalColor = Draw_blanc;
466   mySDnu = 0;
467   mySDnv = 0;
468   mySDdiscret = 16;
469   mySDdeflect = 0.01;
470   mySDdrawmod = 1;
471   mySDdisplayorigin = Standard_True;
472 }
473
474 //=======================================================================
475 //function : DisplaySurface
476 //purpose  : 
477 //=======================================================================
478
479 void TestTopOpeDraw_SurfaceDisplayer::DisplaySurface(const Handle(Geom_Surface)& S)
480 {
481   if (S.IsNull()) return;
482   Handle(TestTopOpeDraw_DrawableSUR) D;
483   D = new TestTopOpeDraw_DrawableSUR
484     (S,mySDIsoColor,mySDBoundColor,mySDNormalColor,
485      "",myNameColor,
486      mySDnu,mySDnv,mySDdiscret,mySDdeflect,mySDdrawmod,mySDdisplayorigin);
487   dout<<D;
488 }