mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0027739: Visualization, TKV3d - implement individual acceleration data structure for selection of 2D persistent objects
Low-level selection algorithms has been improved to explicitly support 2D transformation persistent objects. This patch generally touches: 1) SelectMgr_SelectableObjectSet - the lists of objects has been split onto three subsets (regular, 3d-persistent, 2d-persistent). Each subset has individual BVH tree. The algorithms are now have more flexibility to update only those trees that is really required for actual camera state. 2) SelectMgr_ViewerSelector - explicitly supports Eye space selection operations on BVH tree for 2d-persistent subset. Change of camera position does not anymore affect acceleration data structure (BVH tree) of 2d-persistent selectable objects. 3) Other classes from SelectMgr have been fine-tuned to provide appropriate API. Porting notes: This patch touches very low-level selection classes. If the low-level features were used the following modifications may need to be considered for porting: 1) Iteration over objects of SelectMgr_SelectableObjectSet should now be implemented with corresponding Iterator class. 2) SelectMgr_BaseFrustum::ScaleAndTransform and derived classes return Handle(SelectMgr_BaseFrustum) instead of NCollection_Handle<> type. Small correction of test case for issue CR27739
This commit is contained in:
@@ -183,9 +183,11 @@ void StdSelect_ViewerSelector3d::Pick (const TColgp_Array1OfPnt2d& thePolyline,
|
||||
//=======================================================================
|
||||
void StdSelect_ViewerSelector3d::DisplaySensitive (const Handle(V3d_View)& theView)
|
||||
{
|
||||
for (Standard_Integer anObjectIdx = 0; anObjectIdx <= mySelectableObjects.Size(); ++anObjectIdx)
|
||||
SelectMgr_SelectableObjectSet::Iterator aSelectableIt (mySelectableObjects);
|
||||
|
||||
for (; aSelectableIt.More(); aSelectableIt.Next())
|
||||
{
|
||||
const Handle (SelectMgr_SelectableObject)& anObj = mySelectableObjects.GetObjectById (anObjectIdx);
|
||||
const Handle (SelectMgr_SelectableObject)& anObj = aSelectableIt.Value();
|
||||
|
||||
Handle(Graphic3d_Structure) aStruct = new Graphic3d_Structure (theView->Viewer()->StructureManager());
|
||||
|
||||
@@ -200,28 +202,6 @@ void StdSelect_ViewerSelector3d::DisplaySensitive (const Handle(V3d_View)& theVi
|
||||
myStructs.Append (aStruct);
|
||||
}
|
||||
|
||||
for (Standard_Integer anObjectIdx = 0; anObjectIdx <= mySelectableObjectsTrsfPers.Size(); ++anObjectIdx)
|
||||
{
|
||||
const Handle (SelectMgr_SelectableObject)& anObj = mySelectableObjectsTrsfPers.GetObjectById (anObjectIdx);
|
||||
|
||||
Handle(Graphic3d_Structure) aStruct = new Graphic3d_Structure (theView->Viewer()->StructureManager());
|
||||
|
||||
if (anObj->TransformPersistence().Flags == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (anObj->Init(); anObj->More(); anObj->Next())
|
||||
{
|
||||
if (anObj->CurrentSelection()->GetSelectionState() == SelectMgr_SOS_Activated)
|
||||
{
|
||||
computeSensitivePrs (aStruct, anObj->CurrentSelection(), anObj->Transformation(), anObj->TransformPersistence());
|
||||
}
|
||||
}
|
||||
|
||||
myStructs.Append (aStruct);
|
||||
}
|
||||
|
||||
for (Standard_Integer aStructIdx = 1; aStructIdx <= myStructs.Length(); ++aStructIdx)
|
||||
{
|
||||
Handle(Graphic3d_Structure)& aStruct = myStructs.ChangeValue (aStructIdx);
|
||||
|
Reference in New Issue
Block a user