1 // Created on: 1998-09-30
2 // Created by: Sergey RUIN
3 // Copyright (c) 1998-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
18 #include <AIS_InteractiveContext.hxx>
19 #include <AIS_InteractiveObject.hxx>
20 #include <Standard_GUID.hxx>
21 #include <Standard_NullObject.hxx>
22 #include <Standard_NoMoreObject.hxx>
23 #include <TCollection_ExtendedString.hxx>
24 #include <TDF_Attribute.hxx>
25 #include <TDF_AttributeDelta.hxx>
26 #include <TDF_DefaultDeltaOnModification.hxx>
27 #include <TDF_DefaultDeltaOnRemoval.hxx>
28 #include <TDF_DeltaOnAddition.hxx>
29 #include <TDF_Label.hxx>
30 #include <TDF_RelocationTable.hxx>
31 #include <TDF_Tool.hxx>
32 #include <TPrsStd_AISPresentation.hxx>
33 #include <TColStd_ListOfInteger.hxx>
34 #include <TColStd_ListIteratorOfListOfInteger.hxx>
35 #include <TDataXtd_Presentation.hxx>
36 #include <TPrsStd_AISViewer.hxx>
37 #include <TPrsStd_Driver.hxx>
38 #include <TPrsStd_DriverTable.hxx>
40 IMPLEMENT_STANDARD_RTTIEXT(TPrsStd_AISPresentation,TDF_Attribute)
42 #define NO_MORE_OBJECT "TPrsStd_AISPresentation has no associated TDataXtd_PresentationData"
44 //=======================================================================
45 //function : TPrsStd_AISPresentation
46 //purpose : Constructor
47 //=======================================================================
48 TPrsStd_AISPresentation::TPrsStd_AISPresentation ()
53 //=======================================================================
56 //=======================================================================
57 Handle(TPrsStd_AISPresentation) TPrsStd_AISPresentation::Set
58 ( const TDF_Label& theLabel, const Standard_GUID& theDriver )
60 Handle(TPrsStd_AISPresentation) aPresentation;
61 // create associated data (unless already there)
62 Handle(TDataXtd_Presentation) aData = TDataXtd_Presentation::Set (theLabel, theDriver);
64 throw Standard_NoMoreObject(NO_MORE_OBJECT);
65 if ( !theLabel.FindAttribute(TPrsStd_AISPresentation::GetID(), aPresentation) )
67 aPresentation = new TPrsStd_AISPresentation();
68 theLabel.AddAttribute(aPresentation, Standard_True);
74 //=======================================================================
77 //=======================================================================
78 Handle(TPrsStd_AISPresentation) TPrsStd_AISPresentation::Set(const Handle(TDF_Attribute)& theMaster)
80 return TPrsStd_AISPresentation::Set(theMaster->Label(), theMaster->ID());
83 //=======================================================================
86 //=======================================================================
87 void TPrsStd_AISPresentation::Unset (const TDF_Label& theLabel)
89 Handle(TPrsStd_AISPresentation) aPresentation;
90 if ( theLabel.FindAttribute(TPrsStd_AISPresentation::GetID(), aPresentation) )
91 theLabel.ForgetAttribute(aPresentation);
93 // remove associated data
94 TDataXtd_Presentation::Unset (theLabel);
97 //=======================================================================
100 //=======================================================================
101 Handle(TDataXtd_Presentation) TPrsStd_AISPresentation::getData () const
103 Handle(TDataXtd_Presentation) aData;
104 if (!Label().FindAttribute(TDataXtd_Presentation::GetID(), aData))
105 throw Standard_NoMoreObject(NO_MORE_OBJECT);
109 //=======================================================================
112 //=======================================================================
113 const Standard_GUID& TPrsStd_AISPresentation::GetID()
115 static Standard_GUID TPrsStd_AISPresentationID("3680ac6c-47ae-4366-bb94-26abb6e07341");
116 return TPrsStd_AISPresentationID;
119 //=======================================================================
122 //=======================================================================
123 void TPrsStd_AISPresentation::Display(const Standard_Boolean theIsUpdate)
125 if ( theIsUpdate || myAIS.IsNull() )
131 //=======================================================================
134 //=======================================================================
135 void TPrsStd_AISPresentation::Erase(const Standard_Boolean theIsRemove)
139 AISErase(theIsRemove);
143 //=======================================================================
146 //=======================================================================
147 void TPrsStd_AISPresentation::Update()
152 //=======================================================================
153 //function : IsDisplayed
155 //=======================================================================
156 Standard_Boolean TPrsStd_AISPresentation::IsDisplayed() const
158 return getData()->IsDisplayed();
161 //=======================================================================
162 //function : SetDisplayed
164 //=======================================================================
165 void TPrsStd_AISPresentation::SetDisplayed(const Standard_Boolean theIsDisplayed)
167 // this method can be called by AISUpdate() in the process of removal,
168 // while data attribute may be already removed
170 getData()->SetDisplayed(theIsDisplayed);
173 //=======================================================================
174 //function :SetDriverGUID
176 //=======================================================================
177 void TPrsStd_AISPresentation::SetDriverGUID(const Standard_GUID& theGUID)
180 getData()->SetDriverGUID (theGUID);
183 //=======================================================================
184 //function :GetDriverGUID
186 //=======================================================================
187 Standard_GUID TPrsStd_AISPresentation::GetDriverGUID() const
189 return getData()->GetDriverGUID();
192 //=======================================================================
195 //=======================================================================
196 Graphic3d_NameOfMaterial TPrsStd_AISPresentation::Material() const
198 return (Graphic3d_NameOfMaterial)getData()->MaterialIndex();
201 //=======================================================================
202 //function :HasMaterial
204 //=======================================================================
205 Standard_Boolean TPrsStd_AISPresentation::HasOwnMaterial() const
207 return getData()->HasOwnMaterial();
210 //=======================================================================
211 //function : UnsetMaterial
213 //=======================================================================
214 void TPrsStd_AISPresentation::UnsetMaterial()
216 if ( !getData()->HasOwnMaterial() && !myAIS.IsNull() && !myAIS->HasMaterial() )
219 getData()->UnsetMaterial();
221 if ( myAIS.IsNull() )
224 if ( !myAIS.IsNull() && myAIS->HasMaterial() )
226 Handle(AIS_InteractiveContext) aContext = getAISContext();
228 if ( !aContext.IsNull() )
229 aContext->UnsetMaterial(myAIS, Standard_False);
231 myAIS->UnsetMaterial();
236 //=======================================================================
237 //function : SetMaterial
239 //=======================================================================
240 void TPrsStd_AISPresentation::SetMaterial(const Graphic3d_NameOfMaterial theName)
243 if ( getData()->HasOwnMode() && getData()->MaterialIndex() == theName )
244 if ( !myAIS.IsNull() && myAIS->HasMaterial() && myAIS->Material() == theName )
247 getData()->SetMaterialIndex(theName);
249 if ( myAIS.IsNull() )
252 if ( !myAIS.IsNull() )
254 if ( myAIS->HasMaterial() && myAIS->Material() == theName )
255 return; // AIS has already had that material
257 Handle(AIS_InteractiveContext) aContext = getAISContext();
259 if ( !aContext.IsNull() )
260 aContext->SetMaterial(myAIS, theName, Standard_False);
262 myAIS->SetMaterial(theName);
266 //=======================================================================
267 //function :Transparency
269 //=======================================================================
270 Standard_Real TPrsStd_AISPresentation::Transparency() const
272 return getData()->Transparency();
275 //=======================================================================
276 //function :SetTransparency
278 //=======================================================================
279 void TPrsStd_AISPresentation::SetTransparency(const Standard_Real theValue)
282 if (getData()->HasOwnTransparency() && getData()->Transparency() == theValue)
283 if ( !myAIS.IsNull() && myAIS->Transparency() == theValue )
286 getData()->SetTransparency(theValue);
288 if ( myAIS.IsNull() )
291 if ( !myAIS.IsNull() )
293 if ( myAIS->Transparency() == theValue )
294 return; // AIS has already had that transparency
296 Handle(AIS_InteractiveContext) aContext = getAISContext();
298 if ( !aContext.IsNull() )
299 aContext->SetTransparency(myAIS, theValue, Standard_False);
301 myAIS->SetTransparency(theValue);
305 //=======================================================================
306 //function :UnsetTransparency
308 //=======================================================================
309 void TPrsStd_AISPresentation::UnsetTransparency()
311 if (!getData()->HasOwnTransparency())
314 getData()->UnsetTransparency();
316 if ( myAIS.IsNull() )
319 if ( !myAIS.IsNull() )
321 Handle(AIS_InteractiveContext) aContext = getAISContext();
323 if( !aContext.IsNull() )
324 aContext->UnsetTransparency(myAIS, Standard_False);
326 myAIS->UnsetTransparency();
330 //=======================================================================
331 //function : HasTransparency
333 //=======================================================================
334 Standard_Boolean TPrsStd_AISPresentation::HasOwnTransparency() const
336 return getData()->HasOwnTransparency();
339 //=======================================================================
342 //=======================================================================
343 Quantity_NameOfColor TPrsStd_AISPresentation::Color() const
345 return getData()->Color();
348 //=======================================================================
349 //function : HasOwnColor
351 //=======================================================================
352 Standard_Boolean TPrsStd_AISPresentation::HasOwnColor() const
354 return getData()->HasOwnColor();
357 //=======================================================================
358 //function : UnsetColor
360 //=======================================================================
361 void TPrsStd_AISPresentation::UnsetColor()
363 if (!getData()->HasOwnColor() && ! myAIS.IsNull() && !myAIS->HasColor())
365 getData()->UnsetColor();
367 if ( myAIS.IsNull() )
370 if ( !myAIS.IsNull() && myAIS->HasColor() )
372 Handle(AIS_InteractiveContext) aContext = getAISContext();
374 if ( !aContext.IsNull() )
375 aContext->UnsetColor(myAIS, Standard_False);
381 //=======================================================================
382 //function : SetColor
384 //=======================================================================
385 void TPrsStd_AISPresentation::SetColor(const Quantity_NameOfColor theColor)
388 if ( getData()->HasOwnColor() && getData()->Color() == theColor )
390 if (!myAIS.IsNull() && myAIS->HasColor())
392 Quantity_Color aColor;
393 myAIS->Color (aColor);
394 if (aColor.Name() == theColor)
401 getData()->SetColor(theColor);
403 if ( myAIS.IsNull() )
406 if ( !myAIS.IsNull() )
408 if (myAIS->HasColor())
410 Quantity_Color aColor;
411 myAIS->Color (aColor);
412 if (aColor.Name() == theColor)
414 return; // AIS has already had that color
418 Handle(AIS_InteractiveContext) aContext = getAISContext();
420 if( !aContext.IsNull() )
421 aContext->SetColor(myAIS, theColor, Standard_False);
423 myAIS->SetColor(theColor);
427 //=======================================================================
430 //=======================================================================
431 Standard_Real TPrsStd_AISPresentation::Width() const
433 return getData()->Width();
436 //=======================================================================
437 //function : HasWidth
439 //=======================================================================
440 Standard_Boolean TPrsStd_AISPresentation::HasOwnWidth() const
442 return getData()->HasOwnWidth();
445 //=======================================================================
446 //function : SetWidth
448 //=======================================================================
449 void TPrsStd_AISPresentation::SetWidth(const Standard_Real theWidth)
452 if ( getData()->HasOwnWidth() && getData()->Width() == theWidth )
453 if ( !myAIS.IsNull() && myAIS->HasWidth() && myAIS->Width() == theWidth )
456 getData()->SetWidth(theWidth);
458 if( !myAIS.IsNull() )
460 if ( myAIS->HasWidth() && myAIS->Width() == theWidth )
461 return; // AIS has already had that width
463 Handle(AIS_InteractiveContext) aContext = getAISContext();
465 if( !aContext.IsNull() )
466 aContext->SetWidth(myAIS, theWidth, Standard_False);
468 myAIS->SetWidth(theWidth);
472 //=======================================================================
473 //function : UnsetWidth
475 //=======================================================================
476 void TPrsStd_AISPresentation::UnsetWidth()
478 if ( !getData()->HasOwnWidth() )
479 if ( !myAIS.IsNull() && !myAIS->HasWidth() )
482 getData()->UnsetWidth();
487 if ( !myAIS.IsNull() && myAIS->HasWidth() )
489 Handle(AIS_InteractiveContext) aContext = getAISContext();
491 if ( !aContext.IsNull() )
492 aContext->UnsetWidth(myAIS, Standard_False);
498 //=======================================================================
501 //=======================================================================
502 Standard_Integer TPrsStd_AISPresentation::Mode() const
504 return getData()->Mode();
507 //=======================================================================
508 //function : HasOwnMode
510 //=======================================================================
511 Standard_Boolean TPrsStd_AISPresentation::HasOwnMode() const
513 return getData()->HasOwnMode();
516 //=======================================================================
519 //=======================================================================
520 void TPrsStd_AISPresentation::SetMode(const Standard_Integer theMode)
523 if ( getData()->HasOwnMode() && getData()->Mode() == theMode )
524 if ( !myAIS.IsNull() && myAIS->DisplayMode() == theMode )
527 getData()->SetMode(theMode);
529 if ( myAIS.IsNull() )
532 if ( !myAIS.IsNull() )
534 if ( myAIS->DisplayMode() == theMode )
535 return; // AIS has already had that mode
537 Handle(AIS_InteractiveContext) aContext = getAISContext();
539 if( !aContext.IsNull() )
540 aContext->SetDisplayMode(myAIS, theMode, Standard_False);
542 myAIS->SetDisplayMode(theMode);
546 //=======================================================================
547 //function : UnsetMode
549 //=======================================================================
550 void TPrsStd_AISPresentation::UnsetMode()
552 if ( !getData()->HasOwnMode() )
553 if ( !myAIS.IsNull() && !myAIS->HasDisplayMode() )
556 getData()->UnsetMode();
558 if ( myAIS.IsNull() )
561 if( !myAIS.IsNull() && myAIS->HasDisplayMode() )
563 Handle(AIS_InteractiveContext) aContext = getAISContext();
565 if ( !aContext.IsNull() )
566 aContext->UnsetDisplayMode(myAIS, Standard_False);
568 myAIS->UnsetDisplayMode();
572 //=======================================================================
573 //function : SelectionMode
575 //=======================================================================
576 Standard_Integer TPrsStd_AISPresentation::SelectionMode() const
578 return getData()->SelectionMode();
581 //=======================================================================
582 //function : HasOwnSelectionMode
584 //=======================================================================
585 Standard_Boolean TPrsStd_AISPresentation::HasOwnSelectionMode() const
587 return getData()->HasOwnSelectionMode();
590 //=======================================================================
591 //function : SetSelectionMode
593 //=======================================================================
594 void TPrsStd_AISPresentation::SetSelectionMode(const Standard_Integer theSelectionMode)
597 getData()->SetSelectionMode (theSelectionMode);
599 if ( myAIS.IsNull() )
602 ActivateSelectionMode();
605 //=======================================================================
606 //function : UnsetSelectionMode
608 //=======================================================================
609 void TPrsStd_AISPresentation::UnsetSelectionMode()
611 getData()->UnsetSelectionMode ();
615 //=======================================================================
618 //=======================================================================
619 const Standard_GUID& TPrsStd_AISPresentation::ID() const
624 //=======================================================================
625 //function : BackupCopy
627 //=======================================================================
628 Handle(TDF_Attribute) TPrsStd_AISPresentation::BackupCopy() const
630 return new TPrsStd_AISPresentation;
634 //=======================================================================
635 //function : NewEmpty
637 //=======================================================================
638 Handle(TDF_Attribute) TPrsStd_AISPresentation::NewEmpty() const
640 return new TPrsStd_AISPresentation();
643 //=======================================================================
646 //=======================================================================
647 void TPrsStd_AISPresentation::Restore(const Handle(TDF_Attribute)& /*theWith*/)
652 //=======================================================================
655 //=======================================================================
656 void TPrsStd_AISPresentation::Paste (const Handle(TDF_Attribute)& theInto,
657 const Handle(TDF_RelocationTable)& ) const
659 Handle(TPrsStd_AISPresentation) anInto =
660 Handle(TPrsStd_AISPresentation)::DownCast(theInto);
663 if (!anInto->myAIS.IsNull())
665 // Save displayed flag.
666 Standard_Boolean displayed = anInto->IsDisplayed();
667 // Erase the interactive object.
668 anInto->AISErase(Standard_True);
669 // Restore the displayed flag.
671 anInto->SetDisplayed(displayed);
673 // Nullify the interactive object.
674 // It will be restored on the next call to AISUpdate().
675 anInto->myAIS.Nullify();
678 //=======================================================================
679 //function : AfterAddition
680 //purpose : erase if displayed
681 //=======================================================================
682 void TPrsStd_AISPresentation::AfterAddition()
687 //=======================================================================
688 //function : BeforeRemoval
689 //purpose : erase if displayed
690 //=======================================================================
691 void TPrsStd_AISPresentation::BeforeRemoval()
696 //=======================================================================
697 //function : BeforeForget
698 //purpose : erase if displayed
699 //=======================================================================
700 void TPrsStd_AISPresentation::BeforeForget()
702 if ( !myAIS.IsNull() )
703 { // Remove AISObject from context.
704 AISErase(Standard_True);
709 //=======================================================================
710 //function : AfterResume
711 //purpose : display if displayed
712 //=======================================================================
713 void TPrsStd_AISPresentation::AfterResume()
722 //=======================================================================
723 //function : BeforeUndo
724 //purpose : le NamedShape associe doit etre present
725 //=======================================================================
726 Standard_Boolean TPrsStd_AISPresentation::BeforeUndo (const Handle(TDF_AttributeDelta)& AD,
727 const Standard_Boolean )
729 Handle(TPrsStd_AISPresentation) P;
730 AD->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), P);
732 if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnAddition)))
737 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnRemoval))) {
739 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnModification)))
745 return Standard_True;
748 //=======================================================================
749 //function : AfterUndo
750 //purpose : le NamedShape associe doit etre present
751 //=======================================================================
752 Standard_Boolean TPrsStd_AISPresentation::AfterUndo (const Handle(TDF_AttributeDelta)& AD,
753 const Standard_Boolean )
755 Handle(TPrsStd_AISPresentation) P;
756 AD->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), P);
758 if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnAddition)))
760 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnRemoval)))
765 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnModification)))
771 return Standard_True;
774 //=======================================================================
775 //function : AISUpdate
777 //=======================================================================
778 void TPrsStd_AISPresentation::AISUpdate()
782 Handle(AIS_InteractiveContext) aContext;
783 if ( !Label().IsNull() )
785 aContext = getAISContext();
787 Handle(TPrsStd_Driver) aDriver;
788 if ( TPrsStd_DriverTable::Get()->FindDriver(GetDriverGUID(), aDriver) )
791 if ( myAIS.IsNull() )
793 Handle(AIS_InteractiveObject) aNewObj;
794 if ( aDriver->Update(Label(), aNewObj) )
797 aNewObj->SetOwner(this);
802 Handle(AIS_InteractiveObject) anObj = myAIS;
803 if ( aDriver->Update(Label(), anObj) )
804 if ( !(anObj == myAIS) )
806 if ( !aContext.IsNull() )
807 aContext->Remove (myAIS, Standard_False);
809 // Driver has built new AIS.
811 anObj->SetOwner(this);
818 // Apply the visualization settings.
819 if ( !myAIS.IsNull() )
823 Quantity_NameOfColor aColor = Color();
824 Quantity_Color aPrsColor;
825 myAIS->Color (aPrsColor);
826 if ( !(myAIS->HasColor()) || (myAIS->HasColor() && aPrsColor.Name() != aColor) )
828 if ( !aContext.IsNull() )
829 aContext->SetColor(myAIS, aColor, Standard_False);
831 myAIS->SetColor(aColor);
835 if ( HasOwnMaterial() )
837 Graphic3d_NameOfMaterial aMaterial = Material();
838 if ( !(myAIS->HasMaterial()) || (myAIS->HasMaterial() && myAIS->Material() != aMaterial) )
840 if ( !aContext.IsNull() )
841 aContext->SetMaterial(myAIS, aMaterial, Standard_False );
843 myAIS->SetMaterial(aMaterial);
847 if ( HasOwnTransparency() )
849 const Standard_Real aTransparency = Transparency();
850 if ( myAIS->Transparency() != aTransparency )
852 if( !aContext.IsNull() )
853 aContext->SetTransparency(myAIS, aTransparency, Standard_False);
855 myAIS->SetTransparency(aTransparency);
861 const Standard_Real aWidth = Width();
862 if ( !(myAIS->HasWidth()) || (myAIS->HasWidth() && myAIS->Width() != aWidth) )
864 if ( !aContext.IsNull() )
865 aContext->SetWidth(myAIS, aWidth, Standard_False);
867 myAIS->SetWidth(aWidth);
873 const Standard_Integer aMode = Mode();
874 if ( myAIS->DisplayMode() != aMode )
875 myAIS->SetDisplayMode(aMode);
878 ActivateSelectionMode();
881 if (IsDisplayed() && !aContext.IsNull())
882 aContext->Redisplay(myAIS, Standard_False);
885 //=======================================================================
886 //function : AISDisplay
888 //=======================================================================
889 void TPrsStd_AISPresentation::AISDisplay()
891 if ( !Label().IsNull() )
893 Handle(AIS_InteractiveContext) aContext = getAISContext();
895 if ( aContext.IsNull() )
898 if ( !myAIS.IsNull() )
900 if ( !(myAIS->GetContext()).IsNull() && (myAIS->GetContext()) != aContext )
901 myAIS->GetContext()->Remove (myAIS, Standard_False);
903 if ( IsDisplayed() && aContext->IsDisplayed(myAIS) )
906 aContext->Display(myAIS, Standard_False);
908 if ( aContext->IsDisplayed(myAIS) )
909 SetDisplayed(Standard_True);
914 //=======================================================================
915 //function : AISErase
917 //=======================================================================
918 void TPrsStd_AISPresentation::AISErase(const Standard_Boolean theIsRemove)
920 Handle(AIS_InteractiveContext) aContext, anOwnContext;
922 if ( !myAIS.IsNull() )
925 if ( !Label().IsNull() )
927 if (IsAttribute(TDataXtd_Presentation::GetID()))
928 SetDisplayed(Standard_False);
930 Handle(TPrsStd_AISViewer) viewer;
931 if( !TPrsStd_AISViewer::Find(Label(), viewer) )
933 anOwnContext = myAIS->GetContext();
934 aContext = viewer->GetInteractiveContext();
938 if ( !aContext.IsNull() )
939 aContext->Remove(myAIS, Standard_False);
940 if ( !anOwnContext.IsNull() && anOwnContext != aContext )
941 anOwnContext->Remove(myAIS, Standard_False);
943 myAIS->SetToUpdate();
947 if ( !aContext.IsNull() )
948 aContext->Erase(myAIS, Standard_False);
949 if ( !anOwnContext.IsNull() && anOwnContext != aContext )
950 anOwnContext->Erase(myAIS, Standard_False);
957 if ( !anOwnContext.IsNull() )
959 anOwnContext->Remove(myAIS, Standard_False);
960 myAIS->SetToUpdate();
964 if( !anOwnContext.IsNull() )
965 anOwnContext->Erase(myAIS, Standard_False);
970 //=======================================================================
973 //=======================================================================
974 Handle(AIS_InteractiveObject) TPrsStd_AISPresentation::GetAIS() const
979 //=======================================================================
980 //function : getAISContext
982 //=======================================================================
983 Handle(AIS_InteractiveContext) TPrsStd_AISPresentation::getAISContext() const
985 Handle(TPrsStd_AISViewer) aViewer;
986 if ( TPrsStd_AISViewer::Find(Label(), aViewer) )
987 return aViewer->GetInteractiveContext();
989 return Handle_AIS_InteractiveContext();
992 //=======================================================================
993 //function : ActivateSelectionMode
994 //purpose : Activates selection mode of the interactive object.
995 // It is called internally on change of selection mode and AISUpdate().
996 //=======================================================================
997 void TPrsStd_AISPresentation::ActivateSelectionMode()
999 if (!myAIS.IsNull() && HasOwnSelectionMode())
1001 Handle(AIS_InteractiveContext) aContext = getAISContext();
1002 if (!aContext.IsNull())
1004 TColStd_ListOfInteger anActivatedModes;
1005 aContext->ActivatedModes (myAIS, anActivatedModes);
1006 Standard_Boolean isActivated = Standard_False;
1007 Standard_Integer aSelectionMode = SelectionMode();
1008 if (aSelectionMode == -1)
1010 aContext->Deactivate(myAIS);
1014 for (TColStd_ListIteratorOfListOfInteger aModeIter (anActivatedModes); aModeIter.More(); aModeIter.Next())
1016 if (aModeIter.Value() == aSelectionMode)
1018 isActivated = Standard_True;
1023 aContext->Activate (myAIS, aSelectionMode, Standard_False);