1 // Copyright (C) 2007-2008 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
22 // 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
38 boolean RemoveElements(in long_array IDsOfElements);
40 boolean RemoveNodes(in long_array IDsOfNodes);
42 long AddNode(in double x, in double y, in double z);
45 * Create edge, either linear and quadratic (this is determed
46 * by number of given nodes).
47 * \param IdsOfNodes List of node IDs for creation of element.
48 * Needed order of nodes in this list corresponds to description
49 * of MED. This description is located by the following link:
50 * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
52 long AddEdge(in long_array IDsOfNodes);
55 * Create face, either linear and quadratic (this is determed
56 * by number of given nodes).
57 * \param IdsOfNodes List of node IDs for creation of element.
58 * Needed order of nodes in this list corresponds to description
59 * of MED. This description is located by the following link:
60 * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
62 long AddFace(in long_array IDsOfNodes);
64 long AddPolygonalFace(in long_array IdsOfNodes);
67 * Create volume, either linear and quadratic (this is determed
68 * by number of given nodes).
69 * \param IdsOfNodes List of node IDs for creation of element.
70 * Needed order of nodes in this list corresponds to description
71 * of MED. This description is located by the following link:
72 * http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
74 long AddVolume(in long_array IDsOfNodes);
77 * Create volume of many faces, giving nodes for each face.
78 * \param IdsOfNodes List of node IDs for volume creation face by face.
79 * \param Quantities List of integer values, Quantities[i]
80 * gives quantity of nodes in face number i.
82 long AddPolyhedralVolume (in long_array IdsOfNodes,
83 in long_array Quantities);
86 * Create volume of many faces, giving IDs of existing faces.
87 * \param IdsOfFaces List of face IDs for volume creation.
88 * \note The created volume will refer only to nodes
89 * of the given faces, not to the faces itself.
91 long AddPolyhedralVolumeByFaces (in long_array IdsOfFaces);
94 * \brief Bind a node to a vertex
95 * \param NodeID - node ID
96 * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
98 void SetNodeOnVertex(in long NodeID, in long VertexID)
99 raises (SALOME::SALOME_Exception);
101 * \brief Store node position on an edge
102 * \param NodeID - node ID
103 * \param EdgeID - edge ID available through GEOM_Object.GetSubShapeIndices()[0]
104 * \param paramOnEdge - parameter on edge where the node is located
106 void SetNodeOnEdge(in long NodeID, in long EdgeID, in double paramOnEdge)
107 raises (SALOME::SALOME_Exception);
109 * \brief Store node position on a face
110 * \param NodeID - node ID
111 * \param FaceID - face ID available through GEOM_Object.GetSubShapeIndices()[0]
112 * \param u - U parameter on face where the node is located
113 * \param v - V parameter on face where the node is located
115 void SetNodeOnFace(in long NodeID, in long FaceID, in double u, in double v)
116 raises (SALOME::SALOME_Exception);
118 * \brief Bind a node to a solid
119 * \param NodeID - node ID
120 * \param SolidID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
122 void SetNodeInVolume(in long NodeID, in long SolidID)
123 raises (SALOME::SALOME_Exception);
125 * \brief Bind an element to a shape
126 * \param ElementID - element ID
127 * \param ShapeID - shape ID available through GEOM_Object.GetSubShapeIndices()[0]
129 void SetMeshElementOnShape(in long ElementID, in long ShapeID)
130 raises (SALOME::SALOME_Exception);
133 boolean MoveNode(in long NodeID, in double x, in double y, in double z);
135 boolean InverseDiag(in long NodeID1, in long NodeID2);
137 boolean DeleteDiag(in long NodeID1, in long NodeID2);
139 boolean Reorient(in long_array IDsOfElements);
141 boolean ReorientObject(in SMESH_IDSource theObject);
144 * \brief Fuse neighbour triangles into quadrangles.
145 * \param theElems The triangles to be fused.
146 * \param theCriterion Is used to choose a neighbour to fuse with.
147 * \param theMaxAngle Is a max angle between element normals at which fusion
148 * is still performed; theMaxAngle is mesured in radians.
149 * \return TRUE in case of success, FALSE otherwise.
151 boolean TriToQuad (in long_array IDsOfElements,
152 in NumericalFunctor Criterion,
156 * \brief Fuse neighbour triangles into quadrangles.
158 * Behaves like the above method, taking list of elements from \a theObject
160 boolean TriToQuadObject (in SMESH_IDSource theObject,
161 in NumericalFunctor Criterion,
165 * \brief Split quadrangles into triangles.
166 * \param theElems The faces to be splitted.
167 * \param theCriterion Is used to choose a diagonal for splitting.
168 * \return TRUE in case of success, FALSE otherwise.
170 boolean QuadToTri (in long_array IDsOfElements,
171 in NumericalFunctor Criterion);
174 * \brief Split quadrangles into triangles.
176 * Behaves like the above method, taking list of elements from \a theObject
178 boolean QuadToTriObject (in SMESH_IDSource theObject,
179 in NumericalFunctor Criterion);
182 * \brief Split quadrangles into triangles.
183 * \param theElems The faces to be splitted.
184 * \param the13Diag Is used to choose a diagonal for splitting.
185 * \return TRUE in case of success, FALSE otherwise.
187 boolean SplitQuad (in long_array IDsOfElements,
191 * \brief Split quadrangles into triangles.
193 * Behaves like the above method, taking list of elements from \a theObject
195 boolean SplitQuadObject (in SMESH_IDSource theObject,
199 * Find better splitting of the given quadrangle.
200 * \param IDOfQuad ID of the quadrangle to be splitted.
201 * \param Criterion A criterion to choose a diagonal for splitting.
202 * \return 1 if 1-3 diagonal is better, 2 if 2-4
203 * diagonal is better, 0 if error occurs.
205 long BestSplit (in long IDOfQuad,
206 in NumericalFunctor Criterion);
208 enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
210 boolean Smooth(in long_array IDsOfElements,
211 in long_array IDsOfFixedNodes,
212 in long MaxNbOfIterations,
213 in double MaxAspectRatio,
214 in Smooth_Method Method);
216 boolean SmoothObject(in SMESH_IDSource theObject,
217 in long_array IDsOfFixedNodes,
218 in long MaxNbOfIterations,
219 in double MaxAspectRatio,
220 in Smooth_Method Method);
222 boolean SmoothParametric(in long_array IDsOfElements,
223 in long_array IDsOfFixedNodes,
224 in long MaxNbOfIterations,
225 in double MaxAspectRatio,
226 in Smooth_Method Method);
228 boolean SmoothParametricObject(in SMESH_IDSource theObject,
229 in long_array IDsOfFixedNodes,
230 in long MaxNbOfIterations,
231 in double MaxAspectRatio,
232 in Smooth_Method Method);
234 void ConvertToQuadratic(in boolean theForce3d);
236 boolean ConvertFromQuadratic();
238 void RenumberNodes();
240 void RenumberElements();
243 * \brief Genarate dim+1 elements by rotation of given elements around axis
244 * \param IDsOfElements - elements to ratate
245 * \param Axix - rotation axis
246 * \param AngleInRadians - rotation angle
247 * \param NbOfSteps - number of elements to generate from one element
249 void RotationSweep(in long_array IDsOfElements,
251 in double AngleInRadians,
253 in double Tolerance);
255 * \brief Same as previous but additionally create groups of elements
256 * generated from elements belonging to preexisting groups
258 ListOfGroups RotationSweepMakeGroups(in long_array IDsOfElements,
260 in double AngleInRadians,
262 in double Tolerance);
264 * \brief Genarate dim+1 elements by rotation of the object around axis
265 * \param theObject - object containing elements to ratate
266 * \param Axix - rotation axis
267 * \param AngleInRadians - rotation angle
268 * \param NbOfSteps - number of elements to generate from one element
270 void RotationSweepObject(in SMESH_IDSource theObject,
272 in double AngleInRadians,
274 in double Tolerance);
276 * \brief Same as previous but additionally create groups of elements
277 * generated from elements belonging to preexisting groups
279 ListOfGroups RotationSweepObjectMakeGroups(in SMESH_IDSource theObject,
281 in double AngleInRadians,
283 in double Tolerance);
285 * \brief Genarate dim+1 elements by rotation of the object around axis
286 * \param theObject - object containing elements to ratate
287 * \param Axix - rotation axis
288 * \param AngleInRadians - rotation angle
289 * \param NbOfSteps - number of elements to generate from one element
291 void RotationSweepObject1D(in SMESH_IDSource theObject,
293 in double AngleInRadians,
295 in double Tolerance);
297 * \brief Same as previous but additionally create groups of elements
298 * generated from elements belonging to preexisting groups
300 ListOfGroups RotationSweepObject1DMakeGroups(in SMESH_IDSource theObject,
302 in double AngleInRadians,
304 in double Tolerance);
306 * \brief Genarate dim+1 elements by rotation of the object around axis
307 * \param theObject - object containing elements to ratate
308 * \param Axix - rotation axis
309 * \param AngleInRadians - rotation angle
310 * \param NbOfSteps - number of elements to generate from one element
312 void RotationSweepObject2D(in SMESH_IDSource theObject,
314 in double AngleInRadians,
316 in double Tolerance);
318 * \brief Same as previous but additionally create groups of elements
319 * generated from elements belonging to preexisting groups
321 ListOfGroups RotationSweepObject2DMakeGroups(in SMESH_IDSource theObject,
323 in double AngleInRadians,
325 in double Tolerance);
327 * \brief Genarate dim+1 elements by extrusion of elements along vector
328 * \param IDsOfElements - elements to sweep
329 * \param StepVector - vector giving direction and distance of an extrusion step
330 * \param NbOfSteps - number of elements to generate from one element
332 void ExtrusionSweep(in long_array IDsOfElements,
333 in DirStruct StepVector,
336 * \brief Same as previous but additionally create groups of elements
337 * generated from elements belonging to preexisting groups
339 ListOfGroups ExtrusionSweepMakeGroups(in long_array IDsOfElements,
340 in DirStruct StepVector,
343 * Generate new elements by extrusion of theElements
344 * by StepVector by NbOfSteps
345 * param ExtrFlags set flags for performing extrusion
346 * param SewTolerance - uses for comparing locations of nodes if flag
347 * EXTRUSION_FLAG_SEW is set
349 void AdvancedExtrusion(in long_array IDsOfElements,
350 in DirStruct StepVector,
353 in double SewTolerance);
355 * \brief Same as previous but additionally create groups of elements
356 * generated from elements belonging to preexisting groups
358 ListOfGroups AdvancedExtrusionMakeGroups(in long_array IDsOfElements,
359 in DirStruct StepVector,
362 in double SewTolerance);
364 void ExtrusionSweepObject(in SMESH_IDSource theObject,
365 in DirStruct StepVector,
367 ListOfGroups ExtrusionSweepObjectMakeGroups(in SMESH_IDSource theObject,
368 in DirStruct StepVector,
371 void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
372 in DirStruct StepVector,
374 ListOfGroups ExtrusionSweepObject1DMakeGroups(in SMESH_IDSource theObject,
375 in DirStruct StepVector,
378 void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
379 in DirStruct StepVector,
381 ListOfGroups ExtrusionSweepObject2DMakeGroups(in SMESH_IDSource theObject,
382 in DirStruct StepVector,
385 enum Extrusion_Error {
390 EXTR_BAD_STARTING_NODE,
391 EXTR_BAD_ANGLES_NUMBER,
392 EXTR_CANT_GET_TANGENT
395 ListOfGroups ExtrusionAlongPathX(in long_array IDsOfElements,
396 in SMESH_IDSource Path,
398 in boolean HasAngles,
399 in double_array Angles,
400 in boolean LinearVariation,
401 in boolean HasRefPoint,
402 in PointStruct RefPoint,
403 in boolean MakeGroups,
404 in ElementType ElemType,
405 out Extrusion_Error Error);
407 ListOfGroups ExtrusionAlongPathObjX(in SMESH_IDSource theObject,
408 in SMESH_IDSource Path,
410 in boolean HasAngles,
411 in double_array Angles,
412 in boolean LinearVariation,
413 in boolean HasRefPoint,
414 in PointStruct RefPoint,
415 in boolean MakeGroups,
416 in ElementType ElemType,
417 out Extrusion_Error Error);
419 Extrusion_Error ExtrusionAlongPath(in long_array IDsOfElements,
420 in SMESH_Mesh PathMesh,
421 in GEOM::GEOM_Object PathShape,
423 in boolean HasAngles,
424 in double_array Angles,
425 in boolean HasRefPoint,
426 in PointStruct RefPoint);
427 ListOfGroups ExtrusionAlongPathMakeGroups(in long_array IDsOfElements,
428 in SMESH_Mesh PathMesh,
429 in GEOM::GEOM_Object PathShape,
431 in boolean HasAngles,
432 in double_array Angles,
433 in boolean HasRefPoint,
434 in PointStruct RefPoint,
435 out Extrusion_Error Error);
437 Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource theObject,
438 in SMESH_Mesh PathMesh,
439 in GEOM::GEOM_Object PathShape,
441 in boolean HasAngles,
442 in double_array Angles,
443 in boolean HasRefPoint,
444 in PointStruct RefPoint);
445 ListOfGroups ExtrusionAlongPathObjectMakeGroups(in SMESH_IDSource theObject,
446 in SMESH_Mesh PathMesh,
447 in GEOM::GEOM_Object PathShape,
449 in boolean HasAngles,
450 in double_array Angles,
451 in boolean HasRefPoint,
452 in PointStruct RefPoint,
453 out Extrusion_Error Error);
455 Extrusion_Error ExtrusionAlongPathObject1D(in SMESH_IDSource theObject,
456 in SMESH_Mesh PathMesh,
457 in GEOM::GEOM_Object PathShape,
459 in boolean HasAngles,
460 in double_array Angles,
461 in boolean HasRefPoint,
462 in PointStruct RefPoint);
463 ListOfGroups ExtrusionAlongPathObject1DMakeGroups(in SMESH_IDSource theObject,
464 in SMESH_Mesh PathMesh,
465 in GEOM::GEOM_Object PathShape,
467 in boolean HasAngles,
468 in double_array Angles,
469 in boolean HasRefPoint,
470 in PointStruct RefPoint,
471 out Extrusion_Error Error);
473 Extrusion_Error ExtrusionAlongPathObject2D(in SMESH_IDSource theObject,
474 in SMESH_Mesh PathMesh,
475 in GEOM::GEOM_Object PathShape,
477 in boolean HasAngles,
478 in double_array Angles,
479 in boolean HasRefPoint,
480 in PointStruct RefPoint);
481 ListOfGroups ExtrusionAlongPathObject2DMakeGroups(in SMESH_IDSource theObject,
482 in SMESH_Mesh PathMesh,
483 in GEOM::GEOM_Object PathShape,
485 in boolean HasAngles,
486 in double_array Angles,
487 in boolean HasRefPoint,
488 in PointStruct RefPoint,
489 out Extrusion_Error Error);
492 * Compute rotation angles for ExtrusionAlongPath as linear variation
493 * of given angles along path steps
494 * param PathMesh mesh containing a 1D sub-mesh on the edge, along
495 * which proceeds the extrusion
496 * param PathShape is shape(edge); as the mesh can be complex, the edge
497 * is used to define the sub-mesh for the path
499 double_array LinearAnglesVariation(in SMESH_Mesh PathMesh,
500 in GEOM::GEOM_Object PathShape,
501 in double_array Angles);
503 enum MirrorType { POINT, AXIS, PLANE };
505 void Mirror (in long_array IDsOfElements,
506 in AxisStruct Mirror,
509 ListOfGroups MirrorMakeGroups (in long_array IDsOfElements,
510 in AxisStruct Mirror,
512 SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements,
513 in AxisStruct Mirror,
515 in boolean CopyGroups,
518 void MirrorObject (in SMESH_IDSource theObject,
519 in AxisStruct Mirror,
522 ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject,
523 in AxisStruct Mirror,
525 SMESH_Mesh MirrorObjectMakeMesh (in SMESH_IDSource theObject,
526 in AxisStruct Mirror,
528 in boolean CopyGroups,
531 void Translate (in long_array IDsOfElements,
534 ListOfGroups TranslateMakeGroups (in long_array IDsOfElements,
535 in DirStruct Vector);
536 SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements,
538 in boolean CopyGroups,
541 void TranslateObject (in SMESH_IDSource theObject,
544 ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject,
545 in DirStruct Vector);
546 SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
548 in boolean CopyGroups,
551 void Rotate (in long_array IDsOfElements,
553 in double AngleInRadians,
555 ListOfGroups RotateMakeGroups (in long_array IDsOfElements,
557 in double AngleInRadians);
558 SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements,
560 in double AngleInRadians,
561 in boolean CopyGroups,
564 void RotateObject (in SMESH_IDSource theObject,
566 in double AngleInRadians,
568 ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject,
570 in double AngleInRadians);
571 SMESH_Mesh RotateObjectMakeMesh (in SMESH_IDSource theObject,
573 in double AngleInRadians,
574 in boolean CopyGroups,
577 void FindCoincidentNodes (in double Tolerance,
578 out array_of_long_array GroupsOfNodes);
580 void FindCoincidentNodesOnPart (in SMESH_IDSource SubMeshOrGroup,
582 out array_of_long_array GroupsOfNodes);
584 void MergeNodes (in array_of_long_array GroupsOfNodes);
587 * \brief Find elements built on the same nodes.
588 * \param MeshOrSubMeshOrGroup Mesh or SubMesh, or Group of elements for searching.
589 * \return List of groups of equal elements.
591 void FindEqualElements (in SMESH_IDSource MeshOrSubMeshOrGroup,
592 out array_of_long_array GroupsOfElementsID);
595 * \brief Merge elements in each given group.
596 * \param GroupsOfElementsID Groups of elements for merging.
598 void MergeElements(in array_of_long_array GroupsOfElementsID);
601 * \brief Merge equal elements in the whole mesh.
603 void MergeEqualElements();
606 * If the given ID is a valid node ID (nodeID > 0), just move this node, else
607 * move the node closest to the point to point's location and return ID of the node
609 long MoveClosestNodeToPoint(in double x, in double y, in double z, in long nodeID);
613 SEW_BORDER1_NOT_FOUND,
614 SEW_BORDER2_NOT_FOUND,
615 SEW_BOTH_BORDERS_NOT_FOUND,
617 SEW_VOLUMES_TO_SPLIT,
618 // for SewSideElements() only:
619 SEW_DIFF_NB_OF_ELEMENTS,
620 SEW_TOPO_DIFF_SETS_OF_ELEMENTS,
625 Sew_Error SewFreeBorders (in long FirstNodeID1,
626 in long SecondNodeID1,
628 in long FirstNodeID2,
629 in long SecondNodeID2,
631 in boolean CreatePolygons,
632 in boolean CreatePolyedrs);
634 Sew_Error SewConformFreeBorders (in long FirstNodeID1,
635 in long SecondNodeID1,
637 in long FirstNodeID2,
638 in long SecondNodeID2);
640 Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder,
641 in long SecondNodeIDOnFreeBorder,
642 in long LastNodeIDOnFreeBorder,
643 in long FirstNodeIDOnSide,
644 in long LastNodeIDOnSide,
645 in boolean CreatePolygons,
646 in boolean CreatePolyedrs);
648 Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
649 in long_array IDsOfSide2Elements,
650 in long NodeID1OfSide1ToMerge,
651 in long NodeID1OfSide2ToMerge,
652 in long NodeID2OfSide1ToMerge,
653 in long NodeID2OfSide2ToMerge);
656 * Set new nodes for given element.
657 * If number of nodes is not corresponded to type of
658 * element - returns false
660 boolean ChangeElemNodes(in long ide, in long_array newIDs);
663 * Return data of mesh edition preview which is computed provided
664 * that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
666 MeshPreviewStruct GetPreviewData();
669 * If during last operation of MeshEditor some nodes were
670 * created this method returns list of it's IDs, if new nodes
671 * not creared - returns empty list
673 long_array GetLastCreatedNodes();
676 * If during last operation of MeshEditor some elements were
677 * created this method returns list of it's IDs, if new elements
678 * not creared - returns empty list
680 long_array GetLastCreatedElems();
683 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
684 * \param theNodes - identifiers of nodes to be doubled
685 * \param theModifiedElems - identifiers of elements to be updated by the new (doubled)
686 * nodes. If list of element identifiers is empty then nodes are doubled but
687 * they not assigned to elements
688 * \return TRUE if operation has been completed successfully, FALSE otherwise
689 * \sa DoubleNode(), DoubleNodeGroup(), DoubleNodeGroups()
691 boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems );
694 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
695 * This method provided for convenience works as DoubleNodes() described above.
696 * \param theNodeId - identifier of node to be doubled.
697 * \param theModifiedElems - identifiers of elements to be updated.
698 * \return TRUE if operation has been completed successfully, FALSE otherwise
699 * \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups()
701 boolean DoubleNode( in long theNodeId, in long_array theModifiedElems );
704 * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
705 * This method provided for convenience works as DoubleNodes() described above.
706 * \param theNodes - group of nodes to be doubled.
707 * \param theModifiedElems - group of elements to be updated.
708 * \return TRUE if operation has been completed successfully, FALSE otherwise
709 * \sa DoubleNode(), DoubleNodes(), DoubleNodeGroups()
711 boolean DoubleNodeGroup( in SMESH_GroupBase theNodes,
712 in SMESH_GroupBase theModifiedElems );
715 \brief Creates a hole in a mesh by doubling the nodes of some particular elements
716 This method provided for convenience works as DoubleNodes() described above.
717 \param theNodes - list of groups of nodes to be doubled
718 \param theModifiedElems - list of groups of elements to be updated.
719 \return TRUE if operation has been completed successfully, FALSE otherwise
720 \sa DoubleNode(), DoubleNodeGroup(), DoubleNodes()
722 boolean DoubleNodeGroups( in ListOfGroups theNodes,
723 in ListOfGroups theModifiedElems );