0023634: Eliminate Polyline and Polygon usage in drawers
[occt.git] / src / Prs3d / Prs3d_Drawer.cxx
1 // Copyright (c) 1995-1999 Matra Datavision
2 // Copyright (c) 1999-2012 OPEN CASCADE SAS
3 //
4 // The content of this file is subject to the Open CASCADE Technology Public
5 // License Version 6.5 (the "License"). You may not use the content of this file
6 // except in compliance with the License. Please obtain a copy of the License
7 // at http://www.opencascade.org and read it completely before using this file.
8 //
9 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
10 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11 //
12 // The Original Code and all software distributed under the License is
13 // distributed on an "AS IS" basis, without warranty of any kind, and the
14 // Initial Developer hereby disclaims all such warranties, including without
15 // limitation, any warranties of merchantability, fitness for a particular
16 // purpose or non-infringement. Please see the License for the specific terms
17 // and conditions governing the rights and limitations under the License.
18
19 #define BUC60488        //GG_10/10/99   Set correctly all fields
20
21 #include <Prs3d_Drawer.ixx>
22
23 Prs3d_Drawer::Prs3d_Drawer(): myNbPoints(30),myIsoOnPlane(Standard_False),
24  myFreeBoundaryDraw(Standard_True),
25  myUnFreeBoundaryDraw(Standard_True),
26  myWireDraw(Standard_True),
27 #ifdef BUC60488
28  myShadingAspect( new Prs3d_ShadingAspect()),
29 #endif
30  myShadingAspectGlobal(Standard_True),
31  myChordialDeviation(0.0001),
32  myTypeOfDeflection(Aspect_TOD_RELATIVE),
33  myMaximalParameterValue(500000.),
34  myDeviationCoefficient(0.001),
35  myHLRDeviationCoefficient(0.02),
36  myDeviationAngle(12*M_PI/180),
37  myHLRAngle(20*M_PI/180),
38  myLineDrawArrow(Standard_False),
39  myDrawHiddenLine(Standard_False),
40  myFaceBoundaryDraw(Standard_False)
41 {
42
43
44 void Prs3d_Drawer::SetTypeOfDeflection(const Aspect_TypeOfDeflection aTypeOfDeflection){
45
46   myTypeOfDeflection = aTypeOfDeflection;}
47
48 Aspect_TypeOfDeflection Prs3d_Drawer::TypeOfDeflection() const {
49
50   return myTypeOfDeflection;
51
52 }
53
54  
55 void Prs3d_Drawer::SetIsoOnPlane(const Standard_Boolean OnOff)
56 {
57   myIsoOnPlane = OnOff;
58 }
59
60  
61 Standard_Boolean Prs3d_Drawer::IsoOnPlane()const
62 {
63   return myIsoOnPlane;
64 }
65
66
67 Standard_Integer Prs3d_Drawer::Discretisation() const
68 {
69   return myNbPoints;
70 }
71
72
73 void Prs3d_Drawer::SetDiscretisation(const Standard_Integer d) 
74 {
75   myNbPoints = d;
76 }
77
78
79 void Prs3d_Drawer::SetMaximalChordialDeviation(
80                                const Quantity_Length aChordialDeviation) {
81   myChordialDeviation = aChordialDeviation;
82 }
83
84 Quantity_Length Prs3d_Drawer::MaximalChordialDeviation() const {
85   return myChordialDeviation;
86 }
87
88 //
89 //=======================================================================
90 //function : SetDeviationCoefficient
91 //purpose  : 
92 //=======================================================================
93
94 void Prs3d_Drawer::SetDeviationCoefficient (const Standard_Real aCoefficient) {
95
96   myDeviationCoefficient = aCoefficient;
97 }
98
99 //=======================================================================
100 //function : DeviationCoefficient
101 //purpose  : 
102 //=======================================================================
103
104 Standard_Real Prs3d_Drawer::DeviationCoefficient () const {
105
106   return myDeviationCoefficient;
107 }
108
109 //=======================================================================
110 //function : SetHLRDeviationCoefficient
111 //purpose  : 
112 //=======================================================================
113
114 void Prs3d_Drawer::SetHLRDeviationCoefficient (const Standard_Real aCoefficient) {
115
116   myHLRDeviationCoefficient = aCoefficient;
117 }
118
119 //=======================================================================
120 //function : HLRDeviationCoefficient
121 //purpose  : 
122 //=======================================================================
123
124 Standard_Real Prs3d_Drawer::HLRDeviationCoefficient () const {
125
126   return myHLRDeviationCoefficient;
127 }
128
129 //=======================================================================
130 //function : SetHLRAngle
131 //purpose  : 
132 //=======================================================================
133
134 void Prs3d_Drawer::SetHLRAngle (const Standard_Real anAngle) {
135
136   myHLRAngle = anAngle;
137 }
138
139 //=======================================================================
140 //function : HLRAngle
141 //purpose  : 
142 //=======================================================================
143
144 Standard_Real Prs3d_Drawer::HLRAngle () const {
145
146   return myHLRAngle;
147 }
148
149 //=======================================================================
150 //function : SetDeviationAngle
151 //purpose  : 
152 //=======================================================================
153
154 void Prs3d_Drawer::SetDeviationAngle (const Standard_Real anAngle)
155 {
156   myDeviationAngle = anAngle;
157 }
158
159 //=======================================================================
160 //function : DeviationAngle
161 //purpose  : 
162 //=======================================================================
163
164 Standard_Real Prs3d_Drawer::DeviationAngle () const 
165 {
166   return myDeviationAngle;
167 }
168
169
170 void Prs3d_Drawer::SetMaximalParameterValue (const Standard_Real Value) {
171   myMaximalParameterValue = Value;
172 }
173
174 Standard_Real Prs3d_Drawer::MaximalParameterValue () const {
175   return myMaximalParameterValue;
176 }
177
178 Handle (Prs3d_IsoAspect) Prs3d_Drawer::UIsoAspect (){
179
180   if (myUIsoAspect.IsNull()) 
181     myUIsoAspect = new Prs3d_IsoAspect
182                    (Quantity_NOC_GRAY75,Aspect_TOL_SOLID,0.5,1);
183
184   return myUIsoAspect;
185 }
186
187 void Prs3d_Drawer::SetUIsoAspect ( const Handle(Prs3d_IsoAspect)& anAspect) {
188  myUIsoAspect = anAspect;
189 }
190
191 Handle (Prs3d_IsoAspect) Prs3d_Drawer::VIsoAspect () {
192   if (myVIsoAspect.IsNull()) 
193     myVIsoAspect = new Prs3d_IsoAspect
194       (Quantity_NOC_GRAY75,Aspect_TOL_SOLID,0.5,1);
195       
196   return myVIsoAspect;
197 }
198
199 void Prs3d_Drawer::SetVIsoAspect ( const Handle(Prs3d_IsoAspect)& anAspect) {
200  myVIsoAspect = anAspect;
201 }
202
203 Handle (Prs3d_LineAspect) Prs3d_Drawer::FreeBoundaryAspect () {
204   if (myFreeBoundaryAspect.IsNull())
205     myFreeBoundaryAspect = new Prs3d_LineAspect
206       (Quantity_NOC_GREEN,Aspect_TOL_SOLID,1.);
207
208   return myFreeBoundaryAspect;
209 }
210
211 void Prs3d_Drawer::SetFreeBoundaryAspect (const Handle(Prs3d_LineAspect)& anAspect) {
212  myFreeBoundaryAspect = anAspect;
213 }
214
215 void Prs3d_Drawer::SetFreeBoundaryDraw ( const Standard_Boolean OnOff ) {
216   myFreeBoundaryDraw = OnOff;
217 }
218
219 Standard_Boolean Prs3d_Drawer::FreeBoundaryDraw () const {
220 return myFreeBoundaryDraw;
221 }
222
223 Handle (Prs3d_LineAspect) Prs3d_Drawer::UnFreeBoundaryAspect (){
224   if  (myUnFreeBoundaryAspect.IsNull())
225     myUnFreeBoundaryAspect = new Prs3d_LineAspect
226       (Quantity_NOC_YELLOW,Aspect_TOL_SOLID,1.);
227   return myUnFreeBoundaryAspect;
228 }
229
230 void Prs3d_Drawer::SetUnFreeBoundaryAspect ( const Handle(Prs3d_LineAspect)& anAspect) {
231  myUnFreeBoundaryAspect = anAspect;
232 }
233
234 void Prs3d_Drawer::SetUnFreeBoundaryDraw ( const Standard_Boolean OnOff ) {
235   myUnFreeBoundaryDraw = OnOff;
236 }
237
238 Standard_Boolean Prs3d_Drawer::UnFreeBoundaryDraw () const {
239   return myUnFreeBoundaryDraw;
240 }
241
242 Handle (Prs3d_LineAspect) Prs3d_Drawer::WireAspect ()  {
243   if (myWireAspect.IsNull())
244    myWireAspect = new Prs3d_LineAspect(Quantity_NOC_RED,Aspect_TOL_SOLID,1.);
245
246   return myWireAspect;
247 }
248
249 void Prs3d_Drawer::SetWireAspect ( const Handle(Prs3d_LineAspect)& anAspect) {
250  myWireAspect = anAspect;
251 }
252 void Prs3d_Drawer::SetWireDraw ( const Standard_Boolean OnOff ) {
253   myWireDraw = OnOff;
254 }
255
256 Standard_Boolean Prs3d_Drawer::WireDraw () const {
257 return myWireDraw;
258 }
259
260
261 Handle (Prs3d_LineAspect) Prs3d_Drawer::LineAspect ()  {
262   if (myLineAspect.IsNull())
263     myLineAspect = new Prs3d_LineAspect
264       (Quantity_NOC_YELLOW,Aspect_TOL_SOLID,1.);
265   return myLineAspect;
266 }
267
268 void Prs3d_Drawer::SetLineAspect ( const Handle(Prs3d_LineAspect)& anAspect) {
269  myLineAspect = anAspect;
270 }
271
272 Handle (Prs3d_TextAspect) Prs3d_Drawer::TextAspect ()  {
273   if (myTextAspect.IsNull())
274     myTextAspect = new Prs3d_TextAspect();
275
276   return myTextAspect;
277 }
278
279 void Prs3d_Drawer::SetTextAspect ( const Handle(Prs3d_TextAspect)& anAspect) {
280  myTextAspect = anAspect;
281 }
282
283 Handle (Prs3d_ShadingAspect) Prs3d_Drawer::ShadingAspect ()  {
284   if (myShadingAspect.IsNull())
285   myShadingAspect = new Prs3d_ShadingAspect();
286
287   return myShadingAspect;
288 }
289
290 void Prs3d_Drawer::SetShadingAspect ( const Handle(Prs3d_ShadingAspect)& anAspect) {
291  myShadingAspect = anAspect;
292 }
293
294 void Prs3d_Drawer::SetShadingAspectGlobal(const Standard_Boolean aValue) {
295  myShadingAspectGlobal = aValue;
296 }
297
298 Standard_Boolean Prs3d_Drawer::ShadingAspectGlobal() const { 
299  
300  return myShadingAspectGlobal;
301
302 }
303  
304 void Prs3d_Drawer::SetLineArrowDraw ( const Standard_Boolean OnOff ) {
305   myLineDrawArrow = OnOff;
306 }
307
308 Standard_Boolean Prs3d_Drawer::LineArrowDraw () const {
309 return myLineDrawArrow;
310 }
311
312 Handle (Prs3d_ArrowAspect) Prs3d_Drawer::ArrowAspect() {
313   if (myArrowAspect.IsNull())
314     myArrowAspect = new Prs3d_ArrowAspect;
315
316   return myArrowAspect;
317 }
318
319 void Prs3d_Drawer::SetArrowAspect ( const Handle(Prs3d_ArrowAspect)& anAspect) {
320  myArrowAspect = anAspect;
321 }
322
323 Handle (Prs3d_PointAspect) Prs3d_Drawer::PointAspect() {
324   if (myPointAspect.IsNull())
325     myPointAspect = new Prs3d_PointAspect 
326       (Aspect_TOM_PLUS,Quantity_NOC_YELLOW,1.);
327
328   return myPointAspect;
329 }
330
331 void Prs3d_Drawer::SetPointAspect ( const Handle(Prs3d_PointAspect)& anAspect) {
332  myPointAspect = anAspect;
333 }
334
335 Standard_Boolean Prs3d_Drawer::DrawHiddenLine () const {return myDrawHiddenLine;}
336
337 void Prs3d_Drawer::EnableDrawHiddenLine () {myDrawHiddenLine=Standard_True;}
338
339 void Prs3d_Drawer::DisableDrawHiddenLine () {myDrawHiddenLine=Standard_False;}
340
341 Handle (Prs3d_LineAspect) Prs3d_Drawer::HiddenLineAspect ()  {
342  if (myHiddenLineAspect.IsNull())
343    myHiddenLineAspect = new Prs3d_LineAspect
344      (Quantity_NOC_YELLOW,Aspect_TOL_DASH,0.5);
345
346   return myHiddenLineAspect;
347 }
348
349 void Prs3d_Drawer::SetHiddenLineAspect ( const Handle(Prs3d_LineAspect)& anAspect) {
350  myHiddenLineAspect = anAspect;
351 }
352
353 Handle (Prs3d_LineAspect) Prs3d_Drawer::SeenLineAspect ()  {
354   if (mySeenLineAspect.IsNull())
355     mySeenLineAspect = new Prs3d_LineAspect
356       (Quantity_NOC_YELLOW,Aspect_TOL_SOLID,1.);
357
358   return mySeenLineAspect;
359 }
360
361 void Prs3d_Drawer::SetSeenLineAspect ( const Handle(Prs3d_LineAspect)& anAspect) {
362  mySeenLineAspect = anAspect;
363 }
364
365 Handle (Prs3d_LineAspect) Prs3d_Drawer::VectorAspect ()  {
366   if (myVectorAspect.IsNull())
367     myVectorAspect = new Prs3d_LineAspect
368       (Quantity_NOC_SKYBLUE,Aspect_TOL_SOLID,1.);
369
370   return myVectorAspect;
371 }
372
373 void Prs3d_Drawer::SetVectorAspect ( const Handle(Prs3d_LineAspect)& anAspect) {
374  myVectorAspect = anAspect;
375 }
376
377 Handle (Prs3d_DatumAspect) Prs3d_Drawer::DatumAspect () {
378   if (myDatumAspect.IsNull())
379     myDatumAspect = new Prs3d_DatumAspect;
380
381   return myDatumAspect;
382 }
383
384 void Prs3d_Drawer::SetDatumAspect ( const Handle(Prs3d_DatumAspect)& anAspect) {
385  myDatumAspect = anAspect;
386 }
387
388 Handle (Prs3d_PlaneAspect) Prs3d_Drawer::PlaneAspect () {
389   if (myPlaneAspect.IsNull())
390     myPlaneAspect = new Prs3d_PlaneAspect;
391
392   return myPlaneAspect;
393 }
394
395 void Prs3d_Drawer::SetPlaneAspect ( const Handle(Prs3d_PlaneAspect)& anAspect) {
396   myPlaneAspect = anAspect;
397 }
398
399 Handle (Prs3d_LengthAspect) Prs3d_Drawer::LengthAspect ()  {
400   if (myLengthAspect.IsNull())
401     myLengthAspect = new Prs3d_LengthAspect;
402
403   return myLengthAspect;
404 }
405
406 void Prs3d_Drawer::SetLengthAspect ( const Handle(Prs3d_LengthAspect)& anAspect) {
407  myLengthAspect = anAspect;
408 }
409
410
411
412 Handle (Prs3d_AngleAspect) Prs3d_Drawer::AngleAspect ()  {
413   if (myAngleAspect.IsNull())
414     myAngleAspect = new Prs3d_AngleAspect;
415
416   return myAngleAspect;
417 }
418
419 void Prs3d_Drawer::SetAngleAspect ( const Handle(Prs3d_AngleAspect)& anAspect) {
420  myAngleAspect = anAspect;
421 }
422
423 Handle (Prs3d_RadiusAspect) Prs3d_Drawer::RadiusAspect () const {
424   return myRadiusAspect;
425 }
426
427 void Prs3d_Drawer::SetRadiusAspect ( const Handle(Prs3d_RadiusAspect)& anAspect) {
428  myRadiusAspect = anAspect;
429 }
430
431 Handle (Prs3d_LineAspect) Prs3d_Drawer::SectionAspect ()  {
432   if (mySectionAspect.IsNull())
433     mySectionAspect = new Prs3d_LineAspect
434       (Quantity_NOC_ORANGE,Aspect_TOL_SOLID,1.);
435
436   return mySectionAspect;
437 }
438
439 void Prs3d_Drawer::SetSectionAspect ( const Handle(Prs3d_LineAspect)& anAspect) {
440  mySectionAspect = anAspect;
441 }
442
443 // =======================================================================
444 // function : SetFaceBoundaryDraw
445 // purpose  :
446 // =======================================================================
447 void Prs3d_Drawer::SetFaceBoundaryDraw (const Standard_Boolean theIsEnabled)
448 {
449   myFaceBoundaryDraw = theIsEnabled;
450 }
451
452 // =======================================================================
453 // function : IsFaceBoundaryDraw
454 // purpose  :
455 // =======================================================================
456 Standard_Boolean Prs3d_Drawer::IsFaceBoundaryDraw () const
457 {
458   return myFaceBoundaryDraw;
459 }
460
461 // =======================================================================
462 // function : SetFaceBoundaryAspect
463 // purpose  :
464 // =======================================================================
465 void Prs3d_Drawer::SetFaceBoundaryAspect (const Handle(Prs3d_LineAspect)& theAspect)
466 {
467   myFaceBoundaryAspect = theAspect;
468 }
469
470 // =======================================================================
471 // function : FaceBoundaryAspect
472 // purpose  :
473 // =======================================================================
474 Handle_Prs3d_LineAspect Prs3d_Drawer::FaceBoundaryAspect ()
475 {
476   if (myFaceBoundaryAspect.IsNull ())
477   {
478     myFaceBoundaryAspect = 
479       new Prs3d_LineAspect (Quantity_NOC_BLACK, Aspect_TOL_SOLID, 1.0);
480   }
481
482   return myFaceBoundaryAspect;
483 }