0022554: Application hangs on selection
[occt.git] / src / Select3D / Select3D_PointData.hxx
diff --git a/src/Select3D/Select3D_PointData.hxx b/src/Select3D/Select3D_PointData.hxx
new file mode 100644 (file)
index 0000000..aa92ad6
--- /dev/null
@@ -0,0 +1,105 @@
+#ifndef _Select3D_PointData_HeaderFile
+#define _Select3D_PointData_HeaderFile
+
+#include <Select3D_Pnt.hxx>
+#include <Select3D_Pnt2d.hxx>
+
+// A framework for safe management of Select3D_SensitivePoly polygons of 3D and 2D points
+class Select3D_PointData {
+
+public:
+
+  // Constructs internal arrays of 2D and 3D points defined
+  // by number of points theNbPoints
+  Select3D_PointData (const Standard_Integer theNbPoints)
+  {
+    if (theNbPoints <= 0)
+      Standard_ConstructionError::Raise("Select3D_PointData");
+
+    mynbpoints = theNbPoints;
+    mypolyg3d = new Select3D_Pnt[mynbpoints];
+    mypolyg2d = new Select3D_Pnt2d[mynbpoints];
+  }
+
+  // Destructor
+  ~Select3D_PointData ()
+  {
+    delete [] mypolyg3d;
+    delete [] mypolyg2d;
+  }
+
+  // Sets Select3D_Pnt to internal array
+  // of 3D points if theIndex is valid
+  void SetPnt (const Standard_Integer theIndex,
+               const Select3D_Pnt& theValue)
+  {
+    if (theIndex < 0 || theIndex >= mynbpoints)
+      Standard_OutOfRange::Raise("Select3D_PointData::SetPnt");
+    mypolyg3d[theIndex] = theValue;
+  }
+
+  // Sets gp_Pnt to internal array
+  // of 3D points if theIndex is valid
+  void SetPnt (const Standard_Integer theIndex,
+               const gp_Pnt& theValue)
+  {
+    if (theIndex < 0 || theIndex >= mynbpoints)
+      Standard_OutOfRange::Raise("Select3D_PointData::SetPnt");
+    mypolyg3d[theIndex] = theValue;
+  }
+
+  // Sets Select3D_Pnt2d to internal array
+  // of 2D points if theIndex is valid
+  void SetPnt2d (const Standard_Integer theIndex,
+                 const Select3D_Pnt2d& theValue)
+  {
+    if (theIndex < 0 || theIndex >= mynbpoints)
+      Standard_OutOfRange::Raise("Select3D_PointData::SetPnt2d");
+    mypolyg2d[theIndex] = theValue;
+  }
+
+  // Sets gp_Pnt2d to internal array
+  // of 2D points if theIndex is valid
+  void SetPnt2d (const Standard_Integer theIndex,
+                 const gp_Pnt2d& theValue)
+  {
+    if (theIndex < 0 || theIndex >= mynbpoints)
+      Standard_OutOfRange::Raise("Select3D_PointData::SetPnt2d");
+    mypolyg2d[theIndex] = theValue;
+  }
+
+  // Returns 3D point from internal array
+  // if theIndex is valid
+  Select3D_Pnt Pnt (const Standard_Integer theIndex) const
+  {
+    if (theIndex < 0 || theIndex >= mynbpoints)
+      Standard_OutOfRange::Raise("Select3D_PointData::Pnt");
+    return mypolyg3d[theIndex];
+  }
+
+  // Returns 2D point from internal array
+  // if theIndex is valid
+  Select3D_Pnt2d Pnt2d (const Standard_Integer theIndex) const
+  {
+    if (theIndex < 0 || theIndex >= mynbpoints)
+      Standard_OutOfRange::Raise("Select3D_PointData::Pnt2d");
+    return mypolyg2d[theIndex];
+  }
+
+  // Returns size of internal arrays
+  const Standard_Integer Size () const
+  {
+    return mynbpoints;
+  }
+
+private:
+
+  // Default constructor
+  Select3D_PointData () {};
+
+  Select3D_Pnt*    mypolyg3d;
+  Select3D_Pnt2d*  mypolyg2d;
+  Standard_Integer mynbpoints;
+};
+
+#endif