1 // Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // File : SMESH_MeshEditor.idl
25 #ifndef _SMESH_MESHEDITOR_IDL_
26 #define _SMESH_MESHEDITOR_IDL_
28 #include "SMESH_Mesh.idl"
33 * This interface makes modifications on the Mesh - removing elements and nodes etc.
35 interface NumericalFunctor;
36 interface SMESH_MeshEditor
39 * \brief Wrap a sequence of ids in a SMESH_IDSource
40 * \param IDsOfElements list of mesh elements identifiers
41 * \return new ID source object
43 SMESH_IDSource MakeIDSource(in long_array IDsOfElements, in ElementType type);
46 * \brief Remove mesh elements specified by their identifiers.
47 * \param IDsOfElements list of mesh elements identifiers
48 * \return \c true if elements are correctly removed or \c false otherwise
50 boolean RemoveElements(in long_array IDsOfElements);
53 * \brief Remove mesh nodes specified by their identifiers.
54 * \param IDsOfNodes list of mesh nodes identifiers
55 * \return \c true if nodes are correctly removed or \c false otherwise
57 boolean RemoveNodes(in long_array IDsOfNodes);
60 * \brief Remove all orphan nodes.
61 * \return number of removed nodes
63 long RemoveOrphanNodes();
66 * \brief Add new node.
67 * \param x X coordinate of new node
68 * \param y Y coordinate of new node
69 * \param z Z coordinate of new node
70 * \return integer identifier of new node
72 long AddNode(in double x, in double y, in double z);
75 * Create 0D element on the given node.
76 * \param IdOfNode Node IDs for creation of element.
78 long Add0DElement(in long IDOfNode);
81 * Create edge, either linear and quadratic (this is determed
82 * by number of given nodes).
83 * \param IdsOfNodes List of node IDs for creation of element.
84 * Needed order of nodes in this list corresponds to description
85 * of MED. This description is located by the following link:
86 * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
88 long AddEdge(in long_array IDsOfNodes);
91 * Create face, either linear and quadratic (this is determed
92 * by number of given nodes).
93 * \param IdsOfNodes List of node IDs for creation of element.
94 * Needed order of nodes in this list corresponds to description
95 * of MED. This description is located by the following link:
96 * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
98 long AddFace(in long_array IDsOfNodes);
100 long AddPolygonalFace(in long_array IdsOfNodes);
103 * Create volume, either linear and quadratic (this is determed
104 * by number of given nodes).
105 * \param IdsOfNodes List of node IDs for creation of element.
106 * Needed order of nodes in this list corresponds to description
107 * of MED. This description is located by the following link:
108 * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
110 long AddVolume(in long_array IDsOfNodes);
113 * Create volume of many faces, giving nodes for each face.
114 * \param IdsOfNodes List of node IDs for volume creation face by face.
115 * \param Quantities List of integer values, Quantities[i]
116 * gives quantity of nodes in face number i.
118 long AddPolyhedralVolume (in long_array IdsOfNodes,
119 in long_array Quantities);
122 * Create volume of many faces, giving IDs of existing faces.
123 * \param IdsOfFaces List of face IDs for volume creation.
124 * \note The created volume will refer only to nodes
125 * of the given faces, not to the faces itself.
127 long AddPolyhedralVolumeByFaces (in long_array IdsOfFaces);
130 * \brief Bind a node to a vertex
131 * \param NodeID - node ID
132 * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
134 void SetNodeOnVertex(in long NodeID, in long VertexID)
135 raises (SALOME::SALOME_Exception);
137 * \brief Store node position on an edge
138 * \param NodeID - node ID
139 * \param EdgeID - edge ID available through GEOM_Object.GetSubShapeIndices()[0]
140 * \param paramOnEdge - parameter on edge where the node is located
142 void SetNodeOnEdge(in long NodeID, in long EdgeID, in double paramOnEdge)
143 raises (SALOME::SALOME_Exception);
145 * \brief Store node position on a face
146 * \param NodeID - node ID
147 * \param FaceID - face ID available through GEOM_Object.GetSubShapeIndices()[0]
148 * \param u - U parameter on face where the node is located
149 * \param v - V parameter on face where the node is located
151 void SetNodeOnFace(in long NodeID, in long FaceID, in double u, in double v)
152 raises (SALOME::SALOME_Exception);
154 * \brief Bind a node to a solid
155 * \param NodeID - node ID
156 * \param SolidID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
158 void SetNodeInVolume(in long NodeID, in long SolidID)
159 raises (SALOME::SALOME_Exception);
161 * \brief Bind an element to a shape
162 * \param ElementID - element ID
163 * \param ShapeID - shape ID available through GEOM_Object.GetSubShapeIndices()[0]
165 void SetMeshElementOnShape(in long ElementID, in long ShapeID)
166 raises (SALOME::SALOME_Exception);
169 boolean MoveNode(in long NodeID, in double x, in double y, in double z);
171 boolean InverseDiag(in long NodeID1, in long NodeID2);
173 boolean DeleteDiag(in long NodeID1, in long NodeID2);
175 boolean Reorient(in long_array IDsOfElements);
177 boolean ReorientObject(in SMESH_IDSource theObject);
180 * \brief Fuse neighbour triangles into quadrangles.
181 * \param theElems The triangles to be fused.
182 * \param theCriterion Is used to choose a neighbour to fuse with.
183 * \param theMaxAngle Is a max angle between element normals at which fusion
184 * is still performed; theMaxAngle is mesured in radians.
185 * \return TRUE in case of success, FALSE otherwise.
187 boolean TriToQuad (in long_array IDsOfElements,
188 in NumericalFunctor Criterion,
192 * \brief Fuse neighbour triangles into quadrangles.
194 * Behaves like the above method, taking list of elements from \a theObject
196 boolean TriToQuadObject (in SMESH_IDSource theObject,
197 in NumericalFunctor Criterion,
201 * \brief Split quadrangles into triangles.
202 * \param theElems The faces to be splitted.
203 * \param theCriterion Is used to choose a diagonal for splitting.
204 * \return TRUE in case of success, FALSE otherwise.
206 boolean QuadToTri (in long_array IDsOfElements,
207 in NumericalFunctor Criterion);
210 * \brief Split quadrangles into triangles.
212 * Behaves like the above method, taking list of elements from \a theObject
214 boolean QuadToTriObject (in SMESH_IDSource theObject,
215 in NumericalFunctor Criterion);
218 * \brief Split quadrangles into triangles.
219 * \param theElems The faces to be splitted.
220 * \param the13Diag Is used to choose a diagonal for splitting.
221 * \return TRUE in case of success, FALSE otherwise.
223 boolean SplitQuad (in long_array IDsOfElements,
227 * \brief Split quadrangles into triangles.
229 * Behaves like the above method, taking list of elements from \a theObject
231 boolean SplitQuadObject (in SMESH_IDSource theObject,
235 * Find better splitting of the given quadrangle.
236 * \param IDOfQuad ID of the quadrangle to be splitted.
237 * \param Criterion A criterion to choose a diagonal for splitting.
238 * \return 1 if 1-3 diagonal is better, 2 if 2-4
239 * diagonal is better, 0 if error occurs.
241 long BestSplit (in long IDOfQuad,
242 in NumericalFunctor Criterion);
245 * \brief Split volumic elements into tetrahedrons
246 * \param elems - elements to split
247 * \param methodFlags - flags passing splitting method:
248 * 1 - split the hexahedron into 5 tetrahedrons
249 * 2 - split the hexahedron into 6 tetrahedrons
250 * 3 - split the hexahedron into 24 tetrahedrons
252 void SplitVolumesIntoTetra(in SMESH_IDSource elems, in short methodFlags)
253 raises (SALOME::SALOME_Exception);
256 enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
258 boolean Smooth(in long_array IDsOfElements,
259 in long_array IDsOfFixedNodes,
260 in long MaxNbOfIterations,
261 in double MaxAspectRatio,
262 in Smooth_Method Method);
264 boolean SmoothObject(in SMESH_IDSource theObject,
265 in long_array IDsOfFixedNodes,
266 in long MaxNbOfIterations,
267 in double MaxAspectRatio,
268 in Smooth_Method Method);
270 boolean SmoothParametric(in long_array IDsOfElements,
271 in long_array IDsOfFixedNodes,
272 in long MaxNbOfIterations,
273 in double MaxAspectRatio,
274 in Smooth_Method Method);
276 boolean SmoothParametricObject(in SMESH_IDSource theObject,
277 in long_array IDsOfFixedNodes,
278 in long MaxNbOfIterations,
279 in double MaxAspectRatio,
280 in Smooth_Method Method);
282 void ConvertToQuadratic(in boolean theForce3d);
284 boolean ConvertFromQuadratic();
286 void RenumberNodes();
288 void RenumberElements();
291 * \brief Genarate dim+1 elements by rotation of given elements around axis
292 * \param IDsOfElements - elements to ratate
293 * \param Axix - rotation axis
294 * \param AngleInRadians - rotation angle
295 * \param NbOfSteps - number of elements to generate from one element
297 void RotationSweep(in long_array IDsOfElements,
299 in double AngleInRadians,
301 in double Tolerance);
303 * \brief Same as previous but additionally create groups of elements
304 * generated from elements belonging to preexisting groups
306 ListOfGroups RotationSweepMakeGroups(in long_array IDsOfElements,
308 in double AngleInRadians,
310 in double Tolerance);
312 * \brief Genarate dim+1 elements by rotation of the object around axis
313 * \param theObject - object containing elements to ratate
314 * \param Axix - rotation axis
315 * \param AngleInRadians - rotation angle
316 * \param NbOfSteps - number of elements to generate from one element
318 void RotationSweepObject(in SMESH_IDSource theObject,
320 in double AngleInRadians,
322 in double Tolerance);
324 * \brief Same as previous but additionally create groups of elements
325 * generated from elements belonging to preexisting groups
327 ListOfGroups RotationSweepObjectMakeGroups(in SMESH_IDSource theObject,
329 in double AngleInRadians,
331 in double Tolerance);
333 * \brief Genarate dim+1 elements by rotation of the object around axis
334 * \param theObject - object containing elements to ratate
335 * \param Axix - rotation axis
336 * \param AngleInRadians - rotation angle
337 * \param NbOfSteps - number of elements to generate from one element
339 void RotationSweepObject1D(in SMESH_IDSource theObject,
341 in double AngleInRadians,
343 in double Tolerance);
345 * \brief Same as previous but additionally create groups of elements
346 * generated from elements belonging to preexisting groups
348 ListOfGroups RotationSweepObject1DMakeGroups(in SMESH_IDSource theObject,
350 in double AngleInRadians,
352 in double Tolerance);
354 * \brief Genarate dim+1 elements by rotation of the object around axis
355 * \param theObject - object containing elements to ratate
356 * \param Axix - rotation axis
357 * \param AngleInRadians - rotation angle
358 * \param NbOfSteps - number of elements to generate from one element
360 void RotationSweepObject2D(in SMESH_IDSource theObject,
362 in double AngleInRadians,
364 in double Tolerance);
366 * \brief Same as previous but additionally create groups of elements
367 * generated from elements belonging to preexisting groups
369 ListOfGroups RotationSweepObject2DMakeGroups(in SMESH_IDSource theObject,
371 in double AngleInRadians,
373 in double Tolerance);
375 * \brief Genarate dim+1 elements by extrusion of elements along vector
376 * \param IDsOfElements - elements to sweep
377 * \param StepVector - vector giving direction and distance of an extrusion step
378 * \param NbOfSteps - number of elements to generate from one element
380 void ExtrusionSweep(in long_array IDsOfElements,
381 in DirStruct StepVector,
384 * \brief Same as previous but additionally create groups of elements
385 * generated from elements belonging to preexisting groups
387 ListOfGroups ExtrusionSweepMakeGroups(in long_array IDsOfElements,
388 in DirStruct StepVector,
391 * Generate new elements by extrusion of theElements
392 * by StepVector by NbOfSteps
393 * param ExtrFlags set flags for performing extrusion
394 * param SewTolerance - uses for comparing locations of nodes if flag
395 * EXTRUSION_FLAG_SEW is set
397 void AdvancedExtrusion(in long_array IDsOfElements,
398 in DirStruct StepVector,
401 in double SewTolerance);
403 * \brief Same as previous but additionally create groups of elements
404 * generated from elements belonging to preexisting groups
406 ListOfGroups AdvancedExtrusionMakeGroups(in long_array IDsOfElements,
407 in DirStruct StepVector,
410 in double SewTolerance);
412 void ExtrusionSweepObject(in SMESH_IDSource theObject,
413 in DirStruct StepVector,
415 ListOfGroups ExtrusionSweepObjectMakeGroups(in SMESH_IDSource theObject,
416 in DirStruct StepVector,
419 void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
420 in DirStruct StepVector,
422 ListOfGroups ExtrusionSweepObject1DMakeGroups(in SMESH_IDSource theObject,
423 in DirStruct StepVector,
426 void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
427 in DirStruct StepVector,
429 ListOfGroups ExtrusionSweepObject2DMakeGroups(in SMESH_IDSource theObject,
430 in DirStruct StepVector,
433 enum Extrusion_Error {
438 EXTR_BAD_STARTING_NODE,
439 EXTR_BAD_ANGLES_NUMBER,
440 EXTR_CANT_GET_TANGENT
443 ListOfGroups ExtrusionAlongPathX(in long_array IDsOfElements,
444 in SMESH_IDSource Path,
446 in boolean HasAngles,
447 in double_array Angles,
448 in boolean LinearVariation,
449 in boolean HasRefPoint,
450 in PointStruct RefPoint,
451 in boolean MakeGroups,
452 in ElementType ElemType,
453 out Extrusion_Error Error);
455 ListOfGroups ExtrusionAlongPathObjX(in SMESH_IDSource theObject,
456 in SMESH_IDSource Path,
458 in boolean HasAngles,
459 in double_array Angles,
460 in boolean LinearVariation,
461 in boolean HasRefPoint,
462 in PointStruct RefPoint,
463 in boolean MakeGroups,
464 in ElementType ElemType,
465 out Extrusion_Error Error);
467 Extrusion_Error ExtrusionAlongPath(in long_array IDsOfElements,
468 in SMESH_Mesh PathMesh,
469 in GEOM::GEOM_Object PathShape,
471 in boolean HasAngles,
472 in double_array Angles,
473 in boolean HasRefPoint,
474 in PointStruct RefPoint);
475 ListOfGroups ExtrusionAlongPathMakeGroups(in long_array IDsOfElements,
476 in SMESH_Mesh PathMesh,
477 in GEOM::GEOM_Object PathShape,
479 in boolean HasAngles,
480 in double_array Angles,
481 in boolean HasRefPoint,
482 in PointStruct RefPoint,
483 out Extrusion_Error Error);
485 Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource theObject,
486 in SMESH_Mesh PathMesh,
487 in GEOM::GEOM_Object PathShape,
489 in boolean HasAngles,
490 in double_array Angles,
491 in boolean HasRefPoint,
492 in PointStruct RefPoint);
493 ListOfGroups ExtrusionAlongPathObjectMakeGroups(in SMESH_IDSource theObject,
494 in SMESH_Mesh PathMesh,
495 in GEOM::GEOM_Object PathShape,
497 in boolean HasAngles,
498 in double_array Angles,
499 in boolean HasRefPoint,
500 in PointStruct RefPoint,
501 out Extrusion_Error Error);
503 Extrusion_Error ExtrusionAlongPathObject1D(in SMESH_IDSource theObject,
504 in SMESH_Mesh PathMesh,
505 in GEOM::GEOM_Object PathShape,
507 in boolean HasAngles,
508 in double_array Angles,
509 in boolean HasRefPoint,
510 in PointStruct RefPoint);
511 ListOfGroups ExtrusionAlongPathObject1DMakeGroups(in SMESH_IDSource theObject,
512 in SMESH_Mesh PathMesh,
513 in GEOM::GEOM_Object PathShape,
515 in boolean HasAngles,
516 in double_array Angles,
517 in boolean HasRefPoint,
518 in PointStruct RefPoint,
519 out Extrusion_Error Error);
521 Extrusion_Error ExtrusionAlongPathObject2D(in SMESH_IDSource theObject,
522 in SMESH_Mesh PathMesh,
523 in GEOM::GEOM_Object PathShape,
525 in boolean HasAngles,
526 in double_array Angles,
527 in boolean HasRefPoint,
528 in PointStruct RefPoint);
529 ListOfGroups ExtrusionAlongPathObject2DMakeGroups(in SMESH_IDSource theObject,
530 in SMESH_Mesh PathMesh,
531 in GEOM::GEOM_Object PathShape,
533 in boolean HasAngles,
534 in double_array Angles,
535 in boolean HasRefPoint,
536 in PointStruct RefPoint,
537 out Extrusion_Error Error);
540 * Compute rotation angles for ExtrusionAlongPath as linear variation
541 * of given angles along path steps
542 * param PathMesh mesh containing a 1D sub-mesh on the edge, along
543 * which proceeds the extrusion
544 * param PathShape is shape(edge); as the mesh can be complex, the edge
545 * is used to define the sub-mesh for the path
547 double_array LinearAnglesVariation(in SMESH_Mesh PathMesh,
548 in GEOM::GEOM_Object PathShape,
549 in double_array Angles);
551 enum MirrorType { POINT, AXIS, PLANE };
553 void Mirror (in long_array IDsOfElements,
554 in AxisStruct Mirror,
557 ListOfGroups MirrorMakeGroups (in long_array IDsOfElements,
558 in AxisStruct Mirror,
560 SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements,
561 in AxisStruct Mirror,
563 in boolean CopyGroups,
566 void MirrorObject (in SMESH_IDSource theObject,
567 in AxisStruct Mirror,
570 ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject,
571 in AxisStruct Mirror,
573 SMESH_Mesh MirrorObjectMakeMesh (in SMESH_IDSource theObject,
574 in AxisStruct Mirror,
576 in boolean CopyGroups,
579 void Translate (in long_array IDsOfElements,
582 ListOfGroups TranslateMakeGroups (in long_array IDsOfElements,
583 in DirStruct Vector);
584 SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements,
586 in boolean CopyGroups,
589 void TranslateObject (in SMESH_IDSource theObject,
592 ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject,
593 in DirStruct Vector);
594 SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
596 in boolean CopyGroups,
599 void Scale (in SMESH_IDSource theObject,
600 in PointStruct thePoint,
601 in double_array theScaleFact,
603 ListOfGroups ScaleMakeGroups (in SMESH_IDSource theObject,
604 in PointStruct thePoint,
605 in double_array theScaleFact);
606 SMESH_Mesh ScaleMakeMesh (in SMESH_IDSource theObject,
607 in PointStruct thePoint,
608 in double_array theScaleFact,
609 in boolean CopyGroups,
612 void Rotate (in long_array IDsOfElements,
614 in double AngleInRadians,
616 ListOfGroups RotateMakeGroups (in long_array IDsOfElements,
618 in double AngleInRadians);
619 SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements,
621 in double AngleInRadians,
622 in boolean CopyGroups,
625 void RotateObject (in SMESH_IDSource theObject,
627 in double AngleInRadians,
629 ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject,
631 in double AngleInRadians);
632 SMESH_Mesh RotateObjectMakeMesh (in SMESH_IDSource theObject,
634 in double AngleInRadians,
635 in boolean CopyGroups,
638 void FindCoincidentNodes (in double Tolerance,
639 out array_of_long_array GroupsOfNodes);
641 void FindCoincidentNodesOnPart (in SMESH_IDSource SubMeshOrGroup,
643 out array_of_long_array GroupsOfNodes);
645 void FindCoincidentNodesOnPartBut (in SMESH_IDSource SubMeshOrGroup,
647 out array_of_long_array GroupsOfNodes,
648 in ListOfIDSources ExceptSubMeshOrGroups);
650 void MergeNodes (in array_of_long_array GroupsOfNodes);
653 * \brief Find elements built on the same nodes.
654 * \param MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching.
655 * \return List of groups of equal elements.
657 void FindEqualElements (in SMESH_IDSource MeshOrSubMeshOrGroup,
658 out array_of_long_array GroupsOfElementsID);
661 * \brief Merge elements in each given group.
662 * \param GroupsOfElementsID Groups of elements for merging.
664 void MergeElements(in array_of_long_array GroupsOfElementsID);
667 * \brief Merge equal elements in the whole mesh.
669 void MergeEqualElements();
672 * If the given ID is a valid node ID (nodeID > 0), just move this node, else
673 * move the node closest to the point to point's location and return ID of the node
675 long MoveClosestNodeToPoint(in double x, in double y, in double z, in long nodeID);
678 * Return ID of node closest to a given point
680 long FindNodeClosestTo(in double x, in double y, in double z);
683 * Return elements of given type where the given point is IN or ON.
685 * 'ALL' type means elements of any type excluding nodes and 0D elements
687 long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type);
690 * Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
691 * TopAbs_UNKNOWN state means that either mesh is wrong or the analysis fails.
693 short GetPointState(in double x, in double y, in double z);
697 SEW_BORDER1_NOT_FOUND,
698 SEW_BORDER2_NOT_FOUND,
699 SEW_BOTH_BORDERS_NOT_FOUND,
701 SEW_VOLUMES_TO_SPLIT,
702 // for SewSideElements() only:
703 SEW_DIFF_NB_OF_ELEMENTS,
704 SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
709 Sew_Error SewFreeBorders (in long FirstNodeID1,
710 in long SecondNodeID1,
712 in long FirstNodeID2,
713 in long SecondNodeID2,
715 in boolean CreatePolygons,
716 in boolean CreatePolyedrs);
718 Sew_Error SewConformFreeBorders (in long FirstNodeID1,
719 in long SecondNodeID1,
721 in long FirstNodeID2,
722 in long SecondNodeID2);
724 Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder,
725 in long SecondNodeIDOnFreeBorder,
726 in long LastNodeIDOnFreeBorder,
727 in long FirstNodeIDOnSide,
728 in long LastNodeIDOnSide,
729 in boolean CreatePolygons,
730 in boolean CreatePolyedrs);
732 Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
733 in long_array IDsOfSide2Elements,
734 in long NodeID1OfSide1ToMerge,
735 in long NodeID1OfSide2ToMerge,
736 in long NodeID2OfSide1ToMerge,
737 in long NodeID2OfSide2ToMerge);
740 * Set new nodes for given element.
741 * If number of nodes is not corresponded to type of
742 * element - returns false
744 boolean ChangeElemNodes(in long ide, in long_array newIDs);
747 * Return data of mesh edition preview which is computed provided
748 * that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
750 MeshPreviewStruct GetPreviewData();
753 * If during last operation of MeshEditor some nodes were
754 * created this method returns list of it's IDs, if new nodes
755 * not creared - returns empty list
757 long_array GetLastCreatedNodes();
760 * If during last operation of MeshEditor some elements were
761 * created this method returns list of it's IDs, if new elements
762 * not creared - returns empty list
764 long_array GetLastCreatedElems();
767 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
768 * \param theNodes - identifiers of nodes to be doubled
769 * \param theModifiedElems - identifiers of elements to be updated by the new (doubled)
770 * nodes. If list of element identifiers is empty then nodes are doubled but
771 * they not assigned to elements
772 * \return TRUE if operation has been completed successfully, FALSE otherwise
773 * \sa DoubleNode(), DoubleNodeGroup(), DoubleNodeGroups()
775 boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems );
778 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
779 * This method provided for convenience works as DoubleNodes() described above.
780 * \param theNodeId - identifier of node to be doubled.
781 * \param theModifiedElems - identifiers of elements to be updated.
782 * \return TRUE if operation has been completed successfully, FALSE otherwise
783 * \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups()
785 boolean DoubleNode( in long theNodeId, in long_array theModifiedElems );
788 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
789 * This method provided for convenience works as DoubleNodes() described above.
790 * \param theNodes - group of nodes to be doubled.
791 * \param theModifiedElems - group of elements to be updated.
792 * \return TRUE if operation has been completed successfully, FALSE otherwise
793 * \sa DoubleNode(), DoubleNodes(), DoubleNodeGroups(), DoubleNodeGroupNew()
795 boolean DoubleNodeGroup( in SMESH_GroupBase theNodes,
796 in SMESH_GroupBase theModifiedElems );
799 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
800 * Works as DoubleNodeGroup() described above, but returns a new group with
801 * newly created nodes.
802 * \param theNodes - group of nodes to be doubled.
803 * \param theModifiedElems - group of elements to be updated.
804 * \return a new group with newly created nodes
805 * \sa DoubleNodeGroup()
807 SMESH_Group DoubleNodeGroupNew( in SMESH_GroupBase theNodes,
808 in SMESH_GroupBase theModifiedElems );
811 \brief Creates a hole in a mesh by doubling the nodes of some particular elements
812 This method provided for convenience works as DoubleNodes() described above.
813 \param theNodes - list of groups of nodes to be doubled
814 \param theModifiedElems - list of groups of elements to be updated.
815 \return TRUE if operation has been completed successfully, FALSE otherwise
816 \sa DoubleNode(), DoubleNodeGroup(), DoubleNodes()
818 boolean DoubleNodeGroups( in ListOfGroups theNodes,
819 in ListOfGroups theModifiedElems );
822 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
823 * \param theElems - the list of elements (edges or faces) to be replicated
824 * The nodes for duplication could be found from these elements
825 * \param theNodesNot - list of nodes to NOT replicate
826 * \param theAffectedElems - the list of elements (cells and edges) to which the
827 * replicated nodes should be associated to.
828 * \return TRUE if operation has been completed successfully, FALSE otherwise
829 * \sa DoubleNodeGroup(), DoubleNodeGroups()
831 boolean DoubleNodeElem( in long_array theElems,
832 in long_array theNodesNot,
833 in long_array theAffectedElems );
836 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
837 * \param theElems - the list of elements (edges or faces) to be replicated
838 * The nodes for duplication could be found from these elements
839 * \param theNodesNot - list of nodes to NOT replicate
840 * \param theShape - shape to detect affected elements (element which geometric center
841 * located on or inside shape).
842 * The replicated nodes should be associated to affected elements.
843 * \return TRUE if operation has been completed successfully, FALSE otherwise
844 * \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion()
846 boolean DoubleNodeElemInRegion( in long_array theElems,
847 in long_array theNodesNot,
848 in GEOM::GEOM_Object theShape );
851 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
852 * This method provided for convenience works as DoubleNodes() described above.
853 * \param theElems - group of of elements (edges or faces) to be replicated
854 * \param theNodesNot - group of nodes not to replicated
855 * \param theAffectedElems - group of elements to which the replicated nodes
856 * should be associated to.
857 * \return TRUE if operation has been completed successfully, FALSE otherwise
858 * \sa DoubleNodes(), DoubleNodeGroups(), DoubleNodeElemGroupNew()
860 boolean DoubleNodeElemGroup( in SMESH_GroupBase theElems,
861 in SMESH_GroupBase theNodesNot,
862 in SMESH_GroupBase theAffectedElems );
865 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
866 * Works as DoubleNodeElemGroup() described above, but returns a new group with
867 * newly created elements.
868 * \param theElems - group of of elements (edges or faces) to be replicated
869 * \param theNodesNot - group of nodes not to replicated
870 * \param theAffectedElems - group of elements to which the replicated nodes
871 * should be associated to.
872 * \return a new group with newly created elements
873 * \sa DoubleNodeElemGroup()
875 SMESH_Group DoubleNodeElemGroupNew( in SMESH_GroupBase theElems,
876 in SMESH_GroupBase theNodesNot,
877 in SMESH_GroupBase theAffectedElems );
880 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
881 * This method provided for convenience works as DoubleNodes() described above.
882 * \param theElems - group of elements (edges or faces) to be replicated
883 * \param theNodesNot - group of nodes not to replicated
884 * \param theShape - shape to detect affected elements (element which geometric center
885 * located on or inside shape).
886 * The replicated nodes should be associated to affected elements.
887 * \return TRUE if operation has been completed successfully, FALSE otherwise
888 * \sa DoubleNodesInRegion(), DoubleNodeGroupsInRegion()
890 boolean DoubleNodeElemGroupInRegion( in SMESH_GroupBase theElems,
891 in SMESH_GroupBase theNodesNot,
892 in GEOM::GEOM_Object theShape );
895 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
896 * This method provided for convenience works as DoubleNodes() described above.
897 * \param theElems - list of groups of elements (edges or faces) to be replicated
898 * \param theNodesNot - list of groups of nodes not to replicated
899 * \param theAffectedElems - group of elements to which the replicated nodes
900 * should be associated to.
901 * \return TRUE if operation has been completed successfully, FALSE otherwise
902 * \sa DoubleNodeGroup(), DoubleNodes()
904 boolean DoubleNodeElemGroups( in ListOfGroups theElems,
905 in ListOfGroups theNodesNot,
906 in ListOfGroups theAffectedElems );
909 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
910 * This method provided for convenience works as DoubleNodes() described above.
911 * \param theElems - list of groups of elements (edges or faces) to be replicated
912 * \param theNodesNot - list of groups of nodes not to replicated
913 * \param theShape - shape to detect affected elements (element which geometric center
914 * located on or inside shape).
915 * The replicated nodes should be associated to affected elements.
916 * \return TRUE if operation has been completed successfully, FALSE otherwise
917 * \sa DoubleNodeGroupInRegion(), DoubleNodesInRegion()
919 boolean DoubleNodeElemGroupsInRegion( in ListOfGroups theElems,
920 in ListOfGroups theNodesNot,
921 in GEOM::GEOM_Object theShape );
924 * \brief Generated skin mesh (containing 2D cells) from 3D mesh
925 * The created 2D mesh elements based on nodes of free faces of boundary volumes
926 * \return TRUE if operation has been completed successfully, FALSE otherwise
928 boolean Make2DMeshFrom3D();