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)
137 if ( IsDisplayed() || 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, const Standard_Boolean theTransaction)
598 getData()->SetSelectionMode (theSelectionMode, theTransaction);
600 if ( myAIS.IsNull() )
603 ActivateSelectionMode();
606 //=======================================================================
607 //function : UnsetSelectionMode
609 //=======================================================================
610 void TPrsStd_AISPresentation::UnsetSelectionMode()
612 getData()->UnsetSelectionMode ();
616 //=======================================================================
619 //=======================================================================
620 const Standard_GUID& TPrsStd_AISPresentation::ID() const
625 //=======================================================================
626 //function : BackupCopy
628 //=======================================================================
629 Handle(TDF_Attribute) TPrsStd_AISPresentation::BackupCopy() const
631 return new TPrsStd_AISPresentation;
635 //=======================================================================
636 //function : NewEmpty
638 //=======================================================================
639 Handle(TDF_Attribute) TPrsStd_AISPresentation::NewEmpty() const
641 return new TPrsStd_AISPresentation();
644 //=======================================================================
647 //=======================================================================
648 void TPrsStd_AISPresentation::Restore(const Handle(TDF_Attribute)& /*theWith*/)
653 //=======================================================================
656 //=======================================================================
657 void TPrsStd_AISPresentation::Paste (const Handle(TDF_Attribute)& theInto,
658 const Handle(TDF_RelocationTable)& ) const
660 Handle(TPrsStd_AISPresentation) anInto =
661 Handle(TPrsStd_AISPresentation)::DownCast(theInto);
664 if (!anInto->myAIS.IsNull())
666 // Save displayed flag.
667 Standard_Boolean displayed = anInto->IsDisplayed();
668 // Erase the interactive object.
669 anInto->AISErase(Standard_True);
670 // Restore the displayed flag.
672 anInto->SetDisplayed(displayed);
674 // Nullify the interactive object.
675 // It will be restored on the next call to AISUpdate().
676 anInto->myAIS.Nullify();
679 //=======================================================================
680 //function : AfterAddition
681 //purpose : erase if displayed
682 //=======================================================================
683 void TPrsStd_AISPresentation::AfterAddition()
688 //=======================================================================
689 //function : BeforeRemoval
690 //purpose : erase if displayed
691 //=======================================================================
692 void TPrsStd_AISPresentation::BeforeRemoval()
697 //=======================================================================
698 //function : BeforeForget
699 //purpose : erase if displayed
700 //=======================================================================
701 void TPrsStd_AISPresentation::BeforeForget()
703 if ( !myAIS.IsNull() )
704 { // Remove AISObject from context.
705 AISErase(Standard_True);
710 //=======================================================================
711 //function : AfterResume
712 //purpose : display if displayed
713 //=======================================================================
714 void TPrsStd_AISPresentation::AfterResume()
725 //=======================================================================
726 //function : BeforeUndo
727 //purpose : le NamedShape associe doit etre present
728 //=======================================================================
729 Standard_Boolean TPrsStd_AISPresentation::BeforeUndo (const Handle(TDF_AttributeDelta)& AD,
730 const Standard_Boolean )
732 Handle(TPrsStd_AISPresentation) P;
733 AD->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), P);
735 if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnAddition)))
740 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnRemoval))) {
742 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnModification)))
748 return Standard_True;
751 //=======================================================================
752 //function : AfterUndo
753 //purpose : le NamedShape associe doit etre present
754 //=======================================================================
755 Standard_Boolean TPrsStd_AISPresentation::AfterUndo (const Handle(TDF_AttributeDelta)& AD,
756 const Standard_Boolean )
758 Handle(TPrsStd_AISPresentation) P;
759 AD->Label().FindAttribute(TPrsStd_AISPresentation::GetID(), P);
761 if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnAddition)))
763 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnRemoval)))
768 else if (AD->IsKind(STANDARD_TYPE(TDF_DefaultDeltaOnModification)))
774 return Standard_True;
777 //=======================================================================
778 //function : AISUpdate
780 //=======================================================================
781 void TPrsStd_AISPresentation::AISUpdate()
785 Handle(AIS_InteractiveContext) aContext;
786 if ( !Label().IsNull() )
788 aContext = getAISContext();
790 Handle(TPrsStd_Driver) aDriver;
791 if ( TPrsStd_DriverTable::Get()->FindDriver(GetDriverGUID(), aDriver) )
794 if ( myAIS.IsNull() )
796 Handle(AIS_InteractiveObject) aNewObj;
797 if ( aDriver->Update(Label(), aNewObj) )
800 aNewObj->SetOwner(this);
805 Handle(AIS_InteractiveObject) anObj = myAIS;
806 if ( aDriver->Update(Label(), anObj) )
807 if ( !(anObj == myAIS) )
809 if ( !aContext.IsNull() )
810 aContext->Remove (myAIS, Standard_False);
812 // Driver has built new AIS.
814 anObj->SetOwner(this);
821 // Apply the visualization settings.
822 if ( !myAIS.IsNull() )
826 Quantity_NameOfColor aColor = Color();
827 Quantity_Color aPrsColor;
828 myAIS->Color (aPrsColor);
829 if ( !(myAIS->HasColor()) || (myAIS->HasColor() && aPrsColor.Name() != aColor) )
831 if ( !aContext.IsNull() )
832 aContext->SetColor(myAIS, aColor, Standard_False);
834 myAIS->SetColor(aColor);
838 if ( HasOwnMaterial() )
840 Graphic3d_NameOfMaterial aMaterial = Material();
841 if ( !(myAIS->HasMaterial()) || (myAIS->HasMaterial() && myAIS->Material() != aMaterial) )
843 if ( !aContext.IsNull() )
844 aContext->SetMaterial(myAIS, aMaterial, Standard_False );
846 myAIS->SetMaterial(aMaterial);
850 if ( HasOwnTransparency() )
852 const Standard_Real aTransparency = Transparency();
853 if ( myAIS->Transparency() != aTransparency )
855 if( !aContext.IsNull() )
856 aContext->SetTransparency(myAIS, aTransparency, Standard_False);
858 myAIS->SetTransparency(aTransparency);
864 const Standard_Real aWidth = Width();
865 if ( !(myAIS->HasWidth()) || (myAIS->HasWidth() && myAIS->Width() != aWidth) )
867 if ( !aContext.IsNull() )
868 aContext->SetWidth(myAIS, aWidth, Standard_False);
870 myAIS->SetWidth(aWidth);
876 const Standard_Integer aMode = Mode();
877 if ( myAIS->DisplayMode() != aMode )
878 myAIS->SetDisplayMode(aMode);
881 ActivateSelectionMode();
884 if (IsDisplayed() && !aContext.IsNull())
885 aContext->Redisplay(myAIS, Standard_False);
888 //=======================================================================
889 //function : AISDisplay
891 //=======================================================================
892 void TPrsStd_AISPresentation::AISDisplay()
894 if ( !Label().IsNull() )
896 Handle(AIS_InteractiveContext) aContext = getAISContext();
898 if ( aContext.IsNull() )
901 if ( !myAIS.IsNull() )
903 if ( !(myAIS->GetContext()).IsNull() && (myAIS->GetContext()) != aContext )
904 myAIS->GetContext()->Remove (myAIS, Standard_False);
906 if ( IsDisplayed() && aContext->IsDisplayed(myAIS) )
909 aContext->Display(myAIS, Standard_False);
911 if ( aContext->IsDisplayed(myAIS) )
912 SetDisplayed(Standard_True);
917 //=======================================================================
918 //function : AISErase
920 //=======================================================================
921 void TPrsStd_AISPresentation::AISErase(const Standard_Boolean theIsRemove)
923 Handle(AIS_InteractiveContext) aContext, anOwnContext;
925 if ( !myAIS.IsNull() )
928 if ( !Label().IsNull() )
930 if (IsAttribute(TDataXtd_Presentation::GetID()))
931 SetDisplayed(Standard_False);
933 Handle(TPrsStd_AISViewer) viewer;
934 if( !TPrsStd_AISViewer::Find(Label(), viewer) )
936 anOwnContext = myAIS->GetContext();
937 aContext = viewer->GetInteractiveContext();
941 if ( !aContext.IsNull() )
942 aContext->Remove(myAIS, Standard_False);
943 if ( !anOwnContext.IsNull() && anOwnContext != aContext )
944 anOwnContext->Remove(myAIS, Standard_False);
950 if ( !aContext.IsNull() )
951 aContext->Erase(myAIS, Standard_False);
952 if ( !anOwnContext.IsNull() && anOwnContext != aContext )
953 anOwnContext->Erase(myAIS, Standard_False);
960 if ( !anOwnContext.IsNull() )
962 anOwnContext->Remove(myAIS, Standard_False);
967 if( !anOwnContext.IsNull() )
968 anOwnContext->Erase(myAIS, Standard_False);
973 //=======================================================================
976 //=======================================================================
977 Handle(AIS_InteractiveObject) TPrsStd_AISPresentation::GetAIS() const
982 //=======================================================================
983 //function : getAISContext
985 //=======================================================================
986 Handle(AIS_InteractiveContext) TPrsStd_AISPresentation::getAISContext() const
988 Handle(TPrsStd_AISViewer) aViewer;
989 if ( TPrsStd_AISViewer::Find(Label(), aViewer) )
990 return aViewer->GetInteractiveContext();
992 return Handle_AIS_InteractiveContext();
995 //=======================================================================
996 //function : ActivateSelectionMode
997 //purpose : Activates selection mode of the interactive object.
998 // It is called internally on change of selection mode and AISUpdate().
999 //=======================================================================
1000 void TPrsStd_AISPresentation::ActivateSelectionMode()
1002 if (!myAIS.IsNull() && HasOwnSelectionMode())
1004 Handle(AIS_InteractiveContext) aContext = getAISContext();
1005 if (!aContext.IsNull())
1007 TColStd_ListOfInteger anActivatedModes;
1008 aContext->ActivatedModes (myAIS, anActivatedModes);
1009 Standard_Boolean isActivated = Standard_False;
1010 Standard_Integer aSelectionMode = SelectionMode();
1011 if (aSelectionMode == -1)
1013 aContext->Deactivate(myAIS);
1017 for (TColStd_ListIteratorOfListOfInteger aModeIter (anActivatedModes); aModeIter.More(); aModeIter.Next())
1019 if (aModeIter.Value() == aSelectionMode)
1021 isActivated = Standard_True;
1026 aContext->Activate (myAIS, aSelectionMode, Standard_False);