+ GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
+ in GEOM_Object thePoint1,
+ in GEOM_Object thePoint2);
+ /* \brief The same prism but in two directions forward&backward */
+ GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
+ in GEOM_Object thePoint1,
+ in GEOM_Object thePoint2);
+ /* \brief The Same as MakePrismTwoPnt but with scaling */
+ GEOM_Object MakePrismTwoPntWithScaling (in GEOM_Object theBase,
+ in GEOM_Object thePoint1,
+ in GEOM_Object thePoint2,
+ in double theScaleFactor);
+
+ /*!
+ * \brief Create a shape by extrusion of the base shape along a vector, defined by DX DY DZ.
+ * \param theBase Base shape to be extruded.
+ * \param theDX, theDY, theDZ end of extrusion vector.
+ * \return New GEOM_Object, containing the created prism.
+ */
+ GEOM_Object MakePrismDXDYDZ (in GEOM_Object theBase,
+ in double theDX, in double theDY, in double theDZ);
+ /* \brief The same prism but in two directions forward&backward */
+ GEOM_Object MakePrismDXDYDZ2Ways (in GEOM_Object theBase,
+ in double theDX, in double theDY, in double theDZ);
+ /* \brief The Same as MakePrismDXDYDZ but with scaling */
+ GEOM_Object MakePrismDXDYDZWithScaling (in GEOM_Object theBase,
+ in double theDX, in double theDY, in double theDZ,
+ in double theScaleFactor);
+
+
+ /*!
+ * \brief Add / Remove material to / from a solid by extrusion of the base shape on the given distance.
+ * \param theInitShape Initial shape on which to perform the feature.It has to be a solid or
+ * a compound made of a single solid
+ * \param theBase Edge or wire defining the base shape to be extruded.
+ * \param theHeight Prism dimension along the normal of the face.
+ * \param theAngle Draft angel in degrees
+ * \param theFuse If true material is added else material is removed
+ * \param theInvert If true material changes the direction
+ * \return New GEOM_Object, containing the modified shape
+ */
+ GEOM_Object MakeDraftPrism (in GEOM_Object theInitShape,
+ in GEOM_Object theBase,
+ in double theHeight,
+ in double theAngle,
+ in boolean theFuse,
+ in boolean theInvert);
+
+ /*!
+ * \brief Create a shape by extrusion of the base shape along
+ * the path shape. The path shape can be a wire or an edge.
+ * \param theBase Base shape to be extruded.
+ * \param thePath Path shape to extrude the base shape along it.
+ * \param IsGenerateGroups flag that tells if it is necessary to
+ * return groups (true) or not (false).
+ * \return The list of objects. The first one is a result pipe,
+ * the other ones are the created groups. If \a IsGenerateGroups
+ * is not set the returned list contains a single object, which
+ * is the operation result.
+ */
+ ListOfGO MakePipe (in GEOM_Object theBase,
+ in GEOM_Object thePath,
+ in boolean IsGenerateGroups);
+
+ /*!
+ * \brief Create a shape by revolution of the base shape around the axis
+ * on the given angle.
+ *
+ * All the space, transfixed by the base
+ * shape during its rotation around the axis on the given angle.
+ * \param theBase Base shape to be rotated.
+ * \param theAxis Rotation axis.
+ * \param theAngle Rotation angle in radians.
+ * \return New GEOM_Object, containing the created revolution.
+ */
+ GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
+ in GEOM_Object theAxis,
+ in double theAngle);
+ /* The Same Revolution but in both ways forward&backward */
+ GEOM_Object MakeRevolutionAxisAngle2Ways (in GEOM_Object theBase,
+ in GEOM_Object theAxis,
+ in double theAngle);
+
+ /*!
+ * \brief Create a face from a given set of contours.
+ * \param theContours either a list or a compound of edges/wires.
+ * \param theMinDeg a minimal degree of BSpline surface to create.
+ * \param theMaxDeg a maximal degree of BSpline surface to create.
+ * \param theTol2D a 2d tolerance to be reached.
+ * \param theTol3D a 3d tolerance to be reached.
+ * \param theNbIter a number of iteration of approximation algorithm.
+ * \param theMethod Kind of method to perform filling operation.
+ * \param theApprox Boolean indicating if result should be approximated.
+ * \return New GEOM_Object (face), containing the created filling surface.
+ */
+ GEOM_Object MakeFilling (in ListOfGO theContours,
+ in long theMinDeg, in long theMaxDeg,
+ in double theTol2D, in double theTol3D,
+ in long theNbIter,
+ in filling_oper_method theMethod,
+ in boolean theApprox);
+
+ /*!
+ * \brief Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices.
+ * \param theSeqSections - set of specified sections.
+ * \param theModeSolid - mode defining building solid or shell
+ * \param thePreci - precision 3D used for smoothing by default 1.e-6
+ * \param theRuled - mode defining type of the result surfaces (ruled or smoothed).
+ * \return New GEOM_Object, containing the created shell or solid.
+ */
+ GEOM_Object MakeThruSections(in ListOfGO theSeqSections,
+ in boolean theModeSolid,
+ in double thePreci,
+ in boolean theRuled);
+
+ /*!
+ * \brief Create a shape by extrusion of the profile shape along
+ * the path shape.
+ *
+ * The path shape can be a wire or an edge.
+ * the several profiles can be specified in the several locations of path.
+ * \param theSeqBases - list of Bases shape to be extruded.
+ * \param theLocations - list of locations on the path corresponding
+ * specified list of the Bases shapes. Number of locations
+ * should be equal to number of bases or list of locations can be empty.
+ * \param thePath - Path shape to extrude the base shape along it.
+ * \param theWithContact - the mode defining that the section is translated to be in
+ * contact with the spine. Ignored if IsBySteps is set.
+ * \param theWithCorrection - defining that the section is rotated to be
+ * orthogonal to the spine tangent in
+ * the correspondent point. Ignored if IsBySteps is set.
+ * \param IsBySteps - flag that tells if the result should be created
+ * step by step or as a whole. If IsBySteps is set no correction
+ * of bases is allowed.
+ * \param IsGenerateGroups flag that tells if it is necessary to
+ * return groups (true) or not (false).
+ * \return The list of objects. The first one is a result pipe,
+ * the other ones are the created groups. If \a IsGenerateGroups
+ * is not set the returned list contains a single object, which
+ * is the operation result.
+ */
+ ListOfGO MakePipeWithDifferentSections (in ListOfGO theSeqBases,
+ in ListOfGO theLocations,
+ in GEOM_Object thePath,
+ in boolean theWithContact ,
+ in boolean theWithCorrection,
+ in boolean IsBySteps,
+ in boolean IsGenerateGroups);
+
+ /*!
+ * \brief Create a shape by extrusion of the profile shape along
+ * the path shape.
+ *
+ * The path shape can be a shell or a face.
+ * the several profiles can be specified in the several locations of path.
+ * \param theSeqBases - list of Bases shape to be extruded.
+ * \param theSeqSubBases - list of corresponding sub-shapes of section shapes.
+ * \param theLocations - list of locations on the path corresponding
+ * specified list of the Bases shapes. Number of locations
+ * should be equal to number of bases.
+ * \param thePath - Path shape to extrude the base shape along it.
+ * \param theWithContact - the mode defining that the section is translated to be in
+ * contact with the spine.
+ * \param theWithCorrection - defining that the section is rotated to be
+ * orthogonal to the spine tangent in the correspondent point
+ * \param IsGenerateGroups flag that tells if it is necessary to
+ * return groups (true) or not (false).
+ * \return The list of objects. The first one is a result pipe,
+ * the other ones are the created groups. If \a IsGenerateGroups
+ * is not set the returned list contains a single object, which
+ * is the operation result.
+ */
+ ListOfGO MakePipeWithShellSections (in ListOfGO theSeqBases,
+ in ListOfGO theSeqSubBases,
+ in ListOfGO theLocations,
+ in GEOM_Object thePath,
+ in boolean theWithContact,
+ in boolean theWithCorrection,
+ in boolean IsGenerateGroups);
+
+ /*!
+ * \brief Create solids between given sections
+ * \param theSeqBases - list of sections (shell or face).
+ * \param theLocations - list of corresponding vertexes
+ * \param IsGenerateGroups flag that tells if it is necessary to
+ * return groups (true) or not (false).
+ * \return The list of objects. The first one is a result pipe,
+ * the other ones are the created groups. If \a IsGenerateGroups
+ * is not set the returned list contains a single object, which
+ * is the operation result.
+ */
+ ListOfGO MakePipeShellsWithoutPath (in ListOfGO theSeqBases,
+ in ListOfGO theLocations,
+ in boolean IsGenerateGroups);
+
+ /*!
+ * \brief Create a shape by extrusion of the base shape along
+ * the path shape with constant bi-normal direction along the given vector.
+ *
+ * The path shape can be a wire or an edge.
+ * \param theBase Base shape to be extruded.
+ * \param thePath Path shape to extrude the base shape along it.
+ * \param theVec Vector defines a constant binormal direction to keep the
+ * same angle beetween the Direction and the sections
+ * along the sweep surface.
+ * \param IsGenerateGroups flag that tells if it is necessary to
+ * return groups (true) or not (false).
+ * \return The list of objects. The first one is a result pipe,
+ * the other ones are the created groups. If \a IsGenerateGroups
+ * is not set the returned list contains a single object, which
+ * is the operation result.
+ */
+ ListOfGO MakePipeBiNormalAlongVector (in GEOM_Object theBase,
+ in GEOM_Object thePath,
+ in GEOM_Object theVec,
+ in boolean IsGenerateGroups);
+
+
+ /*!
+ * \brief Make a thick solid from a shape.
+ *
+ * If the input is a surface shape (face or shell) the result is
+ * a thick solid. If an input shape is a solid the result is a hollowed
+ * solid with removed faces.
+ * \param theObject face or shell to get thick solid or solid to get
+ * hollowed solid.
+ * \param theFacesIDs the list of face IDs to be removed from the result.
+ * It can be empty.
+ * \param theThickness Value of the thickness
+ * \param isCopy To make a copy of \a theObject or to modify \a theObject
+ * \param isInside If true the thickness is applied towards inside
+ * \return New GEOM_Object, containing the created pipe if isCopy = true
+ * or the modified object if isCopy = false
+ */
+ GEOM_Object MakeThickening (in GEOM_Object theObject,
+ in ListOfLong theFacesIDs,
+ in double theThickness,
+ in boolean isCopy,
+ in boolean isInside);
+
+
+ /*!
+ * \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);
+ };
+
+ /*!
+ * \brief Interface for Shapes creation:
+ *
+ * Edge from two points, Wire from edges, Face from wire,
+ * Shell from faces, Solid from shells, Compound from shapes
+ */
+ interface GEOM_IShapesOperations : GEOM_IOperations
+ {
+ /*!
+ * \brief Create a linear edge with specified ends.
+ * \param thePnt1 Point for the first end of edge.
+ * \param thePnt2 Point for the second end of edge.
+ * \return New GEOM_Object, containing the created edge.
+ */
+ GEOM_Object MakeEdge (in GEOM_Object thePnt1, in GEOM_Object thePnt2);
+
+ /*!
+ * \brief Create an edge on another edge, corresponding to the given length on the given edge.
+ * \param theRefCurve The referenced edge.
+ * \param theLength Length on the referenced edge. It can be
+ * negative for extrapolation on base curve.
+ * \param theStartPoint Any vertex close to one of edge's
+ * ends to select start point among them.
+ * If NULL, fist vertex is used.
+ * \return New GEOM_Object, containing the created edge.
+ */
+ GEOM_Object MakeEdgeOnCurveByLength (in GEOM_Object theRefCurve,
+ in double theLength,
+ in GEOM_Object theStartPoint);
+
+ /*!
+ * \brief Create an edge from specified wire.
+ * \param theWire source Wire.
+ * \param theLinearTolerance linear tolerance value
+ * \param theAngularTolerance angular tolerance value
+ * \return New GEOM_Object, containing the created edge.
+ */
+ GEOM_Object MakeEdgeWire (in GEOM_Object theWire,
+ in double theLinearTolerance,
+ in double theAngularTolerance);
+
+ /*!
+ * \brief Create a wire from the set of edges and wires.
+ * \param theEdgesAndWires List of edge and/or wires.
+ * \param theTolerance Maximum distance between vertices, that will be merged.
+ * Values less than 1e-07 are equivalent to 1e-07 (Precision::Confusion()).
+ * \return New GEOM_Object, containing the created wire.
+ */
+ GEOM_Object MakeWire (in ListOfGO theEdgesAndWires,
+ in double theTolerance);
+
+ /*!
+ * \brief Create a face on the given wire.
+ * \param theWire closed Wire or Edge to build the face on.
+ * \param isPlanarWanted If TRUE, only planar face will be built.
+ * If impossible, NULL object will be returned.
+ * \return New GEOM_Object, containing the created face.
+ */
+ GEOM_Object MakeFace (in GEOM_Object theWire, in boolean isPlanarWanted);
+
+ /*!
+ * \brief Create a face on the given wires set.
+ * \param theWires List of closed wires or edges to build the face on.
+ * \param isPlanarWanted If TRUE, only planar face will be built.
+ * If impossible, NULL object will be returned.
+ * \return New GEOM_Object, containing the created face.
+ */
+ GEOM_Object MakeFaceWires (in ListOfGO theWires, in boolean isPlanarWanted);
+
+ /**
+ * \brief Create a face based on surface of theFace limited by theWire.
+ * \param theFace the face whose surface is used to create a new face.
+ * \param theWire closed Wire build the face.
+ * \return New GEOM_Object, containing the created face.
+ */
+ GEOM_Object MakeFaceFromSurface(in GEOM_Object theFace,
+ in GEOM_Object theWire);
+
+ /*!
+ * \brief Create a face from a set of edges with the given constraints.
+ * \param theConstraints List of edges and constraint faces (as a sequence of a Edge + Face couples):
+ * - edges should form a closed wire;
+ * - for each edge, constraint face is optional: if a constraint face is missing
+ * for some edge, this means that there no constraint associated with this edge.
+ * \return New GEOM_Object, containing the created face.
+ */
+ GEOM_Object MakeFaceWithConstraints(in ListOfGO theConstraints);
+
+ /*!
+ * \brief Create a shell from the set of faces and shells.
+ * \param theFacesAndShells List of faces and/or shells.
+ * \return New GEOM_Object, containing the created shell.
+ */
+ GEOM_Object MakeShell (in ListOfGO theFacesAndShells);
+
+ /*!
+ * \brief Create a solid, bounded by the given shell.
+ * \param theShell Bounding shell.
+ * \return New GEOM_Object, containing the created solid.
+ */
+ GEOM_Object MakeSolidShell (in GEOM_Object theShell);
+
+ /*!
+ * \brief Create a solid, bounded by the given shells.
+ * \param theShells Bounding shells.
+ * \return New GEOM_Object, containing the created solid.
+ */
+ GEOM_Object MakeSolidShells (in ListOfGO theShells);
+
+ /*!
+ * \brief Create a compound of the given shapes.
+ * \param theShapes List of shapes to put in compound.
+ * \return New GEOM_Object, containing the created compound.
+ */
+ GEOM_Object MakeCompound (in ListOfGO theShapes);
+
+ /*!
+ * \brief Make a solid (or solids) from connected set of faces and/or shells.
+ * \param theFacesOrShells List of faces and/or shells.
+ * \param isIntersect If TRUE, forces performing intersections between arguments.
+ *
+ * \return New GEOM_Object, containing the created solid (or compound of solids).
+ */
+ GEOM_Object MakeSolidFromConnectedFaces (in ListOfGO theFacesOrShells, in boolean isIntersect);
+
+ /*!
+ * \brief Replace coincident faces in \a theShapes by one face.
+ * \param theShapes Initial shapes.
+ * \param theTolerance Maximum distance between faces, which can be considered as coincident.
+ * \param doKeepNonSolids If FALSE, only solids will present in the result, otherwise all initial shapes.
+ * \return New GEOM_Object containing copies of theShapes without coincident faces.
+ */
+ GEOM_Object MakeGlueFaces (in ListOfGO theShapes, in double theTolerance, in boolean doKeepNonSolids);
+
+ /*!
+ * Find coincident faces in theShapes for possible gluing.
+ * \param theShapes Initial shapes.
+ * \param theTolerance Maximum distance between faces, which can be considered as coincident.
+ * \return ListOfGO
+ */
+ ListOfGO GetGlueFaces (in ListOfGO theShapes, in double theTolerance);
+
+ /*!
+ * \brief Replace coincident faces in \a theShapes by one face
+ * in compliance with given list of faces
+ * \param theShapes Initial shapes.
+ * \param theTolerance Maximum distance between faces, which can be considered as coincident.
+ * \param theFaces List of faces for gluing.
+ * \param doKeepNonSolids If FALSE, only solids will present in the result, otherwise all initial shapes.
+ * \param doGlueAllEdges If TRUE, all coincident edges of <VAR>theShape</VAR>
+ * will be glued, otherwise only the edges,
+ * belonging to <VAR>theFaces</VAR>.
+ * \return New GEOM_Object containing copies of theShapes without coincident faces.
+ */
+ GEOM_Object MakeGlueFacesByList (in ListOfGO theShapes, in double theTolerance,
+ in ListOfGO theFaces, in boolean doKeepNonSolids,
+ in boolean doGlueAllEdges);
+
+ /*!
+ * \brief Replace coincident edges in \a theShapes by one edge.
+ * \param theShapes Initial shapes.
+ * \param theTolerance Maximum distance between edges, which can be considered as coincident.
+ * \return New GEOM_Object containing copies of theShapes without coincident edges.
+ */
+ GEOM_Object MakeGlueEdges (in ListOfGO theShapes, in double theTolerance);
+
+ /*!
+ * Find coincident edges in \a theShapes for possible gluing.
+ * \param theShapes Initial shapes.
+ * \param theTolerance Maximum distance between edges, which can be considered as coincident.
+ * \return ListOfGO
+ */
+ ListOfGO GetGlueEdges (in ListOfGO theShapes, in double theTolerance);
+
+ /*!
+ * \brief Replace coincident edges in \a theShapes by one edge
+ * in compliance with given list of edges
+ * \param theShapes Initial shapes.
+ * \param theTolerance Maximum distance between edges, which can be considered as coincident.
+ * \param theEdges List of edges for gluing.
+ * \return New GEOM_Object containing copies of theShapes without some edges.
+ */
+ GEOM_Object MakeGlueEdgesByList (in ListOfGO theShapes,
+ in double theTolerance,
+ in ListOfGO theEdges);
+
+ /*!
+ * \brief Get all sub-shapes and groups of \a theShape,
+ * that were created already by any other methods.
+ * \param theShape Any shape.
+ * \param theGroupsOnly If this parameter is TRUE, only groups will be
+ * returned, else all found sub-shapes and groups.
+ * \return List of existing sub-objects of \a theShape.
+ */
+ ListOfGO GetExistingSubObjects (in GEOM_Object theShape,
+ in boolean theGroupsOnly);
+
+ /*!
+ * \brief Deprecated method.
+ *
+ * Use MakeAllSubShapes() instead.
+ */
+ ListOfGO MakeExplode (in GEOM_Object theShape,
+ in long theShapeType,
+ in boolean isSorted);
+
+ /*!
+ * \brief Explode a shape on sub-shapes of a given type.
+ *
+ * If the shape itself has the given type, it is also returned.
+ * \param theShape Shape to be exploded.
+ * \param theShapeType Type of sub-shapes to be retrieved.
+ * \param isSorted If this parameter is TRUE, sub-shapes will be
+ * sorted by coordinates of their gravity centers.
+ * \return List of sub-shapes of type theShapeType, contained in theShape.
+ */
+ ListOfGO MakeAllSubShapes (in GEOM_Object theShape,
+ in long theShapeType,
+ in boolean isSorted);
+
+ /*!
+ * \brief Extract all sub-shapes of the given type from
+ * the given shape, excluding the shape itself.
+ * \param theShape Shape to be exploded.
+ * \param theShapeType Type of sub-shapes to be retrieved.
+ * \param isSorted If this parameter is TRUE, sub-shapes will be
+ * sorted by coordinates of their gravity centers.
+ * \return List of sub-shapes of type theShapeType, contained in theShape.
+ */
+ ListOfGO ExtractSubShapes (in GEOM_Object theShape,
+ in long theShapeType,
+ in boolean isSorted);
+
+ /*!
+ * \brief Deprecated method. Use GetAllSubShapesIDs() instead.
+ */
+ ListOfLong SubShapeAllIDs (in GEOM_Object theShape,
+ in long theShapeType,
+ in boolean isSorted);
+
+ /*!
+ * \brief Explode a shape on sub-shapes of a given type.
+ *
+ * Does the same, as MakeAllSubShapes, but returns IDs of
+ * sub-shapes, not GEOM_Object. It works faster.
+ * \param theShape Shape to be exploded.
+ * \param theShapeType Type of sub-shapes to be retrieved.
+ * \param isSorted If this parameter is TRUE, sub-shapes will be
+ * sorted by coordinates of their gravity centers.
+ * \return List of IDs of sub-shapes of type theShapeType, contained in theShape.
+ */
+ ListOfLong GetAllSubShapesIDs (in GEOM_Object theShape,
+ in long theShapeType,
+ in boolean isSorted);
+
+ /*!
+ * \brief Get a sub-shape defined by its unique ID inside \a theMainShape
+ * \param theMainShape Main shape.
+ * \param theID Unique ID of sub-shape inside \a theMainShape.
+ * \return GEOM_Object, corresponding to found sub-shape.
+ * \note The sub-shape GEOM_Object can has ONLY ONE function.
+ * Don't try to apply modification operations (without copy) on them.
+ */
+ GEOM_Object GetSubShape (in GEOM_Object theMainShape,
+ in long theID);
+
+ /*!
+ * \brief Get a set of sub-shapes defined by their unique IDs inside \a theMainShape
+ * \param theMainShape Main shape.
+ * \param theIndices List of unique IDs of sub-shapes inside \a theMainShape.
+ * \return List of GEOM_Object, corresponding to found sub-shapes.
+ * \note The sub-shape GEOM_Object can has ONLY ONE function.
+ * Don't try to apply modification operations (without copy) on them.
+ */
+ ListOfGO MakeSubShapes (in GEOM_Object theMainShape,
+ in ListOfLong theIndices);
+
+ /*!
+ * Get global index of \a theSubShape in \a theMainShape.
+ * \param theMainShape Main shape.
+ * \param theSubShape Sub-shape of the main shape.
+ * \return global index of \a theSubShape in \a theMainShape.
+ */
+ long GetSubShapeIndex (in GEOM_Object theMainShape, in GEOM_Object theSubShape);