// Modified by XAB & Serguei Dec 97 (angle &deviation coeffts)
-#include <AIS_InteractiveContext.ixx>
-
-//#include <AIS_DataMapIteratorOfDataMapOfInteractiveInteger.hxx>
-#include <TColStd_ListIteratorOfListOfInteger.hxx>
-#include <TColStd_MapIteratorOfMapOfTransient.hxx>
-#include <AIS_LocalContext.hxx>
-#include <AIS_LocalStatus.hxx>
-#include <Precision.hxx>
-#include <AIS_Selection.hxx>
-#include <AIS_DataMapIteratorOfDataMapOfIOStatus.hxx>
#include <AIS_ConnectedInteractive.hxx>
-#include <AIS_MultipleConnectedInteractive.hxx>
#include <AIS_DataMapIteratorOfDataMapOfILC.hxx>
+#include <AIS_DataMapIteratorOfDataMapOfIOStatus.hxx>
#include <AIS_GlobalStatus.hxx>
+#include <AIS_InteractiveContext.hxx>
+#include <AIS_InteractiveObject.hxx>
+#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <AIS_LocalContext.hxx>
+#include <AIS_LocalStatus.hxx>
#include <AIS_MapIteratorOfMapOfInteractive.hxx>
-#include <PrsMgr_ModedPresentation.hxx>
-#include <Visual3d_ViewManager.hxx>
-#include <Visual3d_View.hxx>
-#include <Prs3d_ShadingAspect.hxx>
+#include <AIS_MultipleConnectedInteractive.hxx>
#include <AIS_Shape.hxx>
+#include <AIS_Trihedron.hxx>
+#include <Geom_Axis2Placement.hxx>
#include <Graphic3d_AspectFillArea3d.hxx>
#include <HLRBRep.hxx>
-#include <Prs3d_IsoAspect.hxx>
+#include <OSD_Environment.hxx>
+#include <Precision.hxx>
+#include <Prs3d_BasicAspect.hxx>
#include <Prs3d_DatumAspect.hxx>
+#include <Prs3d_IsoAspect.hxx>
+#include <Prs3d_LineAspect.hxx>
#include <Prs3d_PlaneAspect.hxx>
+#include <Prs3d_ShadingAspect.hxx>
+#include <PrsMgr_ModedPresentation.hxx>
#include <PrsMgr_PresentableObject.hxx>
+#include <Quantity_Color.hxx>
+#include <SelectMgr_EntityOwner.hxx>
+#include <SelectMgr_Filter.hxx>
+#include <SelectMgr_OrFilter.hxx>
+#include <SelectMgr_SelectionManager.hxx>
#include <Standard_Atomic.hxx>
+#include <Standard_Transient.hxx>
+#include <Standard_Type.hxx>
#include <StdSelect_ViewerSelector3d.hxx>
+#include <TCollection_AsciiString.hxx>
+#include <TCollection_ExtendedString.hxx>
+#include <TColStd_ListIteratorOfListOfInteger.hxx>
+#include <TColStd_MapIteratorOfMapOfTransient.hxx>
+#include <TopLoc_Location.hxx>
+#include <TopoDS_Shape.hxx>
#include <UnitsAPI.hxx>
+#include <V3d_View.hxx>
+#include <V3d_Viewer.hxx>
-#include <AIS_Trihedron.hxx>
-#include <Geom_Axis2Placement.hxx>
-#include <OSD_Environment.hxx>
-
-#include <AIS_ListIteratorOfListOfInteractive.hxx>
-#include <AIS_InteractiveObject.hxx>
-#include <SelectMgr_EntityOwner.hxx>
+IMPLEMENT_STANDARD_RTTIEXT(AIS_InteractiveContext,MMgt_TShared)
+//#include <AIS_DataMapIteratorOfDataMapOfInteractiveInteger.hxx>
namespace
{
- static volatile Standard_Integer THE_AIS_INDEX_SEL = 0;
- static volatile Standard_Integer THE_AIS_INDEX_CUR = 0;
-
- static TCollection_AsciiString AIS_Context_NewSelName()
- {
- return TCollection_AsciiString ("AIS_SelContext_")
- + TCollection_AsciiString (Standard_Atomic_Increment (&THE_AIS_INDEX_SEL));
- }
-
- static TCollection_AsciiString AIS_Context_NewCurName()
- {
- return TCollection_AsciiString ("AIS_CurContext_")
- + TCollection_AsciiString (Standard_Atomic_Increment (&THE_AIS_INDEX_CUR));
- }
-
typedef NCollection_DataMap<Handle(SelectMgr_SelectableObject), Handle(SelectMgr_IndexedMapOfOwner)> AIS_MapOfObjectOwners;
typedef NCollection_DataMap<Handle(SelectMgr_SelectableObject), Handle(SelectMgr_IndexedMapOfOwner)>::Iterator AIS_MapIteratorOfMapOfObjectOwners;
}
AIS_InteractiveContext::AIS_InteractiveContext(const Handle(V3d_Viewer)& MainViewer):
mgrSelector(new SelectMgr_SelectionManager()),
-myMainPM(new PrsMgr_PresentationManager3d(MainViewer->Viewer())),
+myMainPM(new PrsMgr_PresentationManager3d(MainViewer->StructureManager())),
myMainVwr(MainViewer),
myMainSel(new StdSelect_ViewerSelector3d()),
myWasLastMain(Standard_False),
myToHilightSelected(Standard_True),
myFilters(new SelectMgr_OrFilter()),
myDefaultDrawer(new Prs3d_Drawer()),
+mySelection(new AIS_Selection()),
myDefaultColor(Quantity_NOC_GOLDENROD),
myHilightColor(Quantity_NOC_CYAN1),
mySelectionColor(Quantity_NOC_GRAY80),
myCurLocalIndex(0),
myAISCurDetected(0),
myZDetectionFlag(0),
-myIsAutoActivateSelMode( Standard_True )
+myIsAutoActivateSelMode(Standard_True)
{
InitAttributes();
}
void AIS_InteractiveContext::Delete() const
{
- // clear the static current selection
- AIS_Selection::ClearCurrentSelection();
-
- // to avoid an exception
- if (AIS_Selection::Find (mySelectionName.ToCString()))
- {
- AIS_Selection::Remove (mySelectionName.ToCString());
- }
-
- // to avoid an exception
- if (AIS_Selection::Find (myCurrentName.ToCString()))
- {
- AIS_Selection::Remove (myCurrentName.ToCString());
- }
+ // clear the current selection
+ mySelection->Select();
// let's remove one reference explicitly. this operation's supposed to
// be performed when mgrSelector will be destroyed but anyway...
- mgrSelector->Remove (myMainSel);
+ const Handle(SelectMgr_ViewerSelector)& aSelector = myMainSel; // to avoid ambiguity
+ mgrSelector->Remove (aSelector);
Handle(AIS_InteractiveContext) aNullContext;
for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
{
Handle(AIS_InteractiveObject) anObj = anObjIter.Key();
anObj->SetContext (aNullContext);
+ for (anObj->Init(); anObj->More(); anObj->Next())
+ {
+ anObj->CurrentSelection()->UpdateBVHStatus (SelectMgr_TBU_Renew);
+ }
}
MMgt_TShared::Delete();
}
-//=======================================================================
-//function : AIS_SelectionName
-//purpose :
-//=======================================================================
-const TCollection_AsciiString& AIS_InteractiveContext::SelectionName() const
-{
- if(!HasOpenedContext())
- return mySelectionName;
- return myLocalContexts(myCurLocalIndex)->SelectionName();
-
-}
-
-
-
//=======================================================================
//function : UpdateCurrentViewer
//purpose :
for (TColStd_MapIteratorOfMapOfTransient aDispMapIter (aDispMap); aDispMapIter.More(); aDispMapIter.Next())
{
const Handle(Standard_Transient)& aTransient = aDispMapIter.Key();
- anObj = *((Handle(AIS_InteractiveObject)* )&aTransient);
+ anObj = Handle(AIS_InteractiveObject)::DownCast (aTransient);
theListOfIO.Append (anObj);
}
}
const Standard_Boolean theIsVisibleInView,
const AIS_DisplayStatus theStatus) const
{
- const Graphic3d_CView* aCView = reinterpret_cast<const Graphic3d_CView* >(theView->View()->CView());
- const Standard_Integer aViewId = aCView->ViewId;
+ Handle(Graphic3d_CView) aViewImpl = theView->View();
+ const Standard_Integer aViewId = aViewImpl->Identification();
for (AIS_DataMapIteratorOfDataMapOfIOStatus anObjIter (myObjects); anObjIter.More(); anObjIter.Next())
{
if (theStatus != AIS_DS_None
continue;
}
- Handle(Graphic3d_ViewAffinity) anAffinity = myMainVwr->Viewer()->ObjectAffinity (anObjIter.Key());
+ Handle(Graphic3d_ViewAffinity) anAffinity = myMainVwr->StructureManager()->ObjectAffinity (anObjIter.Key());
const Standard_Boolean isVisible = anAffinity->IsVisible (aViewId);
if (isVisible == theIsVisibleInView)
{
return;
}
- Handle(Graphic3d_ViewAffinity) anAffinity = myMainVwr->Viewer()->ObjectAffinity (theIObj);
- const Graphic3d_CView* aCView = reinterpret_cast<const Graphic3d_CView* >(theView->View()->CView());
- anAffinity->SetVisible (aCView->ViewId, theIsVisible == Standard_True);
+ Handle(Graphic3d_ViewAffinity) anAffinity = myMainVwr->StructureManager()->ObjectAffinity (theIObj);
+ Handle(Graphic3d_CView) aViewImpl = theView->View();
+ anAffinity->SetVisible (aViewImpl->Identification(), theIsVisible == Standard_True);
if (theIsVisible)
{
- theView->View()->ChangeHiddenObjects()->Remove (theIObj);
+ theView->View()->ChangeHiddenObjects()->Remove (theIObj.get());
}
else
{
- theView->View()->ChangeHiddenObjects()->Add (theIObj);
+ theView->View()->ChangeHiddenObjects()->Add (theIObj.get());
}
}
{
Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Displayed, theDispMode, theSelectionMode);
myObjects.Bind (theIObj, aStatus);
- Handle(Graphic3d_ViewAffinity) anAffinity = myMainVwr->Viewer()->RegisterObject (theIObj);
+ Handle(Graphic3d_ViewAffinity) anAffinity = myMainVwr->StructureManager()->RegisterObject (theIObj);
myMainPM->Display(theIObj, theDispMode);
if (theSelectionMode != -1)
{
- if (!mgrSelector->Contains (theIObj))
+ const Handle(SelectMgr_SelectableObject)& anObj = theIObj; // to avoid ambiguity
+ if (!mgrSelector->Contains (anObj))
{
mgrSelector->Load (theIObj);
}
return;
}
- // Erase presentations for all display modes different from aDispMode.
+ // Mark the presentation modes hidden of interactive object different from aDispMode.
// Then make sure aDispMode is displayed and maybe highlighted.
// Finally, activate selection mode <SelMode> if not yet activated.
TColStd_ListOfInteger aModesToRemove;
{
myMainPM->Unhighlight (theIObj, anOldMode);
}
- myMainPM->Erase (theIObj, anOldMode);
+ myMainPM->SetVisibility (theIObj, anOldMode, Standard_False);
}
}
if (aStatus->IsHilighted())
{
const Standard_Integer aHiMod = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
- myMainPM->Highlight (theIObj, aHiMod);
+ myMainPM->Color (theIObj, aStatus->HilightColor(), aHiMod);
}
if (theSelectionMode != -1)
{
- if (!mgrSelector->Contains (theIObj))
+ const Handle(SelectMgr_SelectableObject)& anObj = theIObj; // to avoid ambiguity
+ if (!mgrSelector->Contains (anObj))
{
mgrSelector->Load (theIObj);
}
if (!mgrSelector->IsActivated (theIObj, theSelectionMode))
{
+ if (!aStatus->IsSModeIn (theSelectionMode))
+ aStatus->AddSelectionMode (theSelectionMode);
mgrSelector->Activate (theIObj, theSelectionMode, myMainSel);
}
}
}
// Register theIObj in the selection manager to prepare further activation of selection
- if (!mgrSelector->Contains (theIObj))
+ const Handle(SelectMgr_SelectableObject)& anObj = theIObj; // to avoid ambiguity
+ if (!mgrSelector->Contains (anObj))
{
mgrSelector->Load (theIObj);
}
}
Standard_Boolean isFound = Standard_False;
- Handle(AIS_Selection) aSelIter = AIS_Selection::Selection (myCurrentName.ToCString());
- for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
+ for (mySelection->Init(); mySelection->More(); mySelection->Next())
{
- Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (mySelection->Value());
Display (anObj, Standard_False);
isFound = Standard_True;
}
}
Standard_Boolean isFound = Standard_False;
- Handle(AIS_Selection) aSelIter = AIS_Selection::Selection(myCurrentName.ToCString());
- for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
+ mySelection->Init();
+ while (mySelection->More())
{
- Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
+ Handle(SelectMgr_EntityOwner) anOwner = Handle(SelectMgr_EntityOwner)::DownCast (mySelection->Value());
+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable());
+
Erase (anObj, Standard_False);
isFound = Standard_True;
+
+ mySelection->Init();
}
if (isFound && theToUpdateViewer)
return Standard_False;
}
+//=======================================================================
+//function : IsHilighted
+//purpose : Returns true if the objects global status is set to highlighted.
+// theIsCustomColor flag defines if highlight color is not equal to OCCT's
+// default Quantity_NOC_WHITE color. If theIsCustomColor is true,
+// custom highlight color name will be stored to theCustomColorName
+//=======================================================================
+Standard_Boolean AIS_InteractiveContext::IsHilighted (const Handle(SelectMgr_EntityOwner)& theOwner,
+ Standard_Boolean& theIsCustomColor,
+ Quantity_NameOfColor& theCustomColorName) const
+{
+ if (theOwner.IsNull() || !theOwner->HasSelectable())
+ return Standard_False;
+ const Handle(AIS_InteractiveObject) anObj =
+ Handle(AIS_InteractiveObject)::DownCast (theOwner->Selectable());
+
+ if (!myObjects.IsBound (anObj))
+ return Standard_False;
+
+ const Handle(AIS_GlobalStatus)& anObjStatus = myObjects (anObj);
+ if (anObjStatus->IsHilighted())
+ {
+ if (anObjStatus->HilightColor() != Quantity_NOC_WHITE)
+ {
+ theIsCustomColor = Standard_True;
+ theCustomColorName = anObjStatus->HilightColor();
+ }
+ else
+ {
+ theIsCustomColor = Standard_False;
+ }
+
+ return Standard_True;
+ }
+
+ return Standard_False;
+}
//=======================================================================
//function : IsDisplayed
Handle(StdSelect_ViewerSelector3d) aTempSel = myLocalContexts (myCurLocalIndex)->MainSelector();
mgrSelector->Update (theIObj, aTempSel, Standard_False);
}
+
+ // if the object or its part is highlighted dynamically, it is necessary to apply location transformation
+ // to its highlight structure immediately
+ if (!myLastPicked.IsNull() && myLastPicked->Selectable() == theIObj)
+ {
+ myLastPicked->UpdateHighlightTrsf (myMainVwr,
+ myMainPM,
+ theIObj->HasDisplayMode() ? theIObj->DisplayMode() : 0);
+ }
}
//=======================================================================
//=======================================================================
void AIS_InteractiveContext::SetDeviationAngle (const Standard_Real theAngle)
{
- myDefaultDrawer->SetDeviationCoefficient (theAngle);
+ myDefaultDrawer->SetDeviationAngle (theAngle);
}
//=======================================================================
if (aStatus->GraphicStatus() == AIS_DS_Displayed)
{
myMainPM->Display (anObj, theMode);
+ if (!myLastPicked.IsNull() && myLastPicked->Selectable() == anObj)
+ {
+ myMainPM->BeginImmediateDraw();
+ myMainPM->Unhighlight (anObj, myDisplayMode);
+ myMainPM->EndImmediateDraw (myMainVwr);
+ }
if (aStatus->IsSubIntensityOn())
{
myMainPM->Color (anObj, mySubIntensity, theMode);
redisplayPrsRecModes (theIObj, theToUpdateViewer);
}
+//=======================================================================
+//function : SetIsoOnTriangulation
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::IsoOnTriangulation (const Standard_Boolean theIsEnabled,
+ const Handle(AIS_InteractiveObject)& theObject)
+{
+ if (theObject.IsNull())
+ {
+ return;
+ }
+
+ theObject->SetIsoOnTriangulation (theIsEnabled);
+}
+
//=======================================================================
//function : SetDeviationCoefficient
//purpose :
theIObj->SetWidth (theWidth);
redisplayPrsRecModes (theIObj, theToUpdateViewer);
+ if (!myLastinMain.IsNull() && myLastinMain->Selectable() == theIObj)
+ {
+ if (myLastinMain->IsAutoHilight())
+ {
+ const Standard_Integer aHiMode =
+ theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
+ myLastinMain->HilightWithColor (myMainPM, myLastinMain->IsSelected() ? mySelectionColor : myHilightColor, aHiMode);
+ }
+ else
+ {
+ theIObj->HilightOwnerWithColor (myMainPM, myLastinMain->IsSelected() ? mySelectionColor : myHilightColor, myLastinMain);
+ }
+ }
}
//=======================================================================
}
Standard_Boolean isFound = Standard_False;
- Handle(AIS_Selection) aSelIter = AIS_Selection::Selection (myCurrentName.ToCString());
- for (aSelIter->Init(); aSelIter->More(); aSelIter->Next())
+ for (mySelection->Init(); mySelection->More(); mySelection->Next())
{
isFound = Standard_True;
- Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter->Value());
+ Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (mySelection->Value());
anObj->SetAspect (theAspect, theIsGlobalChange);
}
- if (isFound
- && theToUpdateViewer)
+ if (isFound && theToUpdateViewer)
{
myMainVwr->Update();
}
theStatus += TCollection_AsciiString (aDispModeIter.Value());
theStatus += "\n";
}
- if (IsCurrent (theIObj)) theStatus +="\t| Current\n";
if (IsSelected(theIObj)) theStatus +="\t| Selected\n";
theStatus += "\t| Active Selection Modes in the MainViewer :\n";
? myDisplayMode
: 0);
theHiMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : theDispMode;
- theSelMode = theIObj->HasSelectionMode() ? theIObj->SelectionMode() : -1;
+ theSelMode = theIObj->GlobalSelectionMode();
}
//=======================================================================
myMainPM->SetVisibility (theIObj, aDispModeIter.Value(), Standard_False);
}
- if (IsCurrent (theIObj)
+ if (IsSelected (theIObj)
&& !aStatus->IsDModeIn (aDispMode))
{
myMainPM->SetVisibility (theIObj, aDispMode, Standard_False);
{
mgrSelector->Deactivate (theIObj, aSelModeIter.Value(), myMainSel);
}
+ aStatus->ClearSelectionModes();
aStatus->SetGraphicStatus (AIS_DS_Erased);
if (theToUpdateviewer)
}
}
+//=======================================================================
+//function : unhighlightOwners
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::unhighlightOwners (const Handle(AIS_InteractiveObject)& theObject)
+{
+ mySelection->Init();
+ while (mySelection->More())
+ {
+ const Handle(SelectMgr_EntityOwner) anOwner =
+ Handle(SelectMgr_EntityOwner)::DownCast (mySelection->Value());
+ if (anOwner->Selectable() == theObject)
+ {
+ if (anOwner->IsSelected())
+ {
+ AddOrRemoveSelected (anOwner, Standard_False);
+ mySelection->Init();
+ continue;
+ }
+ }
+ mySelection->Next();
+ }
+}
+
//=======================================================================
//function : ClearGlobal
//purpose :
{
// for cases when reference shape of connected interactives was not displayed
// but its selection primitives were calculated
- mgrSelector->Remove (theIObj);
+ const Handle(SelectMgr_SelectableObject)& anObj = theIObj; // to avoid ambiguity
+ mgrSelector->Remove (anObj);
return;
}
Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
+ unhighlightOwners (theIObj);
for (TColStd_ListIteratorOfListOfInteger aDispModeIter (aStatus->DisplayedModes()); aDispModeIter.More(); aDispModeIter.Next())
{
- if (aStatus->IsHilighted())
- {
- if (IsCurrent (theIObj))
- {
- AddOrRemoveCurrentObject (theIObj, theToUpdateviewer);
- }
- else if (myMainPM->IsHighlighted (theIObj, aDispModeIter.Value()))
- {
- myMainPM->Unhighlight (theIObj, aDispModeIter.Value());
- }
- }
myMainPM->Erase (theIObj, aDispModeIter.Value());
myMainPM->Clear (theIObj, aDispModeIter.Value());
- if (theIObj->HasHilightMode())
- {
- Standard_Integer im = theIObj->HilightMode();
- myMainPM->Unhighlight (theIObj, im);
- myMainPM->Erase (theIObj, im);
- }
}
// Object removes from Detected sequence
}
}
- if (myLastinMain == theIObj)
- {
- myLastinMain.Nullify();
- }
- if (myLastPicked == theIObj)
- {
- myLastPicked.Nullify();
- }
-
// remove IO from the selection manager to avoid memory leaks
- mgrSelector->Remove (theIObj);
+ const Handle(SelectMgr_SelectableObject)& anObj = theIObj; // to avoid ambiguity
+ mgrSelector->Remove (anObj);
myObjects.UnBind (theIObj);
- myMainVwr->Viewer()->UnregisterObject (theIObj);
+ myMainVwr->StructureManager()->UnregisterObject (theIObj);
for (myMainVwr->InitDefinedViews(); myMainVwr->MoreDefinedViews(); myMainVwr->NextDefinedViews())
{
- myMainVwr->DefinedView()->View()->ChangeHiddenObjects()->Remove (theIObj);
+ myMainVwr->DefinedView()->View()->ChangeHiddenObjects()->Remove (theIObj.get());
}
- if (theToUpdateviewer
- && aStatus->GraphicStatus() == AIS_DS_Displayed)
+ if (!myLastinMain.IsNull() && myLastinMain->Selectable() == theIObj)
+ myLastinMain.Nullify();
+ if (!myLastPicked.IsNull() && myLastPicked->Selectable() == theIObj)
+ myLastPicked.Nullify();
+ myMainPM->ClearImmediateDraw();
+
+ if (theToUpdateviewer && aStatus->GraphicStatus() == AIS_DS_Displayed)
{
myMainVwr->Update();
}
}
//=======================================================================
-//function : SetSelectionMode
+//function : IsoOnTriangulation
//purpose :
//=======================================================================
-void AIS_InteractiveContext::SetSelectionMode (const Handle(AIS_InteractiveObject)& ,
- const Standard_Integer )
+void AIS_InteractiveContext::IsoOnTriangulation (const Standard_Boolean theToSwitchOn)
{
- //
+ myDefaultDrawer->SetIsoOnTriangulation (theToSwitchOn);
}
//=======================================================================
-//function : UnsetSelectionMode
+//function : IsoOnTriangulation
//purpose :
//=======================================================================
-void AIS_InteractiveContext::UnsetSelectionMode (const Handle(AIS_InteractiveObject)& )
+Standard_Boolean AIS_InteractiveContext::IsoOnTriangulation() const
{
- //
+ return myDefaultDrawer->IsoOnTriangulation();
}
-//=======================================================================
//function : SetPixelTolerance
//purpose : Disables the mechanism of adaptive tolerance calculation in
// SelectMgr_ViewerSelector and sets the given tolerance for ALL
// sensitive entities activated. For more information, see
// SelectMgr_ViewerSelector.hxx
//=======================================================================
-void AIS_InteractiveContext::SetPixelTolerance (const Standard_Real thePrecision)
+void AIS_InteractiveContext::SetPixelTolerance (const Standard_Integer thePrecision)
{
if (HasOpenedContext())
{
//function : PixelTolerance
//purpose :
//=======================================================================
-Standard_Real AIS_InteractiveContext::PixelTolerance() const
+Standard_Integer AIS_InteractiveContext::PixelTolerance() const
{
return HasOpenedContext()
? myLocalContexts (myCurLocalIndex)->PixelTolerance()
: myMainSel->PixelTolerance();
}
+//=======================================================================
+//function : SetSelectionSensitivity
+//purpose : Allows to manage sensitivity of a particular selection of interactive object theObject
+//=======================================================================
+void AIS_InteractiveContext::SetSelectionSensitivity (const Handle(AIS_InteractiveObject)& theObject,
+ const Standard_Integer theMode,
+ const Standard_Integer theNewSensitivity)
+{
+ if (HasOpenedContext())
+ {
+ myLocalContexts (myCurLocalIndex)->SetSelectionSensitivity (theObject, theMode, theNewSensitivity);
+ return;
+ }
+
+ mgrSelector->SetSelectionSensitivity (theObject, theMode, theNewSensitivity);
+}
+
//=======================================================================
//function : IsInLocal
//purpose :
void AIS_InteractiveContext::InitAttributes()
{
mgrSelector->Add (myMainSel);
- myCurrentName = AIS_Context_NewCurName();
- mySelectionName = AIS_Context_NewSelName();
-
- AIS_Selection::CreateSelection (mySelectionName.ToCString());
- AIS_Selection::CreateSelection (myCurrentName.ToCString());
myDefaultDrawer->SetShadingAspectGlobal (Standard_False);
Graphic3d_MaterialAspect aMat (Graphic3d_NOM_BRASS);
aLineAspect->SetTypeOfLine (Aspect_TOL_DASH);
// tolerance to 2 pixels...
- SetPixelTolerance (2.0);
+ SetPixelTolerance (2);
// Customizing the drawer for trihedrons and planes...
Handle(Prs3d_DatumAspect) aTrihAspect = myDefaultDrawer->DatumAspect();
{
if (theAssembly->IsInstance ("AIS_MultipleConnectedInteractive"))
{
- const Handle(AIS_MultipleConnectedInteractive)& theObj =
- Handle(AIS_MultipleConnectedInteractive)::DownCast (theAssembly);
+ Handle(AIS_MultipleConnectedInteractive) theObj (Handle(AIS_MultipleConnectedInteractive)::DownCast (theAssembly));
theObj->Disconnect (theObjToDisconnect);
- mgrSelector->Remove (theObjToDisconnect);
+ const Handle(SelectMgr_SelectableObject)& anObj = theObjToDisconnect; // to avoid ambiguity
+ mgrSelector->Remove (anObj);
}
- else if (theAssembly->IsInstance ("AIS_ConnectedInteractive") && theObjToDisconnect == NULL)
+ else if (theAssembly->IsInstance ("AIS_ConnectedInteractive") && theObjToDisconnect.IsNull())
{
- const Handle(AIS_ConnectedInteractive)& theObj =
- Handle(AIS_ConnectedInteractive)::DownCast (theAssembly);
+ Handle(AIS_ConnectedInteractive) theObj (Handle(AIS_ConnectedInteractive)::DownCast (theAssembly));
theObj->Disconnect();
- mgrSelector->Remove (theObj);
+ const Handle(SelectMgr_SelectableObject)& anObj = theObj; // to avoid ambiguity
+ mgrSelector->Remove (anObj);
}
else
return;
const Standard_Real theMargin,
const Standard_Boolean theToUpdate)
{
- Standard_CString aSelName = HasOpenedContext() ?
- myLocalContexts (myCurLocalIndex)->SelectionName().ToCString()
- : myCurrentName.ToCString();
+ const Handle(AIS_Selection)& aSelection = HasOpenedContext() ?
+ myLocalContexts(myCurLocalIndex)->Selection() : mySelection;
Bnd_Box aBndSelected;
- const Handle(AIS_Selection)& aSelection = AIS_Selection::Selection (aSelName);
AIS_MapOfObjectOwners anObjectOwnerMap;
for (aSelection->Init(); aSelection->More(); aSelection->Next())
{
- const Handle(AIS_InteractiveObject)& anObj =
- Handle(AIS_InteractiveObject)::DownCast (aSelection->Value());
+ Handle(AIS_InteractiveObject) anObj (Handle(AIS_InteractiveObject)::DownCast (aSelection->Value()));
if (!anObj.IsNull())
{
if (anObj->IsInfinite())
}
else
{
- const Handle(SelectMgr_EntityOwner)& anOwner =
- Handle(SelectMgr_EntityOwner)::DownCast (aSelection->Value());
+ Handle(SelectMgr_EntityOwner) anOwner (Handle(SelectMgr_EntityOwner)::DownCast (aSelection->Value()));
if (anOwner.IsNull())
continue;