diff --git a/doc/salome/examples/Makefile.am b/doc/salome/examples/Makefile.am
index 6a5904b91..f756654dd 100644
--- a/doc/salome/examples/Makefile.am
+++ b/doc/salome/examples/Makefile.am
@@ -174,7 +174,10 @@ pyexamples_SCRIPTS = $(BAD_TESTS) $(GOOD_TESTS)
EXTRA_DIST += $(pyexamples_SCRIPTS) testme.py
+THIS_PYTHONPATH = $(KERNEL_ROOT_DIR)/bin/salome:$(KERNEL_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(KERNEL_ROOT_DIR)/lib64/python$(PYTHON_VERSION)/site-packages/salome
+THIS_LD_LIBRARY_PATH = $(KERNEL_ROOT_DIR)/lib/salome
+
installcheck-local:
@for f in $(GOOD_TESTS) ; do \
- env SMESH_ROOT_DIR=$(prefix) python -B $(top_srcdir)/doc/salome/examples/testme.py $(top_srcdir)/doc/salome/examples/$$f || exit 1; \
+ SMESH_ROOT_DIR=$(prefix) PYTHONPATH=$(THIS_PYTHONPATH):${PYTHONPATH} LD_LIBRARY_PATH=$(THIS_LD_LIBRARY_PATH):${LD_LIBRARY_PATH} python -B $(top_srcdir)/doc/salome/examples/testme.py $(top_srcdir)/doc/salome/examples/$$f || exit 1; \
done
diff --git a/doc/salome/gui/SMESH/images/convert.png b/doc/salome/gui/SMESH/images/convert.png
index 2ebbedc3a..9139f609b 100644
Binary files a/doc/salome/gui/SMESH/images/convert.png and b/doc/salome/gui/SMESH/images/convert.png differ
diff --git a/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc b/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc
index 921948630..7f2cf5cf9 100644
--- a/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc
+++ b/doc/salome/gui/SMESH/input/adding_quadratic_elements.doc
@@ -4,10 +4,22 @@
\n MESH module allows you to work with Quadratic Elements.
-Quadratic Edge is not a straight but a broken line and can be defined
-by three points: first, middle and last. All more complex \b Quadratic
-\b Elements differ from ordinary ones in that they consist of Quadratic
-Edges.
+Quadratic elements are defined by same corner nodes as the
+corresponding linear ones, and in addition they bear \a midside nodes
+located between the corner nodes on element sides.
+
+The quadratic quadrilateral element can bear an additional node at the
+element center, then it is referred as bi-quadratic one (or
+QUAD9). The quadratic hexahedral element can bear 7 additional nodes:
+at the element center and at centers of sides, then it is referred as
+tri-quadratic one (or HEXA27).
+
+There are several ways you can create quadratic elements in your mesh:
+- manually create quadratic elements (the way described below);
+- use \ref quadratic_mesh_anchor "Quadratic Mesh" hypothesis to
+generate quadratic mesh on your geometry;
+- convert an existing linear mesh to a quadratic one
+(see \ref convert_to_from_quadratic_mesh_page).
To add a quadratic element to your mesh:
diff --git a/doc/salome/gui/SMESH/input/additional_hypo.doc b/doc/salome/gui/SMESH/input/additional_hypo.doc
index 2fde9c142..98353ed25 100644
--- a/doc/salome/gui/SMESH/input/additional_hypo.doc
+++ b/doc/salome/gui/SMESH/input/additional_hypo.doc
@@ -23,6 +23,9 @@ Quadratic Mesh hypothesis allows to build a quadratic mesh (whose
edges are not straight but curved lines and can be defined by three
points: first, middle and last instead of an ordinary two).
+See \ref adding_quadratic_elements_page
+for more information about quadratic meshes.
+
\anchor propagation_anchor
Propagation of 1D Hypothesis on opposite edges
diff --git a/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc b/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc
index 66f850664..15fe1b750 100644
--- a/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc
+++ b/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.doc
@@ -2,13 +2,14 @@
\page convert_to_from_quadratic_mesh_page Convert to/from Quadratic Mesh
-\n This functionality allows transforming standard meshes (or
-sub-meshes) to quadratic and vice versa.
-See \ref adding_quadratic_elements_page "Adding quadratic elements"
-for more information about quadratic meshes.
-Note that conversion of a sub-mesh most probably will
-produce a non-conformal mesh. Elements on the boundary between
-quadratic and linear sub-meshes become (or remain) quadratic.
+\n This functionality allows transforming linear meshes (or
+sub-meshes) to quadratic and vice versa.
+Note that conversion of a sub-mesh most probably will produce a
+non-conformal mesh. Elements on the boundary between quadratic and
+linear sub-meshes become (or remain) quadratic.
+
+See \ref adding_quadratic_elements_page for more information about
+quadratic meshes.
To produce a conversion:
@@ -18,8 +19,10 @@ Viewer.
Mesh item , or click "Convert to/from quadratic" button in the
toolbar.
+
\image html image154.png
-
"Convert to/from quadratic" button
+"Convert to/from quadratic" button
+
The following dialog box will appear:
@@ -29,18 +32,20 @@ The following dialog box will appear:
In this dialog box specify:
-
if it is necessary to convert a standard mesh to quadratic or a quadratic
-mesh to standard. Note that the choice is available only if the selected mesh
-(or sub-mesh) contains both quadratic and linear elements, else the
-direction of conversion is selected automatically.
-
-
if it is necessary to place medium nodes of the quadratic mesh on the
+
If it is necessary to convert a linear mesh to quadratic or a quadratic
+ mesh to linear. **Convert to bi-quadratic** option means same as
+ **Convert to quadratic** except that QUAD9 elements are created
+ instead of QUAD8, and HEXA27 elements are created instead of
+ HEXA20. Note that the choice is available only if the selected mesh
+ (or sub-mesh) contains both quadratic and linear elements, else the
+ direction of conversion is selected automatically.
+
If it is necessary to place medium nodes of the quadratic mesh on the
geometry (meshed object). This option is relevant for conversion to
quadratic provided that the mesh is based on a geometry (not imported from file).
\image html image156.gif
-
Standard mesh (coarse mesh on a torus)
+
Linear mesh (coarse mesh on a torus)
\image html image155.gif
Quadratic mesh
diff --git a/idl/SMESH_Filter.idl b/idl/SMESH_Filter.idl
index 2c701fc2b..b516d19eb 100644
--- a/idl/SMESH_Filter.idl
+++ b/idl/SMESH_Filter.idl
@@ -75,6 +75,7 @@ module SMESH
FT_LinearOrQuadratic,
FT_GroupColor,
FT_ElemGeomType,
+ FT_EntityType,
FT_CoplanarFaces,
FT_BallDiameter,
FT_LessThan,
@@ -422,6 +423,15 @@ module SMESH
void SetGeometryType( in GeometryType theType );
};
+ /*!
+ * Functor "Element entity type"
+ * Returns is element has indicated entity type
+ */
+ interface ElemEntityType : Predicate{
+ void SetElementType ( in ElementType theType );
+ void SetEntityType( in EntityType theSetEntityType );
+ };
+
/*!
* Functor "Coplanar faces"
* Returns true if a mesh face is a coplanar neighbour to a given one. It checks
@@ -543,7 +553,6 @@ module SMESH
MultiConnection CreateMultiConnection();
MultiConnection2D CreateMultiConnection2D();
BallDiameter CreateBallDiameter();
-
/*!
* Create logical functors ( predicates )
*/
@@ -575,6 +584,7 @@ module SMESH
GroupColor CreateGroupColor();
ElemGeomType CreateElemGeomType();
+ ElemEntityType CreateElemEntityType();
CoplanarFaces CreateCoplanarFaces();
/*!
diff --git a/idl/SMESH_MeshEditor.idl b/idl/SMESH_MeshEditor.idl
index 3425d89e2..956e871c8 100644
--- a/idl/SMESH_MeshEditor.idl
+++ b/idl/SMESH_MeshEditor.idl
@@ -42,26 +42,26 @@ module SMESH
* Return data of mesh edition preview which is computed provided
* that the editor was obtained trough SMESH_Mesh::GetMeshEditPreviewer()
*/
- MeshPreviewStruct GetPreviewData();
+ MeshPreviewStruct GetPreviewData() raises (SALOME::SALOME_Exception);
/*!
* If during last operation of MeshEditor some nodes were
* created this method returns list of their IDs, if new nodes
* not created - returns empty list
*/
- long_array GetLastCreatedNodes();
+ long_array GetLastCreatedNodes() raises (SALOME::SALOME_Exception);
/*!
* If during last operation of MeshEditor some elements were
* created this method returns list of their IDs, if new elements
* not created - returns empty list
*/
- long_array GetLastCreatedElems();
+ long_array GetLastCreatedElems() raises (SALOME::SALOME_Exception);
/*!
* \brief Returns description of an error/warning occured during the last operation
*/
- ComputeError GetLastError();
+ ComputeError GetLastError() raises (SALOME::SALOME_Exception);
/*!
* \brief Wrap a sequence of ids in a SMESH_IDSource
@@ -75,20 +75,20 @@ module SMESH
* \param IDsOfElements list of mesh elements identifiers
* \return \c true if elements are correctly removed or \c false otherwise
*/
- boolean RemoveElements(in long_array IDsOfElements);
+ boolean RemoveElements(in long_array IDsOfElements) raises (SALOME::SALOME_Exception);
/*!
* \brief Remove mesh nodes specified by their identifiers.
* \param IDsOfNodes list of mesh nodes identifiers
* \return \c true if nodes are correctly removed or \c false otherwise
*/
- boolean RemoveNodes(in long_array IDsOfNodes);
+ boolean RemoveNodes(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
/*!
* \brief Remove all orphan nodes.
* \return number of removed nodes
*/
- long RemoveOrphanNodes();
+ long RemoveOrphanNodes() raises (SALOME::SALOME_Exception);
/*!
* \brief Add a new node.
@@ -97,19 +97,19 @@ module SMESH
* \param z Z coordinate of new node
* \return integer identifier of new node
*/
- long AddNode(in double x, in double y, in double z);
+ long AddNode(in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
/*!
* Create a 0D element on the given node.
* \param IdOfNode Node IDs for creation of element.
*/
- long Add0DElement(in long IDOfNode);
+ long Add0DElement(in long IDOfNode) raises (SALOME::SALOME_Exception);
/*!
* Create a ball element on the given node.
* \param IdOfNode Node IDs for creation of element.
*/
- long AddBall(in long IDOfNode, in double diameter);
+ long AddBall(in long IDOfNode, in double diameter) raises (SALOME::SALOME_Exception);
/*!
* Create an edge, either linear and quadratic (this is determed
@@ -119,7 +119,7 @@ module SMESH
* of MED. This description is located by the following link:
* http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
*/
- long AddEdge(in long_array IDsOfNodes);
+ long AddEdge(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
/*!
* Create face, either linear and quadratic (this is determed
@@ -129,9 +129,9 @@ module SMESH
* of MED. This description is located by the following link:
* http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
*/
- long AddFace(in long_array IDsOfNodes);
+ long AddFace(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
- long AddPolygonalFace(in long_array IdsOfNodes);
+ long AddPolygonalFace(in long_array IdsOfNodes) raises (SALOME::SALOME_Exception);
/*!
* Create volume, either linear and quadratic (this is determed
@@ -141,7 +141,7 @@ module SMESH
* of MED. This description is located by the following link:
* http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
*/
- long AddVolume(in long_array IDsOfNodes);
+ long AddVolume(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
/*!
* Create volume of many faces, giving nodes for each face.
@@ -150,14 +150,14 @@ module SMESH
* gives quantity of nodes in face number i.
*/
long AddPolyhedralVolume (in long_array IdsOfNodes,
- in long_array Quantities);
+ in long_array Quantities) raises (SALOME::SALOME_Exception);
/*!
* Create volume of many faces, giving IDs of existing faces.
* \param IdsOfFaces List of face IDs for volume creation.
* \note The created volume will refer only to nodes
* of the given faces, not to the faces itself.
*/
- long AddPolyhedralVolumeByFaces (in long_array IdsOfFaces);
+ long AddPolyhedralVolumeByFaces (in long_array IdsOfFaces) raises (SALOME::SALOME_Exception);
/*!
* Create 0D elements on all nodes of the given object except those
@@ -212,15 +212,20 @@ module SMESH
raises (SALOME::SALOME_Exception);
- boolean MoveNode(in long NodeID, in double x, in double y, in double z);
+ boolean MoveNode(in long NodeID, in double x, in double y, in double z)
+ raises (SALOME::SALOME_Exception);
- boolean InverseDiag(in long NodeID1, in long NodeID2);
+ boolean InverseDiag(in long NodeID1, in long NodeID2)
+ raises (SALOME::SALOME_Exception);
- boolean DeleteDiag(in long NodeID1, in long NodeID2);
+ boolean DeleteDiag(in long NodeID1, in long NodeID2)
+ raises (SALOME::SALOME_Exception);
- boolean Reorient(in long_array IDsOfElements);
+ boolean Reorient(in long_array IDsOfElements)
+ raises (SALOME::SALOME_Exception);
- boolean ReorientObject(in SMESH_IDSource theObject);
+ boolean ReorientObject(in SMESH_IDSource theObject)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Reorient faces contained in \a the2Dgroup.
* \param the2Dgroup - the mesh or its part to reorient
@@ -245,7 +250,7 @@ module SMESH
*/
boolean TriToQuad (in long_array IDsOfElements,
in NumericalFunctor Criterion,
- in double MaxAngle);
+ in double MaxAngle) raises (SALOME::SALOME_Exception);
/*!
* \brief Fuse neighbour triangles into quadrangles.
@@ -254,7 +259,7 @@ module SMESH
*/
boolean TriToQuadObject (in SMESH_IDSource theObject,
in NumericalFunctor Criterion,
- in double MaxAngle);
+ in double MaxAngle) raises (SALOME::SALOME_Exception);
/*!
* \brief Split quadrangles into triangles.
@@ -263,7 +268,7 @@ module SMESH
* \return TRUE in case of success, FALSE otherwise.
*/
boolean QuadToTri (in long_array IDsOfElements,
- in NumericalFunctor Criterion);
+ in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception);
/*!
* \brief Split quadrangles into triangles.
@@ -271,7 +276,7 @@ module SMESH
* Behaves like the above method, taking list of elements from \a theObject
*/
boolean QuadToTriObject (in SMESH_IDSource theObject,
- in NumericalFunctor Criterion);
+ in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception);
/*!
* \brief Split quadrangles into triangles.
@@ -280,7 +285,7 @@ module SMESH
* \return TRUE in case of success, FALSE otherwise.
*/
boolean SplitQuad (in long_array IDsOfElements,
- in boolean Diag13);
+ in boolean Diag13) raises (SALOME::SALOME_Exception);
/*!
* \brief Split quadrangles into triangles.
@@ -288,7 +293,7 @@ module SMESH
* Behaves like the above method, taking list of elements from \a theObject
*/
boolean SplitQuadObject (in SMESH_IDSource theObject,
- in boolean Diag13);
+ in boolean Diag13) raises (SALOME::SALOME_Exception);
/*!
* Find better splitting of the given quadrangle.
@@ -298,7 +303,7 @@ module SMESH
* diagonal is better, 0 if error occurs.
*/
long BestSplit (in long IDOfQuad,
- in NumericalFunctor Criterion);
+ in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception);
/*!
* \brief Split volumic elements into tetrahedrons
@@ -318,40 +323,44 @@ module SMESH
in long_array IDsOfFixedNodes,
in long MaxNbOfIterations,
in double MaxAspectRatio,
- in Smooth_Method Method);
+ in Smooth_Method Method) raises (SALOME::SALOME_Exception);
boolean SmoothObject(in SMESH_IDSource theObject,
in long_array IDsOfFixedNodes,
in long MaxNbOfIterations,
in double MaxAspectRatio,
- in Smooth_Method Method);
+ in Smooth_Method Method) raises (SALOME::SALOME_Exception);
boolean SmoothParametric(in long_array IDsOfElements,
in long_array IDsOfFixedNodes,
in long MaxNbOfIterations,
in double MaxAspectRatio,
- in Smooth_Method Method);
+ in Smooth_Method Method) raises (SALOME::SALOME_Exception);
boolean SmoothParametricObject(in SMESH_IDSource theObject,
in long_array IDsOfFixedNodes,
in long MaxNbOfIterations,
in double MaxAspectRatio,
- in Smooth_Method Method);
-
- void ConvertToQuadratic(in boolean theForce3d);
-
- boolean ConvertFromQuadratic();
+ in Smooth_Method Method) raises (SALOME::SALOME_Exception);
+ void ConvertToQuadratic(in boolean theForce3d)
+ raises (SALOME::SALOME_Exception);
void ConvertToQuadraticObject(in boolean theForce3d,
in SMESH_IDSource theObject)
raises (SALOME::SALOME_Exception);
-
- void ConvertFromQuadraticObject(in SMESH_IDSource theObject)
+
+ boolean ConvertFromQuadratic()
+ raises (SALOME::SALOME_Exception);
+ void ConvertFromQuadraticObject(in SMESH_IDSource theObject)
raises (SALOME::SALOME_Exception);
- void RenumberNodes();
+ void ConvertToBiQuadratic(in boolean theForce3d,
+ in SMESH_IDSource theObject)
+ raises (SALOME::SALOME_Exception);
- void RenumberElements();
+ void RenumberNodes() raises (SALOME::SALOME_Exception);
+
+ void RenumberElements() raises (SALOME::SALOME_Exception);
/*!
* \brief Genarate dim+1 elements by rotation of given elements around axis
@@ -364,7 +373,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
@@ -373,7 +383,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Genarate dim+1 elements by rotation of the object around axis
* \param theObject - object containing elements to ratate
@@ -385,7 +396,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
@@ -394,7 +406,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Genarate dim+1 elements by rotation of the object around axis
* \param theObject - object containing elements to ratate
@@ -406,7 +419,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
@@ -415,7 +429,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Genarate dim+1 elements by rotation of the object around axis
* \param theObject - object containing elements to ratate
@@ -427,7 +442,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
@@ -436,7 +452,8 @@ module SMESH
in AxisStruct Axix,
in double AngleInRadians,
in long NbOfSteps,
- in double Tolerance);
+ in double Tolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Genarate dim+1 elements by extrusion of elements along vector
* \param IDsOfElements - elements to sweep
@@ -445,7 +462,8 @@ module SMESH
*/
void ExtrusionSweep(in long_array IDsOfElements,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Genarate dim+1 elements by extrusion of elements along vector
* \param IDsOfElements - elements to sweep
@@ -454,20 +472,23 @@ module SMESH
*/
void ExtrusionSweep0D(in long_array IDsOfElements,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
*/
ListOfGroups ExtrusionSweepMakeGroups(in long_array IDsOfElements,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Same as previous but elements are nodes
*/
ListOfGroups ExtrusionSweepMakeGroups0D(in long_array IDsOfElements,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
/*!
* Generate new elements by extrusion of theElements
* by StepVector by NbOfSteps
@@ -479,7 +500,8 @@ module SMESH
in DirStruct StepVector,
in long NbOfSteps,
in long ExtrFlags,
- in double SewTolerance);
+ in double SewTolerance)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Same as previous but additionally create groups of elements
* generated from elements belonging to preexisting groups
@@ -488,35 +510,44 @@ module SMESH
in DirStruct StepVector,
in long NbOfSteps,
in long ExtrFlags,
- in double SewTolerance);
+ in double SewTolerance)
+ raises (SALOME::SALOME_Exception);
void ExtrusionSweepObject(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionSweepObjectMakeGroups(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
void ExtrusionSweepObject0D(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionSweepObject0DMakeGroups(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
void ExtrusionSweepObject1D(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionSweepObject1DMakeGroups(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
void ExtrusionSweepObject2D(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionSweepObject2DMakeGroups(in SMESH_IDSource theObject,
in DirStruct StepVector,
- in long NbOfSteps);
+ in long NbOfSteps)
+ raises (SALOME::SALOME_Exception);
enum Extrusion_Error {
EXTR_OK,
@@ -538,7 +569,8 @@ module SMESH
in PointStruct RefPoint,
in boolean MakeGroups,
in ElementType ElemType,
- out Extrusion_Error Error);
+ out Extrusion_Error Error)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionAlongPathObjX(in SMESH_IDSource theObject,
in SMESH_IDSource Path,
@@ -550,7 +582,8 @@ module SMESH
in PointStruct RefPoint,
in boolean MakeGroups,
in ElementType ElemType,
- out Extrusion_Error Error);
+ out Extrusion_Error Error)
+ raises (SALOME::SALOME_Exception);
Extrusion_Error ExtrusionAlongPath(in long_array IDsOfElements,
in SMESH_Mesh PathMesh,
@@ -559,7 +592,8 @@ module SMESH
in boolean HasAngles,
in double_array Angles,
in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in PointStruct RefPoint)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionAlongPathMakeGroups(in long_array IDsOfElements,
in SMESH_Mesh PathMesh,
in GEOM::GEOM_Object PathShape,
@@ -568,7 +602,8 @@ module SMESH
in double_array Angles,
in boolean HasRefPoint,
in PointStruct RefPoint,
- out Extrusion_Error Error);
+ out Extrusion_Error Error)
+ raises (SALOME::SALOME_Exception);
Extrusion_Error ExtrusionAlongPathObject(in SMESH_IDSource theObject,
in SMESH_Mesh PathMesh,
@@ -577,7 +612,8 @@ module SMESH
in boolean HasAngles,
in double_array Angles,
in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in PointStruct RefPoint)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionAlongPathObjectMakeGroups(in SMESH_IDSource theObject,
in SMESH_Mesh PathMesh,
in GEOM::GEOM_Object PathShape,
@@ -586,7 +622,8 @@ module SMESH
in double_array Angles,
in boolean HasRefPoint,
in PointStruct RefPoint,
- out Extrusion_Error Error);
+ out Extrusion_Error Error)
+ raises (SALOME::SALOME_Exception);
Extrusion_Error ExtrusionAlongPathObject1D(in SMESH_IDSource theObject,
in SMESH_Mesh PathMesh,
@@ -595,7 +632,8 @@ module SMESH
in boolean HasAngles,
in double_array Angles,
in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in PointStruct RefPoint)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionAlongPathObject1DMakeGroups(in SMESH_IDSource theObject,
in SMESH_Mesh PathMesh,
in GEOM::GEOM_Object PathShape,
@@ -604,7 +642,8 @@ module SMESH
in double_array Angles,
in boolean HasRefPoint,
in PointStruct RefPoint,
- out Extrusion_Error Error);
+ out Extrusion_Error Error)
+ raises (SALOME::SALOME_Exception);
Extrusion_Error ExtrusionAlongPathObject2D(in SMESH_IDSource theObject,
in SMESH_Mesh PathMesh,
@@ -613,7 +652,8 @@ module SMESH
in boolean HasAngles,
in double_array Angles,
in boolean HasRefPoint,
- in PointStruct RefPoint);
+ in PointStruct RefPoint)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ExtrusionAlongPathObject2DMakeGroups(in SMESH_IDSource theObject,
in SMESH_Mesh PathMesh,
in GEOM::GEOM_Object PathShape,
@@ -622,7 +662,8 @@ module SMESH
in double_array Angles,
in boolean HasRefPoint,
in PointStruct RefPoint,
- out Extrusion_Error Error);
+ out Extrusion_Error Error)
+ raises (SALOME::SALOME_Exception);
/*!
* Compute rotation angles for ExtrusionAlongPath as linear variation
@@ -641,101 +682,126 @@ module SMESH
void Mirror (in long_array IDsOfElements,
in AxisStruct Mirror,
in MirrorType Type,
- in boolean Copy);
+ in boolean Copy)
+ raises (SALOME::SALOME_Exception);
ListOfGroups MirrorMakeGroups (in long_array IDsOfElements,
in AxisStruct Mirror,
- in MirrorType Type);
+ in MirrorType Type)
+ raises (SALOME::SALOME_Exception);
SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements,
in AxisStruct Mirror,
in MirrorType Type,
in boolean CopyGroups,
- in string MeshName);
+ in string MeshName)
+ raises (SALOME::SALOME_Exception);
void MirrorObject (in SMESH_IDSource theObject,
in AxisStruct Mirror,
in MirrorType Type,
- in boolean Copy);
+ in boolean Copy)
+ raises (SALOME::SALOME_Exception);
ListOfGroups MirrorObjectMakeGroups (in SMESH_IDSource theObject,
in AxisStruct Mirror,
- in MirrorType Type);
+ in MirrorType Type)
+ raises (SALOME::SALOME_Exception);
SMESH_Mesh MirrorObjectMakeMesh (in SMESH_IDSource theObject,
in AxisStruct Mirror,
in MirrorType Type,
in boolean CopyGroups,
- in string MeshName);
+ in string MeshName)
+ raises (SALOME::SALOME_Exception);
void Translate (in long_array IDsOfElements,
in DirStruct Vector,
- in boolean Copy);
+ in boolean Copy)
+ raises (SALOME::SALOME_Exception);
ListOfGroups TranslateMakeGroups (in long_array IDsOfElements,
- in DirStruct Vector);
+ in DirStruct Vector)
+ raises (SALOME::SALOME_Exception);
SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements,
in DirStruct Vector,
in boolean CopyGroups,
- in string MeshName);
+ in string MeshName)
+ raises (SALOME::SALOME_Exception);
void TranslateObject (in SMESH_IDSource theObject,
in DirStruct Vector,
- in boolean Copy);
+ in boolean Copy)
+ raises (SALOME::SALOME_Exception);
ListOfGroups TranslateObjectMakeGroups (in SMESH_IDSource theObject,
- in DirStruct Vector);
+ in DirStruct Vector)
+ raises (SALOME::SALOME_Exception);
SMESH_Mesh TranslateObjectMakeMesh (in SMESH_IDSource theObject,
in DirStruct Vector,
in boolean CopyGroups,
- in string MeshName);
+ in string MeshName)
+ raises (SALOME::SALOME_Exception);
void Scale (in SMESH_IDSource theObject,
in PointStruct thePoint,
in double_array theScaleFact,
- in boolean Copy);
+ in boolean Copy)
+ raises (SALOME::SALOME_Exception);
ListOfGroups ScaleMakeGroups (in SMESH_IDSource theObject,
in PointStruct thePoint,
- in double_array theScaleFact);
+ in double_array theScaleFact)
+ raises (SALOME::SALOME_Exception);
SMESH_Mesh ScaleMakeMesh (in SMESH_IDSource theObject,
in PointStruct thePoint,
in double_array theScaleFact,
in boolean CopyGroups,
- in string MeshName);
+ in string MeshName)
+ raises (SALOME::SALOME_Exception);
void Rotate (in long_array IDsOfElements,
in AxisStruct Axis,
in double AngleInRadians,
- in boolean Copy);
+ in boolean Copy)
+ raises (SALOME::SALOME_Exception);
ListOfGroups RotateMakeGroups (in long_array IDsOfElements,
in AxisStruct Axis,
- in double AngleInRadians);
+ in double AngleInRadians)
+ raises (SALOME::SALOME_Exception);
SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements,
in AxisStruct Axis,
in double AngleInRadians,
in boolean CopyGroups,
- in string MeshName);
+ in string MeshName)
+ raises (SALOME::SALOME_Exception);
void RotateObject (in SMESH_IDSource theObject,
in AxisStruct Axis,
in double AngleInRadians,
- in boolean Copy);
+ in boolean Copy)
+ raises (SALOME::SALOME_Exception);
ListOfGroups RotateObjectMakeGroups (in SMESH_IDSource theObject,
in AxisStruct Axis,
- in double AngleInRadians);
+ in double AngleInRadians)
+ raises (SALOME::SALOME_Exception);
SMESH_Mesh RotateObjectMakeMesh (in SMESH_IDSource theObject,
in AxisStruct Axis,
in double AngleInRadians,
in boolean CopyGroups,
- in string MeshName);
+ in string MeshName)
+ raises (SALOME::SALOME_Exception);
void FindCoincidentNodes (in double Tolerance,
- out array_of_long_array GroupsOfNodes);
+ out array_of_long_array GroupsOfNodes)
+ raises (SALOME::SALOME_Exception);
void FindCoincidentNodesOnPart (in SMESH_IDSource SubMeshOrGroup,
in double Tolerance,
- out array_of_long_array GroupsOfNodes);
+ out array_of_long_array GroupsOfNodes)
+ raises (SALOME::SALOME_Exception);
void FindCoincidentNodesOnPartBut (in SMESH_IDSource SubMeshOrGroup,
in double Tolerance,
out array_of_long_array GroupsOfNodes,
- in ListOfIDSources ExceptSubMeshOrGroups);
+ in ListOfIDSources ExceptSubMeshOrGroups)
+ raises (SALOME::SALOME_Exception);
- void MergeNodes (in array_of_long_array GroupsOfNodes);
+ void MergeNodes (in array_of_long_array GroupsOfNodes)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Find elements built on the same nodes.
@@ -743,36 +809,42 @@ module SMESH
* \return List of groups of equal elements.
*/
void FindEqualElements (in SMESH_IDSource MeshOrSubMeshOrGroup,
- out array_of_long_array GroupsOfElementsID);
+ out array_of_long_array GroupsOfElementsID)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Merge elements in each given group.
* \param GroupsOfElementsID Groups of elements for merging.
*/
- void MergeElements(in array_of_long_array GroupsOfElementsID);
+ void MergeElements(in array_of_long_array GroupsOfElementsID)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Merge equal elements in the whole mesh.
*/
- void MergeEqualElements();
+ void MergeEqualElements()
+ raises (SALOME::SALOME_Exception);
/*!
* If the given ID is a valid node ID (nodeID > 0), just move this node, else
* move the node closest to the point to point's location and return ID of the node
*/
- long MoveClosestNodeToPoint(in double x, in double y, in double z, in long nodeID);
+ long MoveClosestNodeToPoint(in double x, in double y, in double z, in long nodeID)
+ raises (SALOME::SALOME_Exception);
/*!
* Return ID of node closest to a given point
*/
- long FindNodeClosestTo(in double x, in double y, in double z);
+ long FindNodeClosestTo(in double x, in double y, in double z)
+ raises (SALOME::SALOME_Exception);
/*!
* Return elements of given type where the given point is IN or ON.
*
* 'ALL' type means elements of any type excluding nodes and 0D elements
*/
- long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type);
+ long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type)
+ raises (SALOME::SALOME_Exception);
/*!
* Searching among the given elements, return elements of given type
@@ -782,13 +854,15 @@ module SMESH
*/
long_array FindAmongElementsByPoint(in SMESH_IDSource elements,
in double x, in double y, in double z,
- in ElementType type);
+ in ElementType type)
+ raises (SALOME::SALOME_Exception);
/*!
* Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
* TopAbs_UNKNOWN state means that either mesh is wrong or the analysis fails.
*/
- short GetPointState(in double x, in double y, in double z);
+ short GetPointState(in double x, in double y, in double z)
+ raises (SALOME::SALOME_Exception);
enum Sew_Error {
SEW_OK,
@@ -811,13 +885,15 @@ module SMESH
in long SecondNodeID2,
in long LastNodeID2,
in boolean CreatePolygons,
- in boolean CreatePolyedrs);
+ in boolean CreatePolyedrs)
+ raises (SALOME::SALOME_Exception);
Sew_Error SewConformFreeBorders (in long FirstNodeID1,
in long SecondNodeID1,
in long LastNodeID1,
in long FirstNodeID2,
- in long SecondNodeID2);
+ in long SecondNodeID2)
+ raises (SALOME::SALOME_Exception);
Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder,
in long SecondNodeIDOnFreeBorder,
@@ -825,21 +901,24 @@ module SMESH
in long FirstNodeIDOnSide,
in long LastNodeIDOnSide,
in boolean CreatePolygons,
- in boolean CreatePolyedrs);
+ in boolean CreatePolyedrs)
+ raises (SALOME::SALOME_Exception);
Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
in long_array IDsOfSide2Elements,
in long NodeID1OfSide1ToMerge,
in long NodeID1OfSide2ToMerge,
in long NodeID2OfSide1ToMerge,
- in long NodeID2OfSide2ToMerge);
+ in long NodeID2OfSide2ToMerge)
+ raises (SALOME::SALOME_Exception);
/*!
* Set new nodes for given element.
* If number of nodes is not corresponded to type of
* element - returns false
*/
- boolean ChangeElemNodes(in long ide, in long_array newIDs);
+ boolean ChangeElemNodes(in long ide, in long_array newIDs)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -850,7 +929,8 @@ module SMESH
* \return TRUE if operation has been completed successfully, FALSE otherwise
* \sa DoubleNode(), DoubleNodeGroup(), DoubleNodeGroups()
*/
- boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems );
+ boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -860,7 +940,8 @@ module SMESH
* \return TRUE if operation has been completed successfully, FALSE otherwise
* \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups()
*/
- boolean DoubleNode( in long theNodeId, in long_array theModifiedElems );
+ boolean DoubleNode( in long theNodeId, in long_array theModifiedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -871,7 +952,8 @@ module SMESH
* \sa DoubleNode(), DoubleNodes(), DoubleNodeGroups(), DoubleNodeGroupNew()
*/
boolean DoubleNodeGroup( in SMESH_GroupBase theNodes,
- in SMESH_GroupBase theModifiedElems );
+ in SMESH_GroupBase theModifiedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
* Works as DoubleNodeGroup() described above, but returns a new group with
@@ -882,7 +964,8 @@ module SMESH
* \sa DoubleNodeGroup()
*/
SMESH_Group DoubleNodeGroupNew( in SMESH_GroupBase theNodes,
- in SMESH_GroupBase theModifiedElems );
+ in SMESH_GroupBase theModifiedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -893,7 +976,8 @@ module SMESH
* \sa DoubleNode(), DoubleNodeGroup(), DoubleNodes()
*/
boolean DoubleNodeGroups( in ListOfGroups theNodes,
- in ListOfGroups theModifiedElems );
+ in ListOfGroups theModifiedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
* Works as DoubleNodeGroups() described above, but returns a new group with
@@ -904,7 +988,8 @@ module SMESH
* \sa DoubleNodeGroups()
*/
SMESH_Group DoubleNodeGroupsNew( in ListOfGroups theNodes,
- in ListOfGroups theModifiedElems );
+ in ListOfGroups theModifiedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -918,7 +1003,8 @@ module SMESH
*/
boolean DoubleNodeElem( in long_array theElems,
in long_array theNodesNot,
- in long_array theAffectedElems );
+ in long_array theAffectedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -933,7 +1019,8 @@ module SMESH
*/
boolean DoubleNodeElemInRegion( in long_array theElems,
in long_array theNodesNot,
- in GEOM::GEOM_Object theShape );
+ in GEOM::GEOM_Object theShape )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -947,7 +1034,8 @@ module SMESH
*/
boolean DoubleNodeElemGroup( in SMESH_GroupBase theElems,
in SMESH_GroupBase theNodesNot,
- in SMESH_GroupBase theAffectedElems );
+ in SMESH_GroupBase theAffectedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
* Works as DoubleNodeElemGroup() described above, but returns a new group with
@@ -961,7 +1049,8 @@ module SMESH
*/
SMESH_Group DoubleNodeElemGroupNew( in SMESH_GroupBase theElems,
in SMESH_GroupBase theNodesNot,
- in SMESH_GroupBase theAffectedElems );
+ in SMESH_GroupBase theAffectedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
* Works as DoubleNodeElemGroup() described above, but returns two new groups:
@@ -979,7 +1068,8 @@ module SMESH
in SMESH_GroupBase theNodesNot,
in SMESH_GroupBase theAffectedElems,
in boolean theElemGroupNeeded,
- in boolean theNodeGroupNeeded);
+ in boolean theNodeGroupNeeded)
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -994,7 +1084,8 @@ module SMESH
*/
boolean DoubleNodeElemGroupInRegion( in SMESH_GroupBase theElems,
in SMESH_GroupBase theNodesNot,
- in GEOM::GEOM_Object theShape );
+ in GEOM::GEOM_Object theShape )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -1008,7 +1099,8 @@ module SMESH
*/
boolean DoubleNodeElemGroups( in ListOfGroups theElems,
in ListOfGroups theNodesNot,
- in ListOfGroups theAffectedElems );
+ in ListOfGroups theAffectedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
* Works as DoubleNodeElemGroups() described above, but returns a new group with
@@ -1022,7 +1114,8 @@ module SMESH
*/
SMESH_Group DoubleNodeElemGroupsNew( in ListOfGroups theElems,
in ListOfGroups theNodesNot,
- in ListOfGroups theAffectedElems );
+ in ListOfGroups theAffectedElems )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
* Works as DoubleNodeElemGroups() described above, but returns two new groups:
@@ -1040,7 +1133,8 @@ module SMESH
in ListOfGroups theNodesNot,
in ListOfGroups theAffectedElems,
in boolean theElemGroupNeeded,
- in boolean theNodeGroupNeeded );
+ in boolean theNodeGroupNeeded )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -1055,7 +1149,8 @@ module SMESH
*/
boolean DoubleNodeElemGroupsInRegion( in ListOfGroups theElems,
in ListOfGroups theNodesNot,
- in GEOM::GEOM_Object theShape );
+ in GEOM::GEOM_Object theShape )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Identify the elements that will be affected by node duplication (actual duplication is not performed).
@@ -1070,14 +1165,15 @@ module SMESH
*/
ListOfGroups AffectedElemGroupsInRegion( in ListOfGroups theElems,
in ListOfGroups theNodesNot,
- in GEOM::GEOM_Object theShape );
+ in GEOM::GEOM_Object theShape )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief Generates skin mesh (containing 2D cells) from 3D mesh
* The created 2D mesh elements based on nodes of free faces of boundary volumes
* \return TRUE if operation has been completed successfully, FALSE otherwise
*/
- boolean Make2DMeshFrom3D();
+ boolean Make2DMeshFrom3D() raises (SALOME::SALOME_Exception);
/*!
* \brief Creates missing boundary elements
@@ -1101,7 +1197,7 @@ module SMESH
in string meshName,
in boolean toCopyElements,
in boolean toCopyExistingBondary,
- out SMESH_Group group);
+ out SMESH_Group group) raises (SALOME::SALOME_Exception);
/*!
* \brief Creates missing boundary elements around either the whole mesh or
* groups of 2D elements
@@ -1150,7 +1246,8 @@ module SMESH
* \param theGroupsOfFaces - list of groups of faces
* \return TRUE if operation has been completed successfully, FALSE otherwise
*/
- boolean CreateFlatElementsOnFacesGroups( in ListOfGroups theGroupsOfFaces );
+ boolean CreateFlatElementsOnFacesGroups( in ListOfGroups theGroupsOfFaces )
+ raises (SALOME::SALOME_Exception);
/*!
* \brief identify all the elements around a geom shape, get the faces delimiting the hole
@@ -1162,7 +1259,8 @@ module SMESH
in GEOM::GEOM_Object theShape,
in string groupName,
in double_array theNodesCoords,
- out array_of_long_array GroupsOfNodes) raises (SALOME::SALOME_Exception);
+ out array_of_long_array GroupsOfNodes)
+ raises (SALOME::SALOME_Exception);
};
};
diff --git a/src/Controls/SMESH_Controls.cxx b/src/Controls/SMESH_Controls.cxx
index 239aa41e4..eb1e5bdb9 100644
--- a/src/Controls/SMESH_Controls.cxx
+++ b/src/Controls/SMESH_Controls.cxx
@@ -210,10 +210,13 @@ using namespace SMESH::Controls;
* FUNCTORS
*/
+//================================================================================
/*
Class : NumericalFunctor
Description : Base class for numerical functors
*/
+//================================================================================
+
NumericalFunctor::NumericalFunctor():
myMesh(NULL)
{
@@ -321,6 +324,7 @@ double NumericalFunctor::Round( const double & aVal )
* \param minmax - boundaries of diapason of values to divide into intervals
*/
//================================================================================
+
void NumericalFunctor::GetHistogram(int nbIntervals,
std::vector& nbEvents,
std::vector& funValues,
@@ -403,9 +407,11 @@ void NumericalFunctor::GetHistogram(int nbIntervals,
}
//=======================================================================
-//function : GetValue
-//purpose :
-//=======================================================================
+/*
+ Class : Volume
+ Description : Functor calculating volume of a 3D element
+*/
+//================================================================================
double Volume::GetValue( long theElementId )
{
@@ -417,21 +423,11 @@ double Volume::GetValue( long theElementId )
return 0;
}
-//=======================================================================
-//function : GetBadRate
-//purpose : meaningless as it is not quality control functor
-//=======================================================================
-
double Volume::GetBadRate( double Value, int /*nbNodes*/ ) const
{
return Value;
}
-//=======================================================================
-//function : GetType
-//purpose :
-//=======================================================================
-
SMDSAbs_ElementType Volume::GetType() const
{
return SMDSAbs_Volume;
@@ -442,6 +438,8 @@ SMDSAbs_ElementType Volume::GetType() const
Class : MaxElementLength2D
Description : Functor calculating maximum length of 2D element
*/
+//================================================================================
+
double MaxElementLength2D::GetValue( const TSequenceOfXYZ& P )
{
if(P.size() == 0)
@@ -508,6 +506,7 @@ SMDSAbs_ElementType MaxElementLength2D::GetType() const
Class : MaxElementLength3D
Description : Functor calculating maximum length of 3D element
*/
+//================================================================================
double MaxElementLength3D::GetValue( long theElementId )
{
@@ -683,6 +682,7 @@ SMDSAbs_ElementType MaxElementLength3D::GetType() const
Class : MinimumAngle
Description : Functor for calculation of minimum angle
*/
+//================================================================================
double MinimumAngle::GetValue( const TSequenceOfXYZ& P )
{
@@ -715,10 +715,13 @@ SMDSAbs_ElementType MinimumAngle::GetType() const
}
+//================================================================================
/*
Class : AspectRatio
Description : Functor for calculating aspect ratio
*/
+//================================================================================
+
double AspectRatio::GetValue( long theId )
{
double aVal = 0;
@@ -899,10 +902,13 @@ SMDSAbs_ElementType AspectRatio::GetType() const
}
+//================================================================================
/*
Class : AspectRatio3D
Description : Functor for calculating aspect ratio
*/
+//================================================================================
+
namespace{
inline double getHalfPerimeter(double theTria[3]){
@@ -1269,10 +1275,13 @@ SMDSAbs_ElementType AspectRatio3D::GetType() const
}
+//================================================================================
/*
Class : Warping
Description : Functor for calculating warping
*/
+//================================================================================
+
double Warping::GetValue( const TSequenceOfXYZ& P )
{
if ( P.size() != 4 )
@@ -1326,10 +1335,13 @@ SMDSAbs_ElementType Warping::GetType() const
}
+//================================================================================
/*
Class : Taper
Description : Functor for calculating taper
*/
+//================================================================================
+
double Taper::GetValue( const TSequenceOfXYZ& P )
{
if ( P.size() != 4 )
@@ -1366,11 +1378,13 @@ SMDSAbs_ElementType Taper::GetType() const
return SMDSAbs_Face;
}
-
+//================================================================================
/*
Class : Skew
Description : Functor for calculating skew in degrees
*/
+//================================================================================
+
static inline double skewAngle( const gp_XYZ& p1, const gp_XYZ& p2, const gp_XYZ& p3 )
{
gp_XYZ p12 = ( p2 + p1 ) / 2.;
@@ -1430,10 +1444,13 @@ SMDSAbs_ElementType Skew::GetType() const
}
+//================================================================================
/*
Class : Area
Description : Functor for calculating area
*/
+//================================================================================
+
double Area::GetValue( const TSequenceOfXYZ& P )
{
double val = 0.0;
@@ -1463,11 +1480,13 @@ SMDSAbs_ElementType Area::GetType() const
return SMDSAbs_Face;
}
-
+//================================================================================
/*
Class : Length
Description : Functor for calculating length of edge
*/
+//================================================================================
+
double Length::GetValue( const TSequenceOfXYZ& P )
{
switch ( P.size() ) {
@@ -1488,10 +1507,12 @@ SMDSAbs_ElementType Length::GetType() const
return SMDSAbs_Edge;
}
+//================================================================================
/*
Class : Length2D
Description : Functor for calculating length of edge
*/
+//================================================================================
double Length2D::GetValue( long theElementId)
{
@@ -1799,10 +1820,13 @@ void Length2D::GetValues(TValues& theValues){
}
}
+//================================================================================
/*
Class : MultiConnection
Description : Functor for calculating number of faces conneted to the edge
*/
+//================================================================================
+
double MultiConnection::GetValue( const TSequenceOfXYZ& P )
{
return 0;
@@ -1823,10 +1847,13 @@ SMDSAbs_ElementType MultiConnection::GetType() const
return SMDSAbs_Edge;
}
+//================================================================================
/*
Class : MultiConnection2D
Description : Functor for calculating number of faces conneted to the edge
*/
+//================================================================================
+
double MultiConnection2D::GetValue( const TSequenceOfXYZ& P )
{
return 0;
@@ -1970,10 +1997,13 @@ void MultiConnection2D::GetValues(MValues& theValues){
}
+//================================================================================
/*
Class : BallDiameter
Description : Functor returning diameter of a ball element
*/
+//================================================================================
+
double BallDiameter::GetValue( long theId )
{
double diameter = 0;
@@ -2002,10 +2032,12 @@ SMDSAbs_ElementType BallDiameter::GetType() const
PREDICATES
*/
+//================================================================================
/*
Class : BadOrientedVolume
Description : Predicate bad oriented volumes
*/
+//================================================================================
BadOrientedVolume::BadOrientedVolume()
{
@@ -2052,9 +2084,11 @@ bool BareBorderVolume::IsSatisfy(long theElementId )
return false;
}
+//================================================================================
/*
Class : BareBorderFace
*/
+//================================================================================
bool BareBorderFace::IsSatisfy(long theElementId )
{
@@ -2092,9 +2126,11 @@ bool BareBorderFace::IsSatisfy(long theElementId )
return ok;
}
+//================================================================================
/*
Class : OverConstrainedVolume
*/
+//================================================================================
bool OverConstrainedVolume::IsSatisfy(long theElementId )
{
@@ -2112,9 +2148,11 @@ bool OverConstrainedVolume::IsSatisfy(long theElementId )
return false;
}
+//================================================================================
/*
Class : OverConstrainedFace
*/
+//================================================================================
bool OverConstrainedFace::IsSatisfy(long theElementId )
{
@@ -2145,10 +2183,12 @@ bool OverConstrainedFace::IsSatisfy(long theElementId )
return false;
}
+//================================================================================
/*
Class : CoincidentNodes
Description : Predicate of Coincident nodes
*/
+//================================================================================
CoincidentNodes::CoincidentNodes()
{
@@ -2190,11 +2230,13 @@ void CoincidentNodes::SetMesh( const SMDS_Mesh* theMesh )
}
}
+//================================================================================
/*
Class : CoincidentElements
Description : Predicate of Coincident Elements
Note : This class is suitable only for visualization of Coincident Elements
*/
+//================================================================================
CoincidentElements::CoincidentElements()
{
@@ -2245,10 +2287,12 @@ SMDSAbs_ElementType CoincidentElements3D::GetType() const
}
+//================================================================================
/*
Class : FreeBorders
Description : Predicate for free borders
*/
+//================================================================================
FreeBorders::FreeBorders()
{
@@ -2271,10 +2315,13 @@ SMDSAbs_ElementType FreeBorders::GetType() const
}
+//================================================================================
/*
Class : FreeEdges
Description : Predicate for free Edges
*/
+//================================================================================
+
FreeEdges::FreeEdges()
{
myMesh = 0;
@@ -2406,11 +2453,12 @@ void FreeEdges::GetBoreders(TBorders& theBorders)
}
}
-
+//================================================================================
/*
Class : FreeNodes
Description : Predicate for free nodes
*/
+//================================================================================
FreeNodes::FreeNodes()
{
@@ -2437,10 +2485,12 @@ SMDSAbs_ElementType FreeNodes::GetType() const
}
+//================================================================================
/*
Class : FreeFaces
Description : Predicate for free faces
*/
+//================================================================================
FreeFaces::FreeFaces()
{
@@ -2493,10 +2543,12 @@ SMDSAbs_ElementType FreeFaces::GetType() const
return SMDSAbs_Face;
}
+//================================================================================
/*
Class : LinearOrQuadratic
Description : Predicate to verify whether a mesh element is linear
*/
+//================================================================================
LinearOrQuadratic::LinearOrQuadratic()
{
@@ -2527,10 +2579,12 @@ SMDSAbs_ElementType LinearOrQuadratic::GetType() const
return myType;
}
+//================================================================================
/*
Class : GroupColor
Description : Functor for check color of group to whic mesh element belongs to
*/
+//================================================================================
GroupColor::GroupColor()
{
@@ -2619,6 +2673,7 @@ void GroupColor::SetColorStr( const TCollection_AsciiString& theStr )
// Purpose : Get range as a string.
// Example: "1,2,3,50-60,63,67,70-"
//=======================================================================
+
void GroupColor::GetColorStr( TCollection_AsciiString& theResStr ) const
{
theResStr.Clear();
@@ -2627,10 +2682,12 @@ void GroupColor::GetColorStr( TCollection_AsciiString& theResStr ) const
theResStr += TCollection_AsciiString( ";" ) + TCollection_AsciiString( myColor.Blue() );
}
+//================================================================================
/*
Class : ElemGeomType
Description : Predicate to check element geometry type
*/
+//================================================================================
ElemGeomType::ElemGeomType()
{
@@ -2677,6 +2734,54 @@ SMDSAbs_GeometryType ElemGeomType::GetGeomType() const
return myGeomType;
}
+//================================================================================
+/*
+ Class : ElemEntityType
+ Description : Predicate to check element entity type
+*/
+//================================================================================
+
+ElemEntityType::ElemEntityType():
+ myMesh( 0 ),
+ myType( SMDSAbs_All ),
+ myEntityType( SMDSEntity_0D )
+{
+}
+
+void ElemEntityType::SetMesh( const SMDS_Mesh* theMesh )
+{
+ myMesh = theMesh;
+}
+
+bool ElemEntityType::IsSatisfy( long theId )
+{
+ if ( !myMesh ) return false;
+ const SMDS_MeshElement* anElem = myMesh->FindElement( theId );
+ return ( anElem &&
+ myEntityType == anElem->GetEntityType() &&
+ ( myType == SMDSAbs_Edge || myType == SMDSAbs_Face || myType == SMDSAbs_Volume ));
+}
+
+void ElemEntityType::SetType( SMDSAbs_ElementType theType )
+{
+ myType = theType;
+}
+
+SMDSAbs_ElementType ElemEntityType::GetType() const
+{
+ return myType;
+}
+
+void ElemEntityType::SetElemEntityType( SMDSAbs_EntityType theEntityType )
+{
+ myEntityType = theEntityType;
+}
+
+SMDSAbs_EntityType ElemEntityType::GetElemEntityType() const
+{
+ return myEntityType;
+}
+
//================================================================================
/*!
* \brief Class CoplanarFaces
diff --git a/src/Controls/SMESH_ControlsDef.hxx b/src/Controls/SMESH_ControlsDef.hxx
index 9b9c26525..972cb042a 100644
--- a/src/Controls/SMESH_ControlsDef.hxx
+++ b/src/Controls/SMESH_ControlsDef.hxx
@@ -245,7 +245,6 @@ namespace SMESH{
virtual SMDSAbs_ElementType GetType() const;
};
-
/*
Class : Skew
Description : Functor for calculating skew in degrees
@@ -429,6 +428,28 @@ namespace SMESH{
const SMDS_Mesh* myMesh;
};
+ /*
+ Class : ElemEntityType
+ Description : Functor for calculating entity type
+ */
+ class SMESHCONTROLS_EXPORT ElemEntityType: public virtual Predicate{
+ public:
+ ElemEntityType();
+ virtual void SetMesh( const SMDS_Mesh* theMesh );
+ virtual bool IsSatisfy( long theElementId );
+ void SetType( SMDSAbs_ElementType theType );
+ virtual SMDSAbs_ElementType GetType() const;
+ void SetElemEntityType( SMDSAbs_EntityType theEntityType );
+ SMDSAbs_EntityType GetElemEntityType() const;
+
+ private:
+ const SMDS_Mesh* myMesh;
+ SMDSAbs_ElementType myType;
+ SMDSAbs_EntityType myEntityType;
+ };
+ typedef boost::shared_ptr ElemEntityTypePtr;
+
+
/*
BareBorderVolume
*/
diff --git a/src/DriverGMF/DriverGMF_Read.cxx b/src/DriverGMF/DriverGMF_Read.cxx
index e3fc5d76b..0d70c8d5a 100644
--- a/src/DriverGMF/DriverGMF_Read.cxx
+++ b/src/DriverGMF/DriverGMF_Read.cxx
@@ -29,6 +29,7 @@
#include "SMESHDS_Group.hxx"
#include "SMESHDS_Mesh.hxx"
#include "SMESH_Comment.hxx"
+#include "SMESH_TypeDefs.hxx"
#include
@@ -69,9 +70,11 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
if ( !meshID )
{
if ( DriverGMF::isExtensionCorrect( myFile ))
- return addMessage( SMESH_Comment("Can't open for reading ") << myFile, /*fatal=*/true );
+ return addMessage( SMESH_Comment("Can't open for reading ") << myFile,
+ /*fatal=*/true );
else
- return addMessage( SMESH_Comment("Not '.mesh' or '.meshb' extension of file ") << myFile, /*fatal=*/true );
+ return addMessage( SMESH_Comment("Not '.mesh' or '.meshb' extension of file ") << myFile,
+ /*fatal=*/true );
}
DriverGMF::MeshCloser aMeshCloser( meshID ); // An object closing GMF mesh at destruction
@@ -109,34 +112,33 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
int iN[28]; // 28 - nb nodes in HEX27 (+ 1 for safety :)
- /* Read extra vertices for quadratic edges */
- std::vector quadNodesAtEdges;
- int nbQuadEdges = 0;
- if ( (nbQuadEdges = GmfStatKwd(meshID, GmfExtraVerticesAtEdges)) )
- {
- quadNodesAtEdges.reserve( nbQuadEdges );
- GmfGotoKwd(meshID, GmfExtraVerticesAtEdges);
- for ( int i = 1; i <= nbQuadEdges; ++i )
- {
- GmfGetLin(meshID, GmfExtraVerticesAtEdges, &iN[0], &iN[1], &iN[2]);
- quadNodesAtEdges.push_back(iN[2]);
- }
- }
-
/* Read edges */
const int edgeIDShift = myMesh->GetMeshInfo().NbElements();
if ( int nbEdges = GmfStatKwd(meshID, GmfEdges))
{
- const bool readQuadNodes = ( nbQuadEdges == nbEdges );
+ // read extra vertices for quadratic edges
+ std::vector quadNodesAtEdges( nbEdges + 1, -1 );
+ if ( int nbQuadEdges = GmfStatKwd(meshID, GmfExtraVerticesAtEdges))
+ {
+ GmfGotoKwd(meshID, GmfExtraVerticesAtEdges);
+ for ( int i = 1; i <= nbQuadEdges; ++i )
+ {
+ GmfGetLin(meshID, GmfExtraVerticesAtEdges, &iN[0], &iN[1], &iN[2]);
+ if ( iN[1] >= 1 )
+ quadNodesAtEdges[ iN[0] ] = iN[2];
+ }
+ }
+ // create edges
GmfGotoKwd(meshID, GmfEdges);
for ( int i = 1; i <= nbEdges; ++i )
{
GmfGetLin(meshID, GmfEdges, &iN[0], &iN[1], &ref);
- if ( readQuadNodes )
+ const int midN = quadNodesAtEdges[ i ];
+ if ( midN > 0 )
{
- const int midN = quadNodesAtEdges[i-1];
if ( !myMesh->AddEdgeWithID( iN[0], iN[1], midN, edgeIDShift + i ))
- status = storeBadNodeIds( "GmfEdges + GmfExtraVerticesAtEdges",i, 3, iN[0],iN[1],midN);
+ status = storeBadNodeIds( "GmfEdges + GmfExtraVerticesAtEdges",i,
+ 3, iN[0], iN[1], midN);
}
else
{
@@ -145,47 +147,40 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
}
}
}
- // the vector of extra vertices at edges won't be used anymore so it is cleared
- quadNodesAtEdges.clear();
-
- /* Read extra vertices for quadratic triangles */
- std::vector< std::vector > quadNodesAtTriangles;
- int nbQuadTria = 0;
- if ( (nbQuadTria = GmfStatKwd(meshID, GmfExtraVerticesAtTriangles)) )
- {
- GmfGotoKwd(meshID, GmfExtraVerticesAtTriangles);
- quadNodesAtTriangles.reserve( nbQuadTria );
- std::vector nodes(4);
- for ( int i = 1; i <= nbQuadTria; ++i )
- {
- GmfGetLin(meshID, GmfExtraVerticesAtTriangles,
- &iN[0], &iN[1], &iN[2], &iN[3], &iN[4],
- &iN[5]); // iN[5] - preview TRIA7
- nodes.clear();
- nodes.push_back(iN[2]);
- nodes.push_back(iN[3]);
- nodes.push_back(iN[4]);
- nodes.push_back(iN[5]);
- nodes.resize( iN[1] );
-
- quadNodesAtTriangles.push_back(nodes);
- }
- }
/* Read triangles */
const int triaIDShift = myMesh->GetMeshInfo().NbElements();
if ( int nbTria = GmfStatKwd(meshID, GmfTriangles))
{
- const bool readQuadNodes = (nbQuadTria == nbTria);
+ // read extra vertices for quadratic triangles
+ std::vector< std::vector > quadNodesAtTriangles( nbTria + 1 );
+ if ( int nbQuadTria = GmfStatKwd(meshID, GmfExtraVerticesAtTriangles ))
+ {
+ GmfGotoKwd( meshID, GmfExtraVerticesAtTriangles );
+ for ( int i = 1; i <= nbQuadTria; ++i )
+ {
+ GmfGetLin(meshID, GmfExtraVerticesAtTriangles,
+ &iN[0], &iN[1], &iN[2], &iN[3], &iN[4],
+ &iN[5]); // iN[5] - preview TRIA7
+ if ( iN[0] <= nbTria )
+ {
+ std::vector& nodes = quadNodesAtTriangles[ iN[0] ];
+ nodes.insert( nodes.end(), & iN[2], & iN[5+1] );
+ nodes.resize( iN[1] );
+ }
+ }
+ }
+ // create triangles
GmfGotoKwd(meshID, GmfTriangles);
for ( int i = 1; i <= nbTria; ++i )
{
GmfGetLin(meshID, GmfTriangles, &iN[0], &iN[1], &iN[2], &ref);
- if ( readQuadNodes )
+ std::vector& midN = quadNodesAtTriangles[ i ];
+ if ( midN.size() >= 3 )
{
- const std::vector& midN = quadNodesAtTriangles[ i-1 ];
- if ( !myMesh->AddFaceWithID( iN[0],iN[1],iN[2], midN[0],midN[1],midN[2], triaIDShift + i ))
- status = storeBadNodeIds( "GmfTriangles + GmfExtraVerticesAtTriangles",i, 6,
+ if ( !myMesh->AddFaceWithID( iN[0],iN[1],iN[2], midN[0],midN[1],midN[2],
+ triaIDShift + i ))
+ status = storeBadNodeIds( "GmfTriangles + GmfExtraVerticesAtTriangles",i, 6,
iN[0],iN[1],iN[2], midN[0],midN[1],midN[2] );
}
else
@@ -193,127 +188,108 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], triaIDShift + i ))
status = storeBadNodeIds( "GmfTriangles",i, 3, iN[0], iN[1], iN[2] );
}
- }
- }
- // the vector of extra vertices at triangles won't be used anymore so it is cleared
- quadNodesAtTriangles.clear();
-
- /* Read extra vertices for quadratic quadrangles */
- std::vector< std::vector > quadNodesAtQuadrilaterals;
- int nbQuadQuad = 0;
- if ( (nbQuadQuad = GmfStatKwd(meshID, GmfExtraVerticesAtQuadrilaterals)) )
- {
- GmfGotoKwd(meshID, GmfExtraVerticesAtQuadrilaterals);
- quadNodesAtQuadrilaterals.reserve( nbQuadQuad );
- std::vector nodes( 5 );
- for ( int i = 1; i <= nbQuadQuad; ++i )
- {
- GmfGetLin(meshID, GmfExtraVerticesAtQuadrilaterals,
- &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &iN[5], &iN[6]);
- nodes.clear();
- nodes.push_back(iN[2]);
- nodes.push_back(iN[3]);
- nodes.push_back(iN[4]);
- nodes.push_back(iN[5]);
- nodes.push_back(iN[6]);
- nodes.resize( iN[1] );
-
- quadNodesAtQuadrilaterals.push_back(nodes);
+ if ( !midN.empty() ) SMESHUtils::FreeVector( midN );
}
}
- /* Read quadrangles */
+ /* Read quadrangles */
const int quadIDShift = myMesh->GetMeshInfo().NbElements();
if ( int nbQuad = GmfStatKwd(meshID, GmfQuadrilaterals))
{
- const bool readQuadNodes = (nbQuadQuad == nbQuad);
+ // read extra vertices for quadratic quadrangles
+ std::vector< std::vector > quadNodesAtQuadrilaterals( nbQuad + 1 );
+ if ( int nbQuadQuad = GmfStatKwd( meshID, GmfExtraVerticesAtQuadrilaterals ))
+ {
+ GmfGotoKwd(meshID, GmfExtraVerticesAtQuadrilaterals);
+ for ( int i = 1; i <= nbQuadQuad; ++i )
+ {
+ GmfGetLin(meshID, GmfExtraVerticesAtQuadrilaterals,
+ &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &iN[5], &iN[6]);
+ if ( iN[0] <= nbQuad )
+ {
+ std::vector& nodes = quadNodesAtQuadrilaterals[ iN[0] ];
+ nodes.insert( nodes.end(), & iN[2], & iN[6+1] );
+ nodes.resize( iN[1] );
+ }
+ }
+ }
+ // create quadrangles
GmfGotoKwd(meshID, GmfQuadrilaterals);
for ( int i = 1; i <= nbQuad; ++i )
{
GmfGetLin(meshID, GmfQuadrilaterals, &iN[0], &iN[1], &iN[2], &iN[3], &ref);
- if ( readQuadNodes )
+ std::vector& midN = quadNodesAtQuadrilaterals[ i ];
+ if ( midN.size() == 8-4 ) // QUAD8
{
- const std::vector& midN = quadNodesAtQuadrilaterals[ i-1 ];
- if ( midN.size() == 4 )
- {
- if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3],
- midN[0], midN[1], midN[2], midN[3],
- quadIDShift + i ))
- status = storeBadNodeIds( "GmfQuadrilaterals + GmfExtraVerticesAtQuadrilaterals",i, 8,
- iN[0], iN[1],iN[2], iN[3],
- midN[0], midN[1], midN[2], midN[3]);
- }
- else
- {
- if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3],
- midN[0], midN[1], midN[2], midN[3], midN[4],
- quadIDShift + i ))
- status = storeBadNodeIds( "GmfQuadrilaterals + GmfExtraVerticesAtQuadrilaterals",i, 9,
- iN[0], iN[1],iN[2], iN[3],
- midN[0], midN[1], midN[2], midN[3], midN[4]);
- }
+ if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3],
+ quadIDShift + i ))
+ status = storeBadNodeIds( "GmfQuadrilaterals + GmfExtraVerticesAtQuadrilaterals",i, 8,
+ iN[0], iN[1],iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3]);
}
- else
+ else if ( midN.size() > 8-4 ) // QUAD9
+ {
+ if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3], midN[4],
+ quadIDShift + i ))
+ status = storeBadNodeIds( "GmfQuadrilaterals + GmfExtraVerticesAtQuadrilaterals",i, 9,
+ iN[0], iN[1],iN[2], iN[3],
+ midN[0], midN[1], midN[2], midN[3], midN[4]);
+ }
+ else // QUAD4
{
if ( !myMesh->AddFaceWithID( iN[0], iN[1], iN[2], iN[3], quadIDShift + i ))
status = storeBadNodeIds( "GmfQuadrilaterals",i, 4, iN[0], iN[1],iN[2], iN[3] );
}
+ if ( !midN.empty() ) SMESHUtils::FreeVector( midN );
}
}
- // the vector of extra vertices at quadrilaterals won't be used anymore so it is cleared
- quadNodesAtQuadrilaterals.clear();
- /* Read extra vertices for quadratic tetrahedra */
- std::vector< std::vector > quadNodesAtTetrahedra;
- int nbQuadTetra = 0;
- if ( (nbQuadTetra = GmfStatKwd(meshID, GmfExtraVerticesAtTetrahedra)) )
- {
- GmfGotoKwd(meshID, GmfExtraVerticesAtTetrahedra);
- quadNodesAtTetrahedra.reserve( nbQuadTetra );
- std::vector nodes( 6 );
- for ( int i = 1; i <= nbQuadTetra; ++i )
- {
- GmfGetLin(meshID, GmfExtraVerticesAtTetrahedra,
- &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &iN[5], &iN[6], &iN[7]);
- nodes.clear();
- nodes.push_back(iN[2]);
- nodes.push_back(iN[3]);
- nodes.push_back(iN[4]);
- nodes.push_back(iN[5]);
- nodes.push_back(iN[6]);
- nodes.push_back(iN[7]);
- nodes.resize( iN[1] );
-
- quadNodesAtTetrahedra.push_back(nodes);
- }
- }
-
/* Read terahedra */
const int tetIDShift = myMesh->GetMeshInfo().NbElements();
- if ( int nbTet = GmfStatKwd(meshID, GmfTetrahedra))
+ if ( int nbTet = GmfStatKwd( meshID, GmfTetrahedra ))
{
- const bool readQuadNodes = (nbQuadTetra == nbTet);
+ // read extra vertices for quadratic tetrahedra
+ std::vector< std::vector > quadNodesAtTetrahedra( nbTet + 1 );
+ if ( int nbQuadTetra = GmfStatKwd( meshID, GmfExtraVerticesAtTetrahedra ))
+ {
+ GmfGotoKwd(meshID, GmfExtraVerticesAtTetrahedra);
+ for ( int i = 1; i <= nbQuadTetra; ++i )
+ {
+ GmfGetLin(meshID, GmfExtraVerticesAtTetrahedra,
+ &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &iN[5], &iN[6], &iN[7]);
+ if ( iN[0] <= nbTet )
+ {
+ std::vector& nodes = quadNodesAtTetrahedra[ iN[0] ];
+ nodes.insert( nodes.end(), & iN[2], & iN[7+1] );
+ nodes.resize( iN[1] );
+ }
+ }
+ }
+ // create tetrahedra
GmfGotoKwd(meshID, GmfTetrahedra);
for ( int i = 1; i <= nbTet; ++i )
{
GmfGetLin(meshID, GmfTetrahedra, &iN[0], &iN[1], &iN[2], &iN[3], &ref);
- if ( readQuadNodes )
+ std::vector& midN = quadNodesAtTetrahedra[ i ];
+ if ( midN.size() >= 10-4 ) // TETRA10
{
- const std::vector& midN = quadNodesAtTetrahedra[ i-1 ];
if ( !myMesh->AddVolumeWithID( iN[0], iN[2], iN[1], iN[3],
- midN[2], midN[1], midN[0], midN[3], midN[5], midN[4], tetIDShift + i ))
- status = storeBadNodeIds( "GmfTetrahedra + GmfExtraVerticesAtTetrahedra",i, 10, iN[0], iN[2], iN[1], iN[3],
- midN[2], midN[1], midN[0], midN[3], midN[5], midN[4] );
+ midN[2], midN[1], midN[0], midN[3], midN[5], midN[4],
+ tetIDShift + i ))
+ status = storeBadNodeIds( "GmfTetrahedra + GmfExtraVerticesAtTetrahedra",i, 10,
+ iN[0], iN[2], iN[1], iN[3],
+ midN[2], midN[1], midN[0], midN[3], midN[5], midN[4] );
}
- else
+ else // TETRA4
{
- if ( !myMesh->AddVolumeWithID( iN[0], iN[2], iN[1], iN[3], tetIDShift + i ) )
+ if ( !myMesh->AddVolumeWithID( iN[0], iN[2], iN[1], iN[3], tetIDShift + i ))
status = storeBadNodeIds( "GmfTetrahedra" ,i, 4, iN[0], iN[2], iN[1], iN[3] );
}
+ if ( !midN.empty() ) SMESHUtils::FreeVector( midN );
}
}
- // the vector of extra vertices at tetrahedra won't be used anymore so it is cleared
- quadNodesAtTetrahedra.clear();
/* Read pyramids */
const int pyrIDShift = myMesh->GetMeshInfo().NbElements();
@@ -328,92 +304,58 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
}
}
- /* Read extra vertices for quadratic hexahedra */
- std::vector< std::vector > quadNodesAtHexahedra;
- int nbQuadHexa = 0;
- if ( (nbQuadHexa = GmfStatKwd(meshID, GmfExtraVerticesAtHexahedra)) )
- {
- GmfGotoKwd(meshID, GmfExtraVerticesAtHexahedra);
- quadNodesAtHexahedra.reserve( nbQuadHexa );
- std::vector nodes( 19 );
- for ( int i = 1; i <= nbQuadHexa; ++i )
- {
- GmfGetLin(meshID, GmfExtraVerticesAtHexahedra, &iN[0], &iN[1], // Hexa Id, Nb of extra vertices
- &iN[2], &iN[3], &iN[4], &iN[5],
- &iN[6], &iN[7], &iN[8], &iN[9],
- &iN[10], &iN[11], &iN[12], &iN[13], // HEXA20
- &iN[14],
- &iN[15], &iN[16], &iN[17], &iN[18],
- &iN[19],
- &iN[20]); // HEXA27
- nodes.clear();
- nodes.push_back(iN[2]);
- nodes.push_back(iN[3]);
- nodes.push_back(iN[4]);
- nodes.push_back(iN[5]);
- nodes.push_back(iN[6]);
- nodes.push_back(iN[7]);
- nodes.push_back(iN[8]);
- nodes.push_back(iN[9]);
- nodes.push_back(iN[10]);
- nodes.push_back(iN[11]);
- nodes.push_back(iN[12]);
- nodes.push_back(iN[13]);
- nodes.push_back(iN[14]);
- nodes.push_back(iN[15]);
- nodes.push_back(iN[16]);
- nodes.push_back(iN[17]);
- nodes.push_back(iN[18]);
- nodes.push_back(iN[19]);
- nodes.push_back(iN[20]);
- nodes.resize( iN[1] );
-
- quadNodesAtHexahedra.push_back(nodes);
- }
- }
-
/* Read hexahedra */
const int hexIDShift = myMesh->GetMeshInfo().NbElements();
if ( int nbHex = GmfStatKwd(meshID, GmfHexahedra))
{
- const bool readQuadNodes = (nbQuadHexa == nbHex);
+ // read extra vertices for quadratic hexahedra
+ std::vector< std::vector > quadNodesAtHexahedra( nbHex + 1 );
+ if ( int nbQuadHexa = GmfStatKwd( meshID, GmfExtraVerticesAtHexahedra ))
+ {
+ GmfGotoKwd(meshID, GmfExtraVerticesAtHexahedra);
+ for ( int i = 1; i <= nbQuadHexa; ++i )
+ {
+ GmfGetLin(meshID, GmfExtraVerticesAtHexahedra, &iN[0], &iN[1], // Hexa Id, Nb extra vertices
+ &iN[2], &iN[3], &iN[4], &iN[5],
+ &iN[6], &iN[7], &iN[8], &iN[9],
+ &iN[10], &iN[11], &iN[12], &iN[13], // HEXA20
+ &iN[14],
+ &iN[15], &iN[16], &iN[17], &iN[18],
+ &iN[19],
+ &iN[20]); // HEXA27
+ if ( iN[0] <= nbHex )
+ {
+ std::vector& nodes = quadNodesAtHexahedra[ iN[0] ];
+ nodes.insert( nodes.end(), & iN[2], & iN[20+1] );
+ nodes.resize( iN[1] );
+ }
+ }
+ }
+ // create hexhedra
GmfGotoKwd(meshID, GmfHexahedra);
for ( int i = 1; i <= nbHex; ++i )
{
GmfGetLin(meshID, GmfHexahedra, &iN[0], &iN[1], &iN[2], &iN[3],
- &iN[4], &iN[5], &iN[6], &iN[7],&ref);
- if ( readQuadNodes )
+ &iN[4], &iN[5], &iN[6], &iN[7], &ref);
+ std::vector& midN = quadNodesAtHexahedra[ i ];
+ if ( midN.size() == 20-8 ) // HEXA20
{
- const std::vector& midN = quadNodesAtHexahedra[ i-1 ];
- if ( midN.size() == 12 ) // HEXA20
- {
- if ( !myMesh->AddVolumeWithID( iN[0], iN[3], iN[2], iN[1],
- iN[4], iN[7], iN[6], iN[5],
- midN[3], midN[2], midN[1], midN[0],
- midN[7], midN[6], midN[5], midN[4],
- midN[8], midN[11], midN[10], midN[9],
- tetIDShift + i ))
- status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 20,
- iN[0], iN[3], iN[2], iN[1],
+ if ( !myMesh->AddVolumeWithID( iN[0], iN[3], iN[2], iN[1],
iN[4], iN[7], iN[6], iN[5],
midN[3], midN[2], midN[1], midN[0],
midN[7], midN[6], midN[5], midN[4],
- midN[8], midN[11], midN[10], midN[9]);
- }
- else // HEXA27
- {
- if ( !myMesh->AddVolumeWithID( iN[0], iN[3], iN[2], iN[1],
- iN[4], iN[7], iN[6], iN[5],
- midN[3], midN[2], midN[1], midN[0],
- midN[7], midN[6], midN[5], midN[4],
- midN[8], midN[11], midN[10], midN[9],
- midN[12],
- midN[16], midN[15], midN[14], midN[13],
- midN[17],
- midN[18],
- tetIDShift + i ))
- status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 27,
- iN[0], iN[3], iN[2], iN[1],
+ midN[8], midN[11], midN[10], midN[9],
+ hexIDShift + i ))
+ status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 20,
+ iN[0], iN[3], iN[2], iN[1],
+ iN[4], iN[7], iN[6], iN[5],
+ midN[3], midN[2], midN[1], midN[0],
+ midN[7], midN[6], midN[5], midN[4],
+ midN[8], midN[11], midN[10], midN[9]);
+ }
+ else if ( midN.size() >= 27-8 ) // HEXA27
+ {
+ if ( !myMesh->AddVolumeWithID( iN[0], iN[3], iN[2], iN[1],
iN[4], iN[7], iN[6], iN[5],
midN[3], midN[2], midN[1], midN[0],
midN[7], midN[6], midN[5], midN[4],
@@ -421,20 +363,29 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
midN[12],
midN[16], midN[15], midN[14], midN[13],
midN[17],
- midN[18]);
- }
+ midN[18],
+ hexIDShift + i ))
+ status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 27,
+ iN[0], iN[3], iN[2], iN[1],
+ iN[4], iN[7], iN[6], iN[5],
+ midN[3], midN[2], midN[1], midN[0],
+ midN[7], midN[6], midN[5], midN[4],
+ midN[8], midN[11], midN[10], midN[9],
+ midN[12],
+ midN[16], midN[15], midN[14], midN[13],
+ midN[17],
+ midN[18]);
}
- else
+ else // HEXA8
{
if ( !myMesh->AddVolumeWithID( iN[0], iN[3], iN[2], iN[1],
iN[4], iN[7], iN[6], iN[5], hexIDShift + i ) )
status = storeBadNodeIds( "GmfHexahedra" ,i, 8, iN[0], iN[3], iN[2], iN[1],
- iN[4], iN[7], iN[6], iN[5] );
+ iN[4], iN[7], iN[6], iN[5] );
}
+ if ( !midN.empty() ) SMESHUtils::FreeVector( midN );
}
}
- // the vector of extra vertices at tetrahedra won't be used anymore so it is cleared
- quadNodesAtHexahedra.clear();
/* Read prism */
const int prismIDShift = myMesh->GetMeshInfo().NbElements();
@@ -443,8 +394,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
GmfGotoKwd(meshID, GmfPrisms);
for ( int i = 1; i <= nbPrism; ++i )
{
- GmfGetLin(meshID, GmfPrisms,
- &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &iN[5], &ref);
+ GmfGetLin(meshID, GmfPrisms, &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &iN[5], &ref);
if ( !myMesh->AddVolumeWithID( iN[0], iN[2], iN[1], iN[3], iN[5], iN[4], prismIDShift + i))
status = storeBadNodeIds( "GmfPrisms",i,
6, iN[0], iN[1],iN[2], iN[3], iN[4], iN[5] );
diff --git a/src/DriverGMF/DriverGMF_Write.cxx b/src/DriverGMF/DriverGMF_Write.cxx
index 432551e79..0a3c5ca68 100644
--- a/src/DriverGMF/DriverGMF_Write.cxx
+++ b/src/DriverGMF/DriverGMF_Write.cxx
@@ -40,37 +40,42 @@ extern "C"
#include
#define BEGIN_ELEM_WRITE( SMDSEntity, GmfKwd, elem ) \
- elemIt = myMesh->elementEntityIterator( SMDSEntity ); \
+ elemIt = elementIterator( SMDSEntity ); \
if ( elemIt->more() ) \
{ \
- GmfSetKwd(meshID, GmfKwd, myMesh->GetMeshInfo().NbEntities( SMDSEntity )); \
+ GmfSetKwd(meshID, GmfKwd, myMesh->GetMeshInfo().NbElements( SMDSEntity )); \
for ( int gmfID = 1; elemIt->more(); ++gmfID ) \
{ \
const SMDS_MeshElement* elem = elemIt->next(); \
GmfSetLin(meshID, GmfKwd,
-#define BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity, GmfKwd, elem, nbVertices ) \
- elemIt = myMesh->elementEntityIterator( SMDSEntity ); \
+#define BEGIN_EXTRA_VERTICES_WRITE( SMDSGeom, LinType, GmfKwd, elem ) \
+ elemIt = elementIterator( SMDSGeom ); \
if ( elemIt->more() ) \
{ \
- GmfSetKwd(meshID, GmfKwd, myMesh->GetMeshInfo().NbEntities( SMDSEntity )); \
+ int totalNbElems = myMesh->GetMeshInfo().NbElements( SMDSGeom ); \
+ int nbLinearElems = myMesh->GetMeshInfo().NbElements( LinType ); \
+ if ( totalNbElems - nbLinearElems > 0 ) \
+ { \
+ GmfSetKwd(meshID, GmfKwd, totalNbElems - nbLinearElems); \
for ( int gmfID = 1; elemIt->more(); ++gmfID ) \
{ \
const SMDS_MeshElement* elem = elemIt->next(); \
- GmfSetLin(meshID, GmfKwd, gmfID, nbVertices,
+ if ( elem->IsQuadratic() ) { \
+ GmfSetLin(meshID, GmfKwd, gmfID, elem->NbNodes() - elem->NbCornerNodes(),
#define END_ELEM_WRITE( elem ) \
elem->getshapeId() ); \
- }} \
+ }}
#define END_ELEM_WRITE_ADD_TO_MAP( elem, e2id ) \
elem->getshapeId() ); \
e2id.insert( e2id.end(), make_pair( elem, gmfID )); \
- }} \
+ }}
#define END_EXTRA_VERTICES_WRITE() \
); \
- }} \
+ }}}}
DriverGMF_Write::DriverGMF_Write():
@@ -126,107 +131,73 @@ Driver_Mesh::Status DriverGMF_Write::Perform()
// edges
TElem2IDMap edge2IDMap;
- BEGIN_ELEM_WRITE( SMDSEntity_Edge, GmfEdges, edge )
+ BEGIN_ELEM_WRITE( SMDSGeom_EDGE, GmfEdges, edge )
node2IdMap[ edge->GetNode( 0 )],
node2IdMap[ edge->GetNode( 1 )],
END_ELEM_WRITE_ADD_TO_MAP( edge, edge2IDMap );
- // quadratic edges
- BEGIN_ELEM_WRITE( SMDSEntity_Quad_Edge, GmfEdges, edge )
- node2IdMap[ edge->GetNode( 0 )],
- node2IdMap[ edge->GetNode( 1 )],
- END_ELEM_WRITE( edge );
-
- BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity_Quad_Edge, GmfExtraVerticesAtEdges, edge, 1 )
+ // nodes of quadratic edges
+ BEGIN_EXTRA_VERTICES_WRITE( SMDSGeom_EDGE, SMDSEntity_Edge,
+ GmfExtraVerticesAtEdges, edge )
node2IdMap[ edge->GetNode( 2 )]
END_EXTRA_VERTICES_WRITE();
// triangles
TElem2IDMap tria2IDMap;
- BEGIN_ELEM_WRITE( SMDSEntity_Triangle, GmfTriangles, tria )
+ BEGIN_ELEM_WRITE( SMDSGeom_TRIANGLE, GmfTriangles, tria )
node2IdMap[ tria->GetNode( 0 )],
node2IdMap[ tria->GetNode( 1 )],
node2IdMap[ tria->GetNode( 2 )],
END_ELEM_WRITE_ADD_TO_MAP( tria, tria2IDMap );
- // quadratic triangles
- BEGIN_ELEM_WRITE( SMDSEntity_Quad_Triangle, GmfTriangles, tria )
- node2IdMap[ tria->GetNode( 0 )],
- node2IdMap[ tria->GetNode( 1 )],
- node2IdMap[ tria->GetNode( 2 )],
- END_ELEM_WRITE( tria );
-
- BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity_Quad_Triangle, GmfExtraVerticesAtTriangles, tria, 3 )
+ // nodes of quadratic triangles
+ BEGIN_EXTRA_VERTICES_WRITE( SMDSGeom_TRIANGLE, SMDSEntity_Triangle,
+ GmfExtraVerticesAtTriangles, tria )
node2IdMap[ tria->GetNode( 3 )],
node2IdMap[ tria->GetNode( 4 )],
node2IdMap[ tria->GetNode( 5 )]
+ //node2IdMap[ tria->GetNodeWrap( 6 )] // for TRIA7
END_EXTRA_VERTICES_WRITE();
// quadrangles
TElem2IDMap quad2IDMap;
- BEGIN_ELEM_WRITE( SMDSEntity_Quadrangle, GmfQuadrilaterals, quad )
+ BEGIN_ELEM_WRITE( SMDSGeom_QUADRANGLE, GmfQuadrilaterals, quad )
node2IdMap[ quad->GetNode( 0 )],
node2IdMap[ quad->GetNode( 1 )],
node2IdMap[ quad->GetNode( 2 )],
node2IdMap[ quad->GetNode( 3 )],
END_ELEM_WRITE_ADD_TO_MAP( quad, quad2IDMap );
- // quadratic quadrangles
- BEGIN_ELEM_WRITE( SMDSEntity_Quad_Quadrangle, GmfQuadrilaterals, quad )
- node2IdMap[ quad->GetNode( 0 )],
- node2IdMap[ quad->GetNode( 1 )],
- node2IdMap[ quad->GetNode( 2 )],
- node2IdMap[ quad->GetNode( 3 )],
- END_ELEM_WRITE( quad );
-
- BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity_Quad_Quadrangle, GmfExtraVerticesAtQuadrilaterals, quad, 4 )
- node2IdMap[ quad->GetNode( 4 )],
- node2IdMap[ quad->GetNode( 5 )],
- node2IdMap[ quad->GetNode( 6 )],
- node2IdMap[ quad->GetNode( 7 )]
- END_EXTRA_VERTICES_WRITE();
-
- // bi-quadratic quadrangles
- BEGIN_ELEM_WRITE( SMDSEntity_BiQuad_Quadrangle, GmfQuadrilaterals, quad )
- node2IdMap[ quad->GetNode( 0 )],
- node2IdMap[ quad->GetNode( 1 )],
- node2IdMap[ quad->GetNode( 2 )],
- node2IdMap[ quad->GetNode( 3 )],
- END_ELEM_WRITE( quad );
-
- BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity_BiQuad_Quadrangle, GmfExtraVerticesAtQuadrilaterals, quad, 5 )
+ // nodes of quadratic quadrangles
+ BEGIN_EXTRA_VERTICES_WRITE( SMDSGeom_QUADRANGLE, SMDSEntity_Quadrangle,
+ GmfExtraVerticesAtQuadrilaterals, quad )
node2IdMap[ quad->GetNode( 4 )],
node2IdMap[ quad->GetNode( 5 )],
node2IdMap[ quad->GetNode( 6 )],
node2IdMap[ quad->GetNode( 7 )],
- node2IdMap[ quad->GetNode( 8 )]
+ node2IdMap[ quad->GetNodeWrap( 8 )] // for QUAD9
END_EXTRA_VERTICES_WRITE();
// terahedra
- BEGIN_ELEM_WRITE( SMDSEntity_Tetra, GmfTetrahedra, tetra )
+ BEGIN_ELEM_WRITE( SMDSGeom_TETRA, GmfTetrahedra, tetra )
node2IdMap[ tetra->GetNode( 0 )],
node2IdMap[ tetra->GetNode( 2 )],
node2IdMap[ tetra->GetNode( 1 )],
node2IdMap[ tetra->GetNode( 3 )],
END_ELEM_WRITE( tetra );
- // quadratic terahedra
- BEGIN_ELEM_WRITE( SMDSEntity_Quad_Tetra, GmfTetrahedra, tetra )
- node2IdMap[ tetra->GetNode( 0 )],
- node2IdMap[ tetra->GetNode( 2 )],
- node2IdMap[ tetra->GetNode( 1 )],
- node2IdMap[ tetra->GetNode( 3 )],
- END_ELEM_WRITE( tetra );
-
- BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity_Quad_Tetra, GmfExtraVerticesAtTetrahedra, tetra, 6 )
+ // nodes of quadratic terahedra
+ BEGIN_EXTRA_VERTICES_WRITE( SMDSGeom_TETRA, SMDSEntity_Tetra,
+ GmfExtraVerticesAtTetrahedra, tetra )
node2IdMap[ tetra->GetNode( 6 )],
node2IdMap[ tetra->GetNode( 5 )],
node2IdMap[ tetra->GetNode( 4 )],
node2IdMap[ tetra->GetNode( 7 )],
node2IdMap[ tetra->GetNode( 9 )],
node2IdMap[ tetra->GetNode( 8 )]
+ //node2IdMap[ tetra->GetNodeWrap( 10 )], // for TETRA11
END_EXTRA_VERTICES_WRITE();
-
+
// pyramids
BEGIN_ELEM_WRITE( SMDSEntity_Pyramid, GmfPyramids, pyra )
node2IdMap[ pyra->GetNode( 0 )],
@@ -237,7 +208,7 @@ Driver_Mesh::Status DriverGMF_Write::Perform()
END_ELEM_WRITE( pyra );
// hexahedra
- BEGIN_ELEM_WRITE( SMDSEntity_Hexa, GmfHexahedra, hexa )
+ BEGIN_ELEM_WRITE( SMDSGeom_HEXA, GmfHexahedra, hexa )
node2IdMap[ hexa->GetNode( 0 )],
node2IdMap[ hexa->GetNode( 3 )],
node2IdMap[ hexa->GetNode( 2 )],
@@ -248,65 +219,28 @@ Driver_Mesh::Status DriverGMF_Write::Perform()
node2IdMap[ hexa->GetNode( 5 )],
END_ELEM_WRITE( hexa );
- // quadratic hexahedra
- BEGIN_ELEM_WRITE( SMDSEntity_Quad_Hexa, GmfHexahedra, hexa )
- node2IdMap[ hexa->GetNode( 0 )],
- node2IdMap[ hexa->GetNode( 3 )],
- node2IdMap[ hexa->GetNode( 2 )],
- node2IdMap[ hexa->GetNode( 1 )],
- node2IdMap[ hexa->GetNode( 4 )],
- node2IdMap[ hexa->GetNode( 7 )],
- node2IdMap[ hexa->GetNode( 6 )],
- node2IdMap[ hexa->GetNode( 5 )],
- END_ELEM_WRITE( hexa );
-
- BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity_Quad_Hexa, GmfExtraVerticesAtHexahedra, hexa, 12 )
- node2IdMap[ hexa->GetNode( 11 )],
+ // nodes of quadratic hexahedra
+ BEGIN_EXTRA_VERTICES_WRITE( SMDSGeom_HEXA, SMDSEntity_Hexa,
+ GmfExtraVerticesAtHexahedra, hexa )
+ node2IdMap[ hexa->GetNode( 11 )], // HEXA20
node2IdMap[ hexa->GetNode( 10 )],
- node2IdMap[ hexa->GetNode( 9 )],
- node2IdMap[ hexa->GetNode( 8 )],
+ node2IdMap[ hexa->GetNode( 9 )],
+ node2IdMap[ hexa->GetNode( 8 )],
node2IdMap[ hexa->GetNode( 15 )],
node2IdMap[ hexa->GetNode( 14 )],
node2IdMap[ hexa->GetNode( 13 )],
node2IdMap[ hexa->GetNode( 12 )],
node2IdMap[ hexa->GetNode( 16 )],
node2IdMap[ hexa->GetNode( 19 )],
- node2IdMap[ hexa->GetNode( 18 )],
- node2IdMap[ hexa->GetNode( 17 )]
- END_EXTRA_VERTICES_WRITE();
-
- // tri-quadratic hexahedra
- BEGIN_ELEM_WRITE( SMDSEntity_TriQuad_Hexa, GmfHexahedra, hexa )
- node2IdMap[ hexa->GetNode( 0 )],
- node2IdMap[ hexa->GetNode( 3 )],
- node2IdMap[ hexa->GetNode( 2 )],
- node2IdMap[ hexa->GetNode( 1 )],
- node2IdMap[ hexa->GetNode( 4 )],
- node2IdMap[ hexa->GetNode( 7 )],
- node2IdMap[ hexa->GetNode( 6 )],
- node2IdMap[ hexa->GetNode( 5 )],
- END_ELEM_WRITE( hexa );
-
- BEGIN_EXTRA_VERTICES_WRITE( SMDSEntity_TriQuad_Hexa, GmfExtraVerticesAtHexahedra, hexa, 19 )
- node2IdMap[ hexa->GetNode( 11 )],
- node2IdMap[ hexa->GetNode( 10 )],
- node2IdMap[ hexa->GetNode( 9 )],
- node2IdMap[ hexa->GetNode( 8 )],
- node2IdMap[ hexa->GetNode( 15 )],
- node2IdMap[ hexa->GetNode( 14 )],
- node2IdMap[ hexa->GetNode( 13 )],
- node2IdMap[ hexa->GetNode( 12 )],
- node2IdMap[ hexa->GetNode( 16 )],
- node2IdMap[ hexa->GetNode( 19 )],
- node2IdMap[ hexa->GetNode( 18 )],
- node2IdMap[ hexa->GetNode( 17 )],
- node2IdMap[ hexa->GetNode( 20 )],
- node2IdMap[ hexa->GetNode( 24 )],
- node2IdMap[ hexa->GetNode( 23 )],
- node2IdMap[ hexa->GetNode( 22 )],
- node2IdMap[ hexa->GetNode( 21 )],
- node2IdMap[ hexa->GetNode( 25 )],
- node2IdMap[ hexa->GetNode( 26 )]
+ node2IdMap[ hexa->GetNodeWrap( 18 )], // + HEXA27
+ node2IdMap[ hexa->GetNodeWrap( 17 )],
+ node2IdMap[ hexa->GetNodeWrap( 20 )],
+ node2IdMap[ hexa->GetNodeWrap( 24 )],
+ node2IdMap[ hexa->GetNodeWrap( 23 )],
+ node2IdMap[ hexa->GetNodeWrap( 22 )],
+ node2IdMap[ hexa->GetNodeWrap( 21 )],
+ node2IdMap[ hexa->GetNodeWrap( 25 )],
+ node2IdMap[ hexa->GetNodeWrap( 26 )]
END_EXTRA_VERTICES_WRITE();
// prism
@@ -405,3 +339,22 @@ Driver_Mesh::Status DriverGMF_Write::Perform()
return DRS_OK;
}
+
+//================================================================================
+/*!
+ * \brief Returns an iterator on elements of a certain type
+ */
+//================================================================================
+
+SMDS_ElemIteratorPtr DriverGMF_Write::elementIterator(SMDSAbs_ElementType type)
+{
+ return myMesh->elementsIterator(type);
+}
+SMDS_ElemIteratorPtr DriverGMF_Write::elementIterator(SMDSAbs_EntityType type)
+{
+ return myMesh->elementEntityIterator(type);
+}
+SMDS_ElemIteratorPtr DriverGMF_Write::elementIterator(SMDSAbs_GeometryType type)
+{
+ return myMesh->elementGeomIterator(type);
+}
diff --git a/src/DriverGMF/DriverGMF_Write.hxx b/src/DriverGMF/DriverGMF_Write.hxx
index 0e8ee4f70..b66b3d946 100644
--- a/src/DriverGMF/DriverGMF_Write.hxx
+++ b/src/DriverGMF/DriverGMF_Write.hxx
@@ -31,6 +31,7 @@
#include "Driver_SMESHDS_Mesh.h"
#include "SMDSAbs_ElementType.hxx"
+#include "SMDS_ElemIterator.hxx"
/*!
* \brief Driver Writing a mesh into a GMF file.
@@ -51,6 +52,10 @@ public:
private:
+ SMDS_ElemIteratorPtr elementIterator(SMDSAbs_ElementType type);
+ SMDS_ElemIteratorPtr elementIterator(SMDSAbs_EntityType type);
+ SMDS_ElemIteratorPtr elementIterator(SMDSAbs_GeometryType type);
+
bool _exportRequiredGroups;
};
diff --git a/src/DriverMED/Makefile.am b/src/DriverMED/Makefile.am
index db0fa90b2..2e858e471 100644
--- a/src/DriverMED/Makefile.am
+++ b/src/DriverMED/Makefile.am
@@ -21,7 +21,7 @@
# Author : Marc Tajchman (CEA)
# Modified by : Alexander BORODIN (OCN) - autotools usage
# Module : SMESH
-
+#
include $(top_srcdir)/adm_local/unix/make_common_starter.am
# header files
diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx
index 3ae80f7a1..65e5c9816 100644
--- a/src/OBJECT/SMESH_Actor.cxx
+++ b/src/OBJECT/SMESH_Actor.cxx
@@ -146,10 +146,10 @@ SMESH_ActorDef::SMESH_ActorDef()
if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
myControlsPrecision = mgr->integerValue( "SMESH", "controls_precision", -1);
- vtkFloatingPointType aElem0DSize = SMESH::GetFloat("SMESH:elem0d_size",5);
- vtkFloatingPointType aBallElemSize = SMESH::GetFloat("SMESH:ball_elem_size",10);
- vtkFloatingPointType aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
- vtkFloatingPointType aOutlineWidth = SMESH::GetFloat("SMESH:outline_width",1);
+ double aElem0DSize = SMESH::GetFloat("SMESH:elem0d_size",5);
+ double aBallElemSize = SMESH::GetFloat("SMESH:ball_elem_size",10);
+ double aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
+ double aOutlineWidth = SMESH::GetFloat("SMESH:outline_width",1);
SMESH::LabelFont aFamilyNd = SMESH::FntTimes;
bool aBoldNd = true;
@@ -166,7 +166,7 @@ SMESH_ActorDef::SMESH_ActorDef()
aShadowNd = f.overline();
aSizeNd = f.pointSize();
}
- vtkFloatingPointType anRGBNd[3] = {1,1,1};
+ double anRGBNd[3] = {1,1,1};
SMESH::GetColor( "SMESH", "numbering_node_color", anRGBNd[0], anRGBNd[1], anRGBNd[2], QColor( 255, 255, 255 ) );
SMESH::LabelFont aFamilyEl = SMESH::FntTimes;
@@ -184,7 +184,7 @@ SMESH_ActorDef::SMESH_ActorDef()
aShadowEl = f.overline();
aSizeEl = f.pointSize();
}
- vtkFloatingPointType anRGBEl[3] = {0,1,0};
+ double anRGBEl[3] = {0,1,0};
SMESH::GetColor( "SMESH", "numbering_elem_color", anRGBEl[0], anRGBEl[1], anRGBEl[2], QColor( 0, 255, 0 ) );
vtkMatrix4x4 *aMatrix = vtkMatrix4x4::New();
@@ -192,7 +192,7 @@ SMESH_ActorDef::SMESH_ActorDef()
//Definition 2D and 3D devices of the actor
//-----------------------------------------
- vtkFloatingPointType anRGB[3] = {1,1,1};
+ double anRGB[3] = {1,1,1};
mySurfaceProp = vtkProperty::New();
QColor ffc, bfc;
int delta;
@@ -665,8 +665,8 @@ void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled )
void SMESH_ActorDef::SetPointsFontProperties( SMESH::LabelFont theFamily, int theSize,
bool theBold, bool theItalic, bool theShadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b )
-{
+ double r, double g, double b )
+{
if(myNodeActor) {
myNodeActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
SetRepresentation( GetRepresentation() );
@@ -676,8 +676,8 @@ void SMESH_ActorDef::SetPointsFontProperties( SMESH::LabelFont theFamily, int th
void SMESH_ActorDef::SetCellsFontProperties( SMESH::LabelFont theFamily, int theSize,
bool theBold, bool theItalic, bool theShadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b )
-{
+ double r, double g, double b )
+{
if(my3DActor) {
my3DActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
SetRepresentation( GetRepresentation() );
@@ -766,24 +766,24 @@ bool SMESH_ActorDef::GetFacesOriented()
return myIsFacesOriented;
}
-void SMESH_ActorDef::SetFacesOrientationColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b)
+void SMESH_ActorDef::SetFacesOrientationColor(double r,double g,double b)
{
my2DActor->SetFacesOrientationColor( r, g, b );
my3DActor->SetFacesOrientationColor( r, g, b );
}
-void SMESH_ActorDef::GetFacesOrientationColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b)
+void SMESH_ActorDef::GetFacesOrientationColor(double& r,double& g,double& b)
{
my3DActor->GetFacesOrientationColor( r, g, b );
}
-void SMESH_ActorDef::SetFacesOrientationScale(vtkFloatingPointType theScale)
+void SMESH_ActorDef::SetFacesOrientationScale(double theScale)
{
my2DActor->SetFacesOrientationScale( theScale );
my3DActor->SetFacesOrientationScale( theScale );
}
-vtkFloatingPointType SMESH_ActorDef::GetFacesOrientationScale()
+double SMESH_ActorDef::GetFacesOrientationScale()
{
return my3DActor->GetFacesOrientationScale();
}
@@ -1189,8 +1189,8 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
my2DExtActor->GetMapper()->SetLookupTable(myLookupTable);
my3DActor->GetMapper()->SetLookupTable(myLookupTable);
my3DExtActor->GetMapper()->SetLookupTable(myLookupTable);
-
- vtkFloatingPointType aFactor, aUnits;
+
+ double aFactor, aUnits;
my2DActor->GetPolygonOffsetParameters(aFactor,aUnits);
my2DActor->SetPolygonOffsetParameters(aFactor,aUnits*0.75);
my2DExtActor->SetPolygonOffsetParameters(aFactor,aUnits*0.5);
@@ -1233,7 +1233,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
}
-vtkFloatingPointType* SMESH_ActorDef::GetBounds(){
+double* SMESH_ActorDef::GetBounds(){
return myNodeActor->GetBounds();
}
@@ -1291,7 +1291,6 @@ vtkUnstructuredGrid* SMESH_ActorDef::GetUnstructuredGrid(){
bool SMESH_ActorDef::IsInfinitive(){
vtkDataSet *aDataSet = myPickableActor->GetUnstructuredGrid();
- aDataSet->Update();
myIsInfinite = aDataSet->GetNumberOfCells() == 0 ||
( aDataSet->GetNumberOfCells() == 1 &&
aDataSet->GetCell(0)->GetCellType() == VTK_VERTEX );
@@ -1306,11 +1305,11 @@ void SMESH_ActorDef::SetIsShrunkable(bool theShrunkable){
Modified();
}
-vtkFloatingPointType SMESH_ActorDef::GetShrinkFactor(){
+double SMESH_ActorDef::GetShrinkFactor(){
return myBaseActor->GetShrinkFactor();
}
-void SMESH_ActorDef::SetShrinkFactor(vtkFloatingPointType theValue){
+void SMESH_ActorDef::SetShrinkFactor(double theValue){
myBaseActor->SetShrinkFactor(theValue);
my1DActor->SetShrinkFactor(theValue);
@@ -1367,7 +1366,7 @@ int SMESH_ActorDef::GetNodeObjId(int theVtkID){
return myPickableActor->GetNodeObjId(theVtkID);
}
-vtkFloatingPointType* SMESH_ActorDef::GetNodeCoord(int theObjID){
+double* SMESH_ActorDef::GetNodeCoord(int theObjID){
return myPickableActor->GetNodeCoord(theObjID);
}
@@ -1916,15 +1915,15 @@ void SMESH_ActorDef::ReleaseGraphicsResources(vtkWindow *renWin){
}
-static void GetColor(vtkProperty *theProperty, vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
- vtkFloatingPointType* aColor = theProperty->GetColor();
+static void GetColor(vtkProperty *theProperty, double& r,double& g,double& b){
+ double* aColor = theProperty->GetColor();
r = aColor[0];
g = aColor[1];
b = aColor[2];
}
-void SMESH_ActorDef::SetOpacity(vtkFloatingPointType theValue){
+void SMESH_ActorDef::SetOpacity(double theValue){
mySurfaceProp->SetOpacity(theValue);
myBackSurfaceProp->SetOpacity(theValue);
myNormalVProp->SetOpacity(theValue);
@@ -1939,12 +1938,12 @@ void SMESH_ActorDef::SetOpacity(vtkFloatingPointType theValue){
}
-vtkFloatingPointType SMESH_ActorDef::GetOpacity(){
+double SMESH_ActorDef::GetOpacity(){
return mySurfaceProp->GetOpacity();
}
-void SMESH_ActorDef::SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta){
+void SMESH_ActorDef::SetSufaceColor(double r,double g,double b, int delta){
mySurfaceProp->SetColor(r,g,b);
my2DExtProp->SetColor(1.0-r,1.0-g,1.0-b);
if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) )
@@ -1957,12 +1956,12 @@ void SMESH_ActorDef::SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType
Modified();
}
-void SMESH_ActorDef::GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta){
+void SMESH_ActorDef::GetSufaceColor(double& r,double& g,double& b, int& delta){
::GetColor(mySurfaceProp,r,g,b);
delta = myDeltaBrightness;
}
-void SMESH_ActorDef::SetVolumeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta){
+void SMESH_ActorDef::SetVolumeColor(double r,double g,double b, int delta){
myNormalVProp->SetColor(r,g,b);
my3DExtProp->SetColor(1.0-r,1.0-g,1.0-b);
if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) )
@@ -1975,12 +1974,12 @@ void SMESH_ActorDef::SetVolumeColor(vtkFloatingPointType r,vtkFloatingPointType
Modified();
}
-void SMESH_ActorDef::GetVolumeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta){
+void SMESH_ActorDef::GetVolumeColor(double& r,double& g,double& b, int& delta){
::GetColor(myNormalVProp,r,g,b);
delta = myDeltaVBrightness;
}
-void SMESH_ActorDef::SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::SetEdgeColor(double r,double g,double b){
myEdgeProp->SetColor(r,g,b);
my1DProp->SetColor(r,g,b);
my1DExtProp->SetColor(1.0-r,1.0-g,1.0-b);
@@ -1990,21 +1989,21 @@ void SMESH_ActorDef::SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,
Modified();
}
-void SMESH_ActorDef::GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+void SMESH_ActorDef::GetEdgeColor(double& r,double& g,double& b){
::GetColor(myEdgeProp,r,g,b);
}
-void SMESH_ActorDef::SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::SetOutlineColor(double r,double g,double b){
myOutLineProp->SetColor(r,g,b);
Modified();
}
-void SMESH_ActorDef::GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+void SMESH_ActorDef::GetOutlineColor(double& r,double& g,double& b){
::GetColor(myOutLineProp,r,g,b);
}
-void SMESH_ActorDef::SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::SetNodeColor(double r,double g,double b){
myNodeProp->SetColor(r,g,b);
myNodeExtProp->SetColor(1.0-r,1.0-g,1.0-b);
if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) )
@@ -2013,11 +2012,11 @@ void SMESH_ActorDef::SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,
Modified();
}
-void SMESH_ActorDef::GetNodeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+void SMESH_ActorDef::GetNodeColor(double& r,double& g,double& b){
::GetColor(myNodeProp,r,g,b);
}
-void SMESH_ActorDef::Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::Set0DColor(double r,double g,double b){
my0DProp->SetColor(r,g,b);
if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) )
if( aGroupObj->GetElementType() == SMDSAbs_0DElement )
@@ -2025,11 +2024,11 @@ void SMESH_ActorDef::Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vt
Modified();
}
-void SMESH_ActorDef::Get0DColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+void SMESH_ActorDef::Get0DColor(double& r,double& g,double& b){
::GetColor(my0DProp,r,g,b);
}
-void SMESH_ActorDef::SetBallColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::SetBallColor(double r,double g,double b){
myBallProp->SetColor(r,g,b);
if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) )
if( aGroupObj->GetElementType() == SMDSAbs_Ball )
@@ -2037,37 +2036,37 @@ void SMESH_ActorDef::SetBallColor(vtkFloatingPointType r,vtkFloatingPointType g,
Modified();
}
-void SMESH_ActorDef::GetBallColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+void SMESH_ActorDef::GetBallColor(double& r,double& g,double& b){
::GetColor(myBallProp,r,g,b);
}
-void SMESH_ActorDef::SetHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::SetHighlightColor(double r,double g,double b){
myHighlightProp->SetColor(r,g,b);
myBallHighlightProp->SetColor(r,g,b);
Modified();
}
-void SMESH_ActorDef::GetHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+void SMESH_ActorDef::GetHighlightColor(double& r,double& g,double& b){
::GetColor(myHighlightProp,r,g,b);
}
-void SMESH_ActorDef::SetPreHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::SetPreHighlightColor(double r,double g,double b){
myPreselectProp->SetColor(r,g,b);
myBallPreselectProp->SetColor(r,g,b);
Modified();
}
-void SMESH_ActorDef::GetPreHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+void SMESH_ActorDef::GetPreHighlightColor(double& r,double& g,double& b){
::GetColor(myPreselectProp,r,g,b);
}
-vtkFloatingPointType SMESH_ActorDef::GetLineWidth(){
+double SMESH_ActorDef::GetLineWidth(){
return myEdgeProp->GetLineWidth();
}
-void SMESH_ActorDef::SetLineWidth(vtkFloatingPointType theVal){
+void SMESH_ActorDef::SetLineWidth(double theVal){
myEdgeProp->SetLineWidth(theVal);
my1DProp->SetLineWidth(theVal + aLineWidthInc);
@@ -2080,18 +2079,18 @@ void SMESH_ActorDef::SetLineWidth(vtkFloatingPointType theVal){
Modified();
}
-vtkFloatingPointType SMESH_ActorDef::GetOutlineWidth()
+double SMESH_ActorDef::GetOutlineWidth()
{
return myOutLineProp->GetLineWidth();
}
-void SMESH_ActorDef::SetOutlineWidth(vtkFloatingPointType theVal)
+void SMESH_ActorDef::SetOutlineWidth(double theVal)
{
myOutLineProp->SetLineWidth(theVal);
Modified();
}
-void SMESH_ActorDef::Set0DSize(vtkFloatingPointType theVal){
+void SMESH_ActorDef::Set0DSize(double theVal){
my0DProp->SetPointSize(theVal);
myHighlightProp->SetPointSize(theVal);
myPreselectProp->SetPointSize(theVal);
@@ -2106,11 +2105,11 @@ void SMESH_ActorDef::Set0DSize(vtkFloatingPointType theVal){
Modified();
}
-vtkFloatingPointType SMESH_ActorDef::Get0DSize(){
+double SMESH_ActorDef::Get0DSize(){
return my0DProp->GetPointSize();
}
-void SMESH_ActorDef::SetBallSize(vtkFloatingPointType theVal){
+void SMESH_ActorDef::SetBallSize(double theVal){
myBallProp->SetPointSize(theVal);
myBallHighlightProp->SetPointSize(theVal);
myBallPreselectProp->SetPointSize(theVal);
@@ -2124,7 +2123,7 @@ void SMESH_ActorDef::SetBallSize(vtkFloatingPointType theVal){
Modified();
}
-vtkFloatingPointType SMESH_ActorDef::GetBallSize(){
+double SMESH_ActorDef::GetBallSize(){
return myBallProp->GetPointSize();
}
@@ -2288,21 +2287,21 @@ void SMESH_ActorDef::UpdateScalarBar()
myScalarBarActor->SetOrientationToVertical();
- vtkFloatingPointType aXVal = horiz ? 0.20 : 0.01;
+ double aXVal = horiz ? 0.20 : 0.01;
if( mgr->hasValue( "SMESH", name + "x" ) )
aXVal = mgr->doubleValue( "SMESH", name + "x", aXVal );
- vtkFloatingPointType aYVal = horiz ? 0.01 : 0.1;
+ double aYVal = horiz ? 0.01 : 0.1;
if( mgr->hasValue( "SMESH", name + "y" ) )
aYVal = mgr->doubleValue( "SMESH", name + "y", aYVal );
myScalarBarActor->SetPosition( aXVal, aYVal );
- vtkFloatingPointType aWVal = horiz ? 0.60 : 0.10;
+ double aWVal = horiz ? 0.60 : 0.10;
if( mgr->hasValue( "SMESH", name + "width" ) )
aWVal = mgr->doubleValue( "SMESH", name + "width", aWVal );
myScalarBarActor->SetWidth( aWVal );
- vtkFloatingPointType aHVal = horiz ? 0.12 : 0.80;
+ double aHVal = horiz ? 0.12 : 0.80;
if( mgr->hasValue( "SMESH", name + "height" ) )
aHVal = mgr->doubleValue( "SMESH", name + "height", aHVal );
myScalarBarActor->SetHeight( aHVal );
diff --git a/src/OBJECT/SMESH_Actor.h b/src/OBJECT/SMESH_Actor.h
index bbd7ac965..18fcdcb44 100644
--- a/src/OBJECT/SMESH_Actor.h
+++ b/src/OBJECT/SMESH_Actor.h
@@ -62,44 +62,44 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
const char* theName,
int theIsClear);
- virtual void SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta ) = 0;
- virtual void GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta ) = 0;
+ virtual void SetSufaceColor(double r,double g,double b, int delta ) = 0;
+ virtual void GetSufaceColor(double& r,double& g,double& b, int& delta ) = 0;
- virtual void SetVolumeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta ) = 0;
- virtual void GetVolumeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta) = 0;
+ virtual void SetVolumeColor(double r,double g,double b, int delta ) = 0;
+ virtual void GetVolumeColor(double& r,double& g,double& b, int& delta) = 0;
- virtual void SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void SetEdgeColor(double r,double g,double b) = 0;
+ virtual void GetEdgeColor(double& r,double& g,double& b) = 0;
- virtual void SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void GetNodeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void SetNodeColor(double r,double g,double b) = 0;
+ virtual void GetNodeColor(double& r,double& g,double& b) = 0;
- virtual void SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void SetOutlineColor(double r,double g,double b) = 0;
+ virtual void GetOutlineColor(double& r,double& g,double& b) = 0;
- virtual void Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void Get0DColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void Set0DColor(double r,double g,double b) = 0;
+ virtual void Get0DColor(double& r,double& g,double& b) = 0;
- virtual void SetBallColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void GetBallColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void SetBallColor(double r,double g,double b) = 0;
+ virtual void GetBallColor(double& r,double& g,double& b) = 0;
- virtual void SetHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void GetHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void SetHighlightColor(double r,double g,double b) = 0;
+ virtual void GetHighlightColor(double& r,double& g,double& b) = 0;
- virtual void SetPreHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void GetPreHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void SetPreHighlightColor(double r,double g,double b) = 0;
+ virtual void GetPreHighlightColor(double& r,double& g,double& b) = 0;
- virtual vtkFloatingPointType GetLineWidth() = 0;
- virtual void SetLineWidth(vtkFloatingPointType theVal) = 0;
+ virtual double GetLineWidth() = 0;
+ virtual void SetLineWidth(double theVal) = 0;
- virtual vtkFloatingPointType GetOutlineWidth() = 0;
- virtual void SetOutlineWidth(vtkFloatingPointType theVal) = 0;
+ virtual double GetOutlineWidth() = 0;
+ virtual void SetOutlineWidth(double theVal) = 0;
- virtual void Set0DSize(vtkFloatingPointType size) = 0;
- virtual vtkFloatingPointType Get0DSize() = 0;
+ virtual void Set0DSize(double size) = 0;
+ virtual double Get0DSize() = 0;
- virtual void SetBallSize(vtkFloatingPointType size) = 0;
- virtual vtkFloatingPointType GetBallSize() = 0;
+ virtual void SetBallSize(double size) = 0;
+ virtual double GetBallSize() = 0;
enum EReperesent { ePoint, eEdge, eSurface};
@@ -118,7 +118,7 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
virtual vtkUnstructuredGrid* GetUnstructuredGrid() = 0;
- virtual void SetShrinkFactor(vtkFloatingPointType theValue) = 0;
+ virtual void SetShrinkFactor(double theValue) = 0;
virtual void SetPointsLabeled(bool theIsPointsLabeled) = 0;
virtual bool GetPointsLabeled() = 0;
@@ -129,11 +129,11 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
virtual void SetFacesOriented(bool theIsFacesOriented) = 0;
virtual bool GetFacesOriented() = 0;
- virtual void SetFacesOrientationColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0;
- virtual void GetFacesOrientationColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0;
+ virtual void SetFacesOrientationColor(double r,double g,double b) = 0;
+ virtual void GetFacesOrientationColor(double& r,double& g,double& b) = 0;
- virtual void SetFacesOrientationScale(vtkFloatingPointType theScale) = 0;
- virtual vtkFloatingPointType GetFacesOrientationScale() = 0;
+ virtual void SetFacesOrientationScale(double theScale) = 0;
+ virtual double GetFacesOrientationScale() = 0;
virtual void SetFacesOrientation3DVectors(bool theState) = 0;
virtual bool GetFacesOrientation3DVectors() = 0;
@@ -165,10 +165,10 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
virtual void SetPointsFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b ) = 0;
+ double r, double g, double b ) = 0;
virtual void SetCellsFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b ) = 0;
+ double r, double g, double b ) = 0;
#ifndef DISABLE_PLOT2DVIEWER
virtual SPlot2d_Histogram* GetPlot2Histogram() = 0;
diff --git a/src/OBJECT/SMESH_ActorDef.h b/src/OBJECT/SMESH_ActorDef.h
index 47dc703a0..ee715548c 100644
--- a/src/OBJECT/SMESH_ActorDef.h
+++ b/src/OBJECT/SMESH_ActorDef.h
@@ -100,51 +100,51 @@ class SMESH_ActorDef : public SMESH_Actor
virtual bool IsInfinitive();
- virtual void SetOpacity(vtkFloatingPointType theValue);
- virtual vtkFloatingPointType GetOpacity();
+ virtual void SetOpacity(double theValue);
+ virtual double GetOpacity();
- virtual void SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta );
- virtual void GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta);
+ virtual void SetSufaceColor(double r,double g,double b, int delta );
+ virtual void GetSufaceColor(double& r,double& g,double& b, int& delta);
- virtual void SetVolumeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta );
- virtual void GetVolumeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta);
+ virtual void SetVolumeColor(double r,double g,double b, int delta );
+ virtual void GetVolumeColor(double& r,double& g,double& b, int& delta);
- virtual void SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void SetEdgeColor(double r,double g,double b);
+ virtual void GetEdgeColor(double& r,double& g,double& b);
- virtual void SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void SetOutlineColor(double r,double g,double b);
+ virtual void GetOutlineColor(double& r,double& g,double& b);
- virtual void SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void GetNodeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void SetNodeColor(double r,double g,double b);
+ virtual void GetNodeColor(double& r,double& g,double& b);
- virtual void Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void Get0DColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void Set0DColor(double r,double g,double b);
+ virtual void Get0DColor(double& r,double& g,double& b);
- virtual void SetBallColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void GetBallColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void SetBallColor(double r,double g,double b);
+ virtual void GetBallColor(double& r,double& g,double& b);
- virtual void SetHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void GetHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void SetHighlightColor(double r,double g,double b);
+ virtual void GetHighlightColor(double& r,double& g,double& b);
- virtual void SetPreHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void GetPreHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void SetPreHighlightColor(double r,double g,double b);
+ virtual void GetPreHighlightColor(double& r,double& g,double& b);
- virtual vtkFloatingPointType GetLineWidth();
- virtual void SetLineWidth(vtkFloatingPointType theVal);
+ virtual double GetLineWidth();
+ virtual void SetLineWidth(double theVal);
- virtual vtkFloatingPointType GetOutlineWidth();
- virtual void SetOutlineWidth(vtkFloatingPointType theVal);
+ virtual double GetOutlineWidth();
+ virtual void SetOutlineWidth(double theVal);
- virtual void Set0DSize(vtkFloatingPointType size);
- virtual vtkFloatingPointType Get0DSize();
+ virtual void Set0DSize(double size);
+ virtual double Get0DSize();
- virtual void SetBallSize(vtkFloatingPointType size);
- virtual vtkFloatingPointType GetBallSize();
+ virtual void SetBallSize(double size);
+ virtual double GetBallSize();
virtual int GetNodeObjId(int theVtkID);
- virtual vtkFloatingPointType* GetNodeCoord(int theObjID);
+ virtual double* GetNodeCoord(int theObjID);
virtual int GetElemObjId(int theVtkID);
virtual vtkCell* GetElemCell(int theObjID);
@@ -162,15 +162,15 @@ class SMESH_ActorDef : public SMESH_Actor
virtual void SetPointRepresentation(bool theIsPointsVisible);
virtual bool GetPointRepresentation();
- virtual vtkFloatingPointType* GetBounds();
+ virtual double* GetBounds();
virtual void SetTransform(VTKViewer_Transform* theTransform);
virtual vtkUnstructuredGrid* GetUnstructuredGrid();
virtual vtkDataSet* GetInput();
virtual vtkMapper* GetMapper();
- virtual vtkFloatingPointType GetShrinkFactor();
- virtual void SetShrinkFactor(vtkFloatingPointType theValue);
+ virtual double GetShrinkFactor();
+ virtual void SetShrinkFactor(double theValue);
virtual bool IsShrunkable() { return myIsShrinkable;}
virtual bool IsShrunk() { return myIsShrunk;}
@@ -182,10 +182,10 @@ class SMESH_ActorDef : public SMESH_Actor
virtual void SetPointsFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b );
+ double r, double g, double b );
virtual void SetCellsFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b );
+ double r, double g, double b );
virtual void SetCellsLabeled(bool theIsCellsLabeled);
virtual bool GetCellsLabeled();
@@ -193,11 +193,11 @@ class SMESH_ActorDef : public SMESH_Actor
virtual void SetFacesOriented(bool theIsFacesOriented);
virtual bool GetFacesOriented();
- virtual void SetFacesOrientationColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
- virtual void GetFacesOrientationColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
+ virtual void SetFacesOrientationColor(double r,double g,double b);
+ virtual void GetFacesOrientationColor(double& r,double& g,double& b);
- virtual void SetFacesOrientationScale(vtkFloatingPointType theScale);
- virtual vtkFloatingPointType GetFacesOrientationScale();
+ virtual void SetFacesOrientationScale(double theScale);
+ virtual double GetFacesOrientationScale();
virtual void SetFacesOrientation3DVectors(bool theState);
virtual bool GetFacesOrientation3DVectors();
diff --git a/src/OBJECT/SMESH_ActorUtils.cxx b/src/OBJECT/SMESH_ActorUtils.cxx
index c756156e0..9ce8b0567 100644
--- a/src/OBJECT/SMESH_ActorUtils.cxx
+++ b/src/OBJECT/SMESH_ActorUtils.cxx
@@ -55,12 +55,12 @@
namespace SMESH
{
- vtkFloatingPointType
+ double
GetFloat( const QString& theValue,
- vtkFloatingPointType theDefault )
+ double theDefault )
{
int pos = theValue.indexOf( ":" );
- vtkFloatingPointType val = theDefault;
+ double val = theDefault;
if( pos>=0 )
{
QString name = theValue.right( theValue.length()-pos-1 ),
@@ -71,15 +71,15 @@ namespace SMESH
return val;
}
- vtkFloatingPointType
+ double
GetFloat( const QString& theValue,
const QString& theSection,
- vtkFloatingPointType theDefault )
+ double theDefault )
{
- vtkFloatingPointType val = theDefault;
+ double val = theDefault;
SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
if( mgr )
- val = (vtkFloatingPointType) mgr->doubleValue( theSection, theValue, theDefault );
+ val = (double) mgr->doubleValue( theSection, theValue, theDefault );
return val;
}
@@ -90,7 +90,7 @@ namespace SMESH
{
vtkXMLUnstructuredGridWriter* aWriter = vtkXMLUnstructuredGridWriter::New();
aWriter->SetFileName(theFileName);
- aWriter->SetInput(theGrid);
+ aWriter->SetInputData(theGrid);
aWriter->SetDataModeToAscii();
if(theGrid->GetNumberOfCells()){
aWriter->Write();
@@ -129,9 +129,9 @@ namespace SMESH
void
GetColor( const QString& theSect,
const QString& theName,
- vtkFloatingPointType& r,
- vtkFloatingPointType& g,
- vtkFloatingPointType& b,
+ double& r,
+ double& g,
+ double& b,
const QColor& def )
{
int ir( 0 ), ig( 0 ), ib( 0 );
diff --git a/src/OBJECT/SMESH_ActorUtils.h b/src/OBJECT/SMESH_ActorUtils.h
index ce189fbe8..9a6200906 100644
--- a/src/OBJECT/SMESH_ActorUtils.h
+++ b/src/OBJECT/SMESH_ActorUtils.h
@@ -41,15 +41,15 @@ namespace SMESH
};
SMESHOBJECT_EXPORT
- vtkFloatingPointType
+ double
GetFloat( const QString& theValue,
- vtkFloatingPointType theDefault = 0 );
+ double theDefault = 0 );
SMESHOBJECT_EXPORT
- vtkFloatingPointType
+ double
GetFloat( const QString& theName,
const QString& theSection,
- vtkFloatingPointType theDefault = 0 );
+ double theDefault = 0 );
SMESHOBJECT_EXPORT
QColor
@@ -70,9 +70,9 @@ SMESHOBJECT_EXPORT
void
GetColor( const QString& theSect,
const QString& theName,
- vtkFloatingPointType&,
- vtkFloatingPointType&,
- vtkFloatingPointType&,
+ double&,
+ double&,
+ double&,
const QColor& = QColor() );
SMESHOBJECT_EXPORT
diff --git a/src/OBJECT/SMESH_CellLabelActor.cxx b/src/OBJECT/SMESH_CellLabelActor.cxx
index 297c37da9..9b076d54d 100644
--- a/src/OBJECT/SMESH_CellLabelActor.cxx
+++ b/src/OBJECT/SMESH_CellLabelActor.cxx
@@ -52,19 +52,19 @@ SMESH_CellLabelActor::SMESH_CellLabelActor() {
myCellsNumDataSet = vtkUnstructuredGrid::New();
myCellCenters = VTKViewer_CellCenters::New();
- myCellCenters->SetInput(myCellsNumDataSet);
+ myCellCenters->SetInputData(myCellsNumDataSet);
myClsMaskPoints = vtkMaskPoints::New();
- myClsMaskPoints->SetInput(myCellCenters->GetOutput());
+ myClsMaskPoints->SetInputConnection(myCellCenters->GetOutputPort());
myClsMaskPoints->SetOnRatio(1);
myClsSelectVisiblePoints = vtkSelectVisiblePoints::New();
- myClsSelectVisiblePoints->SetInput(myClsMaskPoints->GetOutput());
+ myClsSelectVisiblePoints->SetInputConnection(myClsMaskPoints->GetOutputPort());
myClsSelectVisiblePoints->SelectInvisibleOff();
myClsSelectVisiblePoints->SetTolerance(0.1);
myClsLabeledDataMapper = vtkLabeledDataMapper::New();
- myClsLabeledDataMapper->SetInput(myClsSelectVisiblePoints->GetOutput());
+ myClsLabeledDataMapper->SetInputConnection(myClsSelectVisiblePoints->GetOutputPort());
myClsLabeledDataMapper->SetLabelFormat("%d");
myClsLabeledDataMapper->SetLabelModeToLabelScalars();
@@ -120,7 +120,7 @@ SMESH_CellLabelActor::~SMESH_CellLabelActor() {
void SMESH_CellLabelActor::SetFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b )
+ double r, double g, double b )
{
switch ( family ) {
case SMESH::FntArial:
@@ -156,7 +156,7 @@ void SMESH_CellLabelActor::SetCellsLabeled(bool theIsCellsLabeled) {
anArray->SetValue(anId,aSMDSId);
}
aDataSet->GetCellData()->SetScalars(anArray);
- myCellCenters->SetInput(aDataSet);
+ myCellCenters->SetInputData(aDataSet);
myCellsLabels->SetVisibility(GetVisibility());
}else{
myCellsLabels->SetVisibility(false);
diff --git a/src/OBJECT/SMESH_CellLabelActor.h b/src/OBJECT/SMESH_CellLabelActor.h
index f9a6a239d..83b8b6386 100644
--- a/src/OBJECT/SMESH_CellLabelActor.h
+++ b/src/OBJECT/SMESH_CellLabelActor.h
@@ -62,7 +62,7 @@ public:
virtual void SetFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b );
+ double r, double g, double b );
void UpdateLabels();
diff --git a/src/OBJECT/SMESH_DeviceActor.cxx b/src/OBJECT/SMESH_DeviceActor.cxx
index c82bbf305..dc878600a 100644
--- a/src/OBJECT/SMESH_DeviceActor.cxx
+++ b/src/OBJECT/SMESH_DeviceActor.cxx
@@ -119,13 +119,13 @@ SMESH_DeviceActor
// Orientation of faces
myIsFacesOriented = false;
- vtkFloatingPointType anRGB[3] = { 1, 1, 1 };
+ double anRGB[3] = { 1, 1, 1 };
SMESH::GetColor( "SMESH", "orientation_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 255, 255 ) );
myFaceOrientationFilter = SMESH_FaceOrientationFilter::New();
myFaceOrientationDataMapper = vtkPolyDataMapper::New();
- myFaceOrientationDataMapper->SetInput(myFaceOrientationFilter->GetOutput());
+ myFaceOrientationDataMapper->SetInputConnection(myFaceOrientationFilter->GetOutputPort());
myFaceOrientation = vtkActor::New();
myFaceOrientation->SetMapper(myFaceOrientationDataMapper);
@@ -208,9 +208,9 @@ SMESH_DeviceActor
{
int anId = 0;
if(theIsImplicitFunctionUsed)
- myPassFilter[ anId ]->SetInput( myExtractGeometry->GetOutput() );
+ myPassFilter[ anId ]->SetInputConnection( myExtractGeometry->GetOutputPort() );
else
- myPassFilter[ anId ]->SetInput( myMergeFilter->GetOutput() );
+ myPassFilter[ anId ]->SetInputConnection( myMergeFilter->GetOutputPort() );
myIsImplicitFunctionUsed = theIsImplicitFunctionUsed;
SetStoreClippingMapping(myStoreClippingMapping);
@@ -225,32 +225,32 @@ SMESH_DeviceActor
//myIsShrinkable = theGrid->GetNumberOfCells() > 10;
myIsShrinkable = true;
- myExtractUnstructuredGrid->SetInput(theGrid);
+ myExtractUnstructuredGrid->SetInputData(theGrid);
- myMergeFilter->SetGeometry(myExtractUnstructuredGrid->GetOutput());
+ myMergeFilter->SetGeometryConnection(myExtractUnstructuredGrid->GetOutputPort());
- myExtractGeometry->SetInput(myMergeFilter->GetOutput());
+ myExtractGeometry->SetInputConnection(myMergeFilter->GetOutputPort());
int anId = 0;
SetImplicitFunctionUsed(myIsImplicitFunctionUsed);
- myPassFilter[ anId + 1]->SetInput( myPassFilter[ anId ]->GetOutput() );
+ myPassFilter[ anId + 1]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
anId++; // 1
- myTransformFilter->SetInput( myPassFilter[ anId ]->GetOutput() );
+ myTransformFilter->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
anId++; // 2
- myPassFilter[ anId ]->SetInput( myTransformFilter->GetOutput() );
- myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() );
+ myPassFilter[ anId ]->SetInputConnection( myTransformFilter->GetOutputPort() );
+ myPassFilter[ anId + 1 ]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
anId++; // 3
- myGeomFilter->SetInput( myPassFilter[ anId ]->GetOutput() );
+ myGeomFilter->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
anId++; // 4
- myPassFilter[ anId ]->SetInput( myGeomFilter->GetOutput() );
- myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() );
+ myPassFilter[ anId ]->SetInputConnection( myGeomFilter->GetOutputPort() );
+ myPassFilter[ anId + 1 ]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
anId++; // 5
- myMapper->SetInput( myPassFilter[ anId ]->GetPolyDataOutput() );
+ myMapper->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() );
vtkLODActor::SetMapper( myMapper );
Modified();
@@ -322,7 +322,7 @@ SMESH_DeviceActor
theLookupTable->SetNumberOfTableValues(theScalarBarActor->GetMaximumNumberOfColors());
theLookupTable->Build();
- myMergeFilter->SetScalars(aDataSet);
+ myMergeFilter->SetScalarsData(aDataSet);
aDataSet->Delete();
}
GetMapper()->SetScalarVisibility(anIsInitialized);
@@ -402,7 +402,7 @@ SMESH_DeviceActor
theLookupTable->SetRange(aScalars->GetRange());
theLookupTable->Build();
- myMergeFilter->SetScalars(aDataSet);
+ myMergeFilter->SetScalarsData(aDataSet);
aDataSet->Delete();
}
else if (MultiConnection2D* aMultiConnection2D = dynamic_cast(theFunctor.get())){
@@ -462,7 +462,7 @@ SMESH_DeviceActor
theLookupTable->SetRange(aScalars->GetRange());
theLookupTable->Build();
- myMergeFilter->SetScalars(aDataSet);
+ myMergeFilter->SetScalarsData(aDataSet);
aDataSet->Delete();
}
}
@@ -600,10 +600,10 @@ SMESH_DeviceActor
::SetShrink()
{
if ( !myIsShrinkable ) return;
- if ( vtkDataSet* aDataSet = myPassFilter[ 0 ]->GetOutput() )
+ if ( vtkAlgorithmOutput* aDataSet = myPassFilter[ 0 ]->GetOutputPort() )
{
- myShrinkFilter->SetInput( aDataSet );
- myPassFilter[ 1 ]->SetInput( myShrinkFilter->GetOutput() );
+ myShrinkFilter->SetInputConnection( aDataSet );
+ myPassFilter[ 1 ]->SetInputConnection( myShrinkFilter->GetOutputPort() );
myIsShrunk = true;
}
}
@@ -613,9 +613,9 @@ SMESH_DeviceActor
::UnShrink()
{
if ( !myIsShrunk ) return;
- if ( vtkDataSet* aDataSet = myPassFilter[ 0 ]->GetOutput() )
+ if ( vtkAlgorithmOutput* aDataSet = myPassFilter[ 0 ]->GetOutputPort() )
{
- myPassFilter[ 1 ]->SetInput( aDataSet );
+ myPassFilter[ 1 ]->SetInputConnection( aDataSet );
myPassFilter[ 1 ]->Modified();
myIsShrunk = false;
Modified();
@@ -627,37 +627,37 @@ void
SMESH_DeviceActor
::SetFacesOriented(bool theIsFacesOriented)
{
- if ( vtkDataSet* aDataSet = myTransformFilter->GetOutput() )
+ if ( vtkAlgorithmOutput* aDataSet = myTransformFilter->GetOutputPort() )
{
myIsFacesOriented = theIsFacesOriented;
if( theIsFacesOriented )
- myFaceOrientationFilter->SetInput( aDataSet );
+ myFaceOrientationFilter->SetInputConnection( aDataSet );
UpdateFaceOrientation();
}
}
void
SMESH_DeviceActor
-::SetFacesOrientationColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b)
+::SetFacesOrientationColor(double r,double g,double b)
{
myFaceOrientation->GetProperty()->SetColor( r, g, b );
}
void
SMESH_DeviceActor
-::GetFacesOrientationColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b)
+::GetFacesOrientationColor(double& r,double& g,double& b)
{
myFaceOrientation->GetProperty()->GetColor( r, g, b );
}
void
SMESH_DeviceActor
-::SetFacesOrientationScale(vtkFloatingPointType theScale)
+::SetFacesOrientationScale(double theScale)
{
myFaceOrientationFilter->SetOrientationScale( theScale );
}
-vtkFloatingPointType
+double
SMESH_DeviceActor
::GetFacesOrientationScale()
{
@@ -780,13 +780,13 @@ SMESH_DeviceActor
return aRetID;
}
-vtkFloatingPointType*
+double*
SMESH_DeviceActor
::GetNodeCoord(int theObjID)
{
vtkDataSet* aDataSet = myMergeFilter->GetOutput();
vtkIdType anID = myVisualObj->GetNodeVTKId(theObjID);
- vtkFloatingPointType* aCoord = (anID >=0) ? aDataSet->GetPoint(anID) : NULL;
+ double* aCoord = (anID >=0) ? aDataSet->GetPoint(anID) : NULL;
if(MYDEBUG) MESSAGE("GetNodeCoord - theObjID = "<SetInput(myFacePolyData);
+ myFaceCenters->SetInputData(myFacePolyData);
myFaceMaskPoints = vtkMaskPoints::New();
- myFaceMaskPoints->SetInput(myFaceCenters->GetOutput());
+ myFaceMaskPoints->SetInputConnection(myFaceCenters->GetOutputPort());
myFaceMaskPoints->SetOnRatio(1);
myGlyphSource = vtkGlyphSource2D::New();
@@ -73,11 +72,14 @@ SMESH_FaceOrientationFilter::SMESH_FaceOrientationFilter()
myGlyphSource->SetCenter(0.5, 0.0, 0.0);
myBaseGlyph = vtkGlyph3D::New();
- myBaseGlyph->SetInput(myFaceMaskPoints->GetOutput());
+ myBaseGlyph->SetInputConnection(myFaceMaskPoints->GetOutputPort());
myBaseGlyph->SetVectorModeToUseVector();
myBaseGlyph->SetScaleModeToDataScalingOff();
myBaseGlyph->SetColorModeToColorByScalar();
- myBaseGlyph->SetSource(my3dVectors ? myArrowPolyData : myGlyphSource->GetOutput());
+ if( my3dVectors )
+ myBaseGlyph->SetSourceData(myArrowPolyData);
+ else
+ myBaseGlyph->SetSourceConnection(myGlyphSource->GetOutputPort());
}
SMESH_FaceOrientationFilter::~SMESH_FaceOrientationFilter()
@@ -90,7 +92,7 @@ SMESH_FaceOrientationFilter::~SMESH_FaceOrientationFilter()
myBaseGlyph->Delete();
}
-void SMESH_FaceOrientationFilter::SetOrientationScale( vtkFloatingPointType theScale )
+void SMESH_FaceOrientationFilter::SetOrientationScale( double theScale )
{
myOrientationScale = theScale;
Modified();
@@ -99,7 +101,10 @@ void SMESH_FaceOrientationFilter::SetOrientationScale( vtkFloatingPointType theS
void SMESH_FaceOrientationFilter::Set3dVectors( bool theState )
{
my3dVectors = theState;
- myBaseGlyph->SetSource(my3dVectors ? myArrowPolyData : myGlyphSource->GetOutput());
+ if( my3dVectors )
+ myBaseGlyph->SetSourceData(myArrowPolyData);
+ else
+ myBaseGlyph->SetSourceConnection(myGlyphSource->GetOutputPort());
Modified();
}
diff --git a/src/OBJECT/SMESH_FaceOrientationFilter.h b/src/OBJECT/SMESH_FaceOrientationFilter.h
index dcd4c33d5..aed9866ae 100644
--- a/src/OBJECT/SMESH_FaceOrientationFilter.h
+++ b/src/OBJECT/SMESH_FaceOrientationFilter.h
@@ -33,13 +33,13 @@ class VTKViewer_CellCenters;
class SMESHOBJECT_EXPORT SMESH_FaceOrientationFilter : public vtkPolyDataAlgorithm
{
public:
- vtkTypeRevisionMacro( SMESH_FaceOrientationFilter, vtkPolyDataAlgorithm );
+ vtkTypeMacro( SMESH_FaceOrientationFilter, vtkPolyDataAlgorithm );
/*!Create a new SMESH_FaceOrientationFilter.*/
static SMESH_FaceOrientationFilter *New();
- void SetOrientationScale( vtkFloatingPointType );
- vtkFloatingPointType GetOrientationScale() const { return myOrientationScale; }
+ void SetOrientationScale( double );
+ double GetOrientationScale() const { return myOrientationScale; }
void Set3dVectors( bool );
bool Get3dVectors() const { return my3dVectors; }
@@ -61,7 +61,7 @@ private:
private:
bool my3dVectors;
- vtkFloatingPointType myOrientationScale;
+ double myOrientationScale;
vtkPolyData* myArrowPolyData;
vtkPolyData* myFacePolyData;
VTKViewer_CellCenters* myFaceCenters;
diff --git a/src/OBJECT/SMESH_NodeLabelActor.cxx b/src/OBJECT/SMESH_NodeLabelActor.cxx
index b3a8d3d0f..039456b01 100644
--- a/src/OBJECT/SMESH_NodeLabelActor.cxx
+++ b/src/OBJECT/SMESH_NodeLabelActor.cxx
@@ -50,16 +50,16 @@ SMESH_NodeLabelActor::SMESH_NodeLabelActor() {
myPointsNumDataSet = vtkUnstructuredGrid::New();
myPtsMaskPoints = vtkMaskPoints::New();
- myPtsMaskPoints->SetInput(myPointsNumDataSet);
+ myPtsMaskPoints->SetInputData(myPointsNumDataSet);
myPtsMaskPoints->SetOnRatio(1);
myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
- myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
+ myPtsSelectVisiblePoints->SetInputConnection(myPtsMaskPoints->GetOutputPort());
myPtsSelectVisiblePoints->SelectInvisibleOff();
myPtsSelectVisiblePoints->SetTolerance(0.1);
myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
- myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
+ myPtsLabeledDataMapper->SetInputConnection(myPtsSelectVisiblePoints->GetOutputPort());
myPtsLabeledDataMapper->SetLabelFormat("%d");
myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
@@ -112,7 +112,7 @@ SMESH_NodeLabelActor::~SMESH_NodeLabelActor() {
void SMESH_NodeLabelActor::SetFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b )
+ double r, double g, double b )
{
switch ( family ) {
case SMESH::FntArial:
@@ -156,7 +156,7 @@ void SMESH_NodeLabelActor::SetPointsLabeled(bool theIsPointsLabeled) {
}
aDataSet->GetPointData()->SetScalars( anArray );
- myPtsMaskPoints->SetInput( aDataSet );
+ myPtsMaskPoints->SetInputData( aDataSet );
myPointLabels->SetVisibility( GetVisibility() );
anArray->Delete();
}
diff --git a/src/OBJECT/SMESH_NodeLabelActor.h b/src/OBJECT/SMESH_NodeLabelActor.h
index 03de78f3a..601abb0e7 100644
--- a/src/OBJECT/SMESH_NodeLabelActor.h
+++ b/src/OBJECT/SMESH_NodeLabelActor.h
@@ -59,7 +59,7 @@ public:
virtual void SetFontProperties( SMESH::LabelFont family, int size,
bool bold, bool italic, bool shadow,
- vtkFloatingPointType r, vtkFloatingPointType g, vtkFloatingPointType b );
+ double r, double g, double b );
void UpdateLabels();
diff --git a/src/OBJECT/SMESH_ScalarBarActor.cxx b/src/OBJECT/SMESH_ScalarBarActor.cxx
index a30571218..19d46896b 100644
--- a/src/OBJECT/SMESH_ScalarBarActor.cxx
+++ b/src/OBJECT/SMESH_ScalarBarActor.cxx
@@ -88,7 +88,7 @@ SMESH_ScalarBarActor::SMESH_ScalarBarActor() {
this->ScalarBar = vtkPolyData::New();
this->ScalarBarMapper = vtkPolyDataMapper2D::New();
- this->ScalarBarMapper->SetInput(this->ScalarBar);
+ this->ScalarBarMapper->SetInputData(this->ScalarBar);
this->ScalarBarActor = vtkActor2D::New();
this->ScalarBarActor->SetMapper(this->ScalarBarMapper);
this->ScalarBarActor->GetPositionCoordinate()->
@@ -103,7 +103,7 @@ SMESH_ScalarBarActor::SMESH_ScalarBarActor() {
// Customization of the vtkScalarBarActor to show distribution histogram.
myDistribution = vtkPolyData::New();
myDistributionMapper = vtkPolyDataMapper2D::New();
- myDistributionMapper->SetInput(this->myDistribution);
+ myDistributionMapper->SetInputData(this->myDistribution);
myDistributionActor = vtkActor2D::New();
myDistributionActor->SetMapper(this->myDistributionMapper);
diff --git a/src/SMDS/SMDS_MeshInfo.hxx b/src/SMDS/SMDS_MeshInfo.hxx
index 026590a2e..07c7dc98f 100644
--- a/src/SMDS/SMDS_MeshInfo.hxx
+++ b/src/SMDS/SMDS_MeshInfo.hxx
@@ -39,8 +39,12 @@ public:
inline SMDS_MeshInfo& operator=(const SMDS_MeshInfo& other);
inline void Clear();
- inline int NbElements(SMDSAbs_ElementType type=SMDSAbs_All) const;
+ inline int NbElements(SMDSAbs_ElementType type=SMDSAbs_All) const;
+ inline int NbElements(SMDSAbs_EntityType type) const { return NbEntities(type); }
+ inline int NbElements(SMDSAbs_GeometryType type) const { return NbElementsOfGeom(type); }
+
inline int NbEntities(SMDSAbs_EntityType type) const;
+ inline int NbElementsOfGeom(SMDSAbs_GeometryType geom) const;
int NbNodes() const { return myNbNodes; }
int Nb0DElements() const { return myNb0DElements; }
@@ -230,47 +234,47 @@ inline void // RemoveVolume
SMDS_MeshInfo::RemoveVolume(const SMDS_MeshElement* el)
{ if ( el->IsPoly() ) --myNbPolyhedrons; else remove( el ); }
-inline int // NbEdges
+inline int // NbEdges
SMDS_MeshInfo::NbEdges (SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbEdges+myNbQuadEdges : order == ORDER_LINEAR ? myNbEdges : myNbQuadEdges; }
-inline int // NbFaces
+inline int // NbFaces
SMDS_MeshInfo::NbFaces (SMDSAbs_ElementOrder order) const
{ return NbTriangles(order)+NbQuadrangles(order)+(order == ORDER_QUADRATIC ? 0 : myNbPolygons); }
-inline int // NbTriangles
+inline int // NbTriangles
SMDS_MeshInfo::NbTriangles (SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbTriangles+myNbQuadTriangles : order == ORDER_LINEAR ? myNbTriangles : myNbQuadTriangles; }
-inline int // NbQuadrangles
+inline int // NbQuadrangles
SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles+myNbBiQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles+myNbBiQuadQuadrangles; }
-inline int // NbVolumes
+inline int // NbVolumes
SMDS_MeshInfo::NbVolumes (SMDSAbs_ElementOrder order) const
{ return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + NbHexPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); }
-inline int // NbTetras
+inline int // NbTetras
SMDS_MeshInfo::NbTetras (SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbTetras+myNbQuadTetras : order == ORDER_LINEAR ? myNbTetras : myNbQuadTetras; }
-inline int // NbHexas
+inline int // NbHexas
SMDS_MeshInfo::NbHexas (SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbHexas+myNbQuadHexas+myNbTriQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas+myNbTriQuadHexas; }
-inline int // NbPyramids
+inline int // NbPyramids
SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbPyramids+myNbQuadPyramids : order == ORDER_LINEAR ? myNbPyramids : myNbQuadPyramids; }
-inline int // NbPrisms
+inline int // NbPrisms
SMDS_MeshInfo::NbPrisms (SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; }
-inline int // NbHexPrisms
+inline int // NbHexPrisms
SMDS_MeshInfo::NbHexPrisms (SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbHexPrism : order == ORDER_LINEAR ? myNbHexPrism : 0; }
-inline int // NbElements
+inline int // NbElements
SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const
{
int nb = 0;
@@ -305,7 +309,7 @@ SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const
return nb;
}
-int // NbEntities
+inline int // NbEntities
SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const
{
switch (type) {
@@ -338,7 +342,44 @@ SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const
return 0;
}
-void // set
+inline int // NbElementsOfGeom
+SMDS_MeshInfo::NbElementsOfGeom(SMDSAbs_GeometryType geom) const
+{
+ switch ( geom ) {
+ // 0D:
+ case SMDSGeom_POINT: return myNb0DElements;
+ // 1D:
+ case SMDSGeom_EDGE: return (myNbEdges +
+ myNbQuadEdges);
+ // 2D:
+ case SMDSGeom_TRIANGLE: return (myNbTriangles +
+ myNbQuadTriangles);
+ case SMDSGeom_QUADRANGLE: return (myNbQuadrangles +
+ myNbQuadQuadrangles +
+ myNbBiQuadQuadrangles );
+ case SMDSGeom_POLYGON: return myNbPolygons;
+ // 3D:
+ case SMDSGeom_TETRA: return (myNbTetras +
+ myNbQuadTetras);
+ case SMDSGeom_PYRAMID: return (myNbPyramids +
+ myNbQuadPyramids);
+ case SMDSGeom_HEXA: return (myNbHexas +
+ myNbQuadHexas +
+ myNbTriQuadHexas);
+ case SMDSGeom_PENTA: return (myNbPrisms +
+ myNbQuadPrisms);
+ case SMDSGeom_HEXAGONAL_PRISM: return myNbHexPrism;
+ case SMDSGeom_POLYHEDRA: return myNbPolyhedrons;
+ // Discrete:
+ case SMDSGeom_BALL: return myNbBalls;
+ //
+ case SMDSGeom_NONE:
+ default:;
+ }
+ return 0;
+}
+
+inline void // setNb
SMDS_MeshInfo::setNb(const SMDSAbs_EntityType geomType, const int nb)
{
switch (geomType) {
diff --git a/src/SMDS/SMDS_UnstructuredGrid.cxx b/src/SMDS/SMDS_UnstructuredGrid.cxx
index 5a0578996..d3ea0b620 100644
--- a/src/SMDS/SMDS_UnstructuredGrid.cxx
+++ b/src/SMDS/SMDS_UnstructuredGrid.cxx
@@ -87,7 +87,8 @@ unsigned long SMDS_UnstructuredGrid::GetMTime()
MESSAGE("vtkUnstructuredGrid::GetMTime: " << mtime);
return mtime;
}
-
+// OUV_PORTING_VTK6: seems to be useless
+/*
void SMDS_UnstructuredGrid::Update()
{
MESSAGE("SMDS_UnstructuredGrid::Update");
@@ -99,7 +100,7 @@ void SMDS_UnstructuredGrid::UpdateInformation()
MESSAGE("SMDS_UnstructuredGrid::UpdateInformation");
return vtkUnstructuredGrid::UpdateInformation();
}
-
+*/
vtkPoints* SMDS_UnstructuredGrid::GetPoints()
{
// TODO erreur incomprehensible de la macro vtk GetPoints apparue avec la version paraview de fin aout 2010
diff --git a/src/SMDS/SMDS_UnstructuredGrid.hxx b/src/SMDS/SMDS_UnstructuredGrid.hxx
index 4cd1dae37..4292dfd8d 100644
--- a/src/SMDS/SMDS_UnstructuredGrid.hxx
+++ b/src/SMDS/SMDS_UnstructuredGrid.hxx
@@ -70,8 +70,9 @@ public:
std::vector& idCellsOldToNew,
int newCellSize);
virtual unsigned long GetMTime();
- virtual void Update();
- virtual void UpdateInformation();
+ // OUV_PORTING_VTK6: seems to be useless
+ //virtual void Update();
+ //virtual void UpdateInformation();
virtual vtkPoints *GetPoints();
//#ifdef VTK_HAVE_POLYHEDRON
diff --git a/src/SMDS/SMDS_VolumeTool.cxx b/src/SMDS/SMDS_VolumeTool.cxx
index 2c7c401cb..a2a8d2b11 100644
--- a/src/SMDS/SMDS_VolumeTool.cxx
+++ b/src/SMDS/SMDS_VolumeTool.cxx
@@ -292,27 +292,27 @@ static int QuadPenta_RE [5][9] = { // REVERSED -> EXTERNAL
static int QuadPenta_nbN [] = { 6, 6, 8, 8, 8 };
/*
-// 13
-// N5+-----+-----+N6
-// /| /|
-// 12+ | 14+ |
-// / | / |
-// N4+-----+-----+N7 | QUADRATIC
-// | | 15 | | HEXAHEDRON
-// | | | |
-// | 17+ | +18
-// | | | |
-// | | | |
-// | | | |
-// 16+ | +19 |
-// | | | |
-// | | 9 | |
-// | N1+-----+-|---+N2
-// | / | /
-// | +8 | +10
-// |/ |/
-// N0+-----+-----+N3
-// 11
+// 13
+// N5+-----+-----+N6 +-----+-----+
+// /| /| /| /|
+// 12+ | 14+ | + | +25 + |
+// / | / | / | / |
+// N4+-----+-----+N7 | QUADRATIC +-----+-----+ | Central nodes
+// | | 15 | | HEXAHEDRON | | | | of tri-quadratic
+// | | | | | | | | HEXAHEDRON
+// | 17+ | +18 | + 22+ | +
+// | | | | |21 | | |
+// | | | | | + | 26+ | + |
+// | | | | | | |23 |
+// 16+ | +19 | + | +24 + |
+// | | | | | | | |
+// | | 9 | | | | | |
+// | N1+-----+-|---+N2 | +-----+-|---+
+// | / | / | / | /
+// | +8 | +10 | + 20+ | +
+// |/ |/ |/ |/
+// N0+-----+-----+N3 +-----+-----+
+// 11
*/
static int QuadHexa_F [6][9] = { // FORWARD
{ 0, 8, 1, 9, 2, 10,3, 11,0 }, // all face normals are external,
diff --git a/src/SMESH/SMESH_MeshEditor.cxx b/src/SMESH/SMESH_MeshEditor.cxx
index e87561024..a6a4d9b71 100644
--- a/src/SMESH/SMESH_MeshEditor.cxx
+++ b/src/SMESH/SMESH_MeshEditor.cxx
@@ -9587,14 +9587,26 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh * theSm,
{
nbElem++;
const SMDS_MeshElement* elem = ElemItr->next();
- if( !elem || elem->IsQuadratic() ) continue;
+ if( !elem ) continue;
+ const SMDSAbs_EntityType aGeomType = elem->GetEntityType();
+ if ( elem->IsQuadratic() )
+ {
+ bool alreadyOK;
+ switch ( aGeomType ) {
+ case SMDSEntity_Quad_Quadrangle:
+ case SMDSEntity_Quad_Hexa: alreadyOK = !theHelper.GetIsBiQuadratic(); break;
+ case SMDSEntity_BiQuad_Quadrangle:
+ case SMDSEntity_TriQuad_Hexa: alreadyOK = theHelper.GetIsBiQuadratic(); break;
+ default: alreadyOK = true;
+ }
+ if ( alreadyOK ) continue;
+ }
// get elem data needed to re-create it
//
- const int id = elem->GetID();
- const int nbNodes = elem->NbNodes();
- const SMDSAbs_ElementType aType = elem->GetType();
- const SMDSAbs_EntityType aGeomType = elem->GetEntityType();
+ const int id = elem->GetID();
+ const int nbNodes = elem->NbCornerNodes();
+ const SMDSAbs_ElementType aType = elem->GetType();
nodes.assign(elem->begin_nodes(), elem->end_nodes());
if ( aGeomType == SMDSEntity_Polyhedra )
nbNodeInFaces = static_cast( elem )->GetQuantities();
@@ -9643,6 +9655,8 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh * theSm,
NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4], nodes[5], id, theForce3d);
break;
case SMDSEntity_Hexa:
+ case SMDSEntity_Quad_Hexa:
+ case SMDSEntity_TriQuad_Hexa:
NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3],
nodes[4], nodes[5], nodes[6], nodes[7], id, theForce3d);
break;
@@ -9661,18 +9675,20 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh * theSm,
}
return nbElem;
}
-
//=======================================================================
//function : ConvertToQuadratic
//purpose :
//=======================================================================
-void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
+void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theToBiQuad)
{
SMESHDS_Mesh* meshDS = GetMeshDS();
SMESH_MesherHelper aHelper(*myMesh);
+
aHelper.SetIsQuadratic( true );
+ aHelper.SetIsBiQuadratic( theToBiQuad );
+ aHelper.SetElementsOnShape(true);
int nbCheckedElems = 0;
if ( myMesh->HasShapeToMesh() )
@@ -9714,10 +9730,14 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
while(aFaceItr->more())
{
const SMDS_MeshFace* face = aFaceItr->next();
- if(!face || face->IsQuadratic() ) continue;
+ if ( !face ) continue;
+
+ const SMDSAbs_EntityType type = face->GetEntityType();
+ if (( theToBiQuad && type == SMDSEntity_BiQuad_Quadrangle ) ||
+ ( !theToBiQuad && type == SMDSEntity_Quad_Quadrangle ))
+ continue;
const int id = face->GetID();
- const SMDSAbs_EntityType type = face->GetEntityType();
vector nodes ( face->begin_nodes(), face->end_nodes());
meshDS->RemoveFreeElement(face, smDS, /*fromGroups=*/false);
@@ -9743,8 +9763,12 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
const SMDS_MeshVolume* volume = aVolumeItr->next();
if(!volume || volume->IsQuadratic() ) continue;
- const int id = volume->GetID();
const SMDSAbs_EntityType type = volume->GetEntityType();
+ if (( theToBiQuad && type == SMDSEntity_TriQuad_Hexa ) ||
+ ( !theToBiQuad && type == SMDSEntity_Quad_Hexa ))
+ continue;
+
+ const int id = volume->GetID();
vector nodes (volume->begin_nodes(), volume->end_nodes());
if ( type == SMDSEntity_Polyhedra )
nbNodeInFaces = static_cast(volume)->GetQuantities();
@@ -9760,6 +9784,8 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
NewVolume = aHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], id, theForce3d );
break;
case SMDSEntity_Hexa:
+ case SMDSEntity_Quad_Hexa:
+ case SMDSEntity_TriQuad_Hexa:
NewVolume = aHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3],
nodes[4], nodes[5], nodes[6], nodes[7], id, theForce3d);
break;
@@ -9795,7 +9821,8 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d)
//================================================================================
void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d,
- TIDSortedElemSet& theElements)
+ TIDSortedElemSet& theElements,
+ const bool theToBiQuad)
{
if ( theElements.empty() ) return;
@@ -9822,8 +9849,19 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d,
const SMDS_MeshElement* e = invIt->next();
if ( e->IsQuadratic() )
{
- quadAdjacentElems[ e->GetType() ].insert( e );
- continue;
+ bool alreadyOK;
+ switch ( e->GetEntityType() ) {
+ case SMDSEntity_Quad_Quadrangle:
+ case SMDSEntity_Quad_Hexa: alreadyOK = !theToBiQuad; break;
+ case SMDSEntity_BiQuad_Quadrangle:
+ case SMDSEntity_TriQuad_Hexa: alreadyOK = theToBiQuad; break;
+ default: alreadyOK = true;
+ }
+ if ( alreadyOK )
+ {
+ quadAdjacentElems[ e->GetType() ].insert( e );
+ continue;
+ }
}
if ( e->GetType() >= elemType )
{
@@ -9845,6 +9883,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d,
SMESH_MesherHelper helper(*myMesh);
helper.SetIsQuadratic( true );
+ helper.SetIsBiQuadratic( theToBiQuad );
// add links of quadratic adjacent elements to the helper
@@ -9867,18 +9906,32 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d,
helper.AddTLinks( static_cast< const SMDS_MeshVolume*> (*eIt) );
}
- // make quadratic elements instead of linear ones
+ // make quadratic (or bi-tri-quadratic) elements instead of linear ones
- SMESHDS_Mesh* meshDS = GetMeshDS();
+ SMESHDS_Mesh* meshDS = GetMeshDS();
SMESHDS_SubMesh* smDS = 0;
for ( eIt = theElements.begin(); eIt != theElements.end(); ++eIt )
{
const SMDS_MeshElement* elem = *eIt;
- if( elem->IsQuadratic() || elem->NbNodes() < 2 || elem->IsPoly() )
+ if( elem->NbNodes() < 2 || elem->IsPoly() )
continue;
- const int id = elem->GetID();
+ if ( elem->IsQuadratic() )
+ {
+ bool alreadyOK;
+ switch ( elem->GetEntityType() ) {
+ case SMDSEntity_Quad_Quadrangle:
+ case SMDSEntity_Quad_Hexa: alreadyOK = !theToBiQuad; break;
+ case SMDSEntity_BiQuad_Quadrangle:
+ case SMDSEntity_TriQuad_Hexa: alreadyOK = theToBiQuad; break;
+ default: alreadyOK = true;
+ }
+ if ( alreadyOK ) continue;
+ }
+
const SMDSAbs_ElementType type = elem->GetType();
+ const int id = elem->GetID();
+ const int nbNodes = elem->NbCornerNodes();
vector nodes ( elem->begin_nodes(), elem->end_nodes());
if ( !smDS || !smDS->Contains( elem ))
@@ -9886,7 +9939,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d,
meshDS->RemoveFreeElement(elem, smDS, /*fromGroups=*/false);
SMDS_MeshElement * newElem = 0;
- switch( nodes.size() )
+ switch( nbNodes )
{
case 4: // cases for most frequently used element types go first (for optimization)
if ( type == SMDSAbs_Volume )
diff --git a/src/SMESH/SMESH_MeshEditor.hxx b/src/SMESH/SMESH_MeshEditor.hxx
index ce52a9c05..746f50d6c 100644
--- a/src/SMESH/SMESH_MeshEditor.hxx
+++ b/src/SMESH/SMESH_MeshEditor.hxx
@@ -117,7 +117,6 @@ public:
const SMESH_SequenceOfElemPtr& GetLastCreatedNodes() const { return myLastCreatedNodes; }
const SMESH_SequenceOfElemPtr& GetLastCreatedElems() const { return myLastCreatedElems; }
void CrearLastCreated();
-
SMESH_ComputeErrorPtr & GetError() { return myError; }
/*!
@@ -492,15 +491,15 @@ public:
// insert theNodesToInsert into all volumes, containing link
// theBetweenNode1 - theBetweenNode2, between theBetweenNode1 and theBetweenNode2.
- void ConvertToQuadratic(const bool theForce3d);
- void ConvertToQuadratic(const bool theForce3d, TIDSortedElemSet& theElements);
- // Converts all mesh to quadratic one, deletes old elements, replacing
- // them with quadratic ones with the same id.
+ void ConvertToQuadratic(const bool theForce3d, const bool theToBiQuad);
+ void ConvertToQuadratic(const bool theForce3d,
+ TIDSortedElemSet& theElements, const bool theToBiQuad);
+ // Converts all mesh to quadratic or bi-quadratic one, deletes old elements,
+ // replacing them with quadratic or bi-quadratic ones with the same id.
// If theForce3d = 1; this results in the medium node lying at the
- // middle of the line segments connecting start and end node of a mesh
- // element
+ // middle of the line segments connecting start and end node of a mesh element.
// If theForce3d = 0; this results in the medium node lying at the
- // geometrical edge from which the mesh element is built
+ // geometrical edge from which the mesh element is built.
bool ConvertFromQuadratic();
void ConvertFromQuadratic(TIDSortedElemSet& theElements);
@@ -625,7 +624,6 @@ public:
bool toAddExistingBondary = false,
bool aroundElements = false);
-
private:
/*!
diff --git a/src/SMESH/SMESH_MesherHelper.cxx b/src/SMESH/SMESH_MesherHelper.cxx
index 4f732effc..e1f970970 100644
--- a/src/SMESH/SMESH_MesherHelper.cxx
+++ b/src/SMESH/SMESH_MesherHelper.cxx
@@ -81,7 +81,11 @@ namespace {
//================================================================================
SMESH_MesherHelper::SMESH_MesherHelper(SMESH_Mesh& theMesh)
- : myParIndex(0), myMesh(&theMesh), myShapeID(0), myCreateQuadratic(false),
+ : myParIndex(0),
+ myMesh(&theMesh),
+ myShapeID(0),
+ myCreateQuadratic(false),
+ myCreateBiQuadratic(false),
myFixNodeParameters(false)
{
myPar1[0] = myPar2[0] = myPar1[1] = myPar2[1] = 0;
@@ -934,11 +938,18 @@ bool SMESH_MesherHelper::CheckNodeU(const TopoDS_Edge& E,
//function : GetMediumPos
//purpose : Return index and type of the shape (EDGE or FACE only) to
// set a medium node on
+//param : useCurSubShape - if true, returns the shape set via SetSubShape()
+// if any
//=======================================================================
-std::pair SMESH_MesherHelper::GetMediumPos(const SMDS_MeshNode* n1,
- const SMDS_MeshNode* n2)
+std::pair
+SMESH_MesherHelper::GetMediumPos(const SMDS_MeshNode* n1,
+ const SMDS_MeshNode* n2,
+ const bool useCurSubShape)
{
+ if ( useCurSubShape && !myShape.IsNull() )
+ return std::make_pair( myShapeID, myShape.ShapeType() );
+
TopAbs_ShapeEnum shapeType = TopAbs_SHAPE;
int shapeID = -1;
TopoDS_Shape shape;
@@ -1009,9 +1020,157 @@ std::pair SMESH_MesherHelper::GetMediumPos(const SMDS_Mes
return make_pair( shapeID, shapeType );
}
+//=======================================================================
+//function : GetCentralNode
+//purpose : Return existing or create a new central node for a quardilateral
+// quadratic face given its 8 nodes.
+//@param : force3d - true means node creation in between the given nodes,
+// else node position is found on a geometrical face if any.
+//=======================================================================
+
+const SMDS_MeshNode* SMESH_MesherHelper::GetCentralNode(const SMDS_MeshNode* n1,
+ const SMDS_MeshNode* n2,
+ const SMDS_MeshNode* n3,
+ const SMDS_MeshNode* n4,
+ const SMDS_MeshNode* n12,
+ const SMDS_MeshNode* n23,
+ const SMDS_MeshNode* n34,
+ const SMDS_MeshNode* n41,
+ bool force3d)
+{
+ SMDS_MeshNode *centralNode = 0; // central node to return
+
+ // Find an existing central node
+
+ TBiQuad keyOfMap(n1,n2,n3,n4);
+ std::map::iterator itMapCentralNode;
+ itMapCentralNode = myMapWithCentralNode.find( keyOfMap );
+ if ( itMapCentralNode != myMapWithCentralNode.end() )
+ {
+ return (*itMapCentralNode).second;
+ }
+
+ // Get type of shape for the new central node
+
+ TopAbs_ShapeEnum shapeType = TopAbs_SHAPE;
+ int shapeID = -1;
+ int faceID = -1;
+ TopoDS_Shape shape;
+ TopTools_ListIteratorOfListOfShape it;
+
+ std::map< int, int > faceId2nbNodes;
+ std::map< int, int > ::iterator itMapWithIdFace;
+
+ SMESHDS_Mesh* meshDS = GetMeshDS();
+
+ // check if a face lie on a FACE, i.e. its all corner nodes lie either on the FACE or
+ // on sub-shapes of the FACE
+ if ( GetMesh()->HasShapeToMesh() )
+ {
+ const SMDS_MeshNode* nodes[] = { n1, n2, n3, n4 };
+ for(int i = 0; i < 4; i++)
+ {
+ shape = GetSubShapeByNode( nodes[i], meshDS );
+ if ( shape.IsNull() ) break;
+ if ( shape.ShapeType() == TopAbs_SOLID )
+ {
+ shapeID = nodes[i]->getshapeId();
+ shapeType = TopAbs_SOLID;
+ break;
+ }
+ if ( shape.ShapeType() == TopAbs_FACE )
+ {
+ faceID = nodes[i]->getshapeId();
+ itMapWithIdFace = faceId2nbNodes.insert( std::make_pair( faceID, 0 ) ).first;
+ itMapWithIdFace->second++;
+ }
+ else
+ {
+ PShapeIteratorPtr it = GetAncestors(shape, *GetMesh(), TopAbs_FACE );
+ while ( const TopoDS_Shape* face = it->next() )
+ {
+ faceID = meshDS->ShapeToIndex( *face );
+ itMapWithIdFace = faceId2nbNodes.insert( std::make_pair( faceID, 0 ) ).first;
+ itMapWithIdFace->second++;
+ }
+ }
+ }
+ }
+ if ( shapeID < 1 && !faceId2nbNodes.empty() ) // SOLID not found
+ {
+ // find ID of the FACE the four corner nodes belong to
+ itMapWithIdFace = faceId2nbNodes.begin();
+ for ( ; itMapWithIdFace != faceId2nbNodes.end(); ++itMapWithIdFace)
+ {
+ if ( itMapWithIdFace->second == 4 )
+ {
+ shapeType = TopAbs_FACE;
+ faceID = (*itMapWithIdFace).first;
+ break;
+ }
+ }
+ }
+
+ TopoDS_Face F;
+ if ( shapeType == TopAbs_FACE )
+ {
+ F = TopoDS::Face( meshDS->IndexToShape( faceID ));
+ }
+
+ // Create a node
+
+ gp_XY uvAvg;
+ gp_Pnt P;
+ if ( !F.IsNull() )
+ {
+ if ( !force3d )
+ {
+ uvAvg = calcTFI (0.5, 0.5,
+ GetNodeUV(F,n1,n3), GetNodeUV(F,n2,n4),
+ GetNodeUV(F,n3,n1), GetNodeUV(F,n4,n2),
+ GetNodeUV(F,n12,n3), GetNodeUV(F,n23,n4),
+ GetNodeUV(F,n34,n2), GetNodeUV(F,n41,n2));
+ TopLoc_Location loc;
+ Handle( Geom_Surface ) S = BRep_Tool::Surface( F, loc );
+ P = S->Value( uvAvg.X(), uvAvg.Y() ).Transformed( loc );
+ centralNode = meshDS->AddNode( P.X(), P.Y(), P.Z() );
+ if ( mySetElemOnShape )
+ meshDS->SetNodeOnFace( centralNode, faceID, uvAvg.X(), uvAvg.Y() );
+ myMapWithCentralNode.insert( std::make_pair( keyOfMap, centralNode ) );
+ return centralNode;
+ }
+ }
+
+ P = ( SMESH_TNodeXYZ( n1 ) +
+ SMESH_TNodeXYZ( n2 ) +
+ SMESH_TNodeXYZ( n3 ) +
+ SMESH_TNodeXYZ( n4 ) ) / 4;
+ centralNode = meshDS->AddNode( P.X(), P.Y(), P.Z() );
+
+ if ( mySetElemOnShape )
+ {
+ if ( !F.IsNull() )
+ {
+ uvAvg = (GetNodeUV(F,n1,n3) +
+ GetNodeUV(F,n2,n4) +
+ GetNodeUV(F,n3,n1) +
+ GetNodeUV(F,n4,n2)) / 4;
+ CheckNodeUV( F, centralNode, uvAvg, 2*BRep_Tool::Tolerance( F ), /*force=*/true);
+ meshDS->SetNodeOnFace( centralNode, faceID, uvAvg.X(), uvAvg.Y() );
+ }
+ else if ( shapeID > 0 )
+ meshDS->SetNodeInVolume( centralNode, shapeID );
+ else if ( myShapeID > 0 )
+ meshDS->SetMeshElementOnShape( centralNode, myShapeID );
+ }
+
+ myMapWithCentralNode.insert( std::make_pair( keyOfMap, centralNode ) );
+ return centralNode;
+}
+
//=======================================================================
//function : GetMediumNode
-//purpose : Return existing or create new medium nodes between given ones
+//purpose : Return existing or create a new medium node between given ones
//=======================================================================
const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
@@ -1041,7 +1200,7 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
TopoDS_Face F; gp_XY uv[2];
bool uvOK[2] = { false, false };
- pair pos = GetMediumPos( n1, n2 );
+ pair pos = GetMediumPos( n1, n2, mySetElemOnShape );
// get positions of the given nodes on shapes
if ( pos.second == TopAbs_FACE )
@@ -1088,7 +1247,8 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
gp_XY UV = GetMiddleUV( S, uv[0], uv[1] );
gp_Pnt P = S->Value( UV.X(), UV.Y() ).Transformed(loc);
n12 = meshDS->AddNode(P.X(), P.Y(), P.Z());
- meshDS->SetNodeOnFace(n12, faceID, UV.X(), UV.Y());
+ if ( mySetElemOnShape )
+ meshDS->SetNodeOnFace(n12, faceID, UV.X(), UV.Y());
myTLinkNodeMap.insert(make_pair(link,n12));
return n12;
}
@@ -1112,7 +1272,8 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
gp_Pnt P = C->Value( U );
n12 = meshDS->AddNode(P.X(), P.Y(), P.Z());
- meshDS->SetNodeOnEdge(n12, edgeID, U);
+ if ( mySetElemOnShape )
+ meshDS->SetNodeOnEdge(n12, edgeID, U);
myTLinkNodeMap.insert(make_pair(link,n12));
return n12;
}
@@ -1125,21 +1286,24 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetMediumNode(const SMDS_MeshNode* n1,
double z = ( n1->Z() + n2->Z() )/2.;
n12 = meshDS->AddNode(x,y,z);
- if ( !F.IsNull() )
+ if ( mySetElemOnShape )
{
- gp_XY UV = ( uv[0] + uv[1] ) / 2.;
- CheckNodeUV( F, n12, UV, 2*BRep_Tool::Tolerance( F ), /*force=*/true);
- meshDS->SetNodeOnFace(n12, faceID, UV.X(), UV.Y() );
- }
- else if ( !E.IsNull() )
- {
- double U = ( u[0] + u[1] ) / 2.;
- CheckNodeU( E, n12, U, 2*BRep_Tool::Tolerance( E ), /*force=*/true);
- meshDS->SetNodeOnEdge(n12, edgeID, U);
- }
- else if ( myShapeID > 0 )
- {
- meshDS->SetNodeInVolume(n12, myShapeID);
+ if ( !F.IsNull() )
+ {
+ gp_XY UV = ( uv[0] + uv[1] ) / 2.;
+ CheckNodeUV( F, n12, UV, 2*BRep_Tool::Tolerance( F ), /*force=*/true);
+ meshDS->SetNodeOnFace(n12, faceID, UV.X(), UV.Y() );
+ }
+ else if ( !E.IsNull() )
+ {
+ double U = ( u[0] + u[1] ) / 2.;
+ CheckNodeU( E, n12, U, 2*BRep_Tool::Tolerance( E ), /*force=*/true);
+ meshDS->SetNodeOnEdge(n12, edgeID, U);
+ }
+ else if ( myShapeID > 0 )
+ {
+ meshDS->SetMeshElementOnShape(n12, myShapeID);
+ }
}
myTLinkNodeMap.insert( make_pair( link, n12 ));
@@ -1211,7 +1375,8 @@ const SMDS_MeshNode* SMESH_MesherHelper::getMediumNodeOnComposedWire(const SMDS_
GetMeshDS()->MoveNode( n12, p.X(), p.Y(), p.Z() );
}
- GetMeshDS()->SetNodeOnEdge(n12, edges[iOkEdge], u);
+ if ( mySetElemOnShape )
+ GetMeshDS()->SetNodeOnEdge(n12, edges[iOkEdge], u);
myTLinkNodeMap.insert( make_pair( SMESH_TLink(n1,n2), n12 ));
@@ -1319,7 +1484,7 @@ SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
//=======================================================================
//function : AddFace
-//purpose : Creates quadratic or linear quadrangle
+//purpose : Creates bi-quadratic, quadratic or linear quadrangle
//=======================================================================
SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
@@ -1362,11 +1527,21 @@ SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
const SMDS_MeshNode* n23 = GetMediumNode(n2,n3,force3d);
const SMDS_MeshNode* n34 = GetMediumNode(n3,n4,force3d);
const SMDS_MeshNode* n41 = GetMediumNode(n4,n1,force3d);
-
- if(id)
- elem = meshDS->AddFaceWithID(n1, n2, n3, n4, n12, n23, n34, n41, id);
+ if(myCreateBiQuadratic)
+ {
+ const SMDS_MeshNode* nCenter = GetCentralNode(n1, n2, n3, n4, n12, n23, n34, n41, force3d);
+ if(id)
+ elem = meshDS->AddFaceWithID(n1, n2, n3, n4, n12, n23, n34, n41, nCenter, id);
+ else
+ elem = meshDS->AddFace(n1, n2, n3, n4, n12, n23, n34, n41, nCenter);
+ }
else
- elem = meshDS->AddFace(n1, n2, n3, n4, n12, n23, n34, n41);
+ {
+ if(id)
+ elem = meshDS->AddFaceWithID(n1, n2, n3, n4, n12, n23, n34, n41, id);
+ else
+ elem = meshDS->AddFace(n1, n2, n3, n4, n12, n23, n34, n41);
+ }
}
if ( mySetElemOnShape && myShapeID > 0 )
meshDS->SetMeshElementOnShape( elem, myShapeID );
@@ -1550,7 +1725,7 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
//=======================================================================
//function : AddVolume
-//purpose : Creates quadratic or linear hexahedron
+//purpose : Creates bi-quadratic, quadratic or linear hexahedron
//=======================================================================
SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
@@ -1587,15 +1762,75 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
const SMDS_MeshNode* n26 = GetMediumNode(n2,n6,force3d);
const SMDS_MeshNode* n37 = GetMediumNode(n3,n7,force3d);
const SMDS_MeshNode* n48 = GetMediumNode(n4,n8,force3d);
+ if(myCreateBiQuadratic)
+ {
+ const SMDS_MeshNode* n1234 = GetCentralNode(n1,n2,n3,n4,n12,n23,n34,n41,force3d);
+ const SMDS_MeshNode* n1256 = GetCentralNode(n1,n2,n5,n6,n12,n26,n56,n15,force3d);
+ const SMDS_MeshNode* n2367 = GetCentralNode(n2,n3,n6,n7,n23,n37,n67,n26,force3d);
+ const SMDS_MeshNode* n3478 = GetCentralNode(n3,n4,n7,n8,n34,n48,n78,n37,force3d);
+ const SMDS_MeshNode* n1458 = GetCentralNode(n1,n4,n5,n8,n41,n48,n15,n85,force3d);
+ const SMDS_MeshNode* n5678 = GetCentralNode(n5,n6,n7,n8,n56,n67,n78,n85,force3d);
- if(id)
- elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8,
- n12, n23, n34, n41, n56, n67,
- n78, n85, n15, n26, n37, n48, id);
+ vector pointsOnShapes( SMESH_Block::ID_Shell );
+
+ pointsOnShapes[ SMESH_Block::ID_V000 ] = SMESH_TNodeXYZ( n4 );
+ pointsOnShapes[ SMESH_Block::ID_V100 ] = SMESH_TNodeXYZ( n8 );
+ pointsOnShapes[ SMESH_Block::ID_V010 ] = SMESH_TNodeXYZ( n3 );
+ pointsOnShapes[ SMESH_Block::ID_V110 ] = SMESH_TNodeXYZ( n7 );
+ pointsOnShapes[ SMESH_Block::ID_V001 ] = SMESH_TNodeXYZ( n1 );
+ pointsOnShapes[ SMESH_Block::ID_V101 ] = SMESH_TNodeXYZ( n5 );
+ pointsOnShapes[ SMESH_Block::ID_V011 ] = SMESH_TNodeXYZ( n2 );
+ pointsOnShapes[ SMESH_Block::ID_V111 ] = SMESH_TNodeXYZ( n6 );
+
+ pointsOnShapes[ SMESH_Block::ID_Ex00 ] = SMESH_TNodeXYZ( n48 );
+ pointsOnShapes[ SMESH_Block::ID_Ex10 ] = SMESH_TNodeXYZ( n37 );
+ pointsOnShapes[ SMESH_Block::ID_E0y0 ] = SMESH_TNodeXYZ( n15 );
+ pointsOnShapes[ SMESH_Block::ID_E1y0 ] = SMESH_TNodeXYZ( n26 );
+ pointsOnShapes[ SMESH_Block::ID_Ex01 ] = SMESH_TNodeXYZ( n34 );
+ pointsOnShapes[ SMESH_Block::ID_Ex11 ] = SMESH_TNodeXYZ( n78 );
+ pointsOnShapes[ SMESH_Block::ID_E0y1 ] = SMESH_TNodeXYZ( n12 );
+ pointsOnShapes[ SMESH_Block::ID_E1y1 ] = SMESH_TNodeXYZ( n56 );
+ pointsOnShapes[ SMESH_Block::ID_E00z ] = SMESH_TNodeXYZ( n41 );
+ pointsOnShapes[ SMESH_Block::ID_E10z ] = SMESH_TNodeXYZ( n85 );
+ pointsOnShapes[ SMESH_Block::ID_E01z ] = SMESH_TNodeXYZ( n23 );
+ pointsOnShapes[ SMESH_Block::ID_E11z ] = SMESH_TNodeXYZ( n67 );
+
+ pointsOnShapes[ SMESH_Block::ID_Fxy0 ] = SMESH_TNodeXYZ( n3478 );
+ pointsOnShapes[ SMESH_Block::ID_Fxy1 ] = SMESH_TNodeXYZ( n1256 );
+ pointsOnShapes[ SMESH_Block::ID_Fx0z ] = SMESH_TNodeXYZ( n1458 );
+ pointsOnShapes[ SMESH_Block::ID_Fx1z ] = SMESH_TNodeXYZ( n2367 );
+ pointsOnShapes[ SMESH_Block::ID_F0yz ] = SMESH_TNodeXYZ( n1234 );
+ pointsOnShapes[ SMESH_Block::ID_F1yz ] = SMESH_TNodeXYZ( n5678 );
+
+ gp_XYZ centerCube(0.5, 0.5, 0.5);
+ gp_XYZ nCenterElem;
+ SMESH_Block::ShellPoint( centerCube, pointsOnShapes, nCenterElem );
+ const SMDS_MeshNode* nCenter =
+ meshDS->AddNode( nCenterElem.X(), nCenterElem.Y(), nCenterElem.Z() );
+ meshDS->SetNodeInVolume( nCenter, myShapeID );
+
+ if(id)
+ elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8,
+ n12, n23, n34, n41, n56, n67,
+ n78, n85, n15, n26, n37, n48,
+ n1234, n1256, n2367, n3478, n1458, n5678, nCenter, id);
+ else
+ elem = meshDS->AddVolume(n1, n2, n3, n4, n5, n6, n7, n8,
+ n12, n23, n34, n41, n56, n67,
+ n78, n85, n15, n26, n37, n48,
+ n1234, n1256, n2367, n3478, n1458, n5678, nCenter);
+ }
else
- elem = meshDS->AddVolume(n1, n2, n3, n4, n5, n6, n7, n8,
- n12, n23, n34, n41, n56, n67,
- n78, n85, n15, n26, n37, n48);
+ {
+ if(id)
+ elem = meshDS->AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8,
+ n12, n23, n34, n41, n56, n67,
+ n78, n85, n15, n26, n37, n48, id);
+ else
+ elem = meshDS->AddVolume(n1, n2, n3, n4, n5, n6, n7, n8,
+ n12, n23, n34, n41, n56, n67,
+ n78, n85, n15, n26, n37, n48);
+ }
}
if ( mySetElemOnShape && myShapeID > 0 )
meshDS->SetMeshElementOnShape( elem, myShapeID );
@@ -1720,10 +1955,11 @@ bool SMESH_MesherHelper::IsSameElemGeometry(const SMESHDS_SubMesh* smDS,
if ( !smDS ) return nullSubMeshRes;
SMDS_ElemIteratorPtr elemIt = smDS->GetElements();
- while ( elemIt->more() )
- if ( elemIt->next()->GetGeomType() != shape )
+ while ( elemIt->more() ) {
+ const SMDS_MeshElement* e = elemIt->next();
+ if ( e->GetGeomType() != shape )
return false;
-
+ }
return true;
}
@@ -1898,7 +2134,8 @@ namespace
//================================================================================
bool isCornerOfStructure( const SMDS_MeshNode* n,
- const SMESHDS_SubMesh* faceSM )
+ const SMESHDS_SubMesh* faceSM,
+ SMESH_MesherHelper& faceAnalyser )
{
int nbFacesInSM = 0;
if ( n ) {
@@ -1906,7 +2143,14 @@ namespace
while ( fIt->more() )
nbFacesInSM += faceSM->Contains( fIt->next() );
}
- return ( nbFacesInSM == 1 );
+ if ( nbFacesInSM == 1 )
+ return true;
+
+ if ( nbFacesInSM == 2 && n->GetPosition()->GetTypeOfPosition() == SMDS_TOP_VERTEX )
+ {
+ return faceAnalyser.IsRealSeam( n->getshapeId() );
+ }
+ return false;
}
}
@@ -1925,13 +2169,15 @@ bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
list< int > nbEdgesInWires;
int nbWires = SMESH_Block::GetOrderedEdges( TopoDS::Face( faceSM->GetSubShape() ),
edges, nbEdgesInWires );
- if ( nbWires != 1 )
+ if ( nbWires != 1 || nbEdgesInWires.front() != 4 )
return false;
// algo: find corners of a structure and then analyze nb of faces and
// length of structure sides
SMESHDS_Mesh* meshDS = faceSM->GetFather()->GetMeshDS();
+ SMESH_MesherHelper faceAnalyser( *faceSM->GetFather() );
+ faceAnalyser.SetSubShape( faceSM->GetSubShape() );
// rotate edges to get the first node being at corner
// (in principle it's not necessary but so far none SALOME algo can make
@@ -1940,7 +2186,8 @@ bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
int nbRemainEdges = nbEdgesInWires.front();
do {
TopoDS_Vertex V = IthVertex( 0, edges.front() );
- isCorner = isCornerOfStructure( SMESH_Algo::VertexNode( V, meshDS ), fSM);
+ isCorner = isCornerOfStructure( SMESH_Algo::VertexNode( V, meshDS ),
+ fSM, faceAnalyser);
if ( !isCorner ) {
edges.splice( edges.end(), edges, edges.begin() );
--nbRemainEdges;
@@ -1963,16 +2210,13 @@ bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
list< const SMDS_MeshNode* > edgeNodes;
map< double, const SMDS_MeshNode* >::iterator u2n = u2Nodes.begin();
- if ( !nodes.empty() && nodes.back() == u2n->second )
- ++u2n;
- map< double, const SMDS_MeshNode* >::iterator u2nEnd = --u2Nodes.end();
- if ( nodes.empty() || nodes.back() != u2nEnd->second )
- ++u2nEnd;
- for ( ; u2n != u2nEnd; ++u2n )
+ for ( ; u2n != u2Nodes.end(); ++u2n )
edgeNodes.push_back( u2n->second );
-
if ( edge->Orientation() == TopAbs_REVERSED )
edgeNodes.reverse();
+
+ if ( !nodes.empty() && nodes.back() == edgeNodes.front() )
+ edgeNodes.pop_front();
nodes.splice( nodes.end(), edgeNodes, edgeNodes.begin(), edgeNodes.end() );
}
@@ -1983,7 +2227,7 @@ bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
for ( ; n != nodes.end(); ++n )
{
++nbEdges;
- if ( isCornerOfStructure( *n, fSM )) {
+ if ( isCornerOfStructure( *n, fSM, faceAnalyser )) {
nbEdgesInSide.push_back( nbEdges );
nbEdges = 0;
}
@@ -2488,7 +2732,7 @@ namespace { // Structures used by FixQuadraticElements()
enum { ERR_OK, ERR_TRI, ERR_PRISM, ERR_UNKNOWN }; // errors of QFace::GetLinkChain()
// --------------------------------------------------------------------
/*!
- * \brief Face shared by two volumes and bound by QLinks
+ * \brief Quadratic face shared by two volumes and bound by QLinks
*/
struct QFace: public TIDSortedNodeSet
{
@@ -3857,11 +4101,13 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
// 3. Compute displacement of medium nodes
// ---------------------------------------
- // two loops on QFaces: the first is to treat boundary links, the second is for internal ones
+ // two loops on QFaces: the first is to treat boundary links, the second is for internal ones.
TopLoc_Location loc;
- // not treat boundary of volumic submesh
+ bool checkUV;
+ // not to treat boundary of volumic sub-mesh.
int isInside = ( elemType == SMDSAbs_Volume && volumeOnly ) ? 1 : 0;
- for ( ; isInside < 2; ++isInside ) {
+ for ( ; isInside < 2; ++isInside )
+ {
MSG( "--------------- LOOP (inside=" << isInside << ") ------------------");
SMDS_TypeOfPosition pos = isInside ? SMDS_TOP_3DSPACE : SMDS_TOP_FACE;
SMDS_TypeOfPosition bndPos = isInside ? SMDS_TOP_FACE : SMDS_TOP_EDGE;
@@ -3936,7 +4182,6 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
gp_Vec move1 = chain.back ()->_nodeMove;
TopoDS_Face face;
- bool checkUV = true;
if ( !isInside )
{
// compute node displacement of end links of chain in parametric space of face
@@ -4049,10 +4294,131 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
// 4. Move nodes
// -------------
+ TIDSortedElemSet biQuadQuas, triQuadHexa;
+ const SMDS_MeshElement *biQuadQua, *triQuadHex;
+ const bool toFixCentralNodes = ( myMesh->NbBiQuadQuadrangles() +
+ myMesh->NbTriQuadraticHexas() );
+
for ( pLink = links.begin(); pLink != links.end(); ++pLink ) {
- if ( pLink->IsMoved() ) {
+ if ( pLink->IsMoved() )
+ {
gp_Pnt p = pLink->MiddlePnt() + pLink->Move();
GetMeshDS()->MoveNode( pLink->_mediumNode, p.X(), p.Y(), p.Z());
+
+ // collect bi-quadratic elements
+ if ( toFixCentralNodes )
+ {
+ biQuadQua = triQuadHex = 0;
+ SMDS_ElemIteratorPtr eIt = pLink->_mediumNode->GetInverseElementIterator();
+ while ( eIt->more() )
+ {
+ const SMDS_MeshElement* e = eIt->next();
+ SMDSAbs_EntityType type = e->GetEntityType();
+ if ( type == SMDSEntity_BiQuad_Quadrangle )
+ biQuadQuas.insert( e );
+ else if ( type == SMDSEntity_TriQuad_Hexa )
+ triQuadHexa.insert( e );
+ }
+ }
+ }
+ }
+
+ // Fix positions of central nodes of bi-tri-quadratic elements
+
+ // treat bi-quad quadrangles
+ {
+ vector< const SMDS_MeshNode* > nodes( 9 );
+ gp_XY uv[ 9 ];
+ //TIDSortedNodeSet checkedNodes;
+ TIDSortedElemSet::iterator quadIt = biQuadQuas.begin();
+ for ( ; quadIt != biQuadQuas.end(); ++quadIt )
+ {
+ const SMDS_MeshElement* quad = *quadIt;
+ // nodes
+ nodes.clear();
+ nodes.assign( quad->begin_nodes(), quad->end_nodes() );
+ // FACE
+ TopoDS_Shape S = GetSubShapeByNode( nodes.back(), GetMeshDS() );
+ if ( S.IsNull() || S.ShapeType() != TopAbs_FACE ) continue;
+ const TopoDS_Face& F = TopoDS::Face( S );
+ Handle( Geom_Surface ) surf = BRep_Tool::Surface( F, loc );
+ const double tol = BRep_Tool::Tolerance( F );
+ // UV
+ for ( int i = 0; i < 8; ++i )
+ {
+ uv[ i ] = GetNodeUV( F, nodes[i], nodes[8], &checkUV );
+ // as this method is used after mesh generation, UV of nodes is not
+ // updated according to bending links, so we update
+ if ( i > 3 && nodes[i]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
+ CheckNodeUV( F, nodes[i], uv[ i ], 2*tol, /*force=*/true );
+ }
+ // move central node
+ gp_XY uvCent = calcTFI (0.5, 0.5, uv[0],uv[1],uv[2],uv[3],uv[4],uv[5],uv[6],uv[7] );
+ gp_Pnt p = surf->Value( uvCent.X(), uvCent.Y() ).Transformed( loc );
+ GetMeshDS()->MoveNode( nodes[8], p.X(), p.Y(), p.Z());
+ }
+ }
+
+ // treat tri-quadratic hexahedra
+ {
+ SMDS_VolumeTool volExp;
+ TIDSortedElemSet::iterator hexIt = triQuadHexa.begin();
+ for ( ; hexIt != triQuadHexa.end(); ++hexIt )
+ {
+ volExp.Set( *hexIt, /*ignoreCentralNodes=*/false );
+
+ // fix nodes central in sides
+ for ( int iQuad = 0; iQuad < volExp.NbFaces(); ++iQuad )
+ {
+ const SMDS_MeshNode** quadNodes = volExp.GetFaceNodes( iQuad );
+ if ( quadNodes[8]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_3DSPACE )
+ {
+ gp_XYZ p = calcTFI( 0.5, 0.5,
+ SMESH_TNodeXYZ( quadNodes[0] ), SMESH_TNodeXYZ( quadNodes[2] ),
+ SMESH_TNodeXYZ( quadNodes[4] ), SMESH_TNodeXYZ( quadNodes[6] ),
+ SMESH_TNodeXYZ( quadNodes[1] ), SMESH_TNodeXYZ( quadNodes[3] ),
+ SMESH_TNodeXYZ( quadNodes[5] ), SMESH_TNodeXYZ( quadNodes[7] ));
+ GetMeshDS()->MoveNode( quadNodes[8], p.X(), p.Y(), p.Z());
+ }
+ }
+
+ // fix the volume central node
+ vector pointsOnShapes( SMESH_Block::ID_Shell );
+ const SMDS_MeshNode** hexNodes = volExp.GetNodes();
+
+ pointsOnShapes[ SMESH_Block::ID_V000 ] = SMESH_TNodeXYZ( hexNodes[ 0 ] );
+ pointsOnShapes[ SMESH_Block::ID_V100 ] = SMESH_TNodeXYZ( hexNodes[ 3 ] );
+ pointsOnShapes[ SMESH_Block::ID_V010 ] = SMESH_TNodeXYZ( hexNodes[ 1 ] );
+ pointsOnShapes[ SMESH_Block::ID_V110 ] = SMESH_TNodeXYZ( hexNodes[ 2 ] );
+ pointsOnShapes[ SMESH_Block::ID_V001 ] = SMESH_TNodeXYZ( hexNodes[ 4 ] );
+ pointsOnShapes[ SMESH_Block::ID_V101 ] = SMESH_TNodeXYZ( hexNodes[ 7 ] );
+ pointsOnShapes[ SMESH_Block::ID_V011 ] = SMESH_TNodeXYZ( hexNodes[ 5 ] );
+ pointsOnShapes[ SMESH_Block::ID_V111 ] = SMESH_TNodeXYZ( hexNodes[ 6 ] );
+
+ pointsOnShapes[ SMESH_Block::ID_Ex00 ] = SMESH_TNodeXYZ( hexNodes[ 11 ] );
+ pointsOnShapes[ SMESH_Block::ID_Ex10 ] = SMESH_TNodeXYZ( hexNodes[ 9 ] );
+ pointsOnShapes[ SMESH_Block::ID_E0y0 ] = SMESH_TNodeXYZ( hexNodes[ 8 ] );
+ pointsOnShapes[ SMESH_Block::ID_E1y0 ] = SMESH_TNodeXYZ( hexNodes[ 10 ] );
+ pointsOnShapes[ SMESH_Block::ID_Ex01 ] = SMESH_TNodeXYZ( hexNodes[ 15 ] );
+ pointsOnShapes[ SMESH_Block::ID_Ex11 ] = SMESH_TNodeXYZ( hexNodes[ 13 ] );
+ pointsOnShapes[ SMESH_Block::ID_E0y1 ] = SMESH_TNodeXYZ( hexNodes[ 12 ] );
+ pointsOnShapes[ SMESH_Block::ID_E1y1 ] = SMESH_TNodeXYZ( hexNodes[ 14 ] );
+ pointsOnShapes[ SMESH_Block::ID_E00z ] = SMESH_TNodeXYZ( hexNodes[ 16 ] );
+ pointsOnShapes[ SMESH_Block::ID_E10z ] = SMESH_TNodeXYZ( hexNodes[ 19 ] );
+ pointsOnShapes[ SMESH_Block::ID_E01z ] = SMESH_TNodeXYZ( hexNodes[ 17 ] );
+ pointsOnShapes[ SMESH_Block::ID_E11z ] = SMESH_TNodeXYZ( hexNodes[ 18 ] );
+
+ pointsOnShapes[ SMESH_Block::ID_Fxy0 ] = SMESH_TNodeXYZ( hexNodes[ 20 ] );
+ pointsOnShapes[ SMESH_Block::ID_Fxy1 ] = SMESH_TNodeXYZ( hexNodes[ 25 ] );
+ pointsOnShapes[ SMESH_Block::ID_Fx0z ] = SMESH_TNodeXYZ( hexNodes[ 21 ] );
+ pointsOnShapes[ SMESH_Block::ID_Fx1z ] = SMESH_TNodeXYZ( hexNodes[ 23 ] );
+ pointsOnShapes[ SMESH_Block::ID_F0yz ] = SMESH_TNodeXYZ( hexNodes[ 24 ] );
+ pointsOnShapes[ SMESH_Block::ID_F1yz ] = SMESH_TNodeXYZ( hexNodes[ 22 ] );
+
+ gp_XYZ nCenterParams(0.5, 0.5, 0.5), nCenterCoords;
+ SMESH_Block::ShellPoint( nCenterParams, pointsOnShapes, nCenterCoords );
+ GetMeshDS()->MoveNode( hexNodes[26],
+ nCenterCoords.X(), nCenterCoords.Y(), nCenterCoords.Z());
}
}
diff --git a/src/SMESH/SMESH_MesherHelper.hxx b/src/SMESH/SMESH_MesherHelper.hxx
index cf515dfba..ee3e62bbb 100644
--- a/src/SMESH/SMESH_MesherHelper.hxx
+++ b/src/SMESH/SMESH_MesherHelper.hxx
@@ -72,7 +72,7 @@ typedef gp_XY (*xyFunPtr)(const gp_XY& uv1, const gp_XY& uv2);
class SMESH_EXPORT SMESH_MesherHelper
{
-public:
+ public:
// ---------- PUBLIC UTILITIES ----------
/*!
@@ -146,6 +146,36 @@ public:
return ind;
}
+ /*!
+ * \brief Return UV of a point inside a quadrilateral FACE by it's
+ * normalized parameters within a unit quadrangle and the
+ * corresponding projections on sub-shapes of the real-world FACE.
+ * The used calculation method is called Trans-Finite Interpolation (TFI).
+ * \param x,y - normalized parameters that should be in range [0,1]
+ * \param a0,a1,a2,a3 - UV of VERTEXes of the FACE == projections on VERTEXes
+ * \param p0,p1,p2,p3 - UV of the point projections on EDGEs of the FACE
+ * \return gp_XY - UV of the point on the FACE
+ *
+ * Order of those UV in the FACE is as follows.
+ * a4 p3 a3
+ * o---x-----o
+ * | : |
+ * | :UV |
+ * p4 x...O.....x p2
+ * | : |
+ * o---x-----o
+ * a1 p1 a2
+ */
+ inline static gp_XY calcTFI(double x, double y,
+ const gp_XY a0,const gp_XY a1,const gp_XY a2,const gp_XY a3,
+ const gp_XY p0,const gp_XY p1,const gp_XY p2,const gp_XY p3);
+
+ /*!
+ * \brief Same as "gp_XY calcTFI(...)" but in 3D
+ */
+ inline static gp_XYZ calcTFI(double x, double y,
+ const gp_XYZ a0,const gp_XYZ a1,const gp_XYZ a2,const gp_XYZ a3,
+ const gp_XYZ p0,const gp_XYZ p1,const gp_XYZ p2,const gp_XYZ p3);
/*!
* \brief Count nb of sub-shapes
* \param shape - the shape
@@ -214,8 +244,19 @@ public:
/*!
* \brief Set order of elements to create without calling IsQuadraticSubMesh()
*/
+
+ /*!
+ * \brief Set myCreateQuadratic flag
+ */
void SetIsQuadratic(const bool theBuildQuadratic)
{ myCreateQuadratic = theBuildQuadratic; }
+
+ /*!
+ * \brief Set myCreateBiQuadratic flag
+ */
+ void SetIsBiQuadratic(const bool theBuildBiQuadratic)
+ { myCreateBiQuadratic = theBuildBiQuadratic; }
+
/*!
* \brief Return myCreateQuadratic flag
*/
@@ -226,6 +267,11 @@ public:
*/
bool IsReversedSubMesh (const TopoDS_Face& theFace);
+ /*!
+ * \brief Return myCreateBiQuadratic flag
+ */
+ bool GetIsBiQuadratic() const { return myCreateBiQuadratic; }
+
/*!
* \brief Move medium nodes of faces and volumes to fix distorted elements
* \param error - container of fixed distorted elements
@@ -276,7 +322,7 @@ public:
const int id=0,
const bool force3d = false);
/*!
- * Creates quadratic or linear quadrangle
+ * Creates bi-quadratic, quadratic or linear quadrangle
*/
SMDS_MeshFace* AddFace(const SMDS_MeshNode* n1,
const SMDS_MeshNode* n2,
@@ -284,7 +330,6 @@ public:
const SMDS_MeshNode* n4,
const int id = 0,
const bool force3d = false);
-
/*!
* Creates polygon, with additional nodes in quadratic mesh
*/
@@ -322,7 +367,7 @@ public:
const int id = 0,
const bool force3d = true);
/*!
- * Creates quadratic or linear hexahedron
+ * Creates bi-quadratic, quadratic or linear hexahedron
*/
SMDS_MeshVolume* AddVolume(const SMDS_MeshNode* n1,
const SMDS_MeshNode* n2,
@@ -525,11 +570,27 @@ public:
const SMDS_MeshNode* GetMediumNode(const SMDS_MeshNode* n1,
const SMDS_MeshNode* n2,
const bool force3d);
+ /*!
+ * \brief Return existing or create a new central node for a quardilateral
+ * quadratic face given its 8 nodes.
+ * \param force3d - true means node creation in between the given nodes,
+ * else node position is found on a geometrical face if any.
+ */
+ const SMDS_MeshNode* GetCentralNode(const SMDS_MeshNode* n1,
+ const SMDS_MeshNode* n2,
+ const SMDS_MeshNode* n3,
+ const SMDS_MeshNode* n4,
+ const SMDS_MeshNode* n12,
+ const SMDS_MeshNode* n23,
+ const SMDS_MeshNode* n34,
+ const SMDS_MeshNode* n41,
+ bool force3d);
/*!
* \brief Return index and type of the shape (EDGE or FACE only) to set a medium node on
*/
std::pair GetMediumPos(const SMDS_MeshNode* n1,
- const SMDS_MeshNode* n2);
+ const SMDS_MeshNode* n2,
+ const bool useCurSubShape=false);
/*!
* \brief Add a link in my data structure
*/
@@ -561,13 +622,13 @@ public:
virtual ~SMESH_MesherHelper();
-protected:
+ protected:
/*!
* \brief Select UV on either of 2 pcurves of a seam edge, closest to the given UV
- * \param uv1 - UV on the seam
- * \param uv2 - UV within a face
- * \retval gp_Pnt2d - selected UV
+ * \param uv1 - UV on the seam
+ * \param uv2 - UV within a face
+ * \retval gp_Pnt2d - selected UV
*/
gp_Pnt2d GetUVOnSeam( const gp_Pnt2d& uv1, const gp_Pnt2d& uv2 ) const;
@@ -577,10 +638,31 @@ protected:
private:
// Forbiden copy constructor
- SMESH_MesherHelper (const SMESH_MesherHelper& theOther) {};
+ SMESH_MesherHelper (const SMESH_MesherHelper& theOther);
- // special map for using during creation of quadratic elements
- TLinkNodeMap myTLinkNodeMap;
+ // key of a map of bi-quadratic face to it's central node
+ struct TBiQuad: public std::pair >
+ {
+ TBiQuad(const SMDS_MeshNode* n1,
+ const SMDS_MeshNode* n2,
+ const SMDS_MeshNode* n3,
+ const SMDS_MeshNode* n4)
+ {
+ TIDSortedNodeSet s;
+ s.insert(n1);
+ s.insert(n2);
+ s.insert(n3);
+ s.insert(n4);
+ TIDSortedNodeSet::iterator n = s.begin();
+ first = (*n++)->GetID();
+ second.first = (*n++)->GetID();
+ second.second = (*n++)->GetID();
+ }
+ };
+
+ // maps used during creation of quadratic elements
+ TLinkNodeMap myTLinkNodeMap; // medium nodes on links
+ std::map< TBiQuad, SMDS_MeshNode* > myMapWithCentralNode; // central nodes of faces
std::set< int > myDegenShapeIds;
std::set< int > mySeamShapeIds;
@@ -597,14 +679,35 @@ protected:
int myShapeID;
bool myCreateQuadratic;
+ bool myCreateBiQuadratic;
bool mySetElemOnShape;
bool myFixNodeParameters;
std::map< int,bool > myNodePosShapesValidity;
bool toCheckPosOnShape(int shapeID ) const;
void setPosOnShapeValidity(int shapeID, bool ok ) const;
-
};
+//=======================================================================
+inline gp_XY
+SMESH_MesherHelper::calcTFI(double x, double y,
+ const gp_XY a0,const gp_XY a1,const gp_XY a2,const gp_XY a3,
+ const gp_XY p0,const gp_XY p1,const gp_XY p2,const gp_XY p3)
+{
+ return
+ ((1 - y) * p0 + x * p1 + y * p2 + (1 - x) * p3 ) -
+ ((1 - x) * (1 - y) * a0 + x * (1 - y) * a1 + x * y * a2 + (1 - x) * y * a3);
+}
+//=======================================================================
+inline gp_XYZ
+SMESH_MesherHelper::calcTFI(double x, double y,
+ const gp_XYZ a0,const gp_XYZ a1,const gp_XYZ a2,const gp_XYZ a3,
+ const gp_XYZ p0,const gp_XYZ p1,const gp_XYZ p2,const gp_XYZ p3)
+{
+ return
+ ((1 - y) * p0 + x * p1 + y * p2 + (1 - x) * p3 ) -
+ ((1 - x) * (1 - y) * a0 + x * (1 - y) * a1 + x * y * a2 + (1 - x) * y * a3);
+}
+//=======================================================================
#endif
diff --git a/src/SMESH/SMESH_subMesh.cxx b/src/SMESH/SMESH_subMesh.cxx
index d015be18d..08b033dc9 100644
--- a/src/SMESH/SMESH_subMesh.cxx
+++ b/src/SMESH/SMESH_subMesh.cxx
@@ -647,7 +647,7 @@ SMESH_Hypothesis::Hypothesis_Status
int oldAlgoState = _algoState;
bool modifiedHyp = (event == MODIF_HYP); // if set to true, force event MODIF_ALGO_STATE
- bool needFullClean = false, subMeshesSupported = false;
+ SMESH_Algo* algoRequiringCleaning = 0;
bool isApplicableHyp = IsApplicableHypotesis( anHyp );
@@ -671,7 +671,8 @@ SMESH_Hypothesis::Hypothesis_Status
filter.Or( SMESH_HypoFilter::HasType( algo->GetType()+1 ));
filter.Or( SMESH_HypoFilter::HasType( algo->GetType()+2 ));
if ( SMESH_Algo * curAlgo = (SMESH_Algo*)_father->GetHypothesis(_subShape, filter, true ))
- needFullClean = ( !curAlgo->NeedDiscreteBoundary() );
+ if ( !curAlgo->NeedDiscreteBoundary() )
+ algoRequiringCleaning = curAlgo;
}
}
@@ -702,13 +703,7 @@ SMESH_Hypothesis::Hypothesis_Status
{
algo = dynamic_cast (anHyp);
if (!algo->NeedDiscreteBoundary())
- {
- // clean all mesh in the tree of the current submesh;
- // we must perform it now because later
- // we will have no information about the type of the removed algo
- needFullClean = true;
- subMeshesSupported = algo->SupportSubmeshes();
- }
+ algoRequiringCleaning = algo;
}
}
@@ -990,10 +985,7 @@ SMESH_Hypothesis::Hypothesis_Status
// CLEAN was not called at event REMOVE_ALGO because the algo is not applicable to SOLID.
algo = dynamic_cast (anHyp);
if (!algo->NeedDiscreteBoundary())
- {
- needFullClean = true;
- subMeshesSupported = algo->SupportSubmeshes();
- }
+ algoRequiringCleaning = algo;
algo = GetAlgo();
if (algo == NULL) // no more applying algo on father
{
@@ -1069,10 +1061,10 @@ SMESH_Hypothesis::Hypothesis_Status
}
}
- if ( needFullClean ) {
+ if ( algoRequiringCleaning ) {
// added or removed algo is all-dimensional
ComputeStateEngine( CLEAN );
- cleanDependsOn( subMeshesSupported );
+ cleanDependsOn( algoRequiringCleaning );
ComputeSubMeshStateEngine( CHECK_COMPUTE_STATE );
}
@@ -1174,45 +1166,67 @@ SMESH_Hypothesis::Hypothesis_Status
//================================================================================
/*!
* \brief Remove elements from sub-meshes.
- * \param keepSupportedsubMeshes - if true, the sub-meshes computed using more
- * local algorithms are not cleaned
+ * \param algoRequiringCleaning - an all-dimensional algorithm whose presence
+ * causes the cleaning.
*/
//================================================================================
-void SMESH_subMesh::cleanDependsOn( bool keepSupportedsubMeshes )
+void SMESH_subMesh::cleanDependsOn( SMESH_Algo* algoRequiringCleaning/*=0*/ )
{
- if ( _father->NbNodes() == 0 ) return;
-
SMESH_subMeshIteratorPtr smIt = getDependsOnIterator(false,
/*complexShapeFirst=*/true);
- if ( !keepSupportedsubMeshes )
+ if ( _father->NbNodes() == 0 )
+ {
+ while ( smIt->more() )
+ smIt->next()->ComputeStateEngine(CHECK_COMPUTE_STATE);
+ }
+ else if ( !algoRequiringCleaning || !algoRequiringCleaning->SupportSubmeshes() )
{
while ( smIt->more() )
smIt->next()->ComputeStateEngine(CLEAN);
}
- else
+ else if ( algoRequiringCleaning && algoRequiringCleaning->SupportSubmeshes() )
{
+ SMESHDS_Mesh* meshDS = _father->GetMeshDS();
+
// find sub-meshes to keep elements on
set< SMESH_subMesh* > smToKeep;
- SMESHDS_Mesh* meshDS = _father->GetMeshDS();
+ TopAbs_ShapeEnum prevShapeType = TopAbs_SHAPE;
+ bool toKeepPrevShapeType = false;
while ( smIt->more() )
{
SMESH_subMesh* sm = smIt->next();
- if ( sm->IsEmpty() ) continue;
-
- // look for an algo assigned to sm
- bool algoFound = false;
- const list& hyps = meshDS->GetHypothesis( sm->_subShape );
- list::const_iterator h = hyps.begin();
- for ( ; ( !algoFound && h != hyps.end() ); ++h )
- algoFound = ((*h)->GetType() != SMESHDS_Hypothesis::PARAM_ALGO );
-
- // remember all sub-meshes of sm
- if ( algoFound )
+ sm->ComputeStateEngine(CHECK_COMPUTE_STATE);
+ if ( !sm->IsEmpty() )
{
- SMESH_subMeshIteratorPtr smIt2 = getDependsOnIterator(false,true);
- while ( smIt2->more() )
- smToKeep.insert( smIt2->next() );
+ const bool sameShapeType = ( prevShapeType == sm->GetSubShape().ShapeType() );
+ bool keepSubMeshes = ( sameShapeType && toKeepPrevShapeType );
+ if ( !sameShapeType )
+ {
+ // check if the algo allows presence of global algos of dimension the algo
+ // can generate it-self
+ int shapeDim = SMESH_Gen::GetShapeDim( sm->GetSubShape() );
+ keepSubMeshes = algoRequiringCleaning->NeedLowerHyps( shapeDim );
+ prevShapeType = sm->GetSubShape().ShapeType();
+ toKeepPrevShapeType = keepSubMeshes;
+ }
+ if ( !keepSubMeshes )
+ {
+ // look for an algo assigned to sm
+ bool algoFound = false;
+ const list& hyps = meshDS->GetHypothesis( sm->_subShape );
+ list::const_iterator h = hyps.begin();
+ for ( ; ( !algoFound && h != hyps.end() ); ++h )
+ algoFound = ((*h)->GetType() != SMESHDS_Hypothesis::PARAM_ALGO );
+ keepSubMeshes = algoFound;
+ }
+ // remember all sub-meshes of sm
+ if ( keepSubMeshes )
+ {
+ SMESH_subMeshIteratorPtr smIt2 = getDependsOnIterator(false,true);
+ while ( smIt2->more() )
+ smToKeep.insert( smIt2->next() );
+ }
}
}
// remove elements
@@ -1374,7 +1388,7 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
case MODIF_ALGO_STATE:
algo = GetAlgo();
if (algo && !algo->NeedDiscreteBoundary())
- cleanDependsOn( algo->SupportSubmeshes() ); // clean sub-meshes with event CLEAN
+ cleanDependsOn( algo ); // clean sub-meshes with event CLEAN
if ( _algoState == HYP_OK )
_computeState = READY_TO_COMPUTE;
break;
@@ -1420,7 +1434,7 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
if (algo)
{
if (!algo->NeedDiscreteBoundary())
- cleanDependsOn( algo->SupportSubmeshes() ); // clean sub-meshes with event CLEAN
+ cleanDependsOn( algo ); // clean sub-meshes with event CLEAN
if ( _algoState == HYP_OK )
_computeState = READY_TO_COMPUTE;
}
@@ -1646,7 +1660,7 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
ComputeStateEngine( CLEAN );
algo = GetAlgo();
if (algo && !algo->NeedDiscreteBoundary())
- cleanDependsOn( algo->SupportSubmeshes() ); // clean sub-meshes with event CLEAN
+ cleanDependsOn( algo ); // clean sub-meshes with event CLEAN
break;
case COMPUTE: // nothing to do
break;
@@ -1701,7 +1715,7 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
ComputeStateEngine( CLEAN );
algo = GetAlgo();
if (algo && !algo->NeedDiscreteBoundary())
- cleanDependsOn( algo->SupportSubmeshes() ); // clean sub-meshes with event CLEAN
+ cleanDependsOn( algo ); // clean sub-meshes with event CLEAN
if (_algoState == HYP_OK)
_computeState = READY_TO_COMPUTE;
else
diff --git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx
index a1b3a8568..669ef7164 100644
--- a/src/SMESH/SMESH_subMesh.hxx
+++ b/src/SMESH/SMESH_subMesh.hxx
@@ -273,7 +273,7 @@ protected:
void updateDependantsState(const compute_event theEvent);
void updateSubMeshState(const compute_state theState);
void cleanDependants();
- void cleanDependsOn( bool keepSupportedsubMeshes = false );
+ void cleanDependsOn( SMESH_Algo* algoRequiringCleaning=0 );
void setAlgoState(algo_state state);
/*!
diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx
index 47f42b997..826100787 100644
--- a/src/SMESHGUI/SMESHGUI.cxx
+++ b/src/SMESHGUI/SMESHGUI.cxx
@@ -1256,7 +1256,7 @@
return;
}
case 1132: {
- vtkFloatingPointType color[3];
+ double color[3];
QColor faceColor, edgeColor, nodeColor, elem0dColor, ballColor;
QColor orientationColor, outlineColor, volumeColor;
int deltaF = 0, deltaV = 0;
@@ -1264,8 +1264,8 @@
int ballSize = 1;
int edgeWidth = 1;
int outlineWidth = 1;
- vtkFloatingPointType shrinkCoef = 0.0;
- vtkFloatingPointType orientationScale = 0.0;
+ double shrinkCoef = 0.0;
+ double orientationScale = 0.0;
bool orientation3d = false;
VTK::MarkerType markerType = VTK::MT_NONE;
VTK::MarkerScale markerScale = VTK::MS_NONE;
@@ -5456,7 +5456,7 @@ void SMESHGUI::storeVisualParameters (int savePoint)
ip->setParameter(entry, param, modeStr.toLatin1().data());
// Colors
- vtkFloatingPointType r, g, b;
+ double r, g, b;
int delta;
aSmeshActor->GetSufaceColor(r, g, b, delta);
@@ -5595,8 +5595,8 @@ void SMESHGUI::storeVisualParameters (int savePoint)
typedef struct {
int Id;
vtkIdType Orientation;
- vtkFloatingPointType Distance;
- vtkFloatingPointType Angle[2];
+ double Distance;
+ double Angle[2];
} TPlaneData;
typedef std::list TPlaneDataList;
typedef std::map TPlaneDataMap;
@@ -6171,7 +6171,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
if (val != "Off") {
SMESH::Orientation anOrientation = (SMESH::Orientation)vals[0].toInt();
double aDistance = vals[1].toFloat();
- vtkFloatingPointType anAngle[2];
+ double anAngle[2];
anAngle[0] = vals[2].toFloat();
anAngle[1] = vals[3].toFloat();
diff --git a/src/SMESHGUI/SMESHGUI.h b/src/SMESHGUI/SMESHGUI.h
index f45cfbfb5..bd4b1706a 100644
--- a/src/SMESHGUI/SMESHGUI.h
+++ b/src/SMESHGUI/SMESHGUI.h
@@ -221,7 +221,7 @@ private :
SMESHGUI_ClippingPlaneInfoMap myClippingPlaneInfoMap;
vtkSmartPointer myEventCallbackCommand;
- vtkFloatingPointType myPriority;
+ double myPriority;
};
#endif // SMESHGUI_H
diff --git a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
index ce220e259..87ff73cae 100644
--- a/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
@@ -113,14 +113,14 @@ namespace SMESH
// Create and display actor
myMapper = vtkDataSetMapper::New();
- myMapper->SetInput(myGrid);
+ myMapper->SetInputData(myGrid);
myPreviewActor = SALOME_Actor::New();
myPreviewActor->PickableOff();
myPreviewActor->VisibilityOff();
myPreviewActor->SetMapper(myMapper);
- vtkFloatingPointType anRGB[3];
+ double anRGB[3];
vtkProperty* aProp = vtkProperty::New();
GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
aProp->SetColor( anRGB[0], anRGB[1], anRGB[2] );
@@ -137,10 +137,10 @@ namespace SMESH
// Orientation of faces
myFaceOrientationFilter = SMESH_FaceOrientationFilter::New();
- myFaceOrientationFilter->SetInput(myGrid);
+ myFaceOrientationFilter->SetInputData(myGrid);
myFaceOrientationDataMapper = vtkPolyDataMapper::New();
- myFaceOrientationDataMapper->SetInput(myFaceOrientationFilter->GetOutput());
+ myFaceOrientationDataMapper->SetInputConnection(myFaceOrientationFilter->GetOutputPort());
myFaceOrientation = SALOME_Actor::New();
myFaceOrientation->PickableOff();
diff --git a/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx b/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
index 3a72de152..2f7459ee2 100644
--- a/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
@@ -121,7 +121,7 @@ namespace SMESH
vtkUnstructuredGrid* myGrid;
//vtkProperty* myBackProp, *myProp;
- //vtkFloatingPointType myRGB[3], myBackRGB[3];
+ //double myRGB[3], myBackRGB[3];
SALOME_Actor* myFaceOrientation;
vtkPolyDataMapper* myFaceOrientationDataMapper;
@@ -140,7 +140,7 @@ namespace SMESH
// Create and display actor
myMapper = vtkDataSetMapper::New();
- myMapper->SetInput(myGrid);
+ myMapper->SetInputData(myGrid);
myPreviewActor = SALOME_Actor::New();
myPreviewActor->PickableOff();
@@ -148,7 +148,7 @@ namespace SMESH
myPreviewActor->SetMapper(myMapper);
vtkProperty* myProp = vtkProperty::New();
- vtkFloatingPointType aRGB[3], aBackRGB[3];
+ double aRGB[3], aBackRGB[3];
GetColor( "SMESH", "fill_color", aRGB[0], aRGB[1], aRGB[2], QColor( 0, 170, 255 ) );
myProp->SetColor( aRGB[0], aRGB[1], aRGB[2] );
myPreviewActor->SetProperty( myProp );
@@ -164,10 +164,10 @@ namespace SMESH
// Orientation of faces
myFaceOrientationFilter = SMESH_FaceOrientationFilter::New();
- myFaceOrientationFilter->SetInput(myGrid);
+ myFaceOrientationFilter->SetInputData(myGrid);
myFaceOrientationDataMapper = vtkPolyDataMapper::New();
- myFaceOrientationDataMapper->SetInput(myFaceOrientationFilter->GetOutput());
+ myFaceOrientationDataMapper->SetInputConnection(myFaceOrientationFilter->GetOutputPort());
myFaceOrientation = SALOME_Actor::New();
myFaceOrientation->PickableOff();
diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx b/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx
index c359f18a6..bc097f217 100644
--- a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx
@@ -105,6 +105,7 @@ void SMESH::OrientedPlane::ShallowCopy(SMESH::OrientedPlane* theOrientedPlane)
myPlaneSource->SetOrigin(theOrientedPlane->myPlaneSource->GetOrigin());
myPlaneSource->SetPoint1(theOrientedPlane->myPlaneSource->GetPoint1());
myPlaneSource->SetPoint2(theOrientedPlane->myPlaneSource->GetPoint2());
+ myPlaneSource->Update();
}
SMESH::OrientedPlane::OrientedPlane(SVTK_ViewWindow* theViewWindow):
@@ -132,7 +133,7 @@ void SMESH::OrientedPlane::Init()
// Create and display actor
myMapper = vtkDataSetMapper::New();
- myMapper->SetInput(myPlaneSource->GetOutput());
+ myMapper->SetInputConnection(myPlaneSource->GetOutputPort());
myActor = SALOME_Actor::New();
myActor->VisibilityOff();
@@ -140,7 +141,7 @@ void SMESH::OrientedPlane::Init()
myActor->SetInfinitive(true);
myActor->SetMapper(myMapper);
- vtkFloatingPointType anRGB[3];
+ double anRGB[3];
vtkProperty* aProp = vtkProperty::New();
SMESH::GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
aProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
@@ -208,7 +209,7 @@ SMESH::OrientedPlane* SMESHGUI_ClippingDlg::AddPlane (SMESH::TActorList
SVTK_ViewWindow* theViewWindow,
SMESH::Orientation theOrientation,
double theDistance,
- const vtkFloatingPointType theAngle[2])
+ const double theAngle[2])
{
SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New(theViewWindow);
@@ -218,13 +219,13 @@ SMESH::OrientedPlane* SMESHGUI_ClippingDlg::AddPlane (SMESH::TActorList
aPlane->SetOrientation(theOrientation);
aPlane->SetDistance(theDistance);
- vtkFloatingPointType aNormal[3];
- vtkFloatingPointType aDir[2][3] = {{0, 0, 0}, {0, 0, 0}};
+ double aNormal[3];
+ double aDir[2][3] = {{0, 0, 0}, {0, 0, 0}};
{
static double aCoeff = vtkMath::Pi()/180.0;
- vtkFloatingPointType anU[2] = {cos(aCoeff * theAngle[0]), cos(aCoeff * theAngle[1])};
- vtkFloatingPointType aV[2] = {sqrt(1.0 - anU[0]*anU[0]), sqrt(1.0 - anU[1]*anU[1])};
+ double anU[2] = {cos(aCoeff * theAngle[0]), cos(aCoeff * theAngle[1])};
+ double aV[2] = {sqrt(1.0 - anU[0]*anU[0]), sqrt(1.0 - anU[1]*anU[1])};
aV[0] = theAngle[0] > 0? aV[0]: -aV[0];
aV[1] = theAngle[1] > 0? aV[1]: -aV[1];
@@ -260,8 +261,8 @@ SMESH::OrientedPlane* SMESHGUI_ClippingDlg::AddPlane (SMESH::TActorList
vtkMath::Cross(aNormal,aDir[1],aDir[0]);
}
- vtkFloatingPointType aBounds[6];
- vtkFloatingPointType anOrigin[3];
+ double aBounds[6];
+ double anOrigin[3];
bool anIsOk = false;
if( theActorList.empty() ) {
@@ -284,38 +285,38 @@ SMESH::OrientedPlane* SMESHGUI_ClippingDlg::AddPlane (SMESH::TActorList
aPlane->SetNormal( aNormal );
aPlane->SetOrigin( anOrigin );
- vtkFloatingPointType aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2.,
+ double aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2.,
( aBounds[2] + aBounds[3] ) / 2.,
( aBounds[4] + aBounds[5] ) / 2. };
- vtkFloatingPointType aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) +
+ double aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) +
pow( aBounds[3] - aBounds[2], 2 ) +
pow( aBounds[5] - aBounds[4], 2 ), 0.5 );
- vtkFloatingPointType aDelta[2][3] = {{aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel},
+ double aDelta[2][3] = {{aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel},
{aDir[1][0]*aDel, aDir[1][1]*aDel, aDir[1][2]*aDel}};
- vtkFloatingPointType aParam, aPnt0[3], aPnt1[3], aPnt2[3];
+ double aParam, aPnt0[3], aPnt1[3], aPnt2[3];
- vtkFloatingPointType aPnt01[3] = {aPnt[0] - aDelta[0][0] - aDelta[1][0],
+ double aPnt01[3] = {aPnt[0] - aDelta[0][0] - aDelta[1][0],
aPnt[1] - aDelta[0][1] - aDelta[1][1],
aPnt[2] - aDelta[0][2] - aDelta[1][2]};
- vtkFloatingPointType aPnt02[3] = {aPnt01[0] + aNormal[0],
+ double aPnt02[3] = {aPnt01[0] + aNormal[0],
aPnt01[1] + aNormal[1],
aPnt01[2] + aNormal[2]};
vtkPlane::IntersectWithLine(aPnt01,aPnt02,aNormal,anOrigin,aParam,aPnt0);
- vtkFloatingPointType aPnt11[3] = {aPnt[0] - aDelta[0][0] + aDelta[1][0],
+ double aPnt11[3] = {aPnt[0] - aDelta[0][0] + aDelta[1][0],
aPnt[1] - aDelta[0][1] + aDelta[1][1],
aPnt[2] - aDelta[0][2] + aDelta[1][2]};
- vtkFloatingPointType aPnt12[3] = {aPnt11[0] + aNormal[0],
+ double aPnt12[3] = {aPnt11[0] + aNormal[0],
aPnt11[1] + aNormal[1],
aPnt11[2] + aNormal[2]};
vtkPlane::IntersectWithLine(aPnt11,aPnt12,aNormal,anOrigin,aParam,aPnt1);
- vtkFloatingPointType aPnt21[3] = {aPnt[0] + aDelta[0][0] - aDelta[1][0],
+ double aPnt21[3] = {aPnt[0] + aDelta[0][0] - aDelta[1][0],
aPnt[1] + aDelta[0][1] - aDelta[1][1],
aPnt[2] + aDelta[0][2] - aDelta[1][2]};
- vtkFloatingPointType aPnt22[3] = {aPnt21[0] + aNormal[0],
+ double aPnt22[3] = {aPnt21[0] + aNormal[0],
aPnt21[1] + aNormal[1],
aPnt21[2] + aNormal[2]};
vtkPlane::IntersectWithLine(aPnt21,aPnt22,aNormal,anOrigin,aParam,aPnt2);
@@ -325,6 +326,7 @@ SMESH::OrientedPlane* SMESHGUI_ClippingDlg::AddPlane (SMESH::TActorList
aPlaneSource->SetOrigin(aPnt0[0],aPnt0[1],aPnt0[2]);
aPlaneSource->SetPoint1(aPnt1[0],aPnt1[1],aPnt1[2]);
aPlaneSource->SetPoint2(aPnt2[0],aPnt2[1],aPnt2[2]);
+ aPlaneSource->Update();
SMESH::TActorList::iterator anIter = theActorList.begin();
for ( ; anIter != theActorList.end(); anIter++ )
@@ -898,18 +900,18 @@ void SMESHGUI_ClippingDlg::SetCurrentPlaneParam()
SMESH::TPlaneData aPlaneData = myPlanes[aCurPlaneIndex];
SMESH::OrientedPlane* aPlane = aPlaneData.Plane.GetPointer();
- vtkFloatingPointType aNormal[3];
+ double aNormal[3];
SMESH::Orientation anOrientation;
- vtkFloatingPointType aDir[3][3] = {{0, 0, 0}, {0, 0, 0}};
+ double aDir[3][3] = {{0, 0, 0}, {0, 0, 0}};
{
static double aCoeff = vtkMath::Pi()/180.0;
- vtkFloatingPointType aRot[2] = {getRotation1(), getRotation2()};
+ double aRot[2] = {getRotation1(), getRotation2()};
aPlane->myAngle[0] = aRot[0];
aPlane->myAngle[1] = aRot[1];
- vtkFloatingPointType anU[2] = {cos(aCoeff*aRot[0]), cos(aCoeff*aRot[1])};
- vtkFloatingPointType aV[2] = {sqrt(1.0-anU[0]*anU[0]), sqrt(1.0-anU[1]*anU[1])};
+ double anU[2] = {cos(aCoeff*aRot[0]), cos(aCoeff*aRot[1])};
+ double aV[2] = {sqrt(1.0-anU[0]*anU[0]), sqrt(1.0-anU[1]*anU[1])};
aV[0] = aRot[0] > 0? aV[0]: -aV[0];
aV[1] = aRot[1] > 0? aV[1]: -aV[1];
@@ -956,8 +958,8 @@ void SMESHGUI_ClippingDlg::SetCurrentPlaneParam()
SMESH::TActorList anActorList = aPlaneData.ActorList;
- vtkFloatingPointType aBounds[6];
- vtkFloatingPointType anOrigin[3];
+ double aBounds[6];
+ double anOrigin[3];
bool anIsOk = SMESH::ComputeClippingPlaneParameters( anActorList,
aNormal,
getDistance(),
@@ -970,38 +972,38 @@ void SMESHGUI_ClippingDlg::SetCurrentPlaneParam()
aPlane->SetNormal( aNormal );
aPlane->SetOrigin( anOrigin );
- vtkFloatingPointType aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2.,
+ double aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2.,
( aBounds[2] + aBounds[3] ) / 2.,
( aBounds[4] + aBounds[5] ) / 2. };
- vtkFloatingPointType aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) +
+ double aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) +
pow( aBounds[3] - aBounds[2], 2 ) +
pow( aBounds[5] - aBounds[4], 2 ), 0.5 );
- vtkFloatingPointType aDelta[2][3] = {{aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel},
+ double aDelta[2][3] = {{aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel},
{aDir[1][0]*aDel, aDir[1][1]*aDel, aDir[1][2]*aDel}};
- vtkFloatingPointType aParam, aPnt0[3], aPnt1[3], aPnt2[3];
+ double aParam, aPnt0[3], aPnt1[3], aPnt2[3];
- vtkFloatingPointType aPnt01[3] = {aPnt[0] - aDelta[0][0] - aDelta[1][0],
+ double aPnt01[3] = {aPnt[0] - aDelta[0][0] - aDelta[1][0],
aPnt[1] - aDelta[0][1] - aDelta[1][1],
aPnt[2] - aDelta[0][2] - aDelta[1][2]};
- vtkFloatingPointType aPnt02[3] = {aPnt01[0] + aNormal[0],
+ double aPnt02[3] = {aPnt01[0] + aNormal[0],
aPnt01[1] + aNormal[1],
aPnt01[2] + aNormal[2]};
vtkPlane::IntersectWithLine(aPnt01,aPnt02,aNormal,anOrigin,aParam,aPnt0);
- vtkFloatingPointType aPnt11[3] = {aPnt[0] - aDelta[0][0] + aDelta[1][0],
+ double aPnt11[3] = {aPnt[0] - aDelta[0][0] + aDelta[1][0],
aPnt[1] - aDelta[0][1] + aDelta[1][1],
aPnt[2] - aDelta[0][2] + aDelta[1][2]};
- vtkFloatingPointType aPnt12[3] = {aPnt11[0] + aNormal[0],
+ double aPnt12[3] = {aPnt11[0] + aNormal[0],
aPnt11[1] + aNormal[1],
aPnt11[2] + aNormal[2]};
vtkPlane::IntersectWithLine(aPnt11,aPnt12,aNormal,anOrigin,aParam,aPnt1);
- vtkFloatingPointType aPnt21[3] = {aPnt[0] + aDelta[0][0] - aDelta[1][0],
+ double aPnt21[3] = {aPnt[0] + aDelta[0][0] - aDelta[1][0],
aPnt[1] + aDelta[0][1] - aDelta[1][1],
aPnt[2] + aDelta[0][2] - aDelta[1][2]};
- vtkFloatingPointType aPnt22[3] = {aPnt21[0] + aNormal[0],
+ double aPnt22[3] = {aPnt21[0] + aNormal[0],
aPnt21[1] + aNormal[1],
aPnt21[2] + aNormal[2]};
vtkPlane::IntersectWithLine(aPnt21,aPnt22,aNormal,anOrigin,aParam,aPnt2);
@@ -1011,6 +1013,7 @@ void SMESHGUI_ClippingDlg::SetCurrentPlaneParam()
aPlaneSource->SetOrigin(aPnt0[0],aPnt0[1],aPnt0[2]);
aPlaneSource->SetPoint1(aPnt1[0],aPnt1[1],aPnt1[2]);
aPlaneSource->SetPoint2(aPnt2[0],aPnt2[1],aPnt2[2]);
+ aPlaneSource->Update();
}
if(AutoApplyCheckBox->isChecked())
@@ -1148,8 +1151,8 @@ void SMESHGUI_ClippingDlg::dumpPlaneData() const
for ( ; anIter1 != myPlanes.end(); anIter1++, anId++ ) {
SMESH::TPlaneData aPlaneData = *anIter1;
SMESH::TPlane aPlane = aPlaneData.Plane;
- vtkFloatingPointType* aNormal = aPlane->GetNormal();
- vtkFloatingPointType* anOrigin = aPlane->GetOrigin();
+ double* aNormal = aPlane->GetNormal();
+ double* anOrigin = aPlane->GetOrigin();
printf( "Plane N%d:\n", anId );
printf( " Normal = ( %f, %f, %f )\n", aNormal[0], aNormal[1], aNormal[2] );
printf( " Origin = ( %f, %f, %f )\n", anOrigin[0], anOrigin[1], anOrigin[2] );
diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.h b/src/SMESHGUI/SMESHGUI_ClippingDlg.h
index 3ade2c9c7..297839410 100644
--- a/src/SMESHGUI/SMESHGUI_ClippingDlg.h
+++ b/src/SMESHGUI/SMESHGUI_ClippingDlg.h
@@ -145,7 +145,7 @@ public:
SVTK_ViewWindow* theViewWindow,
SMESH::Orientation theOrientation,
double theDistance,
- const vtkFloatingPointType theAngle[2]);
+ const double theAngle[2]);
protected:
void keyPressEvent( QKeyEvent* );
diff --git a/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx b/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
index 1d5555e7e..c0c296010 100644
--- a/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
@@ -1180,8 +1180,8 @@ void SMESHGUI_BaseComputeOp::onShowBadMesh()
if ( myBadMeshDisplayer ) delete myBadMeshDisplayer;
myBadMeshDisplayer = new SMESHGUI_MeshEditPreview( view );
SMESH::MeshPreviewStruct_var aMeshData = gen->GetBadInputElements(myMesh,curSub);
- vtkFloatingPointType aPointSize = SMESH::GetFloat("SMESH:node_size",3);
- vtkFloatingPointType aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
+ double aPointSize = SMESH::GetFloat("SMESH:node_size",3);
+ double aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
vtkProperty* prop = vtkProperty::New();
prop->SetLineWidth( aLineWidth * 3 );
prop->SetPointSize( aPointSize * 3 );
diff --git a/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.cxx b/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.cxx
index b42d728ae..57b69e7b6 100644
--- a/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.cxx
@@ -27,6 +27,8 @@
//
#include "SMESHGUI_ConvToQuadDlg.h"
+#include "SMESHGUI_ConvToQuadOp.h"
+
// Qt includes
#include
#include
@@ -62,14 +64,17 @@ SMESHGUI_ConvToQuadDlg::SMESHGUI_ConvToQuadDlg()
aBGLayout->setMargin(MARGIN);
aBGLayout->setSpacing(SPACING);
- myRB1 = new QRadioButton( tr( "RADIOBTN_1" ), myBGBox );
- myRB2 = new QRadioButton( tr( "RADIOBTN_2" ), myBGBox );
+ myRB2Lin = new QRadioButton( tr( "RADIOBTN_1" ), myBGBox );
+ myRB2Quad = new QRadioButton( tr( "RADIOBTN_2" ), myBGBox );
+ myRB2BiQua = new QRadioButton( tr( "RADIOBTN_3" ), myBGBox );
- aBGLayout->addWidget(myRB1);
- aBGLayout->addWidget(myRB2);
- myBG->addButton(myRB1, 0);
- myBG->addButton(myRB2, 1);
- myRB1->setChecked( true );
+ aBGLayout->addWidget(myRB2Lin);
+ aBGLayout->addWidget(myRB2Quad);
+ aBGLayout->addWidget(myRB2BiQua);
+ myBG->addButton(myRB2Lin, 0);
+ myBG->addButton(myRB2Quad, 1);
+ myBG->addButton(myRB2BiQua, 2);
+ myRB2Lin->setChecked( true );
myWarning = new QLabel(QString("%1").arg(tr("NON_CONFORM_WARNING")), mainFrame());
@@ -92,6 +97,11 @@ SMESHGUI_ConvToQuadDlg::~SMESHGUI_ConvToQuadDlg()
{
}
+bool SMESHGUI_ConvToQuadDlg::IsBiQuadratic() const
+{
+ return myRB2BiQua->isChecked();
+}
+
bool SMESHGUI_ConvToQuadDlg::IsMediumNdsOnGeom() const
{
return !myMedNdsOnGeom->isChecked();
@@ -133,27 +143,32 @@ bool SMESHGUI_ConvToQuadDlg::isWarningShown()
void SMESHGUI_ConvToQuadDlg::SetEnabledControls( const bool theCheck )
{
//myBGBox->setEnabled( theCheck );
- myRB1->setEnabled( theCheck );
- myRB2->setEnabled( theCheck );
+ myRB2Lin->setEnabled( theCheck );
+ myRB2Quad->setEnabled( theCheck );
+ myRB2BiQua->setEnabled( theCheck );
myMedNdsOnGeom->setEnabled( theCheck );
//setButtonEnabled( theCheck, QtxDialog::OK | QtxDialog::Apply );
}
void SMESHGUI_ConvToQuadDlg::SetEnabledRB( const int idx, const bool theCheck )
{
- if(idx)
+ myRB2Lin ->setEnabled( idx & SMESHGUI_ConvToQuadOp::Linear );
+ myRB2Quad ->setEnabled( idx & SMESHGUI_ConvToQuadOp::Quadratic );
+ myRB2BiQua->setEnabled( idx & SMESHGUI_ConvToQuadOp::BiQuadratic );
+
+ if ( idx & SMESHGUI_ConvToQuadOp::Linear )
{
- myRB2->setEnabled( theCheck );
- myRB1->setEnabled( !theCheck );
- myRB1->setChecked( true );
+ myRB2Lin->setChecked( true );
+ myRB2Quad->setChecked( false );
}
else
{
- myRB1->setEnabled( theCheck );
- myRB2->setEnabled( !theCheck );
- myRB2->setChecked( true );
+ myRB2Lin->setChecked( false );
+ myRB2Quad->setChecked( true );
}
+ myRB2BiQua->setChecked( false );
+
+ myMedNdsOnGeom->setEnabled( theCheck );
+
emit onClicked( myBG->checkedId() );
}
-
-
diff --git a/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.h b/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.h
index 660dbc731..cc4a26c86 100644
--- a/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.h
+++ b/src/SMESHGUI/SMESHGUI_ConvToQuadDlg.h
@@ -56,6 +56,7 @@ public:
int CurrentRB(); //returns the ID of the selected toggle button
void ShowWarning(bool);
bool isWarningShown();
+ bool IsBiQuadratic() const;
signals:
void onClicked( int );
@@ -64,8 +65,9 @@ private:
QCheckBox* myMedNdsOnGeom;
QGroupBox* myBGBox;
QButtonGroup* myBG;
- QRadioButton* myRB1;
- QRadioButton* myRB2;
+ QRadioButton* myRB2Lin;
+ QRadioButton* myRB2Quad;
+ QRadioButton* myRB2BiQua;
QLabel* myWarning;
};
diff --git a/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx b/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
index eac1ae86c..42dad5775 100644
--- a/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
+++ b/src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
@@ -142,19 +142,10 @@ void SMESHGUI_ConvToQuadOp::selectionDone()
myDlg->setButtonEnabled( false, QtxDialog::OK | QtxDialog::Apply );
return;
}
- MeshType meshType = ConsistMesh( idSource );
- if( meshType == SMESHGUI_ConvToQuadOp::Quadratic )
- {
- myDlg->SetEnabledRB( 0, false );
- }
- else if( meshType == SMESHGUI_ConvToQuadOp::Linear )
- {
- myDlg->SetEnabledRB( 1, false );
- }
- else
- {
- myDlg->SetEnabledControls( true );
- }
+ SMESH::SMESH_Mesh_var mesh = idSource->GetMesh();
+ bool hasGeom = mesh->HasShapeToMesh();
+ MeshDestinationType meshTgtType = DestinationMesh( idSource );
+ myDlg->SetEnabledRB( meshTgtType, hasGeom && ( meshTgtType & ( BiQuadratic | Quadratic )));
// show warning on non-conformal result mesh
if ( ! idSource->_is_nil() )
@@ -166,8 +157,9 @@ void SMESHGUI_ConvToQuadOp::selectionDone()
{
SMESH::SMESH_Mesh_var mesh = idSource->GetMesh();
idSource = SMESH::SMESH_IDSource::_narrow( mesh );
- MeshType fullMeshType = ConsistMesh( idSource );
- toShow = ( fullMeshType != Comp );
+ bool isMixOrder;
+ DestinationMesh( idSource, &isMixOrder );
+ toShow = !isMixOrder;
}
myDlg->ShowWarning( toShow );
}
@@ -241,17 +233,20 @@ bool SMESHGUI_ConvToQuadOp::onApply()
SMESH::SMESH_MeshEditor_var aEditor = mesh->GetMeshEditor();
aResult = true;
SMESH::SMESH_Mesh_var sourceMesh = SMESH::SObjectToInterface( pObj );
- if( !myDlg->CurrentRB() )
+ if( myDlg->CurrentRB()==1 || myDlg->CurrentRB()==2)
{
bool force3d = true;
if( myDlg->IsEnabledCheck() )
force3d = myDlg->IsMediumNdsOnGeom();
-
- if ( sourceMesh->_is_nil() )
- aEditor->ConvertToQuadraticObject( force3d, idSource );
- else
- aEditor->ConvertToQuadratic( force3d );
-
+ bool theToBiQuad = myDlg->IsBiQuadratic();
+ if ( sourceMesh->_is_nil() ) {
+ if ( theToBiQuad ) aEditor->ConvertToBiQuadratic ( force3d, idSource );
+ else aEditor->ConvertToQuadraticObject( force3d, idSource );
+ }
+ else {
+ if ( theToBiQuad ) aEditor->ConvertToBiQuadratic( force3d, sourceMesh );
+ else aEditor->ConvertToQuadratic ( force3d );
+ }
if ( !force3d )
{
SMESH::ComputeError_var error = aEditor->GetLastError();
@@ -259,9 +254,9 @@ bool SMESHGUI_ConvToQuadOp::onApply()
{
if ( myBadElemsPreview ) delete myBadElemsPreview; // viewWindow may change
myBadElemsPreview = new SMESHGUI_MeshEditPreview( viewWindow() );
-
- vtkFloatingPointType aPointSize = SMESH::GetFloat("SMESH:node_size",3);
- vtkFloatingPointType aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
+
+ double aPointSize = SMESH::GetFloat("SMESH:node_size",3);
+ double aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
vtkProperty* prop = vtkProperty::New();
prop->SetLineWidth( aLineWidth * 3 );
prop->SetPointSize( aPointSize * 3 );
@@ -325,12 +320,23 @@ void SMESHGUI_ConvToQuadOp::onWarningWinFinished()
//================================================================================
/*! ConsistMesh
- * Determines, what elements this mesh contains.
+ * Determines, what elements this mesh does not contain.
*/
//================================================================================
-SMESHGUI_ConvToQuadOp::MeshType SMESHGUI_ConvToQuadOp::ConsistMesh( const SMESH::SMESH_IDSource_var& idSource) const
+
+SMESHGUI_ConvToQuadOp::MeshDestinationType
+SMESHGUI_ConvToQuadOp::DestinationMesh( const SMESH::SMESH_IDSource_var& idSource,
+ bool* isMixOrder) const
{
SMESH::long_array_var nbElemOfType = idSource->GetMeshInfo();
+
+ bool hasBiQuad = ( nbElemOfType[SMDSEntity_BiQuad_Quadrangle ] ||
+ nbElemOfType[SMDSEntity_TriQuad_Hexa ] );
+ bool hasLinStruct = ( nbElemOfType[SMDSEntity_Quadrangle ] ||
+ nbElemOfType[SMDSEntity_Hexa ] );
+ bool hasQuadStruct = ( nbElemOfType[SMDSEntity_Quad_Quadrangle ] ||
+ nbElemOfType[SMDSEntity_Quad_Hexa ] );
+
bool hasQuad = ( nbElemOfType[SMDSEntity_Quad_Edge ] ||
nbElemOfType[SMDSEntity_Quad_Triangle ] ||
nbElemOfType[SMDSEntity_Quad_Quadrangle] ||
@@ -347,9 +353,25 @@ SMESHGUI_ConvToQuadOp::MeshType SMESHGUI_ConvToQuadOp::ConsistMesh( const SMESH:
nbElemOfType[SMDSEntity_Pyramid ] ||
nbElemOfType[SMDSEntity_Penta ] );
- if ( hasQuad && hasLin )
- return Comp;
- return hasQuad ? Quadratic : Linear;
+ int tgtType = 0;
+ if ( hasBiQuad )
+ tgtType |= ( Quadratic | Linear );
+ if ( hasLinStruct )
+ tgtType |= ( BiQuadratic | Quadratic );
+ if ( hasQuadStruct )
+ tgtType |= ( BiQuadratic | Linear );
+ if ( hasQuad )
+ tgtType |= Linear;
+ if ( hasLin )
+ tgtType |= Quadratic;
+
+ if ( tgtType == 0 )
+ tgtType = Quadratic;
+
+ if ( isMixOrder )
+ *isMixOrder = ( hasLin && ( hasQuad || hasBiQuad ));
+
+ return MeshDestinationType( tgtType );
}
void SMESHGUI_ConvToQuadOp::ConnectRadioButtons( int id )
@@ -364,7 +386,7 @@ void SMESHGUI_ConvToQuadOp::ConnectRadioButtons( int id )
bool hasGeom = mesh->HasShapeToMesh();
- if( id || !hasGeom )
+ if( id==0 || !hasGeom )
myDlg->SetEnabledCheck( false );
else
myDlg->SetEnabledCheck( true );
diff --git a/src/SMESHGUI/SMESHGUI_ConvToQuadOp.h b/src/SMESHGUI/SMESHGUI_ConvToQuadOp.h
index ba30b15e1..8573bf49e 100644
--- a/src/SMESHGUI/SMESHGUI_ConvToQuadOp.h
+++ b/src/SMESHGUI/SMESHGUI_ConvToQuadOp.h
@@ -44,7 +44,7 @@ class SMESHGUI_EXPORT SMESHGUI_ConvToQuadOp : public SMESHGUI_SelectionOp
Q_OBJECT
public:
- enum MeshType{ Comp = 0, Linear, Quadratic };
+ enum MeshDestinationType { Linear = 1, Quadratic = 2, BiQuadratic = 4 };
public:
SMESHGUI_ConvToQuadOp();
@@ -56,7 +56,8 @@ protected:
virtual void startOperation();
virtual void selectionDone();
virtual SUIT_SelectionFilter* createFilter( const int ) const;
- MeshType ConsistMesh( const SMESH::SMESH_IDSource_var& ) const;
+ MeshDestinationType DestinationMesh( const SMESH::SMESH_IDSource_var& ,
+ bool* isMixOrder = 0) const;
protected slots:
virtual bool onApply();
diff --git a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
index 8fdd03e6f..4d0a49701 100644
--- a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
@@ -106,7 +106,7 @@ namespace SMESH
// Create and display actor
myMapper = vtkDataSetMapper::New();
- myMapper->SetInput( myGrid );
+ myMapper->SetInputData( myGrid );
myPreviewActor = SALOME_Actor::New();
myPreviewActor->PickableOff();
@@ -114,12 +114,12 @@ namespace SMESH
myPreviewActor->SetMapper( myMapper );
myPreviewActor->SetRepresentation( 3 );
- vtkFloatingPointType anRGB[3];
+ double anRGB[3];
vtkProperty* aProp = vtkProperty::New();
GetColor( "SMESH", "selection_element_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
aProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
myPreviewActor->SetProperty( aProp );
- vtkFloatingPointType aFactor,aUnits;
+ double aFactor,aUnits;
myPreviewActor->SetResolveCoincidentTopology(true);
myPreviewActor->GetPolygonOffsetParameters(aFactor,aUnits);
myPreviewActor->SetPolygonOffsetParameters(aFactor,0.2*aUnits);
diff --git a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx
index f1097018a..1ea95a44a 100755
--- a/src/SMESHGUI/SMESHGUI_FilterDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_FilterDlg.cxx
@@ -1137,6 +1137,7 @@ bool SMESHGUI_FilterTable::IsValid (const bool theMess, const int theEntityType)
aCriterion == SMESH::FT_BelongToCylinder ||
aCriterion == SMESH::FT_BelongToGenSurface ||
aCriterion == SMESH::FT_ElemGeomType ||
+ aCriterion == SMESH::FT_EntityType ||
aCriterion == SMESH::FT_CoplanarFaces ||
aCriterion == SMESH::FT_LyingOnGeom)
{
@@ -1253,6 +1254,8 @@ void SMESHGUI_FilterTable::GetCriterion (const int theRow,
}
else if ( aCriterionType == SMESH::FT_ElemGeomType )
theCriterion.Threshold = (double)((ComboItem*)aTable->item(theRow, 2))->value();
+ else if ( aCriterionType == SMESH::FT_EntityType )
+ theCriterion.Threshold = (double)((ComboItem*)aTable->item(theRow, 2))->value();
else if ( aCriterionType == SMESH::FT_CoplanarFaces )
theCriterion.ThresholdID = aTable->text(theRow, 2).toLatin1().constData();
else if ( aCriterionType != SMESH::FT_RangeOfIds &&
@@ -1329,6 +1332,11 @@ void SMESHGUI_FilterTable::SetCriterion (const int theRow,
ComboItem* typeBox = (ComboItem*)aTable->item(theRow, 2);
typeBox->setValue( (int)(theCriterion.Threshold + 0.5) );
}
+ else if (theCriterion.Type == SMESH::FT_EntityType )
+ {
+ ComboItem* typeBox = (ComboItem*)aTable->item(theRow, 2);
+ typeBox->setValue( (int)(theCriterion.Threshold + 0.5) );
+ }
else if (theCriterion.Type == SMESH::FT_CoplanarFaces )
{
aTable->item( theRow, 2 )->setText( QString( theCriterion.ThresholdID ) );
@@ -1651,10 +1659,40 @@ static QList geomTypes( const int theType )
return typeIds;
}
+//=======================================================================
+// name : entityTypes
+// Purpose : returns available entity types of elements
+//=======================================================================
+
+static QList entityTypes( const int theType )
+{
+ QList typeIds;
+
+ if ( theType == SMESH::EDGE )
+ {
+ typeIds.append( SMDSEntity_Edge );
+ typeIds.append( SMDSEntity_Quad_Edge );
+ }
+ if ( theType == SMESH::FACE )
+ {
+ typeIds.append( SMDSEntity_Quadrangle );
+ typeIds.append( SMDSEntity_Quad_Quadrangle );
+ typeIds.append( SMDSEntity_BiQuad_Quadrangle );
+ }
+ if ( theType == SMESH::VOLUME )
+ {
+ typeIds.append( SMDSEntity_Hexa );
+ typeIds.append( SMDSEntity_Quad_Hexa );
+ typeIds.append( SMDSEntity_TriQuad_Hexa );
+ }
+ return typeIds;
+}
+
//=======================================================================
// name : SMESHGUI_FilterTable::onCriterionChanged()
// Purpose : Provides reaction on change of criterion
//=======================================================================
+
void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, const int entityType)
{
int aType = entityType == -1 ? GetType() : entityType;
@@ -1689,8 +1727,8 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
aCriterionType == SMESH::FT_Length2D ||
aCriterionType == SMESH::FT_MaxElementLength2D ||
aCriterionType == SMESH::FT_MaxElementLength3D ||
- aCriterionType == SMESH::FT_Volume3D;
-
+ aCriterionType == SMESH::FT_Volume3D ||
+ aCriterionType == SMESH::FT_EntityType;
int aPrecision = 0;
if ( anIsDoubleCriterion ) {
const char* aPrecisionType = getPrecision( aCriterionType );
@@ -1710,6 +1748,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
if ( (aCriterionType != SMESH::FT_GroupColor && clrBtn) ||
(aCriterionType != SMESH::FT_ElemGeomType && isComboItem) ||
+ (aCriterionType != SMESH::FT_EntityType && isComboItem) ||
(aCriterionType != SMESH::FT_MultiConnection && isIntSpinItem) ||
(!anIsDoubleCriterion && isDoubleSpinItem) ||
anIsPrecisionChanged )
@@ -1722,6 +1761,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
}
if ( (aCriterionType == SMESH::FT_GroupColor && !clrBtn) ||
(aCriterionType == SMESH::FT_ElemGeomType && !isComboItem) ||
+ (aCriterionType == SMESH::FT_EntityType && !isComboItem) ||
(aCriterionType == SMESH::FT_MultiConnection && !isIntSpinItem) ||
(anIsDoubleCriterion && !isDoubleSpinItem) ||
anIsPrecisionChanged )
@@ -1742,6 +1782,18 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
ComboItem* typeBox = new ComboItem( typeNames );
aTable->setItem( row, 2, typeBox );
}
+ else if ( aCriterionType == SMESH::FT_EntityType ) {
+ QList typeIds = entityTypes( aType );
+ QMap typeNames;
+ QList::const_iterator anIter = typeIds.begin();
+ for ( int i = 0; anIter != typeIds.end(); ++anIter, ++i)
+ {
+ QString typeKey = QString( "ENTITY_TYPE_%1" ).arg( *anIter );
+ typeNames[ *anIter ] = tr( typeKey.toLatin1().data() );
+ }
+ ComboItem* typeBox = new ComboItem( typeNames );
+ aTable->setItem( row, 2, typeBox );
+ }
else if ( aCriterionType == SMESH::FT_MultiConnection ) {
IntSpinItem* intSpin = new IntSpinItem( 0 );
aTable->setItem( row, 2, intSpin );
@@ -1771,7 +1823,8 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
aCriterionType == SMESH::FT_LinearOrQuadratic ||
aCriterionType == SMESH::FT_GroupColor ||
aCriterionType == SMESH::FT_ElemGeomType ||
- aCriterionType == SMESH::FT_CoplanarFaces
+ aCriterionType == SMESH::FT_CoplanarFaces ||
+ aCriterionType == SMESH::FT_EntityType
)
{
bool isSignalsBlocked = aTable->signalsBlocked();
@@ -1783,6 +1836,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
aTable->item(row, 2)->setText( QString("") );
aTable->setEditable(aCriterionType == SMESH::FT_GroupColor ||
aCriterionType == SMESH::FT_ElemGeomType ||
+ aCriterionType == SMESH::FT_EntityType ||
aCriterionType == SMESH::FT_CoplanarFaces, row, 2);
aTable->blockSignals( isSignalsBlocked );
}
@@ -1802,7 +1856,8 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
aTable->setEditable(true, row, 2);
}
else if (aCriterionType == SMESH::FT_GroupColor ||
- aCriterionType == SMESH::FT_ElemGeomType)
+ aCriterionType == SMESH::FT_ElemGeomType ||
+ aCriterionType == SMESH::FT_EntityType)
{
if (!aTable->isEditable(row, 2))
aTable->setEditable(true, row, 2);
@@ -2034,6 +2089,7 @@ const QMap& SMESHGUI_FilterTable::getCriteria (const int theType)
aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR");
aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE");
aCriteria[ SMESH::FT_EqualEdges ] = tr("EQUAL_EDGE");
+ aCriteria[ SMESH::FT_EntityType ] = tr("ENTITY_TYPE");
}
return aCriteria;
}
@@ -2066,6 +2122,7 @@ const QMap& SMESHGUI_FilterTable::getCriteria (const int theType)
aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE");
aCriteria[ SMESH::FT_CoplanarFaces ] = tr("COPLANAR_FACES");
aCriteria[ SMESH::FT_EqualFaces ] = tr("EQUAL_FACE");
+ aCriteria[ SMESH::FT_EntityType ] = tr("ENTITY_TYPE");
}
return aCriteria;
}
@@ -2087,6 +2144,7 @@ const QMap& SMESHGUI_FilterTable::getCriteria (const int theType)
aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR");
aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE");
aCriteria[ SMESH::FT_EqualVolumes ] = tr("EQUAL_VOLUME");
+ aCriteria[ SMESH::FT_EntityType ] = tr("ENTITY_TYPE");
}
return aCriteria;
}
diff --git a/src/SMESHGUI/SMESHGUI_Measurements.cxx b/src/SMESHGUI/SMESHGUI_Measurements.cxx
index ff9394490..13a2092f8 100644
--- a/src/SMESHGUI/SMESHGUI_Measurements.cxx
+++ b/src/SMESHGUI/SMESHGUI_Measurements.cxx
@@ -362,7 +362,7 @@ void SMESHGUI_MinDistance::createPreview( double x1, double y1, double z1, doubl
aCells->Delete();
// create actor
vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
- aMapper->SetInput( aGrid );
+ aMapper->SetInputData( aGrid );
aGrid->Delete();
myPreview = SALOME_Actor::New();
myPreview->PickableOff();
@@ -879,7 +879,7 @@ void SMESHGUI_BoundingBox::createPreview( double minX, double maxX, double minY,
aCells->Delete();
// create actor
vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
- aMapper->SetInput( aGrid );
+ aMapper->SetInputData( aGrid );
aGrid->Delete();
myPreview = SALOME_Actor::New();
myPreview->PickableOff();
diff --git a/src/SMESHGUI/SMESHGUI_MergeDlg.cxx b/src/SMESHGUI/SMESHGUI_MergeDlg.cxx
index 82884701f..8a615d35e 100644
--- a/src/SMESHGUI/SMESHGUI_MergeDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_MergeDlg.cxx
@@ -124,7 +124,7 @@ namespace SMESH
// Create and display actor
vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
- aMapper->SetInput( myIdGrid );
+ aMapper->SetInputData( myIdGrid );
myIdActor = SALOME_Actor::New();
myIdActor->SetInfinitive(true);
@@ -140,16 +140,16 @@ namespace SMESH
myPointsNumDataSet = vtkUnstructuredGrid::New();
myPtsMaskPoints = vtkMaskPoints::New();
- myPtsMaskPoints->SetInput(myPointsNumDataSet);
+ myPtsMaskPoints->SetInputData(myPointsNumDataSet);
myPtsMaskPoints->SetOnRatio(1);
myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
- myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
+ myPtsSelectVisiblePoints->SetInputConnection(myPtsMaskPoints->GetOutputPort());
myPtsSelectVisiblePoints->SelectInvisibleOff();
myPtsSelectVisiblePoints->SetTolerance(0.1);
myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
- myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
+ myPtsLabeledDataMapper->SetInputConnection(myPtsSelectVisiblePoints->GetOutputPort());
#if (VTK_XVERSION < 0x050200)
myPtsLabeledDataMapper->SetLabelFormat("%g");
#endif
@@ -250,7 +250,7 @@ namespace SMESH
anArray->SetValue( i, myIDs[i] );
aDataSet->GetPointData()->SetScalars( anArray );
anArray->Delete();
- myPtsMaskPoints->SetInput( aDataSet );
+ myPtsMaskPoints->SetInputData( aDataSet );
myPointLabels->SetVisibility( theIsActorVisible );
}
else {
diff --git a/src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx b/src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx
index ac71ddbc4..25cae2f0d 100644
--- a/src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx
+++ b/src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx
@@ -66,19 +66,19 @@ SMESHGUI_MeshEditPreview::SMESHGUI_MeshEditPreview(SVTK_ViewWindow* theViewWindo
// Create and display actor
vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
- aMapper->SetInput( myGrid );
+ aMapper->SetInputData( myGrid );
myPreviewActor = SALOME_Actor::New();
myPreviewActor->SetInfinitive(true);
myPreviewActor->VisibilityOn();
myPreviewActor->PickableOff();
- vtkFloatingPointType aFactor,aUnits;
+ double aFactor,aUnits;
myPreviewActor->SetResolveCoincidentTopology(true);
myPreviewActor->GetPolygonOffsetParameters(aFactor,aUnits);
myPreviewActor->SetPolygonOffsetParameters(aFactor,0.2*aUnits);
- vtkFloatingPointType anRGB[3];
+ double anRGB[3];
SMESH::GetColor( "SMESH", "selection_element_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
SetColor( anRGB[0], anRGB[1], anRGB[2] );
diff --git a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx
index 48b0a82b9..a61175651 100755
--- a/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx
@@ -948,7 +948,7 @@ void SMESHGUI_MeshPatternDlg::displayPreview()
// Create and display actor
vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
- aMapper->SetInput(aGrid);
+ aMapper->SetInputData(aGrid);
myPreviewActor = SALOME_Actor::New();
myPreviewActor->PickableOff();
diff --git a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
index 1d3a35fc3..c4fabd9f8 100755
--- a/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
@@ -1433,7 +1433,7 @@ void SMESHGUI_CuttingOfQuadsDlg::displayPreview()
// Create and display actor
vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
- aMapper->SetInput(aGrid);
+ aMapper->SetInputData(aGrid);
myPreviewActor = SALOME_Actor::New();
myPreviewActor->PickableOff();
diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx
index e4010b893..2f9c03895 100644
--- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx
@@ -173,7 +173,7 @@ namespace SMESH
// Create and display actor
myMapper = vtkDataSetMapper::New();
- myMapper->SetInput( aGrid );
+ myMapper->SetInputData( aGrid );
aGrid->Delete();
myPreviewActor = SALOME_Actor::New();
@@ -185,11 +185,11 @@ namespace SMESH
vtkProperty* aProp = vtkProperty::New();
aProp->SetRepresentationToPoints();
- vtkFloatingPointType anRGB[3];
+ double anRGB[3];
GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 0 ) );
aProp->SetColor( anRGB[0], anRGB[1], anRGB[2] );
- vtkFloatingPointType aPointSize = GetFloat( "SMESH:node_size", 3 );
+ double aPointSize = GetFloat( "SMESH:node_size", 3 );
aProp->SetPointSize( aPointSize );
myPreviewActor->SetProperty( aProp );
diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx
index bdb954b6b..056b89554 100644
--- a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx
+++ b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx
@@ -649,7 +649,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged()
if ( myScalarBarActor->GetLookupTable() ) {
vtkLookupTable* aLookupTable = static_cast(myScalarBarActor->GetLookupTable());
- vtkFloatingPointType *range = aLookupTable->GetRange();
+ double *range = aLookupTable->GetRange();
myMinEdit->setText( QString::number( range[0],'g',12 ) );
myMaxEdit->setText( QString::number( range[1],'g',12 ) );
myLogarithmicCheck->setChecked(aLookupTable->GetScale() == VTK_SCALE_LOG10);
@@ -657,7 +657,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged()
}
vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty();
- vtkFloatingPointType aTColor[3];
+ double aTColor[3];
aTitleTextPrp->GetColor( aTColor );
myTitleColorBtn->setColor( QColor( (int)( aTColor[0]*255 ), (int)( aTColor[1]*255 ), (int)( aTColor[2]*255 ) ) );
myTitleFontCombo->setCurrentIndex( aTitleTextPrp->GetFontFamily() );
@@ -666,7 +666,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged()
myTitleShadowCheck->setChecked( aTitleTextPrp->GetShadow() );
vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty();
- vtkFloatingPointType aLColor[3];
+ double aLColor[3];
aLabelsTextPrp->GetColor( aLColor );
myLabelsColorBtn->setColor( QColor( (int)( aLColor[0]*255 ), (int)( aLColor[1]*255 ), (int)( aLColor[2]*255 ) ) );
myLabelsFontCombo->setCurrentIndex( aLabelsTextPrp->GetFontFamily() );
diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx
index 229d7f809..1bd966e37 100644
--- a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx
+++ b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx
@@ -961,7 +961,7 @@ namespace SMESH
SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( theModule );
if ( !mgr ) return;
//
- vtkFloatingPointType anRGBNd[3] = {1,1,1};
+ double anRGBNd[3] = {1,1,1};
SMESH::GetColor( "SMESH", "numbering_node_color", anRGBNd[0], anRGBNd[1], anRGBNd[2], QColor( 255, 255, 255 ) );
int aSizeNd = 10;
SMESH::LabelFont aFamilyNd = SMESH::FntTimes;
@@ -980,7 +980,7 @@ namespace SMESH
aSizeNd = f.pointSize();
}
//
- vtkFloatingPointType anRGBEl[3] = {0,1,0};
+ double anRGBEl[3] = {0,1,0};
SMESH::GetColor( "SMESH", "numbering_elem_color", anRGBEl[0], anRGBEl[1], anRGBEl[2], QColor( 0, 255, 0 ) );
int aSizeEl = 12;
SMESH::LabelFont aFamilyEl = SMESH::FntTimes;
@@ -1323,21 +1323,21 @@ namespace SMESH
//----------------------------------------------------------------------------
// internal function
- void ComputeBoundsParam( vtkFloatingPointType theBounds[6],
- vtkFloatingPointType theDirection[3],
- vtkFloatingPointType theMinPnt[3],
- vtkFloatingPointType& theMaxBoundPrj,
- vtkFloatingPointType& theMinBoundPrj )
+ void ComputeBoundsParam( double theBounds[6],
+ double theDirection[3],
+ double theMinPnt[3],
+ double& theMaxBoundPrj,
+ double& theMinBoundPrj )
{
//Enlarge bounds in order to avoid conflicts of precision
for(int i = 0; i < 6; i += 2){
static double EPS = 1.0E-3;
- vtkFloatingPointType aDelta = (theBounds[i+1] - theBounds[i])*EPS;
+ double aDelta = (theBounds[i+1] - theBounds[i])*EPS;
theBounds[i] -= aDelta;
theBounds[i+1] += aDelta;
}
- vtkFloatingPointType aBoundPoints[8][3] = { {theBounds[0],theBounds[2],theBounds[4]},
+ double aBoundPoints[8][3] = { {theBounds[0],theBounds[2],theBounds[4]},
{theBounds[1],theBounds[2],theBounds[4]},
{theBounds[0],theBounds[3],theBounds[4]},
{theBounds[1],theBounds[3],theBounds[4]},
@@ -1350,7 +1350,7 @@ namespace SMESH
theMaxBoundPrj = vtkMath::Dot(theDirection,aBoundPoints[aMaxId]);
theMinBoundPrj = theMaxBoundPrj;
for(int i = 1; i < 8; i++){
- vtkFloatingPointType aTmp = vtkMath::Dot(theDirection,aBoundPoints[i]);
+ double aTmp = vtkMath::Dot(theDirection,aBoundPoints[i]);
if(theMaxBoundPrj < aTmp){
theMaxBoundPrj = aTmp;
aMaxId = i;
@@ -1359,43 +1359,43 @@ namespace SMESH
theMinBoundPrj = aTmp;
}
}
- vtkFloatingPointType *aMinPnt = aBoundPoints[aMaxId];
+ double *aMinPnt = aBoundPoints[aMaxId];
theMinPnt[0] = aMinPnt[0];
theMinPnt[1] = aMinPnt[1];
theMinPnt[2] = aMinPnt[2];
}
// internal function
- void DistanceToPosition( vtkFloatingPointType theBounds[6],
- vtkFloatingPointType theDirection[3],
- vtkFloatingPointType theDist,
- vtkFloatingPointType thePos[3] )
+ void DistanceToPosition( double theBounds[6],
+ double theDirection[3],
+ double theDist,
+ double thePos[3] )
{
- vtkFloatingPointType aMaxBoundPrj, aMinBoundPrj, aMinPnt[3];
+ double aMaxBoundPrj, aMinBoundPrj, aMinPnt[3];
ComputeBoundsParam(theBounds,theDirection,aMinPnt,aMaxBoundPrj,aMinBoundPrj);
- vtkFloatingPointType aLength = (aMaxBoundPrj-aMinBoundPrj)*theDist;
+ double aLength = (aMaxBoundPrj-aMinBoundPrj)*theDist;
thePos[0] = aMinPnt[0]-theDirection[0]*aLength;
thePos[1] = aMinPnt[1]-theDirection[1]*aLength;
thePos[2] = aMinPnt[2]-theDirection[2]*aLength;
}
// internal function (currently unused, left just in case)
- void PositionToDistance( vtkFloatingPointType theBounds[6],
- vtkFloatingPointType theDirection[3],
- vtkFloatingPointType thePos[3],
- vtkFloatingPointType& theDist )
+ void PositionToDistance( double theBounds[6],
+ double theDirection[3],
+ double thePos[3],
+ double& theDist )
{
- vtkFloatingPointType aMaxBoundPrj, aMinBoundPrj, aMinPnt[3];
+ double aMaxBoundPrj, aMinBoundPrj, aMinPnt[3];
ComputeBoundsParam(theBounds,theDirection,aMinPnt,aMaxBoundPrj,aMinBoundPrj);
- vtkFloatingPointType aPrj = vtkMath::Dot(theDirection,thePos);
+ double aPrj = vtkMath::Dot(theDirection,thePos);
theDist = (aPrj-aMinBoundPrj)/(aMaxBoundPrj-aMinBoundPrj);
}
bool ComputeClippingPlaneParameters( std::list theActorList,
- vtkFloatingPointType theNormal[3],
- vtkFloatingPointType theDist,
- vtkFloatingPointType theBounds[6],
- vtkFloatingPointType theOrigin[3] )
+ double theNormal[3],
+ double theDist,
+ double theBounds[6],
+ double theOrigin[3] )
{
bool anIsOk = false;
theBounds[0] = theBounds[2] = theBounds[4] = VTK_DOUBLE_MAX;
@@ -1404,7 +1404,7 @@ namespace SMESH
for( ; anIter != theActorList.end(); anIter++ ) {
if( vtkActor* aVTKActor = *anIter ) {
if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) {
- vtkFloatingPointType aBounds[6];
+ double aBounds[6];
anActor->GetUnstructuredGrid()->GetBounds( aBounds );
theBounds[0] = std::min( theBounds[0], aBounds[0] );
theBounds[1] = std::max( theBounds[1], aBounds[1] );
diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.h b/src/SMESHGUI/SMESHGUI_VTKUtils.h
index b226f7767..e571f30bb 100644
--- a/src/SMESHGUI/SMESHGUI_VTKUtils.h
+++ b/src/SMESHGUI/SMESHGUI_VTKUtils.h
@@ -202,10 +202,10 @@ SMESHGUI_EXPORT
//----------------------------------------------------------------------------
SMESHGUI_EXPORT
bool ComputeClippingPlaneParameters( std::list theActorList,
- vtkFloatingPointType theNormal[3],
- vtkFloatingPointType theDist,
- vtkFloatingPointType theBounds[6],
- vtkFloatingPointType theOrigin[3] );
+ double theNormal[3],
+ double theDist,
+ double theBounds[6],
+ double theOrigin[3] );
SMESHGUI_EXPORT
void RemoveVisualObjectWithActors( const char* theEntry, bool fromAllViews = false );
};
diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts
index 5e82b9bb1..ebd89c1da 100644
--- a/src/SMESHGUI/SMESH_msg_en.ts
+++ b/src/SMESHGUI/SMESH_msg_en.ts
@@ -4634,13 +4634,17 @@ Do you want to restore original submesh priority?
RADIOBTN_1
- Convert to quadratic
+ Convert to linearRADIOBTN_2
- Convert from quadratic
+ Convert to quadratic
-
+
+ RADIOBTN_3
+ Convert to bi-quadratic
+
+ NON_CONFORM_WARNINGWarning: mesh can become non-conformal
@@ -5196,6 +5200,10 @@ Please check input data and try again
COPLANAR_FACESCoplanar faces
+
+ NUMBEROFNODESINELEMENT
+ Number Of Nodes In Element
+ COPY_FROMCopy from...
@@ -5216,10 +5224,6 @@ Please check input data and try again
EDGESEdges
-
- ENTITY_TYPE
- Entity type
- EQUAL_TOEqual to
@@ -5367,6 +5371,98 @@ Please enter correct value and try again
ELEMENTSElements
+
+ ENTITY_TYPE
+ Entity type
+
+
+ ENTITY_TYPE_0
+ POINT1
+
+
+ ENTITY_TYPE_2
+ SEG2
+
+
+ ENTITY_TYPE_3
+ SEG3
+
+
+ ENTITY_TYPE_4
+ TRIA3
+
+
+ ENTITY_TYPE_5
+ TRIA6
+
+
+ ENTITY_TYPE_6
+ QUAD4
+
+
+ ENTITY_TYPE_7
+ QUAD8
+
+
+ ENTITY_TYPE_8
+ QUAD9
+
+
+ ENTITY_TYPE_9
+ TETRA4
+
+
+ ENTITY_TYPE_10
+ TETRA10
+
+
+ ENTITY_TYPE_11
+ PYRA5
+
+
+ ENTITY_TYPE_12
+ PYRA13
+
+
+ ENTITY_TYPE_13
+ PENTA6
+
+
+ ENTITY_TYPE_14
+ PENTA15
+
+
+ ENTITY_TYPE_15
+ HEXA8
+
+
+ ENTITY_TYPE_16
+ HEXA20
+
+
+ ENTITY_TYPE_17
+ HEXA27
+
+
+ ENTITY_TYPE_18
+ OCTA12
+
+
+ ENTITY_TYPE_19
+ POLYGONE
+
+
+ ENTITY_TYPE_20
+ POLYEDRE
+
+
+ ENTITY_TYPE_21
+ NONE
+
+
+ ENTITY_TYPE_22
+ BALL
+ GEOM_TYPEGeometry type
diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx
index 57a076883..5b10f9914 100644
--- a/src/SMESH_I/SMESH_2smeshpy.cxx
+++ b/src/SMESH_I/SMESH_2smeshpy.cxx
@@ -256,6 +256,8 @@ namespace {
// - FT_EqualVolumes = 17
// v 6.6.0: FT_Undefined == 44, new items:
// - FT_BallDiameter = 37
+ // v 6.7.1: FT_Undefined == 45, new items:
+ // - FT_EntityType = 36
//
// It's necessary to continue recording this history and to fill
// undef2newItems (see below) accordingly.
@@ -275,6 +277,8 @@ namespace {
undef2newItems[ 43 ].assign( items, items+4 ); }
{ int items[] = { 37 };
undef2newItems[ 44 ].assign( items, items+1 ); }
+ { int items[] = { 36 };
+ undef2newItems[ 45 ].assign( items, items+1 ); }
}
int iType = Type.IntegerValue();
@@ -660,7 +664,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
// 1 2 3 4 5 6 7 8 9 10
// in order to avoid the problem of type mismatch of long and FunctorType
const TCollection_AsciiString
- SMESH("SMESH."), dfltFunctor = "SMESH.FT_Undefined", dftlTol = "1e-07", dftlPreci = "-1";
+ SMESH("SMESH."), dfltFunctor("SMESH.FT_Undefined"), dftlTol("1e-07"), dftlPreci("-1");
TCollection_AsciiString
Type = aCommand->GetArg(1), // long
Compare = aCommand->GetArg(2), // long
@@ -686,17 +690,34 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
aCommand->SetArg( 2, Type );
aCommand->SetArg( 3, Compare );
- if ( Type == "SMESH.FT_ElemGeomType" && Threshold.IsIntegerValue() )
+ if ( Threshold.IsIntegerValue() )
{
- // set SMESH.GeometryType instead of a numerical Threshold
- const char* types[SMESH::Geom_BALL+1] = {
- "Geom_POINT", "Geom_EDGE", "Geom_TRIANGLE", "Geom_QUADRANGLE", "Geom_POLYGON",
- "Geom_TETRA", "Geom_PYRAMID", "Geom_HEXA", "Geom_PENTA", "Geom_HEXAGONAL_PRISM",
- "Geom_POLYHEDRA", "Geom_BALL"
- };
int iGeom = Threshold.IntegerValue();
- if ( -1 < iGeom && iGeom < SMESH::Geom_POLYHEDRA+1 )
- Threshold = SMESH + types[ iGeom ];
+ if ( Type == "SMESH.FT_ElemGeomType" )
+ {
+ // set SMESH.GeometryType instead of a numerical Threshold
+ const char* types[SMESH::Geom_BALL+1] = {
+ "Geom_POINT", "Geom_EDGE", "Geom_TRIANGLE", "Geom_QUADRANGLE", "Geom_POLYGON",
+ "Geom_TETRA", "Geom_PYRAMID", "Geom_HEXA", "Geom_PENTA", "Geom_HEXAGONAL_PRISM",
+ "Geom_POLYHEDRA", "Geom_BALL" };
+ if ( -1 < iGeom && iGeom < SMESH::Geom_POLYHEDRA+1 )
+ Threshold = SMESH + types[ iGeom ];
+ }
+ if (Type == "SMESH.FT_EntityType")
+ {
+ // set SMESH.EntityType instead of a numerical Threshold
+ const char* types[SMESH::Entity_Ball+1] = {
+ "Entity_Node", "Entity_0D", "Entity_Edge", "Entity_Quad_Edge",
+ "Entity_Triangle", "Entity_Quad_Triangle",
+ "Entity_Quadrangle", "Entity_Quad_Quadrangle", "Entity_BiQuad_Quadrangle",
+ "Entity_Polygon", "Entity_Quad_Polygon", "Entity_Tetra", "Entity_Quad_Tetra",
+ "Entity_Pyramid", "Entity_Quad_Pyramid",
+ "Entity_Hexa", "Entity_Quad_Hexa", "Entity_TriQuad_Hexa",
+ "Entity_Penta", "Entity_Quad_Penta", "Entity_Hexagonal_Prism",
+ "Entity_Polyhedra", "Entity_Quad_Polyhedra", "Entity_Ball" };
+ if ( -1 < iGeom && iGeom < SMESH::Entity_Quad_Polyhedra+1 )
+ Threshold = SMESH + types[ iGeom ];
+ }
}
if ( ThresholdID.Length() != 2 && ThresholdStr.Length() != 2) // not '' or ""
aCommand->SetArg( 4, ThresholdID.SubString( 2, ThresholdID.Length()-1 )); // shape entry
@@ -773,6 +794,14 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue(ind+1));
myMeshes.insert( make_pair( mesh->GetID(), mesh ));
}
+ if ( method == "CreateMeshesFromGMF" )
+ {
+ // CreateMeshesFromGMF( theFileName, theMakeRequiredGroups ) ->
+ // CreateMeshesFromGMF( theFileName )
+ _AString file = theCommand->GetArg(1);
+ theCommand->RemoveArgs();
+ theCommand->SetArg( 1, file );
+ }
}
// CreateHypothesis()
@@ -1571,7 +1600,7 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
method == "ExportToMEDX" ) { // ExportToMEDX() --> ExportMED()
theCommand->SetMethod( "ExportMED" );
}
- else if ( method == "ExportCGNS" || method == "ExportGMF" )
+ else if ( method == "ExportCGNS" )
{ // ExportCGNS(part, ...) -> ExportCGNS(..., part)
_pyID partID = theCommand->GetArg( 1 );
int nbArgs = theCommand->GetNbArgs();
@@ -1579,6 +1608,14 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
theCommand->SetArg( i-1, theCommand->GetArg( i ));
theCommand->SetArg( nbArgs, partID );
}
+ else if ( method == "ExportGMF" )
+ { // ExportGMF(part,file,bool) -> ExportCGNS(file, part)
+ _pyID partID = theCommand->GetArg( 1 );
+ _AString file = theCommand->GetArg( 2 );
+ theCommand->RemoveArgs();
+ theCommand->SetArg( 1, file );
+ theCommand->SetArg( 2, partID );
+ }
else if ( theCommand->MethodStartsFrom( "ExportPartTo" ))
{ // ExportPartTo*(part, ...) -> Export*(..., part)
//
@@ -2035,6 +2072,13 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
if (( isPyMeshMethod = ( newMethod.Length() > 0 )))
theCommand->SetMethod( newMethod );
}
+ // ConvertToBiQuadratic(...) -> ConvertToQuadratic(...,True)
+ if ( !isPyMeshMethod && (method == "ConvertToBiQuadratic" || method == "ConvertToBiQuadraticObject") )
+ {
+ isPyMeshMethod = true;
+ theCommand->SetMethod( method.SubString( 1, 9) + method.SubString( 12, method.Length()));
+ theCommand->SetArg( theCommand->GetNbArgs() + 1, "True" );
+ }
if ( !isPyMeshMethod )
{
@@ -3593,7 +3637,7 @@ void _pyCommand::SetArg( int index, const TCollection_AsciiString& theArg)
void _pyCommand::RemoveArgs()
{
- if ( int pos = myString.Location( '(', 1, Length() ))
+ if ( int pos = myString.Location( '(', Max( 1, GetBegPos( METHOD_IND )), Length() ))
myString.Trunc( pos );
myString += ")";
myArgs.Clear();
diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx
index 101c9ac51..4fd4f1354 100644
--- a/src/SMESH_I/SMESH_DumpPython.cxx
+++ b/src/SMESH_I/SMESH_DumpPython.cxx
@@ -196,6 +196,40 @@ namespace SMESH
}
return *this;
}
+ TPythonDump&
+ TPythonDump::
+ operator<<(const SMESH::EntityType& theArg)
+ {
+ myStream<<"SMESH.";
+ switch(theArg){
+ case Entity_0D: myStream<<"Entity_0D"; break;
+ case Entity_Edge: myStream<<"Entity_Edge"; break;
+ case Entity_Quad_Edge: myStream<<"Entity_Quad_Edge"; break;
+ case Entity_Triangle: myStream<<"Entity_Triangle"; break;
+ case Entity_Quad_Triangle: myStream<<"Entity_Quad_Triangle"; break;
+ case Entity_Quadrangle: myStream<<"Entity_Quadrangle"; break;
+ case Entity_Quad_Quadrangle: myStream<<"Entity_Quad_Quadrangle"; break;
+ case Entity_BiQuad_Quadrangle: myStream<<"Entity_BiQuad_Quadrangle"; break;
+ case Entity_Polygon: myStream<<"Entity_Polygon"; break;
+ case Entity_Quad_Polygon: myStream<<"Entity_Quad_Polygon"; break;
+ case Entity_Tetra: myStream<<"Entity_Tetra"; break;
+ case Entity_Quad_Tetra: myStream<<"Entity_Quad_Tetra"; break;
+ case Entity_Pyramid: myStream<<"Entity_Pyramid"; break;
+ case Entity_Quad_Pyramid: myStream<<"Entity_Quad_Pyramid"; break;
+ case Entity_Hexa: myStream<<"Entity_Hexa"; break;
+ case Entity_Quad_Hexa: myStream<<"Entity_Quad_Hexa"; break;
+ case Entity_TriQuad_Hexa: myStream<<"Entity_TriQuad_Hexa"; break;
+ case Entity_Penta: myStream<<"Entity_Penta"; break;
+ case Entity_Quad_Penta: myStream<<"Entity_Quad_Penta"; break;
+ case Entity_Hexagonal_Prism: myStream<<"Entity_Hexagonal_Prism"; break;
+ case Entity_Polyhedra: myStream<<"Entity_Polyhedra"; break;
+ case Entity_Quad_Polyhedra: myStream<<"Entity_Quad_Polyhedra"; break;
+ case Entity_Ball: myStream<<"Entity_Ball"; break;
+ case Entity_Last: myStream<<"Entity_Last"; break;
+ default: myStream<<"__UNKNOWN__EntityType: " << theArg;
+ }
+ return *this;
+ }
template
void DumpArray(const TArray& theArray, TPythonDump & theStream)
diff --git a/src/SMESH_I/SMESH_Filter_i.cxx b/src/SMESH_I/SMESH_Filter_i.cxx
index f7040c5ab..ac5273396 100644
--- a/src/SMESH_I/SMESH_Filter_i.cxx
+++ b/src/SMESH_I/SMESH_Filter_i.cxx
@@ -702,7 +702,6 @@ FunctorType Taper_i::GetFunctorType()
return SMESH::FT_Taper;
}
-
/*
Class : Skew_i
Description : Functor for calculating skew in degrees
@@ -1637,6 +1636,37 @@ FunctorType ElemGeomType_i::GetFunctorType()
return SMESH::FT_ElemGeomType;
}
+/*
+ Class : ElemEntityType_i
+ Description : Predicate check is element has indicated entity type
+*/
+ElemEntityType_i::ElemEntityType_i()
+{
+ myElemEntityTypePtr.reset(new Controls::ElemEntityType());
+ myFunctorPtr = myPredicatePtr = myElemEntityTypePtr;
+}
+
+void ElemEntityType_i::SetElementType(ElementType theType)
+{
+ myElemEntityTypePtr->SetType(SMDSAbs_ElementType(theType));
+ TPythonDump()<SetElemEntityType(SMDSAbs_EntityType (theEntityType));
+ TPythonDump()<GetElemEntityType();
+}
+
+FunctorType ElemEntityType_i::GetFunctorType()
+{
+ return SMESH::FT_EntityType;
+}
+
/*
Class : CoplanarFaces_i
Description : Returns true if a mesh face is a coplanar neighbour to a given one
@@ -2312,6 +2342,14 @@ ElemGeomType_ptr FilterManager_i::CreateElemGeomType()
return anObj._retn();
}
+ElemEntityType_ptr FilterManager_i::CreateElemEntityType()
+{
+ SMESH::ElemEntityType_i* aServant = new SMESH::ElemEntityType_i();
+ SMESH::ElemEntityType_var anObj = aServant->_this();
+ TPythonDump()<GetGeometryType();
return true;
}
+ case FT_EntityType:
+ {
+ CORBA::ULong i = theCriteria->length();
+ theCriteria->length( i + 1 );
+
+ theCriteria[ i ] = createCriterion();
+
+ ElemEntityType_i* aPred = dynamic_cast( thePred );
+ theCriteria[ i ].Type = aFType;
+ theCriteria[ i ].Threshold = (double)aPred->GetEntityType();
+ return true;
+ }
case FT_Undefined:
return false;
@@ -3043,6 +3093,14 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
aPredicate = tmpPred;
break;
}
+ case SMESH::FT_EntityType:
+ {
+ SMESH::ElemEntityType_ptr tmpPred = aFilterMgr->CreateElemEntityType();
+ tmpPred->SetElementType( aTypeOfElem );
+ tmpPred->SetEntityType( EntityType( (int (aThreshold + 0.5))));
+ aPredicate = tmpPred;
+ break;
+ }
case SMESH::FT_CoplanarFaces:
{
SMESH::CoplanarFaces_ptr tmpPred = aFilterMgr->CreateCoplanarFaces();
@@ -3289,6 +3347,7 @@ static inline LDOMString toString( CORBA::Long theType )
case FT_GroupColor : return "Color of Group";
case FT_LinearOrQuadratic : return "Linear or Quadratic";
case FT_ElemGeomType : return "Element geomtry type";
+ case FT_EntityType : return "Entity type";
case FT_Undefined : return "";
default : return "";
}
@@ -3341,6 +3400,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr )
else if ( theStr.equals( "Color of Group" ) ) return FT_GroupColor;
else if ( theStr.equals( "Linear or Quadratic" ) ) return FT_LinearOrQuadratic;
else if ( theStr.equals( "Element geomtry type" ) ) return FT_ElemGeomType;
+ else if ( theStr.equals( "Entity type" ) ) return FT_EntityType;
else if ( theStr.equals( "" ) ) return FT_Undefined;
else return FT_Undefined;
}
@@ -3903,6 +3963,7 @@ static const char** getFunctNames()
"FT_LinearOrQuadratic",
"FT_GroupColor",
"FT_ElemGeomType",
+ "FT_EntityType",
"FT_CoplanarFaces",
"FT_BallDiameter",
"FT_LessThan",
@@ -3911,7 +3972,7 @@ static const char** getFunctNames()
"FT_LogicalNOT",
"FT_LogicalAND",
"FT_LogicalOR",
- "FT_Undefined" };
+ "FT_Undefined"};
return functName;
}
diff --git a/src/SMESH_I/SMESH_Filter_i.hxx b/src/SMESH_I/SMESH_Filter_i.hxx
index d874819a8..2186b42ea 100644
--- a/src/SMESH_I/SMESH_Filter_i.hxx
+++ b/src/SMESH_I/SMESH_Filter_i.hxx
@@ -329,7 +329,6 @@ namespace SMESH
Controls::Length2DPtr myLength2DPtr;
};
-
/*
Class : MultiConnection_i
Description : Functor for calculating number of faces conneted to the edge
@@ -450,7 +449,7 @@ namespace SMESH
OverConstrainedFace_i();
FunctorType GetFunctorType();
};
-
+
/*
Class : BelongToGeom_i
Description : Predicate for selection on geometrical support
@@ -763,6 +762,25 @@ namespace SMESH
private:
Controls::ElemGeomTypePtr myElemGeomTypePtr;
};
+
+ /*
+ Class : ElemEntityType_i
+ Description : Functor for check element entity type
+ */
+ class SMESH_I_EXPORT ElemEntityType_i: public virtual POA_SMESH::ElemEntityType,
+ public virtual Predicate_i
+ {
+ public:
+ ElemEntityType_i();
+ FunctorType GetFunctorType();
+
+ void SetElementType ( ElementType theType );
+ void SetEntityType( EntityType theEntityType );
+ EntityType GetEntityType() const;
+
+ private:
+ Controls::ElemEntityTypePtr myElemEntityTypePtr;
+ };
/*
Class : CoplanarFaces_i
@@ -1095,6 +1113,7 @@ namespace SMESH
LinearOrQuadratic_ptr CreateLinearOrQuadratic();
GroupColor_ptr CreateGroupColor();
ElemGeomType_ptr CreateElemGeomType();
+ ElemEntityType_ptr CreateElemEntityType();
CoplanarFaces_ptr CreateCoplanarFaces();
LessThan_ptr CreateLessThan();
diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx
index 87e886112..d88c81400 100644
--- a/src/SMESH_I/SMESH_MeshEditor_i.cxx
+++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx
@@ -460,6 +460,23 @@ void SMESH_MeshEditor_i::initData(bool deleteSearchers)
getEditor().GetError().reset();
getEditor().CrearLastCreated();
}
+
+//================================================================================
+/*!
+ * \brief Increment mesh modif time and optionally record that the performed
+ * modification may influence futher mesh re-compute.
+ * \param [in] isReComputeSafe - true if the modification does not infulence
+ * futher mesh re-compute
+ */
+//================================================================================
+
+void SMESH_MeshEditor_i::declareMeshModified( bool isReComputeSafe )
+{
+ myMesh->GetMeshDS()->Modified();
+ if ( !isReComputeSafe )
+ myMesh->SetIsModified( true );
+}
+
//================================================================================
/*!
* \brief Return either myEditor or myPreviewEditor depending on myIsPreviewMode.
@@ -498,16 +515,6 @@ TPreviewMesh * SMESH_MeshEditor_i::getPreviewMesh(SMDSAbs_ElementType previewEle
return myPreviewMesh;
}
-//================================================================================
-/*!
- * \brief Now does nothing
- */
-//================================================================================
-
-// void SMESH_MeshEditor_i::storeResult(::SMESH_MeshEditor& )
-// {
-// }
-
//================================================================================
/*!
* Return data of mesh edition preview
@@ -515,7 +522,9 @@ TPreviewMesh * SMESH_MeshEditor_i::getPreviewMesh(SMDSAbs_ElementType previewEle
//================================================================================
SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
-{
+ throw (SALOME::SALOME_Exception)
+{
+ SMESH_TRY;
const bool hasBadElems = ( getEditor().GetError() && getEditor().GetError()->HasBadElems() );
if ( myIsPreviewMode || hasBadElems ) { // --- MeshPreviewStruct filling ---
@@ -593,6 +602,8 @@ SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
}
return myPreviewData._retn();
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -603,13 +614,19 @@ SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
//================================================================================
SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::long_array_var myLastCreatedNodes = new SMESH::long_array();
+
const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedNodes();
myLastCreatedNodes->length( aSeq.Length() );
for (int i = 1; i <= aSeq.Length(); i++)
myLastCreatedNodes[i-1] = aSeq.Value(i)->GetID();
+
return myLastCreatedNodes._retn();
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -620,13 +637,19 @@ SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
//================================================================================
SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::long_array_var myLastCreatedElems = new SMESH::long_array();
+
const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedElems();
myLastCreatedElems->length( aSeq.Length() );
for ( int i = 1; i <= aSeq.Length(); i++ )
myLastCreatedElems[i-1] = aSeq.Value(i)->GetID();
+
return myLastCreatedElems._retn();
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -636,7 +659,9 @@ SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
//=======================================================================
SMESH::ComputeError* SMESH_MeshEditor_i::GetLastError()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::ComputeError_var errOut = new SMESH::ComputeError;
SMESH_ComputeErrorPtr& errIn = getEditor().GetError();
if ( errIn && !errIn->IsOK() )
@@ -652,7 +677,10 @@ SMESH::ComputeError* SMESH_MeshEditor_i::GetLastError()
errOut->subShapeID = -1;
errOut->hasBadMesh = false;
}
+
return errOut._retn();
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -718,7 +746,9 @@ void SMESH_MeshEditor_i::deleteAuxIDSources()
CORBA::Boolean
SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
list< int > IdList;
@@ -731,10 +761,12 @@ SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
// Remove Elements
bool ret = getEditor().Remove( IdList, false );
- myMesh->GetMeshDS()->Modified();
- if ( IDsOfElements.length() )
- myMesh->SetIsModified( true ); // issue 0020693
+
+ declareMeshModified( /*isReComputeSafe=*/ IDsOfElements.length() == 0 ); // issue 0020693
return ret;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -744,7 +776,9 @@ SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
//=============================================================================
CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
list< int > IdList;
@@ -755,10 +789,12 @@ CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNo
TPythonDump() << "isDone = " << this << ".RemoveNodes( " << IDsOfNodes << " )";
bool ret = getEditor().Remove( IdList, true );
- myMesh->GetMeshDS()->Modified();
- if ( IDsOfNodes.length() )
- myMesh->SetIsModified( true ); // issue 0020693
+
+ declareMeshModified( /*isReComputeSafe=*/ !ret ); // issue 0020693
return ret;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -768,10 +804,11 @@ CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNo
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::RemoveOrphanNodes()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
-
// Update Python script
TPythonDump() << "nbRemoved = " << this << ".RemoveOrphanNodes()";
@@ -787,12 +824,13 @@ CORBA::Long SMESH_MeshEditor_i::RemoveOrphanNodes()
int nbNodesBefore = myMesh->NbNodes();
getEditor().Remove( IdList, true );
- myMesh->GetMeshDS()->Modified();
- if ( IdList.size() )
- myMesh->SetIsModified( true );
int nbNodesAfter = myMesh->NbNodes();
+ declareMeshModified( /*isReComputeSafe=*/ IdList.size() == 0 ); // issue 0020693
return nbNodesBefore - nbNodesAfter;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -801,9 +839,10 @@ CORBA::Long SMESH_MeshEditor_i::RemoveOrphanNodes()
*/
//=============================================================================
-CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,
- CORBA::Double y, CORBA::Double z)
+CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,CORBA::Double y, CORBA::Double z)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
const SMDS_MeshNode* N = getMeshDS()->AddNode(x, y, z);
@@ -812,9 +851,11 @@ CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,
TPythonDump() << "nodeID = " << this << ".AddNode( "
<< TVar( x ) << ", " << TVar( y ) << ", " << TVar( z )<< " )";
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true ); // issue 0020693
+ declareMeshModified( /*isReComputeSafe=*/false );
return N->GetID();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -824,7 +865,9 @@ CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::Add0DElement(CORBA::Long IDOfNode)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
const SMDS_MeshNode* aNode = getMeshDS()->FindNode(IDOfNode);
@@ -833,12 +876,11 @@ CORBA::Long SMESH_MeshEditor_i::Add0DElement(CORBA::Long IDOfNode)
// Update Python script
TPythonDump() << "elem0d = " << this << ".Add0DElement( " << IDOfNode <<" )";
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true ); // issue 0020693
+ declareMeshModified( /*isReComputeSafe=*/false );
- if (elem)
- return elem->GetID();
+ return elem ? elem->GetID() : 0;
+ SMESH_CATCH( SMESH::throwCorbaException );
return 0;
}
@@ -851,13 +893,12 @@ CORBA::Long SMESH_MeshEditor_i::Add0DElement(CORBA::Long IDOfNode)
CORBA::Long SMESH_MeshEditor_i::AddBall(CORBA::Long IDOfNode, CORBA::Double diameter)
throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
if ( diameter < std::numeric_limits::min() )
THROW_SALOME_CORBA_EXCEPTION("Invalid diameter", SALOME::BAD_PARAM);
- SMESH_TRY;
-
const SMDS_MeshNode* aNode = getMeshDS()->FindNode(IDOfNode);
SMDS_MeshElement* elem = getMeshDS()->AddBall(aNode, diameter);
@@ -865,14 +906,10 @@ CORBA::Long SMESH_MeshEditor_i::AddBall(CORBA::Long IDOfNode, CORBA::Double diam
TPythonDump() << "ballElem = "
<< this << ".AddBall( " << IDOfNode << ", " << diameter <<" )";
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true ); // issue 0020693
-
- if (elem)
- return elem->GetID();
+ declareMeshModified( /*isReComputeSafe=*/false );
+ return elem ? elem->GetID() : 0;
SMESH_CATCH( SMESH::throwCorbaException );
-
return 0;
}
@@ -884,7 +921,9 @@ CORBA::Long SMESH_MeshEditor_i::AddBall(CORBA::Long IDOfNode, CORBA::Double diam
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
int NbNodes = IDsOfNodes.length();
@@ -912,10 +951,10 @@ CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
<GetMeshDS()->Modified();
- if(elem)
- return myMesh->SetIsModified( true ), elem->GetID();
+ declareMeshModified( /*isReComputeSafe=*/false );
+ return elem ? elem->GetID() : 0;
+ SMESH_CATCH( SMESH::throwCorbaException );
return 0;
}
@@ -926,7 +965,9 @@ CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
int NbNodes = IDsOfNodes.length();
@@ -965,10 +1006,11 @@ CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
// Update Python script
TPythonDump() << "faceID = " << this << ".AddFace( " << IDsOfNodes << " )";
- myMesh->GetMeshDS()->Modified();
- if(elem)
- return myMesh->SetIsModified( true ), elem->GetID();
+ declareMeshModified( /*isReComputeSafe=*/false );
+ return elem ? elem->GetID() : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
return 0;
}
@@ -978,7 +1020,9 @@ CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
*/
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace (const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
int NbNodes = IDsOfNodes.length();
@@ -991,8 +1035,11 @@ CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace (const SMESH::long_array & IDsO
// Update Python script
TPythonDump() <<"faceID = "<GetMeshDS()->Modified();
- return elem ? ( myMesh->SetIsModified( true ), elem->GetID()) : 0;
+ declareMeshModified( /*isReComputeSafe=*/false );
+ return elem ? elem->GetID() : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -1003,7 +1050,9 @@ CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace (const SMESH::long_array & IDsO
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
int NbNodes = IDsOfNodes.length();
@@ -1044,10 +1093,10 @@ CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
// Update Python script
TPythonDump() << "volID = " << this << ".AddVolume( " << IDsOfNodes << " )";
- myMesh->GetMeshDS()->Modified();
- if(elem)
- return myMesh->SetIsModified( true ), elem->GetID();
+ declareMeshModified( /*isReComputeSafe=*/false );
+ return elem ? elem->GetID() : 0;
+ SMESH_CATCH( SMESH::throwCorbaException );
return 0;
}
@@ -1058,7 +1107,9 @@ CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume (const SMESH::long_array & IDsOfNodes,
const SMESH::long_array & Quantities)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
int NbNodes = IDsOfNodes.length();
@@ -1080,9 +1131,12 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume (const SMESH::long_array & I
// Update Python script
TPythonDump() << "volID = " << this << ".AddPolyhedralVolume( "
<< IDsOfNodes << ", " << Quantities << " )";
- myMesh->GetMeshDS()->Modified();
- return elem ? ( myMesh->SetIsModified( true ), elem->GetID()) : 0;
+ declareMeshModified( /*isReComputeSafe=*/false );
+ return elem ? elem->GetID() : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -1092,7 +1146,9 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume (const SMESH::long_array & I
//=============================================================================
CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces (const SMESH::long_array & IdsOfFaces)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
int NbFaces = IdsOfFaces.length();
@@ -1114,9 +1170,12 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces (const SMESH::long_ar
// Update Python script
TPythonDump() << "volID = " << this << ".AddPolyhedralVolumeByFaces( "
<< IdsOfFaces << " )";
- myMesh->GetMeshDS()->Modified();
- return elem ? ( myMesh->SetIsModified( true ), elem->GetID()) : 0;
+ declareMeshModified( /*isReComputeSafe=*/false );
+ return elem ? elem->GetID() : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -1136,13 +1195,12 @@ SMESH_MeshEditor_i::Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObje
const char* theGroupName)
throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESH::SMESH_IDSource_var result;
TPythonDump pyDump;
- SMESH_TRY;
-
TIDSortedElemSet elements, elems0D;
if ( idSourceToSet( theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
getEditor().Create0DElementsOnAllNodes( elements, elems0D );
@@ -1189,9 +1247,10 @@ SMESH_MeshEditor_i::Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObje
pyDump << " = " << this << ".Create0DElementsOnAllNodes( "
<< theObject << ", '" << theGroupName << "' )";
- SMESH_CATCH( SMESH::throwCorbaException );
-
return result._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -1206,7 +1265,7 @@ SMESH_MeshEditor_i::Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObje
void SMESH_MeshEditor_i::SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexID)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
+ SMESH_TRY;
SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast( mesh->FindNode(NodeID) );
@@ -1223,6 +1282,8 @@ void SMESH_MeshEditor_i::SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexI
mesh->SetNodeOnVertex( node, VertexID );
myMesh->SetIsModified( true );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
@@ -1239,7 +1300,7 @@ void SMESH_MeshEditor_i::SetNodeOnEdge(CORBA::Long NodeID, CORBA::Long EdgeID,
CORBA::Double paramOnEdge)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
+ SMESH_TRY;
SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast( mesh->FindNode(NodeID) );
@@ -1261,6 +1322,8 @@ void SMESH_MeshEditor_i::SetNodeOnEdge(CORBA::Long NodeID, CORBA::Long EdgeID,
mesh->SetNodeOnEdge( node, EdgeID, paramOnEdge );
myMesh->SetIsModified( true );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
@@ -1278,8 +1341,7 @@ void SMESH_MeshEditor_i::SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
CORBA::Double u, CORBA::Double v)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
-
+ SMESH_TRY;
SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast( mesh->FindNode(NodeID) );
if ( !node )
@@ -1311,6 +1373,8 @@ void SMESH_MeshEditor_i::SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
mesh->SetNodeOnFace( node, FaceID, u, v );
myMesh->SetIsModified( true );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
@@ -1325,8 +1389,7 @@ void SMESH_MeshEditor_i::SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
void SMESH_MeshEditor_i::SetNodeInVolume(CORBA::Long NodeID, CORBA::Long SolidID)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
-
+ SMESH_TRY;
SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshNode* node = const_cast( mesh->FindNode(NodeID) );
if ( !node )
@@ -1342,7 +1405,7 @@ void SMESH_MeshEditor_i::SetNodeInVolume(CORBA::Long NodeID, CORBA::Long SolidID
mesh->SetNodeInVolume( node, SolidID );
- // myMesh->SetIsModified( true ); - SetNodeInVolume() can't prevent re-compute, I believe
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
@@ -1358,8 +1421,7 @@ void SMESH_MeshEditor_i::SetMeshElementOnShape(CORBA::Long ElementID,
CORBA::Long ShapeID)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
-
+ SMESH_TRY;
SMESHDS_Mesh * mesh = getMeshDS();
SMDS_MeshElement* elem = const_cast(mesh->FindElement(ElementID));
if ( !elem )
@@ -1378,6 +1440,8 @@ void SMESH_MeshEditor_i::SetMeshElementOnShape(CORBA::Long ElementID,
mesh->SetMeshElementOnShape( elem, ShapeID );
myMesh->SetIsModified( true );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
@@ -1388,7 +1452,9 @@ void SMESH_MeshEditor_i::SetMeshElementOnShape(CORBA::Long ElementID,
CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
CORBA::Long NodeID2)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
const SMDS_MeshNode * n1 = getMeshDS()->FindNode( NodeID1 );
@@ -1400,11 +1466,13 @@ CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
TPythonDump() << "isDone = " << this << ".InverseDiag( "
<< NodeID1 << ", " << NodeID2 << " )";
-
int ret = getEditor().InverseDiag ( n1, n2 );
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+
+ declareMeshModified( /*isReComputeSafe=*/false );
return ret;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -1415,7 +1483,9 @@ CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
CORBA::Long NodeID2)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
const SMDS_MeshNode * n1 = getMeshDS()->FindNode( NodeID1 );
@@ -1430,12 +1500,12 @@ CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
bool stat = getEditor().DeleteDiag ( n1, n2 );
- myMesh->GetMeshDS()->Modified();
- if ( stat )
- myMesh->SetIsModified( true ); // issue 0020693
-
+ declareMeshModified( /*isReComputeSafe=*/!stat );
return stat;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -1445,7 +1515,9 @@ CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
//=============================================================================
CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfElements)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
for (int i = 0; i < IDsOfElements.length(); i++)
@@ -1458,13 +1530,12 @@ CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfEleme
// Update Python script
TPythonDump() << "isDone = " << this << ".Reorient( " << IDsOfElements << " )";
- myMesh->GetMeshDS()->Modified();
- if ( IDsOfElements.length() )
- myMesh->SetIsModified( true ); // issue 0020693
-
+ declareMeshModified( /*isReComputeSafe=*/ IDsOfElements.length() == 0 );
return true;
-}
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
+}
//=============================================================================
/*!
@@ -1473,7 +1544,9 @@ CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfEleme
//=============================================================================
CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theObject)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TPythonDump aTPythonDump; // suppress dump in Reorient()
@@ -1484,7 +1557,11 @@ CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theO
// Update Python script
aTPythonDump << "isDone = " << this << ".ReorientObject( " << theObject << " )";
+ declareMeshModified( /*isReComputeSafe=*/ anElementsId->length() == 0 );
return isDone;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -1504,8 +1581,7 @@ CORBA::Long SMESH_MeshEditor_i::Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
const SMESH::PointStruct& thePoint)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
-
+ SMESH_TRY;
initData(/*deleteSearchers=*/false);
TIDSortedElemSet elements;
@@ -1561,8 +1637,7 @@ CORBA::Long SMESH_MeshEditor_i::Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
int nbReori = getEditor().Reorient2D( elements, dirVec, face );
if ( nbReori ) {
- myMesh->SetIsModified( true );
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/false );
}
TPythonDump() << this << ".Reorient2D( "
<< the2Dgroup << ", "
@@ -1571,6 +1646,9 @@ CORBA::Long SMESH_MeshEditor_i::Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
<< thePoint << " )";
return nbReori;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=============================================================================
@@ -1578,10 +1656,13 @@ CORBA::Long SMESH_MeshEditor_i::Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
*
*/
//=============================================================================
+
CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::long_array & IDsOfElements,
SMESH::NumericalFunctor_ptr Criterion,
CORBA::Double MaxAngle)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -1602,24 +1683,26 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::long_array & IDsOfE
bool stat = getEditor().TriToQuad( faces, aCrit, MaxAngle );
- myMesh->GetMeshDS()->Modified();
- if ( stat )
- myMesh->SetIsModified( true ); // issue 0020693
-
+ declareMeshModified( /*isReComputeSafe=*/!stat );
return stat;
-}
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
+}
//=============================================================================
/*!
*
*/
//=============================================================================
+
CORBA::Boolean SMESH_MeshEditor_i::TriToQuadObject (SMESH::SMESH_IDSource_ptr theObject,
SMESH::NumericalFunctor_ptr Criterion,
CORBA::Double MaxAngle)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TPythonDump aTPythonDump; // suppress dump in TriToQuad()
@@ -1634,17 +1717,22 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuadObject (SMESH::SMESH_IDSource_ptr
<< theObject << ", " << aNumericalFunctor << ", " << TVar( MaxAngle ) << " )";
return isDone;
-}
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
+}
//=============================================================================
/*!
*
*/
//=============================================================================
+
CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array & IDsOfElements,
SMESH::NumericalFunctor_ptr Criterion)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -1664,12 +1752,12 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array & IDsOfE
TPythonDump() << "isDone = " << this << ".QuadToTri( " << IDsOfElements << ", " << aNumericalFunctor << " )";
CORBA::Boolean stat = getEditor().QuadToTri( faces, aCrit );
- myMesh->GetMeshDS()->Modified();
- if ( stat )
- myMesh->SetIsModified( true ); // issue 0020693
-
+ declareMeshModified( /*isReComputeSafe=*/false );
return stat;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
@@ -1680,7 +1768,9 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array & IDsOfE
//=============================================================================
CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr theObject,
SMESH::NumericalFunctor_ptr Criterion)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TPythonDump aTPythonDump; // suppress dump in QuadToTri()
@@ -1694,7 +1784,11 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr
// Update Python script
aTPythonDump << "isDone = " << this << ".QuadToTriObject( " << theObject << ", " << aNumericalFunctor << " )";
+ declareMeshModified( /*isReComputeSafe=*/false );
return isDone;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
@@ -1705,7 +1799,9 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr
//=============================================================================
CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfElements,
CORBA::Boolean Diag13)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -1717,13 +1813,12 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfEle
<< IDsOfElements << ", " << Diag13 << " )";
CORBA::Boolean stat = getEditor().QuadToTri( faces, Diag13 );
- myMesh->GetMeshDS()->Modified();
- if ( stat )
- myMesh->SetIsModified( true ); // issue 0020693
-
-
+ declareMeshModified( /*isReComputeSafe=*/ !stat );
return stat;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
@@ -1734,7 +1829,9 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfEle
//=============================================================================
CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr theObject,
CORBA::Boolean Diag13)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TPythonDump aTPythonDump; // suppress dump in SplitQuad()
@@ -1746,7 +1843,11 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr th
aTPythonDump << "isDone = " << this << ".SplitQuadObject( "
<< theObject << ", " << Diag13 << " )";
+ declareMeshModified( /*isReComputeSafe=*/!isDone );
return isDone;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
@@ -1755,9 +1856,12 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr th
* BestSplit
*/
//=============================================================================
+
CORBA::Long SMESH_MeshEditor_i::BestSplit (CORBA::Long IDOfQuad,
SMESH::NumericalFunctor_ptr Criterion)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
const SMDS_MeshElement* quad = getMeshDS()->FindElement(IDOfQuad);
@@ -1771,9 +1875,12 @@ CORBA::Long SMESH_MeshEditor_i::BestSplit (CORBA::Long IDOfQuad,
else
aCrit.reset(new SMESH::Controls::AspectRatio());
- return getEditor().BestSplit(quad, aCrit);
+ int id = getEditor().BestSplit(quad, aCrit);
+ declareMeshModified( /*isReComputeSafe=*/ id < 1 );
}
- return -1;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -1786,8 +1893,7 @@ void SMESH_MeshEditor_i::SplitVolumesIntoTetra (SMESH::SMESH_IDSource_ptr elems,
CORBA::Short methodFlags)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
-
+ SMESH_TRY;
initData();
SMESH::long_array_var anElementsId = elems->GetIDs();
@@ -1795,14 +1901,12 @@ void SMESH_MeshEditor_i::SplitVolumesIntoTetra (SMESH::SMESH_IDSource_ptr elems,
arrayToSet( anElementsId, getMeshDS(), elemSet, SMDSAbs_Volume );
getEditor().SplitVolumesIntoTetra( elemSet, int( methodFlags ));
- myMesh->GetMeshDS()->Modified();
-
-
-// if ( myLastCreatedElems.length() ) - it does not influence Compute()
-// myMesh->SetIsModified( true ); // issue 0020693
+ declareMeshModified( /*isReComputeSafe=*/true ); // it does not influence Compute()
TPythonDump() << this << ".SplitVolumesIntoTetra( "
<< elems << ", " << methodFlags << " )";
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=======================================================================
@@ -1816,6 +1920,7 @@ SMESH_MeshEditor_i::Smooth(const SMESH::long_array & IDsOfElements,
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception)
{
return smooth( IDsOfElements, IDsOfFixedNodes, MaxNbOfIterations,
MaxAspectRatio, Method, false );
@@ -1833,6 +1938,7 @@ SMESH_MeshEditor_i::SmoothParametric(const SMESH::long_array & IDsO
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception)
{
return smooth( IDsOfElements, IDsOfFixedNodes, MaxNbOfIterations,
MaxAspectRatio, Method, true );
@@ -1850,6 +1956,7 @@ SMESH_MeshEditor_i::SmoothObject(SMESH::SMESH_IDSource_ptr theObjec
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception)
{
return smoothObject (theObject, IDsOfFixedNodes, MaxNbOfIterations,
MaxAspectRatio, Method, false);
@@ -1867,6 +1974,7 @@ SMESH_MeshEditor_i::SmoothParametricObject(SMESH::SMESH_IDSource_ptr
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception)
{
return smoothObject (theObject, IDsOfFixedNodes, MaxNbOfIterations,
MaxAspectRatio, Method, true);
@@ -1886,7 +1994,9 @@ SMESH_MeshEditor_i::smooth(const SMESH::long_array & IDsOfElements,
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method,
bool IsParametric)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -1908,9 +2018,7 @@ SMESH_MeshEditor_i::smooth(const SMESH::long_array & IDsOfElements,
getEditor().Smooth(elements, fixedNodes, method,
MaxNbOfIterations, MaxAspectRatio, IsParametric );
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true ); // issue 0020693
-
+ declareMeshModified( /*isReComputeSafe=*/true ); // does not prevent re-compute
// Update Python script
TPythonDump() << "isDone = " << this << "."
@@ -1922,6 +2030,9 @@ SMESH_MeshEditor_i::smooth(const SMESH::long_array & IDsOfElements,
"CENTROIDAL_SMOOTH )" : "LAPLACIAN_SMOOTH )");
return true;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
@@ -1938,7 +2049,9 @@ SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr theObjec
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method,
bool IsParametric)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TPythonDump aTPythonDump; // suppress dump in smooth()
@@ -1957,6 +2070,9 @@ SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr theObjec
"CENTROIDAL_SMOOTH )" : "LAPLACIAN_SMOOTH )");
return isDone;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
@@ -1967,13 +2083,16 @@ SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr theObjec
//=============================================================================
void SMESH_MeshEditor_i::RenumberNodes()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
// Update Python script
TPythonDump() << this << ".RenumberNodes()";
getMeshDS()->Renumber( true );
-}
+ SMESH_CATCH( SMESH::throwCorbaException );
+}
//=============================================================================
/*!
@@ -1982,11 +2101,15 @@ void SMESH_MeshEditor_i::RenumberNodes()
//=============================================================================
void SMESH_MeshEditor_i::RenumberElements()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
// Update Python script
TPythonDump() << this << ".RenumberElements()";
getMeshDS()->Renumber( false );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=======================================================================
@@ -1996,11 +2119,16 @@ void SMESH_MeshEditor_i::RenumberElements()
//=======================================================================
SMESH::ListOfGroups* SMESH_MeshEditor_i::getGroups(const std::list* groupIDs)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
if ( !groupIDs )
return 0;
myMesh_i->CreateGroupServants();
return myMesh_i->GetGroups( *groupIDs );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -2016,7 +2144,9 @@ SMESH_MeshEditor_i::rotationSweep(const SMESH::long_array & theIDsOfElements,
CORBA::Double theTolerance,
const bool theMakeGroups,
const SMDSAbs_ElementType theElementType)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TIDSortedElemSet inElements, copyElements;
@@ -2038,11 +2168,13 @@ SMESH_MeshEditor_i::rotationSweep(const SMESH::long_array & theIDsOfElements,
::SMESH_MeshEditor::PGroupIDs groupIds =
getEditor().RotationSweep (*workElements, Ax1, theAngleInRadians,
theNbOfSteps, theTolerance, theMakeGroups, makeWalls);
- myMesh->GetMeshDS()->Modified();
- // myMesh->SetIsModified( true ); -- it does not influence Compute()
+ declareMeshModified( /*isReComputeSafe=*/true ); // does not influence Compute()
return theMakeGroups ? getGroups(groupIds.get()) : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -2055,6 +2187,7 @@ void SMESH_MeshEditor_i::RotationSweep(const SMESH::long_array & theIDsOfElement
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweep( "
@@ -2083,6 +2216,7 @@ SMESH_MeshEditor_i::RotationSweepMakeGroups(const SMESH::long_array& theIDsOfEle
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2093,7 +2227,7 @@ SMESH_MeshEditor_i::RotationSweepMakeGroups(const SMESH::long_array& theIDsOfEle
theTolerance,
true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepMakeGroups( "
<< theIDsOfElements << ", "
<< theAxis << ", "
@@ -2114,6 +2248,7 @@ void SMESH_MeshEditor_i::RotationSweepObject(SMESH::SMESH_IDSource_ptr theObject
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweepObject( "
@@ -2142,6 +2277,7 @@ void SMESH_MeshEditor_i::RotationSweepObject1D(SMESH::SMESH_IDSource_ptr theObje
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweepObject1D( "
@@ -2171,6 +2307,7 @@ void SMESH_MeshEditor_i::RotationSweepObject2D(SMESH::SMESH_IDSource_ptr theObje
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotationSweepObject2D( "
@@ -2201,6 +2338,7 @@ SMESH_MeshEditor_i::RotationSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr theO
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2212,7 +2350,7 @@ SMESH_MeshEditor_i::RotationSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr theO
theTolerance,
true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepObjectMakeGroups( "
<< theObject << ", "
<< theAxis << ", "
@@ -2234,6 +2372,7 @@ SMESH_MeshEditor_i::RotationSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr th
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2246,7 +2385,7 @@ SMESH_MeshEditor_i::RotationSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr th
true,
SMDSAbs_Edge);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepObject1DMakeGroups( "
<< theObject << ", "
<< theAxis << ", "
@@ -2268,6 +2407,7 @@ SMESH_MeshEditor_i::RotationSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr th
CORBA::Double theAngleInRadians,
CORBA::Long theNbOfSteps,
CORBA::Double theTolerance)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2280,7 +2420,7 @@ SMESH_MeshEditor_i::RotationSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr th
true,
SMDSAbs_Face);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotationSweepObject2DMakeGroups( "
<< theObject << ", "
<< theAxis << ", "
@@ -2303,45 +2443,40 @@ SMESH_MeshEditor_i::extrusionSweep(const SMESH::long_array & theIDsOfElements,
CORBA::Long theNbOfSteps,
bool theMakeGroups,
const SMDSAbs_ElementType theElementType)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
- try {
-#ifdef NO_CAS_CATCH
- OCC_CATCH_SIGNALS;
-#endif
- TIDSortedElemSet elements, copyElements;
- arrayToSet(theIDsOfElements, getMeshDS(), elements, theElementType);
+ TIDSortedElemSet elements, copyElements;
+ arrayToSet(theIDsOfElements, getMeshDS(), elements, theElementType);
- const SMESH::PointStruct * P = &theStepVector.PS;
- gp_Vec stepVec( P->x, P->y, P->z );
+ const SMESH::PointStruct * P = &theStepVector.PS;
+ gp_Vec stepVec( P->x, P->y, P->z );
- TIDSortedElemSet* workElements = & elements;
+ TIDSortedElemSet* workElements = & elements;
- SMDSAbs_ElementType aType = SMDSAbs_Face;
- if (theElementType == SMDSAbs_Node)
- {
- aType = SMDSAbs_Edge;
- }
- if ( myIsPreviewMode ) {
- SMDSAbs_ElementType select = SMDSAbs_All, avoid = SMDSAbs_Volume;
- getPreviewMesh( aType )->Copy( elements, copyElements, select, avoid );
- workElements = & copyElements;
- theMakeGroups = false;
- }
-
- TElemOfElemListMap aHystory;
- ::SMESH_MeshEditor::PGroupIDs groupIds =
- getEditor().ExtrusionSweep (*workElements, stepVec, theNbOfSteps, aHystory, theMakeGroups);
-
- myMesh->GetMeshDS()->Modified();
-
- return theMakeGroups ? getGroups(groupIds.get()) : 0;
-
- } catch(Standard_Failure) {
- Handle(Standard_Failure) aFail = Standard_Failure::Caught();
- INFOS( "SMESH_MeshEditor_i::ExtrusionSweep fails - "<< aFail->GetMessageString() );
+ SMDSAbs_ElementType aType = SMDSAbs_Face;
+ if (theElementType == SMDSAbs_Node)
+ {
+ aType = SMDSAbs_Edge;
}
+ if ( myIsPreviewMode ) {
+ SMDSAbs_ElementType select = SMDSAbs_All, avoid = SMDSAbs_Volume;
+ getPreviewMesh( aType )->Copy( elements, copyElements, select, avoid );
+ workElements = & copyElements;
+ theMakeGroups = false;
+ }
+
+ TElemOfElemListMap aHystory;
+ ::SMESH_MeshEditor::PGroupIDs groupIds =
+ getEditor().ExtrusionSweep (*workElements, stepVec, theNbOfSteps, aHystory, theMakeGroups);
+
+ declareMeshModified( /*isReComputeSafe=*/true ); // does not influence Compute()
+
+ return theMakeGroups ? getGroups(groupIds.get()) : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
return 0;
}
@@ -2353,6 +2488,7 @@ SMESH_MeshEditor_i::extrusionSweep(const SMESH::long_array & theIDsOfElements,
void SMESH_MeshEditor_i::ExtrusionSweep(const SMESH::long_array & theIDsOfElements,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, false );
if (!myIsPreviewMode) {
@@ -2369,6 +2505,7 @@ void SMESH_MeshEditor_i::ExtrusionSweep(const SMESH::long_array & theIDsOfElemen
void SMESH_MeshEditor_i::ExtrusionSweep0D(const SMESH::long_array & theIDsOfElements,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, false, SMDSAbs_Node );
if (!myIsPreviewMode) {
@@ -2385,6 +2522,7 @@ void SMESH_MeshEditor_i::ExtrusionSweep0D(const SMESH::long_array & theIDsOfElem
void SMESH_MeshEditor_i::ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false );
@@ -2402,6 +2540,7 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObjec
void SMESH_MeshEditor_i::ExtrusionSweepObject0D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Node );
@@ -2419,6 +2558,7 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject0D(SMESH::SMESH_IDSource_ptr theObj
void SMESH_MeshEditor_i::ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Edge );
@@ -2436,6 +2576,7 @@ void SMESH_MeshEditor_i::ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObj
void SMESH_MeshEditor_i::ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
SMESH::long_array_var anElementsId = theObject->GetIDs();
extrusionSweep (anElementsId, theStepVector, theNbOfSteps, false, SMDSAbs_Face );
@@ -2454,13 +2595,14 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::ExtrusionSweepMakeGroups(const SMESH::long_array& theIDsOfElements,
const SMESH::DirStruct& theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
SMESH::ListOfGroups* aGroups = extrusionSweep(theIDsOfElements, theStepVector, theNbOfSteps, true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepMakeGroups( " << theIDsOfElements
<< ", " << theStepVector <<", " << TVar( theNbOfSteps ) << " )";
}
@@ -2476,13 +2618,14 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::ExtrusionSweepMakeGroups0D(const SMESH::long_array& theIDsOfElements,
const SMESH::DirStruct& theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
SMESH::ListOfGroups* aGroups = extrusionSweep(theIDsOfElements, theStepVector, theNbOfSteps, true,SMDSAbs_Node);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepMakeGroups0D( " << theIDsOfElements
<< ", " << theStepVector <<", " << TVar( theNbOfSteps ) << " )";
}
@@ -2498,6 +2641,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct& theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2505,7 +2649,7 @@ SMESH_MeshEditor_i::ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr the
SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector, theNbOfSteps, true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepObjectMakeGroups( " << theObject
<< ", " << theStepVector << ", " << theNbOfSteps << " )";
}
@@ -2521,6 +2665,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::ExtrusionSweepObject0DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct& theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2528,7 +2673,7 @@ SMESH_MeshEditor_i::ExtrusionSweepObject0DMakeGroups(SMESH::SMESH_IDSource_ptr t
SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector,
theNbOfSteps, true, SMDSAbs_Node);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepObject0DMakeGroups( " << theObject
<< ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
}
@@ -2544,6 +2689,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct& theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2551,7 +2697,7 @@ SMESH_MeshEditor_i::ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr t
SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector,
theNbOfSteps, true, SMDSAbs_Edge);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepObject1DMakeGroups( " << theObject
<< ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
}
@@ -2567,6 +2713,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct& theStepVector,
CORBA::Long theNbOfSteps)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -2574,7 +2721,7 @@ SMESH_MeshEditor_i::ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr t
SMESH::ListOfGroups * aGroups = extrusionSweep(anElementsId, theStepVector,
theNbOfSteps, true, SMDSAbs_Face);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".ExtrusionSweepObject2DMakeGroups( " << theObject
<< ", " << theStepVector << ", " << TVar( theNbOfSteps ) << " )";
}
@@ -2594,7 +2741,9 @@ SMESH_MeshEditor_i::advancedExtrusion(const SMESH::long_array & theIDsOfElements
CORBA::Long theExtrFlags,
CORBA::Double theSewTolerance,
const bool theMakeGroups)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TIDSortedElemSet elements;
@@ -2608,7 +2757,12 @@ SMESH_MeshEditor_i::advancedExtrusion(const SMESH::long_array & theIDsOfElements
getEditor().ExtrusionSweep (elements, stepVec, theNbOfSteps, aHystory,
theMakeGroups, theExtrFlags, theSewTolerance);
+ declareMeshModified( /*isReComputeSafe=*/true );
+
return theMakeGroups ? getGroups(groupIds.get()) : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -2621,6 +2775,7 @@ void SMESH_MeshEditor_i::AdvancedExtrusion(const SMESH::long_array & theIDsOfEle
CORBA::Long theNbOfSteps,
CORBA::Long theExtrFlags,
CORBA::Double theSewTolerance)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << "stepVector = " << theStepVector;
@@ -2649,6 +2804,7 @@ SMESH_MeshEditor_i::AdvancedExtrusionMakeGroups(const SMESH::long_array& theIDsO
CORBA::Long theNbOfSteps,
CORBA::Long theExtrFlags,
CORBA::Double theSewTolerance)
+ throw (SALOME::SALOME_Exception)
{
if (!myIsPreviewMode) {
TPythonDump() << "stepVector = " << theStepVector;
@@ -2663,7 +2819,7 @@ SMESH_MeshEditor_i::AdvancedExtrusionMakeGroups(const SMESH::long_array& theIDsO
true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".AdvancedExtrusionMakeGroups("
<< theIDsOfElements
<< ", stepVector, "
@@ -2714,7 +2870,9 @@ SMESH_MeshEditor_i::extrusionAlongPath(const SMESH::long_array & theIDsOfEleme
const bool theMakeGroups,
SMESH::SMESH_MeshEditor::Extrusion_Error & theError,
const SMDSAbs_ElementType theElementType)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
MESSAGE("extrusionAlongPath");
initData();
@@ -2754,7 +2912,8 @@ SMESH_MeshEditor_i::extrusionAlongPath(const SMESH::long_array & theIDsOfEleme
getEditor().ExtrusionAlongTrack( elements, aSubMesh, nodeStart,
theHasAngles, angles, false,
theHasRefPoint, refPnt, theMakeGroups );
- myMesh->GetMeshDS()->Modified();
+
+ declareMeshModified( /*isReComputeSafe=*/true );
theError = convExtrError( error );
if ( theMakeGroups ) {
@@ -2765,13 +2924,16 @@ SMESH_MeshEditor_i::extrusionAlongPath(const SMESH::long_array & theIDsOfEleme
return getGroups( & groupIDs );
}
return 0;
-}
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
+}
//=======================================================================
//function : extrusionAlongPathX
//purpose :
//=======================================================================
+
SMESH::ListOfGroups*
SMESH_MeshEditor_i::extrusionAlongPathX(const SMESH::long_array & IDsOfElements,
SMESH::SMESH_IDSource_ptr Path,
@@ -2784,7 +2946,9 @@ SMESH_MeshEditor_i::extrusionAlongPathX(const SMESH::long_array & IDsOfElements
bool MakeGroups,
const SMDSAbs_ElementType ElementType,
SMESH::SMESH_MeshEditor::Extrusion_Error & Error)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::ListOfGroups* EmptyGr = new SMESH::ListOfGroups;
initData();
@@ -2828,7 +2992,7 @@ SMESH_MeshEditor_i::extrusionAlongPathX(const SMESH::long_array & IDsOfElements
error = getEditor().ExtrusionAlongTrack( *workElements, &(aMeshImp->GetImpl()), aNodeStart,
HasAngles, angles, LinearVariation,
HasRefPoint, refPnt, MakeGroups );
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/true );
}
else if ( SMESH_subMesh_i* aSubMeshImp = SMESH::DownCast( Path ))
{
@@ -2846,7 +3010,7 @@ SMESH_MeshEditor_i::extrusionAlongPathX(const SMESH::long_array & IDsOfElements
error = getEditor().ExtrusionAlongTrack( *workElements, aSubMesh, aNodeStart,
HasAngles, angles, LinearVariation,
HasRefPoint, refPnt, MakeGroups );
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/true );
}
else if ( SMESH::DownCast( Path ))
{
@@ -2870,13 +3034,16 @@ SMESH_MeshEditor_i::extrusionAlongPathX(const SMESH::long_array & IDsOfElements
return getGroups( & groupIDs );
}
return EmptyGr;
-}
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
+}
//=======================================================================
//function : ExtrusionAlongPath
//purpose :
//=======================================================================
+
SMESH::SMESH_MeshEditor::Extrusion_Error
SMESH_MeshEditor_i::ExtrusionAlongPath(const SMESH::long_array & theIDsOfElements,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -2886,6 +3053,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPath(const SMESH::long_array & theIDsOfEleme
const SMESH::double_array & theAngles,
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
+ throw (SALOME::SALOME_Exception)
{
MESSAGE("ExtrusionAlongPath");
if ( !myIsPreviewMode ) {
@@ -2920,6 +3088,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPath(const SMESH::long_array & theIDsOfEleme
//function : ExtrusionAlongPathObject
//purpose :
//=======================================================================
+
SMESH::SMESH_MeshEditor::Extrusion_Error
SMESH_MeshEditor_i::ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -2929,6 +3098,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObje
const SMESH::double_array & theAngles,
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject( "
@@ -2963,6 +3133,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObje
//function : ExtrusionAlongPathObject1D
//purpose :
//=======================================================================
+
SMESH::SMESH_MeshEditor::Extrusion_Error
SMESH_MeshEditor_i::ExtrusionAlongPathObject1D(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -2972,6 +3143,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject1D(SMESH::SMESH_IDSource_ptr theOb
const SMESH::double_array & theAngles,
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject1D( "
@@ -3007,6 +3179,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject1D(SMESH::SMESH_IDSource_ptr theOb
//function : ExtrusionAlongPathObject2D
//purpose :
//=======================================================================
+
SMESH::SMESH_MeshEditor::Extrusion_Error
SMESH_MeshEditor_i::ExtrusionAlongPathObject2D(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -3016,6 +3189,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject2D(SMESH::SMESH_IDSource_ptr theOb
const SMESH::double_array & theAngles,
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct & theRefPoint)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << "error = " << this << ".ExtrusionAlongPathObject2D( "
@@ -3052,6 +3226,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObject2D(SMESH::SMESH_IDSource_ptr theOb
//function : ExtrusionAlongPathMakeGroups
//purpose :
//=======================================================================
+
SMESH::ListOfGroups*
SMESH_MeshEditor_i::ExtrusionAlongPathMakeGroups(const SMESH::long_array& theIDsOfElements,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -3062,6 +3237,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathMakeGroups(const SMESH::long_array& theI
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct& theRefPoint,
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3102,6 +3278,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathMakeGroups(const SMESH::long_array& theI
//function : ExtrusionAlongPathObjectMakeGroups
//purpose :
//=======================================================================
+
SMESH::ListOfGroups* SMESH_MeshEditor_i::
ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -3112,6 +3289,7 @@ ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct& theRefPoint,
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3154,6 +3332,7 @@ ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
//function : ExtrusionAlongPathObject1DMakeGroups
//purpose :
//=======================================================================
+
SMESH::ListOfGroups* SMESH_MeshEditor_i::
ExtrusionAlongPathObject1DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -3164,6 +3343,7 @@ ExtrusionAlongPathObject1DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct& theRefPoint,
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3207,6 +3387,7 @@ ExtrusionAlongPathObject1DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
//function : ExtrusionAlongPathObject2DMakeGroups
//purpose :
//=======================================================================
+
SMESH::ListOfGroups* SMESH_MeshEditor_i::
ExtrusionAlongPathObject2DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr thePathMesh,
@@ -3217,6 +3398,7 @@ ExtrusionAlongPathObject2DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
CORBA::Boolean theHasRefPoint,
const SMESH::PointStruct& theRefPoint,
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3256,11 +3438,11 @@ ExtrusionAlongPathObject2DMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
return aGroups;
}
-
//=======================================================================
//function : ExtrusionAlongPathObjX
//purpose :
//=======================================================================
+
SMESH::ListOfGroups* SMESH_MeshEditor_i::
ExtrusionAlongPathObjX(SMESH::SMESH_IDSource_ptr Object,
SMESH::SMESH_IDSource_ptr Path,
@@ -3273,6 +3455,7 @@ ExtrusionAlongPathObjX(SMESH::SMESH_IDSource_ptr Object,
CORBA::Boolean MakeGroups,
SMESH::ElementType ElemType,
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3314,11 +3497,11 @@ ExtrusionAlongPathObjX(SMESH::SMESH_IDSource_ptr Object,
return aGroups;
}
-
//=======================================================================
//function : ExtrusionAlongPathX
//purpose :
//=======================================================================
+
SMESH::ListOfGroups* SMESH_MeshEditor_i::
ExtrusionAlongPathX(const SMESH::long_array& IDsOfElements,
SMESH::SMESH_IDSource_ptr Path,
@@ -3331,6 +3514,7 @@ ExtrusionAlongPathX(const SMESH::long_array& IDsOfElements,
CORBA::Boolean MakeGroups,
SMESH::ElementType ElemType,
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3371,7 +3555,6 @@ ExtrusionAlongPathX(const SMESH::long_array& IDsOfElements,
return aGroups;
}
-
//================================================================================
/*!
* \brief Compute rotation angles for ExtrusionAlongPath as linear variation
@@ -3443,7 +3626,6 @@ SMESH_MeshEditor_i::LinearAnglesVariation(SMESH::SMESH_Mesh_ptr thePathMes
return aResult._retn();
}
-
//=======================================================================
//function : mirror
//purpose :
@@ -3456,7 +3638,9 @@ SMESH_MeshEditor_i::mirror(TIDSortedElemSet & theElements,
CORBA::Boolean theCopy,
bool theMakeGroups,
::SMESH_Mesh* theTargetMesh)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
gp_Pnt P ( theAxis.x, theAxis.y, theAxis.z );
@@ -3505,11 +3689,13 @@ SMESH_MeshEditor_i::mirror(TIDSortedElemSet & theElements,
}
else
{
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/false );
}
}
return theMakeGroups ? getGroups(groupIds.get()) : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -3521,6 +3707,7 @@ void SMESH_MeshEditor_i::Mirror(const SMESH::long_array & theIDsOfElem
const SMESH::AxisStruct & theAxis,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".Mirror( "
@@ -3547,6 +3734,7 @@ void SMESH_MeshEditor_i::MirrorObject(SMESH::SMESH_IDSource_ptr theObj
const SMESH::AxisStruct & theAxis,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".MirrorObject( "
@@ -3572,6 +3760,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::MirrorMakeGroups(const SMESH::long_array& theIDsOfElements,
const SMESH::AxisStruct& theMirror,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3583,7 +3772,7 @@ SMESH_MeshEditor_i::MirrorMakeGroups(const SMESH::long_array& theIDsO
aGroups = mirror(elements, theMirror, theMirrorType, true, true);
}
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".MirrorMakeGroups( "
<< theIDsOfElements << ", "
<< theMirror << ", "
@@ -3601,6 +3790,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct& theMirror,
SMESH::SMESH_MeshEditor::MirrorType theMirrorType)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3611,7 +3801,7 @@ SMESH_MeshEditor_i::MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr t
if (!myIsPreviewMode)
{
- DumpGroupsList(aPythonDump,aGroups);
+ dumpGroupsList(aPythonDump,aGroups);
aPythonDump << this << ".MirrorObjectMakeGroups( "
<< theObject << ", "
<< theMirror << ", "
@@ -3631,6 +3821,7 @@ SMESH_MeshEditor_i::MirrorMakeMesh(const SMESH::long_array& theIDsOfE
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
+ throw (SALOME::SALOME_Exception)
{
SMESH_Mesh_i* mesh_i;
SMESH::SMESH_Mesh_var mesh;
@@ -3678,6 +3869,7 @@ SMESH_MeshEditor_i::MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr the
SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
+ throw (SALOME::SALOME_Exception)
{
SMESH_Mesh_i* mesh_i;
SMESH::SMESH_Mesh_var mesh;
@@ -3724,7 +3916,9 @@ SMESH_MeshEditor_i::translate(TIDSortedElemSet & theElements,
CORBA::Boolean theCopy,
bool theMakeGroups,
::SMESH_Mesh* theTargetMesh)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
if ( theTargetMesh )
@@ -3762,12 +3956,14 @@ SMESH_MeshEditor_i::translate(TIDSortedElemSet & theElements,
}
else
{
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/false );
}
}
return theMakeGroups ? getGroups(groupIds.get()) : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -3778,6 +3974,7 @@ SMESH_MeshEditor_i::translate(TIDSortedElemSet & theElements,
void SMESH_MeshEditor_i::Translate(const SMESH::long_array & theIDsOfElements,
const SMESH::DirStruct & theVector,
CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception)
{
if (!myIsPreviewMode) {
TPythonDump() << this << ".Translate( "
@@ -3800,6 +3997,7 @@ void SMESH_MeshEditor_i::Translate(const SMESH::long_array & theIDsOfElements,
void SMESH_MeshEditor_i::TranslateObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & theVector,
CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception)
{
if (!myIsPreviewMode) {
TPythonDump() << this << ".TranslateObject( "
@@ -3823,6 +4021,7 @@ void SMESH_MeshEditor_i::TranslateObject(SMESH::SMESH_IDSource_ptr theObject,
SMESH::ListOfGroups*
SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::long_array& theIDsOfElements,
const SMESH::DirStruct& theVector)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3833,7 +4032,7 @@ SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::long_array& theIDsOfElement
aGroups = translate(elements,theVector,true,true);
}
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".TranslateMakeGroups( "
<< theIDsOfElements << ", "
<< theVector << " )";
@@ -3849,6 +4048,7 @@ SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::long_array& theIDsOfElement
SMESH::ListOfGroups*
SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct& theVector)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -3858,7 +4058,7 @@ SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObjec
aGroups = translate(elements, theVector, true, true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".TranslateObjectMakeGroups( "
<< theObject << ", "
<< theVector << " )";
@@ -3876,6 +4076,7 @@ SMESH_MeshEditor_i::TranslateMakeMesh(const SMESH::long_array& theIDsOfElements,
const SMESH::DirStruct& theVector,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
+ throw (SALOME::SALOME_Exception)
{
SMESH_Mesh_i* mesh_i;
SMESH::SMESH_Mesh_var mesh;
@@ -3922,7 +4123,9 @@ SMESH_MeshEditor_i::TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct& theVector,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH_Mesh_i* mesh_i;
SMESH::SMESH_Mesh_var mesh;
{ // open new scope to dump "MakeMesh" command
@@ -3953,6 +4156,9 @@ SMESH_MeshEditor_i::TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
mesh_i->GetGroups();
return mesh._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -3967,7 +4173,9 @@ SMESH_MeshEditor_i::rotate(TIDSortedElemSet & theElements,
CORBA::Boolean theCopy,
bool theMakeGroups,
::SMESH_Mesh* theTargetMesh)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
if ( theTargetMesh )
@@ -3999,18 +4207,14 @@ SMESH_MeshEditor_i::rotate(TIDSortedElemSet & theElements,
if ( theCopy && !myIsPreviewMode)
{
- if ( theTargetMesh )
- {
- theTargetMesh->GetMeshDS()->Modified();
- }
- else
- {
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
- }
+ if ( theTargetMesh ) theTargetMesh->GetMeshDS()->Modified();
+ else declareMeshModified( /*isReComputeSafe=*/false );
}
return theMakeGroups ? getGroups(groupIds.get()) : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -4022,6 +4226,7 @@ void SMESH_MeshEditor_i::Rotate(const SMESH::long_array & theIDsOfElements,
const SMESH::AxisStruct & theAxis,
CORBA::Double theAngle,
CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception)
{
if (!myIsPreviewMode) {
TPythonDump() << this << ".Rotate( "
@@ -4047,6 +4252,7 @@ void SMESH_MeshEditor_i::RotateObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct & theAxis,
CORBA::Double theAngle,
CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".RotateObject( "
@@ -4070,6 +4276,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::RotateMakeGroups(const SMESH::long_array& theIDsOfElements,
const SMESH::AxisStruct& theAxis,
CORBA::Double theAngle)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -4081,7 +4288,7 @@ SMESH_MeshEditor_i::RotateMakeGroups(const SMESH::long_array& theIDsOfElements,
aGroups = rotate(elements,theAxis,theAngle,true,true);
}
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotateMakeGroups( "
<< theIDsOfElements << ", "
<< theAxis << ", "
@@ -4099,6 +4306,7 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct& theAxis,
CORBA::Double theAngle)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
@@ -4108,7 +4316,7 @@ SMESH_MeshEditor_i::RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
aGroups = rotate(elements, theAxis, theAngle, true, true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".RotateObjectMakeGroups( "
<< theObject << ", "
<< theAxis << ", "
@@ -4128,7 +4336,9 @@ SMESH_MeshEditor_i::RotateMakeMesh(const SMESH::long_array& theIDsOfElements,
CORBA::Double theAngleInRadians,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::SMESH_Mesh_var mesh;
SMESH_Mesh_i* mesh_i;
@@ -4163,6 +4373,9 @@ SMESH_MeshEditor_i::RotateMakeMesh(const SMESH::long_array& theIDsOfElements,
mesh_i->GetGroups();
return mesh._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -4176,7 +4389,9 @@ SMESH_MeshEditor_i::RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
CORBA::Double theAngleInRadians,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::SMESH_Mesh_var mesh;
SMESH_Mesh_i* mesh_i;
@@ -4210,6 +4425,9 @@ SMESH_MeshEditor_i::RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
mesh_i->GetGroups();
return mesh._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -4224,7 +4442,9 @@ SMESH_MeshEditor_i::scale(SMESH::SMESH_IDSource_ptr theObject,
CORBA::Boolean theCopy,
bool theMakeGroups,
::SMESH_Mesh* theTargetMesh)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
if ( theScaleFact.length() < 1 )
THROW_SALOME_CORBA_EXCEPTION("Scale factor not given", SALOME::BAD_PARAM);
@@ -4271,18 +4491,13 @@ SMESH_MeshEditor_i::scale(SMESH::SMESH_IDSource_ptr theObject,
if ( theCopy && !myIsPreviewMode )
{
- if ( theTargetMesh )
- {
- theTargetMesh->GetMeshDS()->Modified();
- }
- else
- {
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
- }
+ if ( theTargetMesh ) theTargetMesh->GetMeshDS()->Modified();
+ else declareMeshModified( /*isReComputeSafe=*/false );
}
-
return theMakeGroups ? getGroups(groupIds.get()) : 0;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -4294,6 +4509,7 @@ void SMESH_MeshEditor_i::Scale(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::PointStruct& thePoint,
const SMESH::double_array& theScaleFact,
CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception)
{
if ( !myIsPreviewMode ) {
TPythonDump() << this << ".Scale( "
@@ -4315,12 +4531,13 @@ SMESH::ListOfGroups*
SMESH_MeshEditor_i::ScaleMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::PointStruct& thePoint,
const SMESH::double_array& theScaleFact)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
SMESH::ListOfGroups * aGroups = scale(theObject, thePoint, theScaleFact, true, true);
if (!myIsPreviewMode) {
- DumpGroupsList(aPythonDump, aGroups);
+ dumpGroupsList(aPythonDump, aGroups);
aPythonDump << this << ".Scale("
<< theObject << ","
<< thePoint << ","
@@ -4341,6 +4558,7 @@ SMESH_MeshEditor_i::ScaleMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::double_array& theScaleFact,
CORBA::Boolean theCopyGroups,
const char* theMeshName)
+ throw (SALOME::SALOME_Exception)
{
SMESH_Mesh_i* mesh_i;
SMESH::SMESH_Mesh_var mesh;
@@ -4380,7 +4598,9 @@ SMESH_MeshEditor_i::ScaleMakeMesh(SMESH::SMESH_IDSource_ptr theObject,
void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double Tolerance,
SMESH::array_of_long_array_out GroupsOfNodes)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
::SMESH_MeshEditor::TListOfListOfNodes aListOfListOfNodes;
@@ -4400,16 +4620,21 @@ void SMESH_MeshEditor_i::FindCoincidentNodes (CORBA::Double Tol
}
TPythonDump() << "coincident_nodes = " << this << ".FindCoincidentNodes( "
<< Tolerance << " )";
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=======================================================================
//function : FindCoincidentNodesOnPart
//purpose :
//=======================================================================
+
void SMESH_MeshEditor_i::FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr theObject,
CORBA::Double Tolerance,
SMESH::array_of_long_array_out GroupsOfNodes)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
TIDSortedNodeSet nodes;
@@ -4434,6 +4659,8 @@ void SMESH_MeshEditor_i::FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr
TPythonDump() << "coincident_nodes_on_part = " << this << ".FindCoincidentNodesOnPart( "
<GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+
+ declareMeshModified( /*isReComputeSafe=*/false );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=======================================================================
//function : FindEqualElements
//purpose :
//=======================================================================
+
void SMESH_MeshEditor_i::FindEqualElements(SMESH::SMESH_IDSource_ptr theObject,
SMESH::array_of_long_array_out GroupsOfElementsID)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESH::SMESH_GroupBase_var group = SMESH::SMESH_GroupBase::_narrow(theObject);
@@ -4559,6 +4797,8 @@ void SMESH_MeshEditor_i::FindEqualElements(SMESH::SMESH_IDSource_ptr theObj
TPythonDump() << "equal_elements = " << this << ".FindEqualElements( "
<GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+
+ declareMeshModified( /*isReComputeSafe=*/true );
aTPythonDump << "] )";
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=======================================================================
@@ -4602,14 +4846,18 @@ void SMESH_MeshEditor_i::MergeElements(const SMESH::array_of_long_array& GroupsO
//=======================================================================
void SMESH_MeshEditor_i::MergeEqualElements()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
getEditor().MergeEqualElements();
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/true );
TPythonDump() << this << ".MergeEqualElements()";
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
@@ -4622,7 +4870,9 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long NodeID,
CORBA::Double x,
CORBA::Double y,
CORBA::Double z)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData(/*deleteSearchers=*/false);
const SMDS_MeshNode * node = getMeshDS()->FindNode( NodeID );
@@ -4660,10 +4910,11 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long NodeID,
// Update Python script
TPythonDump() << "isDone = " << this << ".MoveNode( "
<< NodeID << ", " << TVar(x) << ", " << TVar(y) << ", " << TVar(z) << " )";
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/false );
}
+ SMESH_CATCH( SMESH::throwCorbaException );
+
return true;
}
@@ -4676,7 +4927,9 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long NodeID,
CORBA::Long SMESH_MeshEditor_i::FindNodeClosestTo(CORBA::Double x,
CORBA::Double y,
CORBA::Double z)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other
if ( !theNodeSearcher ) {
@@ -4686,6 +4939,7 @@ CORBA::Long SMESH_MeshEditor_i::FindNodeClosestTo(CORBA::Double x,
if ( const SMDS_MeshNode* node = theNodeSearcher->FindClosestTo( p ))
return node->GetID();
+ SMESH_CATCH( SMESH::throwCorbaException );
return 0;
}
@@ -4700,7 +4954,9 @@ CORBA::Long SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double x,
CORBA::Double y,
CORBA::Double z,
CORBA::Long theNodeID)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
// We keep theNodeSearcher until any mesh modification:
// 1) initData() deletes theNodeSearcher at any edition,
// 2) TSearchersDeleter - at any mesh compute event and mesh change
@@ -4755,11 +5011,13 @@ CORBA::Long SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double x,
<< ".MoveClosestNodeToPoint( "<< x << ", " << y << ", " << z
<< ", " << nodeID << " )";
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/false );
}
return nodeID;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -4774,7 +5032,9 @@ SMESH::long_array* SMESH_MeshEditor_i::FindElementsByPoint(CORBA::Double x,
CORBA::Double y,
CORBA::Double z,
SMESH::ElementType type)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::long_array_var res = new SMESH::long_array;
vector< const SMDS_MeshElement* > foundElems;
@@ -4797,6 +5057,9 @@ SMESH::long_array* SMESH_MeshEditor_i::FindElementsByPoint(CORBA::Double x,
<< type << " )";
return res._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -4812,7 +5075,9 @@ SMESH_MeshEditor_i::FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elementID
CORBA::Double y,
CORBA::Double z,
SMESH::ElementType type)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::long_array_var res = new SMESH::long_array;
SMESH::array_of_ElementType_var types = elementIDs->GetTypes();
@@ -4861,8 +5126,11 @@ SMESH_MeshEditor_i::FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elementID
<< type << " )";
return res._retn();
-
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
+
//=======================================================================
//function : GetPointState
//purpose : Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
@@ -4872,12 +5140,17 @@ SMESH_MeshEditor_i::FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elementID
CORBA::Short SMESH_MeshEditor_i::GetPointState(CORBA::Double x,
CORBA::Double y,
CORBA::Double z)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
theSearchersDeleter.Set( myMesh );
if ( !theElementSearcher ) {
theElementSearcher = myEditor.GetElementSearcher();
}
return CORBA::Short( theElementSearcher->GetPointState( gp_Pnt( x,y,z )));
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
@@ -4918,7 +5191,9 @@ SMESH_MeshEditor_i::SewFreeBorders(CORBA::Long FirstNodeID1,
CORBA::Long LastNodeID2,
CORBA::Boolean CreatePolygons,
CORBA::Boolean CreatePolyedrs)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -4961,10 +5236,11 @@ SMESH_MeshEditor_i::SewFreeBorders(CORBA::Long FirstNodeID1,
CreatePolyedrs) );
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
-
+ declareMeshModified( /*isReComputeSafe=*/false );
return error;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return SMESH::SMESH_MeshEditor::Sew_Error(0);
}
@@ -4979,7 +5255,9 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
CORBA::Long LastNodeID1,
CORBA::Long FirstNodeID2,
CORBA::Long SecondNodeID2)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -5016,11 +5294,11 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
true,
false, false) );
-
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
-
+ declareMeshModified( /*isReComputeSafe=*/false );
return error;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return SMESH::SMESH_MeshEditor::Sew_Error(0);
}
@@ -5037,7 +5315,9 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
CORBA::Long LastNodeIDOnSide,
CORBA::Boolean CreatePolygons,
CORBA::Boolean CreatePolyedrs)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -5077,11 +5357,11 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
CreatePolygons,
CreatePolyedrs) );
-
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
-
+ declareMeshModified( /*isReComputeSafe=*/false );
return error;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return SMESH::SMESH_MeshEditor::Sew_Error(0);
}
@@ -5097,7 +5377,9 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
CORBA::Long NodeID1OfSide2ToMerge,
CORBA::Long NodeID2OfSide1ToMerge,
CORBA::Long NodeID2OfSide2ToMerge)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
SMESHDS_Mesh* aMesh = getMeshDS();
@@ -5133,11 +5415,11 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
aSecondNode1ToMerge,
aSecondNode2ToMerge));
-
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
-
+ declareMeshModified( /*isReComputeSafe=*/false );
return error;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return SMESH::SMESH_MeshEditor::Sew_Error(0);
}
//================================================================================
@@ -5151,7 +5433,9 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide,
const SMESH::long_array& newIDs)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
const SMDS_MeshElement* elem = getMeshDS()->FindElement(ide);
@@ -5174,24 +5458,43 @@ CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide,
MESSAGE("ChangeElementNodes");
bool res = getMeshDS()->ChangeElementNodes( elem, & aNodes[0], nbn1+1 );
- myMesh->GetMeshDS()->Modified();
- if ( res )
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/ !res );
return res;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//=======================================================================
-//function : ConvertToQuadratic
-//purpose :
+/*!
+ * \brief Makes a part of the mesh quadratic or bi-quadratic
+ */
//=======================================================================
-void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d)
+void SMESH_MeshEditor_i::convertToQuadratic(CORBA::Boolean theForce3d,
+ CORBA::Boolean theToBiQuad,
+ SMESH::SMESH_IDSource_ptr theObject)
+ throw (SALOME::SALOME_Exception)
{
- getEditor().ConvertToQuadratic(theForce3d);
- TPythonDump() << this << ".ConvertToQuadratic( " << theForce3d << " )";
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ SMESH_TRY;
+ TIDSortedElemSet elems;
+ bool elemsOK;
+ if ( !( elemsOK = CORBA::is_nil( theObject )))
+ elemsOK = idSourceToSet( theObject, getMeshDS(), elems,
+ SMDSAbs_All, /*emptyIfIsMesh=*/true );
+ if ( elemsOK )
+ {
+ if ( !elems.empty() && (*elems.begin())->GetType() == SMDSAbs_Node )
+ THROW_SALOME_CORBA_EXCEPTION("Group of nodes is not allowed", SALOME::BAD_PARAM);
+
+ if ( elems.empty() ) getEditor().ConvertToQuadratic(theForce3d, theToBiQuad);
+ else getEditor().ConvertToQuadratic(theForce3d, elems, theToBiQuad);
+
+ declareMeshModified( /*isReComputeSafe=*/false );
+ }
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//=======================================================================
@@ -5200,14 +5503,26 @@ void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d)
//=======================================================================
CORBA::Boolean SMESH_MeshEditor_i::ConvertFromQuadratic()
+ throw (SALOME::SALOME_Exception)
{
CORBA::Boolean isDone = getEditor().ConvertFromQuadratic();
TPythonDump() << this << ".ConvertFromQuadratic()";
- myMesh->GetMeshDS()->Modified();
- if ( isDone )
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/!isDone );
return isDone;
}
+
+//=======================================================================
+//function : ConvertToQuadratic
+//purpose :
+//=======================================================================
+
+void SMESH_MeshEditor_i::ConvertToQuadratic(CORBA::Boolean theForce3d)
+ throw (SALOME::SALOME_Exception)
+{
+ convertToQuadratic( theForce3d, false );
+ TPythonDump() << this << ".ConvertToQuadratic("<GetType() == SMDSAbs_Node )
- {
- THROW_SALOME_CORBA_EXCEPTION("Group of nodes is not allowed", SALOME::BAD_PARAM);
- }
- else
- {
- getEditor().ConvertToQuadratic(theForce3d, elems);
- }
- }
- myMesh->GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ convertToQuadratic( theForce3d, false, theObject );
+ TPythonDump() << this << ".ConvertToQuadraticObject("<GetMeshDS()->Modified();
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/false );
pyDump << this << ".ConvertFromQuadraticObject( "<length() > 0;
- if(isDumpGroupList) {
+ bool isDumpGroupList = ( theGroupList && theGroupList->length() > 0 );
+ if ( isDumpGroupList )
theDumpPython << theGroupList << " = ";
- }
}
//================================================================================
@@ -5312,6 +5622,7 @@ void SMESH_MeshEditor_i::DumpGroupsList(TPythonDump & theDumpPytho
\return unique name
*/
//================================================================================
+
string SMESH_MeshEditor_i::generateGroupName(const string& thePrefix)
{
SMESH::ListOfGroups_var groups = myMesh_i->GetGroups();
@@ -5351,7 +5662,9 @@ string SMESH_MeshEditor_i::generateGroupName(const string& thePrefix)
CORBA::Boolean SMESH_MeshEditor_i::DoubleNodes( const SMESH::long_array& theNodes,
const SMESH::long_array& theModifiedElems )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
list< int > aListOfNodes;
@@ -5365,14 +5678,15 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodes( const SMESH::long_array& theNode
bool aResult = getEditor().DoubleNodes( aListOfNodes, aListOfElems );
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
// Update Python script
TPythonDump() << this << ".DoubleNodes( " << theNodes << ", "<< theModifiedElems << " )";
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5388,7 +5702,9 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodes( const SMESH::long_array& theNode
CORBA::Boolean SMESH_MeshEditor_i::DoubleNode( CORBA::Long theNodeId,
const SMESH::long_array& theModifiedElems )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::long_array_var aNodes = new SMESH::long_array;
aNodes->length( 1 );
aNodes[ 0 ] = theNodeId;
@@ -5400,6 +5716,9 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNode( CORBA::Long theNodeI
pyDump << this << ".DoubleNode( " << theNodeId << ", " << theModifiedElems << " )";
return done;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5415,7 +5734,9 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNode( CORBA::Long theNodeI
CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroup(SMESH::SMESH_GroupBase_ptr theNodes,
SMESH::SMESH_GroupBase_ptr theModifiedElems )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
if ( CORBA::is_nil( theNodes ) && theNodes->GetType() != SMESH::NODE )
return false;
@@ -5436,8 +5757,12 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroup(SMESH::SMESH_GroupBase_ptr th
pyDump << this << ".DoubleNodeGroup( " << theNodes << ", " << theModifiedElems << " )";
return done;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
+//================================================================================
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
* Works as DoubleNodeGroup(), but returns a new group with newly created nodes.
@@ -5446,10 +5771,14 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroup(SMESH::SMESH_GroupBase_ptr th
* \return a new group with newly created nodes
* \sa DoubleNodeGroup()
*/
+//================================================================================
+
SMESH::SMESH_Group_ptr
SMESH_MeshEditor_i::DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
SMESH::SMESH_GroupBase_ptr theModifiedElems )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::SMESH_Group_var aNewGroup;
if ( CORBA::is_nil( theNodes ) && theNodes->GetType() != SMESH::NODE )
@@ -5485,6 +5814,9 @@ SMESH_MeshEditor_i::DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
<< theModifiedElems << " )";
return aNewGroup._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5500,10 +5832,11 @@ SMESH_MeshEditor_i::DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroups(const SMESH::ListOfGroups& theNodes,
const SMESH::ListOfGroups& theModifiedElems )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
-
std::list< int > aNodes;
int i, n, j, m;
for ( i = 0, n = theNodes.length(); i < n; i++ )
@@ -5531,15 +5864,14 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroups(const SMESH::ListOfGroups& t
bool aResult = getEditor().DoubleNodes( aNodes, anElems );
-
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
-
+ declareMeshModified( /*isReComputeSafe=*/false );
TPythonDump() << this << ".DoubleNodeGroups( " << theNodes << ", " << theModifiedElems << " )";
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5556,6 +5888,7 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroups(const SMESH::ListOfGroups& t
SMESH::SMESH_Group_ptr
SMESH_MeshEditor_i::DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
const SMESH::ListOfGroups& theModifiedElems )
+ throw (SALOME::SALOME_Exception)
{
SMESH::SMESH_Group_var aNewGroup;
@@ -5599,11 +5932,11 @@ SMESH_MeshEditor_i::DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElem( const SMESH::long_array& theElems,
const SMESH::long_array& theNodesNot,
const SMESH::long_array& theAffectedElems )
-
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
-
SMESHDS_Mesh* aMeshDS = getMeshDS();
TIDSortedElemSet anElems, aNodes, anAffected;
arrayToSet(theElems, aMeshDS, anElems, SMDSAbs_All);
@@ -5612,15 +5945,15 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElem( const SMESH::long_array& theE
bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
-
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
-
// Update Python script
TPythonDump() << this << ".DoubleNodeElem( " << theElems << ", "
<< theNodesNot << ", " << theAffectedElems << " )";
+
+ declareMeshModified( /*isReComputeSafe=*/false );
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5640,8 +5973,9 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElem( const SMESH::long_array& theE
CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemInRegion ( const SMESH::long_array& theElems,
const SMESH::long_array& theNodesNot,
GEOM::GEOM_Object_ptr theShape )
-
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
@@ -5653,15 +5987,15 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemInRegion ( const SMESH::long_ar
TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theShape );
bool aResult = getEditor().DoubleNodesInRegion( anElems, aNodes, aShape );
-
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
-
// Update Python script
TPythonDump() << "isDone = " << this << ".DoubleNodeElemInRegion( " << theElems << ", "
<< theNodesNot << ", " << theShape << " )";
+
+ declareMeshModified( /*isReComputeSafe=*/false );
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5676,10 +6010,13 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemInRegion ( const SMESH::long_ar
*/
//================================================================================
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemGroup(SMESH::SMESH_GroupBase_ptr theElems,
- SMESH::SMESH_GroupBase_ptr theNodesNot,
- SMESH::SMESH_GroupBase_ptr theAffectedElems)
+CORBA::Boolean
+SMESH_MeshEditor_i::DoubleNodeElemGroup(SMESH::SMESH_GroupBase_ptr theElems,
+ SMESH::SMESH_GroupBase_ptr theNodesNot,
+ SMESH::SMESH_GroupBase_ptr theAffectedElems)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
if ( CORBA::is_nil( theElems ) && theElems->GetType() == SMESH::NODE )
return false;
@@ -5694,17 +6031,18 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemGroup(SMESH::SMESH_GroupBase_pt
bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
-
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
-
// Update Python script
TPythonDump() << "isDone = " << this << ".DoubleNodeElemGroup( " << theElems << ", "
<< theNodesNot << ", " << theAffectedElems << " )";
+
+ declareMeshModified( /*isReComputeSafe=*/false );
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
+//================================================================================
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
* Works as DoubleNodeElemGroup(), but returns a new group with newly created elements.
@@ -5715,10 +6053,13 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemGroup(SMESH::SMESH_GroupBase_pt
* \return a new group with newly created elements
* \sa DoubleNodeElemGroup()
*/
+//================================================================================
+
SMESH::SMESH_Group_ptr
SMESH_MeshEditor_i::DoubleNodeElemGroupNew(SMESH::SMESH_GroupBase_ptr theElems,
SMESH::SMESH_GroupBase_ptr theNodesNot,
SMESH::SMESH_GroupBase_ptr theAffectedElems)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump pyDump;
SMESH::ListOfGroups_var twoGroups = DoubleNodeElemGroup2New( theElems,
@@ -5736,13 +6077,28 @@ SMESH_MeshEditor_i::DoubleNodeElemGroupNew(SMESH::SMESH_GroupBase_ptr theElems,
return elemGroup._retn();
}
+//================================================================================
+/*!
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+ * Works as DoubleNodeElemGroup(), but returns a new group with newly created elements.
+ * \param theElems - group of of elements (edges or faces) to be replicated
+ * \param theNodesNot - group of nodes not to replicated
+ * \param theAffectedElems - group of elements to which the replicated nodes
+ * should be associated to.
+ * \return a new group with newly created elements
+ * \sa DoubleNodeElemGroup()
+ */
+//================================================================================
+
SMESH::ListOfGroups*
SMESH_MeshEditor_i::DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
SMESH::SMESH_GroupBase_ptr theNodesNot,
SMESH::SMESH_GroupBase_ptr theAffectedElems,
CORBA::Boolean theElemGroupNeeded,
CORBA::Boolean theNodeGroupNeeded)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::SMESH_Group_var aNewElemGroup, aNewNodeGroup;
SMESH::ListOfGroups_var aTwoGroups = new SMESH::ListOfGroups();
aTwoGroups->length( 2 );
@@ -5762,14 +6118,12 @@ SMESH_MeshEditor_i::DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
TPythonDump pyDump;
if ( aResult )
{
- myMesh->SetIsModified( true );
-
// Create group with newly created elements
CORBA::String_var elemGroupName = theElems->GetName();
string aNewName = generateGroupName( string(elemGroupName.in()) + "_double");
@@ -5805,6 +6159,9 @@ SMESH_MeshEditor_i::DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
aTwoGroups[0] = aNewElemGroup._retn();
aTwoGroups[1] = aNewNodeGroup._retn();
return aTwoGroups._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5820,11 +6177,13 @@ SMESH_MeshEditor_i::DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
*/
//================================================================================
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemGroupInRegion(SMESH::SMESH_GroupBase_ptr theElems,
- SMESH::SMESH_GroupBase_ptr theNodesNot,
- GEOM::GEOM_Object_ptr theShape )
-
+CORBA::Boolean
+SMESH_MeshEditor_i::DoubleNodeElemGroupInRegion(SMESH::SMESH_GroupBase_ptr theElems,
+ SMESH::SMESH_GroupBase_ptr theNodesNot,
+ GEOM::GEOM_Object_ptr theShape )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
if ( CORBA::is_nil( theElems ) && theElems->GetType() == SMESH::NODE )
return false;
@@ -5840,27 +6199,25 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemGroupInRegion(SMESH::SMESH_Grou
bool aResult = getEditor().DoubleNodesInRegion( anElems, aNodes, aShape );
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
// Update Python script
TPythonDump() << "isDone = " << this << ".DoubleNodeElemGroupInRegion( " << theElems << ", "
<< theNodesNot << ", " << theShape << " )";
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
/*!
- \brief Creates a hole in a mesh by doubling the nodes of some particular elements
- This method provided for convenience works as DoubleNodes() described above.
- \param theElems - list of groups of elements (edges or faces) to be replicated
- \param theNodesNot - list of groups of nodes not to replicated
- \param theAffectedElems - group of elements to which the replicated nodes
- should be associated to.
- \return TRUE if operation has been completed successfully, FALSE otherwise
- \sa DoubleNodeGroup(), DoubleNodes(), DoubleNodeElemGroupsNew()
-*/
+ * \brief Re-load elements from a list of groups into a TIDSortedElemSet
+ * \param [in] theGrpList - groups
+ * \param [in] theMeshDS - mesh
+ * \param [out] theElemSet - set of elements
+ * \param [in] theIsNodeGrp - is \a theGrpList includes goups of nodes
+ */
//================================================================================
static void listOfGroupToSet(const SMESH::ListOfGroups& theGrpList,
@@ -5880,10 +6237,26 @@ static void listOfGroupToSet(const SMESH::ListOfGroups& theGrpList,
}
}
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemGroups(const SMESH::ListOfGroups& theElems,
- const SMESH::ListOfGroups& theNodesNot,
- const SMESH::ListOfGroups& theAffectedElems)
+//================================================================================
+/*!
+ \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
+ This method provided for convenience works as DoubleNodes() described above.
+ \param theElems - list of groups of elements (edges or faces) to be replicated
+ \param theNodesNot - list of groups of nodes not to replicated
+ \param theAffectedElems - group of elements to which the replicated nodes
+ should be associated to.
+ \return TRUE if operation has been completed successfully, FALSE otherwise
+ \sa DoubleNodeGroup(), DoubleNodes(), DoubleNodeElemGroupsNew()
+*/
+//================================================================================
+
+CORBA::Boolean
+SMESH_MeshEditor_i::DoubleNodeElemGroups(const SMESH::ListOfGroups& theElems,
+ const SMESH::ListOfGroups& theNodesNot,
+ const SMESH::ListOfGroups& theAffectedElems)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
@@ -5895,15 +6268,15 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemGroups(const SMESH::ListOfGroup
bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
-
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
-
// Update Python script
TPythonDump() << "isDone = " << this << ".DoubleNodeElemGroups( " << &theElems << ", "
<< &theNodesNot << ", " << &theAffectedElems << " )";
+
+ declareMeshModified( /*isReComputeSafe=*/false );
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -5923,6 +6296,7 @@ SMESH::SMESH_Group_ptr
SMESH_MeshEditor_i::DoubleNodeElemGroupsNew(const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
const SMESH::ListOfGroups& theAffectedElems)
+ throw (SALOME::SALOME_Exception)
{
TPythonDump pyDump;
SMESH::ListOfGroups_var twoGroups = DoubleNodeElemGroups2New( theElems,
@@ -5940,13 +6314,28 @@ SMESH_MeshEditor_i::DoubleNodeElemGroupsNew(const SMESH::ListOfGroups& theElems,
return elemGroup._retn();
}
+//================================================================================
+/*!
+ * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
+ * Works as DoubleNodeElemGroups(), but returns a new group with newly created elements.
+ \param theElems - list of groups of elements (edges or faces) to be replicated
+ \param theNodesNot - list of groups of nodes not to replicated
+ \param theAffectedElems - group of elements to which the replicated nodes
+ should be associated to.
+ * \return a new group with newly created elements
+ * \sa DoubleNodeElemGroups()
+ */
+//================================================================================
+
SMESH::ListOfGroups*
SMESH_MeshEditor_i::DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
const SMESH::ListOfGroups& theAffectedElems,
CORBA::Boolean theElemGroupNeeded,
CORBA::Boolean theNodeGroupNeeded)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
SMESH::SMESH_Group_var aNewElemGroup, aNewNodeGroup;
SMESH::ListOfGroups_var aTwoGroups = new SMESH::ListOfGroups();
aTwoGroups->length( 2 );
@@ -5962,13 +6351,11 @@ SMESH_MeshEditor_i::DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems
bool aResult = getEditor().DoubleNodes( anElems, aNodes, anAffected );
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
- myMesh->GetMeshDS()->Modified();
TPythonDump pyDump;
if ( aResult )
{
- myMesh->SetIsModified( true );
-
// Create group with newly created elements
CORBA::String_var elemGroupName = theElems[0]->GetName();
string aNewName = generateGroupName( string(elemGroupName.in()) + "_double");
@@ -6004,6 +6391,9 @@ SMESH_MeshEditor_i::DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems
aTwoGroups[0] = aNewElemGroup._retn();
aTwoGroups[1] = aNewNodeGroup._retn();
return aTwoGroups._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -6024,7 +6414,9 @@ CORBA::Boolean
SMESH_MeshEditor_i::DoubleNodeElemGroupsInRegion(const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
GEOM::GEOM_Object_ptr theShape )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
@@ -6036,20 +6428,21 @@ SMESH_MeshEditor_i::DoubleNodeElemGroupsInRegion(const SMESH::ListOfGroups& theE
TopoDS_Shape aShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theShape );
bool aResult = getEditor().DoubleNodesInRegion( anElems, aNodes, aShape );
-
- myMesh->GetMeshDS()->Modified();
- if ( aResult )
- myMesh->SetIsModified( true );
-
// Update Python script
TPythonDump() << "isDone = " << this << ".DoubleNodeElemGroupsInRegion( " << &theElems << ", "
<< &theNodesNot << ", " << theShape << " )";
+
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
/*!
- \brief Identify the elements that will be affected by node duplication (actual duplication is not performed.
+ \brief Identify the elements that will be affected by node duplication (actual
+ duplication is not performed.
This method is the first step of DoubleNodeElemGroupsInRegion.
\param theElems - list of groups of elements (edges or faces) to be replicated
\param theNodesNot - list of groups of nodes not to replicated
@@ -6058,13 +6451,15 @@ SMESH_MeshEditor_i::DoubleNodeElemGroupsInRegion(const SMESH::ListOfGroups& theE
The replicated nodes should be associated to affected elements.
\return groups of affected elements
\sa DoubleNodeElemGroupsInRegion()
- */
+*/
//================================================================================
SMESH::ListOfGroups*
SMESH_MeshEditor_i::AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
GEOM::GEOM_Object_ptr theShape )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
MESSAGE("AffectedElemGroupsInRegion");
SMESH::ListOfGroups_var aListOfGroups = new SMESH::ListOfGroups();
bool isEdgeGroup = false;
@@ -6088,80 +6483,74 @@ SMESH_MeshEditor_i::AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theEl
bool aResult = aMeshEditor.AffectedElemGroupsInRegion(anElems, aNodes, aShape, anAffected);
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
+
TPythonDump pyDump;
if (aResult)
+ {
+ int lg = anAffected.size();
+ MESSAGE("lg="<< lg);
+ SMESH::long_array_var volumeIds = new SMESH::long_array;
+ volumeIds->length(lg);
+ SMESH::long_array_var faceIds = new SMESH::long_array;
+ faceIds->length(lg);
+ SMESH::long_array_var edgeIds = new SMESH::long_array;
+ edgeIds->length(lg);
+ int ivol = 0;
+ int iface = 0;
+ int iedge = 0;
+
+ TIDSortedElemSet::const_iterator eIt = anAffected.begin();
+ for (; eIt != anAffected.end(); ++eIt)
{
- myMesh->SetIsModified(true);
-
- int lg = anAffected.size();
- MESSAGE("lg="<< lg);
- SMESH::long_array_var volumeIds = new SMESH::long_array;
- volumeIds->length(lg);
- SMESH::long_array_var faceIds = new SMESH::long_array;
- faceIds->length(lg);
- SMESH::long_array_var edgeIds = new SMESH::long_array;
- edgeIds->length(lg);
- int ivol = 0;
- int iface = 0;
- int iedge = 0;
-
- TIDSortedElemSet::const_iterator eIt = anAffected.begin();
- for (; eIt != anAffected.end(); ++eIt)
- {
- const SMDS_MeshElement* anElem = *eIt;
- if (!anElem)
- continue;
- int elemId = anElem->GetID();
- if (myMesh->GetElementType(elemId, true) == SMDSAbs_Volume)
- volumeIds[ivol++] = elemId;
- else if (myMesh->GetElementType(elemId, true) == SMDSAbs_Face)
- faceIds[iface++] = elemId;
- else if (myMesh->GetElementType(elemId, true) == SMDSAbs_Edge)
- edgeIds[iedge++] = elemId;
- }
- volumeIds->length(ivol);
- faceIds->length(iface);
- edgeIds->length(iedge);
-
- aNewVolumeGroup->Add(volumeIds);
- aNewFaceGroup->Add(faceIds);
- aNewEdgeGroup->Add(edgeIds);
- isVolumeGroup = (aNewVolumeGroup->Size() > 0);
- isFaceGroup = (aNewFaceGroup->Size() > 0);
- isEdgeGroup = (aNewEdgeGroup->Size() > 0);
+ const SMDS_MeshElement* anElem = *eIt;
+ if (!anElem)
+ continue;
+ int elemId = anElem->GetID();
+ if (myMesh->GetElementType(elemId, true) == SMDSAbs_Volume)
+ volumeIds[ivol++] = elemId;
+ else if (myMesh->GetElementType(elemId, true) == SMDSAbs_Face)
+ faceIds[iface++] = elemId;
+ else if (myMesh->GetElementType(elemId, true) == SMDSAbs_Edge)
+ edgeIds[iedge++] = elemId;
}
+ volumeIds->length(ivol);
+ faceIds->length(iface);
+ edgeIds->length(iedge);
+
+ aNewVolumeGroup->Add(volumeIds);
+ aNewFaceGroup->Add(faceIds);
+ aNewEdgeGroup->Add(edgeIds);
+ isVolumeGroup = (aNewVolumeGroup->Size() > 0);
+ isFaceGroup = (aNewFaceGroup->Size() > 0);
+ isEdgeGroup = (aNewEdgeGroup->Size() > 0);
+ }
int nbGroups = 0;
- if (isEdgeGroup)
- nbGroups++;
- if (isFaceGroup)
- nbGroups++;
- if (isVolumeGroup)
- nbGroups++;
+ if (isEdgeGroup) nbGroups++;
+ if (isFaceGroup) nbGroups++;
+ if (isVolumeGroup) nbGroups++;
aListOfGroups->length(nbGroups);
int i = 0;
- if (isEdgeGroup)
- aListOfGroups[i++] = aNewEdgeGroup._retn();
- if (isFaceGroup)
- aListOfGroups[i++] = aNewFaceGroup._retn();
- if (isVolumeGroup)
- aListOfGroups[i++] = aNewVolumeGroup._retn();
+ if (isEdgeGroup) aListOfGroups[i++] = aNewEdgeGroup._retn();
+ if (isFaceGroup) aListOfGroups[i++] = aNewFaceGroup._retn();
+ if (isVolumeGroup) aListOfGroups[i++] = aNewVolumeGroup._retn();
// Update Python script
pyDump << "[ ";
- if (isEdgeGroup)
- pyDump << aNewEdgeGroup << ", ";
- if (isFaceGroup)
- pyDump << aNewFaceGroup << ", ";
- if (isVolumeGroup)
- pyDump << aNewVolumeGroup << ", ";
+ if (isEdgeGroup) pyDump << aNewEdgeGroup << ", ";
+ if (isFaceGroup) pyDump << aNewFaceGroup << ", ";
+ if (isVolumeGroup) pyDump << aNewVolumeGroup << ", ";
pyDump << "] = ";
- pyDump << this << ".AffectedElemGroupsInRegion( " << &theElems << ", " << &theNodesNot << ", " << theShape << " )";
+ pyDump << this << ".AffectedElemGroupsInRegion( "
+ << &theElems << ", " << &theNodesNot << ", " << theShape << " )";
return aListOfGroups._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
//================================================================================
@@ -6173,18 +6562,26 @@ SMESH_MeshEditor_i::AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theEl
//================================================================================
CORBA::Boolean SMESH_MeshEditor_i::Make2DMeshFrom3D()
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
bool aResult = getEditor().Make2DMeshFrom3D();
- myMesh->GetMeshDS()->Modified();
+
TPythonDump() << "isDone = " << this << ".Make2DMeshFrom3D()";
+
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return false;
}
//================================================================================
/*!
- * \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
+ * \brief Double nodes on shared faces between groups of volumes and create flat
+ * elements on demand.
* The list of groups must describe a partition of the mesh volumes.
* The nodes of the internal faces at the boundaries of the groups are doubled.
* In option, the internal faces are replaced by flat elements.
@@ -6196,8 +6593,9 @@ CORBA::Boolean SMESH_MeshEditor_i::Make2DMeshFrom3D()
*/
//================================================================================
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& theDomains,
- CORBA::Boolean createJointElems )
+CORBA::Boolean
+SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& theDomains,
+ CORBA::Boolean createJointElems )
throw (SALOME::SALOME_Exception)
{
bool aResult = false;
@@ -6228,7 +6626,7 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries( const SMESH::Li
aResult = getEditor().DoubleNodesOnGroupBoundaries( domains, createJointElems );
// TODO publish the groups of flat elements in study
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
// Update Python script
TPythonDump() << "isDone = " << this << ".DoubleNodesOnGroupBoundaries( " << &theDomains
@@ -6251,11 +6649,13 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries( const SMESH::Li
*/
//================================================================================
-CORBA::Boolean SMESH_MeshEditor_i::CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups& theGroupsOfFaces )
+CORBA::Boolean
+SMESH_MeshEditor_i::CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups& theGroupsOfFaces )
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
-
SMESHDS_Mesh* aMeshDS = getMeshDS();
vector faceGroups;
@@ -6277,23 +6677,32 @@ CORBA::Boolean SMESH_MeshEditor_i::CreateFlatElementsOnFacesGroups( const SMESH:
bool aResult = getEditor().CreateFlatElementsOnFacesGroups( faceGroups );
// TODO publish the groups of flat elements in study
- myMesh->GetMeshDS()->Modified();
+ declareMeshModified( /*isReComputeSafe=*/ !aResult );
// Update Python script
- TPythonDump() << "isDone = " << this << ".CreateFlatElementsOnFacesGroups( " << &theGroupsOfFaces << " )";
+ TPythonDump() << this << ".CreateFlatElementsOnFacesGroups( " << &theGroupsOfFaces << " )";
return aResult;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return false;
}
+//================================================================================
/*!
- * \brief identify all the elements around a geom shape, get the faces delimiting the hole
- * Build groups of volume to remove, groups of faces to replace on the skin of the object,
- * groups of faces to remove inside the object, (idem edges).
- * Build ordered list of nodes at the border of each group of faces to replace (to be used to build a geom subshape)
+ * \brief Identify all the elements around a geom shape, get the faces delimiting
+ * the hole.
+ *
+ * Build groups of volume to remove, groups of faces to replace on the skin of the
+ * object, groups of faces to remove inside the object, (idem edges).
+ * Build ordered list of nodes at the border of each group of faces to replace
+ * (to be used to build a geom subshape).
*/
-void SMESH_MeshEditor_i::CreateHoleSkin(CORBA::Double radius,
- GEOM::GEOM_Object_ptr theShape,
- const char* groupName,
- const SMESH::double_array& theNodesCoords,
+//================================================================================
+
+void SMESH_MeshEditor_i::CreateHoleSkin(CORBA::Double radius,
+ GEOM::GEOM_Object_ptr theShape,
+ const char* groupName,
+ const SMESH::double_array& theNodesCoords,
SMESH::array_of_long_array_out GroupsOfNodes)
throw (SALOME::SALOME_Exception)
{
@@ -6338,7 +6747,6 @@ void SMESH_MeshEditor_i::CreateHoleSkin(CORBA::Double radius,
SMESH_CATCH( SMESH::throwCorbaException );
}
-
// issue 20749 ===================================================================
/*!
* \brief Creates missing boundary elements
@@ -6364,7 +6772,9 @@ SMESH_MeshEditor_i::MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr idSource,
CORBA::Boolean toCopyElements,
CORBA::Boolean toCopyExistingBondary,
SMESH::SMESH_Group_out group)
+ throw (SALOME::SALOME_Exception)
{
+ SMESH_TRY;
initData();
if ( dim > SMESH::BND_1DFROM2D )
@@ -6430,6 +6840,9 @@ SMESH_MeshEditor_i::MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr idSource,
group = group_var._retn();
return mesh_var._retn();
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return SMESH::SMESH_Mesh::_nil();
}
//================================================================================
@@ -6458,8 +6871,7 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
SMESH::SMESH_Group_out group)
throw (SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
-
+ SMESH_TRY;
initData();
if ( dim > SMESH::BND_1DFROM2D )
@@ -6586,4 +6998,7 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
mesh = mesh_var._retn();
group = group_var._retn();
return nbAdded;
+
+ SMESH_CATCH( SMESH::throwCorbaException );
+ return 0;
}
diff --git a/src/SMESH_I/SMESH_MeshEditor_i.hxx b/src/SMESH_I/SMESH_MeshEditor_i.hxx
index d3295821d..6ae4bec43 100644
--- a/src/SMESH_I/SMESH_MeshEditor_i.hxx
+++ b/src/SMESH_I/SMESH_MeshEditor_i.hxx
@@ -61,23 +61,23 @@ public:
/*!
* Return data of mesh edition preview
*/
- SMESH::MeshPreviewStruct* GetPreviewData();
+ SMESH::MeshPreviewStruct* GetPreviewData() throw (SALOME::SALOME_Exception);
/*!
* If during last operation of MeshEditor some nodes were
* created this method returns list of their IDs, if new nodes
* not created - returns an empty list
*/
- SMESH::long_array* GetLastCreatedNodes();
+ SMESH::long_array* GetLastCreatedNodes() throw (SALOME::SALOME_Exception);
/*!
* If during last operation of MeshEditor some elements were
* created this method returns list of their IDs, if new elements
* not created - returns an empty list
*/
- SMESH::long_array* GetLastCreatedElems();
+ SMESH::long_array* GetLastCreatedElems() throw (SALOME::SALOME_Exception);
/*!
* \brief Returns description of an error/warning occured during the last operation
*/
- SMESH::ComputeError* GetLastError();
+ SMESH::ComputeError* GetLastError() throw (SALOME::SALOME_Exception);
/*!
* \brief Wrap a sequence of ids in a SMESH_IDSource
@@ -85,25 +85,37 @@ public:
SMESH::SMESH_IDSource_ptr MakeIDSource(const SMESH::long_array& IDsOfElements,
SMESH::ElementType type);
static bool IsTemporaryIDSource( SMESH::SMESH_IDSource_ptr& idSource );
- CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements);
- CORBA::Boolean RemoveNodes(const SMESH::long_array & IDsOfNodes);
- CORBA::Long RemoveOrphanNodes();
+
+ CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Boolean RemoveNodes (const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Long RemoveOrphanNodes()
+ throw (SALOME::SALOME_Exception);
/*!
* Methods for creation new elements.
* Returns ID of created element or 0 if element not created
*/
- CORBA::Long AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z);
- CORBA::Long Add0DElement(CORBA::Long IDOfNode);
+ CORBA::Long AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Long Add0DElement(CORBA::Long IDOfNode)
+ throw (SALOME::SALOME_Exception);
CORBA::Long AddBall(CORBA::Long IDOfNodem, CORBA::Double diameter)
throw (SALOME::SALOME_Exception);
- CORBA::Long AddEdge(const SMESH::long_array & IDsOfNodes);
- CORBA::Long AddFace(const SMESH::long_array & IDsOfNodes);
- CORBA::Long AddPolygonalFace(const SMESH::long_array & IDsOfNodes);
- CORBA::Long AddVolume(const SMESH::long_array & IDsOfNodes);
+ CORBA::Long AddEdge(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Long AddFace(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Long AddPolygonalFace(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Long AddVolume(const SMESH::long_array & IDsOfNodes)
+ throw (SALOME::SALOME_Exception);
CORBA::Long AddPolyhedralVolume(const SMESH::long_array & IDsOfNodes,
- const SMESH::long_array & Quantities);
- CORBA::Long AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces);
+ const SMESH::long_array & Quantities)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Long AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces)
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Create 0D elements on all nodes of the given object except those
@@ -161,12 +173,18 @@ public:
CORBA::Boolean MoveNode(CORBA::Long NodeID,
- CORBA::Double x, CORBA::Double y, CORBA::Double z);
+ CORBA::Double x, CORBA::Double y, CORBA::Double z)
+ throw (SALOME::SALOME_Exception);
+
+ CORBA::Boolean InverseDiag(CORBA::Long NodeID1, CORBA::Long NodeID2)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Boolean DeleteDiag(CORBA::Long NodeID1, CORBA::Long NodeID2)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Boolean Reorient(const SMESH::long_array & IDsOfElements)
+ throw (SALOME::SALOME_Exception);
+ CORBA::Boolean ReorientObject(SMESH::SMESH_IDSource_ptr theObject)
+ throw (SALOME::SALOME_Exception);
- CORBA::Boolean InverseDiag(CORBA::Long NodeID1, CORBA::Long NodeID2);
- CORBA::Boolean DeleteDiag(CORBA::Long NodeID1, CORBA::Long NodeID2);
- CORBA::Boolean Reorient(const SMESH::long_array & IDsOfElements);
- CORBA::Boolean ReorientObject(SMESH::SMESH_IDSource_ptr theObject);
/*!
* \brief Reorient faces contained in \a the2Dgroup.
* \param the2Dgroup - the mesh or its part to reorient
@@ -184,114 +202,143 @@ public:
// Split/Join faces
CORBA::Boolean TriToQuad (const SMESH::long_array & IDsOfElements,
SMESH::NumericalFunctor_ptr Criterion,
- CORBA::Double MaxAngle);
+ CORBA::Double MaxAngle)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean TriToQuadObject (SMESH::SMESH_IDSource_ptr theObject,
SMESH::NumericalFunctor_ptr Criterion,
- CORBA::Double MaxAngle);
+ CORBA::Double MaxAngle)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean QuadToTri (const SMESH::long_array & IDsOfElements,
- SMESH::NumericalFunctor_ptr Criterion);
+ SMESH::NumericalFunctor_ptr Criterion)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean QuadToTriObject (SMESH::SMESH_IDSource_ptr theObject,
- SMESH::NumericalFunctor_ptr Criterion);
+ SMESH::NumericalFunctor_ptr Criterion)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean SplitQuad (const SMESH::long_array & IDsOfElements,
- CORBA::Boolean Diag13);
+ CORBA::Boolean Diag13)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean SplitQuadObject (SMESH::SMESH_IDSource_ptr theObject,
- CORBA::Boolean Diag13);
+ CORBA::Boolean Diag13)
+ throw (SALOME::SALOME_Exception);
CORBA::Long BestSplit (CORBA::Long IDOfQuad,
- SMESH::NumericalFunctor_ptr Criterion);
- void SplitVolumesIntoTetra (SMESH::SMESH_IDSource_ptr elems,
- CORBA::Short methodFlags) throw (SALOME::SALOME_Exception);
+ SMESH::NumericalFunctor_ptr Criterion)
+ throw (SALOME::SALOME_Exception);
+ void SplitVolumesIntoTetra(SMESH::SMESH_IDSource_ptr elems,
+ CORBA::Short methodFlags)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean Smooth(const SMESH::long_array & IDsOfElements,
const SMESH::long_array & IDsOfFixedNodes,
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
- SMESH::SMESH_MeshEditor::Smooth_Method Method);
+ SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean SmoothObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::long_array & IDsOfFixedNodes,
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
- SMESH::SMESH_MeshEditor::Smooth_Method Method);
+ SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean SmoothParametric(const SMESH::long_array & IDsOfElements,
const SMESH::long_array & IDsOfFixedNodes,
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
- SMESH::SMESH_MeshEditor::Smooth_Method Method);
+ SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean SmoothParametricObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::long_array & IDsOfFixedNodes,
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
- SMESH::SMESH_MeshEditor::Smooth_Method Method);
+ SMESH::SMESH_MeshEditor::Smooth_Method Method)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean smooth(const SMESH::long_array & IDsOfElements,
const SMESH::long_array & IDsOfFixedNodes,
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method,
- bool IsParametric);
+ bool IsParametric)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean smoothObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::long_array & IDsOfFixedNodes,
CORBA::Long MaxNbOfIterations,
CORBA::Double MaxAspectRatio,
SMESH::SMESH_MeshEditor::Smooth_Method Method,
- bool IsParametric);
-
-
- void ConvertToQuadratic(CORBA::Boolean Force3d);
- CORBA::Boolean ConvertFromQuadratic();
- void ConvertToQuadraticObject(CORBA::Boolean theForce3d,
- SMESH::SMESH_IDSource_ptr theObject)
- throw (SALOME::SALOME_Exception);
- void ConvertFromQuadraticObject(SMESH::SMESH_IDSource_ptr theObject)
+ bool IsParametric)
throw (SALOME::SALOME_Exception);
- void RenumberNodes();
- void RenumberElements();
+ CORBA::Boolean ConvertFromQuadratic()
+ throw (SALOME::SALOME_Exception);
+ void ConvertFromQuadraticObject(SMESH::SMESH_IDSource_ptr theObject)
+ throw (SALOME::SALOME_Exception);
+ void ConvertToQuadratic(CORBA::Boolean Force3d)
+ throw (SALOME::SALOME_Exception);
+ void ConvertToQuadraticObject(CORBA::Boolean theForce3d,
+ SMESH::SMESH_IDSource_ptr theObject)
+ throw (SALOME::SALOME_Exception);
+ void ConvertToBiQuadratic(CORBA::Boolean theForce3d,
+ SMESH::SMESH_IDSource_ptr theObject)
+ throw (SALOME::SALOME_Exception);
+
+ void RenumberNodes() throw (SALOME::SALOME_Exception);
+ void RenumberElements() throw (SALOME::SALOME_Exception);
void RotationSweep(const SMESH::long_array & IDsOfElements,
const SMESH::AxisStruct & Axis,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
void RotationSweepObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct & Axis,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
void RotationSweepObject1D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct & Axis,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
void RotationSweepObject2D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct & Axis,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
void ExtrusionSweep(const SMESH::long_array & IDsOfElements,
const SMESH::DirStruct & StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
void ExtrusionSweep0D(const SMESH::long_array & IDsOfElements,
const SMESH::DirStruct & StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
void ExtrusionSweepObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
void ExtrusionSweepObject0D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
void ExtrusionSweepObject1D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
void ExtrusionSweepObject2D(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
void AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps,
CORBA::Long theExtrFlags,
- CORBA::Double theSewTolerance);
+ CORBA::Double theSewTolerance)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Extrusion_Error
ExtrusionAlongPath(const SMESH::long_array & IDsOfElements,
@@ -301,7 +348,8 @@ public:
CORBA::Boolean HasAngles,
const SMESH::double_array & Angles,
CORBA::Boolean HasRefPoint,
- const SMESH::PointStruct & RefPoint);
+ const SMESH::PointStruct & RefPoint)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Extrusion_Error
ExtrusionAlongPathObject(SMESH::SMESH_IDSource_ptr theObject,
@@ -311,7 +359,8 @@ public:
CORBA::Boolean HasAngles,
const SMESH::double_array & Angles,
CORBA::Boolean HasRefPoint,
- const SMESH::PointStruct & RefPoint);
+ const SMESH::PointStruct & RefPoint)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Extrusion_Error
ExtrusionAlongPathObject1D(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr PathMesh,
@@ -320,7 +369,8 @@ public:
CORBA::Boolean HasAngles,
const SMESH::double_array & Angles,
CORBA::Boolean HasRefPoint,
- const SMESH::PointStruct & RefPoint);
+ const SMESH::PointStruct & RefPoint)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Extrusion_Error
ExtrusionAlongPathObject2D(SMESH::SMESH_IDSource_ptr theObject,
SMESH::SMESH_Mesh_ptr PathMesh,
@@ -329,7 +379,8 @@ public:
CORBA::Boolean HasAngles,
const SMESH::double_array & Angles,
CORBA::Boolean HasRefPoint,
- const SMESH::PointStruct & RefPoint);
+ const SMESH::PointStruct & RefPoint)
+ throw (SALOME::SALOME_Exception);
SMESH::double_array* LinearAnglesVariation(SMESH::SMESH_Mesh_ptr PathMesh,
GEOM::GEOM_Object_ptr PathShape,
@@ -338,70 +389,87 @@ public:
void Mirror(const SMESH::long_array & IDsOfElements,
const SMESH::AxisStruct & Axis,
SMESH::SMESH_MeshEditor::MirrorType MirrorType,
- CORBA::Boolean Copy);
+ CORBA::Boolean Copy)
+ throw (SALOME::SALOME_Exception);
void MirrorObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct & Axis,
SMESH::SMESH_MeshEditor::MirrorType MirrorType,
- CORBA::Boolean Copy);
+ CORBA::Boolean Copy)
+ throw (SALOME::SALOME_Exception);
void Translate(const SMESH::long_array & IDsOfElements,
const SMESH::DirStruct & Vector,
- CORBA::Boolean Copy);
+ CORBA::Boolean Copy)
+ throw (SALOME::SALOME_Exception);
void TranslateObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::DirStruct & Vector,
- CORBA::Boolean Copy);
+ CORBA::Boolean Copy)
+ throw (SALOME::SALOME_Exception);
void Rotate(const SMESH::long_array & IDsOfElements,
const SMESH::AxisStruct & Axis,
CORBA::Double Angle,
- CORBA::Boolean Copy);
+ CORBA::Boolean Copy)
+ throw (SALOME::SALOME_Exception);
void RotateObject(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::AxisStruct & Axis,
CORBA::Double Angle,
- CORBA::Boolean Copy);
+ CORBA::Boolean Copy)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* RotationSweepMakeGroups(const SMESH::long_array& IDsOfElements,
const SMESH::AxisStruct& Axix,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* RotationSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Axix,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* RotationSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Axix,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* RotationSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Axix,
CORBA::Double AngleInRadians,
CORBA::Long NbOfSteps,
- CORBA::Double Tolerance);
+ CORBA::Double Tolerance)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionSweepMakeGroups(const SMESH::long_array& IDsOfElements,
const SMESH::DirStruct& StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionSweepMakeGroups0D(const SMESH::long_array& IDsOfElements,
const SMESH::DirStruct& StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* AdvancedExtrusionMakeGroups(const SMESH::long_array& IDsOfElements,
const SMESH::DirStruct& StepVector,
CORBA::Long NbOfSteps,
CORBA::Long ExtrFlags,
- CORBA::Double SewTolerance);
+ CORBA::Double SewTolerance)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionSweepObject0DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& StepVector,
- CORBA::Long NbOfSteps);
+ CORBA::Long NbOfSteps)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionAlongPathMakeGroups(const SMESH::long_array& IDsOfElements,
SMESH::SMESH_Mesh_ptr PathMesh,
GEOM::GEOM_Object_ptr PathShape,
@@ -410,7 +478,8 @@ public:
const SMESH::double_array& Angles,
CORBA::Boolean HasRefPoint,
const SMESH::PointStruct& RefPoint,
- SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+ SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
SMESH::SMESH_Mesh_ptr PathMesh,
GEOM::GEOM_Object_ptr PathShape,
@@ -419,7 +488,8 @@ public:
const SMESH::double_array& Angles,
CORBA::Boolean HasRefPoint,
const SMESH::PointStruct& RefPoint,
- SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+ SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionAlongPathObject1DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
SMESH::SMESH_Mesh_ptr PathMesh,
GEOM::GEOM_Object_ptr PathShape,
@@ -428,7 +498,8 @@ public:
const SMESH::double_array& Angles,
CORBA::Boolean HasRefPoint,
const SMESH::PointStruct& RefPoint,
- SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+ SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionAlongPathObject2DMakeGroups(SMESH::SMESH_IDSource_ptr Object,
SMESH::SMESH_Mesh_ptr PathMesh,
GEOM::GEOM_Object_ptr PathShape,
@@ -437,7 +508,8 @@ public:
const SMESH::double_array& Angles,
CORBA::Boolean HasRefPoint,
const SMESH::PointStruct& RefPoint,
- SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+ SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception);
// skl 04.06.2009
SMESH::ListOfGroups* ExtrusionAlongPathObjX(SMESH::SMESH_IDSource_ptr Object,
@@ -450,7 +522,8 @@ public:
const SMESH::PointStruct& RefPoint,
CORBA::Boolean MakeGroups,
SMESH::ElementType ElemType,
- SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+ SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ExtrusionAlongPathX(const SMESH::long_array& IDsOfElements,
SMESH::SMESH_IDSource_ptr Path,
CORBA::Long NodeStart,
@@ -461,93 +534,118 @@ public:
const SMESH::PointStruct& RefPoint,
CORBA::Boolean MakeGroups,
SMESH::ElementType ElemType,
- SMESH::SMESH_MeshEditor::Extrusion_Error& Error);
+ SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* MirrorMakeGroups(const SMESH::long_array& IDsOfElements,
const SMESH::AxisStruct& Mirror,
- SMESH::SMESH_MeshEditor::MirrorType MirrorType);
+ SMESH::SMESH_MeshEditor::MirrorType MirrorType)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Mirror,
- SMESH::SMESH_MeshEditor::MirrorType MirrorType);
+ SMESH::SMESH_MeshEditor::MirrorType MirrorType)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* TranslateMakeGroups(const SMESH::long_array& IDsOfElements,
- const SMESH::DirStruct& Vector);
+ const SMESH::DirStruct& Vector)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
- const SMESH::DirStruct& Vector);
+ const SMESH::DirStruct& Vector)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* RotateMakeGroups(const SMESH::long_array& IDsOfElements,
const SMESH::AxisStruct& Axis,
- CORBA::Double AngleInRadians);
+ CORBA::Double AngleInRadians)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Axis,
- CORBA::Double AngleInRadians);
+ CORBA::Double AngleInRadians)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr MirrorMakeMesh(const SMESH::long_array& IDsOfElements,
const SMESH::AxisStruct& Mirror,
SMESH::SMESH_MeshEditor::MirrorType MirrorType,
CORBA::Boolean CopyGroups,
- const char* MeshName);
+ const char* MeshName)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Mirror,
SMESH::SMESH_MeshEditor::MirrorType MirrorType,
CORBA::Boolean CopyGroups,
- const char* MeshName);
+ const char* MeshName)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr TranslateMakeMesh(const SMESH::long_array& IDsOfElements,
const SMESH::DirStruct& Vector,
CORBA::Boolean CopyGroups,
- const char* MeshName);
+ const char* MeshName)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
const SMESH::DirStruct& Vector,
CORBA::Boolean CopyGroups,
- const char* MeshName);
+ const char* MeshName)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr RotateMakeMesh(const SMESH::long_array& IDsOfElements,
const SMESH::AxisStruct& Axis,
CORBA::Double AngleInRadians,
CORBA::Boolean CopyGroups,
- const char* MeshName);
+ const char* MeshName)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
const SMESH::AxisStruct& Axis,
CORBA::Double AngleInRadians,
CORBA::Boolean CopyGroups,
- const char* MeshName);
+ const char* MeshName)
+ throw (SALOME::SALOME_Exception);
void Scale(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::PointStruct& thePoint,
const SMESH::double_array& theScaleFact,
- CORBA::Boolean theCopy);
+ CORBA::Boolean theCopy)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* ScaleMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::PointStruct& thePoint,
- const SMESH::double_array& theScaleFact);
+ const SMESH::double_array& theScaleFact)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr ScaleMakeMesh(SMESH::SMESH_IDSource_ptr Object,
const SMESH::PointStruct& Point,
const SMESH::double_array& theScaleFact,
CORBA::Boolean CopyGroups,
- const char* MeshName);
+ const char* MeshName)
+ throw (SALOME::SALOME_Exception);
void FindCoincidentNodes (CORBA::Double Tolerance,
- SMESH::array_of_long_array_out GroupsOfNodes);
+ SMESH::array_of_long_array_out GroupsOfNodes)
+ throw (SALOME::SALOME_Exception);
void FindCoincidentNodesOnPart(SMESH::SMESH_IDSource_ptr Object,
CORBA::Double Tolerance,
- SMESH::array_of_long_array_out GroupsOfNodes);
+ SMESH::array_of_long_array_out GroupsOfNodes)
+ throw (SALOME::SALOME_Exception);
void FindCoincidentNodesOnPartBut(SMESH::SMESH_IDSource_ptr Object,
CORBA::Double Tolerance,
SMESH::array_of_long_array_out GroupsOfNodes,
- const SMESH::ListOfIDSources& ExceptSubMeshOrGroups);
- void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes);
+ const SMESH::ListOfIDSources& ExceptSubMeshOrGroups)
+ throw (SALOME::SALOME_Exception);
+ void MergeNodes (const SMESH::array_of_long_array& GroupsOfNodes)
+ throw (SALOME::SALOME_Exception);
void FindEqualElements(SMESH::SMESH_IDSource_ptr Object,
- SMESH::array_of_long_array_out GroupsOfElementsID);
- void MergeElements(const SMESH::array_of_long_array& GroupsOfElementsID);
- void MergeEqualElements();
+ SMESH::array_of_long_array_out GroupsOfElementsID)
+ throw (SALOME::SALOME_Exception);
+ void MergeElements(const SMESH::array_of_long_array& GroupsOfElementsID)
+ throw (SALOME::SALOME_Exception);
+ void MergeEqualElements()
+ throw (SALOME::SALOME_Exception);
CORBA::Long MoveClosestNodeToPoint(CORBA::Double x,
CORBA::Double y,
CORBA::Double z,
- CORBA::Long nodeID);
+ CORBA::Long nodeID)
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Return ID of node closest to a given point
*/
CORBA::Long FindNodeClosestTo(CORBA::Double x,
CORBA::Double y,
- CORBA::Double z);
+ CORBA::Double z)
+ throw (SALOME::SALOME_Exception);
/*!
* Return elements of given type where the given point is IN or ON.
* 'ALL' type means elements of any type excluding nodes
@@ -555,7 +653,8 @@ public:
SMESH::long_array* FindElementsByPoint(CORBA::Double x,
CORBA::Double y,
CORBA::Double z,
- SMESH::ElementType type);
+ SMESH::ElementType type)
+ throw (SALOME::SALOME_Exception);
/*!
* Searching among the given elements, return elements of given type
* where the given point is IN or ON.
@@ -565,13 +664,15 @@ public:
CORBA::Double x,
CORBA::Double y,
CORBA::Double z,
- SMESH::ElementType type);
+ SMESH::ElementType type)
+ throw (SALOME::SALOME_Exception);
/*!
* Return point state in a closed 2D mesh in terms of TopAbs_State enumeration.
* TopAbs_UNKNOWN state means that either mesh is wrong or the analysis fails.
*/
- CORBA::Short GetPointState(CORBA::Double x, CORBA::Double y, CORBA::Double z);
+ CORBA::Short GetPointState(CORBA::Double x, CORBA::Double y, CORBA::Double z)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Sew_Error
SewFreeBorders(CORBA::Long FirstNodeID1,
@@ -581,13 +682,15 @@ public:
CORBA::Long SecondNodeID2,
CORBA::Long LastNodeID2,
CORBA::Boolean CreatePolygons,
- CORBA::Boolean CreatePolyedrs);
+ CORBA::Boolean CreatePolyedrs)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Sew_Error
SewConformFreeBorders(CORBA::Long FirstNodeID1,
CORBA::Long SecondNodeID1,
CORBA::Long LastNodeID1,
CORBA::Long FirstNodeID2,
- CORBA::Long SecondNodeID2);
+ CORBA::Long SecondNodeID2)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Sew_Error
SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
CORBA::Long SecondNodeIDOnFreeBorder,
@@ -595,30 +698,36 @@ public:
CORBA::Long FirstNodeIDOnSide,
CORBA::Long LastNodeIDOnSide,
CORBA::Boolean CreatePolygons,
- CORBA::Boolean CreatePolyedrs);
+ CORBA::Boolean CreatePolyedrs)
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_MeshEditor::Sew_Error
SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
const SMESH::long_array& IDsOfSide2Elements,
CORBA::Long NodeID1OfSide1ToMerge,
CORBA::Long NodeID1OfSide2ToMerge,
CORBA::Long NodeID2OfSide1ToMerge,
- CORBA::Long NodeID2OfSide2ToMerge);
+ CORBA::Long NodeID2OfSide2ToMerge)
+ throw (SALOME::SALOME_Exception);
/*!
* Set new nodes for given element.
* If number of nodes is not corresponded to type of
* element - returns false
*/
- CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs);
+ CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs)
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean DoubleNodes( const SMESH::long_array& theNodes,
- const SMESH::long_array& theModifiedElems );
+ const SMESH::long_array& theModifiedElems )
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean DoubleNode( CORBA::Long theNodeId,
- const SMESH::long_array& theModifiedElems );
+ const SMESH::long_array& theModifiedElems )
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean DoubleNodeGroup( SMESH::SMESH_GroupBase_ptr theNodes,
- SMESH::SMESH_GroupBase_ptr theModifiedElems );
+ SMESH::SMESH_GroupBase_ptr theModifiedElems )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements.
@@ -629,13 +738,16 @@ public:
* \sa DoubleNodeGroup()
*/
SMESH::SMESH_Group_ptr DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
- SMESH::SMESH_GroupBase_ptr theModifiedElems );
+ SMESH::SMESH_GroupBase_ptr theModifiedElems )
+ throw (SALOME::SALOME_Exception);
CORBA::Boolean DoubleNodeGroups( const SMESH::ListOfGroups& theNodes,
- const SMESH::ListOfGroups& theModifiedElems );
+ const SMESH::ListOfGroups& theModifiedElems )
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Group_ptr DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
- const SMESH::ListOfGroups& theModifiedElems );
+ const SMESH::ListOfGroups& theModifiedElems )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -649,7 +761,8 @@ public:
*/
CORBA::Boolean DoubleNodeElem( const SMESH::long_array& theElems,
const SMESH::long_array& theNodesNot,
- const SMESH::long_array& theAffectedElems );
+ const SMESH::long_array& theAffectedElems )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -664,7 +777,8 @@ public:
*/
CORBA::Boolean DoubleNodeElemInRegion( const SMESH::long_array& theElems,
const SMESH::long_array& theNodesNot,
- GEOM::GEOM_Object_ptr theShape );
+ GEOM::GEOM_Object_ptr theShape )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -677,7 +791,8 @@ public:
*/
CORBA::Boolean DoubleNodeElemGroup( SMESH::SMESH_GroupBase_ptr theElems,
SMESH::SMESH_GroupBase_ptr theNodesNot,
- SMESH::SMESH_GroupBase_ptr theAffectedElems );
+ SMESH::SMESH_GroupBase_ptr theAffectedElems )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -691,13 +806,15 @@ public:
*/
SMESH::SMESH_Group_ptr DoubleNodeElemGroupNew( SMESH::SMESH_GroupBase_ptr theElems,
SMESH::SMESH_GroupBase_ptr theNodesNot,
- SMESH::SMESH_GroupBase_ptr theAffectedElems );
+ SMESH::SMESH_GroupBase_ptr theAffectedElems )
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
SMESH::SMESH_GroupBase_ptr theNodesNot,
SMESH::SMESH_GroupBase_ptr theAffectedElems,
CORBA::Boolean theElemGroupNeeded,
- CORBA::Boolean theNodeGroupNeeded);
+ CORBA::Boolean theNodeGroupNeeded)
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -711,7 +828,8 @@ public:
*/
CORBA::Boolean DoubleNodeElemGroupInRegion( SMESH::SMESH_GroupBase_ptr theElems,
SMESH::SMESH_GroupBase_ptr theNodesNot,
- GEOM::GEOM_Object_ptr theShape );
+ GEOM::GEOM_Object_ptr theShape )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -725,7 +843,8 @@ public:
*/
CORBA::Boolean DoubleNodeElemGroups( const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
- const SMESH::ListOfGroups& theAffectedElems );
+ const SMESH::ListOfGroups& theAffectedElems )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -739,13 +858,15 @@ public:
*/
SMESH::SMESH_Group_ptr DoubleNodeElemGroupsNew( const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
- const SMESH::ListOfGroups& theAffectedElems );
+ const SMESH::ListOfGroups& theAffectedElems )
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
const SMESH::ListOfGroups& theAffectedElems,
CORBA::Boolean theElemGroupNeeded,
- CORBA::Boolean theNodeGroupNeeded);
+ CORBA::Boolean theNodeGroupNeeded)
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -760,7 +881,8 @@ public:
*/
CORBA::Boolean DoubleNodeElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
- GEOM::GEOM_Object_ptr theShape );
+ GEOM::GEOM_Object_ptr theShape )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Identify the elements that will be affected by node duplication (actual duplication is not performed.
@@ -775,7 +897,8 @@ public:
*/
SMESH::ListOfGroups* AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theElems,
const SMESH::ListOfGroups& theNodesNot,
- GEOM::GEOM_Object_ptr theShape );
+ GEOM::GEOM_Object_ptr theShape )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief Double nodes on shared faces between groups of volumes and create flat elements on demand.
@@ -799,7 +922,8 @@ public:
* @param theGroupsOfFaces - list of groups of faces
* @return TRUE if operation has been completed successfully, FALSE otherwise
*/
- CORBA::Boolean CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups& theGroupsOfFaces );
+ CORBA::Boolean CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups& theGroupsOfFaces )
+ throw (SALOME::SALOME_Exception);
/*!
* \brief identify all the elements around a geom shape, get the faces delimiting the hole
@@ -819,7 +943,8 @@ public:
* The created 2D mesh elements based on nodes of free faces of boundary volumes
* \return TRUE if operation has been completed successfully, FALSE otherwise
*/
- CORBA::Boolean Make2DMeshFrom3D();
+ CORBA::Boolean Make2DMeshFrom3D()
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr elements,
SMESH::Bnd_Dimension dimension,
@@ -827,7 +952,8 @@ public:
const char* meshName,
CORBA::Boolean toCopyElements,
CORBA::Boolean toCopyMissingBondary,
- SMESH::SMESH_Group_out group);
+ SMESH::SMESH_Group_out group)
+ throw (SALOME::SALOME_Exception);
CORBA::Long MakeBoundaryElements(SMESH::Bnd_Dimension dimension,
const char* groupName,
@@ -846,11 +972,8 @@ private: //!< private methods
MeshEditor_I::TPreviewMesh * getPreviewMesh( SMDSAbs_ElementType previewType = SMDSAbs_All );
- /*!
- * \brief Update myLastCreated* or myPreviewData
- * \param anEditor - it contains edition results
- */
- //void storeResult(::SMESH_MeshEditor& anEditor);
+ void declareMeshModified( bool isReComputeSafe );
+
/*!
* \brief Clear myLastCreated* or myPreviewData
*/
@@ -859,7 +982,8 @@ private: //!< private methods
/*!
* \brief Return groups by their IDs
*/
- SMESH::ListOfGroups* getGroups(const std::list* groupIDs);
+ SMESH::ListOfGroups* getGroups(const std::list* groupIDs)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* rotationSweep(const SMESH::long_array & IDsOfElements,
const SMESH::AxisStruct & Axis,
@@ -867,18 +991,21 @@ private: //!< private methods
CORBA::Long NbOfSteps,
CORBA::Double Tolerance,
const bool MakeGroups,
- const SMDSAbs_ElementType ElementType=SMDSAbs_All);
+ const SMDSAbs_ElementType ElementType=SMDSAbs_All)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* extrusionSweep(const SMESH::long_array & IDsOfElements,
const SMESH::DirStruct & StepVector,
CORBA::Long NbOfSteps,
bool MakeGroups,
- const SMDSAbs_ElementType ElementType=SMDSAbs_All);
+ const SMDSAbs_ElementType ElementType=SMDSAbs_All)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* advancedExtrusion(const SMESH::long_array & theIDsOfElements,
const SMESH::DirStruct & theStepVector,
CORBA::Long theNbOfSteps,
CORBA::Long theExtrFlags,
CORBA::Double theSewTolerance,
- const bool MakeGroups);
+ const bool MakeGroups)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* extrusionAlongPath(const SMESH::long_array & IDsOfElements,
SMESH::SMESH_Mesh_ptr PathMesh,
GEOM::GEOM_Object_ptr PathShape,
@@ -889,7 +1016,8 @@ private: //!< private methods
const SMESH::PointStruct & RefPoint,
const bool MakeGroups,
SMESH::SMESH_MeshEditor::Extrusion_Error & Error,
- const SMDSAbs_ElementType ElementType=SMDSAbs_All);
+ const SMDSAbs_ElementType ElementType=SMDSAbs_All)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* extrusionAlongPathX(const SMESH::long_array & IDsOfElements,
SMESH::SMESH_IDSource_ptr Path,
CORBA::Long NodeStart,
@@ -900,35 +1028,45 @@ private: //!< private methods
const SMESH::PointStruct& RefPoint,
bool MakeGroups,
const SMDSAbs_ElementType ElementType,
- SMESH::SMESH_MeshEditor::Extrusion_Error & theError);
+ SMESH::SMESH_MeshEditor::Extrusion_Error & theError)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* mirror(TIDSortedElemSet & IDsOfElements,
const SMESH::AxisStruct & Axis,
SMESH::SMESH_MeshEditor::MirrorType MirrorType,
CORBA::Boolean Copy,
bool MakeGroups,
- ::SMESH_Mesh* TargetMesh=0);
+ ::SMESH_Mesh* TargetMesh=0)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* translate(TIDSortedElemSet & IDsOfElements,
const SMESH::DirStruct & Vector,
CORBA::Boolean Copy,
bool MakeGroups,
- ::SMESH_Mesh* TargetMesh=0);
+ ::SMESH_Mesh* TargetMesh=0)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* rotate(TIDSortedElemSet & IDsOfElements,
const SMESH::AxisStruct & Axis,
CORBA::Double Angle,
CORBA::Boolean Copy,
bool MakeGroups,
- ::SMESH_Mesh* TargetMesh=0);
+ ::SMESH_Mesh* TargetMesh=0)
+ throw (SALOME::SALOME_Exception);
SMESH::ListOfGroups* scale(SMESH::SMESH_IDSource_ptr theObject,
const SMESH::PointStruct& thePoint,
const SMESH::double_array& theScaleFact,
CORBA::Boolean theCopy,
bool theMakeGroups,
- ::SMESH_Mesh* theTargetMesh=0);
+ ::SMESH_Mesh* theTargetMesh=0)
+ throw (SALOME::SALOME_Exception);
+
+ void convertToQuadratic(CORBA::Boolean theForce3d,
+ CORBA::Boolean theToBiQuad,
+ SMESH::SMESH_IDSource_ptr theObject = SMESH::SMESH_IDSource::_nil())
+ throw (SALOME::SALOME_Exception);
SMESH::SMESH_Mesh_ptr makeMesh(const char* theMeshName);
- void DumpGroupsList(SMESH::TPythonDump & theDumpPython,
+ void dumpGroupsList(SMESH::TPythonDump & theDumpPython,
const SMESH::ListOfGroups * theGroupList);
string generateGroupName(const string& thePrefix);
diff --git a/src/SMESH_I/SMESH_PythonDump.hxx b/src/SMESH_I/SMESH_PythonDump.hxx
index 29c544313..4ff5cfc28 100644
--- a/src/SMESH_I/SMESH_PythonDump.hxx
+++ b/src/SMESH_I/SMESH_PythonDump.hxx
@@ -142,6 +142,9 @@ namespace SMESH
TPythonDump&
operator<<(const SMESH::GeometryType& theArg);
+ TPythonDump&
+ operator<<(const SMESH::EntityType& theArg);
+
TPythonDump&
operator<<(const SMESH::long_array& theArg);
diff --git a/src/SMESH_SWIG/smeshDC.py b/src/SMESH_SWIG/smeshDC.py
index 0d5728b90..70f259314 100644
--- a/src/SMESH_SWIG/smeshDC.py
+++ b/src/SMESH_SWIG/smeshDC.py
@@ -737,6 +737,20 @@ class smeshDC(object, SMESH._objref_SMESH_Gen):
return None
pass
pass
+ elif CritType == FT_EntityType:
+ # Checks the Threshold
+ try:
+ aCriterion.Threshold = self.EnumToLong(aThreshold)
+ assert( aThreshold in SMESH.EntityType._items )
+ except:
+ if isinstance(aThreshold, int):
+ aCriterion.Threshold = aThreshold
+ else:
+ print "Error: The Threshold should be an integer or SMESH.EntityType."
+ return None
+ pass
+ pass
+
elif CritType == FT_GroupColor:
# Checks the Threshold
try:
@@ -2221,7 +2235,7 @@ class Mesh:
def GetElemNbNodes(self, id):
return self.mesh.GetElemNbNodes(id)
- ## Returns the node ID the given index for the given element
+ ## Returns the node ID the given (zero based) index for the given element
# \n If there is no element for the given ID - returns -1
# \n If there is no node for the given index - returns -2
# @return an integer value
@@ -3062,19 +3076,23 @@ class Mesh:
return self.editor.SmoothParametricObject(theObject, IDsOfFixedNodes,
MaxNbOfIterations, MaxAspectRatio, Method)
- ## Converts the mesh to quadratic, deletes old elements, replacing
+ ## Converts the mesh to quadratic or bi-quadratic, deletes old elements, replacing
# them with quadratic with the same id.
# @param theForce3d new node creation method:
# 0 - the medium node lies at the geometrical entity from which the mesh element is built
# 1 - the medium node lies at the middle of the line segments connecting start and end node of a mesh element
# @param theSubMesh a group or a sub-mesh to convert; WARNING: in this case the mesh can become not conformal
+ # @param theToBiQuad If True, converts the mesh to bi-quadratic
# @ingroup l2_modif_tofromqu
- def ConvertToQuadratic(self, theForce3d, theSubMesh=None):
- if theSubMesh:
- self.editor.ConvertToQuadraticObject(theForce3d,theSubMesh)
+ def ConvertToQuadratic(self, theForce3d, theSubMesh=None, theToBiQuad=False):
+ if theToBiQuad:
+ self.editor.ConvertToBiQuadratic(theForce3d,theSubMesh)
else:
- self.editor.ConvertToQuadratic(theForce3d)
-
+ if theSubMesh:
+ self.editor.ConvertToQuadraticObject(theForce3d,theSubMesh)
+ else:
+ self.editor.ConvertToQuadratic(theForce3d)
+
## Converts the mesh from quadratic to ordinary,
# deletes old quadratic elements, \n replacing
# them with ordinary mesh elements with the same id.
diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
index 55091c7f9..113078085 100644
--- a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
+++ b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
@@ -770,6 +770,23 @@ void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh & aMesh,
ASSERT(scaley);
}
+// namespace
+// {
+// bool isDegenTria( const SMDS_MeshNode * nn[3] )
+// {
+// SMESH_TNodeXYZ p1( nn[0] );
+// SMESH_TNodeXYZ p2( nn[1] );
+// SMESH_TNodeXYZ p3( nn[2] );
+// gp_XYZ vec1 = p2 - p1;
+// gp_XYZ vec2 = p3 - p1;
+// gp_XYZ cross = vec1 ^ vec2;
+// const double eps = 1e-100;
+// return ( fabs( cross.X() ) < eps &&
+// fabs( cross.Y() ) < eps &&
+// fabs( cross.Z() ) < eps );
+// }
+// }
+
//=============================================================================
/*!
*
@@ -780,12 +797,13 @@ void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust,
vector< const SMDS_MeshNode*>&mefistoToDS,
double scalex, double scaley)
{
- SMESHDS_Mesh * meshDS = _helper->GetMeshDS();
- int faceID = _helper->GetSubShapeID();
+ _helper->SetElementsOnShape( true );
TopoDS_Face F = TopoDS::Face( _helper->GetSubShape() );
Handle(Geom_Surface) S = BRep_Tool::Surface( F );
+ //const size_t nbInputNodes = mefistoToDS.size();
+
Z n = mefistoToDS.size(); // nb input points
mefistoToDS.resize( nbst );
for ( ; n < nbst; n++)
@@ -796,12 +814,7 @@ void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust,
double v = uvst[n][1] / scaley;
gp_Pnt P = S->Value(u, v);
- SMDS_MeshNode * node = meshDS->AddNode(P.X(), P.Y(), P.Z());
- meshDS->SetNodeOnFace(node, faceID, u, v);
-
- //MESSAGE(P.X()<<" "<AddNode( P.X(), P.Y(), P.Z(), 0, u, v );
}
}
@@ -810,26 +823,32 @@ void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust,
// triangle points must be in trigonometric order if face is Forward
// else they must be put clockwise
- bool triangleIsWellOriented = ( F.Orientation() == TopAbs_FORWARD );
+ int i1 = 1, i2 = 2;
+ if ( F.Orientation() != TopAbs_FORWARD )
+ std::swap( i1, i2 );
+ const SMDS_MeshNode * nn[3];
for (n = 1; n <= nbt; n++)
{
- const SMDS_MeshNode * n1 = mefistoToDS[ nust[m++] - 1 ];
- const SMDS_MeshNode * n2 = mefistoToDS[ nust[m++] - 1 ];
- const SMDS_MeshNode * n3 = mefistoToDS[ nust[m++] - 1 ];
+ // const bool allNodesAreOld = ( nust[m + 0] <= nbInputNodes &&
+ // nust[m + 1] <= nbInputNodes &&
+ // nust[m + 2] <= nbInputNodes );
+ nn[ 0 ] = mefistoToDS[ nust[m++] - 1 ];
+ nn[ 1 ] = mefistoToDS[ nust[m++] - 1 ];
+ nn[ 2 ] = mefistoToDS[ nust[m++] - 1 ];
+ m++;
// avoid creating degenetrated faces
- bool isDegen = ( _helper->HasDegeneratedEdges() && ( n1 == n2 || n1 == n3 || n2 == n3 ));
+ bool isDegen = ( _helper->HasDegeneratedEdges() &&
+ ( nn[0] == nn[1] || nn[1] == nn[2] || nn[2] == nn[0] ));
+
+ // It was an attemp to fix a problem of a zero area face whose all nodes
+ // are on one staight EDGE. But omitting this face makes a hole in the mesh :(
+ // if ( !isDegen && allNodesAreOld )
+ // isDegen = isDegenTria( nn );
+
if ( !isDegen )
- {
- SMDS_MeshElement * elt;
- if (triangleIsWellOriented)
- elt = _helper->AddFace(n1, n2, n3);
- else
- elt = _helper->AddFace(n1, n3, n2);
- meshDS->SetMeshElementOnShape(elt, faceID);
- }
- m++;
+ _helper->AddFace( nn[0], nn[i1], nn[i2] );
}
// remove bad elements built on vertices shared by wires
@@ -849,7 +868,7 @@ void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust,
nbSame++;
if (nbSame > 1) {
MESSAGE( "RM bad element " << elem->GetID());
- meshDS->RemoveElement( elem );
+ _helper->GetMeshDS()->RemoveElement( elem );
}
}
}
diff --git a/src/StdMeshers/StdMeshers_Prism_3D.cxx b/src/StdMeshers/StdMeshers_Prism_3D.cxx
index 6584b1665..8b72f7b9b 100644
--- a/src/StdMeshers/StdMeshers_Prism_3D.cxx
+++ b/src/StdMeshers/StdMeshers_Prism_3D.cxx
@@ -1142,7 +1142,7 @@ bool StdMeshers_Prism_3D::computeWalls(const Prism_3D::TPrismTopo& thePrism)
}
continue;
}
- // Compute
+ // Compute 'vertical projection'
if ( nbTgtMeshed == 0 )
{
// compute nodes on target VERTEXes
@@ -2195,8 +2195,10 @@ bool StdMeshers_PrismAsBlock::Init(SMESH_MesherHelper* helper,
{
if ( len2edgeMap.size() != nbEdges )
RETURN_BAD_RESULT("Uniqueness of edge lengths not assured");
- map< double, int >::reverse_iterator maxLen_i = len2edgeMap.rbegin();
- map< double, int >::reverse_iterator midLen_i = ++len2edgeMap.rbegin();
+
+ multimap< double, int >::reverse_iterator maxLen_i = len2edgeMap.rbegin();
+ multimap< double, int >::reverse_iterator midLen_i = ++len2edgeMap.rbegin();
+
double maxLen = maxLen_i->first;
double midLen = ( len2edgeMap.size() == 1 ) ? 0 : midLen_i->first;
switch ( nbEdges ) {
diff --git a/src/StdMeshers/StdMeshers_Projection_2D.cxx b/src/StdMeshers/StdMeshers_Projection_2D.cxx
index 9f1c2fcf6..67f5c770d 100644
--- a/src/StdMeshers/StdMeshers_Projection_2D.cxx
+++ b/src/StdMeshers/StdMeshers_Projection_2D.cxx
@@ -1144,7 +1144,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
while ( faceIt->more() )
tgtFaces.insert( tgtFaces.end(), faceIt->next() );
- editor.ConvertToQuadratic(/*theForce3d=*/false, tgtFaces);
+ editor.ConvertToQuadratic(/*theForce3d=*/false, tgtFaces, false);
}
cleaner.Release(); // not to remove mesh