0026146: Visualization, Select3D_ISensitivePointSet - eliminate crash when clearing...
authorabv <abv@opencascade.com>
Thu, 7 May 2015 05:53:38 +0000 (08:53 +0300)
committerabv <abv@opencascade.com>
Fri, 8 May 2015 05:54:28 +0000 (08:54 +0300)
Remove classes Select3D_ISensitivePointSet and Select3D_BoundarySensitivePointSet; use Select3D_SensitivePoly directly for boundary selection.
Make last argument in Select3D_SensitiveFace non-default to ensure that value is always explicitly specified by the caller.
Inherit SelectMgr_FrustumBuilder from Standard_Transient to use normal Handle instead of NCollection_Handle.

Add test case bugs/vis/bug26146.

18 files changed:
src/AIS/AIS_PlaneTrihedron.cxx
src/AIS/AIS_Trihedron.cxx
src/MeshVS/MeshVS_Mesh.cxx
src/Select3D/FILES
src/Select3D/Select3D.cdl
src/Select3D/Select3D_BoundarySensitivePointSet.cxx [deleted file]
src/Select3D/Select3D_BoundarySensitivePointSet.hxx [deleted file]
src/Select3D/Select3D_ISensitivePointSet.hxx [deleted file]
src/Select3D/Select3D_InteriorSensitivePointSet.cxx
src/Select3D/Select3D_InteriorSensitivePointSet.hxx
src/Select3D/Select3D_SensitiveFace.cxx
src/Select3D/Select3D_SensitiveFace.hxx
src/SelectMgr/SelectMgr_BaseFrustum.cxx
src/SelectMgr/SelectMgr_BaseFrustum.hxx
src/SelectMgr/SelectMgr_Frustum.hxx
src/SelectMgr/SelectMgr_FrustumBuilder.cxx
src/SelectMgr/SelectMgr_FrustumBuilder.hxx
tests/bugs/vis/bug26146 [new file with mode: 0644]

index b9b5795..7ea3d8a 100644 (file)
@@ -47,8 +47,6 @@
 #include <UnitsAPI.hxx>
 #include <TColgp_Array1OfPnt.hxx>
 
-#include <Select3D_SensitiveFace.hxx>
-
 void  ExtremityPoints(TColgp_Array1OfPnt& PP,const Handle(Geom_Plane)& myPlane,const Handle(Prs3d_Drawer)& myDrawer);
 
 //=======================================================================
index 52f5630..aa75b76 100644 (file)
@@ -19,7 +19,6 @@
 #include <SelectBasics_EntityOwner.hxx>
 #include <SelectMgr_EntityOwner.hxx>
 #include <Select3D_SensitiveSegment.hxx>
-#include <Select3D_SensitiveFace.hxx>
 #include <Select3D_SensitivePoint.hxx>
 #include <Geom_Axis2Placement.hxx>
 #include <Geom_Line.hxx>
index 883fb47..315d2b9 100644 (file)
@@ -361,7 +361,7 @@ void MeshVS_Mesh::ComputeSelection ( const Handle(SelectMgr_Selection)& theSelec
                 aSharedNodes.Add( aElemNodes( i ) );
               }
 
-              anEnt = new Select3D_SensitiveFace( myWholeMeshOwner, Points );
+              anEnt = new Select3D_SensitiveFace( myWholeMeshOwner, Points, Select3D_TOS_INTERIOR);
               theSelection->Add( anEnt );
             }
           }
index 9ca3ccf..493377c 100755 (executable)
@@ -1,14 +1,11 @@
 Select3D_Pnt.hxx
 Select3D_Macro.hxx
 Select3D_PointData.hxx
-Select3D_BoundarySensitivePointSet.hxx
-Select3D_BoundarySensitivePointSet.cxx
 Select3D_BndBox3d.hxx
 Select3D_BVHPrimitiveContent.hxx
 Select3D_BVHPrimitiveContent.cxx
 Select3D_InteriorSensitivePointSet.hxx
 Select3D_InteriorSensitivePointSet.cxx
-Select3D_ISensitivePointSet.hxx
 Select3D_EntitySequence.hxx
 Select3D_SensitiveBox.hxx
 Select3D_SensitiveBox.cxx
index 981d712..9527ac8 100644 (file)
@@ -44,10 +44,8 @@ uses
 is
 
     imported BndBox3d;
-    imported BoundarySensitivePointSet;
     imported BVHPrimitiveContent;
     imported InteriorSensitivePointSet;
-    imported ISensitivePointSet;
     imported EntitySequence;
     imported Pnt;
     imported PointData;
diff --git a/src/Select3D/Select3D_BoundarySensitivePointSet.cxx b/src/Select3D/Select3D_BoundarySensitivePointSet.cxx
deleted file mode 100644 (file)
index 8a5b6a2..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-// Created on: 2014-11-10
-// Created by: Varvara POSKONINA
-// Copyright (c) 2005-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 <Select3D_BoundarySensitivePointSet.hxx>
-
-//=======================================================================
-// function : Select3D_BoundarySensitivePointSet
-// purpose  : Creates new instance of Select3D_SensitivePoly with BVH tree
-//            required and initializes it with the given array of points
-//=======================================================================
-Select3D_BoundarySensitivePointSet::Select3D_BoundarySensitivePointSet (const Handle(SelectBasics_EntityOwner)& OwnerId,
-                                                                        const TColgp_Array1OfPnt& ThePoints)
-  : Select3D_SensitivePoly (OwnerId, ThePoints, Standard_True)
-{}
-
-//=======================================================================
-// function : Matches
-// purpose  : Checks whether the point set overlaps current selecting
-//            volume
-//=======================================================================
-Standard_Boolean Select3D_BoundarySensitivePointSet::Matches (SelectBasics_SelectingVolumeManager& theMgr,
-                                                              SelectBasics_PickResult& thePickResult)
-{
-  return Select3D_SensitivePoly::Matches (theMgr, thePickResult);
-}
-
-//=======================================================================
-// function : GetPoints
-// purpose  : Initializes the given array theHArrayOfPnt by 3d
-//            coordinates of vertices of the point set
-//=======================================================================
-void Select3D_BoundarySensitivePointSet::GetPoints (Handle(TColgp_HArray1OfPnt)& theHArrayOfPnt)
-{
-  Points3D (theHArrayOfPnt);
-}
-
-//=======================================================================
-// function : BoundingBox
-// purpose  : Returns bounding box of the point set. If location transformation
-//            is set, it will be applied
-//=======================================================================
-Select3D_BndBox3d Select3D_BoundarySensitivePointSet::BoundingBox()
-{
-  return Select3D_SensitivePoly::BoundingBox();
-}
-
-//=======================================================================
-// function : CenterOfGeometry
-// purpose  : Returns center of the point set. If location transformation
-//            is set, it will be applied
-//=======================================================================
-gp_Pnt Select3D_BoundarySensitivePointSet::CenterOfGeometry() const
-{
-  return Select3D_SensitivePoly::CenterOfGeometry();
-}
-
-//=======================================================================
-// function : BVH
-// purpose  : Builds BVH tree for the point set
-//=======================================================================
-void Select3D_BoundarySensitivePointSet::BVH()
-{
-  Select3D_SensitivePoly::BVH();
-}
-
-//=======================================================================
-// function : NbSubElements
-// purpose  : Returns the amount of points in set
-//=======================================================================
-Standard_Integer Select3D_BoundarySensitivePointSet::NbSubElements()
-{
-  return Select3D_SensitivePoly::NbSubElements();
-}
diff --git a/src/Select3D/Select3D_BoundarySensitivePointSet.hxx b/src/Select3D/Select3D_BoundarySensitivePointSet.hxx
deleted file mode 100644 (file)
index 1218811..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Created on: 2014-08-15
-// Created by: Varvara POSKONINA
-// Copyright (c) 2005-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.
-
-#ifndef _Select3D_BoundarySensitivePointSet_HeaderFile
-#define _Select3D_BoundarySensitivePointSet_HeaderFile
-
-#include <Handle_SelectBasics_EntityOwner.hxx>
-#include <Handle_TColgp_HArray1OfPnt.hxx>
-
-#include <Select3D_ISensitivePointSet.hxx>
-#include <Select3D_SensitivePoly.hxx>
-
-class SelectBasics_EntityOwner;
-class TColgp_Array1OfPnt;
-class TColgp_HArray1OfPnt;
-
-//! This class handles the selection of arbitrary point set with boundary type of sensitivity.
-class Select3D_BoundarySensitivePointSet : public Select3D_ISensitivePointSet, public Select3D_SensitivePoly
-{
-public:
-
-  //! Creates new instance of Select3D_SensitivePoly with BVH tree
-  //! required and initializes it with the given array of points
-  Standard_EXPORT Select3D_BoundarySensitivePointSet (const Handle(SelectBasics_EntityOwner)& OwnerId,
-                                                      const TColgp_Array1OfPnt& ThePoints);
-
-  //! Checks whether the point set overlaps current selecting volume
-  Standard_EXPORT virtual Standard_Boolean Matches (SelectBasics_SelectingVolumeManager& theMgr,
-                                                    SelectBasics_PickResult& thePickResult) Standard_OVERRIDE;
-
-  //! Initializes the given array theHArrayOfPnt by 3d coordinates
-  //! of vertices of the point set
-  Standard_EXPORT virtual void GetPoints (Handle(TColgp_HArray1OfPnt)& theHArrayOfPnt) Standard_OVERRIDE;
-
-  //! Returns bounding box of the point set. If there is a
-  //! location transformation set, it will be applied
-  Standard_EXPORT virtual Select3D_BndBox3d BoundingBox() Standard_OVERRIDE;
-
-  //! Returns center of the point set. If there is a
-  //! location transformation set, it will be applied
-  Standard_EXPORT virtual gp_Pnt CenterOfGeometry() const Standard_OVERRIDE;
-
-  //! Builds BVH tree for the point set
-  Standard_EXPORT virtual void BVH() Standard_OVERRIDE;
-
-  //! Returns the amount of points in set
-  Standard_EXPORT virtual Standard_Integer NbSubElements() Standard_OVERRIDE;
-};
-
-#endif // _Select3D_BoundarySensitivePointSet_HeaderFile
diff --git a/src/Select3D/Select3D_ISensitivePointSet.hxx b/src/Select3D/Select3D_ISensitivePointSet.hxx
deleted file mode 100644 (file)
index 7cb0564..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-// Created on: 2014-08-15
-// Created by: Varvara POSKONINA
-// Copyright (c) 2005-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.
-
-#ifndef _Select3D_ISensitivePointSet_HeaderFile
-#define _Select3D_ISensitivePointSet_HeaderFile
-
-#include <Standard.hxx>
-#include <Standard_Boolean.hxx>
-#include <Standard_OStream.hxx>
-#include <Standard_Real.hxx>
-
-#include <Select3D_BndBox3d.hxx>
-#include <Select3D_SensitiveEntity.hxx>
-#include <SelectBasics_EntityOwner.hxx>
-#include <SelectBasics_PickResult.hxx>
-#include <SelectBasics_SelectingVolumeManager.hxx>
-
-#include <Handle_SelectBasics_EntityOwner.hxx>
-#include <Handle_TColgp_HArray1OfPnt.hxx>
-
-class gp_Pnt;
-class Standard_ConstructionError;
-class Standard_OutOfRange;
-class TColgp_Array1OfPnt;
-class TColgp_HArray1OfPnt;
-class TColgp_Array1OfPnt2d;
-class TopLoc_Location;
-
-//! Interface class to unify the work with both internal and boundary
-//! sensitive sets of points.
-class Select3D_ISensitivePointSet
-{
-public:
-
-  //! Checks whether the point set overlaps current selecting volume
-  virtual Standard_Boolean Matches (SelectBasics_SelectingVolumeManager& theMgr,
-                                    SelectBasics_PickResult& thePickResult) = 0;
-
-  //! Initializes the given array theHArrayOfPnt by 3d coordinates
-  //! of vertices of the point set
-  virtual void GetPoints (Handle(TColgp_HArray1OfPnt)& theHArrayOfPnt) = 0;
-
-  //! Returns bounding box of the point set. If location
-  //! transformation is set, it will be applied
-  virtual Select3D_BndBox3d BoundingBox() = 0;
-
-  //! Returns center of the point set. If location
-  //! transformation is set, it will be applied
-  virtual gp_Pnt CenterOfGeometry() const = 0;
-
-  //! Builds BVH tree for the point set
-  virtual void BVH() = 0;
-
-  //! Returns the amount of points in set
-  virtual Standard_Integer NbSubElements() = 0;
-};
-
-#endif // _Select3D_ISensitivePointSet_HeaderFile
index b86c23c..b2e8dd4 100644 (file)
@@ -21,6 +21,8 @@
 
 #include <Select3D_InteriorSensitivePointSet.hxx>
 
+namespace {
+
 // Internal class for creation of planar polygons
 class Select3D_Plane
 {
@@ -74,6 +76,11 @@ private:
   Standard_Boolean                myIsInitialized;
 };
 
+} // anonymous namespace
+
+IMPLEMENT_STANDARD_HANDLE (Select3D_InteriorSensitivePointSet, Select3D_SensitiveSet)
+IMPLEMENT_STANDARD_RTTIEXT(Select3D_InteriorSensitivePointSet, Select3D_SensitiveSet)
+
 // =======================================================================
 // function : Select3D_InteriorSensitivePointSet
 // purpose  : Splits the given point set thePoints onto planar convex
@@ -172,17 +179,6 @@ Select3D_InteriorSensitivePointSet::Select3D_InteriorSensitivePointSet (const Ha
 }
 
 // =======================================================================
-// function : Matches
-// purpose  : Checks whether the point set overlaps current selecting
-//            volume
-// =======================================================================
-Standard_Boolean Select3D_InteriorSensitivePointSet::Matches (SelectBasics_SelectingVolumeManager& theMgr,
-                                                              SelectBasics_PickResult& thePickResult)
-{
-  return Select3D_SensitiveSet::Matches (theMgr, thePickResult);
-}
-
-// =======================================================================
 // function : GetPoints
 // purpose  : Initializes the given array theHArrayOfPnt by 3d
 //            coordinates of vertices of the whole point set
@@ -321,15 +317,6 @@ gp_Pnt Select3D_InteriorSensitivePointSet::CenterOfGeometry() const
 }
 
 //=======================================================================
-// function : BVH
-// purpose  : Builds BVH tree for the point set
-//=======================================================================
-void Select3D_InteriorSensitivePointSet::BVH()
-{
-  BVH();
-}
-
-//=======================================================================
 // function : NbSubElements
 // purpose  : Returns the amount of points in set
 //=======================================================================
index b9fd3e8..054e487 100644 (file)
@@ -22,7 +22,6 @@
 #include <Handle_TColgp_HArray1OfPnt.hxx>
 #include <Handle_TColStd_HArray1OfInteger.hxx>
 
-#include <Select3D_ISensitivePointSet.hxx>
 #include <Select3D_SensitivePoly.hxx>
 #include <Select3D_SensitiveSet.hxx>
 
@@ -37,7 +36,7 @@ typedef NCollection_Vector<Handle(Select3D_SensitivePoly)> Select3D_VectorOfHPol
 //! This class handles the selection of arbitrary point set with internal type of sensitivity.
 //! The main principle is to split the point set given onto planar convex polygons and search
 //! for the overlap with one or more of them through traverse of BVH tree.
-class Select3D_InteriorSensitivePointSet : public Select3D_ISensitivePointSet, public Select3D_SensitiveSet
+class Select3D_InteriorSensitivePointSet : public Select3D_SensitiveSet
 {
 public:
 
@@ -45,13 +44,9 @@ public:
   Standard_EXPORT Select3D_InteriorSensitivePointSet (const Handle(SelectBasics_EntityOwner)& theOwnerId,
                                                       const TColgp_Array1OfPnt& thePoints);
 
-  //! Checks whether the point set overlaps current selecting volume
-  Standard_EXPORT virtual Standard_Boolean Matches (SelectBasics_SelectingVolumeManager& theMgr,
-                                                    SelectBasics_PickResult& thePickResult) Standard_OVERRIDE;
-
   //! Initializes the given array theHArrayOfPnt by 3d coordinates of vertices of the
   //! whole point set
-  Standard_EXPORT virtual void GetPoints (Handle(TColgp_HArray1OfPnt)& theHArrayOfPnt) Standard_OVERRIDE;
+  Standard_EXPORT virtual void GetPoints (Handle(TColgp_HArray1OfPnt)& theHArrayOfPnt);
 
   //! Returns the length of vector of planar convex polygons
   Standard_EXPORT virtual Standard_Integer Size() const Standard_OVERRIDE;
@@ -76,12 +71,11 @@ public:
   //! transformation is set, it will be applied
   Standard_EXPORT virtual gp_Pnt CenterOfGeometry() const Standard_OVERRIDE;
 
-  //! Builds BVH tree for the point set
-  Standard_EXPORT virtual void BVH() Standard_OVERRIDE;
-
   //! Returns the amount of points in set
   Standard_EXPORT virtual Standard_Integer NbSubElements() Standard_OVERRIDE;
 
+  DEFINE_STANDARD_RTTI(Select3D_InteriorSensitivePointSet)
+
 protected:
 
   //! Checks whether the planar convex polygon with index theIdx
@@ -106,4 +100,6 @@ protected:
   Select3D_BndBox3d               myBndBox;             //!< Bounding box of the point set
 };
 
+DEFINE_STANDARD_HANDLE(Select3D_InteriorSensitivePointSet, Select3D_SensitiveSet)
+
 #endif // _Select3D_InteriorSensitivePointSet_HeaderFile
index 630f6d1..5fe5d00 100644 (file)
@@ -19,6 +19,9 @@
 //Modif on jul-21-97 : changement en harray1 pour eventuelles connexions ...
 
 #include <Select3D_SensitiveFace.hxx>
+#include <Select3D_SensitivePoly.hxx>
+#include <Select3D_InteriorSensitivePointSet.hxx>
+
 #include <gp_Pnt.hxx>
 #include <Precision.hxx>
 
@@ -41,7 +44,7 @@ Select3D_SensitiveFace::Select3D_SensitiveFace (const Handle(SelectBasics_Entity
   }
   else
   {
-    myFacePoints = new Select3D_BoundarySensitivePointSet (theOwnerId, thePoints);
+    myFacePoints = new Select3D_SensitivePoly (theOwnerId, thePoints, Standard_True);
   }
 }
 
@@ -61,7 +64,7 @@ Select3D_SensitiveFace::Select3D_SensitiveFace (const Handle(SelectBasics_Entity
   }
   else
   {
-    myFacePoints = new Select3D_BoundarySensitivePointSet (theOwnerId, thePoints->Array1());
+    myFacePoints = new Select3D_SensitivePoly (theOwnerId, thePoints->Array1(), Standard_True);
   }
 }
 
@@ -72,7 +75,15 @@ Select3D_SensitiveFace::Select3D_SensitiveFace (const Handle(SelectBasics_Entity
 //=======================================================================
 void Select3D_SensitiveFace::GetPoints (Handle(TColgp_HArray1OfPnt)& theHArrayOfPnt)
 {
-  myFacePoints->GetPoints (theHArrayOfPnt);
+  if (myFacePoints->IsKind(STANDARD_TYPE(Select3D_SensitivePoly)))
+  {
+    Handle(Select3D_SensitivePoly)::DownCast (myFacePoints)->Points3D (theHArrayOfPnt);
+  }
+  else
+  {
+    Handle(Select3D_InteriorSensitivePointSet)::DownCast (myFacePoints)->GetPoints (theHArrayOfPnt);
+  }
+
 }
 
 //=======================================================================
@@ -102,7 +113,7 @@ Handle(Select3D_SensitiveEntity) Select3D_SensitiveFace::GetConnected()
 {
   // Create a copy of this
   Handle(TColgp_HArray1OfPnt) aPoints;
-  myFacePoints->GetPoints (aPoints);
+  GetPoints (aPoints);
 
   Handle(Select3D_SensitiveEntity) aNewEntity =
     new Select3D_SensitiveFace (myOwnerId, aPoints, mySensType);
index 82e08ca..9d72a2d 100644 (file)
 #ifndef _Select3D_SensitiveFace_HeaderFile
 #define _Select3D_SensitiveFace_HeaderFile
 
-#include <NCollection_Handle.hxx>
-
-#include <Standard.hxx>
 #include <Standard_DefineHandle.hxx>
-#include <Standard_Type.hxx>
 
 #include <Select3D_TypeOfSensitivity.hxx>
-#include <Select3D_SensitivePoly.hxx>
+#include <Select3D_SensitiveSet.hxx>
 #include <Handle_SelectBasics_EntityOwner.hxx>
 #include <Handle_TColgp_HArray1OfPnt.hxx>
 #include <Standard_Boolean.hxx>
 #include <Standard_Real.hxx>
 #include <Standard_OStream.hxx>
 
-#include <Select3D_ISensitivePointSet.hxx>
-#include <Select3D_BoundarySensitivePointSet.hxx>
-#include <Select3D_InteriorSensitivePointSet.hxx>
-
 class Standard_ConstructionError;
 class Standard_OutOfRange;
 class SelectBasics_EntityOwner;
@@ -61,7 +53,7 @@ public:
   //! The array of points is the outer polygon of the geometric face.
   Standard_EXPORT Select3D_SensitiveFace (const Handle(SelectBasics_EntityOwner)& theOwnerId,
                                           const TColgp_Array1OfPnt& thePoints,
-                                          const Select3D_TypeOfSensitivity theType = Select3D_TOS_INTERIOR);
+                                          const Select3D_TypeOfSensitivity theType);
 
   //! Constructs a sensitive face object defined by the
   //! owner theOwnerId, the array of points thePoints, and
@@ -69,7 +61,7 @@ public:
   //! The array of points is the outer polygon of the geometric face.
   Standard_EXPORT Select3D_SensitiveFace (const Handle(SelectBasics_EntityOwner)& theOwnerId,
                                           const Handle(TColgp_HArray1OfPnt)& thePoints,
-                                          const Select3D_TypeOfSensitivity theType = Select3D_TOS_INTERIOR);
+                                          const Select3D_TypeOfSensitivity theType);
 
   //! Initializes the given array theHArrayOfPnt by 3d
   //! coordinates of vertices of the face
@@ -99,8 +91,8 @@ public:
 
 private:
 
-  Select3D_TypeOfSensitivity                      mySensType;           //!< Type of sensitivity: interior or boundary
-  NCollection_Handle<Select3D_ISensitivePointSet> myFacePoints;     //!< Wrapper for overlap detection created depending on sensitivity type
+  Select3D_TypeOfSensitivity    mySensType;       //!< Type of sensitivity: interior or boundary
+  Handle(Select3D_SensitiveSet) myFacePoints;     //!< Wrapper for overlap detection created depending on sensitivity type
 };
 
 DEFINE_STANDARD_HANDLE(Select3D_SensitiveFace, Select3D_SensitiveEntity)
index 858b24a..62d6de3 100644 (file)
@@ -86,7 +86,7 @@ void SelectMgr_BaseFrustum::SetWindowSize (const Standard_Integer theWidth, cons
 // function : SetBuilder
 // purpose  :
 //=======================================================================
-void SelectMgr_BaseFrustum::SetBuilder (const NCollection_Handle<SelectMgr_FrustumBuilder>& theBuilder)
+void SelectMgr_BaseFrustum::SetBuilder (const Handle(SelectMgr_FrustumBuilder)& theBuilder)
 {
   myBuilder.Nullify();
   myBuilder = theBuilder;
index 0aa9c18..0efa02b 100644 (file)
@@ -25,7 +25,6 @@
 #include <Graphic3d_ClipPlane.hxx>
 #include <Graphic3d_SequenceOfHClipPlane.hxx>
 
-#include <NCollection_Handle.hxx>
 #include <TColgp_HArray1OfPnt.hxx>
 #include <TColgp_Array1OfPnt2d.hxx>
 
@@ -47,7 +46,7 @@ public:
   //! orthographic camera and empty frustum builder
   SelectMgr_BaseFrustum();
 
-  virtual ~SelectMgr_BaseFrustum() {};
+  virtual ~SelectMgr_BaseFrustum() {}
 
   //! Passes camera projection and orientation matrices to builder
   void SetCamera (const Handle(Graphic3d_Camera)& theCamera);
@@ -68,23 +67,23 @@ public:
                     const Standard_Real theHeight);
 
   //! Nullifies the builder created in the constructor and copies the pointer given
-  void SetBuilder (const NCollection_Handle<SelectMgr_FrustumBuilder>& theBuilder);
+  void SetBuilder (const Handle(SelectMgr_FrustumBuilder)& theBuilder);
 
 
   //! Builds volume according to the point and given pixel tolerance
-  virtual void Build (const gp_Pnt2d& /*thePoint*/) {};
+  virtual void Build (const gp_Pnt2d& /*thePoint*/) {}
 
   //! Builds volume according to the selected rectangle
   virtual void Build (const gp_Pnt2d& /*theMinPt*/,
-                      const gp_Pnt2d& /*theMaxPt*/) {};
+                      const gp_Pnt2d& /*theMaxPt*/) {}
 
   //! Builds volume according to the triangle given
   virtual void Build (const gp_Pnt2d& /*theP1*/,
                       const gp_Pnt2d& /*theP2*/,
-                      const gp_Pnt2d& /*theP3*/) {};
+                      const gp_Pnt2d& /*theP3*/) {}
 
   //! Builds selecting volumes set according to polyline points
-  virtual void Build (const TColgp_Array1OfPnt2d& /*thePoints*/) {};
+  virtual void Build (const TColgp_Array1OfPnt2d& /*thePoints*/) {}
 
   virtual NCollection_Handle<SelectMgr_BaseFrustum> Transform (const gp_Trsf& /*theTrsf*/) { return NULL; }
 
@@ -142,7 +141,7 @@ protected:
   Standard_Real    myPixelTolerance;      //!< Pixel tolerance
   Standard_Boolean myIsOrthographic;      //!< Defines if current camera is orthographic
 
-  NCollection_Handle<SelectMgr_FrustumBuilder> myBuilder;      //!< A tool implementing methods for volume build
+  Handle(SelectMgr_FrustumBuilder) myBuilder; //!< A tool implementing methods for volume build
 };
 
 #endif // _SelectMgr_BaseFrustum_HeaderFile
index 1ba4a35..e5f9e1c 100644 (file)
@@ -19,7 +19,6 @@
 #include <BVH_Box.hxx>
 #include <gp_Pnt.hxx>
 #include <SelectMgr_BaseFrustum.hxx>
-#include <SelectMgr_FrustumBuilder.hxx>
 #include <TColgp_HArray1OfPnt.hxx>
 #include <TColgp_Array1OfPnt2d.hxx>
 
index 904bbd9..91be420 100644 (file)
@@ -18,6 +18,9 @@
 #define DOT(A, B) (A.x() * B.x() + A.y() * B.y() + A.z() * B.z())
 #define LENGTH(A) (std::sqrt (A.x() * A.x() + A.y() * A.y() + A.z() * A.z()))
 
+IMPLEMENT_STANDARD_HANDLE (SelectMgr_FrustumBuilder, Standard_Transient)
+IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_FrustumBuilder, Standard_Transient)
+
 //=======================================================================
 // function : SelectMgr_FrustumBuilder
 // purpose  : Creates new frustum builder with empty matrices
index 1d4cd80..8480454 100644 (file)
 #ifndef _SelectMgr_FrustumBuilder_HeaderFile
 #define _SelectMgr_FrustumBuilder_HeaderFile
 
+#include <Standard_DefineHandle.hxx>
+
 #include <Graphic3d_Camera.hxx>
-#include <NCollection_Handle.hxx>
 #include <Precision.hxx>
 #include <SelectMgr_VectorTypes.hxx>
 
 //! The purpose of this class is to provide unified interface for building
 //! selecting frustum depending on current camera projection and orientation
 //! matrices, window size and viewport parameters.
-class SelectMgr_FrustumBuilder
+class SelectMgr_FrustumBuilder : public Standard_Transient
 {
 public:
   //! Creates new frustum builder with empty matrices
   SelectMgr_FrustumBuilder();
 
-  ~SelectMgr_FrustumBuilder() {};
-
   //! Stores current orientation matrix
   void SetOrientation (const Graphic3d_Mat4d& theOrientation);
 
@@ -62,6 +61,8 @@ public:
                                         const Standard_Real& theY,
                                         const Standard_Real& theZ) const;
 
+  DEFINE_STANDARD_RTTI(SelectMgr_FrustumBuilder)
+
 private:
 
   //! Unprojects point from NDC coords to 3d world space
@@ -77,4 +78,6 @@ private:
   Standard_Boolean                  myIsViewportSet;
 };
 
+DEFINE_STANDARD_HANDLE(SelectMgr_FrustumBuilder, Standard_Transient)
+
 #endif // _SelectMgr_FrustumBuilder_HeaderFile
diff --git a/tests/bugs/vis/bug26146 b/tests/bugs/vis/bug26146
new file mode 100644 (file)
index 0000000..b9dd6bf
--- /dev/null
@@ -0,0 +1,12 @@
+puts "==========="
+puts "Test for issue #26146"
+puts "==========="
+puts "=================================="
+puts "Select3D_ISensitivePointSet: Crash when clearing selections (only with TBB)"
+puts "=================================="
+
+restore [locate_data_file crash_compound.brep]
+
+vinit
+vdisplay crash_compound
+vremove crash_compound ;# crashed here