Salome HOME
Merge from BR_siman_phase1 14/02/2013
[modules/geom.git] / idl / GEOM_Gen.idl
index f3a41ad16011e42f7dd4069fd7b07be6e0a65f88..b7bcf45e20c1234da2a8a9ffadda47540e92c1a9 100644 (file)
@@ -209,7 +209,10 @@ module GEOM
   {
 
     /*!
-     *  \brief Get an entry of the object in GEOM component.
+     *  \brief Get internal (unique) entry of the object in the GEOM component's data tree.
+     *  \note This is not an entry of the data object in SALOME study. 
+     *  This is internal function of GEOM component, though it can be used outside it for 
+        appropriate reason (e.g. for unique identification of geometry object).
      */
     string GetEntry();
 
@@ -360,7 +363,8 @@ module GEOM
  //   # Internal methods (For sub-shape identification)
  //   ######################################################################
     /*!
-     *  \brief Get geometric shape of the object as a byte stream
+     *  \brief Get geometric shape of the object as a byte stream in BRep format
+     *  \note GEOM_IInsertOperations::RestoreShape() method can be used to restore shape from a BRep stream.
      */
     SALOMEDS::TMPFile GetShapeStream();
 
@@ -540,6 +544,16 @@ module GEOM
                                            in double theYParameter,
                                            in double theZParameter);
 
+    /*!
+     *  \brief Create a point, which lays on the given face.
+     *         The point will lay in arbitrary place of the face.
+     *         The only condition on it is a non-zero distance to the face boundary.
+     *         Such point can be used to uniquely identify the face inside any
+     *         shape in case, when the shape does not contain overlapped faces.
+     *  \param theFace The referenced face.
+     *  \return New GEOM_Object, containing the created point.
+     */
+    GEOM_Object MakePointOnFace (in GEOM_Object theFace);
 
     /*!
      *  \brief Create a point, on two lines intersection.
@@ -704,6 +718,11 @@ module GEOM
                                        in double theTrimSize);
   };
 
+  /*!
+   *  \brief Interface for shapes transforming.
+   *
+   *  Translation, rotation, scaling, mirroring, offset, projection, recomputing.
+   */
   interface GEOM_ITransformOperations : GEOM_IOperations
   {
     /*!
@@ -785,7 +804,7 @@ module GEOM
     /*!
      *  \brief Translate the given object along the given vector a given number times
      *  \param theObject The object to be translated.
-     *  \param theVector Direction of the translation.
+     *  \param theVector Direction of the translation. DX if None.
      *  \param theStep Distance to translate on.
      *  \param theNbTimes Quantity of translations to be done.
      *  \return New GEOM_Object, containing compound of all
@@ -799,10 +818,10 @@ module GEOM
     /*!
      *  \brief Conseqently apply two specified translations to theObject specified number of times.
      *  \param theObject The object to be translated.
-     *  \param theVector1 Direction of the first translation.
+     *  \param theVector1 Direction of the first translation. DX if None.
      *  \param theStep1 Step of the first translation.
      *  \param theNbTimes1 Quantity of translations to be done along theVector1.
-     *  \param theVector2 Direction of the second translation.
+     *  \param theVector2 Direction of the second translation. DY if None.
      *  \param theStep2 Step of the second translation.
      *  \param theNbTimes2 Quantity of translations to be done along theVector2.
      *  \return New GEOM_Object, containing compound of all
@@ -869,20 +888,56 @@ module GEOM
                             in GEOM_Object theAxis,
                             in double theAngle);
 
-
     /*!
      *  \brief Rotate the given object around the given axis a given number times.
      *
-     *  Rotation angle will be 2*PI/theNbTimes.
+     *  Rotation angle will be 2*PI/theNbObjects.
      *  \param theObject The object to be rotated.
-     *  \param theAxis The rotation axis.
-     *  \param theNbTimes Quantity of rotations to be done.
+     *  \param theAxis The rotation axis. DZ if None.
+     *  \param theNbObjects Quantity of rotations to be done.
      *  \return New GEOM_Object, containing compound of all the
      *          shapes, obtained after each rotation.
      */
     GEOM_Object MultiRotate1D (in GEOM_Object theObject,
                                in GEOM_Object theAxis,
-                               in long theNbTimes);
+                               in long theNbObjects);
+
+    /*!
+     *  \brief Rotate the given object around the given axis
+     *         a given number times on the given angle.
+     *
+     *  \param theObject The object to be rotated.
+     *  \param theAxis The rotation axis. DZ if None.
+     *  \param theAngleStep Rotation angle in radians.
+     *  \param theNbSteps Quantity of rotations to be done.
+     *  \return New GEOM_Object, containing compound of all the
+     *          shapes, obtained after each rotation.
+     */
+    GEOM_Object MultiRotate1DByStep (in GEOM_Object theObject,
+                                     in GEOM_Object theAxis,
+                                     in double theAngleStep,
+                                     in long theNbSteps);
+
+    /*!
+     *  \brief Rotate the given object around the given axis
+     *  a given number times and multi-translate each rotation result.
+     *
+     *  Rotation angle will be 2*PI/theNbObjects.
+     *  Translation direction passes through center of gravity
+     *  of rotated shape and its projection on the rotation axis.
+     *  \param theObject The object to be rotated.
+     *  \param theAxis Rotation axis. DZ if None.
+     *  \param theNbObjects Quantity of rotations to be done.
+     *  \param theRadialStep Translation distance.
+     *  \param theNbSteps Quantity of translations to be done.
+     *  \return New GEOM_Object, containing compound of all the
+     *          shapes, obtained after each transformation.
+     */
+    GEOM_Object MultiRotate2DNbTimes (in GEOM_Object theObject,
+                                      in GEOM_Object theAxis,
+                                      in long theNbObjects,
+                                      in double theRadialStep,
+                                      in long theNbSteps);
 
     /*!
      *  \brief Rotate the given object around the
@@ -892,20 +947,43 @@ module GEOM
      *  Translation direction passes through center of gravity
      *  of rotated shape and its projection on the rotation axis.
      *  \param theObject The object to be rotated.
-     *  \param theAxis Rotation axis.
-     *  \param theAngle Rotation angle in graduces.
-     *  \param theNbTimes1 Quantity of rotations to be done.
-     *  \param theStep Translation distance.
-     *  \param theNbTimes2 Quantity of translations to be done.
+     *  \param theAxis Rotation axis. DZ if None.
+     *  \param theAngleStep Rotation angle in radians.
+     *  \param theNbSteps1 Quantity of rotations to be done.
+     *  \param theRadialStep Translation distance.
+     *  \param theNbSteps2 Quantity of translations to be done.
+     *  \return New GEOM_Object, containing compound of all the
+     *          shapes, obtained after each transformation.
+     */
+    GEOM_Object MultiRotate2DByStep (in GEOM_Object theObject,
+                                     in GEOM_Object theAxis,
+                                     in double theAngleStep,
+                                     in long theNbSteps1,
+                                     in double theRadialStep,
+                                     in long theNbSteps2);
+
+    /*!
+     *  \brief Rotate the given object around the
+     *  given axis on the given angle a given number
+     *  times and multi-translate each rotation result.
+     *
+     *  Translation direction passes through center of gravity
+     *  of rotated shape and its projection on the rotation axis.
+     *  \param theObject The object to be rotated.
+     *  \param theAxis Rotation axis. DZ if None.
+     *  \param theAngleStep Rotation angle in degrees.
+     *  \param theNbSteps1 Quantity of rotations to be done.
+     *  \param theRadialStep Translation distance.
+     *  \param theNbSteps2 Quantity of translations to be done.
      *  \return New GEOM_Object, containing compound of all the
      *          shapes, obtained after each transformation.
      */
     GEOM_Object MultiRotate2D (in GEOM_Object theObject,
                                in GEOM_Object theAxis,
-                               in double theAngle,
-                               in long theNbTimes1,
-                               in double theStep,
-                               in long theNbTimes2);
+                               in double theAngleStep,
+                               in long theNbSteps1,
+                               in double theRadialStep,
+                               in long theNbSteps2);
 
     /*!
      *  \brief Replace the given object by an object,
@@ -1066,7 +1144,8 @@ module GEOM
      *  \param  thePath Wire or Edge along that the object will be translated.
      *  \param  theDistance progress of Path (0 = actual location, 1 = end of path location).
      *  \param  theCopy is a true or false parameter. true is to create a copy, false to move the object.
-     *  \param  theReverse is a true or false parameter. true is to reverse direction, false is to move normal direction.
+     *  \param  theReverse is a true or false parameter. True is to reverse
+     *                     direction, false is to move normal direction.
      *  \return New GEOM_Object, containing the displaced shape.
      */
     GEOM_Object PositionAlongPath (in GEOM_Object theObject,
@@ -1075,17 +1154,6 @@ module GEOM
                                    in boolean theCopy,
                                    in boolean theReverse);
 
-    /*!
-     *  \brief Transform the shape in the same way what was used for the sample shape creation.
-     *  \param theObject The object to be transformed.
-     *  \param theSample The object containing information about required transformation.
-     *  \note Implementation of this method is limited by multi-transformations now.
-     *  \note Internal method.
-     *  \return New GEOM_Object, containing the transformed shape.
-     */
-    GEOM_Object TransformLikeOtherCopy (in GEOM_Object theObject,
-                                        in GEOM_Object theSample);
-
     /*!
      *  \brief Recompute the shape from its arguments.
      *  \param theObject The object to be recomputed.
@@ -1094,7 +1162,6 @@ module GEOM
     GEOM_Object RecomputeObject (in GEOM_Object theObject);
   };
   
- // # GEOM_I3DPrimOperations:
   /*!
    *  \brief Interface for 3D primitives creation
    *
@@ -1474,9 +1541,49 @@ module GEOM
                                              in GEOM_Object thePath,
                                              in GEOM_Object theVec);
 
+    /*!
+     *  \brief Build a middle path of a pipe-like shape.
+     *
+     *  The path shape can be a wire or an edge.
+     *  \param theShape It can be closed or unclosed pipe-like shell
+     *                  or a pipe-like solid.
+     *  \param theBase1, theBase2 Two bases of the supposed pipe. This
+     *                            should be wires or faces of \a theShape.
+     *  \note It is not assumed that exact or approximate copy of \a theShape
+     *        can be obtained by applying existing Pipe operation on the
+     *        resulting "Path" wire taking \a theBase1 as the base - it is not
+     *        always possible; though in some particular cases it might work
+     *        it is not guaranteed. Thus, RestorePath function should not be
+     *        considered as an exact reverse operation of the Pipe.
+     *  \return New GEOM_Object, containing an edge or wire that represent
+     *                           source pipe's "path".
+     */
+    GEOM_Object RestorePath (in GEOM_Object theShape,
+                             in GEOM_Object theBase1,
+                             in GEOM_Object theBase2);
+
+    /*!
+     *  \brief Build a middle path of a pipe-like shape.
+     *
+     *  The path shape can be a wire or an edge.
+     *  \param theShape It can be closed or unclosed pipe-like shell
+     *                  or a pipe-like solid.
+     *  \param theBase1, theBase2 Two bases of the supposed pipe. This
+     *                            should be lists of edges of \a theShape.
+     *  \note It is not assumed that exact or approximate copy of \a theShape
+     *        can be obtained by applying existing Pipe operation on the
+     *        resulting "Path" wire taking \a theBase1 as the base - it is not
+     *        always possible; though in some particular cases it might work
+     *        it is not guaranteed. Thus, RestorePath function should not be
+     *        considered as an exact reverse operation of the Pipe.
+     *  \return New GEOM_Object, containing an edge or wire that represent
+     *                           source pipe's "path".
+     */
+    GEOM_Object RestorePathEdges (in GEOM_Object theShape,
+                                  in ListOfGO theBase1,
+                                  in ListOfGO theBase2);
   };
 
- // # GEOM_IShapesOperations
   /*!
    *  \brief Interface for Shapes creation:
    *
@@ -1734,6 +1841,14 @@ module GEOM
      */
     long GetSubShapeIndex (in GEOM_Object theMainShape, in GEOM_Object theSubShape);
 
+    /*!
+     *  Get global indices of \a theSubShapes in \a theMainShape.
+     *  \param theMainShape Main shape.
+     *  \param theSubShapes List of sub-shapes of the main shape.
+     *  \return list of global indices of \a theSubShapes in \a theMainShape.
+     */
+    ListOfLong GetSubShapesIndices (in GEOM_Object theMainShape, in ListOfGO theSubShapes);
+
     /*!
      *  \brief Get index of \a theSubShape in \a theMainShape, unique among sub-shapes of the same type.
      *
@@ -2403,6 +2518,17 @@ module GEOM
     string PrintBCErrors (in GEOM_Object theCompound,
                           in BCErrors    theErrors);
 
+    /*!
+     *  \brief Retrieve all non blocks solids and faces from a shape.
+     *
+     *  \param theShape The shape to explore.
+     *  \param theNonQuads Output parameter. Group of all non quadrangular faces.
+     *
+     *  \return Group of all non block solids (= not 6 faces, or with 6
+     *          faces, but with the presence of non-quadrangular faces).
+     */
+    GEOM_Object GetNonBlocks (in GEOM_Object theShape, out GEOM_Object theNonQuads);
+
     /*!
      *  \brief Remove all seam and degenerated edges from \a theShape.
      *
@@ -2734,6 +2860,17 @@ module GEOM
                                          in boolean  theIsClosed,
                                          in boolean  theDoReordering);
 
+    /*!
+     *  \brief Create B-Spline curve on the set of points.
+     *  \param thePoints Sequence of points for the B-Spline curve.
+     *  \param theFirstVec Vector object, defining the curve direction at its first point.
+     *  \param theLastVec Vector object, defining the curve direction at its last point.
+     *  \return New GEOM_Object, containing the created B-Spline curve.
+     */
+    GEOM_Object MakeSplineInterpolWithTangents (in ListOfGO    thePoints,
+                                                in GEOM_Object theFirstVec,
+                                                in GEOM_Object theLastVec);
+
     /*!
      *  \brief Creates a curve using the parametric definition of the basic points.
      *  \param thexExpr parametric equation of the coordinates X.
@@ -2774,10 +2911,10 @@ module GEOM
 
     /*!
      *  \brief Create a sketcher (wire or face), following the textual description,
-     *  passed through \a theCommand argument.
+     *         passed through \a theCommand argument.
      *
      *  Edges of the resulting wire or face will be arcs of circles and/or linear segments. \n
-     *  Format of the description string have to be the following:
+     *  Format of the description string has to be the following:
      *
      *  "Sketcher[:F x1 y1]:CMD[:CMD[:CMD...]]"
      *
@@ -2805,32 +2942,60 @@ module GEOM
      *                    coordinates of the working plane.
      *  \param theWorkingPlane Nine double values, defining origin,
      *                         OZ and OX directions of the working plane.
-     *  \return New GEOM_Object, containing the created wire.
+     *  \return New GEOM_Object, containing the created wire or face.
      */
     GEOM_Object MakeSketcher (in string theCommand, in ListOfDouble theWorkingPlane);
 
     /*!
-     *  \brief Create a 3D sketcher, following the numerical description,
-     *  passed through points created by \a theCoordinates argument. 
+     *  \brief Create a sketcher (wire or face), following the textual description,
+     *         passed through \a theCommand argument. 
      *
-     *  Format of the description string have to be the following:
+     *  For format of the description string see the previous method.\n
      *
-     *  "Make3DSketcher[x1, y1, z1, x2, y2, z2, ..., xN, yN, zN]"
+     *  \param theCommand String, defining the sketcher in local
+     *                    coordinates of the working plane.
+     *  \param theWorkingPlane Planar Face or LCS(Marker) of the working plane.
+     *  \return New GEOM_Object, containing the created wire or face.
      */
+    GEOM_Object MakeSketcherOnPlane (in string theCommand, in GEOM_Object theWorkingPlane);
 
-    GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates);
-
-      /*!
-     *  \brief Create a sketcher (wire or face), following the textual description,
-     *  passed through \a theCommand argument. 
+    /*!
+     *  \brief Create a 3D sketcher, following the textual description,
+     *         passed through \a theCommand argument. 
+     *
+     *  Format of the description string has to be the following:
+     *
+     *  "3DSketcher:CMD[:CMD[:CMD...]]"
+     *
+     *  Where CMD is one of
+     *     - "TT x y z" : Create segment by point at X & Y or set the first point
+     *     - "T dx dy dz" : Create segment by point with DX & DY
+     *     .
+     *       \n
+     *     - "OXY angleX angle2 length" : Create segment by two angles and length
+     *     - "OYZ angleY angle2 length" : Create segment by two angles and length
+     *     - "OXZ angleX angle2 length" : Create segment by two angles and length
+     *     .
+     *       \n
+     *     - "WW" : Close Wire (to finish)
      *
-     *  For format of the description string see the previous method.\n
      *  \param theCommand String, defining the sketcher in local
      *                    coordinates of the working plane.
-     *  \param theWorkingPlane Planar Face or LCS(Marker) of the working plane.
      *  \return New GEOM_Object, containing the created wire.
      */
-    GEOM_Object MakeSketcherOnPlane (in string theCommand, in GEOM_Object theWorkingPlane);
+    GEOM_Object Make3DSketcherCommand (in string theCommand);
+
+    /*!
+     *  \brief Create a 3D sketcher, made of a straight segments, joining points
+     *         with coordinates passed through \a theCoordinates argument. 
+     *
+     *  Order of coordinates has to be the following:
+     *  x1, y1, z1, x2, y2, z2, ..., xN, yN, zN
+     *
+     *  \param theCoordinates List of double values.
+     *  \return New GEOM_Object, containing the created wire.
+     */
+    GEOM_Object Make3DSketcher (in ListOfDouble theCoordinates);
   };
 
  // # GEOM_ILocalOperations:
@@ -3194,12 +3359,24 @@ module GEOM
      *  \param theFileName The file, containing the shape.
      *  \param theFormatName Specify format for the file reading.
      *         Available formats can be obtained with <VAR>ImportTranslators()</VAR> method.
-     *         If format 'IGES_SCALE' is used instead 'IGES' length unit will be
-     *         set to 'meter' and result model will be scaled.
+     *         If format 'IGES_SCALE' is used instead of 'IGES' or
+     *            format 'STEP_SCALE' is used instead of 'STEP',
+     *            file length unit will be ignored (set to 'meter') and result model will be scaled.
      *  \return New GEOM_Object, containing the imported shape.
      */
     GEOM_Object ImportFile (in string theFileName, in string theFormatName);
 
+    /*!
+     *  \brief Read a value of parameter from a file, containing a shape.
+     *  \param theFileName The file, containing the shape.
+     *  \param theFormatName Specify format for the file reading.
+     *         Available formats can be obtained with <VAR>ImportTranslators()</VAR> method.
+     *  \param theParameterName Specify the parameter. For example, pass "LEN_UNITS"
+     *                          to obtain length units, in which the file is written.
+     *  \return Value of requested parameter in form of text string.
+     */
+    string ReadValue (in string theFileName, in string theFormatName, in string theParameterName);
+
     /*!
      *  \brief Get the supported import formats and corresponding patterns for File dialog.
      *  \param theFormats Output. List of formats, available for import.
@@ -3218,6 +3395,14 @@ module GEOM
     void ExportTranslators (out string_array theFormats,
                             out string_array thePatterns);
 
+    /*!
+     *  \brief Read a shape from the binary stream, containing its bounding representation (BRep).
+     *  \note GEOM_Object::GetShapeStream() method can be used to obtain the shape's BRep stream.
+     *  \param theStream The BRep binary stream.
+     *  \return New GEOM_Object, containing the shape, read from theStream.
+     */
+    GEOM_Object RestoreShape (in SALOMEDS::TMPFile theStream);
+
     /*!
      * \brief Load texture from file
      * \param theTextureFile texture file name
@@ -3429,6 +3614,13 @@ module GEOM
                          out double Ymin, out double Ymax,
                          out double Zmin, out double Zmax);
 
+    /*!
+     *  \brief Get bounding box of the given shape
+     *  \param theShape Shape to obtain bounding box of.
+     *  \return New GEOM_Object, containing the created bounding box.
+     */
+    GEOM_Object MakeBoundingBox (in GEOM_Object theShape);
+
     /*!
      *  \brief Get min and max tolerances of sub-shapes of theShape
      *  \param theShape Shape, to get tolerances of.
@@ -3504,6 +3696,16 @@ module GEOM
                            out double X1, out double Y1, out double Z1,
                            out double X2, out double Y2, out double Z2);
 
+    /*!
+     *  \brief Get closest points of the given shapes.
+     *  \param theShape1,theShape2 Shapes to find closest points of.
+     *  \param theCoords Output. List of (X, Y, Z) coordinates for all couples of points.
+     *  \return The number of found solutions (-1 in case of infinite number of solutions).
+     */
+    long ClosestPoints (in GEOM_Object theShape1,
+                        in GEOM_Object theShape2,
+                        out ListOfDouble theCoords);
+
     /*!
      *  \brief Get angle between the given lines or linear edges.
      *  \param theShape1,theShape2 Shapes to find angle between. Lines or linear edges.
@@ -3635,6 +3837,65 @@ module GEOM
      */
     void DifferenceIDs (in GEOM_Object theGroup, in ListOfLong theSubShapes);
 
+    /*!
+     *  \brief Union of two groups.
+     *  New group is created. It will contain all entities
+     *  which are present in groups theGroup1 and theGroup2.
+     *  \param theGroup1, theGroup2 are the initial GEOM groups
+     *                              to create the united group from.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object UnionGroups (in GEOM_Object theGroup1, in GEOM_Object theGroup2);
+
+    /*!
+     *  \brief Intersection of two groups.
+     *  New group is created. It will contain only those entities
+     *  which are present in both groups theGroup1 and theGroup2.
+     *  \param theGroup1, theGroup2 are the initial GEOM groups to get common part of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object IntersectGroups (in GEOM_Object theGroup1, in GEOM_Object theGroup2);
+
+    /*!
+     *  \brief Cut of two groups.
+     *  New group is created. It will contain entities which are
+     *  present in group theGroup1 but are not present in group theGroup2.
+     *  \param theGroup1 is a GEOM group to include elements of.
+     *  \param theGroup2 is a GEOM group to exclude elements of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object CutGroups (in GEOM_Object theGroup1, in GEOM_Object theGroup2);
+
+    /*!
+     *  \brief Union of list of groups.
+     *  New group is created. It will contain all entities that are
+     *  present in groups listed in theGList.
+     *  \param theGList is a list of GEOM groups to create the united group from.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object UnionListOfGroups (in ListOfGO theGList);
+
+    /*!
+     *  \brief Intersection of list of groups.
+     *  New group is created. It will contain only entities
+     *  which are simultaneously present in the groups listed in theGList.
+     *  \param theGList is a list of GEOM groups to get common part of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object IntersectListOfGroups (in ListOfGO theGList);
+
+    /*!
+     *  \brief Cut of lists of groups.
+     *  New group is created. It will contain only entities
+     *  which are present in groups listed in theGList1 but 
+     *  are not present in groups from theGList2.
+     *  \param theGList1 is a list of GEOM groups to include elements of.
+     *  \param theGList2 is a list of GEOM groups to exclude elements of.
+     *  \return a newly created GEOM group.
+     */
+    GEOM_Object CutListOfGroups (in ListOfGO theGList1,
+                                 in ListOfGO theGList2);
+
     /*!
      *  \brief Returns a type of sub-objects stored in the group
      *  \param theGroup is a GEOM group which type is returned.