]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Definition of IDL interface to CurveCreator
authorskv <skv@opencascade.com>
Fri, 12 Sep 2014 06:34:11 +0000 (10:34 +0400)
committerskv <skv@opencascade.com>
Fri, 12 Sep 2014 06:34:11 +0000 (10:34 +0400)
idl/GEOM_Gen.idl
src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx
src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx
src/GEOM_I/GEOM_ICurvesOperations_i.cc
src/GEOM_I/GEOM_ICurvesOperations_i.hh

index ecf0308db10df3dfd07a65e1f09b8d6f1782a3b2..e3ec6d8b9d413422753b56b766da23be71dfaaf3 100644 (file)
@@ -164,7 +164,8 @@ module GEOM
   /*!
    * \brief Kind of the curves.
    *
-   * Used in the functions GEOM_ICurvesOperations.MakeCurveParametric(), GEOM_ICurvesOperations.MakeCurveParametricNew()
+   * Used in the functions GEOM_ICurvesOperations.MakeCurveParametric(), GEOM_ICurvesOperations.MakeCurveParametricNew(),
+   * GEOM_ICurvesOperations.MakePolyline2D, GEOM_ICurvesOperations.MakePolyline2DOnPlane.
    */
   enum curve_type {
     /*! Polyline curve */
@@ -221,11 +222,12 @@ module GEOM
   };
 
 
-  typedef sequence<string>      string_array;
-  typedef sequence<short>       short_array;
-  typedef sequence<boolean>     ListOfBool;
-  typedef sequence<long>        ListOfLong;
-  typedef sequence<double>      ListOfDouble;
+  typedef sequence<string>       string_array;
+  typedef sequence<short>        short_array;
+  typedef sequence<boolean>      ListOfBool;
+  typedef sequence<long>         ListOfLong;
+  typedef sequence<double>       ListOfDouble;
+  typedef sequence<ListOfDouble> ListOfListOfDouble;
 
   interface GEOM_Object;
   interface GEOM_BaseObject;
@@ -3319,6 +3321,72 @@ module GEOM
      *  \return New GEOM_Object, containing the created wire.
      */
     GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates);
+
+    /*!
+     *  \brief Create a 2D polyline (wire or a compound of wires).
+     *
+     *  The polyline can have several sections. Each section represents a set
+     *  of points in the form of list of coordinates of the following order:
+     *  x1, y1, x2, y2, ..., xN, yN
+     *  Each section has its own name, type of curve (can be either
+     *  GEOM::Polyline or GEOM::Interpolation) and Closed flag.
+     *  For each section a wire is created. It represents either a polyline or
+     *  interpolation BSpline either closed or not depending on the Closed flag.
+     *  The result represents a wire if there is only one section is defined.
+     *  Otherwise a compound of wires is returned.
+     *
+     *  \param theCoordsList the list of coordinates list. theCoordsList[0]
+     *         is the coordinates list of the first section. theCoordsList[1]
+     *         is for the second section etc.
+     *  \param theNamesList the list of names. The order corresponds to
+     *         theCoordsList.
+     *  \param theTypesList the list of curve types. The order corresponds to
+     *         theCoordsList.
+     *  \param theClosedList the list of Closed flags. The order corresponds to
+     *         theCoordsList.
+     *  \param theWorkingPlane 9 double values, defining origin,
+     *         OZ and OX directions of the working plane.
+     *  \return New GEOM_Object, containing the created wire or a compound
+     *          of wires.
+     */
+    GEOM_Object MakePolyline2D (in ListOfListOfDouble theCoordsList,
+                                in string_array       theNamesList,
+                                in short_array        theTypesList,
+                                in ListOfBool         theClosedList,
+                                in ListOfDouble       theWorkingPlane);
+
+    /*!
+     *  \brief Create a 2D polyline (wire or a compound of wires).
+     *
+     *  The polyline can have several sections. Each section represents a set
+     *  of points in the form of list of coordinates of the following order:
+     *  x1, y1, x2, y2, ..., xN, yN
+     *  Each section has its own name, type of curve (can be either
+     *  GEOM::Polyline or GEOM::Interpolation) and Closed flag.
+     *  For each section a wire is created. It represents either a polyline or
+     *  interpolation BSpline either closed or not depending on the Closed flag.
+     *  The result represents a wire if there is only one section is defined.
+     *  Otherwise a compound of wires is returned.
+     *
+     *  \param theCoordsList the list of coordinates list. theCoordsList[0]
+     *         is the coordinates list of the first section. theCoordsList[1]
+     *         is for the second section etc.
+     *  \param theNamesList the list of names. The order corresponds to
+     *         theCoordsList.
+     *  \param theTypesList the list of curve types. The order corresponds to
+     *         theCoordsList.
+     *  \param theClosedList the list of Closed flags. The order corresponds to
+     *         theCoordsList.
+     *  \param theWorkingPlane planar Face or LCS(Marker) of the working plane.
+     *  \return New GEOM_Object, containing the created wire or a compound
+     *          of wires.
+     */
+    GEOM_Object MakePolyline2DOnPlane (in ListOfListOfDouble theCoordsList,
+                                       in string_array       theNamesList,
+                                       in short_array        theTypesList,
+                                       in ListOfBool         theClosedList,
+                                       in GEOM_Object        theWorkingPlane);
+
   };
 
  // # GEOM_ILocalOperations:
index 8046dbb63971888038ab1da963b77276a6462a8b..12f1a64dc45d801af20de74dc371c0c6a8ede8d2 100644 (file)
@@ -1499,3 +1499,37 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeIsoline
   SetErrorCode(OK);
   return anIsoline;
 }
+
+//=============================================================================
+/*!
+ *  MakePolyline2D
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline2D
+            (const std::list <std::list <double> >         &theCoords,
+             const Handle(TColStd_HArray1OfExtendedString) &theNames,
+             const Handle(TColStd_HArray1OfByte)           &theTypes,
+             const Handle(TColStd_HArray1OfByte)           &theCloseds,
+             const Handle(TColStd_HArray1OfReal)           &theWorkingPlane)
+{
+  Handle(GEOM_Object) aResult;
+
+  return aResult;
+}
+
+//=============================================================================
+/*!
+ *  MakePolyline2DOnPlane
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline2DOnPlane
+            (const std::list <std::list <double> >         &theCoords,
+             const Handle(TColStd_HArray1OfExtendedString) &theNames,
+             const Handle(TColStd_HArray1OfByte)           &theTypes,
+             const Handle(TColStd_HArray1OfByte)           &theCloseds,
+             const Handle(GEOM_Object)                     &theWorkingPlane)
+{
+  Handle(GEOM_Object) aResult;
+
+  return aResult;
+}
index 15591a64f17b1bbc3bea20e56fcb92693d210432..fe4278cc630b94ac846db8505d9c45408740f401 100644 (file)
@@ -100,6 +100,19 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations {
                    const bool                 IsUIso,
                    const double               theParameter);
 
+  Standard_EXPORT Handle(GEOM_Object) MakePolyline2D
+            (const std::list <std::list <double> >         &theCoords,
+             const Handle(TColStd_HArray1OfExtendedString) &theNames,
+             const Handle(TColStd_HArray1OfByte)           &theTypes,
+             const Handle(TColStd_HArray1OfByte)           &theCloseds,
+             const Handle(TColStd_HArray1OfReal)           &theWorkingPlane);
+
+  Standard_EXPORT Handle(GEOM_Object) MakePolyline2DOnPlane
+            (const std::list <std::list <double> >         &theCoords,
+             const Handle(TColStd_HArray1OfExtendedString) &theNames,
+             const Handle(TColStd_HArray1OfByte)           &theTypes,
+             const Handle(TColStd_HArray1OfByte)           &theCloseds,
+             const Handle(GEOM_Object)                     &theWorkingPlane);
 };
 
 #endif
index f1d2469c0e60293037538300dda6fc8c44754fb2..06d9b66d3bd64a1cf4a6e399f2e92e1a7be69b8e 100644 (file)
@@ -30,6 +30,9 @@
 #include "GEOM_Engine.hxx"
 #include "GEOM_Object.hxx"
 
+#include <TColStd_HArray1OfByte.hxx>
+#include <TColStd_HArray1OfReal.hxx>
+
 //=============================================================================
 /*!
  *   constructor:
@@ -667,3 +670,189 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::Make3DSketcher
 
   return GetObject(anObject);
 }
+
+//=============================================================================
+/*!
+ *  MakePolyline2D
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline2D
+                (const GEOM::ListOfListOfDouble &theCoordsList,
+                 const GEOM::string_array       &theNamesList,
+                 const GEOM::short_array        &theTypesList,
+                 const GEOM::ListOfBool         &theClosedList,
+                 const GEOM::ListOfDouble       &theWorkingPlane)
+{
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  // Convert input data
+  Handle(TColStd_HArray1OfExtendedString) aNames   =
+    ConvertStringArray(theNamesList);
+  Handle(TColStd_HArray1OfByte)           aTypes   =
+    ConvertEnumArray(theTypesList);
+  Handle(TColStd_HArray1OfByte)           aCloseds =
+    ConvertBoolArray(theClosedList);
+  std::list <std::list <double> >         aCoords;
+
+  ConvertListListDouble(theCoordsList, aCoords);
+
+  Handle(TColStd_HArray1OfReal) aWorkingPlane;
+  const int                     n = theWorkingPlane.length();
+  int                           i;
+
+  if (n > 0) {
+    aWorkingPlane = new TColStd_HArray1OfReal(1, n);
+
+    for (i = 0; i < n; i++) {
+      aWorkingPlane->SetValue(i + 1, theWorkingPlane[i]);
+    }
+  }
+
+  // Make Polyline
+  Handle(GEOM_Object) anObject = GetOperations()->MakePolyline2D
+            (aCoords, aNames, aTypes, aCloseds, aWorkingPlane);
+
+  if (!GetOperations()->IsDone() || anObject.IsNull()) {
+    return GEOM::GEOM_Object::_nil();
+  }
+
+  return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ *  MakePolylineOnPlane
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline2DOnPlane
+                (const GEOM::ListOfListOfDouble &theCoordsList,
+                 const GEOM::string_array       &theNamesList,
+                 const GEOM::short_array        &theTypesList,
+                 const GEOM::ListOfBool         &theClosedList,
+                 GEOM::GEOM_Object_ptr           theWorkingPlane)
+{
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  // Convert input data
+  Handle(TColStd_HArray1OfExtendedString) aNames        =
+    ConvertStringArray(theNamesList);
+  Handle(TColStd_HArray1OfByte)           aTypes        =
+    ConvertEnumArray(theTypesList);
+  Handle(TColStd_HArray1OfByte)           aCloseds      =
+    ConvertBoolArray(theClosedList);
+  std::list <std::list <double> >         aCoords;
+  Handle(GEOM_Object)                     aWorkingPlane =
+    GetObjectImpl(theWorkingPlane);
+
+  ConvertListListDouble(theCoordsList, aCoords);
+
+  // Make Polyline
+  Handle(GEOM_Object) anObject = GetOperations()->MakePolyline2DOnPlane
+            (aCoords, aNames, aTypes, aCloseds, aWorkingPlane);
+
+  if (!GetOperations()->IsDone() || anObject.IsNull()) {
+    return GEOM::GEOM_Object::_nil();
+  }
+
+  return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ *  ConvertEnumArray
+ */
+//=============================================================================
+Handle(TColStd_HArray1OfByte) GEOM_ICurvesOperations_i::ConvertEnumArray
+                (const GEOM::short_array &theInArray)
+{
+  Handle(TColStd_HArray1OfByte) anOutArray;
+  const int                     n = theInArray.length();
+  int                           i;
+
+  if (n <= 0) {
+    return anOutArray;
+  }
+
+  anOutArray = new TColStd_HArray1OfByte(1, n);
+
+  for (i = 0; i < n; i++) {
+    bool                                  isOK = true;
+    GEOMImpl_ICurvesOperations::CurveType aType;
+
+    switch(theInArray[i]) {
+      case GEOM::Polyline:
+        aType = GEOMImpl_ICurvesOperations::Polyline;
+        break;
+      case GEOM::Bezier:
+        aType = GEOMImpl_ICurvesOperations::Bezier;
+        break;
+      case GEOM::Interpolation:
+        aType = GEOMImpl_ICurvesOperations::Interpolation;
+        break;
+      default:
+        isOK = false;
+        break;
+    }
+
+    if (isOK) {
+      anOutArray->SetValue(i + 1, aType);
+    } else {
+      anOutArray.Nullify();
+      break;
+    }
+  }
+
+  return anOutArray;
+}
+
+//=============================================================================
+/*!
+ *  ConvertBoolArray
+ */
+//=============================================================================
+Handle(TColStd_HArray1OfByte) GEOM_ICurvesOperations_i::ConvertBoolArray
+                (const GEOM::ListOfBool &theInArray)
+{
+  Handle(TColStd_HArray1OfByte) anOutArray;
+  const int                     n = theInArray.length();
+  int                           i;
+
+  if (n <= 0) {
+    return anOutArray;
+  }
+
+  anOutArray = new TColStd_HArray1OfByte(1, n);
+
+  for (i = 0; i < n; i++) {
+    anOutArray->SetValue(i + 1, theInArray[i]);
+  }
+
+  return anOutArray;
+}
+
+//=============================================================================
+/*!
+ *  ConvertListListDouble
+ */
+//=============================================================================
+void GEOM_ICurvesOperations_i::ConvertListListDouble
+            (const GEOM::ListOfListOfDouble        &theInList,
+                   std::list <std::list <double> > &theOutList)
+{
+  const int          n = theInList.length();
+  int                i;
+  std::list <double> anEmptyList;
+
+  for (i = 0; i < n; i++) {
+    theOutList.push_back(anEmptyList);
+
+    const int m = theInList[i].length();
+    int       j;
+
+    for (j = 0; j < m; j++) {
+      theOutList.back().push_back(theInList[i][j]);
+    }
+  }
+}
index c08cb01563848578f94e4282e57082eafcd9d22a..90cbb211497690543ba44c1cd8c47723ac3090a4 100644 (file)
@@ -112,8 +112,35 @@ class GEOM_I_EXPORT GEOM_ICurvesOperations_i :
 
   GEOM::GEOM_Object_ptr Make3DSketcher (const GEOM::ListOfDouble& theCoordinates);
 
+  GEOM::GEOM_Object_ptr MakePolyline2D
+                (const GEOM::ListOfListOfDouble &theCoordsList,
+                 const GEOM::string_array       &theNamesList,
+                 const GEOM::short_array        &theTypesList,
+                 const GEOM::ListOfBool         &theClosedList,
+                 const GEOM::ListOfDouble       &theWorkingPlane);
+
+  GEOM::GEOM_Object_ptr MakePolyline2DOnPlane
+                (const GEOM::ListOfListOfDouble &theCoordsList,
+                 const GEOM::string_array       &theNamesList,
+                 const GEOM::short_array        &theTypesList,
+                 const GEOM::ListOfBool         &theClosedList,
+                 GEOM::GEOM_Object_ptr           theWorkingPlane);
+
   ::GEOMImpl_ICurvesOperations* GetOperations()
   { return (::GEOMImpl_ICurvesOperations*)GetImpl(); }
+
+private:
+
+  Handle(TColStd_HArray1OfByte)
+        ConvertEnumArray(const GEOM::short_array &theInArray);
+
+  Handle(TColStd_HArray1OfByte)
+        ConvertBoolArray(const GEOM::ListOfBool &theInArray);
+
+  void ConvertListListDouble
+            (const GEOM::ListOfListOfDouble        &theCoordsList,
+                   std::list <std::list <double> > &theCoords);
+
 };
 
 #endif