aStyle->SetMethod(Aspect_TOHM_COLOR);
aStyle->SetColor (Quantity_NOC_GRAY40);
}
- SetSelectionScheme (AIS_SelectionType_Select, AIS_SelectionScheme_ClearAndAdd);
- SetSelectionScheme (AIS_SelectionType_SelectInRect, AIS_SelectionScheme_ClearAndAdd);
- SetSelectionScheme (AIS_SelectionType_SelectInPoly, AIS_SelectionScheme_ClearAndAdd);
- SetSelectionScheme (AIS_SelectionType_ShiftSelect, AIS_SelectionScheme_Switch);
- SetSelectionScheme (AIS_SelectionType_ShiftSelectInRect, AIS_SelectionScheme_Switch);
- SetSelectionScheme (AIS_SelectionType_ShiftSelectInPoly, AIS_SelectionScheme_Switch);
-
InitAttributes();
}
setContextToObject (theIObj);
if (!myObjects.IsBound (theIObj))
{
- Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Displayed, theDispMode, theSelectionMode);
- myObjects.Bind (theIObj, aStatus);
+ setObjectStatus (theIObj, AIS_DS_Displayed, theDispMode, theSelectionMode);
myMainVwr->StructureManager()->RegisterObject (theIObj);
myMainPM->Display(theIObj, theDispMode);
if (theSelectionMode != -1)
{
Standard_Integer aDispMode, aHiMod, aSelModeDef;
GetDefModes (theIObj, aDispMode, aHiMod, aSelModeDef);
- Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Erased, aDispMode, theSelMode != -1 ? theSelMode : aSelModeDef);
- myObjects.Bind (theIObj, aStatus);
+ setObjectStatus (theIObj, AIS_DS_Erased, aDispMode, theSelMode != -1 ? theSelMode : aSelModeDef);
myMainVwr->StructureManager()->RegisterObject (theIObj);
}
const Handle(SelectMgr_SelectableObject)& anObj = theIObj; // to avoid ambiguity
mgrSelector->Remove (anObj);
- myObjects.UnBind (theIObj);
+ setObjectStatus (theIObj, AIS_DS_None, -1, -1);
myMainVwr->StructureManager()->UnregisterObject (theIObj);
for (V3d_ListOfViewIterator aDefViewIter (myMainVwr->DefinedViewIterator()); aDefViewIter.More(); aDefViewIter.Next())
anActiveViewIter.Value()->View()->InvalidateZLayerBoundingBox (aLayerId);
}
}
+//=======================================================================
+//function : setObjectStatus
+//purpose :
+//=======================================================================
+void AIS_InteractiveContext::setObjectStatus (const Handle(AIS_InteractiveObject)& theIObj,
+ const AIS_DisplayStatus theStatus,
+ const Standard_Integer theDispMode,
+ const Standard_Integer theSelectionMode)
+{
+ if (theStatus != AIS_DS_None)
+ {
+ Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Displayed, theDispMode, theSelectionMode);
+ myObjects.Bind (theIObj, aStatus);
+ }
+ else
+ myObjects.UnBind (theIObj);
+
+ for (PrsMgr_ListOfPresentableObjectsIter aPrsIter (theIObj->Children()); aPrsIter.More(); aPrsIter.Next())
+ {
+ Handle(AIS_InteractiveObject) aChild (Handle(AIS_InteractiveObject)::DownCast (aPrsIter.Value()));
+ if (aChild.IsNull())
+ continue;
+
+ setObjectStatus (aChild, theStatus, theDispMode, theSelectionMode);
+ }
+}
return AddSelect (theObject->GlobalSelOwner());
}
- //! Returns selection scheme used in Select
- AIS_SelectionScheme SelectionScheme (const AIS_SelectionType theType) const
- { return mySelectionSchemes.Find (theType); }
+ //! Selects everything found in the bounding rectangle defined by the pixel minima and maxima, XPMin, YPMin, XPMax, and YPMax in the view.
+ //! The objects detected are passed to the main viewer, which is then updated.
+ Standard_EXPORT AIS_StatusOfPick Select (const Standard_Integer theXPMin,
+ const Standard_Integer theYPMin,
+ const Standard_Integer theXPMax,
+ const Standard_Integer theYPMax,
+ const Handle(V3d_View)& theView,
+ const AIS_SelectionScheme theSelScheme);
+
+ //! polyline selection; clears the previous picked list
+ Standard_EXPORT AIS_StatusOfPick Select (const TColgp_Array1OfPnt2d& thePolyline,
+ const Handle(V3d_View)& theView,
+ const AIS_SelectionScheme theSelScheme);
- //! Returns selection scheme used in Select
- void SetSelectionScheme (const AIS_SelectionType theType, const AIS_SelectionScheme theScheme)
- { mySelectionSchemes.Bind (theType, theScheme); }
+ //! Stores and hilights the previous detected; Unhilights the previous picked.
+ //! @sa MoveTo().
+ Standard_EXPORT AIS_StatusOfPick Select (const AIS_SelectionScheme theSelScheme);
//! Selects everything found in the bounding rectangle defined by the pixel minima and maxima, XPMin, YPMin, XPMax, and YPMax in the view.
//! The objects detected are passed to the main viewer, which is then updated.
const Handle(V3d_View)& theView,
const Standard_Boolean theToUpdateViewer);
+ //! Sets list of owner selected/deselected using selection scheme
+ //! It is possible that selection of other objects is changed relatively selection scheme .
+ //! \param theOwner owners to change selection state
+ //! \param theSelScheme selection scheme
+ Standard_EXPORT AIS_StatusOfPick Select (const AIS_NListOfEntityOwner& theOwners,
+ const AIS_SelectionScheme theSelScheme);
+
//! Fits the view correspondingly to the bounds of selected objects.
//! Infinite objects are ignored if infinite state of AIS_InteractiveObject is set to true.
Standard_EXPORT void FitSelected (const Handle(V3d_View)& theView,
}
}
+ //! Bind/Unbind status to object and object children
+ //! \param theIObj object
+ //! \param theStatus status, if NULL, unbind object
+ Standard_EXPORT void setObjectStatus (const Handle(AIS_InteractiveObject)& theIObj,
+ const AIS_DisplayStatus theStatus,
+ const Standard_Integer theDispyMode,
+ const Standard_Integer theSelectionMode);
+
protected: //! @name internal fields
AIS_DataMapOfIOStatus myObjects;
SelectMgr_PickingStrategy myPickingStrategy; //!< picking strategy to be applied within MoveTo()
Standard_Boolean myAutoHilight;
Standard_Boolean myIsAutoActivateSelMode;
-
- NCollection_DataMap<AIS_SelectionType, AIS_SelectionScheme> mySelectionSchemes;
};
DEFINE_STANDARD_HANDLE(AIS_InteractiveContext, Standard_Transient)
const Standard_Integer theXPMax,
const Standard_Integer theYPMax,
const Handle(V3d_View)& theView,
- const Standard_Boolean toUpdateViewer)
+ const AIS_SelectionScheme theSelScheme)
{
if (theView->Viewer() != myMainVwr)
{
throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument");
}
- // all objects detected by the selector are taken, previous current objects are emptied,
- // new objects are put...
- if (myAutoHilight)
- {
- clearDynamicHighlight();
- UnhilightSelected (Standard_False);
- }
- myWasLastMain = Standard_True;
-
myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
AIS_NListOfEntityOwner aPickedOwners;
{
aPickedOwners.Append (myMainSel->Picked (aPickIter));
}
- mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_SelectInRect), myFilters);
- if (myAutoHilight)
- {
- HilightSelected (toUpdateViewer);
- }
-
- Standard_Integer aSelNum = NbSelected();
-
- return (aSelNum == 0) ? AIS_SOP_NothingSelected
- : (aSelNum == 1) ? AIS_SOP_OneSelected
- : AIS_SOP_SeveralSelected;
-
+ return Select (aPickedOwners, theSelScheme);
}
//=======================================================================
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& thePolyline,
const Handle(V3d_View)& theView,
- const Standard_Boolean toUpdateViewer)
+ const AIS_SelectionScheme theSelScheme)
{
if (theView->Viewer() != myMainVwr)
{
throw Standard_ProgramError ("AIS_InteractiveContext::Select() - invalid argument");
}
- // all objects detected by the selector are taken, previous current objects are emptied,
- // new objects are put...
- if (myAutoHilight)
- {
- clearDynamicHighlight();
- UnhilightSelected (Standard_False);
- }
-
- myWasLastMain = Standard_True;
myMainSel->Pick (thePolyline, theView);
AIS_NListOfEntityOwner aPickedOwners;
{
aPickedOwners.Append (myMainSel->Picked (aPickIter));
}
- mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_SelectInPoly), myFilters);
- if (myAutoHilight)
- {
- HilightSelected (toUpdateViewer);
- }
-
- Standard_Integer aSelNum = NbSelected();
-
- return (aSelNum == 0) ? AIS_SOP_NothingSelected
- : (aSelNum == 1) ? AIS_SOP_OneSelected
- : AIS_SOP_SeveralSelected;
-
+ return Select (aPickedOwners, theSelScheme);
}
//=======================================================================
//function : Select
//purpose :
//=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean toUpdateViewer)
+AIS_StatusOfPick AIS_InteractiveContext::Select (const AIS_SelectionScheme theSelScheme)
{
// special case: single selection of detected owner - is it necessary ?
/*if (myWasLastMain && !myLastinMain.IsNull() && !myAutoHilight &&
return getStatusOfPick (NbSelected());
}*/
- if (myAutoHilight)
- {
- clearDynamicHighlight();
- UnhilightSelected (Standard_False);
- }
-
AIS_NListOfEntityOwner aPickedOwners;
aPickedOwners.Append (myLastinMain);
- mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_Select), myFilters);
- if (myAutoHilight)
- {
- HilightSelected (toUpdateViewer);
- }
+ return Select (aPickedOwners, theSelScheme);
+}
- if(toUpdateViewer)
- {
- UpdateCurrentViewer();
- }
+//=======================================================================
+//function : Select
+//purpose :
+//=======================================================================
+AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer theXPMin,
+ const Standard_Integer theYPMin,
+ const Standard_Integer theXPMax,
+ const Standard_Integer theYPMax,
+ const Handle(V3d_View)& theView,
+ const Standard_Boolean)
+{
+ return Select (theXPMin, theYPMin, theXPMax, theYPMax, theView, AIS_SelectionScheme_ClearAndAdd);
+}
- Standard_Integer aSelNum = NbSelected();
+//=======================================================================
+//function : Select
+//purpose : Selection by polyline
+//=======================================================================
+AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& thePolyline,
+ const Handle(V3d_View)& theView,
+ const Standard_Boolean)
+{
+ return Select (thePolyline, theView, AIS_SelectionScheme_ClearAndAdd);
+}
- return (aSelNum == 0) ? AIS_SOP_NothingSelected
- : (aSelNum == 1) ? AIS_SOP_OneSelected
- : AIS_SOP_SeveralSelected;
+//=======================================================================
+//function : Select
+//purpose :
+//=======================================================================
+AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean)
+{
+ return Select (AIS_SelectionScheme_ClearAndAdd);
}
//=======================================================================
//function : ShiftSelect
//purpose :
//=======================================================================
-AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean toUpdateViewer)
+AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean)
{
- AIS_NListOfEntityOwner aPrevSelected = mySelection->Objects();
- if (myAutoHilight)
- {
- clearDynamicHighlight();
- UnhilightSelected (Standard_False);
- }
-
- AIS_NListOfEntityOwner aPickedOwners;
- aPickedOwners.Append (myLastinMain);
- mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_ShiftSelect), myFilters);
-
- if (myAutoHilight)
- {
- HilightSelected (toUpdateViewer);
- }
-
- if (toUpdateViewer)
- UpdateCurrentViewer();
-
- Standard_Integer aSelNum = NbSelected();
-
- return (aSelNum == 0) ? AIS_SOP_NothingSelected
- : (aSelNum == 1) ? AIS_SOP_OneSelected
- : AIS_SOP_SeveralSelected;
+ return Select (AIS_SelectionScheme_Switch);
}
//=======================================================================
const Standard_Integer theXPMax,
const Standard_Integer theYPMax,
const Handle(V3d_View)& theView,
- const Standard_Boolean toUpdateViewer)
+ const Standard_Boolean)
{
- if (theView->Viewer() != myMainVwr)
- {
- throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument");
- }
-
- AIS_NListOfEntityOwner aPrevSelected = mySelection->Objects();
- if (myAutoHilight)
- {
- clearDynamicHighlight();
- UnhilightSelected (Standard_False);
- }
- myWasLastMain = Standard_True;
- myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
-
- AIS_NListOfEntityOwner aPickedOwners;
- for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
- {
- aPickedOwners.Append (myMainSel->Picked (aPickIter));
- }
- mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_ShiftSelectInRect), myFilters);
-
- if (myAutoHilight)
- {
- HilightSelected (toUpdateViewer);
- }
-
- Standard_Integer aSelNum = NbSelected();
-
- return (aSelNum == 0) ? AIS_SOP_NothingSelected
- : (aSelNum == 1) ? AIS_SOP_OneSelected
- : AIS_SOP_SeveralSelected;
-
+ return Select (theXPMin, theYPMin, theXPMax, theYPMax, theView, AIS_SelectionScheme_Switch);
}
//=======================================================================
//=======================================================================
AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d& thePolyline,
const Handle(V3d_View)& theView,
- const Standard_Boolean toUpdateViewer)
+ const Standard_Boolean)
{
- if (theView->Viewer() != myMainVwr)
- {
- throw Standard_ProgramError ("AIS_InteractiveContext::ShiftSelect() - invalid argument");
- }
+ return Select (thePolyline, theView, AIS_SelectionScheme_Switch);
+}
- AIS_NListOfEntityOwner aPrevSelected = mySelection->Objects();
+//=======================================================================
+//function : Select
+//purpose :
+//=======================================================================
+AIS_StatusOfPick AIS_InteractiveContext::Select (const AIS_NListOfEntityOwner& theOwners,
+ const AIS_SelectionScheme theSelScheme)
+{
+ // all objects detected by the selector are taken, previous current objects are emptied,
+ // new objects are put...
if (myAutoHilight)
{
clearDynamicHighlight();
UnhilightSelected (Standard_False);
}
myWasLastMain = Standard_True;
- myMainSel->Pick (thePolyline, theView);
- AIS_NListOfEntityOwner aPickedOwners;
- for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
- {
- aPickedOwners.Append (myMainSel->Picked (aPickIter));
- }
- mySelection->SelectOwners (aPickedOwners, SelectionScheme (AIS_SelectionType_ShiftSelectInPoly), myFilters);
+ mySelection->SelectOwners (theOwners, theSelScheme, myFilters);
if (myAutoHilight)
{
- HilightSelected (toUpdateViewer);
+ HilightSelected (Standard_False);
}
Standard_Integer aSelNum = NbSelected();