c11744dfe19368346d196861f856d5a55bf503f5
[occt.git] / src / AIS / AIS_Plane.cxx
1 // Created on: 1995-08-02
2 // Created by: Arnaud BOUZY/Odile Olivier
3 // Copyright (c) 1995-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
5 //
6 // The content of this file is subject to the Open CASCADE Technology Public
7 // License Version 6.5 (the "License"). You may not use the content of this file
8 // except in compliance with the License. Please obtain a copy of the License
9 // at http://www.opencascade.org and read it completely before using this file.
10 //
11 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 //
14 // The Original Code and all software distributed under the License is
15 // distributed on an "AS IS" basis, without warranty of any kind, and the
16 // Initial Developer hereby disclaims all such warranties, including without
17 // limitation, any warranties of merchantability, fitness for a particular
18 // purpose or non-infringement. Please see the License for the specific terms
19 // and conditions governing the rights and limitations under the License.
20
21
22 #define GER61351                //GG_171199     Enable to set an object RGB color
23 //                                                instead a restricted object NameOfColor.
24
25 #include <AIS_Plane.ixx>
26
27 #include <TColgp_Array1OfPnt.hxx>
28 #include <TColgp_HArray1OfPnt.hxx>
29
30 #include <Precision.hxx>
31 #include <gp_Pnt.hxx>
32 #include <ElSLib.hxx>
33
34 #include <Graphic3d_ArrayOfQuadrangles.hxx>
35 #include <Graphic3d_Group.hxx>
36 #include <Prs3d_Drawer.hxx>
37 #include <Prs3d_LineAspect.hxx>
38 #include <Prs3d_PlaneAspect.hxx>
39 #include <Prs3d_DatumAspect.hxx>
40 #include <Prs3d_ShadingAspect.hxx>
41 #include <StdPrs_Plane.hxx>
42 #include <StdPrs_ShadedSurface.hxx>
43
44 #include <Geom_Plane.hxx>
45 #include <GeomAdaptor_Surface.hxx>
46
47 #include <Aspect_TypeOfLine.hxx>
48 #include <Graphic3d_AspectLine3d.hxx>
49 #include <Graphic3d_Structure.hxx>
50 #include <Graphic3d_MaterialAspect.hxx>
51 #include <Graphic3d_AspectFillArea3d.hxx>
52
53 #include <DsgPrs_XYZPlanePresentation.hxx>
54 #include <DsgPrs_ShadedPlanePresentation.hxx>
55 #include <UnitsAPI.hxx>
56
57 #include <SelectBasics_EntityOwner.hxx>
58 #include <SelectMgr_EntityOwner.hxx>
59 #include <Select3D_SensitiveFace.hxx>
60 #include <StdPrs_ShadedShape.hxx>
61
62 #include <AIS_Drawer.hxx>
63
64 #include <TCollection_AsciiString.hxx>
65
66 //=======================================================================
67 //function : AIS_Plane
68 //purpose  : 
69 //=======================================================================
70 AIS_Plane::AIS_Plane(const Handle(Geom_Plane)& aComponent,
71                      const Standard_Boolean aCurrentMode):
72 myComponent(aComponent),
73 myCenter(gp_Pnt(0.,0.,0.)),
74 myCurrentMode(aCurrentMode),
75 myAutomaticPosition(Standard_True),
76 myTypeOfPlane(AIS_TOPL_Unknown),
77 myIsXYZPlane(Standard_False),
78 myTypeOfSensitivity (Select3D_TOS_BOUNDARY)
79 {
80   InitDrawerAttributes();
81 }
82
83 //=======================================================================
84 //function : AIS_Plane 
85 //purpose  : avec une position
86 //=======================================================================
87 AIS_Plane::AIS_Plane(const Handle(Geom_Plane)& aComponent,
88                      const gp_Pnt& aCenter,
89                      const Standard_Boolean aCurrentMode):
90 myComponent(aComponent),
91 myCenter(aCenter),
92 myCurrentMode(aCurrentMode),
93 myAutomaticPosition(Standard_True),
94 myTypeOfPlane(AIS_TOPL_Unknown),
95 myIsXYZPlane(Standard_False),
96 myTypeOfSensitivity (Select3D_TOS_BOUNDARY)
97 {
98   InitDrawerAttributes();
99 }
100
101 //=======================================================================
102 //function : AIS_Plane
103 //purpose  : 
104 //=======================================================================
105 AIS_Plane::AIS_Plane(const Handle(Geom_Plane)& aComponent,
106                                const gp_Pnt& aCenter,
107                                const gp_Pnt& aPmin,
108                                const gp_Pnt& aPmax,
109                                const Standard_Boolean aCurrentMode):
110 myComponent(aComponent),
111 myCenter(aCenter),
112 myPmin(aPmin),
113 myPmax(aPmax),
114 myCurrentMode(aCurrentMode),
115 myAutomaticPosition(Standard_False),
116 myTypeOfPlane(AIS_TOPL_Unknown),
117 myIsXYZPlane(Standard_False),
118 myTypeOfSensitivity (Select3D_TOS_BOUNDARY)
119 {
120   InitDrawerAttributes();
121   SetHilightMode(0);
122 }
123
124 //=======================================================================
125 //function : AIS_Plane
126 //purpose  : XYPlane, XZPlane, YZPlane
127 //=======================================================================
128 AIS_Plane::AIS_Plane(const Handle(Geom_Axis2Placement)& aComponent,
129                      const AIS_TypeOfPlane aPlaneType,
130                      const Standard_Boolean aCurrentMode):
131 myAx2(aComponent),
132 myCurrentMode(aCurrentMode),
133 myAutomaticPosition(Standard_True),
134 myTypeOfPlane(aPlaneType),
135 myIsXYZPlane(Standard_True),
136 myTypeOfSensitivity (Select3D_TOS_BOUNDARY)
137 {
138   InitDrawerAttributes();
139   ComputeFields();
140   SetHilightMode(0);
141
142 }
143
144
145 //=======================================================================
146 //function : SetComponent
147 //purpose  : 
148 //=======================================================================
149
150 void AIS_Plane::SetComponent(const Handle(Geom_Plane)& aComponent)
151 {
152   myComponent = aComponent;
153   myTypeOfPlane = AIS_TOPL_Unknown;
154   myIsXYZPlane = Standard_False;
155   //myCenter = gp_Pnt(0.,0.,0.);
156   myAutomaticPosition = Standard_True;
157 }
158
159 //=======================================================================
160 //function : Type
161 //purpose  : 
162 //=======================================================================
163
164 AIS_KindOfInteractive AIS_Plane::Type() const 
165 {return AIS_KOI_Datum;}
166
167
168 //=======================================================================
169 //function : Signature
170 //purpose  : 
171 //=======================================================================
172
173 Standard_Integer AIS_Plane::Signature() const 
174 {return 7;}
175
176
177 //=======================================================================
178 //function : Axis2Placement
179 //purpose  : 
180 //=======================================================================
181
182 Handle(Geom_Axis2Placement) AIS_Plane::Axis2Placement()
183 {
184   Handle(Geom_Axis2Placement) Bid;
185   return IsXYZPlane() ? myAx2:Bid;
186 }
187 //=======================================================================
188 //function : SetAxis2Placement
189 //purpose  : 
190 //=======================================================================
191
192  void AIS_Plane::SetAxis2Placement(const Handle(Geom_Axis2Placement)& aComponent,
193                                    const AIS_TypeOfPlane aPlaneType)
194 {
195   myTypeOfPlane = aPlaneType;
196   myIsXYZPlane = Standard_True;
197   myAx2= aComponent;
198   myAutomaticPosition = Standard_True;
199   ComputeFields();
200 }
201
202 //=======================================================================
203 //function : PlaneAttributes
204 //purpose  : 
205 //=======================================================================
206 Standard_Boolean AIS_Plane::PlaneAttributes(Handle(Geom_Plane)& aComponent,
207                                             gp_Pnt& aCenter,
208                                             gp_Pnt& aPmin,
209                                             gp_Pnt& aPmax)
210 {
211   Standard_Boolean aStatus (Standard_False);
212   if (!myAutomaticPosition){
213     aComponent = myComponent;
214     aCenter = myCenter;
215     aPmin = myPmin;
216     aPmax = myPmax;
217     aStatus = Standard_True;
218   }
219   return aStatus;
220 }
221
222 //=======================================================================
223 //function : SetPlaneAttributes
224 //purpose  : 
225 //=======================================================================
226 void AIS_Plane::SetPlaneAttributes(const Handle(Geom_Plane)& aComponent,
227                               const gp_Pnt& aCenter,
228                               const gp_Pnt& aPmin,
229                               const gp_Pnt& aPmax)
230 {
231   myAutomaticPosition = Standard_False;
232   myComponent = aComponent;
233   myCenter = aCenter;
234   myPmin = aPmin;
235   myPmax = aPmax;
236   myTypeOfPlane = AIS_TOPL_Unknown;
237   myIsXYZPlane = Standard_False;
238 }
239
240 //=======================================================================
241 //function : Compute
242 //purpose  : 
243 //=======================================================================
244 void AIS_Plane::Compute(const Handle(PrsMgr_PresentationManager3d)& ,
245                         const Handle(Prs3d_Presentation)& aPresentation, 
246                         const Standard_Integer aMode)
247 {
248   aPresentation->Clear();
249
250   ComputeFields();
251   aPresentation->SetInfiniteState(myInfiniteState);
252   myDrawer->PlaneAspect()->EdgesAspect()->SetWidth(myCurrentMode == 0? 1 : 3);
253
254   switch (aMode)
255   {
256     case 0:
257     {
258       if (!myIsXYZPlane)
259       {
260         ComputeFrame();
261         const Handle(Geom_Plane)& pl = myComponent;
262         const Handle(Geom_Plane)& thegoodpl = Handle(Geom_Plane)::DownCast(pl->Translated(pl->Location(),myCenter));
263         GeomAdaptor_Surface surf(thegoodpl);
264         StdPrs_Plane::Add(aPresentation,surf,myDrawer);
265       }
266       else
267         DsgPrs_XYZPlanePresentation::Add(aPresentation,myDrawer,myCenter,myPmin,myPmax);
268       break;
269     }
270     case 1:
271     {
272       if (!myIsXYZPlane)
273       {
274         ComputeFrame();
275         Handle(Prs3d_PlaneAspect) theaspect = myDrawer->PlaneAspect();
276         Handle(Graphic3d_Group) TheGroup = Prs3d_Root::CurrentGroup(aPresentation);
277         TheGroup->SetPrimitivesAspect(myDrawer->ShadingAspect()->Aspect());
278         gp_Pnt p1;
279         const Standard_Real Xmax = 0.5*Standard_Real(theaspect->PlaneXLength());
280         const Standard_Real Ymax = 0.5*Standard_Real(theaspect->PlaneYLength());
281
282         Handle(Graphic3d_ArrayOfQuadrangles) aQuads = new Graphic3d_ArrayOfQuadrangles(4);
283
284         myComponent->D0(-Xmax,Ymax,p1);
285         aQuads->AddVertex(p1);
286         myComponent->D0(Xmax,Ymax,p1);
287         aQuads->AddVertex(p1);
288         myComponent->D0(Xmax,-Ymax,p1);
289         aQuads->AddVertex(p1);
290         myComponent->D0(-Xmax,-Ymax,p1);
291         aQuads->AddVertex(p1);
292
293         TheGroup->AddPrimitiveArray(aQuads);
294       }
295       else
296         DsgPrs_ShadedPlanePresentation::Add(aPresentation,myDrawer,myCenter,myPmin,myPmax);
297       break;
298     }
299   }
300 }
301
302 void AIS_Plane::Compute(const Handle_Prs3d_Projector& aProjector, const Handle_Geom_Transformation& aTransformation, const Handle_Prs3d_Presentation& aPresentation)
303 {
304   PrsMgr_PresentableObject::Compute(aProjector, aTransformation, aPresentation);
305 }
306
307 //=======================================================================
308 //function : ComputeSelection
309 //purpose  : 
310 //=======================================================================
311 void AIS_Plane::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection,
312                                     const Standard_Integer)
313 {
314   aSelection->Clear();
315   Handle(SelectMgr_EntityOwner) eown = new SelectMgr_EntityOwner(this,10);
316   Handle(Select3D_SensitiveFace) sfac;
317
318   if (!myIsXYZPlane){
319
320     Handle(TColgp_HArray1OfPnt) harr = new TColgp_HArray1OfPnt(1,5);
321     TColgp_Array1OfPnt& arr = harr->ChangeArray1();
322     Standard_Real lx = myDrawer->PlaneAspect()->PlaneXLength()/2.;
323     Standard_Real ly = myDrawer->PlaneAspect()->PlaneYLength()/2.;
324     const Handle(Geom_Plane)& pl = myComponent;
325     const Handle(Geom_Plane)& thegoodpl = Handle(Geom_Plane)::DownCast(pl->Translated(pl->Location(),myCenter));
326     
327     thegoodpl->D0(lx,ly,arr(1));
328     thegoodpl->D0(lx,-ly,arr(2));
329     thegoodpl->D0(-lx,-ly,arr(3));
330     thegoodpl->D0(-lx,ly,arr(4));
331     arr(5) = arr(1);
332     sfac = new Select3D_SensitiveFace(eown,harr,myTypeOfSensitivity);
333
334   }
335   else {
336     Handle(TColgp_HArray1OfPnt) harr1 = new TColgp_HArray1OfPnt(1,4);
337     TColgp_Array1OfPnt& arr1 = harr1->ChangeArray1();
338     
339     arr1(1) = myCenter;
340     arr1(2) = myPmin;
341     arr1(3) = myPmax;
342     arr1(4) = myCenter;
343     sfac = new Select3D_SensitiveFace(eown,harr1,myTypeOfSensitivity);
344
345   }
346     aSelection->Add(sfac);
347 }
348
349
350
351
352 //=======================================================================
353 //function : SetSize
354 //purpose  : 
355 //=======================================================================
356 void AIS_Plane::SetSize(const Standard_Real aLength)
357 {
358   SetSize(aLength,aLength);
359 }
360
361 void AIS_Plane::SetSize(const Standard_Real aXLength,
362                         const Standard_Real aYLength)
363 {
364   //if the plane already has a proper color or size, 
365   //there is already a specific PlaneAspect and DatumAspect 
366     
367   Handle(Prs3d_PlaneAspect) PA; 
368   Handle(Prs3d_DatumAspect) DA;
369
370   PA = myDrawer->PlaneAspect();
371   DA = myDrawer->DatumAspect();
372
373   Standard_Boolean yenavaitPA(Standard_True),yenavaitDA(Standard_True);
374   if(myDrawer->Link()->PlaneAspect() == PA){
375     yenavaitPA = Standard_False;
376     PA = new Prs3d_PlaneAspect();}
377   if(myDrawer->Link()->DatumAspect() == DA){
378     yenavaitDA = Standard_False;
379     DA = new Prs3d_DatumAspect();
380   }
381   
382   PA->SetPlaneLength(aXLength,aYLength);
383   DA->SetAxisLength(aXLength,aYLength,aXLength);
384   
385   if(!yenavaitPA)
386     myDrawer->SetPlaneAspect(PA);
387   if(!yenavaitDA)
388     myDrawer->SetDatumAspect(DA);
389   
390   
391   myHasOwnSize = Standard_True;
392   Update();
393   UpdateSelection();
394 }
395
396
397 //=======================================================================
398 //function : UnsetSize
399 //purpose  : If there is a color, the size is restaured from the drawer of the context...
400 //=======================================================================
401 void AIS_Plane::UnsetSize()
402 {
403   
404   if(!myHasOwnSize) return;
405   if(!hasOwnColor){
406     myDrawer->PlaneAspect().Nullify();
407     myDrawer->DatumAspect().Nullify();
408   }
409   else{
410     const Handle(Prs3d_PlaneAspect)& PA = myDrawer->Link()->PlaneAspect();
411     const Handle(Prs3d_DatumAspect)& DA = myDrawer->Link()->DatumAspect();
412
413     myDrawer->PlaneAspect()->SetPlaneLength(PA->PlaneXLength(),PA->PlaneYLength());
414     myDrawer->DatumAspect()->SetAxisLength(DA->FirstAxisLength(),
415                                            DA->SecondAxisLength(),
416                                            DA->ThirdAxisLength());
417   }
418   
419   myHasOwnSize = Standard_False;
420   Update();
421   UpdateSelection();
422
423 }
424
425 //=======================================================================
426 //function : Size
427 //purpose  : 
428 //=======================================================================
429
430 Standard_Boolean AIS_Plane::Size(Standard_Real& X,Standard_Real& Y) const 
431 {
432   X = myDrawer->PlaneAspect()->PlaneXLength();
433   Y = myDrawer->PlaneAspect()->PlaneYLength();
434   return Abs(X-Y)<=Precision::Confusion();
435 }
436
437
438 //=======================================================================
439 //function : SetColor
440 //purpose  : 
441 //=======================================================================
442
443
444 void AIS_Plane::SetColor(const Quantity_NameOfColor aCol)
445 #ifdef GER61351
446 {
447   SetColor(Quantity_Color(aCol));
448 }
449
450 void AIS_Plane::SetColor(const Quantity_Color &aCol)
451 #endif
452 {
453   // if the plane already has its proper size, there is an already created planeaspect 
454 //  Standard_Boolean yenadeja = hasOwnColor || myHasOwnSize;
455   Handle(Prs3d_PlaneAspect) PA; 
456   Handle(Prs3d_DatumAspect) DA;
457
458   PA = myDrawer->PlaneAspect();
459   DA = myDrawer->DatumAspect();
460
461   Standard_Boolean yenavaitPA(Standard_True),yenavaitDA(Standard_True);
462   if(myDrawer->Link()->PlaneAspect() == PA){
463     yenavaitPA = Standard_False;
464     PA = new Prs3d_PlaneAspect();}
465   if(myDrawer->Link()->DatumAspect() == DA){
466     yenavaitDA = Standard_False;
467     DA = new Prs3d_DatumAspect();
468   }
469   
470   PA->EdgesAspect()->SetColor(aCol);
471   DA->FirstAxisAspect()->SetColor(aCol);
472   DA->SecondAxisAspect()->SetColor(aCol);
473   DA->ThirdAxisAspect()->SetColor(aCol);
474
475   if(!yenavaitPA)
476     myDrawer->SetPlaneAspect(PA);
477   if(!yenavaitDA)
478     myDrawer->SetDatumAspect(DA);
479
480   myDrawer->ShadingAspect()->SetColor(aCol);
481   
482   hasOwnColor=Standard_True;
483   myOwnColor = aCol;
484 }
485 //=======================================================================
486 //function : SetColor
487 //purpose  : 
488 //=======================================================================
489 void AIS_Plane::UnsetColor()
490 {
491   if(!hasOwnColor) return;
492   if(!myHasOwnSize){
493     myDrawer->PlaneAspect().Nullify();
494     myDrawer->DatumAspect().Nullify();
495   }
496   else{
497     const Handle(Prs3d_PlaneAspect)& PA = myDrawer->Link()->PlaneAspect();
498 //    const Handle(Prs3d_DatumAspect)& DA = myDrawer->Link()->DatumAspect();
499     Quantity_Color C;Aspect_TypeOfLine T;Standard_Real W;
500     PA->EdgesAspect()->Aspect()->Values(C,T,W);
501     Quantity_NameOfColor Col = C.Name();
502     myDrawer->PlaneAspect()->EdgesAspect()->SetColor(Col);
503     
504     myDrawer->DatumAspect()->FirstAxisAspect()->SetColor(Col);
505     myDrawer->DatumAspect()->SecondAxisAspect()->SetColor(Col);
506     myDrawer->DatumAspect()->ThirdAxisAspect()->SetColor(Col);
507   }
508  
509  
510   hasOwnColor=Standard_False;
511
512 }
513
514 //=======================================================================
515 //function : ComputeFrame
516 //purpose  : 
517 //=======================================================================
518 void AIS_Plane::ComputeFrame()
519 {
520
521   const Handle(Geom_Plane)& pl = myComponent;
522   Standard_Real U,V;
523
524   if (myAutomaticPosition) {
525     ElSLib::Parameters(pl->Pln(),myCenter,U,V);
526     pl->D0 (U, V, myCenter);     
527   }
528   else {
529     const Handle(Geom_Plane)& thegoodpl = 
530       Handle(Geom_Plane)::DownCast(pl->Translated(pl->Location(),myCenter));
531     ElSLib::Parameters(thegoodpl->Pln(),myPmin,U,V);
532     
533     U = 2.4*Abs(U);
534     V = 2.4*Abs(V);
535     if (U < 10*Precision::Confusion()) U=0.1;
536     if (V < 10*Precision::Confusion()) V=0.1;
537     SetSize(U,V);
538     myDrawer->PlaneAspect()->SetPlaneLength(U,V);
539   }
540 }
541
542 //=======================================================================
543 //function : Compute
544 //purpose  : to avoid warning
545 //=======================================================================
546 void AIS_Plane::Compute(const Handle(Prs3d_Projector)&, 
547                            const Handle(Prs3d_Presentation)&)
548 {
549 }
550
551 //=======================================================================
552 //function : ComputeFields
553 //purpose  : 
554 //=======================================================================
555 void AIS_Plane::ComputeFields()
556 {
557   if (myIsXYZPlane){
558     Handle (Prs3d_DatumAspect) DA = myDrawer->DatumAspect();
559
560     gp_Pnt Orig = myAx2->Ax2().Location();
561     gp_Dir oX = myAx2->Ax2().XDirection();
562     gp_Dir oY = myAx2->Ax2().YDirection();
563     gp_Dir oZ = myAx2->Ax2().Direction();
564     myCenter = Orig;
565     Standard_Real xo,yo,zo,x1,y1,z1,x2,y2,z2,x3,y3,z3,x4=0,y4=0,z4=0;
566     Standard_Real x5=0,y5=0,z5=0;
567     Orig.Coord(xo,yo,zo);
568     oX.Coord(x1,y1,z1);
569     oY.Coord(x2,y2,z2);
570     oZ.Coord(x3,y3,z3);
571     Standard_Real DS1 = DA->FirstAxisLength();
572     Standard_Real DS2 = DA->SecondAxisLength();
573     Standard_Real DS3 = DA->ThirdAxisLength();
574 //    gp_Pnt aPt2,aPt3;
575
576     switch (myTypeOfPlane) {
577     case AIS_TOPL_XYPlane:
578       {
579         gp_Pln XYP(0,0,1,0);
580         myComponent = new Geom_Plane(XYP);
581         x4=xo+x1*DS1; y4=yo+y1*DS1; z4=zo+z1*DS1;
582         x5=xo+x2*DS2; y5=yo+y2*DS2; z5=zo+z2*DS2;
583         break;
584       }
585     case AIS_TOPL_XZPlane:
586       {
587         gp_Pln XZP(0,1,0,0);
588         myComponent = new Geom_Plane(XZP);
589         x4=xo+x1*DS1; y4=yo+y1*DS1; z4=zo+z1*DS1;
590         x5=xo+x3*DS3; y5=yo+y3*DS3; z5=zo+z3*DS3;
591         break;
592       }
593     case AIS_TOPL_YZPlane:
594       {
595         gp_Pln XZP(1,0,0,0);
596         myComponent = new Geom_Plane(XZP);
597         x4=xo+x2*DS2; y4=yo+y2*DS2; z4=zo+z2*DS2;
598         x5=xo+x3*DS3; y5=yo+y3*DS3; z5=zo+z3*DS3;
599         break;
600       }
601     default:
602       break;
603     }
604     myPmin.SetCoord(x4,y4,z4);
605     myPmax.SetCoord(x5,y5,z5);
606   }
607
608 }
609 //=======================================================================
610 //function : InitDrawerAttributes
611 //purpose  : 
612 //=======================================================================
613
614 void AIS_Plane::InitDrawerAttributes()
615 {
616
617   Handle(Prs3d_ShadingAspect) shasp = new Prs3d_ShadingAspect();
618   shasp->SetMaterial(Graphic3d_NOM_PLASTIC);
619   shasp->SetColor(Quantity_NOC_GRAY40);
620   myDrawer->SetShadingAspect(shasp);
621   Handle(Graphic3d_AspectFillArea3d) asf = shasp->Aspect();
622   Graphic3d_MaterialAspect asp = asf->FrontMaterial();
623   asp.SetTransparency(0.8);
624   asf->SetFrontMaterial(asp);
625   asf->SetBackMaterial(asp);
626
627
628 }
629
630 //=======================================================================
631 //function : AcceptDisplayMode
632 //purpose  : 
633 //=======================================================================
634
635 Standard_Boolean  AIS_Plane::
636 AcceptDisplayMode(const Standard_Integer aMode) const
637 {return aMode == 0;}
638
639
640 //=======================================================================
641 //function : SetContext
642 //purpose  : 
643 //=======================================================================
644
645 void AIS_Plane::SetContext(const Handle(AIS_InteractiveContext)& Ctx)
646 {
647   AIS_InteractiveObject::SetContext(Ctx);
648   ComputeFields();
649
650 }