mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-19 13:40:49 +03:00
Compare commits
1 Commits
V7_8_1
...
CR28390_71
Author | SHA1 | Date | |
---|---|---|---|
|
59df732aaa |
@@ -95,6 +95,7 @@ myCurLocalIndex(0),
|
||||
myCurDetected(0),
|
||||
myCurHighlighted(0),
|
||||
myZDetectionFlag(0),
|
||||
myPickingStrategy (SelectMgr_PickingStrategy_FirstAcceptable),
|
||||
myIsAutoActivateSelMode(Standard_True)
|
||||
{
|
||||
InitAttributes();
|
||||
|
@@ -17,33 +17,32 @@
|
||||
#ifndef _AIS_InteractiveContext_HeaderFile
|
||||
#define _AIS_InteractiveContext_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <AIS_DataMapOfIOStatus.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <StdSelect_ViewerSelector3d.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Quantity_NameOfColor.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <AIS_DataMapOfILC.hxx>
|
||||
#include <AIS_DataMapOfIOStatus.hxx>
|
||||
#include <AIS_DisplayMode.hxx>
|
||||
#include <AIS_DisplayStatus.hxx>
|
||||
#include <AIS_ClearMode.hxx>
|
||||
#include <AIS_KindOfInteractive.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <AIS_ListOfInteractive.hxx>
|
||||
#include <AIS_Selection.hxx>
|
||||
#include <AIS_StatusOfDetection.hxx>
|
||||
#include <AIS_StatusOfPick.hxx>
|
||||
#include <AIS_TypeOfIso.hxx>
|
||||
#include <Aspect_TypeOfFacingModel.hxx>
|
||||
#include <Graphic3d_HighlightStyle.hxx>
|
||||
#include <Graphic3d_NameOfMaterial.hxx>
|
||||
#include <Standard_ShortReal.hxx>
|
||||
#include <TColStd_ListOfInteger.hxx>
|
||||
#include <AIS_DisplayMode.hxx>
|
||||
#include <AIS_TypeOfIso.hxx>
|
||||
#include <AIS_StatusOfDetection.hxx>
|
||||
#include <AIS_StatusOfPick.hxx>
|
||||
#include <TColgp_Array1OfPnt2d.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Graphic3d_HighlightStyle.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <SelectMgr_IndexedMapOfOwner.hxx>
|
||||
#include <AIS_ClearMode.hxx>
|
||||
#include <SelectMgr_ListOfFilter.hxx>
|
||||
#include <SelectMgr_PickingStrategy.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <StdSelect_ViewerSelector3d.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
#include <TColgp_Array1OfPnt2d.hxx>
|
||||
#include <TColStd_ListOfInteger.hxx>
|
||||
#include <TopAbs_ShapeEnum.hxx>
|
||||
#include <SelectMgr_ListOfFilter.hxx>
|
||||
#include <AIS_ListOfInteractive.hxx>
|
||||
@@ -144,6 +143,26 @@ public:
|
||||
|
||||
Standard_EXPORT Standard_Boolean GetAutoActivateSelection() const;
|
||||
|
||||
//! Setup picking strategy - which entities detected by picking line will be accepted, considering Selection Filters.
|
||||
//! By default (SelectMgr_PickingStrategy_FirstAcceptable), Selection Filters reduce the list of entities
|
||||
//! so that the context accepts topmost in remaining.
|
||||
//!
|
||||
//! This means that entities behind non-selectable (by filters) parts can be picked by user.
|
||||
//! If this behavior is undesirable, and user wants that non-selectable (by filters) parts
|
||||
//! should remain an obstacle for picking, SelectMgr_PickingStrategy_OnlyTopmost can be set instead.
|
||||
//!
|
||||
//! Notice, that since Selection Manager operates only objects registered in it,
|
||||
//! SelectMgr_PickingStrategy_OnlyTopmost will NOT prevent picking entities behind
|
||||
//! visible by unregistered in Selection Manager presentations (e.g. deactivated).
|
||||
//! Hence, SelectMgr_PickingStrategy_OnlyTopmost changes behavior only with Selection Filters enabled.
|
||||
void SetPickingStrategy (const SelectMgr_PickingStrategy theStrategy)
|
||||
{
|
||||
myPickingStrategy = theStrategy;
|
||||
}
|
||||
|
||||
//! Return picking strategy; SelectMgr_PickingStrategy_FirstAcceptable by default.
|
||||
SelectMgr_PickingStrategy PickingStrategy() const { return myPickingStrategy; }
|
||||
|
||||
//! Controls the choice between the using the display
|
||||
//! and selection modes of open local context which you
|
||||
//! have defined and activating those available by default.
|
||||
@@ -1719,6 +1738,7 @@ protected:
|
||||
Standard_Integer myCurDetected;
|
||||
Standard_Integer myCurHighlighted;
|
||||
Standard_Boolean myZDetectionFlag;
|
||||
SelectMgr_PickingStrategy myPickingStrategy; //!< picking strategy to be applied within MoveTo()
|
||||
Standard_Boolean myIsAutoActivateSelMode;
|
||||
|
||||
};
|
||||
|
@@ -329,16 +329,22 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
// (the objects must be AIS_Shapes)
|
||||
const Standard_Integer aDetectedNb = myMainSel->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);
|
||||
if (anOwner.IsNull()
|
||||
|| !myFilters->IsOk (anOwner))
|
||||
{
|
||||
if (myPickingStrategy == SelectMgr_PickingStrategy_OnlyTopmost)
|
||||
{
|
||||
toIgnoreDetTop = Standard_True;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (aNewDetected < 1)
|
||||
if (aNewDetected < 1
|
||||
&& !toIgnoreDetTop)
|
||||
{
|
||||
aNewDetected = aDetIter;
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@ SelectMgr_ListIteratorOfListOfFilter.hxx
|
||||
SelectMgr_ListOfFilter.hxx
|
||||
SelectMgr_OrFilter.cxx
|
||||
SelectMgr_OrFilter.hxx
|
||||
SelectMgr_PickingStrategy.hxx
|
||||
SelectMgr_RectangularFrustum.cxx
|
||||
SelectMgr_RectangularFrustum.hxx
|
||||
SelectMgr_SelectableObject.cxx
|
||||
|
24
src/SelectMgr/SelectMgr_PickingStrategy.hxx
Normal file
24
src/SelectMgr/SelectMgr_PickingStrategy.hxx
Normal file
@@ -0,0 +1,24 @@
|
||||
// Copyright (c) 2017 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.
|
||||
|
||||
#ifndef _SelectMgr_PickingStrategy_HeaderFile
|
||||
#define _SelectMgr_PickingStrategy_HeaderFile
|
||||
|
||||
//! Enumeration defines picking strategy - which entities detected by picking line will be accepted, considering selection filters.
|
||||
enum SelectMgr_PickingStrategy
|
||||
{
|
||||
SelectMgr_PickingStrategy_FirstAcceptable, //!< the first detected entity passing selection filter is accepted (e.g. any)
|
||||
SelectMgr_PickingStrategy_OnlyTopmost //!< only topmost detected entity passing selection filter is accepted
|
||||
};
|
||||
|
||||
#endif // _SelectMgr_PickingStrategy_HeaderFile
|
@@ -10059,6 +10059,30 @@ static int VSelectionProperties (Draw_Interpretor& theDi,
|
||||
{
|
||||
aHiStyle->SetTransparency (aCmd.ArgFloat ("hiTransp"));
|
||||
}
|
||||
if (aCmd.HasOption ("pickStrategy"))
|
||||
{
|
||||
SelectMgr_PickingStrategy aStrategy = SelectMgr_PickingStrategy_FirstAcceptable;
|
||||
TCollection_AsciiString aVal (aCmd.Arg ("pickStrategy", 0).c_str());
|
||||
aVal.LowerCase();
|
||||
if (aVal == "first"
|
||||
|| aVal == "firstaccepted"
|
||||
|| aVal == "firstacceptable")
|
||||
{
|
||||
aStrategy = SelectMgr_PickingStrategy_FirstAcceptable;
|
||||
}
|
||||
else if (aVal == "topmost"
|
||||
|| aVal == "onlyTopmost")
|
||||
{
|
||||
aStrategy = SelectMgr_PickingStrategy_OnlyTopmost;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Syntax error: unknwon picking strategy '" << aVal << "'\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
aCtx->SetPickingStrategy (aStrategy);
|
||||
}
|
||||
|
||||
if (aCmd.HasOption ("print") || theArgsNb == 1)
|
||||
{
|
||||
@@ -10687,6 +10711,9 @@ void ViewerTest::ViewerCommands(Draw_Interpretor& theCommands)
|
||||
"\n vselprops [options]"
|
||||
"\n Customizes selection and dynamic highlight parameters for the whole interactive context:"
|
||||
"\n -autoActivate {0|1} : disables|enables default computation and activation of global selection mode"
|
||||
"\n -pickStrategy {first|topmost} : defines picking strategy"
|
||||
"\n 'first' to pick first acceptable (default)"
|
||||
"\n 'topmost' to pick only topmost (and nothing, if topmost is rejected by filters)"
|
||||
"\n -pixTol value : sets up pixel tolerance"
|
||||
"\n -selColor {name|r g b} : sets selection color"
|
||||
"\n -hiColor {name|r g b} : sets dynamic highlight color"
|
||||
|
Reference in New Issue
Block a user