- Removed myMainSel field from AIS_InteractiveContext and obtained this value from mgrSelector.
- Moved SelectMgr_ViewerSelector3d implementation into SelectMgr_ViewerSelector to get rid of redundant separation and extra DownCast's.
- Declared SelectMgr_ViewerSelector3d as deprecated.
#include <Prs3d_PointAspect.hxx>
#include <Prs3d_ShadingAspect.hxx>
#include <SelectMgr_EntityOwner.hxx>
-#include <SelectMgr_SelectionManager.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <TColStd_MapIteratorOfMapOfTransient.hxx>
#include <TopLoc_Location.hxx>
AIS_InteractiveContext::AIS_InteractiveContext(const Handle(V3d_Viewer)& MainViewer):
myMainPM (new PrsMgr_PresentationManager (MainViewer->StructureManager())),
myMainVwr(MainViewer),
-myMainSel(new StdSelect_ViewerSelector3d()),
myToHilightSelected(Standard_True),
mySelection(new AIS_Selection()),
myFilters (new SelectMgr_AndOrFilter(SelectMgr_FilterType_OR)),
myAutoHilight(Standard_True),
myIsAutoActivateSelMode(Standard_True)
{
- mgrSelector = new SelectMgr_SelectionManager (myMainSel);
+ mgrSelector = new SelectMgr_SelectionManager (new StdSelect_ViewerSelector3d());
myStyles[Prs3d_TypeOfHighlight_None] = myDefaultDrawer;
myStyles[Prs3d_TypeOfHighlight_Selected] = new Prs3d_Drawer();
// Object removes from Detected sequence
for (Standard_Integer aDetIter = myDetectedSeq.Lower(); aDetIter <= myDetectedSeq.Upper();)
{
- Handle(SelectMgr_EntityOwner) aPicked = myMainSel->Picked (myDetectedSeq (aDetIter));
+ Handle(SelectMgr_EntityOwner) aPicked = MainSelector()->Picked (myDetectedSeq (aDetIter));
Handle(AIS_InteractiveObject) anObj;
if (!aPicked.IsNull())
{
clearDynamicHighlight();
}
myLastPicked.Nullify();
- myMainSel->ClearPicked();
+ MainSelector()->ClearPicked();
if (toUpdate && theToRedrawImmediate)
{
myMainVwr->RedrawImmediate();
//=======================================================================
void AIS_InteractiveContext::SetPixelTolerance (const Standard_Integer thePrecision)
{
- myMainSel->SetPixelTolerance (thePrecision);
+ MainSelector()->SetPixelTolerance (thePrecision);
}
//=======================================================================
//=======================================================================
Standard_Integer AIS_InteractiveContext::PixelTolerance() const
{
- return myMainSel->PixelTolerance();
+ return MainSelector()->PixelTolerance();
}
//=======================================================================
//=======================================================================
void AIS_InteractiveContext::RebuildSelectionStructs()
{
- myMainSel->RebuildObjectsTree (Standard_True);
+ MainSelector()->RebuildObjectsTree (Standard_True);
}
//=======================================================================
{
throw Standard_ProgramError ("AIS_InteractiveContext::MoveTo() - invalid argument");
}
- myMainSel->Pick (theXPix, theYPix, theView);
+ MainSelector()->Pick (theXPix, theYPix, theView);
return moveTo (theView, theToRedrawOnUpdate);
}
{
throw Standard_ProgramError ("AIS_InteractiveContext::MoveTo() - invalid argument");
}
- myMainSel->Pick (theAxis, theView);
+ MainSelector()->Pick (theAxis, theView);
return moveTo (theView, theToRedrawOnUpdate);
}
// filling of myAISDetectedSeq sequence storing information about detected AIS objects
// (the objects must be AIS_Shapes)
- const Standard_Integer aDetectedNb = myMainSel->NbPicked();
+ const Standard_Integer aDetectedNb = MainSelector()->NbPicked();
Standard_Integer aNewDetected = 0;
Standard_Boolean toIgnoreDetTop = Standard_False;
for (Standard_Integer aDetIter = 1; aDetIter <= aDetectedNb; ++aDetIter)
{
- Handle(SelectMgr_EntityOwner) anOwner = myMainSel->Picked (aDetIter);
+ Handle(SelectMgr_EntityOwner) anOwner = MainSelector()->Picked (aDetIter);
if (anOwner.IsNull()
|| !myFilters->IsOk (anOwner))
{
// selection in current selection mode. It is necessary to check the current detected
// entity and hilight it only if the detected entity is not the same as
// previous detected (IsForcedHilight call)
- Handle(SelectMgr_EntityOwner) aNewPickedOwner = myMainSel->Picked (aNewDetected);
+ Handle(SelectMgr_EntityOwner) aNewPickedOwner = MainSelector()->Picked (aNewDetected);
if (aNewPickedOwner == myLastPicked && !aNewPickedOwner->IsForcedHilight())
{
return myLastPicked->IsSelected()
}
myLastActiveView = theView.get();
- myMainSel->Pick (thePntMin.x(), thePntMin.y(), thePntMax.x(), thePntMax.y(), theView);
+ MainSelector()->Pick (thePntMin.x(), thePntMin.y(), thePntMax.x(), thePntMax.y(), theView);
AIS_NArray1OfEntityOwner aPickedOwners;
- if (myMainSel->NbPicked() > 0)
+ if (MainSelector()->NbPicked() > 0)
{
- aPickedOwners.Resize (1, myMainSel->NbPicked(), false);
- for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
+ aPickedOwners.Resize (1, MainSelector()->NbPicked(), false);
+ for (Standard_Integer aPickIter = 1; aPickIter <= MainSelector()->NbPicked(); ++aPickIter)
{
- aPickedOwners.SetValue (aPickIter, myMainSel->Picked (aPickIter));
+ aPickedOwners.SetValue (aPickIter, MainSelector()->Picked (aPickIter));
}
}
}
myLastActiveView = theView.get();
- myMainSel->Pick (thePolyline, theView);
+ MainSelector()->Pick (thePolyline, theView);
AIS_NArray1OfEntityOwner aPickedOwners;
- if (myMainSel->NbPicked() > 0)
+ if (MainSelector()->NbPicked() > 0)
{
- aPickedOwners.Resize (1, myMainSel->NbPicked(), false);
- for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
+ aPickedOwners.Resize (1, MainSelector()->NbPicked(), false);
+ for (Standard_Integer aPickIter = 1; aPickIter <= MainSelector()->NbPicked(); ++aPickIter)
{
- aPickedOwners.SetValue (aPickIter, myMainSel->Picked (aPickIter));
+ aPickedOwners.SetValue (aPickIter, MainSelector()->Picked (aPickIter));
}
}
}
myLastActiveView = theView.get();
- myMainSel->Pick (thePnt.x(), thePnt.y(), theView);
+ MainSelector()->Pick (thePnt.x(), thePnt.y(), theView);
AIS_NArray1OfEntityOwner aPickedOwners;
- if (myMainSel->NbPicked() > 0)
+ if (MainSelector()->NbPicked() > 0)
{
- aPickedOwners.Resize (1, myMainSel->NbPicked(), false);
- for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
+ aPickedOwners.Resize (1, MainSelector()->NbPicked(), false);
+ for (Standard_Integer aPickIter = 1; aPickIter <= MainSelector()->NbPicked(); ++aPickIter)
{
- aPickedOwners.SetValue (aPickIter, myMainSel->Picked (aPickIter));
+ aPickedOwners.SetValue (aPickIter, MainSelector()->Picked (aPickIter));
}
}
if (theSelScheme == AIS_SelectionScheme_Replace && !myLastPicked.IsNull())
{
Graphic3d_Vec2i aMousePos (-1, -1);
- gp_Pnt2d aMouseRealPos = myMainSel->GetManager().GetMousePosition();
+ gp_Pnt2d aMouseRealPos = MainSelector()->GetManager().GetMousePosition();
if (!Precision::IsInfinite (aMouseRealPos.X()) &&
!Precision::IsInfinite (aMouseRealPos.Y()))
{
}
}
- mySelection->SelectOwners (theOwners, theSelScheme, myMainSel->GetManager().IsOverlapAllowed(), myFilters);
+ mySelection->SelectOwners (theOwners, theSelScheme, MainSelector()->GetManager().IsOverlapAllowed(), myFilters);
if (myAutoHilight)
{
{
myCurHighlighted = myDetectedSeq.Lower();
}
- const Handle(SelectMgr_EntityOwner)& anOwner = myMainSel->Picked (myDetectedSeq (myCurHighlighted));
+ const Handle(SelectMgr_EntityOwner)& anOwner = MainSelector()->Picked (myDetectedSeq (myCurHighlighted));
if (anOwner.IsNull())
{
return 0;
{
myCurHighlighted = myDetectedSeq.Upper();
}
- const Handle(SelectMgr_EntityOwner)& anOwner = myMainSel->Picked (myDetectedSeq (myCurHighlighted));
+ const Handle(SelectMgr_EntityOwner)& anOwner = MainSelector()->Picked (myDetectedSeq (myCurHighlighted));
if (anOwner.IsNull())
{
return 0;
Handle(SelectMgr_EntityOwner) AIS_InteractiveContext::DetectedCurrentOwner() const
{
return MoreDetected()
- ? myMainSel->Picked (myDetectedSeq (myCurDetected))
+ ? MainSelector()->Picked (myDetectedSeq (myCurDetected))
: Handle(SelectMgr_EntityOwner)();
}
Handle(AIS_InteractiveObject) AIS_InteractiveContext::DetectedCurrentObject() const
{
return MoreDetected()
- ? Handle(AIS_InteractiveObject)::DownCast (myMainSel->Picked (myDetectedSeq (myCurDetected))->Selectable())
+ ? Handle(AIS_InteractiveObject)::DownCast (MainSelector()->Picked (myDetectedSeq (myCurDetected))->Selectable())
: Handle(AIS_InteractiveObject)();
}
//=======================================================================
void AIS_InteractiveContext::DisplayActiveSensitive(const Handle(V3d_View)& theView)
{
- myMainSel->DisplaySensitive (theView);
+ MainSelector()->DisplaySensitive (theView);
}
//=======================================================================
for (TColStd_ListIteratorOfListOfInteger aModeIter ((*aStatus)->SelectionModes()); aModeIter.More(); aModeIter.Next())
{
const Handle(SelectMgr_Selection)& aSel = theObj->Selection (aModeIter.Value());
- myMainSel->DisplaySensitive (aSel, theObj->Transformation(), theView, Standard_False);
+ MainSelector()->DisplaySensitive (aSel, theObj->Transformation(), theView, Standard_False);
}
}
//=======================================================================
void AIS_InteractiveContext::ClearActiveSensitive (const Handle(V3d_View)& theView)
{
- myMainSel->ClearSensitive (theView);
+ MainSelector()->ClearSensitive (theView);
}
//=======================================================================
OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, mgrSelector.get())
OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myMainPM.get())
OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myMainVwr.get())
- OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myMainSel.get())
OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myLastActiveView)
OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, myLastPicked.get())
#include <SelectMgr_IndexedMapOfOwner.hxx>
#include <SelectMgr_ListOfFilter.hxx>
#include <SelectMgr_PickingStrategy.hxx>
+#include <SelectMgr_SelectionManager.hxx>
#include <StdSelect_ViewerSelector3d.hxx>
#include <TCollection_AsciiString.hxx>
#include <TColgp_Array1OfPnt2d.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <Quantity_Color.hxx>
-class SelectMgr_SelectionManager;
class V3d_Viewer;
class V3d_View;
class TopLoc_Location;
const Handle(PrsMgr_PresentationManager)& MainPrsMgr() const { return myMainPM; }
- const Handle(StdSelect_ViewerSelector3d)& MainSelector() const { return myMainSel; }
+ const Handle(StdSelect_ViewerSelector3d)& MainSelector() const { return mgrSelector->Selector(); }
//! Updates the current viewer.
Standard_EXPORT void UpdateCurrentViewer();
Handle(SelectMgr_SelectionManager) mgrSelector;
Handle(PrsMgr_PresentationManager) myMainPM;
Handle(V3d_Viewer) myMainVwr;
- Handle(StdSelect_ViewerSelector3d) myMainSel;
V3d_View* myLastActiveView;
Handle(SelectMgr_EntityOwner) myLastPicked;
Standard_Boolean myToHilightSelected;
SelectMgr_ViewClipRange.hxx
SelectMgr_ViewerSelector.cxx
SelectMgr_ViewerSelector.hxx
-SelectMgr_ViewerSelector3d.cxx
SelectMgr_ViewerSelector3d.hxx
class SelectMgr_ViewerSelector;
//! Abstract class for filling pixel with color.
-//! This is internal tool for SelectMgr_ViewerSelector3d::ToPixMap().
+//! This is internal tool for SelectMgr_ViewerSelector::ToPixMap().
class SelectMgr_SelectionImageFiller : public Standard_Transient
{
public:
#include <Precision.hxx>
#include <Select3D_SensitiveEntity.hxx>
#include <SelectBasics_PickResult.hxx>
+#include <SelectMgr.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <SelectMgr_FrustumBuilder.hxx>
-#include <SelectMgr_SortCriterion.hxx>
+#include <SelectMgr_SelectionImageFiller.hxx>
#include <SelectMgr_SensitiveEntitySet.hxx>
+#include <SelectMgr_SortCriterion.hxx>
#include <TColStd_Array1OfInteger.hxx>
#include <TCollection_AsciiString.hxx>
#include <TColStd_HArray1OfInteger.hxx>
#include <TColStd_ListOfInteger.hxx>
+#include <V3d_View.hxx>
#include <algorithm>
}
}
+//=======================================================================
+// Function: updateZLayers
+// Purpose :
+//=======================================================================
+void SelectMgr_ViewerSelector::updateZLayers (const Handle(V3d_View)& theView)
+{
+ myZLayerOrderMap.Clear();
+ TColStd_SequenceOfInteger aZLayers;
+ theView->Viewer()->GetAllZLayers (aZLayers);
+ Standard_Integer aPos = 0;
+ Standard_Boolean isPrevDepthWrite = true;
+ for (TColStd_SequenceOfInteger::Iterator aLayerIter (aZLayers); aLayerIter.More(); aLayerIter.Next())
+ {
+ Graphic3d_ZLayerSettings aSettings = theView->Viewer()->ZLayerSettings (aLayerIter.Value());
+ if (aSettings.ToClearDepth()
+ || isPrevDepthWrite != aSettings.ToEnableDepthWrite())
+ {
+ ++aPos;
+ }
+ isPrevDepthWrite = aSettings.ToEnableDepthWrite();
+ myZLayerOrderMap.Bind (aLayerIter.Value(), aPos);
+ }
+}
+
//=======================================================================
// function: computeFrustum
// purpose :
mySelectingVolumeMgr.AllowOverlapDetection (theIsToAllow);
}
+//=======================================================================
+// Function: Pick
+// Purpose :
+//=======================================================================
+void SelectMgr_ViewerSelector::Pick (const Standard_Integer theXPix,
+ const Standard_Integer theYPix,
+ const Handle(V3d_View)& theView)
+{
+ updateZLayers (theView);
+
+ gp_Pnt2d aMousePos (static_cast<Standard_Real> (theXPix),
+ static_cast<Standard_Real> (theYPix));
+ mySelectingVolumeMgr.InitPointSelectingVolume (aMousePos);
+
+ mySelectingVolumeMgr.SetPixelTolerance (myTolerances.Tolerance());
+ mySelectingVolumeMgr.SetCamera (theView->Camera());
+ Standard_Integer aWidth = 0, aHeight = 0;
+ theView->Window()->Size (aWidth, aHeight);
+ mySelectingVolumeMgr.SetWindowSize (aWidth, aHeight);
+
+ mySelectingVolumeMgr.BuildSelectingVolume();
+ mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
+
+ TraverseSensitives();
+}
+
+//=======================================================================
+// Function: Pick
+// Purpose :
+//=======================================================================
+void SelectMgr_ViewerSelector::Pick (const Standard_Integer theXPMin,
+ const Standard_Integer theYPMin,
+ const Standard_Integer theXPMax,
+ const Standard_Integer theYPMax,
+ const Handle(V3d_View)& theView)
+{
+ updateZLayers (theView);
+
+ gp_Pnt2d aMinMousePos (static_cast<Standard_Real> (theXPMin),
+ static_cast<Standard_Real> (theYPMin));
+ gp_Pnt2d aMaxMousePos (static_cast<Standard_Real> (theXPMax),
+ static_cast<Standard_Real> (theYPMax));
+ mySelectingVolumeMgr.InitBoxSelectingVolume (aMinMousePos,
+ aMaxMousePos);
+
+ mySelectingVolumeMgr.SetCamera (theView->Camera());
+ Standard_Integer aWidth = 0, aHeight = 0;
+ theView->Window()->Size (aWidth, aHeight);
+ mySelectingVolumeMgr.SetWindowSize (aWidth, aHeight);
+
+ mySelectingVolumeMgr.BuildSelectingVolume();
+ mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
+ TraverseSensitives();
+}
+
+//=======================================================================
+// Function: Pick
+// Purpose : Selection using a polyline
+//=======================================================================
+void SelectMgr_ViewerSelector::Pick (const TColgp_Array1OfPnt2d& thePolyline,
+ const Handle(V3d_View)& theView)
+{
+ updateZLayers (theView);
+
+ mySelectingVolumeMgr.InitPolylineSelectingVolume (thePolyline);
+ mySelectingVolumeMgr.SetCamera (theView->Camera());
+ Standard_Integer aWidth = 0, aHeight = 0;
+ theView->Window()->Size (aWidth, aHeight);
+ mySelectingVolumeMgr.SetWindowSize (aWidth, aHeight);
+ mySelectingVolumeMgr.BuildSelectingVolume();
+ mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
+
+ TraverseSensitives();
+}
+
+//=======================================================================
+// Function: Pick
+// Purpose :
+//=======================================================================
+void SelectMgr_ViewerSelector::Pick (const gp_Ax1& theAxis,
+ const Handle(V3d_View)& theView)
+{
+ updateZLayers (theView);
+
+ mySelectingVolumeMgr.InitAxisSelectingVolume (theAxis);
+ mySelectingVolumeMgr.BuildSelectingVolume();
+ mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
+
+ TraverseSensitives();
+}
+
+//=======================================================================
+//function : ToPixMap
+//purpose :
+//=======================================================================
+Standard_Boolean SelectMgr_ViewerSelector::ToPixMap (Image_PixMap& theImage,
+ const Handle(V3d_View)& theView,
+ const StdSelect_TypeOfSelectionImage theType,
+ const Standard_Integer thePickedIndex)
+{
+ if (theImage.IsEmpty())
+ {
+ throw Standard_ProgramError ("SelectMgr_ViewerSelector::ToPixMap() has been called with empty image");
+ }
+
+ Handle(SelectMgr_SelectionImageFiller) aFiller = SelectMgr_SelectionImageFiller::CreateFiller (theImage, this, theType);
+ if (aFiller.IsNull())
+ {
+ return Standard_False;
+ }
+
+ const Standard_Integer aSizeX = static_cast<Standard_Integer> (theImage.SizeX());
+ const Standard_Integer aSizeY = static_cast<Standard_Integer> (theImage.SizeY());
+ for (Standard_Integer aRowIter = 0; aRowIter < aSizeY; ++aRowIter)
+ {
+ for (Standard_Integer aColIter = 0; aColIter < aSizeX; ++aColIter)
+ {
+ Pick (aColIter, aRowIter, theView);
+ aFiller->Fill (aColIter, aRowIter, thePickedIndex);
+ }
+ }
+ aFiller->Flush();
+ return Standard_True;
+}
+
+//=======================================================================
+// Function: DisplaySensitive.
+// Purpose : Display active primitives.
+//=======================================================================
+void SelectMgr_ViewerSelector::DisplaySensitive (const Handle(V3d_View)& theView)
+{
+ for (SelectMgr_SelectableObjectSet::Iterator aSelectableIt (mySelectableObjects); aSelectableIt.More(); aSelectableIt.Next())
+ {
+ Handle(Graphic3d_Structure) aStruct = new Graphic3d_Structure (theView->Viewer()->StructureManager());
+ const Handle (SelectMgr_SelectableObject)& anObj = aSelectableIt.Value();
+ for (SelectMgr_SequenceOfSelection::Iterator aSelIter (anObj->Selections()); aSelIter.More(); aSelIter.Next())
+ {
+ if (aSelIter.Value()->GetSelectionState() == SelectMgr_SOS_Activated)
+ {
+ SelectMgr::ComputeSensitivePrs (aStruct, aSelIter.Value(), anObj->Transformation(), anObj->TransformPersistence());
+ }
+ }
+
+ myStructs.Append (aStruct);
+ }
+
+ for (Graphic3d_SequenceOfStructure::Iterator aStructIter (myStructs); aStructIter.More(); aStructIter.Next())
+ {
+ Handle(Graphic3d_Structure)& aStruct = aStructIter.ChangeValue();
+ aStruct->SetDisplayPriority (10);
+ aStruct->Display();
+ }
+
+ theView->Update();
+}
+
+//=======================================================================
+// Function: ClearSensitive
+// Purpose :
+//=======================================================================
+void SelectMgr_ViewerSelector::ClearSensitive (const Handle(V3d_View)& theView)
+{
+ for (Graphic3d_SequenceOfStructure::Iterator aStructIter (myStructs); aStructIter.More(); aStructIter.Next())
+ {
+ const Handle(Graphic3d_Structure)& aPrs = aStructIter.ChangeValue();
+ aPrs->Erase();
+ aPrs->Clear();
+ aPrs->Remove();
+ }
+ myStructs.Clear();
+
+ if (!theView.IsNull())
+ {
+ theView->Update();
+ }
+}
+
+//=======================================================================
+//function : DisplaySenstive
+//purpose :
+//=======================================================================
+void SelectMgr_ViewerSelector::DisplaySensitive (const Handle(SelectMgr_Selection)& theSel,
+ const gp_Trsf& theTrsf,
+ const Handle(V3d_View)& theView,
+ const Standard_Boolean theToClearOthers)
+{
+ if (theToClearOthers)
+ {
+ ClearSensitive (theView);
+ }
+
+ Handle(Graphic3d_Structure) aStruct = new Graphic3d_Structure (theView->Viewer()->StructureManager());
+
+ SelectMgr::ComputeSensitivePrs (aStruct, theSel, theTrsf, Handle(Graphic3d_TransformPers)());
+
+ myStructs.Append (aStruct);
+ myStructs.Last()->SetDisplayPriority (10);
+ myStructs.Last()->Display();
+
+ theView->Update();
+}
+
//=======================================================================
//function : DumpJson
//purpose :
OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myIsLeftChildQueuedFirst)
OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myMapOfObjectSensitives.Extent())
+
+ OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myStructs.Length())
+ for (Graphic3d_SequenceOfStructure::Iterator aStructsIt (myStructs); aStructsIt.More(); aStructsIt.Next())
+ {
+ const Handle(Graphic3d_Structure)& aStructure = aStructsIt.Value();
+ OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, aStructure)
+ }
}
//=======================================================================
#ifndef _SelectMgr_ViewerSelector_HeaderFile
#define _SelectMgr_ViewerSelector_HeaderFile
-#include <Standard_Transient.hxx>
+#include <Graphic3d_SequenceOfStructure.hxx>
#include <NCollection_DataMap.hxx>
#include <OSD_Chronometer.hxx>
-#include <TColStd_SequenceOfInteger.hxx>
-#include <TColStd_HArray1OfInteger.hxx>
#include <Select3D_BVHBuilder3d.hxx>
+#include <SelectMgr_BVHThreadPool.hxx>
#include <SelectMgr_IndexedDataMapOfOwnerCriterion.hxx>
#include <SelectMgr_SelectingVolumeManager.hxx>
#include <SelectMgr_Selection.hxx>
#include <SelectMgr_StateOfSelection.hxx>
#include <SelectMgr_ToleranceMap.hxx>
#include <SelectMgr_TypeOfDepthTolerance.hxx>
+#include <SelectMgr_ViewerSelector.hxx>
#include <Standard_OStream.hxx>
-#include <SelectMgr_BVHThreadPool.hxx>
+#include <Standard_Transient.hxx>
+#include <StdSelect_TypeOfSelectionImage.hxx>
+#include <TColStd_HArray1OfInteger.hxx>
+#include <TColStd_SequenceOfInteger.hxx>
+class Graphic3d_Structure;
+class Graphic3d_TransformPers;
class SelectMgr_SelectionManager;
class SelectMgr_SensitiveEntitySet;
class SelectMgr_EntityOwner;
class Select3D_SensitiveEntity;
+class V3d_View;
// resolve name collisions with X11 headers
#ifdef Status
friend class SelectMgr_SelectionManager;
public:
+ //! Constructs an empty selector object.
+ Standard_EXPORT SelectMgr_ViewerSelector();
+
//! Returns custom pixel tolerance value.
Standard_Integer CustomPixelTolerance() const { return myTolerances.CustomTolerance(); }
//! mark both included and overlapped entities as matched
Standard_EXPORT void AllowOverlapDetection (const Standard_Boolean theIsToAllow);
+public:
+
+ //! Picks the sensitive entity at the pixel coordinates of
+ //! the mouse <theXPix> and <theYPix>. The selector looks for touched areas and owners.
+ Standard_EXPORT void Pick (const Standard_Integer theXPix,
+ const Standard_Integer theYPix,
+ const Handle(V3d_View)& theView);
+
+ //! Picks the sensitive entity according to the minimum
+ //! and maximum pixel values <theXPMin>, <theYPMin>, <theXPMax>
+ //! and <theYPMax> defining a 2D area for selection in the 3D view aView.
+ Standard_EXPORT void Pick (const Standard_Integer theXPMin,
+ const Standard_Integer theYPMin,
+ const Standard_Integer theXPMax,
+ const Standard_Integer theYPMax,
+ const Handle(V3d_View)& theView);
+
+ //! pick action - input pixel values for polyline selection for selection.
+ Standard_EXPORT void Pick (const TColgp_Array1OfPnt2d& thePolyline,
+ const Handle(V3d_View)& theView);
+
+ //! Picks the sensitive entity according to the input axis.
+ //! This is geometric intersection 3D objects by axis
+ //! (camera parameters are ignored and objects with transform persistance are skipped).
+ Standard_EXPORT void Pick (const gp_Ax1& theAxis,
+ const Handle(V3d_View)& theView);
+
+ //! Dump of detection results into image.
+ //! This method performs axis picking for each pixel in the image
+ //! and generates a color depending on picking results and selection image type.
+ //! @param theImage result image, should be initialized
+ //! @param theView 3D view defining camera position
+ //! @param theType type of image to define
+ //! @param thePickedIndex index of picked entity (1 means topmost)
+ Standard_EXPORT Standard_Boolean ToPixMap (Image_PixMap& theImage,
+ const Handle(V3d_View)& theView,
+ const StdSelect_TypeOfSelectionImage theType,
+ const Standard_Integer thePickedIndex = 1);
+
+public:
+
+ //! Displays sensitives in view <theView>.
+ Standard_EXPORT void DisplaySensitive (const Handle(V3d_View)& theView);
+
+ Standard_EXPORT void ClearSensitive (const Handle(V3d_View)& theView);
+
+ Standard_EXPORT void DisplaySensitive (const Handle(SelectMgr_Selection)& theSel,
+ const gp_Trsf& theTrsf,
+ const Handle(V3d_View)& theView,
+ const Standard_Boolean theToClearOthers = Standard_True);
+
//! Dumps the content of me into the stream
Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
protected:
- Standard_EXPORT SelectMgr_ViewerSelector();
-
//! Traverses BVH containing all added selectable objects and
//! finds candidates for further search of overlap
Standard_EXPORT void TraverseSensitives();
const gp_GTrsf& theInversedTrsf,
SelectMgr_SelectingVolumeManager& theMgr);
+ //! Update z-layers order map.
+ Standard_EXPORT void updateZLayers (const Handle(V3d_View)& theView);
+
private:
//! Checks if the entity given requires to scale current selecting frustum
Standard_Boolean myIsLeftChildQueuedFirst;
SelectMgr_MapOfObjectSensitives myMapOfObjectSensitives;
+ Graphic3d_SequenceOfStructure myStructs; //!< list of debug presentations
+
};
DEFINE_STANDARD_HANDLE(SelectMgr_ViewerSelector, Standard_Transient)
+++ /dev/null
-// Created on: 1995-03-15
-// Created by: Robert COUBLANC
-// Copyright (c) 1995-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#include <SelectMgr_ViewerSelector3d.hxx>
-
-#include <Graphic3d_SequenceOfHClipPlane.hxx>
-#include <Graphic3d_Structure.hxx>
-#include <math_BullardGenerator.hxx>
-#include <Quantity_ColorHasher.hxx>
-#include <TColgp_Array1OfPnt2d.hxx>
-#include <SelectMgr.hxx>
-#include <SelectMgr_EntityOwner.hxx>
-#include <SelectMgr_SelectableObject.hxx>
-#include <SelectMgr_Selection.hxx>
-#include <SelectMgr_SelectionImageFiller.hxx>
-#include <V3d_View.hxx>
-#include <V3d_Viewer.hxx>
-
-IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_ViewerSelector3d, SelectMgr_ViewerSelector)
-
-//=======================================================================
-// Function : Constructor
-// Purpose :
-//=======================================================================
-SelectMgr_ViewerSelector3d::SelectMgr_ViewerSelector3d()
-{
- //
-}
-
-//=======================================================================
-// Function: Pick
-// Purpose :
-//=======================================================================
-void SelectMgr_ViewerSelector3d::Pick (const Standard_Integer theXPix,
- const Standard_Integer theYPix,
- const Handle(V3d_View)& theView)
-{
- updateZLayers (theView);
-
- gp_Pnt2d aMousePos (static_cast<Standard_Real> (theXPix),
- static_cast<Standard_Real> (theYPix));
- mySelectingVolumeMgr.InitPointSelectingVolume (aMousePos);
-
- mySelectingVolumeMgr.SetPixelTolerance (myTolerances.Tolerance());
- mySelectingVolumeMgr.SetCamera (theView->Camera());
- Standard_Integer aWidth = 0, aHeight = 0;
- theView->Window()->Size (aWidth, aHeight);
- mySelectingVolumeMgr.SetWindowSize (aWidth, aHeight);
-
- mySelectingVolumeMgr.BuildSelectingVolume();
- mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
-
- TraverseSensitives();
-}
-
-//=======================================================================
-// Function: Pick
-// Purpose :
-//=======================================================================
-void SelectMgr_ViewerSelector3d::Pick (const Standard_Integer theXPMin,
- const Standard_Integer theYPMin,
- const Standard_Integer theXPMax,
- const Standard_Integer theYPMax,
- const Handle(V3d_View)& theView)
-{
- updateZLayers (theView);
-
- gp_Pnt2d aMinMousePos (static_cast<Standard_Real> (theXPMin),
- static_cast<Standard_Real> (theYPMin));
- gp_Pnt2d aMaxMousePos (static_cast<Standard_Real> (theXPMax),
- static_cast<Standard_Real> (theYPMax));
- mySelectingVolumeMgr.InitBoxSelectingVolume (aMinMousePos,
- aMaxMousePos);
-
- mySelectingVolumeMgr.SetCamera (theView->Camera());
- Standard_Integer aWidth = 0, aHeight = 0;
- theView->Window()->Size (aWidth, aHeight);
- mySelectingVolumeMgr.SetWindowSize (aWidth, aHeight);
-
- mySelectingVolumeMgr.BuildSelectingVolume();
- mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
- TraverseSensitives();
-}
-
-//=======================================================================
-// Function: Pick
-// Purpose : Selection using a polyline
-//=======================================================================
-void SelectMgr_ViewerSelector3d::Pick (const TColgp_Array1OfPnt2d& thePolyline,
- const Handle(V3d_View)& theView)
-{
- updateZLayers (theView);
-
- mySelectingVolumeMgr.InitPolylineSelectingVolume (thePolyline);
- mySelectingVolumeMgr.SetCamera (theView->Camera());
- Standard_Integer aWidth = 0, aHeight = 0;
- theView->Window()->Size (aWidth, aHeight);
- mySelectingVolumeMgr.SetWindowSize (aWidth, aHeight);
- mySelectingVolumeMgr.BuildSelectingVolume();
- mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
-
- TraverseSensitives();
-}
-
-//=======================================================================
-// Function: Pick
-// Purpose :
-//=======================================================================
-void SelectMgr_ViewerSelector3d::Pick (const gp_Ax1& theAxis,
- const Handle(V3d_View)& theView)
-{
- updateZLayers (theView);
-
- mySelectingVolumeMgr.InitAxisSelectingVolume (theAxis);
- mySelectingVolumeMgr.BuildSelectingVolume();
- mySelectingVolumeMgr.SetViewClipping (theView->ClipPlanes(), Handle(Graphic3d_SequenceOfHClipPlane)(), NULL);
-
- TraverseSensitives();
-}
-
-//=======================================================================
-// Function: DisplaySensitive.
-// Purpose : Display active primitives.
-//=======================================================================
-void SelectMgr_ViewerSelector3d::DisplaySensitive (const Handle(V3d_View)& theView)
-{
- for (SelectMgr_SelectableObjectSet::Iterator aSelectableIt (mySelectableObjects); aSelectableIt.More(); aSelectableIt.Next())
- {
- Handle(Graphic3d_Structure) aStruct = new Graphic3d_Structure (theView->Viewer()->StructureManager());
- const Handle (SelectMgr_SelectableObject)& anObj = aSelectableIt.Value();
- for (SelectMgr_SequenceOfSelection::Iterator aSelIter (anObj->Selections()); aSelIter.More(); aSelIter.Next())
- {
- if (aSelIter.Value()->GetSelectionState() == SelectMgr_SOS_Activated)
- {
- SelectMgr::ComputeSensitivePrs (aStruct, aSelIter.Value(), anObj->Transformation(), anObj->TransformPersistence());
- }
- }
-
- myStructs.Append (aStruct);
- }
-
- for (Graphic3d_SequenceOfStructure::Iterator aStructIter (myStructs); aStructIter.More(); aStructIter.Next())
- {
- Handle(Graphic3d_Structure)& aStruct = aStructIter.ChangeValue();
- aStruct->SetDisplayPriority (10);
- aStruct->Display();
- }
-
- theView->Update();
-}
-
-//=======================================================================
-// Function: ClearSensitive
-// Purpose :
-//=======================================================================
-void SelectMgr_ViewerSelector3d::ClearSensitive (const Handle(V3d_View)& theView)
-{
- for (Graphic3d_SequenceOfStructure::Iterator aStructIter (myStructs); aStructIter.More(); aStructIter.Next())
- {
- const Handle(Graphic3d_Structure)& aPrs = aStructIter.ChangeValue();
- aPrs->Erase();
- aPrs->Clear();
- aPrs->Remove();
- }
- myStructs.Clear();
-
- if (!theView.IsNull())
- {
- theView->Update();
- }
-}
-
-//=======================================================================
-//function : DisplaySenstive
-//purpose :
-//=======================================================================
-void SelectMgr_ViewerSelector3d::DisplaySensitive (const Handle(SelectMgr_Selection)& theSel,
- const gp_Trsf& theTrsf,
- const Handle(V3d_View)& theView,
- const Standard_Boolean theToClearOthers)
-{
- if (theToClearOthers)
- {
- ClearSensitive (theView);
- }
-
- Handle(Graphic3d_Structure) aStruct = new Graphic3d_Structure (theView->Viewer()->StructureManager());
-
- SelectMgr::ComputeSensitivePrs (aStruct, theSel, theTrsf, Handle(Graphic3d_TransformPers)());
-
- myStructs.Append (aStruct);
- myStructs.Last()->SetDisplayPriority (10);
- myStructs.Last()->Display();
-
- theView->Update();
-}
-
-//=======================================================================
-// Function: updateZLayers
-// Purpose :
-//=======================================================================
-void SelectMgr_ViewerSelector3d::updateZLayers (const Handle(V3d_View)& theView)
-{
- myZLayerOrderMap.Clear();
- TColStd_SequenceOfInteger aZLayers;
- theView->Viewer()->GetAllZLayers (aZLayers);
- Standard_Integer aPos = 0;
- Standard_Boolean isPrevDepthWrite = true;
- for (TColStd_SequenceOfInteger::Iterator aLayerIter (aZLayers); aLayerIter.More(); aLayerIter.Next())
- {
- Graphic3d_ZLayerSettings aSettings = theView->Viewer()->ZLayerSettings (aLayerIter.Value());
- if (aSettings.ToClearDepth()
- || isPrevDepthWrite != aSettings.ToEnableDepthWrite())
- {
- ++aPos;
- }
- isPrevDepthWrite = aSettings.ToEnableDepthWrite();
- myZLayerOrderMap.Bind (aLayerIter.Value(), aPos);
- }
-}
-
-//=======================================================================
-//function : ToPixMap
-//purpose :
-//=======================================================================
-Standard_Boolean SelectMgr_ViewerSelector3d::ToPixMap (Image_PixMap& theImage,
- const Handle(V3d_View)& theView,
- const StdSelect_TypeOfSelectionImage theType,
- const Standard_Integer thePickedIndex)
-{
- if (theImage.IsEmpty())
- {
- throw Standard_ProgramError("SelectMgr_ViewerSelector3d::ToPixMap() has been called with empty image");
- }
-
- Handle(SelectMgr_SelectionImageFiller) aFiller = SelectMgr_SelectionImageFiller::CreateFiller (theImage, this, theType);
- if (aFiller.IsNull())
- {
- return Standard_False;
- }
-
- const Standard_Integer aSizeX = static_cast<Standard_Integer> (theImage.SizeX());
- const Standard_Integer aSizeY = static_cast<Standard_Integer> (theImage.SizeY());
- for (Standard_Integer aRowIter = 0; aRowIter < aSizeY; ++aRowIter)
- {
- for (Standard_Integer aColIter = 0; aColIter < aSizeX; ++aColIter)
- {
- Pick (aColIter, aRowIter, theView);
- aFiller->Fill (aColIter, aRowIter, thePickedIndex);
- }
- }
- aFiller->Flush();
- return Standard_True;
-}
-
-//=======================================================================
-//function : DumpJson
-//purpose :
-//=======================================================================
-void SelectMgr_ViewerSelector3d::DumpJson (Standard_OStream& theOStream, Standard_Integer) const
-{
- OCCT_DUMP_TRANSIENT_CLASS_BEGIN (theOStream)
-
- OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myStructs.Length())
- for (Graphic3d_SequenceOfStructure::Iterator aStructsIt (myStructs); aStructsIt.More(); aStructsIt.Next())
- {
- const Handle(Graphic3d_Structure)& aStructure = aStructsIt.Value();
- OCCT_DUMP_FIELD_VALUE_POINTER (theOStream, aStructure)
- }
-}
#ifndef _SelectMgr_ViewerSelector3d_HeaderFile
#define _SelectMgr_ViewerSelector3d_HeaderFile
-#include <Graphic3d_SequenceOfStructure.hxx>
#include <SelectMgr_ViewerSelector.hxx>
-#include <SelectMgr_Selection.hxx>
-#include <StdSelect_TypeOfSelectionImage.hxx>
-class Graphic3d_Structure;
-class Graphic3d_TransformPers;
-class V3d_View;
-
-//! Selector Usable by Viewers from V3d
-class SelectMgr_ViewerSelector3d : public SelectMgr_ViewerSelector
-{
- DEFINE_STANDARD_RTTIEXT(SelectMgr_ViewerSelector3d, SelectMgr_ViewerSelector)
-public:
-
- //! Constructs an empty 3D selector object.
- Standard_EXPORT SelectMgr_ViewerSelector3d();
-
- //! Picks the sensitive entity at the pixel coordinates of
- //! the mouse <theXPix> and <theYPix>. The selector looks for touched areas and owners.
- Standard_EXPORT void Pick (const Standard_Integer theXPix,
- const Standard_Integer theYPix,
- const Handle(V3d_View)& theView);
-
- //! Picks the sensitive entity according to the minimum
- //! and maximum pixel values <theXPMin>, <theYPMin>, <theXPMax>
- //! and <theYPMax> defining a 2D area for selection in the 3D view aView.
- Standard_EXPORT void Pick (const Standard_Integer theXPMin,
- const Standard_Integer theYPMin,
- const Standard_Integer theXPMax,
- const Standard_Integer theYPMax,
- const Handle(V3d_View)& theView);
-
- //! pick action - input pixel values for polyline selection for selection.
- Standard_EXPORT void Pick (const TColgp_Array1OfPnt2d& thePolyline,
- const Handle(V3d_View)& theView);
-
- //! Picks the sensitive entity according to the input axis.
- //! This is geometric intersection 3D objects by axis
- //! (camera parameters are ignored and objects with transform persistance are skipped).
- Standard_EXPORT void Pick (const gp_Ax1& theAxis,
- const Handle(V3d_View)& theView);
-
- //! Dump of detection results into image.
- //! This method performs axis picking for each pixel in the image
- //! and generates a color depending on picking results and selection image type.
- //! @param theImage result image, should be initialized
- //! @param theView 3D view defining camera position
- //! @param theType type of image to define
- //! @param thePickedIndex index of picked entity (1 means topmost)
- Standard_EXPORT Standard_Boolean ToPixMap (Image_PixMap& theImage,
- const Handle(V3d_View)& theView,
- const StdSelect_TypeOfSelectionImage theType,
- const Standard_Integer thePickedIndex = 1);
-
-public:
-
- //! Displays sensitives in view <theView>.
- Standard_EXPORT void DisplaySensitive (const Handle(V3d_View)& theView);
-
- Standard_EXPORT void ClearSensitive (const Handle(V3d_View)& theView);
-
- Standard_EXPORT void DisplaySensitive (const Handle(SelectMgr_Selection)& theSel,
- const gp_Trsf& theTrsf,
- const Handle(V3d_View)& theView,
- const Standard_Boolean theToClearOthers = Standard_True);
-
- //! Dumps the content of me into the stream
- Standard_EXPORT void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const;
-
-protected:
-
- //! Update z-layers order map.
- Standard_EXPORT void updateZLayers (const Handle(V3d_View)& theView);
-
-protected:
-
- Graphic3d_SequenceOfStructure myStructs; //!< list of debug presentations
-};
-
-DEFINE_STANDARD_HANDLE(SelectMgr_ViewerSelector3d, SelectMgr_ViewerSelector)
+Standard_DEPRECATED("Deprecated alias to moved class")
+typedef SelectMgr_ViewerSelector SelectMgr_ViewerSelector3d;
#endif
#ifndef _StdSelect_ViewerSelector3d_HeaderFile
#define _StdSelect_ViewerSelector3d_HeaderFile
-#include <SelectMgr_ViewerSelector3d.hxx>
+#include <SelectMgr_ViewerSelector.hxx>
-typedef SelectMgr_ViewerSelector3d StdSelect_ViewerSelector3d;
+typedef SelectMgr_ViewerSelector StdSelect_ViewerSelector3d;
#endif // _StdSelect_ViewerSelector3d_HeaderFile