c3d6cc227cae9c750b5564ee64eeb3f60e7e8d8d
[occt.git] / src / AIS / AIS_Drawer.cxx
1 // Copyright (c) 1998-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 #include <AIS_Drawer.ixx>
20 #include <Standard_ProgramError.hxx>
21
22 AIS_Drawer::AIS_Drawer(): 
23 myLink(new Prs3d_Drawer()),
24 hasLocalAttributes(Standard_False),
25 myhasOwnDeviationCoefficient(Standard_False),
26 myPreviousDeviationCoefficient(0.1),
27 myhasOwnHLRDeviationCoefficient (Standard_False),
28 myhasOwnDeviationAngle (Standard_False),
29 myhasOwnHLRDeviationAngle (Standard_False),
30 myHasOwnFaceBoundaryDraw (Standard_False)
31 {
32   SetMaximalParameterValue(500000.);
33   myLink->SetMaximalParameterValue(500000.);
34
35
36
37 Aspect_TypeOfDeflection AIS_Drawer::TypeOfDeflection () const 
38 {
39   return myLink->TypeOfDeflection();
40 }
41
42 Standard_Boolean AIS_Drawer::IsoOnPlane() const 
43 {
44     return myLink->IsoOnPlane();
45 }
46
47 Standard_Integer AIS_Drawer::Discretisation() const 
48 {
49   return myLink->Discretisation();
50 }
51
52 Quantity_Length AIS_Drawer::MaximalChordialDeviation() const 
53 {
54   return myLink->MaximalChordialDeviation();
55 }
56
57
58 //=======================================================================
59 //function : SetDeviationCoefficient
60 //purpose  : 
61 //=======================================================================
62
63 void AIS_Drawer::SetDeviationCoefficient ( const Standard_Real  aCoefficient )
64 {
65   myPreviousDeviationCoefficient = DeviationCoefficient() ;
66   myOwnDeviationCoefficient     = aCoefficient ;
67   myhasOwnDeviationCoefficient    = Standard_True; 
68 }
69
70
71 //=======================================================================
72 //function : SetHLRDeviationCoefficient
73 //purpose  : 
74 //=======================================================================
75
76 void AIS_Drawer::SetHLRDeviationCoefficient ( const Standard_Real  aCoefficient ) 
77 {
78   myPreviousHLRDeviationCoefficient = HLRDeviationCoefficient() ;
79   myOwnHLRDeviationCoefficient     = aCoefficient ;
80   myhasOwnHLRDeviationCoefficient    = Standard_True; 
81 }
82
83 //=======================================================================
84 //function : SetDeviationAngle
85 //purpose  : 
86 //=======================================================================
87
88 void AIS_Drawer::SetDeviationAngle ( const Standard_Real anAngle ) 
89 {
90   myPreviousDeviationAngle = DeviationAngle() ;
91   myOwnDeviationAngle     = anAngle ;
92   myhasOwnDeviationAngle    = Standard_True;   
93 }
94
95 //=======================================================================
96 //function : SetHLRAngle
97 //purpose  : 
98 //=======================================================================
99
100 void AIS_Drawer::SetHLRAngle ( const Standard_Real anAngle ) 
101 {
102   myPreviousHLRDeviationAngle = HLRAngle() ;
103   myOwnHLRDeviationAngle     = anAngle ;
104   myhasOwnHLRDeviationAngle    = Standard_True;   
105 }
106
107
108 /////// Get
109 //=======================================================================
110 //function : DeviationCoefficient
111 //purpose  : 
112 //=======================================================================
113
114 Standard_Real AIS_Drawer::DeviationCoefficient ()  const 
115 {
116   return myhasOwnDeviationCoefficient? myOwnDeviationCoefficient :myLink->DeviationCoefficient();
117 }
118
119 //=======================================================================
120 //function : HLRDeviationCoefficient
121 //purpose  : 
122 //=======================================================================
123
124 Standard_Real AIS_Drawer::HLRDeviationCoefficient ()  const 
125 {
126   return myhasOwnHLRDeviationCoefficient?myOwnHLRDeviationCoefficient : myLink->HLRDeviationCoefficient() ;
127 }
128
129 //=======================================================================
130 //function : DeviationAngle
131 //purpose  : 
132 //=======================================================================
133
134 Standard_Real AIS_Drawer::DeviationAngle ()  const 
135 {
136   return myhasOwnDeviationAngle ? myOwnDeviationAngle :  myLink->DeviationAngle();
137 }
138
139 //=======================================================================
140 //function : HLRAngle
141 //purpose  : 
142 //=======================================================================
143
144 Standard_Real AIS_Drawer::HLRAngle ()  const 
145 {
146   
147   return myhasOwnHLRDeviationAngle ?  myOwnHLRDeviationAngle : myLink->HLRAngle();
148 }
149
150 Standard_Real AIS_Drawer::MaximalParameterValue () const 
151 { return myLink->MaximalParameterValue();}
152
153 Handle (Prs3d_IsoAspect) AIS_Drawer::UIsoAspect ()  
154 { return myUIsoAspect.IsNull() ? myLink->UIsoAspect (): myUIsoAspect;}
155
156 Handle (Prs3d_IsoAspect) AIS_Drawer::VIsoAspect () 
157 { return myVIsoAspect.IsNull() ? myLink->VIsoAspect (): myVIsoAspect;}
158
159 Handle (Prs3d_LineAspect) AIS_Drawer::FreeBoundaryAspect () 
160 {return myFreeBoundaryAspect.IsNull() ? myLink->FreeBoundaryAspect (): myFreeBoundaryAspect;}
161
162 Standard_Boolean AIS_Drawer::FreeBoundaryDraw () const 
163 {return myLink->FreeBoundaryDraw();}
164
165 Handle (Prs3d_LineAspect) AIS_Drawer::UnFreeBoundaryAspect ()  
166 {return myUnFreeBoundaryAspect.IsNull() ? myLink->UnFreeBoundaryAspect (): myUnFreeBoundaryAspect;}
167
168 Standard_Boolean AIS_Drawer::UnFreeBoundaryDraw ()  const  
169 {return myLink->UnFreeBoundaryDraw ();}
170
171 Handle (Prs3d_LineAspect) AIS_Drawer::WireAspect ()
172 {  return myWireAspect.IsNull()? myLink->WireAspect (): myWireAspect;}
173
174 Standard_Boolean AIS_Drawer::WireDraw ()  const 
175 { return myLink->WireDraw();}
176
177 Handle (Prs3d_LineAspect) AIS_Drawer::LineAspect ()  
178 { return myLineAspect.IsNull() ? myLink->LineAspect (): myLineAspect;}
179
180 Handle (Prs3d_TextAspect) AIS_Drawer::TextAspect ()  
181 { return myTextAspect.IsNull() ? myLink->TextAspect () : myTextAspect ;}
182
183 Handle (Prs3d_ShadingAspect) AIS_Drawer::ShadingAspect ()
184 {
185 return myShadingAspect.IsNull() ? myLink->ShadingAspect ()  : myShadingAspect ;
186 }
187
188 Standard_Boolean AIS_Drawer::ShadingAspectGlobal()  const 
189 { return myLink->ShadingAspectGlobal();}
190  
191
192 Standard_Boolean AIS_Drawer::LineArrowDraw ()  const 
193 { return myLink->LineArrowDraw();}
194
195 Handle (Prs3d_ArrowAspect) AIS_Drawer::ArrowAspect() 
196 {return myArrowAspect.IsNull()?  myLink->ArrowAspect () :  myArrowAspect;}
197
198 Handle (Prs3d_PointAspect) AIS_Drawer::PointAspect() 
199 {return myPointAspect.IsNull()?  myLink->PointAspect () :  myPointAspect;}
200
201 Standard_Boolean AIS_Drawer::DrawHiddenLine ()  const 
202 {return myLink->DrawHiddenLine();}
203
204 Handle (Prs3d_LineAspect) AIS_Drawer::HiddenLineAspect ()  
205 {return  myHiddenLineAspect.IsNull()?  myLink->HiddenLineAspect () : myHiddenLineAspect;}
206
207 Handle (Prs3d_LineAspect) AIS_Drawer::SeenLineAspect ()  
208 { return mySeenLineAspect.IsNull() ? myLink->SeenLineAspect (): mySeenLineAspect ;}
209
210 Handle (Prs3d_LineAspect) AIS_Drawer::VectorAspect ()  
211 {return myVectorAspect.IsNull()?  myLink->VectorAspect () : myVectorAspect;}
212
213 Handle (Prs3d_DatumAspect) AIS_Drawer::DatumAspect () 
214 {return myDatumAspect.IsNull()?  myLink->DatumAspect () : myDatumAspect; }
215
216 Handle (Prs3d_PlaneAspect) AIS_Drawer::PlaneAspect () 
217 {return myPlaneAspect.IsNull() ? myLink->PlaneAspect (): myPlaneAspect;}
218
219 Handle (Prs3d_LengthAspect) AIS_Drawer::LengthAspect ()  
220 {return myLengthAspect.IsNull()? myLink->LengthAspect () : myLengthAspect ;}
221
222
223 Handle (Prs3d_AngleAspect) AIS_Drawer::AngleAspect () 
224 {return myAngleAspect.IsNull()? myLink->AngleAspect () :myAngleAspect ;}
225
226
227 Handle (Prs3d_RadiusAspect) AIS_Drawer::RadiusAspect ()  const 
228 {return myRadiusAspect.IsNull()? myLink->RadiusAspect():myRadiusAspect; }
229
230
231 Handle (Prs3d_LineAspect) AIS_Drawer::SectionAspect ()
232 {return mySectionAspect.IsNull()? myLink->SectionAspect (): mySectionAspect;}
233
234 const Handle (Prs3d_Drawer)& AIS_Drawer::Link()  
235
236   if(myLink.IsNull()) myLink =  new Prs3d_Drawer();
237   return myLink;
238  }
239
240 void AIS_Drawer::ClearLocalAttributes()
241 {
242   if(myLink.IsNull()) return;
243 // attention pas beau....
244 // The Handles
245
246   if(!myUIsoAspect.IsNull()) myUIsoAspect.Nullify();
247   if(!myVIsoAspect.IsNull()) myVIsoAspect.Nullify();
248   if(!myFreeBoundaryAspect.IsNull())  myFreeBoundaryAspect.Nullify();  
249   if(!myUnFreeBoundaryAspect.IsNull())  myUnFreeBoundaryAspect.Nullify();
250   if(!myWireAspect.IsNull())  myWireAspect.Nullify();          
251   if(!myLineAspect.IsNull())  myLineAspect.Nullify();          
252   if(!myTextAspect.IsNull())  myTextAspect.Nullify();   
253   if(!myShadingAspect.IsNull())  myShadingAspect.Nullify();
254   if(!myPointAspect.IsNull())  myPointAspect.Nullify();  
255   if(!myPlaneAspect.IsNull())  myPlaneAspect.Nullify();  
256   if(!myArrowAspect.IsNull())  myArrowAspect.Nullify();  
257   if(!myHiddenLineAspect.IsNull())  myHiddenLineAspect.Nullify();
258   if(!mySeenLineAspect.IsNull())  mySeenLineAspect.Nullify();  
259   if(!myVectorAspect.IsNull())  myVectorAspect .Nullify();   
260   if(!myDatumAspect.IsNull())  myDatumAspect.Nullify();     
261   if(!myLengthAspect.IsNull())  myLengthAspect.Nullify();    
262   if(!myAngleAspect.IsNull())  myAngleAspect.Nullify();     
263   if(!myRadiusAspect.IsNull())  myRadiusAspect.Nullify();    
264   if(!mySectionAspect.IsNull())  mySectionAspect.Nullify();   
265   if( myhasOwnHLRDeviationCoefficient )  myhasOwnHLRDeviationCoefficient = Standard_False;   
266   if(myhasOwnHLRDeviationAngle ) myhasOwnHLRDeviationAngle  = Standard_False;
267   if (!myFaceBoundaryAspect.IsNull()) myFaceBoundaryAspect.Nullify();
268   
269   myHasOwnFaceBoundaryDraw = Standard_False;
270
271   hasLocalAttributes = Standard_False;
272
273 }
274
275 // =======================================================================
276 // function : SetFaceBoundaryDraw
277 // purpose  :
278 // =======================================================================
279 void AIS_Drawer::SetFaceBoundaryDraw (const Standard_Boolean theIsEnabled)
280 {
281   myHasOwnFaceBoundaryDraw = Standard_True;
282   myFaceBoundaryDraw       = theIsEnabled;
283 }
284
285 // =======================================================================
286 // function : IsFaceBoundaryDraw
287 // purpose  :
288 // =======================================================================
289 Standard_Boolean AIS_Drawer::IsFaceBoundaryDraw() const
290 {
291   if (!IsOwnFaceBoundaryDraw ())
292   {
293     return myLink->IsFaceBoundaryDraw ();
294   }
295
296   return myFaceBoundaryDraw;
297 }
298
299 // =======================================================================
300 // function : SetFaceBoundaryAspect
301 // purpose  :
302 // =======================================================================
303 void AIS_Drawer::SetFaceBoundaryAspect (const Handle(Prs3d_LineAspect)& theAspect)
304 {
305   myFaceBoundaryAspect = theAspect;
306 }
307
308 // =======================================================================
309 // function : FaceBoundaryAspect
310 // purpose  :
311 // =======================================================================
312 Handle_Prs3d_LineAspect AIS_Drawer::FaceBoundaryAspect()
313 {
314   if (!IsOwnFaceBoundaryAspect ())
315   {
316     return myLink->FaceBoundaryAspect ();
317   }
318
319   return myFaceBoundaryAspect;
320 }