]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
Merge eap/23491 branch.
authorrnv <rnv@opencascade.com>
Mon, 15 Jan 2018 12:48:20 +0000 (15:48 +0300)
committerrnv <rnv@opencascade.com>
Mon, 15 Jan 2018 12:48:20 +0000 (15:48 +0300)
264 files changed:
CMakeLists.txt
ChangeLog [deleted file]
doc/salome/examples/creating_meshes_ex03.py
doc/salome/examples/ex_MakePolyLine.py [new file with mode: 0644]
doc/salome/examples/filters_ex01.py
doc/salome/examples/grouping_elements_ex03.py
doc/salome/examples/quality_controls_defl.py [new file with mode: 0644]
doc/salome/examples/tests.set
doc/salome/gui/SMESH/images/deflection_2d.png [new file with mode: 0644]
doc/salome/gui/SMESH/input/about_filters.doc
doc/salome/gui/SMESH/input/about_quality_controls.doc
doc/salome/gui/SMESH/input/deflection_2d.doc [new file with mode: 0644]
doc/salome/gui/SMESH/input/selection_filter_library.doc
doc/salome/gui/SMESH/input/smesh_migration.doc
doc/salome/gui/SMESH/input/tui_filters.doc
doc/salome/gui/SMESH/input/tui_quality_controls.doc
idl/SMESH_BasicHypothesis.idl
idl/SMESH_Filter.idl
idl/SMESH_Gen.idl
idl/SMESH_Mesh.idl
idl/SMESH_MeshEditor.idl
resources/CMakeLists.txt
resources/mesh_deflection.png [new file with mode: 0644]
src/Controls/SMESH_Controls.cxx
src/Controls/SMESH_ControlsDef.hxx
src/Driver/Driver_Mesh.cxx
src/Driver/Driver_Mesh.h
src/DriverGMF/libmesh5.c
src/DriverMED/DriverMED.hxx
src/DriverMED/DriverMED_Family.cxx
src/DriverMED/DriverMED_Family.h
src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_R_SMESHDS_Mesh.h
src/DriverMED/DriverMED_W_Field.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx
src/MEDWrapper/Base/MED_Common.hxx
src/MEDWrapper/Base/MED_Structures.hxx
src/MEDWrapper/Base/MED_Wrapper.hxx
src/OBJECT/SMESH_Actor.cxx
src/OBJECT/SMESH_Actor.h
src/OBJECT/SMESH_ActorDef.h
src/OBJECT/SMESH_DeviceActor.cxx
src/OBJECT/SMESH_DeviceActor.h
src/OBJECT/SMESH_ExtractGeometry.cxx
src/OBJECT/SMESH_FaceOrientationFilter.cxx
src/OBJECT/SMESH_ScalarBarActor.cxx
src/SMDS/SMDSAbs_ElementType.hxx
src/SMDS/SMDS_BallElement.cxx
src/SMDS/SMDS_BallElement.hxx
src/SMDS/SMDS_EdgePosition.cxx
src/SMDS/SMDS_EdgePosition.hxx
src/SMDS/SMDS_ElemIterator.hxx
src/SMDS/SMDS_FaceOfEdges.cxx
src/SMDS/SMDS_FaceOfNodes.cxx
src/SMDS/SMDS_FaceOfNodes.hxx
src/SMDS/SMDS_FacePosition.cxx
src/SMDS/SMDS_FacePosition.hxx
src/SMDS/SMDS_Iterator.hxx
src/SMDS/SMDS_IteratorOfElements.cxx
src/SMDS/SMDS_IteratorOfElements.hxx
src/SMDS/SMDS_IteratorOnIterators.hxx
src/SMDS/SMDS_Mesh.hxx
src/SMDS/SMDS_Mesh0DElement.cxx
src/SMDS/SMDS_Mesh0DElement.hxx
src/SMDS/SMDS_MeshEdge.hxx
src/SMDS/SMDS_MeshElement.cxx
src/SMDS/SMDS_MeshElement.hxx
src/SMDS/SMDS_MeshElementIDFactory.cxx
src/SMDS/SMDS_MeshElementIDFactory.hxx
src/SMDS/SMDS_MeshFace.cxx
src/SMDS/SMDS_MeshFace.hxx
src/SMDS/SMDS_MeshGroup.cxx
src/SMDS/SMDS_MeshGroup.hxx
src/SMDS/SMDS_MeshIDFactory.cxx
src/SMDS/SMDS_MeshIDFactory.hxx
src/SMDS/SMDS_MeshNode.cxx
src/SMDS/SMDS_MeshNode.hxx
src/SMDS/SMDS_MeshObject.cxx
src/SMDS/SMDS_MeshObject.hxx
src/SMDS/SMDS_MeshVolume.cxx
src/SMDS/SMDS_MeshVolume.hxx
src/SMDS/SMDS_PolygonalFaceOfNodes.cxx
src/SMDS/SMDS_PolygonalFaceOfNodes.hxx
src/SMDS/SMDS_PolyhedralVolumeOfNodes.cxx
src/SMDS/SMDS_PolyhedralVolumeOfNodes.hxx
src/SMDS/SMDS_Position.cxx
src/SMDS/SMDS_Position.hxx
src/SMDS/SMDS_QuadraticEdge.cxx
src/SMDS/SMDS_QuadraticEdge.hxx
src/SMDS/SMDS_QuadraticFaceOfNodes.cxx
src/SMDS/SMDS_QuadraticFaceOfNodes.hxx
src/SMDS/SMDS_QuadraticVolumeOfNodes.cxx
src/SMDS/SMDS_QuadraticVolumeOfNodes.hxx
src/SMDS/SMDS_SetIterator.hxx
src/SMDS/SMDS_SpacePosition.cxx
src/SMDS/SMDS_SpacePosition.hxx
src/SMDS/SMDS_StdIterator.hxx
src/SMDS/SMDS_TypeOfPosition.hxx
src/SMDS/SMDS_VertexPosition.cxx
src/SMDS/SMDS_VertexPosition.hxx
src/SMDS/SMDS_VolumeOfFaces.cxx
src/SMDS/SMDS_VolumeOfFaces.hxx
src/SMDS/SMDS_VolumeOfNodes.cxx
src/SMDS/SMDS_VolumeOfNodes.hxx
src/SMDS/SMDS_VolumeTool.cxx
src/SMDS/SMDS_VolumeTool.hxx
src/SMDS/SMDS_VtkEdge.hxx
src/SMESH/SMESH_Algo.cxx
src/SMESH/SMESH_Algo.hxx
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_Gen.hxx
src/SMESH/SMESH_Group.cxx
src/SMESH/SMESH_Group.hxx
src/SMESH/SMESH_HypoFilter.cxx
src/SMESH/SMESH_HypoFilter.hxx
src/SMESH/SMESH_Hypothesis.cxx
src/SMESH/SMESH_Hypothesis.hxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH/SMESH_MeshEditor.hxx
src/SMESH/SMESH_MesherHelper.cxx
src/SMESH/SMESH_MesherHelper.hxx
src/SMESH/SMESH_Pattern.cxx
src/SMESH/SMESH_ProxyMesh.cxx
src/SMESH/SMESH_subMesh.cxx
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
src/SMESHGUI/SMESHGUI_Filter.cxx
src/SMESHGUI/SMESHGUI_Filter.h
src/SMESHGUI/SMESHGUI_FilterDlg.cxx
src/SMESHGUI/SMESHGUI_MeshInfo.cxx
src/SMESHGUI/SMESHGUI_MeshInfo.h
src/SMESHGUI/SMESHGUI_Operations.h
src/SMESHGUI/SMESHGUI_Selection.cxx
src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx
src/SMESHGUI/SMESHGUI_VTKUtils.cxx
src/SMESHGUI/SMESH_images.ts
src/SMESHGUI/SMESH_msg_en.ts
src/SMESHUtils/CMakeLists.txt
src/SMESHUtils/SMESH_Block.cxx
src/SMESHUtils/SMESH_Block.hxx
src/SMESHUtils/SMESH_Comment.hxx
src/SMESHUtils/SMESH_File.hxx
src/SMESHUtils/SMESH_FillHole.cxx [new file with mode: 0644]
src/SMESHUtils/SMESH_FreeBorders.cxx
src/SMESHUtils/SMESH_MeshAlgos.cxx
src/SMESHUtils/SMESH_MeshAlgos.hxx
src/SMESHUtils/SMESH_TryCatch.cxx
src/SMESHUtils/SMESH_TryCatch.hxx
src/SMESHUtils/SMESH_TypeDefs.hxx
src/SMESH_I/SMESH_2smeshpy.cxx
src/SMESH_I/SMESH_2smeshpy.hxx
src/SMESH_I/SMESH_DumpPython.cxx
src/SMESH_I/SMESH_Filter_i.cxx
src/SMESH_I/SMESH_Filter_i.hxx
src/SMESH_I/SMESH_Gen_i.cxx
src/SMESH_I/SMESH_Gen_i.hxx
src/SMESH_I/SMESH_Gen_i_1.cxx
src/SMESH_I/SMESH_MeshEditor_i.cxx
src/SMESH_I/SMESH_MeshEditor_i.hxx
src/SMESH_I/SMESH_MeshPartDS.hxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_I/SMESH_PreMeshInfo.cxx
src/SMESH_I/SMESH_PreMeshInfo.hxx
src/SMESH_SWIG/SMESH_blocks.py
src/SMESH_SWIG/StdMeshersBuilder.py
src/SMESH_SWIG/smeshBuilder.py
src/SMESH_SWIG/smesh_algorithm.py
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
src/StdMeshers/StdMeshers_Arithmetic1D.cxx
src/StdMeshers/StdMeshers_Arithmetic1D.hxx
src/StdMeshers/StdMeshers_AutomaticLength.cxx
src/StdMeshers/StdMeshers_AutomaticLength.hxx
src/StdMeshers/StdMeshers_Cartesian_3D.cxx
src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx
src/StdMeshers/StdMeshers_CompositeHexa_3D.hxx
src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx
src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx
src/StdMeshers/StdMeshers_Deflection1D.cxx
src/StdMeshers/StdMeshers_Deflection1D.hxx
src/StdMeshers/StdMeshers_Distribution.cxx
src/StdMeshers/StdMeshers_Distribution.hxx
src/StdMeshers/StdMeshers_FixedPoints1D.cxx
src/StdMeshers/StdMeshers_FixedPoints1D.hxx
src/StdMeshers/StdMeshers_Geometric1D.cxx
src/StdMeshers/StdMeshers_Geometric1D.hxx
src/StdMeshers/StdMeshers_HexaFromSkin_3D.cxx
src/StdMeshers/StdMeshers_Hexa_3D.cxx
src/StdMeshers/StdMeshers_Hexa_3D.hxx
src/StdMeshers/StdMeshers_ImportSource.cxx
src/StdMeshers/StdMeshers_ImportSource.hxx
src/StdMeshers/StdMeshers_Import_1D.cxx
src/StdMeshers/StdMeshers_Import_1D.hxx
src/StdMeshers/StdMeshers_Import_1D2D.cxx
src/StdMeshers/StdMeshers_Import_1D2D.hxx
src/StdMeshers/StdMeshers_LengthFromEdges.cxx
src/StdMeshers/StdMeshers_LengthFromEdges.hxx
src/StdMeshers/StdMeshers_LocalLength.cxx
src/StdMeshers/StdMeshers_LocalLength.hxx
src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
src/StdMeshers/StdMeshers_MEFISTO_2D.hxx
src/StdMeshers/StdMeshers_MaxElementArea.cxx
src/StdMeshers/StdMeshers_MaxElementArea.hxx
src/StdMeshers/StdMeshers_MaxElementVolume.cxx
src/StdMeshers/StdMeshers_MaxElementVolume.hxx
src/StdMeshers/StdMeshers_MaxLength.cxx
src/StdMeshers/StdMeshers_MaxLength.hxx
src/StdMeshers/StdMeshers_NotConformAllowed.cxx
src/StdMeshers/StdMeshers_NotConformAllowed.hxx
src/StdMeshers/StdMeshers_NumberOfSegments.cxx
src/StdMeshers/StdMeshers_NumberOfSegments.hxx
src/StdMeshers/StdMeshers_Penta_3D.cxx
src/StdMeshers/StdMeshers_Penta_3D.hxx
src/StdMeshers/StdMeshers_Prism_3D.cxx
src/StdMeshers/StdMeshers_Prism_3D.hxx
src/StdMeshers/StdMeshers_ProjectionUtils.cxx
src/StdMeshers/StdMeshers_Projection_1D.cxx
src/StdMeshers/StdMeshers_Projection_1D.hxx
src/StdMeshers/StdMeshers_Projection_2D.cxx
src/StdMeshers/StdMeshers_Projection_2D.hxx
src/StdMeshers/StdMeshers_Projection_3D.cxx
src/StdMeshers/StdMeshers_Projection_3D.hxx
src/StdMeshers/StdMeshers_Propagation.cxx
src/StdMeshers/StdMeshers_Propagation.hxx
src/StdMeshers/StdMeshers_QuadFromMedialAxis_1D2D.cxx
src/StdMeshers/StdMeshers_QuadranglePreference.cxx
src/StdMeshers/StdMeshers_QuadranglePreference.hxx
src/StdMeshers/StdMeshers_Quadrangle_2D.cxx
src/StdMeshers/StdMeshers_QuadraticMesh.cxx
src/StdMeshers/StdMeshers_QuadraticMesh.hxx
src/StdMeshers/StdMeshers_RadialPrism_3D.cxx
src/StdMeshers/StdMeshers_RadialPrism_3D.hxx
src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.hxx
src/StdMeshers/StdMeshers_Regular_1D.hxx
src/StdMeshers/StdMeshers_Reversible1D.cxx
src/StdMeshers/StdMeshers_Reversible1D.hxx
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.cxx
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.cxx
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx
src/StdMeshers/StdMeshers_StartEndLength.cxx
src/StdMeshers/StdMeshers_StartEndLength.hxx
src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx
src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx
src/StdMeshers/StdMeshers_ViscousLayers.cxx
src/StdMeshers/StdMeshers_ViscousLayers2D.cxx
src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx
src/StdMeshersGUI/StdMeshersGUI_DistrTable.cxx
src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.h
src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx
src/StdMeshersGUI/StdMeshers_msg_en.ts
src/StdMeshers_I/StdMeshers_ObjRefUlils.cxx
src/StdMeshers_I/StdMeshers_ObjRefUlils.hxx
src/StdMeshers_I/StdMeshers_i.cxx
src/Tools/MacMesh/MacMesh/PublishGroups.py
src/Tools/MeshCut/MeshCut_Maillage.cxx
src/Tools/YamsPlug/doc/Advanced_params.rst
src/Tools/YamsPlug/doc/Generics_params.rst
src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx
src/Tools/padder/meshjob/impl/MeshJobManager_i.hxx

index 57381c39c65a759d3fd0a9c43f38c2d6e0116936..083efdcec8cb26abf18de25cd763e01771423cda 100755 (executable)
@@ -35,7 +35,7 @@ SET(${PROJECT_NAME_UC}_MINOR_VERSION 4)
 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
 SET(${PROJECT_NAME_UC}_VERSION
   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
-SET(${PROJECT_NAME_UC}_VERSION_DEV 0)
+SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
 
 # Common CMake macros
 # ===================
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index 7df59af..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,1811 +0,0 @@
-###############################################################################
-#This is the SMESH change log. Do not modify because it is automatically
-#created with :
-#cvs2cl.pl -l "-b" -U users.cvs2cl --header header.cvs2cl -T -b --utc
-###############################################################################
-
-2004-01-30 13:18  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/html/INPUT/: doxyfile, sources/static/tree.js: NRI : 1.4.0
-         version
-
-2004-01-29 17:52  Jerome Robert <jerome.robert@eads.net>
-
-       * INSTALL, bin/VERSION: Upgrade to version 1.4.0.
-
-2004-01-29 17:33  Jerome Robert <jerome.robert@eads.net>
-
-       * src/: SMESHGUI/SMESHGUI_StudyAPI.cxx, SMESHGUI/SMESHGUI_Swig.cxx,
-         SMESH_I/SMESH_Gen_i.cxx: Merge branch merge_1_2_d
-
-2004-01-14 09:24  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/html/Makefile.in: NRI : bug KERNEL5014 fixed.
-
-2004-01-06 15:19  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * src/SMESH_SWIG/SMESH_flight_skin.py: removing the call to the
-         tetrahedron generator NETGEN, because I did not yet manage to
-         make NETGEN running on the flight geometry.
-
-2004-01-06 15:16  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * resources/SMESH_en.xml, resources/SMESH_fr.xml,
-         src/SMESHGUI/SMESHGUI.cxx: Mounting the hypothesis
-         LengthFromEdges in th GUI of SMESH. This functionality was only
-         in the C++ API, and in the CORBA API.
-
-2004-01-05 16:14  Jerome Robert <jerome.robert@eads.net>
-
-       * adm_local/unix/config_files/check_Netgen.m4: Fix a misspelled
-         environment variable for idl python
-
-2004-01-05 14:28  tag V1_3_1
-
-2004-01-05 13:53  Jerome Robert <jerome.robert@eads.net>
-
-       * src/NETGEN/: ReadMeForNgUsers, netgen43ForSalome.patch: Add a
-         patch to make the build of netgen more user-friendly
-
-2004-01-05 13:52  Jerome Robert <jerome.robert@eads.net>
-
-       * src/NETGEN/Makefile.in: We do not need OCAF in Netgen
-
-2004-01-05 13:38  Jerome Robert <jerome.robert@eads.net>
-
-       * adm_local/unix/config_files/check_Netgen.m4: Fix some quotes
-         problems.
-
-2004-01-05 09:05  Jerome Robert <jerome.robert@eads.net>
-
-       * src/: SMDS/SMDS_Mesh.cxx, SMESHDS/SMESHDS_Document.cxx: [Bug
-         SMESH4830] bug in install with gcc 2.95. Bug fixed.  Note: SGI say
-         that <algorithm> is requiered to use set_intersection (see
-         http://www.sgi.com/tech/stl/set_intersection.html).
-
-2003-12-16 15:27  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * adm_local/unix/config_files/check_Netgen.m4: Since there is an
-         idl precompilation directive in SMESH_BasicHypothesis.idl file, a
-         -DHAVE_NETGEN idl has to be added when compiling SMESH with
-         netgen to the idl c++ flags as well as to the idl python flags.
-
-2003-12-15 13:15  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * src/SMESHDS/SMESHDS_Script.cxx: correct a small bug found by the
-         EDF development team (PN and AT) : AddVolume in the case of a
-         Tetrahedron.
-
-2003-12-11 09:51  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHGUI/SMESHGUI.cxx: [Bug SMESH4598] Crash of the session
-         when compute and update are not done in the same view. Bug fixed.
-
-2003-12-11 09:49  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH/SMESH_HypothesisFactory.cxx: HAVE_NETGEN (#define) to
-         remove an unresolved symbol when building without netgen
-
-2003-12-10 17:23  Jerome Robert <jerome.robert@eads.net>
-
-       * adm_local/unix/config_files/check_Netgen.m4,
-         idl/SMESH_BasicHypothesis.idl,
-         src/SMESH_I/SMESH_HypothesisFactory_i.cxx: Create and use
-         HAVE_NETGEN (#define) to avoid unresolved symbols in libraries.
-
-2003-12-10 16:05  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHGUI/SMESHGUI.cxx: Cosmetics
-
-2003-12-09 14:13  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * src/SMESH/Makefile.in: Correcting a problem araising when
-         building the SMESH module without Netgen.
-
-2003-12-09 10:00  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * doc/: AddNetgenInSalome2.pdf, AddNetgenInSalome2.ps,
-         AddNetgenInSalome2.sxw: updating or adding when merging in the
-         main trunk with the version in the branch nadir_1_2_2 !! Here a
-         document related to the integration of NETGEN in the SMESH module
-         has been added for future work in the integration of other
-         mesher.
-
-2003-12-08 15:30  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * INSTALL, Makefile.in, configure.in.base,
-         adm_local/unix/make_commence.in,
-         adm_local/unix/config_files/check_Netgen.m4, bin/VERSION,
-         idl/SMESH_BasicHypothesis.idl, resources/SMESH_en.xml,
-         resources/SMESH_fr.xml, resources/flight_solid.brep,
-         resources/mesh_algo_netgen.png, resources/mesh_algo_tetra.png,
-         resources/mesh_tree_algo_netgen.png,
-         resources/mesh_tree_algo_tetra.png, src/Makefile.in,
-         src/DriverMED/DriverMED_R_SMDS_Mesh.cxx,
-         src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx,
-         src/DriverMED/DriverMED_W_SMDS_Mesh.cxx,
-         src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx,
-         src/NETGEN/Makefile.in, src/NETGEN/ReadMeForNgUsers,
-         src/SMESH/Makefile.in, src/SMESH/SMESH_HypothesisFactory.cxx,
-         src/SMESH/SMESH_MEFISTO_2D.cxx,
-         src/SMESH/SMESH_MaxElementVolume.cxx,
-         src/SMESH/SMESH_MaxElementVolume.hxx,
-         src/SMESH/SMESH_NETGEN_3D.cxx, src/SMESH/SMESH_NETGEN_3D.hxx,
-         src/SMESH/SMESH_subMesh.cxx, src/SMESHGUI/SMESHGUI.cxx,
-         src/SMESHGUI/SMESHGUI.h, src/SMESHGUI/SMESHGUI_NbSegmentsDlg.cxx,
-         src/SMESHGUI/SMESHGUI_icons.po, src/SMESH_I/Makefile.in,
-         src/SMESH_I/SMESH_Gen_i.cxx,
-         src/SMESH_I/SMESH_HypothesisFactory_i.cxx,
-         src/SMESH_I/SMESH_LengthFromEdges_i.cxx,
-         src/SMESH_I/SMESH_LengthFromEdges_i.hxx,
-         src/SMESH_I/SMESH_MEDMesh_i.cxx,
-         src/SMESH_I/SMESH_MEDSupport_i.cxx,
-         src/SMESH_I/SMESH_MaxElementVolume_i.cxx,
-         src/SMESH_I/SMESH_MaxElementVolume_i.hxx,
-         src/SMESH_I/SMESH_NETGEN_3D_i.cxx,
-         src/SMESH_I/SMESH_NETGEN_3D_i.hxx, src/SMESH_SWIG/Makefile.in,
-         src/SMESH_SWIG/SMESH_Partition1_tetra.py,
-         src/SMESH_SWIG/SMESH_box2_tetra.py,
-         src/SMESH_SWIG/SMESH_box3_tetra.py,
-         src/SMESH_SWIG/SMESH_box_tetra.py,
-         src/SMESH_SWIG/SMESH_fixation_hexa.py,
-         src/SMESH_SWIG/SMESH_fixation_tetra.py,
-         src/SMESH_SWIG/SMESH_flight_skin.py,
-         src/SMESH_SWIG/SMESH_mechanic_tetra.py: updating or adding when
-         merging in the main trunk with the version in the branch
-         nadir_1_2_2 !!
-
-2003-12-05 14:49  Jerome Robert <jerome.robert@eads.net>
-
-       * src/MEFISTO2/trte.f: Remove "pause" primitive call.
-
-2003-11-27 11:45  Jerome Robert <jerome.robert@eads.net>
-
-       * resources/SMESH_en.xml, resources/SMESH_fr.xml,
-         src/SMESHGUI/SMESHGUI.cxx: [Bug SMESH839] Spelling: Hypotheses -
-         Hexa?edron (i,j,k). Bug Fixed.
-
-2003-11-25 08:52  tag V1_3_0
-
-2003-11-25 08:52  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * bin/VERSION, INSTALL: NRI: 1.3.0 version.
-
-2003-11-20 12:45  tag V1_3_0_b3
-
-2003-11-20 12:45  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/html/INPUT/sources/static/: doxygen.css, page2.html, tree.js,
-         treeview.js: NRI : Add static documentation.
-
-2003-11-20 12:45  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/html/INPUT/sources/: Application-About.png,
-         Application-About1.jpg, application.gif, application.jpg,
-         bg_salome.gif, bg_salomepro.gif, doxygen.css: NRI : Update
-         images.
-
-2003-11-20 12:44  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/html/INPUT/doxyfile: NRI : Generate TreeView.
-
-2003-11-20 12:43  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/html/Makefile.in: NRI : Add static directory.
-
-2003-11-18 15:01  tag V1_3_0b2
-
-2003-11-18 15:01  Jerome Robert <jerome.robert@eads.net>
-
-       * ChangeLog, INSTALL, cvs-tags: update for V1_3_0_b2
-
-2003-11-18 09:19  Nadir Bouhamou <nadir.bouhamou@cea.fr>
-
-       * src/SMESH_I/: SMESH_MEDFamily_i.cxx, SMESH_MEDFamily_i.hxx,
-         SMESH_MEDMesh_i.cxx, SMESH_MEDMesh_i.hxx, SMESH_MEDSupport_i.cxx,
-         SMESH_MEDSupport_i.hxx: merge with the branch
-         nadir_update_MED_v1_3_0 (branch to build the V1_3_0 version of
-         the module.
-
-2003-11-12 13:20  tag V1_3_0_b1
-
-2003-11-12 13:20  Jerome Robert <jerome.robert@eads.net>
-
-       * ChangeLog, INSTALL, cvs-tags, bin/VERSION: Update for V1.3.0b1
-
-2003-11-12 11:40  Jerome Robert <jerome.robert@eads.net>
-
-       * src/OBJECT/SMESH_Actor.cxx: MergeV1_2c-1
-
-2003-11-06 14:43  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/SMESHGUI.cxx: NRI : MergeV1_2c-1.
-
-2003-11-06 14:34  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/MEFISTO2/: areteideale.f, trte.f: NRI : Add licence header.
-
-2003-11-06 11:34  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * LICENCE: NRI : add LICENCE file
-
-2003-11-03 15:50  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/html/Makefile.in: NRI : Relative path !!!!
-
-2003-10-22 15:28  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_Mesh.cxx, SMDS_Mesh.hxx: Fix/implement
-         removeNode, removeEdge, removeFace, removeVolume and
-         removeElement
-
-2003-10-20 16:26  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHGUI/SMESHGUI.cxx: When the main window was maximized
-         some dialogs were cropped at the bottom of the screen. It's now
-         fixed.
-
-2003-10-17 16:31  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/SMDS_Mesh.cxx: Fix a bug. Quadrangles were added as
-         triangles.
-
-2003-10-06 10:50  tag MergeV1_2c-1
-
-2003-10-06 10:50  Jerome Robert <jerome.robert@eads.net>
-
-       * cvs-tags: Update. Created a new branch for user nadir.
-
-2003-10-02 16:16  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * build_configure: NRI : RedHat 9 compatibility (M. Tajchman).
-
-2003-09-26 15:14  tag V1_2_2
-
-2003-09-26 15:14  Jerome Robert <jerome.robert@eads.net>
-
-       * INSTALL, cvs-tags: Add a tag file to track branch and tag. Update
-         INSTALL to prepare V1_2_2 tag.
-
-2003-09-26 14:21  tag V1_2_1
-
-2003-09-26 14:21  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * INSTALL: NRI : INSTALL file defined into SALOME2_PRODUCTION_CYCLE
-         document.
-
-2003-09-23 14:33  Jerome Robert <jerome.robert@eads.net>
-
-       * src/: SMDS/SMDS_FaceOfEdges.hxx, SMESHDS/SMESHDS_Mesh.hxx,
-         SMDS/SMDS_FaceOfNodes.hxx, SMDS/SMDS_MeshEdge.hxx,
-         SMDS/SMDS_MeshElement.hxx, SMDS/SMDS_Tria3OfNodes.hxx,
-         SMDS/SMDS_VolumeOfFaces.hxx: Keep compatible with gcc 2
-
-2003-09-23 11:52  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/SMESHGUI_StudyAPI.cxx: NRI : Display Component
-         UserName and Icon.
-
-2003-09-22 12:23  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/SMDS_IteratorOfArray.hxx: Freshly added file
-
-2003-09-12 15:12  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: Makefile.in, SMDS_HexahedronOfNodes.cxx,
-         SMDS_HexahedronOfNodes.hxx, SMDS_Mesh.cxx, SMDS_Tria3OfNodes.cxx,
-         SMDS_Tria3OfNodes.hxx: Add HexahedronOfNodes and Tria3OfNodes to
-         improve performance
-
-2003-09-12 15:11  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/SMDS_VolumeOfNodes.cxx: Fix bug. Was always printing 8
-         nodes
-
-2003-09-08 15:04  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_Mesh.cxx, SMDS_VolumeOfNodes.cxx,
-         SMDS_VolumeOfNodes.hxx: Add support for tetra, pyramid and prism
-
-2003-09-08 13:41  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_Mesh.cxx, SMDS_MeshElement.cxx: Add some comments
-
-2003-09-05 12:19  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/SMDS_MeshNode.cxx: Some forgotten return statments
-
-2003-09-05 11:45  Jerome Robert <jerome.robert@eads.net>
-
-       * src/: DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx,
-         DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, SMESH/SMESH_Hexa_3D.cxx:
-         Correct some memory leaks
-
-2003-09-05 10:31  Jerome Robert <jerome.robert@eads.net>
-
-       * src/: DriverMED/DriverMED_W_SMESHDS_Mesh.cxx,
-         SMESH/SMESH_Hexa_3D.cxx, SMESH/SMESH_Hexa_3D.hxx,
-         SMESH/SMESH_MEFISTO_2D.cxx, SMESH/SMESH_MEFISTO_2D.hxx,
-         SMESH/SMESH_Quadrangle_2D.cxx, SMESH/SMESH_Quadrangle_2D.hxx,
-         SMESH/SMESH_Regular_1D.cxx, SMESH/SMESH_subMesh.cxx,
-         SMESHDS/SMESHDS_Mesh.cxx, SMESHDS/SMESHDS_Mesh.hxx,
-         SMESHDS/SMESHDS_SubMesh.cxx, SMESHDS/SMESHDS_SubMesh.hxx,
-         SMESH_I/SMESH_MEDSupport_i.cxx, SMESH_I/SMESH_MeshEditor_i.cxx:
-         Use nodes and elements pointer instead on IDs
-
-2003-09-05 10:20  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_Mesh.cxx, SMDS_Mesh.hxx: Change API to use
-         pointer on elements and no longer ID of elements
-
-2003-09-04 15:04  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHDS/: Handle_SMESHDS_Command.hxx,
-         Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx,
-         Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx,
-         Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx,
-         Handle_SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         Handle_SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx,
-         Handle_SMESHDS_Document.hxx,
-         Handle_SMESHDS_ListNodeOfListOfAsciiString.hxx,
-         Handle_SMESHDS_ListNodeOfListOfCommand.hxx,
-         Handle_SMESHDS_ListNodeOfListOfPtrHypothesis.hxx,
-         Handle_SMESHDS_Mesh.hxx, Handle_SMESHDS_Script.hxx,
-         Handle_SMESHDS_SubMesh.hxx, SMESHDS.cdl, SMESHDS_Command.cdl,
-         SMESHDS_Command.ixx, SMESHDS_Command.jxx,
-         SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh.hxx,
-         SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh_0.cxx,
-         SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh_0.cxx,
-         SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx,
-         SMESHDS_DataMapNodeOfDataMapOfIntegerMesh_0.cxx,
-         SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh_0.cxx,
-         SMESHDS_DataMapOfIntegerMesh.hxx,
-         SMESHDS_DataMapOfIntegerMesh_0.cxx,
-         SMESHDS_DataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS_DataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS_DataMapOfIntegerSubMesh.hxx,
-         SMESHDS_DataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS_DataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS_DataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS_DataMapOfShapeSubMesh.hxx,
-         SMESHDS_DataMapOfShapeSubMesh_0.cxx, SMESHDS_Document.cdl,
-         SMESHDS_Document.ixx, SMESHDS_Document.jxx,
-         SMESHDS_ListIteratorOfListOfAsciiString.hxx,
-         SMESHDS_ListIteratorOfListOfAsciiString_0.cxx,
-         SMESHDS_ListIteratorOfListOfCommand.hxx,
-         SMESHDS_ListIteratorOfListOfCommand_0.cxx,
-         SMESHDS_ListIteratorOfListOfPtrHypothesis.hxx,
-         SMESHDS_ListIteratorOfListOfPtrHypothesis_0.cxx,
-         SMESHDS_ListNodeOfListOfAsciiString.hxx,
-         SMESHDS_ListNodeOfListOfAsciiString_0.cxx,
-         SMESHDS_ListNodeOfListOfCommand.hxx,
-         SMESHDS_ListNodeOfListOfCommand_0.cxx,
-         SMESHDS_ListNodeOfListOfPtrHypothesis.hxx,
-         SMESHDS_ListNodeOfListOfPtrHypothesis_0.cxx,
-         SMESHDS_ListOfAsciiString.hxx, SMESHDS_ListOfAsciiString_0.cxx,
-         SMESHDS_ListOfCommand.hxx, SMESHDS_ListOfCommand_0.cxx,
-         SMESHDS_ListOfPtrHypothesis.hxx,
-         SMESHDS_ListOfPtrHypothesis_0.cxx, SMESHDS_Mesh.cdl,
-         SMESHDS_Mesh.ixx, SMESHDS_Mesh.jxx, SMESHDS_PtrHypothesis.hxx,
-         SMESHDS_Script.cdl, SMESHDS_Script.ixx, SMESHDS_Script.jxx,
-         SMESHDS_SubMesh.cdl, SMESHDS_SubMesh.ixx, SMESHDS_SubMesh.jxx:
-         Remove no longer needed files
-
-2003-09-04 14:50  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: Handle_SMDSControl_BoundaryEdges.hxx,
-         Handle_SMDSControl_BoundaryFaces.hxx,
-         Handle_SMDSControl_MeshBoundary.hxx,
-         Handle_SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx,
-         Handle_SMDS_DataMapNodeOfDataMapOfPntInteger.hxx,
-         Handle_SMDS_EdgePosition.hxx, Handle_SMDS_FacePosition.hxx,
-         Handle_SMDS_HSequenceOfMesh.hxx,
-         Handle_SMDS_ListNodeOfListOfMesh.hxx,
-         Handle_SMDS_ListNodeOfListOfMeshElement.hxx,
-         Handle_SMDS_ListNodeOfListOfMeshGroup.hxx, Handle_SMDS_Mesh.hxx,
-         Handle_SMDS_MeshEdge.hxx, Handle_SMDS_MeshElement.hxx,
-         Handle_SMDS_MeshElementIDFactory.hxx, Handle_SMDS_MeshFace.hxx,
-         Handle_SMDS_MeshGroup.hxx, Handle_SMDS_MeshHexahedron.hxx,
-         Handle_SMDS_MeshIDFactory.hxx, Handle_SMDS_MeshNode.hxx,
-         Handle_SMDS_MeshNodeIDFactory.hxx, Handle_SMDS_MeshObject.hxx,
-         Handle_SMDS_MeshPrism.hxx, Handle_SMDS_MeshPyramid.hxx,
-         Handle_SMDS_MeshQuadrangle.hxx, Handle_SMDS_MeshTetrahedron.hxx,
-         Handle_SMDS_MeshTriangle.hxx, Handle_SMDS_MeshVolume.hxx,
-         Handle_SMDS_Position.hxx,
-         Handle_SMDS_SequenceNodeOfSequenceOfMesh.hxx,
-         Handle_SMDS_SpacePosition.hxx,
-         Handle_SMDS_StdMapNodeOfExtendedMap.hxx,
-         Handle_SMDS_StdMapNodeOfExtendedOrientedMap.hxx,
-         Handle_SMDS_VertexPosition.hxx, SMDS.cdl, SMDSAbs.cdl,
-         SMDSControl.cdl, SMDSControl.ixx, SMDSControl.jxx,
-         SMDSControl_BoundaryEdges.cdl, SMDSControl_BoundaryEdges.ixx,
-         SMDSControl_BoundaryEdges.jxx, SMDSControl_BoundaryFaces.cdl,
-         SMDSControl_BoundaryFaces.ixx, SMDSControl_BoundaryFaces.jxx,
-         SMDSControl_MeshBoundary.cdl, SMDSControl_MeshBoundary.ixx,
-         SMDSControl_MeshBoundary.jxx, SMDSEdit.cdl,
-         SMDSEdit_Transform.cdl, SMDSEdit_Transform.ixx,
-         SMDSEdit_Transform.jxx, SMDS_BasicMap.lxx,
-         SMDS_BasicMapIterator.lxx,
-         SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement.hxx,
-         SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement_0.cxx,
-         SMDS_DataMapIteratorOfDataMapOfPntInteger.hxx,
-         SMDS_DataMapIteratorOfDataMapOfPntInteger_0.cxx,
-         SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx,
-         SMDS_DataMapNodeOfDataMapOfIntegerMeshElement_0.cxx,
-         SMDS_DataMapNodeOfDataMapOfPntInteger.hxx,
-         SMDS_DataMapNodeOfDataMapOfPntInteger_0.cxx,
-         SMDS_DataMapOfIntegerMeshElement.hxx,
-         SMDS_DataMapOfIntegerMeshElement_0.cxx,
-         SMDS_DataMapOfPntInteger.hxx, SMDS_DataMapOfPntInteger_0.cxx,
-         SMDS_EdgePosition.cdl, SMDS_EdgePosition.ixx,
-         SMDS_EdgePosition.jxx, SMDS_EdgePosition.lxx,
-         SMDS_ExtendedMap.hxx, SMDS_ExtendedMap_0.cxx,
-         SMDS_ExtendedOrientedMap.hxx, SMDS_ExtendedOrientedMap_0.cxx,
-         SMDS_FacePosition.cdl, SMDS_FacePosition.ixx,
-         SMDS_FacePosition.jxx, SMDS_FacePosition.lxx,
-         SMDS_HSequenceOfMesh.hxx, SMDS_HSequenceOfMesh_0.cxx,
-         SMDS_ListIteratorOfListOfMesh.hxx,
-         SMDS_ListIteratorOfListOfMeshElement.hxx,
-         SMDS_ListIteratorOfListOfMeshElement_0.cxx,
-         SMDS_ListIteratorOfListOfMeshGroup.hxx,
-         SMDS_ListIteratorOfListOfMeshGroup_0.cxx,
-         SMDS_ListIteratorOfListOfMesh_0.cxx,
-         SMDS_ListNodeOfListOfMesh.hxx,
-         SMDS_ListNodeOfListOfMeshElement.hxx,
-         SMDS_ListNodeOfListOfMeshElement_0.cxx,
-         SMDS_ListNodeOfListOfMeshGroup.hxx,
-         SMDS_ListNodeOfListOfMeshGroup_0.cxx,
-         SMDS_ListNodeOfListOfMesh_0.cxx, SMDS_ListOfMesh.hxx,
-         SMDS_ListOfMeshElement.hxx, SMDS_ListOfMeshElement_0.cxx,
-         SMDS_ListOfMeshGroup.hxx, SMDS_ListOfMeshGroup_0.cxx,
-         SMDS_ListOfMesh_0.cxx, SMDS_Map.gxx, SMDS_MapHasher.gxx,
-         SMDS_MapIterator.gxx, SMDS_MapIteratorOfExtendedMap.hxx,
-         SMDS_MapIteratorOfExtendedMap_0.cxx,
-         SMDS_MapIteratorOfExtendedOrientedMap.hxx,
-         SMDS_MapIteratorOfExtendedOrientedMap_0.cxx, SMDS_MapNode.lxx,
-         SMDS_MapOfMeshElement.cdl, SMDS_MapOfMeshElement.cxx,
-         SMDS_MapOfMeshElement.hxx, SMDS_MapOfMeshElement.ixx,
-         SMDS_MapOfMeshElement.jxx, SMDS_MapOfMeshElement.lxx,
-         SMDS_MapOfMeshOrientedElement.cdl,
-         SMDS_MapOfMeshOrientedElement.cxx,
-         SMDS_MapOfMeshOrientedElement.hxx,
-         SMDS_MapOfMeshOrientedElement.ixx,
-         SMDS_MapOfMeshOrientedElement.jxx,
-         SMDS_MapOfMeshOrientedElement.lxx, SMDS_Mesh.cdl, SMDS_Mesh.ixx,
-         SMDS_Mesh.jxx, SMDS_Mesh.lxx, SMDS_MeshEdge.cdl,
-         SMDS_MeshEdge.ixx, SMDS_MeshEdge.jxx, SMDS_MeshEdge.lxx,
-         SMDS_MeshEdgesIterator.cdl, SMDS_MeshEdgesIterator.cxx,
-         SMDS_MeshEdgesIterator.hxx, SMDS_MeshEdgesIterator.ixx,
-         SMDS_MeshEdgesIterator.jxx, SMDS_MeshElement.cdl,
-         SMDS_MeshElement.ixx, SMDS_MeshElement.jxx, SMDS_MeshElement.lxx,
-         SMDS_MeshElementIDFactory.cdl, SMDS_MeshElementIDFactory.ixx,
-         SMDS_MeshElementIDFactory.jxx, SMDS_MeshElementIDFactory.lxx,
-         SMDS_MeshElementMapHasher.cdl, SMDS_MeshElementMapHasher.cxx,
-         SMDS_MeshElementMapHasher.hxx, SMDS_MeshElementMapHasher.ixx,
-         SMDS_MeshElementMapHasher.jxx, SMDS_MeshElementMapHasher.lxx,
-         SMDS_MeshElementsIterator.cdl, SMDS_MeshElementsIterator.cxx,
-         SMDS_MeshElementsIterator.hxx, SMDS_MeshElementsIterator.ixx,
-         SMDS_MeshElementsIterator.jxx, SMDS_MeshElementsIterator.lxx,
-         SMDS_MeshFace.cdl, SMDS_MeshFace.ixx, SMDS_MeshFace.jxx,
-         SMDS_MeshFace.lxx, SMDS_MeshFacesIterator.cdl,
-         SMDS_MeshFacesIterator.cxx, SMDS_MeshFacesIterator.hxx,
-         SMDS_MeshFacesIterator.ixx, SMDS_MeshFacesIterator.jxx,
-         SMDS_MeshGroup.cdl, SMDS_MeshGroup.ixx, SMDS_MeshGroup.jxx,
-         SMDS_MeshGroup.lxx, SMDS_MeshHexahedron.cdl,
-         SMDS_MeshHexahedron.ixx, SMDS_MeshHexahedron.jxx,
-         SMDS_MeshHexahedron.lxx, SMDS_MeshIDFactory.cdl,
-         SMDS_MeshIDFactory.ixx, SMDS_MeshIDFactory.jxx,
-         SMDS_MeshIDFactory.lxx, SMDS_MeshNode.cdl, SMDS_MeshNode.ixx,
-         SMDS_MeshNode.jxx, SMDS_MeshNode.lxx, SMDS_MeshNodeIDFactory.cdl,
-         SMDS_MeshNodeIDFactory.ixx, SMDS_MeshNodeIDFactory.jxx,
-         SMDS_MeshNodeIDFactory.lxx, SMDS_MeshNodesIterator.cdl,
-         SMDS_MeshNodesIterator.cxx, SMDS_MeshNodesIterator.hxx,
-         SMDS_MeshNodesIterator.ixx, SMDS_MeshNodesIterator.jxx,
-         SMDS_MeshObject.cdl, SMDS_MeshObject.ixx, SMDS_MeshObject.jxx,
-         SMDS_MeshOrientedElementMapHasher.cdl,
-         SMDS_MeshOrientedElementMapHasher.cxx,
-         SMDS_MeshOrientedElementMapHasher.hxx,
-         SMDS_MeshOrientedElementMapHasher.ixx,
-         SMDS_MeshOrientedElementMapHasher.jxx,
-         SMDS_MeshOrientedElementMapHasher.lxx, SMDS_MeshPrism.cdl,
-         SMDS_MeshPrism.ixx, SMDS_MeshPrism.jxx, SMDS_MeshPrism.lxx,
-         SMDS_MeshPyramid.cdl, SMDS_MeshPyramid.ixx, SMDS_MeshPyramid.jxx,
-         SMDS_MeshPyramid.lxx, SMDS_MeshQuadrangle.cdl,
-         SMDS_MeshQuadrangle.ixx, SMDS_MeshQuadrangle.jxx,
-         SMDS_MeshQuadrangle.lxx, SMDS_MeshTetrahedron.cdl,
-         SMDS_MeshTetrahedron.ixx, SMDS_MeshTetrahedron.jxx,
-         SMDS_MeshTetrahedron.lxx, SMDS_MeshTriangle.cdl,
-         SMDS_MeshTriangle.ixx, SMDS_MeshTriangle.jxx,
-         SMDS_MeshTriangle.lxx, SMDS_MeshVolume.cdl, SMDS_MeshVolume.ixx,
-         SMDS_MeshVolume.jxx, SMDS_MeshVolume.lxx,
-         SMDS_MeshVolumesIterator.cdl, SMDS_MeshVolumesIterator.cxx,
-         SMDS_MeshVolumesIterator.hxx, SMDS_MeshVolumesIterator.ixx,
-         SMDS_MeshVolumesIterator.jxx, SMDS_PntHasher.cdl,
-         SMDS_PntHasher.cxx, SMDS_PntHasher.hxx, SMDS_PntHasher.ixx,
-         SMDS_PntHasher.jxx, SMDS_PntHasher.lxx, SMDS_Position.cdl,
-         SMDS_Position.ixx, SMDS_Position.jxx, SMDS_Position.lxx,
-         SMDS_SequenceNodeOfSequenceOfMesh.hxx,
-         SMDS_SequenceNodeOfSequenceOfMesh_0.cxx, SMDS_SequenceOfMesh.hxx,
-         SMDS_SequenceOfMesh_0.cxx, SMDS_SpacePosition.cdl,
-         SMDS_SpacePosition.ixx, SMDS_SpacePosition.jxx,
-         SMDS_SpacePosition.lxx, SMDS_StdMapNode.gxx, SMDS_StdMapNode.lxx,
-         SMDS_StdMapNodeOfExtendedMap.hxx,
-         SMDS_StdMapNodeOfExtendedMap_0.cxx,
-         SMDS_StdMapNodeOfExtendedOrientedMap.hxx,
-         SMDS_StdMapNodeOfExtendedOrientedMap_0.cxx,
-         SMDS_VertexPosition.cdl, SMDS_VertexPosition.ixx,
-         SMDS_VertexPosition.jxx: Remove no longer needed files
-
-2003-09-04 13:28  Jerome Robert <jerome.robert@eads.net>
-
-       * build_configure: It seems "make_omniorb" and "make_commence" need
-         to be before and after "envScript"
-
-2003-09-04 12:57  Jerome Robert <jerome.robert@eads.net>
-
-       * build_configure: make_commence and make_omniorb were detected
-         twice. Only one is requiered in AC_OUTPUT
-
-2003-09-04 12:03  Jerome Robert <jerome.robert@eads.net>
-
-       * src/: DriverDAT/DriverDAT_R_SMDS_Mesh.cxx,
-         DriverDAT/DriverDAT_R_SMDS_Mesh.h,
-         DriverDAT/DriverDAT_R_SMESHDS_Document.cxx,
-         DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx,
-         DriverDAT/DriverDAT_R_SMESHDS_Mesh.h,
-         DriverDAT/DriverDAT_W_SMDS_Mesh.cxx,
-         DriverDAT/DriverDAT_W_SMDS_Mesh.h,
-         DriverDAT/DriverDAT_W_SMESHDS_Document.cxx,
-         DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx,
-         DriverDAT/DriverDAT_W_SMESHDS_Mesh.h,
-         DriverMED/DriverMED_R_SMDS_Mesh.cxx,
-         DriverMED/DriverMED_R_SMDS_Mesh.h,
-         DriverMED/DriverMED_R_SMESHDS_Document.cxx,
-         DriverMED/DriverMED_R_SMESHDS_Mesh.cxx,
-         DriverMED/DriverMED_R_SMESHDS_Mesh.h,
-         DriverMED/DriverMED_W_SMDS_Mesh.cxx,
-         DriverMED/DriverMED_W_SMDS_Mesh.h,
-         DriverMED/DriverMED_W_SMESHDS_Document.cxx,
-         DriverMED/DriverMED_W_SMESHDS_Mesh.cxx,
-         DriverMED/DriverMED_W_SMESHDS_Mesh.h,
-         DriverUNV/DriverUNV_R_SMDS_Mesh.cxx,
-         DriverUNV/DriverUNV_R_SMDS_Mesh.h,
-         DriverUNV/DriverUNV_R_SMESHDS_Document.cxx,
-         DriverUNV/DriverUNV_R_SMESHDS_Mesh.cxx,
-         DriverUNV/DriverUNV_R_SMESHDS_Mesh.h,
-         DriverUNV/DriverUNV_W_SMDS_Mesh.cxx,
-         DriverUNV/DriverUNV_W_SMDS_Mesh.h,
-         DriverUNV/DriverUNV_W_SMESHDS_Document.cxx,
-         DriverUNV/DriverUNV_W_SMESHDS_Mesh.cxx,
-         DriverUNV/DriverUNV_W_SMESHDS_Mesh.h: Update to match the changes
-         in SMDS
-
-2003-09-04 11:03  Jerome Robert <jerome.robert@eads.net>
-
-       * src/: DriverDAT/Makefile.in, DriverMED/Makefile.in,
-         DriverUNV/Makefile.in: Remove OCC_LIBS from LDFLAGS
-
-2003-09-04 10:56  Jerome Robert <jerome.robert@eads.net>
-
-       * src/Driver/: Document_Reader.cxx, Document_Reader.h,
-         Document_Writer.cxx, Document_Writer.h, Mesh_Reader.h,
-         Mesh_Writer.h: Update to mach the changes in SMDS
-
-2003-09-04 10:44  Jerome Robert <jerome.robert@eads.net>
-
-       * src/Driver/Makefile.in: Remove OCC_LIBS from LDFLAGS
-
-2003-09-04 10:41  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH_I/: SMESH_Gen_i.cxx, SMESH_MEDMesh_i.cxx,
-         SMESH_MEDMesh_i.hxx, SMESH_MEDSupport_i.cxx,
-         SMESH_MEDSupport_i.hxx, SMESH_MeshEditor_i.cxx,
-         SMESH_MeshEditor_i.hxx, SMESH_Mesh_i.cxx: Update to match the new
-         implementation of SMDS
-
-2003-09-04 10:10  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH/SMESH_MaxElementArea.cxx: make GetMaxArea const
-
-2003-09-04 10:10  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH/: SMESH_MEFISTO_2D.hxx, SMESH_Regular_1D.hxx: make
-         hypothesis const
-
-2003-09-04 09:55  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH/SMESH_Hexa_3D.hxx: Update to match the change of SMDS
-         (new DS).
-
-2003-09-04 09:51  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH_I/sstream: Use the file include in gcc instead of this
-         one
-
-2003-09-04 09:21  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH/: SMESH_Algo.cxx, SMESH_Algo.hxx, SMESH_Gen.cxx,
-         SMESH_Gen.hxx, SMESH_Hexa_3D.cxx, SMESH_MEFISTO_2D.cxx,
-         SMESH_MaxElementArea.hxx, SMESH_Mesh.cxx, SMESH_Mesh.hxx,
-         SMESH_Quadrangle_2D.cxx, SMESH_Regular_1D.cxx, SMESH_subMesh.cxx,
-         SMESH_subMesh.hxx: Update to match the change of SMDS (new DS).
-
-2003-09-04 09:13  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH/: SMESH_NumberOfSegments.cxx,
-         SMESH_NumberOfSegments.hxx: make GetNumberOfSegments and
-         GetScaleFactor const
-
-2003-09-04 09:10  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESH/: SMESH_LocalLength.cxx, SMESH_LocalLength.hxx: make
-         GetLength const
-
-2003-09-04 08:09  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHFiltersSelection/Makefile.in: Change OCC_LIBS to
-         OCC_KERNEL_LIBS
-
-2003-09-04 07:55  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHGUI/Makefile.in: Change OCC_LIBS to OCC_KERNEL_LIBS
-
-2003-09-04 07:39  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHGUI/: SMESHGUI.cxx, SMESHGUI.h: Change
-         Handle(SMESHDS_Document) to SMESHDS_Document*
-
-2003-09-04 07:21  Jerome Robert <jerome.robert@eads.net>
-
-       * src/MEFISTO2/Makefile.in: Remove OCC_LIBS from LDFLAGS
-
-2003-09-04 07:14  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMESHDS/: Makefile.in, SMESHDS_Command.cxx,
-         SMESHDS_Command.hxx, SMESHDS_Document.cxx, SMESHDS_Document.hxx,
-         SMESHDS_Hypothesis.cxx, SMESHDS_Hypothesis.hxx, SMESHDS_Mesh.cxx,
-         SMESHDS_Mesh.hxx, SMESHDS_Script.cxx, SMESHDS_Script.hxx,
-         SMESHDS_SubMesh.cxx, SMESHDS_SubMesh.hxx: Remove Opencascade
-         dependencies. Change to STL.
-
-2003-09-03 17:31  Jerome Robert <jerome.robert@eads.net>
-
-       * src/OBJECT/Makefile.in: Change OCC_LIBS to OCC_KERNEL_LIBS
-
-2003-09-03 17:30  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_Mesh.cxx, SMDS_Mesh.hxx, SMDS_MeshEdge.cxx,
-         SMDS_MeshEdge.hxx, SMDS_MeshElement.cxx, SMDS_MeshElement.hxx,
-         SMDS_MeshNode.cxx, SMDS_MeshNode.hxx, SMDS_MeshVolume.cxx,
-         SMDS_MeshVolume.hxx, SMDS_MeshFace.cxx, SMDS_MeshFace.hxx: New DS
-         implementation
-
-2003-09-03 17:29  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_EdgePosition.cxx, SMDS_EdgePosition.hxx,
-         SMDS_FacePosition.cxx, SMDS_FacePosition.hxx,
-         SMDS_MeshElementIDFactory.cxx, SMDS_MeshElementIDFactory.hxx,
-         SMDS_MeshGroup.cxx, SMDS_MeshGroup.hxx, SMDS_MeshIDFactory.cxx,
-         SMDS_MeshIDFactory.hxx, SMDS_MeshObject.cxx, SMDS_MeshObject.hxx,
-         SMDS_Position.cxx, SMDS_Position.hxx, SMDS_SpacePosition.cxx,
-         SMDS_SpacePosition.hxx, SMDS_TypeOfPosition.hxx,
-         SMDS_VertexPosition.cxx, SMDS_VertexPosition.hxx: Remove
-         Opencascade dependencies
-
-2003-09-03 17:21  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/SMDSAbs_ElementType.hxx: comments
-
-2003-09-03 17:21  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_Iterator.hxx, SMDS_IteratorOfElements.cxx,
-         SMDS_IteratorOfElements.hxx: Add iterator classes
-
-2003-09-03 17:16  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/Makefile.in: Remove wok files. Comment no longer needed
-         files
-
-2003-09-03 17:09  Jerome Robert <jerome.robert@eads.net>
-
-       * src/SMDS/: SMDS_FaceOfEdges.cxx, SMDS_FaceOfEdges.hxx,
-         SMDS_FaceOfNodes.cxx, SMDS_FaceOfNodes.hxx,
-         SMDS_VolumeOfFaces.cxx, SMDS_VolumeOfFaces.hxx,
-         SMDS_VolumeOfNodes.cxx, SMDS_VolumeOfNodes.hxx: Add needed class
-         for the new DS
-
-2003-07-18 12:19  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/SMESHGUI_StudyAPI.cxx: NRI : correction wrong merge.
-
-2003-07-11 07:32  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * bin/VERSION, doc/html/Makefile.in, doc/html/INPUT/doxyfile: NRI :
-         Merge from V1_2.
-
-2003-07-10 17:51  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * configure.in.base: NRI : Merge from V1_2.
-
-2003-07-10 16:31  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/: SMESHGUI_Swig.cxx, SMESHGUI_Swig.i: NRI : Merge
-         from V1_2.
-
-2003-07-10 16:06  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/SMESHGUI_Swig.cxx: NRI : Merge from V1_2.
-
-2003-07-10 15:36  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/Driver/Makefile.in: NRI : Merge from V1_2.
-
-2003-07-10 15:03  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESH/Makefile.in, src/SMESH_I/Makefile.in,
-         idl/SMESH_BasicHypothesis.idl, idl/SMESH_Gen.idl,
-         idl/SMESH_Hypothesis.idl, idl/SMESH_Mesh.idl,
-         adm_local/unix/make_commence.in: NRI : Merge from V1_2.
-
-2003-07-10 14:47  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * configure.in.base: NRI : Merge from V1_2.
-
-2003-07-10 14:31  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/Driver/Makefile.in: NRI : Merge from V1_2.
-
-2003-07-10 13:35  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/: SMESH_I/Makefile.in, SMESH_I/SMESH_1D_Algo_i.cxx,
-         SMESH_I/SMESH_1D_Algo_i.hxx, SMESH_I/SMESH_2D_Algo_i.cxx,
-         SMESH_I/SMESH_2D_Algo_i.hxx, SMESH_I/SMESH_3D_Algo_i.cxx,
-         SMESH_I/SMESH_3D_Algo_i.hxx, SMESH_I/SMESH_Algo_i.cxx,
-         SMESH_I/SMESH_Algo_i.hxx, SMESH_I/SMESH_Gen_i.cxx,
-         SMESH_I/SMESH_Gen_i.hxx, SMESH_I/SMESH_Hexa_3D_i.cxx,
-         SMESH_I/SMESH_Hexa_3D_i.hxx,
-         SMESH_I/SMESH_HypothesisFactory_i.cxx,
-         SMESH_I/SMESH_HypothesisFactory_i.hxx,
-         SMESH_I/SMESH_Hypothesis_i.cxx, SMESH_I/SMESH_Hypothesis_i.hxx,
-         SMESH_I/SMESH_LocalLength_i.cxx, SMESH_I/SMESH_LocalLength_i.hxx,
-         SMESH_I/SMESH_MEDFamily_i.cxx, SMESH_I/SMESH_MEDFamily_i.hxx,
-         SMESH_I/SMESH_MEDMesh_i.cxx, SMESH_I/SMESH_MEDMesh_i.hxx,
-         SMESH_I/SMESH_MEDSupport_i.cxx, SMESH_I/SMESH_MEDSupport_i.hxx,
-         SMESH_I/SMESH_MEFISTO_2D_i.cxx, SMESH_I/SMESH_MEFISTO_2D_i.hxx,
-         SMESH_I/SMESH_MaxElementArea_i.cxx,
-         SMESH_I/SMESH_MaxElementArea_i.hxx,
-         SMESH_I/SMESH_MaxElementVolume_i.cxx,
-         SMESH_I/SMESH_MaxElementVolume_i.hxx,
-         SMESH_I/SMESH_MeshEditor_i.cxx, SMESH_I/SMESH_MeshEditor_i.hxx,
-         SMESH_I/SMESH_Mesh_i.cxx, SMESH_I/SMESH_Mesh_i.hxx,
-         SMESH_I/SMESH_NumberOfSegments_i.cxx,
-         SMESH_I/SMESH_NumberOfSegments_i.hxx,
-         SMESH_I/SMESH_Quadrangle_2D_i.cxx,
-         SMESH_I/SMESH_Quadrangle_2D_i.hxx,
-         SMESH_I/SMESH_Regular_1D_i.cxx, SMESH_I/SMESH_Regular_1D_i.hxx,
-         SMESH_I/SMESH_subMesh_i.cxx, SMESH_I/SMESH_subMesh_i.hxx,
-         SMESH_I/SMESH_test.py, SMESH_I/SMESH_topo.cxx,
-         SMESH_I/SMESH_topo.hxx, SMESH_I/smeshpy.py,
-         SMESH_SWIG/Makefile.in, SMESH_SWIG/SMESH_fixation.py,
-         SMESH_SWIG/SMESH_mechanic.py, SMESH_SWIG/SMESH_test0.py,
-         SMESH_SWIG/SMESH_test1.py, SMESH_SWIG/SMESH_test2.py,
-         SMESH_SWIG/SMESH_test3.py, SMESH_SWIG/batchmode_smesh.py,
-         SMESH_SWIG/libSMESH_Swig.i: yfr : merge 1.2
-
-2003-07-10 13:18  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/SMESHGUI/: SMESHGUI.h, SMESHGUI_AddAlgorithmDlg.cxx,
-         SMESHGUI_AddAlgorithmDlg.h, SMESHGUI_AddEdgeDlg.cxx,
-         SMESHGUI_AddEdgeDlg.h, SMESHGUI_AddFaceDlg.cxx,
-         SMESHGUI_AddFaceDlg.h, SMESHGUI_AddHypothesisDlg.cxx,
-         SMESHGUI_AddHypothesisDlg.h, SMESHGUI_AddSubMeshDlg.cxx,
-         SMESHGUI_AddSubMeshDlg.h, SMESHGUI_AddVolumeDlg.cxx,
-         SMESHGUI_AddVolumeDlg.h, SMESHGUI_ComputeScalarValue.cxx,
-         SMESHGUI_ComputeScalarValue.h, SMESHGUI_DiagonalInversionDlg.cxx,
-         SMESHGUI_DiagonalInversionDlg.h,
-         SMESHGUI_EdgesConnectivityDlg.cxx,
-         SMESHGUI_EdgesConnectivityDlg.h, SMESHGUI_EditHypothesesDlg.cxx,
-         SMESHGUI_EditHypothesesDlg.h, SMESHGUI_EditScalarBarDlg.cxx,
-         SMESHGUI_EditScalarBarDlg.h, SMESHGUI_InitMeshDlg.cxx,
-         SMESHGUI_InitMeshDlg.h, SMESHGUI_LocalLengthDlg.cxx,
-         SMESHGUI_LocalLengthDlg.h, SMESHGUI_MaxElementAreaDlg.cxx,
-         SMESHGUI_MaxElementAreaDlg.h, SMESHGUI_MaxElementVolumeDlg.cxx,
-         SMESHGUI_MaxElementVolumeDlg.h, SMESHGUI_MeshInfosDlg.cxx,
-         SMESHGUI_MeshInfosDlg.h, SMESHGUI_MoveNodesDlg.cxx,
-         SMESHGUI_MoveNodesDlg.h, SMESHGUI_NbSegmentsDlg.cxx,
-         SMESHGUI_NbSegmentsDlg.h, SMESHGUI_NodesDlg.cxx,
-         SMESHGUI_NodesDlg.h, SMESHGUI_OrientationElementsDlg.cxx,
-         SMESHGUI_OrientationElementsDlg.h,
-         SMESHGUI_Preferences_ColorDlg.cxx,
-         SMESHGUI_Preferences_ColorDlg.h,
-         SMESHGUI_Preferences_ScalarBarDlg.cxx,
-         SMESHGUI_Preferences_ScalarBarDlg.h,
-         SMESHGUI_RemoveElementsDlg.cxx, SMESHGUI_RemoveElementsDlg.h,
-         SMESHGUI_RemoveNodesDlg.cxx, SMESHGUI_RemoveNodesDlg.h,
-         SMESHGUI_SpinBox.cxx, SMESHGUI_SpinBox.h, SMESHGUI_StudyAPI.cxx,
-         SMESHGUI_StudyAPI.h, SMESHGUI_Swig.cxx, SMESHGUI_Swig.hxx,
-         SMESHGUI_Swig.i, SMESHGUI_TransparencyDlg.cxx,
-         SMESHGUI_TransparencyDlg.h, SMESHGUI_aParameterDlg.cxx,
-         SMESHGUI_aParameterDlg.h: yfr : merge 1.2
-
-2003-07-10 12:18  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/SMESHGUI/: Makefile.in, SMESHGUI.cxx: yfr : Merge V1.2
-
-2003-07-10 11:35  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/SMESHFiltersSelection/Makefile.in: yfr : Merge with v1.2
-
-2003-07-10 10:04  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/: SMESHDS/Handle_SMESHDS_Command.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS/Handle_SMESHDS_Document.hxx,
-         SMESHDS/Handle_SMESHDS_ListNodeOfListOfAsciiString.hxx,
-         SMESHDS/Handle_SMESHDS_ListNodeOfListOfCommand.hxx,
-         SMESHDS/Handle_SMESHDS_ListNodeOfListOfPtrHypothesis.hxx,
-         SMESHDS/Handle_SMESHDS_Mesh.hxx,
-         SMESHDS/Handle_SMESHDS_Script.hxx,
-         SMESHDS/Handle_SMESHDS_SubMesh.hxx, SMESHDS/Makefile.in,
-         SMESHDS/SMESHDS.cdl, SMESHDS/SMESHDS_Command.cdl,
-         SMESHDS/SMESHDS_Command.cxx, SMESHDS/SMESHDS_Command.hxx,
-         SMESHDS/SMESHDS_Command.ixx, SMESHDS/SMESHDS_Command.jxx,
-         SMESHDS/SMESHDS_CommandType.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerMesh.hxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfShapeSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapOfShapeSubMesh_0.cxx,
-         SMESHDS/SMESHDS_Document.cdl, SMESHDS/SMESHDS_Document.cxx,
-         SMESHDS/SMESHDS_Document.hxx, SMESHDS/SMESHDS_Document.ixx,
-         SMESHDS/SMESHDS_Document.jxx, SMESHDS/SMESHDS_Hypothesis.cxx,
-         SMESHDS/SMESHDS_Hypothesis.hxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString.hxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString_0.cxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfCommand.hxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfCommand_0.cxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfAsciiString.hxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfAsciiString_0.cxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfCommand.hxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfCommand_0.cxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_ListOfAsciiString.hxx,
-         SMESHDS/SMESHDS_ListOfAsciiString_0.cxx,
-         SMESHDS/SMESHDS_ListOfCommand.hxx,
-         SMESHDS/SMESHDS_ListOfCommand_0.cxx,
-         SMESHDS/SMESHDS_ListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_ListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_Mesh.cdl, SMESHDS/SMESHDS_Mesh.cxx,
-         SMESHDS/SMESHDS_Mesh.hxx, SMESHDS/SMESHDS_Mesh.ixx,
-         SMESHDS/SMESHDS_Mesh.jxx, SMESHDS/SMESHDS_PtrHypothesis.hxx,
-         SMESHDS/SMESHDS_Script.cdl, SMESHDS/SMESHDS_Script.cxx,
-         SMESHDS/SMESHDS_Script.hxx, SMESHDS/SMESHDS_Script.ixx,
-         SMESHDS/SMESHDS_Script.jxx, SMESHDS/SMESHDS_SubMesh.cdl,
-         SMESHDS/SMESHDS_SubMesh.cxx, SMESHDS/SMESHDS_SubMesh.hxx,
-         SMESHDS/SMESHDS_SubMesh.ixx, SMESHDS/SMESHDS_SubMesh.jxx,
-         SMESH/Makefile.in, SMESH/SMESH_1D_Algo.cxx,
-         SMESH/SMESH_1D_Algo.hxx, SMESH/SMESH_2D_Algo.cxx,
-         SMESH/SMESH_2D_Algo.hxx, SMESH/SMESH_3D_Algo.cxx,
-         SMESH/SMESH_3D_Algo.hxx, SMESH/SMESH_Algo.cxx,
-         SMESH/SMESH_Algo.hxx, SMESH/SMESH_Gen.cxx, SMESH/SMESH_Gen.hxx,
-         SMESH/SMESH_Hexa_3D.cxx, SMESH/SMESH_Hexa_3D.hxx,
-         SMESH/SMESH_Hypothesis.cxx, SMESH/SMESH_Hypothesis.hxx,
-         SMESH/SMESH_HypothesisCreator.hxx,
-         SMESH/SMESH_HypothesisFactory.cxx,
-         SMESH/SMESH_HypothesisFactory.hxx,
-         SMESH/SMESH_LengthFromEdges.cxx, SMESH/SMESH_LengthFromEdges.hxx,
-         SMESH/SMESH_LocalLength.cxx, SMESH/SMESH_LocalLength.hxx,
-         SMESH/SMESH_MEFISTO_2D.cxx, SMESH/SMESH_MEFISTO_2D.hxx,
-         SMESH/SMESH_MaxElementArea.cxx, SMESH/SMESH_MaxElementArea.hxx,
-         SMESH/SMESH_MaxElementVolume.cxx,
-         SMESH/SMESH_MaxElementVolume.hxx, SMESH/SMESH_Mesh.cxx,
-         SMESH/SMESH_Mesh.hxx, SMESH/SMESH_NumberOfSegments.cxx,
-         SMESH/SMESH_NumberOfSegments.hxx, SMESH/SMESH_Quadrangle_2D.cxx,
-         SMESH/SMESH_Quadrangle_2D.hxx, SMESH/SMESH_Regular_1D.cxx,
-         SMESH/SMESH_Regular_1D.hxx, SMESH/SMESH_subMesh.cxx,
-         SMESH/SMESH_subMesh.hxx: yfr : Merge with v1.2
-
-2003-07-10 09:49  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/SMDS/: Handle_SMDSControl_BoundaryEdges.hxx,
-         Handle_SMDSControl_BoundaryFaces.hxx,
-         Handle_SMDSControl_MeshBoundary.hxx,
-         Handle_SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx,
-         Handle_SMDS_DataMapNodeOfDataMapOfPntInteger.hxx,
-         Handle_SMDS_EdgePosition.hxx, Handle_SMDS_FacePosition.hxx,
-         Handle_SMDS_HSequenceOfMesh.hxx,
-         Handle_SMDS_ListNodeOfListOfMesh.hxx,
-         Handle_SMDS_ListNodeOfListOfMeshElement.hxx,
-         Handle_SMDS_ListNodeOfListOfMeshGroup.hxx, Handle_SMDS_Mesh.hxx,
-         Handle_SMDS_MeshEdge.hxx, Handle_SMDS_MeshElement.hxx,
-         Handle_SMDS_MeshElementIDFactory.hxx, Handle_SMDS_MeshFace.hxx,
-         Handle_SMDS_MeshGroup.hxx, Handle_SMDS_MeshHexahedron.hxx,
-         Handle_SMDS_MeshIDFactory.hxx, Handle_SMDS_MeshNode.hxx,
-         Handle_SMDS_MeshNodeIDFactory.hxx, Handle_SMDS_MeshObject.hxx,
-         Handle_SMDS_MeshPrism.hxx, Handle_SMDS_MeshPyramid.hxx,
-         Handle_SMDS_MeshQuadrangle.hxx, Handle_SMDS_MeshTetrahedron.hxx,
-         Handle_SMDS_MeshTriangle.hxx, Handle_SMDS_MeshVolume.hxx,
-         Handle_SMDS_Position.hxx,
-         Handle_SMDS_SequenceNodeOfSequenceOfMesh.hxx,
-         Handle_SMDS_SpacePosition.hxx,
-         Handle_SMDS_StdMapNodeOfExtendedMap.hxx,
-         Handle_SMDS_StdMapNodeOfExtendedOrientedMap.hxx,
-         Handle_SMDS_VertexPosition.hxx, Makefile.in, SMDS.cdl,
-         SMDSAbs.cdl, SMDSAbs_ElementType.hxx, SMDSControl.cdl,
-         SMDSControl.cxx, SMDSControl.hxx, SMDSControl.ixx,
-         SMDSControl.jxx, SMDSControl_BoundaryEdges.cdl,
-         SMDSControl_BoundaryEdges.cxx, SMDSControl_BoundaryEdges.hxx,
-         SMDSControl_BoundaryEdges.ixx, SMDSControl_BoundaryEdges.jxx,
-         SMDSControl_BoundaryFaces.cdl, SMDSControl_BoundaryFaces.cxx,
-         SMDSControl_BoundaryFaces.hxx, SMDSControl_BoundaryFaces.ixx,
-         SMDSControl_BoundaryFaces.jxx, SMDSControl_MeshBoundary.cdl,
-         SMDSControl_MeshBoundary.cxx, SMDSControl_MeshBoundary.hxx,
-         SMDSControl_MeshBoundary.ixx, SMDSControl_MeshBoundary.jxx,
-         SMDSEdit.cdl, SMDSEdit_Transform.cdl, SMDSEdit_Transform.cxx,
-         SMDSEdit_Transform.hxx, SMDSEdit_Transform.ixx,
-         SMDSEdit_Transform.jxx, SMDS_BasicMap.lxx,
-         SMDS_BasicMapIterator.lxx,
-         SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement.hxx,
-         SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement_0.cxx,
-         SMDS_DataMapIteratorOfDataMapOfPntInteger.hxx,
-         SMDS_DataMapIteratorOfDataMapOfPntInteger_0.cxx,
-         SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx,
-         SMDS_DataMapNodeOfDataMapOfIntegerMeshElement_0.cxx,
-         SMDS_DataMapNodeOfDataMapOfPntInteger.hxx,
-         SMDS_DataMapNodeOfDataMapOfPntInteger_0.cxx,
-         SMDS_DataMapOfIntegerMeshElement.hxx,
-         SMDS_DataMapOfIntegerMeshElement_0.cxx,
-         SMDS_DataMapOfPntInteger.hxx, SMDS_DataMapOfPntInteger_0.cxx,
-         SMDS_EdgePosition.cdl, SMDS_EdgePosition.cxx,
-         SMDS_EdgePosition.hxx, SMDS_EdgePosition.ixx,
-         SMDS_EdgePosition.jxx, SMDS_EdgePosition.lxx,
-         SMDS_ExtendedMap.hxx, SMDS_ExtendedMap_0.cxx,
-         SMDS_ExtendedOrientedMap.hxx, SMDS_ExtendedOrientedMap_0.cxx,
-         SMDS_FacePosition.cdl, SMDS_FacePosition.cxx,
-         SMDS_FacePosition.hxx, SMDS_FacePosition.ixx,
-         SMDS_FacePosition.jxx, SMDS_FacePosition.lxx,
-         SMDS_HSequenceOfMesh.hxx, SMDS_HSequenceOfMesh_0.cxx,
-         SMDS_ListIteratorOfListOfMesh.hxx,
-         SMDS_ListIteratorOfListOfMeshElement.hxx,
-         SMDS_ListIteratorOfListOfMeshElement_0.cxx,
-         SMDS_ListIteratorOfListOfMeshGroup.hxx,
-         SMDS_ListIteratorOfListOfMeshGroup_0.cxx,
-         SMDS_ListIteratorOfListOfMesh_0.cxx,
-         SMDS_ListNodeOfListOfMesh.hxx,
-         SMDS_ListNodeOfListOfMeshElement.hxx,
-         SMDS_ListNodeOfListOfMeshElement_0.cxx,
-         SMDS_ListNodeOfListOfMeshGroup.hxx,
-         SMDS_ListNodeOfListOfMeshGroup_0.cxx,
-         SMDS_ListNodeOfListOfMesh_0.cxx, SMDS_ListOfMesh.hxx,
-         SMDS_ListOfMeshElement.hxx, SMDS_ListOfMeshElement_0.cxx,
-         SMDS_ListOfMeshGroup.hxx, SMDS_ListOfMeshGroup_0.cxx,
-         SMDS_ListOfMesh_0.cxx, SMDS_MapIteratorOfExtendedMap.hxx,
-         SMDS_MapIteratorOfExtendedMap_0.cxx,
-         SMDS_MapIteratorOfExtendedOrientedMap.hxx,
-         SMDS_MapIteratorOfExtendedOrientedMap_0.cxx, SMDS_MapNode.lxx,
-         SMDS_MapOfMeshElement.cdl, SMDS_MapOfMeshElement.cxx,
-         SMDS_MapOfMeshElement.hxx, SMDS_MapOfMeshElement.ixx,
-         SMDS_MapOfMeshElement.jxx, SMDS_MapOfMeshElement.lxx,
-         SMDS_MapOfMeshOrientedElement.cdl,
-         SMDS_MapOfMeshOrientedElement.cxx,
-         SMDS_MapOfMeshOrientedElement.hxx,
-         SMDS_MapOfMeshOrientedElement.ixx,
-         SMDS_MapOfMeshOrientedElement.jxx,
-         SMDS_MapOfMeshOrientedElement.lxx, SMDS_Mesh.cdl, SMDS_Mesh.cxx,
-         SMDS_Mesh.hxx, SMDS_Mesh.ixx, SMDS_Mesh.jxx, SMDS_Mesh.lxx,
-         SMDS_MeshEdge.cdl, SMDS_MeshEdge.cxx, SMDS_MeshEdge.hxx,
-         SMDS_MeshEdge.ixx, SMDS_MeshEdge.jxx, SMDS_MeshEdge.lxx,
-         SMDS_MeshEdgesIterator.cdl, SMDS_MeshEdgesIterator.cxx,
-         SMDS_MeshEdgesIterator.hxx, SMDS_MeshEdgesIterator.ixx,
-         SMDS_MeshEdgesIterator.jxx, SMDS_MeshElement.cdl,
-         SMDS_MeshElement.cxx, SMDS_MeshElement.hxx, SMDS_MeshElement.ixx,
-         SMDS_MeshElement.jxx, SMDS_MeshElement.lxx,
-         SMDS_MeshElementIDFactory.cdl, SMDS_MeshElementIDFactory.cxx,
-         SMDS_MeshElementIDFactory.hxx, SMDS_MeshElementIDFactory.ixx,
-         SMDS_MeshElementIDFactory.jxx, SMDS_MeshElementIDFactory.lxx,
-         SMDS_MeshElementMapHasher.cdl, SMDS_MeshElementMapHasher.cxx,
-         SMDS_MeshElementMapHasher.hxx, SMDS_MeshElementMapHasher.ixx,
-         SMDS_MeshElementMapHasher.jxx, SMDS_MeshElementMapHasher.lxx,
-         SMDS_MeshElementsIterator.cdl, SMDS_MeshElementsIterator.cxx,
-         SMDS_MeshElementsIterator.hxx, SMDS_MeshElementsIterator.ixx,
-         SMDS_MeshElementsIterator.jxx, SMDS_MeshElementsIterator.lxx,
-         SMDS_MeshFace.cdl, SMDS_MeshFace.cxx, SMDS_MeshFace.hxx,
-         SMDS_MeshFace.ixx, SMDS_MeshFace.jxx, SMDS_MeshFace.lxx,
-         SMDS_MeshFacesIterator.cdl, SMDS_MeshFacesIterator.cxx,
-         SMDS_MeshFacesIterator.hxx, SMDS_MeshFacesIterator.ixx,
-         SMDS_MeshFacesIterator.jxx, SMDS_MeshGroup.cdl,
-         SMDS_MeshGroup.cxx, SMDS_MeshGroup.hxx, SMDS_MeshGroup.ixx,
-         SMDS_MeshGroup.jxx, SMDS_MeshGroup.lxx, SMDS_MeshHexahedron.cdl,
-         SMDS_MeshHexahedron.cxx, SMDS_MeshHexahedron.hxx,
-         SMDS_MeshHexahedron.ixx, SMDS_MeshHexahedron.jxx,
-         SMDS_MeshHexahedron.lxx, SMDS_MeshIDFactory.cdl,
-         SMDS_MeshIDFactory.cxx, SMDS_MeshIDFactory.hxx,
-         SMDS_MeshIDFactory.ixx, SMDS_MeshIDFactory.jxx,
-         SMDS_MeshIDFactory.lxx, SMDS_MeshNode.cdl, SMDS_MeshNode.cxx,
-         SMDS_MeshNode.hxx, SMDS_MeshNode.ixx, SMDS_MeshNode.jxx,
-         SMDS_MeshNode.lxx, SMDS_MeshNodeIDFactory.cdl,
-         SMDS_MeshNodeIDFactory.cxx, SMDS_MeshNodeIDFactory.hxx,
-         SMDS_MeshNodeIDFactory.ixx, SMDS_MeshNodeIDFactory.jxx,
-         SMDS_MeshNodeIDFactory.lxx, SMDS_MeshNodesIterator.cdl,
-         SMDS_MeshNodesIterator.cxx, SMDS_MeshNodesIterator.hxx,
-         SMDS_MeshNodesIterator.ixx, SMDS_MeshNodesIterator.jxx,
-         SMDS_MeshObject.cdl, SMDS_MeshObject.cxx, SMDS_MeshObject.hxx,
-         SMDS_MeshObject.ixx, SMDS_MeshObject.jxx,
-         SMDS_MeshOrientedElementMapHasher.cdl,
-         SMDS_MeshOrientedElementMapHasher.cxx,
-         SMDS_MeshOrientedElementMapHasher.hxx,
-         SMDS_MeshOrientedElementMapHasher.ixx,
-         SMDS_MeshOrientedElementMapHasher.jxx,
-         SMDS_MeshOrientedElementMapHasher.lxx, SMDS_MeshPrism.cdl,
-         SMDS_MeshPrism.cxx, SMDS_MeshPrism.hxx, SMDS_MeshPrism.ixx,
-         SMDS_MeshPrism.jxx, SMDS_MeshPrism.lxx, SMDS_MeshPyramid.cdl,
-         SMDS_MeshPyramid.cxx, SMDS_MeshPyramid.hxx, SMDS_MeshPyramid.ixx,
-         SMDS_MeshPyramid.jxx, SMDS_MeshPyramid.lxx,
-         SMDS_MeshQuadrangle.cdl, SMDS_MeshQuadrangle.cxx,
-         SMDS_MeshQuadrangle.hxx, SMDS_MeshQuadrangle.ixx,
-         SMDS_MeshQuadrangle.jxx, SMDS_MeshQuadrangle.lxx,
-         SMDS_MeshTetrahedron.cdl, SMDS_MeshTetrahedron.cxx,
-         SMDS_MeshTetrahedron.hxx, SMDS_MeshTetrahedron.ixx,
-         SMDS_MeshTetrahedron.jxx, SMDS_MeshTetrahedron.lxx,
-         SMDS_MeshTriangle.cdl, SMDS_MeshTriangle.cxx,
-         SMDS_MeshTriangle.hxx, SMDS_MeshTriangle.ixx,
-         SMDS_MeshTriangle.jxx, SMDS_MeshTriangle.lxx,
-         SMDS_MeshVolume.cdl, SMDS_MeshVolume.cxx, SMDS_MeshVolume.hxx,
-         SMDS_MeshVolume.ixx, SMDS_MeshVolume.jxx, SMDS_MeshVolume.lxx,
-         SMDS_MeshVolumesIterator.cdl, SMDS_MeshVolumesIterator.cxx,
-         SMDS_MeshVolumesIterator.hxx, SMDS_MeshVolumesIterator.ixx,
-         SMDS_MeshVolumesIterator.jxx, SMDS_PntHasher.cdl,
-         SMDS_PntHasher.cxx, SMDS_PntHasher.hxx, SMDS_PntHasher.ixx,
-         SMDS_PntHasher.jxx, SMDS_PntHasher.lxx, SMDS_Position.cdl,
-         SMDS_Position.cxx, SMDS_Position.hxx, SMDS_Position.ixx,
-         SMDS_Position.jxx, SMDS_Position.lxx,
-         SMDS_SequenceNodeOfSequenceOfMesh.hxx,
-         SMDS_SequenceNodeOfSequenceOfMesh_0.cxx, SMDS_SequenceOfMesh.hxx,
-         SMDS_SequenceOfMesh_0.cxx, SMDS_SpacePosition.cdl,
-         SMDS_SpacePosition.cxx, SMDS_SpacePosition.hxx,
-         SMDS_SpacePosition.ixx, SMDS_SpacePosition.jxx,
-         SMDS_SpacePosition.lxx, SMDS_StdMapNode.lxx,
-         SMDS_StdMapNodeOfExtendedMap.hxx,
-         SMDS_StdMapNodeOfExtendedMap_0.cxx,
-         SMDS_StdMapNodeOfExtendedOrientedMap.hxx,
-         SMDS_StdMapNodeOfExtendedOrientedMap_0.cxx,
-         SMDS_TypeOfPosition.hxx, SMDS_VertexPosition.cdl,
-         SMDS_VertexPosition.cxx, SMDS_VertexPosition.hxx,
-         SMDS_VertexPosition.ixx, SMDS_VertexPosition.jxx: yfr : Merge
-         with v1.2
-
-2003-07-10 09:32  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/: DriverDAT/Makefile.in, DriverUNV/Makefile.in,
-         MEFISTO2/Makefile.in, OBJECT/Makefile.in, OBJECT/SMESH_Actor.cxx,
-         OBJECT/SMESH_Actor.h, OBJECT/SMESH_Grid.cxx, OBJECT/SMESH_Grid.h:
-         yfr : Merge with v1.2
-
-2003-07-10 09:14  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/Makefile.in: yfr : Merge with v1.2
-
-2003-07-10 09:00  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/: Driver/Document_Reader.cxx, Driver/Document_Reader.h,
-         Driver/Document_Writer.cxx, Driver/Document_Writer.h,
-         Driver/Driver_dl.cxx, Driver/Makefile.in, Driver/Mesh_Reader.cxx,
-         Driver/Mesh_Reader.h, Driver/Mesh_Writer.cxx,
-         Driver/Mesh_Writer.h, Driver/SMESHDriver.cxx,
-         Driver/SMESHDriver.h, DriverDAT/DriverDAT_R_SMDS_Mesh.cxx,
-         DriverDAT/DriverDAT_R_SMDS_Mesh.h,
-         DriverDAT/DriverDAT_R_SMESHDS_Document.cxx,
-         DriverDAT/DriverDAT_R_SMESHDS_Document.h,
-         DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx,
-         DriverDAT/DriverDAT_R_SMESHDS_Mesh.h,
-         DriverDAT/DriverDAT_W_SMDS_Mesh.cxx,
-         DriverDAT/DriverDAT_W_SMDS_Mesh.h,
-         DriverDAT/DriverDAT_W_SMESHDS_Document.cxx,
-         DriverDAT/DriverDAT_W_SMESHDS_Document.h,
-         DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx,
-         DriverDAT/DriverDAT_W_SMESHDS_Mesh.h, DriverDAT/Makefile.in,
-         DriverMED/DriverMED_R_SMDS_Mesh.cxx,
-         DriverMED/DriverMED_R_SMESHDS_Document.cxx,
-         DriverMED/DriverMED_R_SMESHDS_Mesh.cxx,
-         DriverMED/DriverMED_W_SMDS_Mesh.cxx,
-         DriverMED/DriverMED_W_SMESHDS_Document.cxx,
-         DriverMED/DriverMED_W_SMESHDS_Mesh.cxx, DriverMED/Makefile.in,
-         MEFISTO2/Makefile.in, MEFISTO2/Rn.h, MEFISTO2/aptrte.cxx,
-         MEFISTO2/aptrte.h: yfr : Merge with v1.2
-
-2003-07-10 08:12  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/SMESHGUI/SMESHGUI_icons.po: Initial revision
-
-2003-07-10 08:09  tag V1_2
-
-2003-07-10 08:09  Yves Fricaud <yves.fricaud@opencascade.com>
-
-       * src/: DriverMED/DriverMED_R_SMESHDS_Document.h,
-         DriverMED/DriverMED_W_SMESHDS_Document.h,
-         SMESHGUI/SMESHGUI_msg_en.po: sources v1.2
-
-2003-06-29 13:17  Paul Rascle <paul.rascle@edf.fr>
-
-       * src/SMESH_SWIG/: Makefile.in, SMESH_shared_modules.py: PR: needed
-         by merge C. CAREMOLI branch CCAR_br1
-
-2003-06-12 10:37  Paul Rascle <paul.rascle@edf.fr>
-
-       * Makefile.in: PR: avoids unnecessary compilation after
-         regeneration of SALOMEconfig.h, with gcc3.2
-
-2003-06-12 10:34  Paul Rascle <paul.rascle@edf.fr>
-
-       * src/SMESH_SWIG/SMESH_fixation.py: PR: bug on subshapes not sorted
-
-2003-05-28 16:42  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * adm_local/unix/make_commence.in: NRI : Add path fro GEOM and MED
-         idls.
-
-2003-05-28 16:26  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * idl/Makefile.in, adm_local/unix/make_commence.in,
-         adm_local/unix/make_omniorb.in, build_configure,
-         configure.in.base: NRI : Update IDL Dependencies.
-
-2003-05-28 07:20  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * bin/VERSION, Makefile.in: NRI : Add MODULE version info.
-
-2003-05-28 07:16  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * configure.in.base, adm_local/unix/config_files/check_Med.m4: NRI
-         : Add Check of MED.
-
-2003-05-26 14:21  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * adm_local/unix/config_files/check_Geom.m4, configure.in.base: NRI
-         : Add GEOM check local.
-
-2003-05-26 14:00  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * build_configure: NRI : updated aclocal.
-
-2003-05-23 11:40  tag Start-v1_1a
-
-2003-05-23 11:40  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/: SMESHGUI_AddAlgorithmDlg.cxx,
-         SMESHGUI_AddEdgeDlg.cxx, SMESHGUI_AddFaceDlg.cxx,
-         SMESHGUI_AddHypothesisDlg.cxx, SMESHGUI_AddSubMeshDlg.cxx,
-         SMESHGUI_AddVolumeDlg.cxx, SMESHGUI_DiagonalInversionDlg.cxx,
-         SMESHGUI_EdgesConnectivityDlg.cxx,
-         SMESHGUI_EditHypothesesDlg.cxx, SMESHGUI_InitMeshDlg.cxx,
-         SMESHGUI_LocalLengthDlg.cxx, SMESHGUI_MaxElementAreaDlg.cxx,
-         SMESHGUI_MaxElementVolumeDlg.cxx, SMESHGUI_MoveNodesDlg.cxx,
-         SMESHGUI_NbSegmentsDlg.cxx, SMESHGUI_NodesDlg.cxx,
-         SMESHGUI_OrientationElementsDlg.cxx,
-         SMESHGUI_RemoveElementsDlg.cxx, SMESHGUI_RemoveNodesDlg.cxx: NRI
-         : loadPixmap( "SMESH", ...) instead of "SMESHGUI".
-
-2003-05-22 09:52  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * doc/: Makefile.in, html/Makefile.in, html/INPUT/doxyfile,
-         html/INPUT/sources/Application-About.png,
-         html/INPUT/sources/Application-About1.jpg,
-         html/INPUT/sources/application.gif,
-         html/INPUT/sources/application.jpg,
-         html/INPUT/sources/bg_salomepro.gif,
-         html/INPUT/sources/doxygen.css, html/INPUT/sources/logocorp.gif,
-         html/INPUT/sources/myheader.html, html/INPUT/sources/occ.gif,
-         html/INPUT/HTML/SMESH_BasicHypothesis.html,
-         html/INPUT/HTML/SMESH_Gen.html,
-         html/INPUT/HTML/SMESH_Hypothesis.html,
-         html/INPUT/HTML/SMESH_Mesh.html: NRI : Add documentation.
-
-2003-05-22 09:51  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * configure.in.base: NRI : Add check HTML generators.
-
-2003-05-20 07:17  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/: SMESH_I/SMESH_Gen_i.cxx, SMESH_I/SMESH_test.py,
-         SMESH_I/smeshpy.py, SMESH_SWIG/SMESH_fixation.py,
-         SMESH_SWIG/SMESH_mechanic.py, SMESH_SWIG/SMESH_test0.py,
-         SMESH_SWIG/SMESH_test1.py, SMESH_SWIG/SMESH_test3.py,
-         SMESHGUI/SMESHGUI.cxx: NRI : Use GEOM instead of Geometry.
-
-2003-05-20 07:16  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * resources/SMESHCatalog.xml: NRI : Add component-username tag.
-
-2003-05-20 07:15  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * Makefile.in: NRI : Add SMESHCatalog.xml
-
-2003-05-19 14:50  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/SMESHGUI_StudyAPI.cxx: NRI : Add QAD_Desktop.h.
-
-2003-05-19 14:49  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHGUI/Makefile.in: NRI : Add GEOM includes and libs.
-
-2003-05-19 14:38  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESHFiltersSelection/Makefile.in: NRI : Add KERNEL includes.
-
-2003-05-19 14:34  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESH_I/Makefile.in: NRI : Change lGeometryClient by
-         lGEOMClient.
-
-2003-05-19 14:32  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/SMESH_I/Makefile.in: NRI : Add GEOM includes and libs.
-
-2003-05-19 14:11  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/: SMESH/Makefile.in, SMESHDS/Makefile.in: NRI : Add KERNEL
-         includes and libs.
-
-2003-05-19 14:09  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/: DriverDAT/Makefile.in, DriverMED/Makefile.in,
-         DriverUNV/Makefile.in: NRI : Add KERNEL includes.
-
-2003-05-19 14:08  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * idl/Makefile.in: NRI : Add MED.idl
-
-2003-05-19 14:01  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/: SMESH_SWIG/Makefile.in, SMESH_SWIG/SMESH_fixation.py,
-         SMESH_SWIG/SMESH_mechanic.py, SMESH_SWIG/SMESH_test0.py,
-         SMESH_SWIG/SMESH_test1.py, SMESH_SWIG/SMESH_test2.py,
-         SMESH_SWIG/SMESH_test3.py, SMESH_SWIG/batchmode_smesh.py,
-         SMESH_SWIG/libSMESH_Swig.i, Makefile.in,
-         SMESHFiltersSelection/Handle_SMESH_TypeFilter.hxx,
-         SMESHFiltersSelection/Makefile.in,
-         SMESHFiltersSelection/SMESH_Type.h,
-         SMESHFiltersSelection/SMESH_TypeFilter.cxx,
-         SMESHFiltersSelection/SMESH_TypeFilter.hxx,
-         SMESHFiltersSelection/SMESH_TypeFilter.ixx,
-         SMESHFiltersSelection/SMESH_TypeFilter.jxx, MEFISTO2/Makefile.in,
-         MEFISTO2/Rn.h, MEFISTO2/aptrte.cxx, MEFISTO2/aptrte.h,
-         MEFISTO2/areteideale.f, MEFISTO2/trte.f, OBJECT/Makefile.in,
-         OBJECT/SMESH_Actor.cxx, OBJECT/SMESH_Actor.h,
-         OBJECT/SMESH_Grid.cxx, OBJECT/SMESH_Grid.h,
-         Driver/Document_Reader.cxx, Driver/Document_Reader.h,
-         Driver/Document_Writer.cxx, Driver/Document_Writer.h,
-         Driver/Driver_dl.cxx, Driver/Makefile.in, Driver/Mesh_Reader.cxx,
-         Driver/Mesh_Reader.h, Driver/Mesh_Writer.cxx,
-         Driver/Mesh_Writer.h, Driver/SMESHDriver.cxx,
-         Driver/SMESHDriver.h: NRI : First integration.
-
-2003-05-19 13:48  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/: SMDS/Handle_SMDSControl_BoundaryEdges.hxx,
-         SMDS/Handle_SMDSControl_BoundaryFaces.hxx,
-         SMDS/Handle_SMDSControl_MeshBoundary.hxx,
-         SMDS/Handle_SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx,
-         SMDS/Handle_SMDS_DataMapNodeOfDataMapOfPntInteger.hxx,
-         SMDS/Handle_SMDS_EdgePosition.hxx,
-         SMDS/Handle_SMDS_FacePosition.hxx,
-         SMDS/Handle_SMDS_HSequenceOfMesh.hxx,
-         SMDS/Handle_SMDS_ListNodeOfListOfMesh.hxx,
-         SMDS/Handle_SMDS_ListNodeOfListOfMeshElement.hxx,
-         SMDS/Handle_SMDS_ListNodeOfListOfMeshGroup.hxx,
-         SMDS/Handle_SMDS_Mesh.hxx, SMDS/Handle_SMDS_MeshEdge.hxx,
-         SMDS/Handle_SMDS_MeshElement.hxx,
-         SMDS/Handle_SMDS_MeshElementIDFactory.hxx,
-         SMDS/Handle_SMDS_MeshFace.hxx, SMDS/Handle_SMDS_MeshGroup.hxx,
-         SMDS/Handle_SMDS_MeshHexahedron.hxx,
-         SMDS/Handle_SMDS_MeshIDFactory.hxx,
-         SMDS/Handle_SMDS_MeshNode.hxx,
-         SMDS/Handle_SMDS_MeshNodeIDFactory.hxx,
-         SMDS/Handle_SMDS_MeshObject.hxx, SMDS/Handle_SMDS_MeshPrism.hxx,
-         SMDS/Handle_SMDS_MeshPyramid.hxx,
-         SMDS/Handle_SMDS_MeshQuadrangle.hxx,
-         SMDS/Handle_SMDS_MeshTetrahedron.hxx,
-         SMDS/Handle_SMDS_MeshTriangle.hxx,
-         SMDS/Handle_SMDS_MeshVolume.hxx, SMDS/Handle_SMDS_Position.hxx,
-         SMDS/Handle_SMDS_SequenceNodeOfSequenceOfMesh.hxx,
-         SMDS/Handle_SMDS_SpacePosition.hxx,
-         SMDS/Handle_SMDS_StdMapNodeOfExtendedMap.hxx,
-         SMDS/Handle_SMDS_StdMapNodeOfExtendedOrientedMap.hxx,
-         SMDS/Handle_SMDS_VertexPosition.hxx, SMDS/Makefile.in,
-         SMDS/SMDS.cdl, SMDS/SMDSAbs.cdl, SMDS/SMDSAbs_ElementType.hxx,
-         SMDS/SMDSControl.cdl, SMDS/SMDSControl.cxx, SMDS/SMDSControl.hxx,
-         SMDS/SMDSControl.ixx, SMDS/SMDSControl.jxx,
-         SMDS/SMDSControl_BoundaryEdges.cdl,
-         SMDS/SMDSControl_BoundaryEdges.cxx,
-         SMDS/SMDSControl_BoundaryEdges.hxx,
-         SMDS/SMDSControl_BoundaryEdges.ixx,
-         SMDS/SMDSControl_BoundaryEdges.jxx,
-         SMDS/SMDSControl_BoundaryFaces.cdl,
-         SMDS/SMDSControl_BoundaryFaces.cxx,
-         SMDS/SMDSControl_BoundaryFaces.hxx,
-         SMDS/SMDSControl_BoundaryFaces.ixx,
-         SMDS/SMDSControl_BoundaryFaces.jxx,
-         SMDS/SMDSControl_MeshBoundary.cdl,
-         SMDS/SMDSControl_MeshBoundary.cxx,
-         SMDS/SMDSControl_MeshBoundary.hxx,
-         SMDS/SMDSControl_MeshBoundary.ixx,
-         SMDS/SMDSControl_MeshBoundary.jxx, SMDS/SMDSEdit.cdl,
-         SMDS/SMDSEdit_Transform.cdl, SMDS/SMDSEdit_Transform.cxx,
-         SMDS/SMDSEdit_Transform.hxx, SMDS/SMDSEdit_Transform.ixx,
-         SMDS/SMDSEdit_Transform.jxx, SMDS/SMDS_BasicMap.lxx,
-         SMDS/SMDS_BasicMapIterator.lxx,
-         SMDS/SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement.hxx,
-         SMDS/SMDS_DataMapIteratorOfDataMapOfIntegerMeshElement_0.cxx,
-         SMDS/SMDS_DataMapIteratorOfDataMapOfPntInteger.hxx,
-         SMDS/SMDS_DataMapIteratorOfDataMapOfPntInteger_0.cxx,
-         SMDS/SMDS_DataMapNodeOfDataMapOfIntegerMeshElement.hxx,
-         SMDS/SMDS_DataMapNodeOfDataMapOfIntegerMeshElement_0.cxx,
-         SMDS/SMDS_DataMapNodeOfDataMapOfPntInteger.hxx,
-         SMDS/SMDS_DataMapNodeOfDataMapOfPntInteger_0.cxx,
-         SMDS/SMDS_DataMapOfIntegerMeshElement.hxx,
-         SMDS/SMDS_DataMapOfIntegerMeshElement_0.cxx,
-         SMDS/SMDS_DataMapOfPntInteger.hxx,
-         SMDS/SMDS_DataMapOfPntInteger_0.cxx, SMDS/SMDS_EdgePosition.cdl,
-         SMDS/SMDS_EdgePosition.cxx, SMDS/SMDS_EdgePosition.hxx,
-         SMDS/SMDS_EdgePosition.ixx, SMDS/SMDS_EdgePosition.jxx,
-         SMDS/SMDS_EdgePosition.lxx, SMDS/SMDS_ExtendedMap.hxx,
-         SMDS/SMDS_ExtendedMap_0.cxx, SMDS/SMDS_ExtendedOrientedMap.hxx,
-         SMDS/SMDS_ExtendedOrientedMap_0.cxx, SMDS/SMDS_FacePosition.cdl,
-         SMDS/SMDS_FacePosition.cxx, SMDS/SMDS_FacePosition.hxx,
-         SMDS/SMDS_FacePosition.ixx, SMDS/SMDS_FacePosition.jxx,
-         SMDS/SMDS_FacePosition.lxx, SMDS/SMDS_HSequenceOfMesh.hxx,
-         SMDS/SMDS_HSequenceOfMesh_0.cxx,
-         SMDS/SMDS_ListIteratorOfListOfMesh.hxx,
-         SMDS/SMDS_ListIteratorOfListOfMeshElement.hxx,
-         SMDS/SMDS_ListIteratorOfListOfMeshElement_0.cxx,
-         SMDS/SMDS_ListIteratorOfListOfMeshGroup.hxx,
-         SMDS/SMDS_ListIteratorOfListOfMeshGroup_0.cxx,
-         SMDS/SMDS_ListIteratorOfListOfMesh_0.cxx,
-         SMDS/SMDS_ListNodeOfListOfMesh.hxx,
-         SMDS/SMDS_ListNodeOfListOfMeshElement.hxx,
-         SMDS/SMDS_ListNodeOfListOfMeshElement_0.cxx,
-         SMDS/SMDS_ListNodeOfListOfMeshGroup.hxx,
-         SMDS/SMDS_ListNodeOfListOfMeshGroup_0.cxx,
-         SMDS/SMDS_ListNodeOfListOfMesh_0.cxx, SMDS/SMDS_ListOfMesh.hxx,
-         SMDS/SMDS_ListOfMeshElement.hxx,
-         SMDS/SMDS_ListOfMeshElement_0.cxx, SMDS/SMDS_ListOfMeshGroup.hxx,
-         SMDS/SMDS_ListOfMeshGroup_0.cxx, SMDS/SMDS_ListOfMesh_0.cxx,
-         SMDS/SMDS_Map.gxx, SMDS/SMDS_MapHasher.gxx,
-         SMDS/SMDS_MapIterator.gxx,
-         SMDS/SMDS_MapIteratorOfExtendedMap.hxx,
-         SMDS/SMDS_MapIteratorOfExtendedMap_0.cxx,
-         SMDS/SMDS_MapIteratorOfExtendedOrientedMap.hxx,
-         SMDS/SMDS_MapIteratorOfExtendedOrientedMap_0.cxx,
-         SMDS/SMDS_MapNode.lxx, SMDS/SMDS_MapOfMeshElement.cdl,
-         SMDS/SMDS_MapOfMeshElement.cxx, SMDS/SMDS_MapOfMeshElement.hxx,
-         SMDS/SMDS_MapOfMeshElement.ixx, SMDS/SMDS_MapOfMeshElement.jxx,
-         SMDS/SMDS_MapOfMeshElement.lxx,
-         SMDS/SMDS_MapOfMeshOrientedElement.cdl,
-         SMDS/SMDS_MapOfMeshOrientedElement.cxx,
-         SMDS/SMDS_MapOfMeshOrientedElement.hxx,
-         SMDS/SMDS_MapOfMeshOrientedElement.ixx,
-         SMDS/SMDS_MapOfMeshOrientedElement.jxx,
-         SMDS/SMDS_MapOfMeshOrientedElement.lxx, SMDS/SMDS_Mesh.cdl,
-         SMDS/SMDS_Mesh.cxx, SMDS/SMDS_Mesh.hxx, SMDS/SMDS_Mesh.ixx,
-         SMDS/SMDS_Mesh.jxx, SMDS/SMDS_Mesh.lxx, SMDS/SMDS_MeshEdge.cdl,
-         SMDS/SMDS_MeshEdge.cxx, SMDS/SMDS_MeshEdge.hxx,
-         SMDS/SMDS_MeshEdge.ixx, SMDS/SMDS_MeshEdge.jxx,
-         SMDS/SMDS_MeshEdge.lxx, SMDS/SMDS_MeshEdgesIterator.cdl,
-         SMDS/SMDS_MeshEdgesIterator.cxx, SMDS/SMDS_MeshEdgesIterator.hxx,
-         SMDS/SMDS_MeshEdgesIterator.ixx, SMDS/SMDS_MeshEdgesIterator.jxx,
-         SMDS/SMDS_MeshElement.cdl, SMDS/SMDS_MeshElement.cxx,
-         SMDS/SMDS_MeshElement.hxx, SMDS/SMDS_MeshElement.ixx,
-         SMDS/SMDS_MeshElement.jxx, SMDS/SMDS_MeshElement.lxx,
-         SMDS/SMDS_MeshElementIDFactory.cdl,
-         SMDS/SMDS_MeshElementIDFactory.cxx,
-         SMDS/SMDS_MeshElementIDFactory.hxx,
-         SMDS/SMDS_MeshElementIDFactory.ixx,
-         SMDS/SMDS_MeshElementIDFactory.jxx,
-         SMDS/SMDS_MeshElementIDFactory.lxx,
-         SMDS/SMDS_MeshElementMapHasher.cdl,
-         SMDS/SMDS_MeshElementMapHasher.cxx,
-         SMDS/SMDS_MeshElementMapHasher.hxx,
-         SMDS/SMDS_MeshElementMapHasher.ixx,
-         SMDS/SMDS_MeshElementMapHasher.jxx,
-         SMDS/SMDS_MeshElementMapHasher.lxx,
-         SMDS/SMDS_MeshElementsIterator.cdl,
-         SMDS/SMDS_MeshElementsIterator.cxx,
-         SMDS/SMDS_MeshElementsIterator.hxx,
-         SMDS/SMDS_MeshElementsIterator.ixx,
-         SMDS/SMDS_MeshElementsIterator.jxx,
-         SMDS/SMDS_MeshElementsIterator.lxx, SMDS/SMDS_MeshFace.cdl,
-         SMDS/SMDS_MeshFace.cxx, SMDS/SMDS_MeshFace.hxx,
-         SMDS/SMDS_MeshFace.ixx, SMDS/SMDS_MeshFace.jxx,
-         SMDS/SMDS_MeshFace.lxx, SMDS/SMDS_MeshFacesIterator.cdl,
-         SMDS/SMDS_MeshFacesIterator.cxx, SMDS/SMDS_MeshFacesIterator.hxx,
-         SMDS/SMDS_MeshFacesIterator.ixx, SMDS/SMDS_MeshFacesIterator.jxx,
-         SMDS/SMDS_MeshGroup.cdl, SMDS/SMDS_MeshGroup.cxx,
-         SMDS/SMDS_MeshGroup.hxx, SMDS/SMDS_MeshGroup.ixx,
-         SMDS/SMDS_MeshGroup.jxx, SMDS/SMDS_MeshGroup.lxx,
-         SMDS/SMDS_MeshHexahedron.cdl, SMDS/SMDS_MeshHexahedron.cxx,
-         SMDS/SMDS_MeshHexahedron.hxx, SMDS/SMDS_MeshHexahedron.ixx,
-         SMDS/SMDS_MeshHexahedron.jxx, SMDS/SMDS_MeshHexahedron.lxx,
-         SMDS/SMDS_MeshIDFactory.cdl, SMDS/SMDS_MeshIDFactory.cxx,
-         SMDS/SMDS_MeshIDFactory.ixx, SMDS/SMDS_MeshIDFactory.jxx,
-         SMDS/SMDS_MeshIDFactory.lxx, SMDS/SMDS_MeshNode.cdl,
-         SMDS/SMDS_MeshNode.cxx, SMDS/SMDS_MeshNode.hxx,
-         SMDS/SMDS_MeshNode.ixx, SMDS/SMDS_MeshNode.jxx,
-         SMDS/SMDS_MeshNode.lxx, SMDS/SMDS_MeshNodeIDFactory.cdl,
-         SMDS/SMDS_MeshNodeIDFactory.cxx, SMDS/SMDS_MeshNodeIDFactory.hxx,
-         SMDS/SMDS_MeshNodeIDFactory.ixx, SMDS/SMDS_MeshNodeIDFactory.jxx,
-         SMDS/SMDS_MeshNodeIDFactory.lxx, SMDS/SMDS_MeshNodesIterator.cdl,
-         SMDS/SMDS_MeshNodesIterator.cxx, SMDS/SMDS_MeshNodesIterator.hxx,
-         SMDS/SMDS_MeshNodesIterator.ixx, SMDS/SMDS_MeshNodesIterator.jxx,
-         SMDS/SMDS_MeshObject.cdl, SMDS/SMDS_MeshObject.cxx,
-         SMDS/SMDS_MeshObject.hxx, SMDS/SMDS_MeshObject.ixx,
-         SMDS/SMDS_MeshObject.jxx,
-         SMDS/SMDS_MeshOrientedElementMapHasher.cdl,
-         SMDS/SMDS_MeshOrientedElementMapHasher.cxx,
-         SMDS/SMDS_MeshOrientedElementMapHasher.hxx,
-         SMDS/SMDS_MeshOrientedElementMapHasher.ixx,
-         SMDS/SMDS_MeshOrientedElementMapHasher.jxx,
-         SMDS/SMDS_MeshOrientedElementMapHasher.lxx,
-         SMDS/SMDS_MeshPrism.cdl, SMDS/SMDS_MeshPrism.cxx,
-         SMDS/SMDS_MeshPrism.hxx, SMDS/SMDS_MeshPrism.ixx,
-         SMDS/SMDS_MeshPrism.jxx, SMDS/SMDS_MeshPrism.lxx,
-         SMDS/SMDS_MeshPyramid.cdl, SMDS/SMDS_MeshPyramid.cxx,
-         SMDS/SMDS_MeshPyramid.hxx, SMDS/SMDS_MeshPyramid.ixx,
-         SMDS/SMDS_MeshPyramid.jxx, SMDS/SMDS_MeshPyramid.lxx,
-         SMDS/SMDS_MeshQuadrangle.cdl, SMDS/SMDS_MeshQuadrangle.cxx,
-         SMDS/SMDS_MeshQuadrangle.hxx, SMDS/SMDS_MeshQuadrangle.ixx,
-         SMDS/SMDS_MeshQuadrangle.jxx, SMDS/SMDS_MeshQuadrangle.lxx,
-         SMDS/SMDS_MeshTetrahedron.cdl, SMDS/SMDS_MeshTetrahedron.cxx,
-         SMDS/SMDS_MeshTetrahedron.hxx, SMDS/SMDS_MeshTetrahedron.ixx,
-         SMDS/SMDS_MeshTetrahedron.jxx, SMDS/SMDS_MeshTetrahedron.lxx,
-         SMDS/SMDS_MeshTriangle.cdl, SMDS/SMDS_MeshTriangle.cxx,
-         SMDS/SMDS_MeshTriangle.hxx, SMDS/SMDS_MeshTriangle.ixx,
-         SMDS/SMDS_MeshTriangle.jxx, SMDS/SMDS_MeshTriangle.lxx,
-         SMDS/SMDS_MeshVolume.cdl, SMDS/SMDS_MeshVolume.cxx,
-         SMDS/SMDS_MeshVolume.hxx, SMDS/SMDS_MeshVolume.ixx,
-         SMDS/SMDS_MeshVolume.jxx, SMDS/SMDS_MeshVolume.lxx,
-         SMDS/SMDS_MeshVolumesIterator.cdl,
-         SMDS/SMDS_MeshVolumesIterator.cxx,
-         SMDS/SMDS_MeshVolumesIterator.hxx,
-         SMDS/SMDS_MeshVolumesIterator.ixx,
-         SMDS/SMDS_MeshVolumesIterator.jxx, SMDS/SMDS_PntHasher.cdl,
-         SMDS/SMDS_PntHasher.cxx, SMDS/SMDS_PntHasher.hxx,
-         SMDS/SMDS_PntHasher.ixx, SMDS/SMDS_PntHasher.jxx,
-         SMDS/SMDS_PntHasher.lxx, SMDS/SMDS_Position.cdl,
-         SMDS/SMDS_Position.cxx, SMDS/SMDS_Position.hxx,
-         SMDS/SMDS_Position.ixx, SMDS/SMDS_Position.jxx,
-         SMDS/SMDS_Position.lxx,
-         SMDS/SMDS_SequenceNodeOfSequenceOfMesh.hxx,
-         SMDS/SMDS_SequenceNodeOfSequenceOfMesh_0.cxx,
-         SMDS/SMDS_SequenceOfMesh.hxx, SMDS/SMDS_SequenceOfMesh_0.cxx,
-         SMDS/SMDS_SpacePosition.cdl, SMDS/SMDS_SpacePosition.cxx,
-         SMDS/SMDS_SpacePosition.hxx, SMDS/SMDS_SpacePosition.ixx,
-         SMDS/SMDS_SpacePosition.jxx, SMDS/SMDS_SpacePosition.lxx,
-         SMDS/SMDS_StdMapNode.gxx, SMDS/SMDS_StdMapNode.lxx,
-         SMDS/SMDS_StdMapNodeOfExtendedMap.hxx,
-         SMDS/SMDS_StdMapNodeOfExtendedMap_0.cxx,
-         SMDS/SMDS_StdMapNodeOfExtendedOrientedMap.hxx,
-         SMDS/SMDS_StdMapNodeOfExtendedOrientedMap_0.cxx,
-         SMDS/SMDS_TypeOfPosition.hxx, SMDS/SMDS_VertexPosition.cdl,
-         SMDS/SMDS_VertexPosition.cxx, SMDS/SMDS_VertexPosition.hxx,
-         SMDS/SMDS_VertexPosition.ixx, SMDS/SMDS_VertexPosition.jxx,
-         SMDS/SMDS_MeshIDFactory.hxx, SMESH_I/Makefile.in,
-         SMESH_I/SMESH_1D_Algo_i.cxx, SMESH_I/SMESH_1D_Algo_i.hxx,
-         SMESH_I/SMESH_2D_Algo_i.cxx, SMESH_I/SMESH_2D_Algo_i.hxx,
-         SMESH_I/SMESH_3D_Algo_i.cxx, SMESH_I/SMESH_3D_Algo_i.hxx,
-         SMESH_I/SMESH_Algo_i.cxx, SMESH_I/SMESH_Algo_i.hxx,
-         SMESH_I/SMESH_Gen_i.cxx, SMESH_I/SMESH_Gen_i.hxx,
-         SMESH_I/SMESH_Hexa_3D_i.cxx, SMESH_I/SMESH_Hexa_3D_i.hxx,
-         SMESH_I/SMESH_HypothesisFactory_i.cxx,
-         SMESH_I/SMESH_HypothesisFactory_i.hxx,
-         SMESH_I/SMESH_Hypothesis_i.cxx, SMESH_I/SMESH_Hypothesis_i.hxx,
-         SMESH_I/SMESH_LocalLength_i.cxx, SMESH_I/SMESH_LocalLength_i.hxx,
-         SMESH_I/SMESH_MEDFamily_i.cxx, SMESH_I/SMESH_MEDFamily_i.hxx,
-         SMESH_I/SMESH_MEDMesh_i.cxx, SMESH_I/SMESH_MEDMesh_i.hxx,
-         SMESH_I/SMESH_MEDSupport_i.cxx, SMESH_I/SMESH_MEDSupport_i.hxx,
-         SMESH_I/SMESH_MEFISTO_2D_i.cxx, SMESH_I/SMESH_MEFISTO_2D_i.hxx,
-         SMESH_I/SMESH_MaxElementArea_i.cxx,
-         SMESH_I/SMESH_MaxElementArea_i.hxx,
-         SMESH_I/SMESH_MaxElementVolume_i.cxx,
-         SMESH_I/SMESH_MaxElementVolume_i.hxx,
-         SMESH_I/SMESH_MeshEditor_i.cxx, SMESH_I/SMESH_MeshEditor_i.hxx,
-         SMESH_I/SMESH_Mesh_i.cxx, SMESH_I/SMESH_Mesh_i.hxx,
-         SMESH_I/SMESH_NumberOfSegments_i.cxx,
-         SMESH_I/SMESH_NumberOfSegments_i.hxx,
-         SMESH_I/SMESH_Quadrangle_2D_i.cxx,
-         SMESH_I/SMESH_Quadrangle_2D_i.hxx,
-         SMESH_I/SMESH_Regular_1D_i.cxx, SMESH_I/SMESH_Regular_1D_i.hxx,
-         SMESH_I/SMESH_subMesh_i.cxx, SMESH_I/SMESH_subMesh_i.hxx,
-         SMESH_I/SMESH_test.py, SMESH_I/SMESH_topo.cxx,
-         SMESH_I/SMESH_topo.hxx, SMESH_I/smeshpy.py, SMESH_I/sstream,
-         SMESHGUI/Makefile.in, SMESHGUI/SMESHGUI.cxx, SMESHGUI/SMESHGUI.h,
-         SMESHGUI/SMESHGUI_AddAlgorithmDlg.cxx,
-         SMESHGUI/SMESHGUI_AddAlgorithmDlg.h,
-         SMESHGUI/SMESHGUI_AddEdgeDlg.cxx, SMESHGUI/SMESHGUI_AddEdgeDlg.h,
-         SMESHGUI/SMESHGUI_AddFaceDlg.cxx, SMESHGUI/SMESHGUI_AddFaceDlg.h,
-         SMESHGUI/SMESHGUI_AddHypothesisDlg.cxx,
-         SMESHGUI/SMESHGUI_AddHypothesisDlg.h,
-         SMESHGUI/SMESHGUI_AddSubMeshDlg.cxx,
-         SMESHGUI/SMESHGUI_AddSubMeshDlg.h,
-         SMESHGUI/SMESHGUI_AddVolumeDlg.cxx,
-         SMESHGUI/SMESHGUI_AddVolumeDlg.h,
-         SMESHGUI/SMESHGUI_ComputeScalarValue.cxx,
-         SMESHGUI/SMESHGUI_ComputeScalarValue.h,
-         SMESHGUI/SMESHGUI_DiagonalInversionDlg.cxx,
-         SMESHGUI/SMESHGUI_DiagonalInversionDlg.h,
-         SMESHGUI/SMESHGUI_EdgesConnectivityDlg.cxx,
-         SMESHGUI/SMESHGUI_EdgesConnectivityDlg.h,
-         SMESHGUI/SMESHGUI_EditHypothesesDlg.cxx,
-         SMESHGUI/SMESHGUI_EditHypothesesDlg.h,
-         SMESHGUI/SMESHGUI_EditScalarBarDlg.cxx,
-         SMESHGUI/SMESHGUI_EditScalarBarDlg.h,
-         SMESHGUI/SMESHGUI_InitMeshDlg.cxx,
-         SMESHGUI/SMESHGUI_InitMeshDlg.h,
-         SMESHGUI/SMESHGUI_LocalLengthDlg.cxx,
-         SMESHGUI/SMESHGUI_LocalLengthDlg.h,
-         SMESHGUI/SMESHGUI_MaxElementAreaDlg.cxx,
-         SMESHGUI/SMESHGUI_MaxElementAreaDlg.h,
-         SMESHGUI/SMESHGUI_MaxElementVolumeDlg.cxx,
-         SMESHGUI/SMESHGUI_MaxElementVolumeDlg.h,
-         SMESHGUI/SMESHGUI_MeshInfosDlg.cxx,
-         SMESHGUI/SMESHGUI_MeshInfosDlg.h,
-         SMESHGUI/SMESHGUI_MoveNodesDlg.cxx,
-         SMESHGUI/SMESHGUI_MoveNodesDlg.h,
-         SMESHGUI/SMESHGUI_NbSegmentsDlg.cxx,
-         SMESHGUI/SMESHGUI_NbSegmentsDlg.h,
-         SMESHGUI/SMESHGUI_NodesDlg.cxx, SMESHGUI/SMESHGUI_NodesDlg.h,
-         SMESHGUI/SMESHGUI_OrientationElementsDlg.cxx,
-         SMESHGUI/SMESHGUI_OrientationElementsDlg.h,
-         SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx,
-         SMESHGUI/SMESHGUI_Preferences_ColorDlg.h,
-         SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx,
-         SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h,
-         SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx,
-         SMESHGUI/SMESHGUI_RemoveElementsDlg.h,
-         SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx,
-         SMESHGUI/SMESHGUI_RemoveNodesDlg.h,
-         SMESHGUI/SMESHGUI_SpinBox.cxx, SMESHGUI/SMESHGUI_SpinBox.h,
-         SMESHGUI/SMESHGUI_StudyAPI.cxx, SMESHGUI/SMESHGUI_StudyAPI.h,
-         SMESHGUI/SMESHGUI_Swig.cxx, SMESHGUI/SMESHGUI_Swig.hxx,
-         SMESHGUI/SMESHGUI_Swig.i, SMESHGUI/SMESHGUI_TransparencyDlg.cxx,
-         SMESHGUI/SMESHGUI_TransparencyDlg.h,
-         SMESHGUI/SMESHGUI_aParameterDlg.cxx,
-         SMESHGUI/SMESHGUI_aParameterDlg.h, SMESHGUI/SMESH_icons.po,
-         SMESHGUI/SMESH_msg_en.po: NRI : First integration.
-
-2003-05-19 13:18  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * src/: SMESH/Makefile.in, SMESH/SMESH_1D_Algo.cxx,
-         SMESH/SMESH_1D_Algo.hxx, SMESH/SMESH_2D_Algo.cxx,
-         SMESH/SMESH_2D_Algo.hxx, SMESH/SMESH_3D_Algo.cxx,
-         SMESH/SMESH_3D_Algo.hxx, SMESH/SMESH_Algo.cxx,
-         SMESH/SMESH_Algo.hxx, SMESH/SMESH_Gen.cxx, SMESH/SMESH_Gen.hxx,
-         SMESH/SMESH_Hexa_3D.cxx, SMESH/SMESH_Hexa_3D.hxx,
-         SMESH/SMESH_Hypothesis.cxx, SMESH/SMESH_Hypothesis.hxx,
-         SMESH/SMESH_HypothesisCreator.hxx,
-         SMESH/SMESH_HypothesisFactory.cxx,
-         SMESH/SMESH_HypothesisFactory.hxx,
-         SMESH/SMESH_LengthFromEdges.cxx, SMESH/SMESH_LengthFromEdges.hxx,
-         SMESH/SMESH_LocalLength.cxx, SMESH/SMESH_LocalLength.hxx,
-         SMESH/SMESH_MEFISTO_2D.cxx, SMESH/SMESH_MEFISTO_2D.hxx,
-         SMESH/SMESH_MaxElementArea.cxx, SMESH/SMESH_MaxElementArea.hxx,
-         SMESH/SMESH_MaxElementVolume.cxx,
-         SMESH/SMESH_MaxElementVolume.hxx, SMESH/SMESH_Mesh.cxx,
-         SMESH/SMESH_Mesh.hxx, SMESH/SMESH_NumberOfSegments.cxx,
-         SMESH/SMESH_NumberOfSegments.hxx, SMESH/SMESH_Quadrangle_2D.cxx,
-         SMESH/SMESH_Quadrangle_2D.hxx, SMESH/SMESH_Regular_1D.cxx,
-         SMESH/SMESH_Regular_1D.hxx, SMESH/SMESH_subMesh.cxx,
-         SMESH/SMESH_subMesh.hxx, SMESHDS/Handle_SMESHDS_Command.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS/Handle_SMESHDS_ListNodeOfListOfCommand.hxx,
-         SMESHDS/Handle_SMESHDS_Mesh.hxx,
-         SMESHDS/Handle_SMESHDS_Script.hxx, SMESHDS/Makefile.in,
-         SMESHDS/SMESHDS_Command.cdl, SMESHDS/SMESHDS_Command.cxx,
-         SMESHDS/SMESHDS_Command.ixx, SMESHDS/SMESHDS_Command.jxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerMesh.hxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapOfIntegerSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapOfShapeSubMesh.hxx,
-         SMESHDS/SMESHDS_DataMapOfShapeSubMesh_0.cxx,
-         SMESHDS/SMESHDS_Document.cdl, SMESHDS/SMESHDS_Document.hxx,
-         SMESHDS/SMESHDS_Document.ixx, SMESHDS/SMESHDS_Hypothesis.hxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString_0.cxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfCommand.hxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfCommand_0.cxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfAsciiString.hxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfAsciiString_0.cxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfCommand.hxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfCommand_0.cxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_ListOfCommand.hxx,
-         SMESHDS/SMESHDS_ListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_ListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_Mesh.cdl, SMESHDS/SMESHDS_Mesh.hxx,
-         SMESHDS/SMESHDS_Script.cdl, SMESHDS/SMESHDS_Script.cxx,
-         SMESHDS/SMESHDS_Script.hxx, SMESHDS/SMESHDS_Script.ixx,
-         SMESHDS/SMESHDS_Script.jxx, SMESHDS/SMESHDS_SubMesh.cdl,
-         SMESHDS/SMESHDS_SubMesh.cxx, SMESHDS/SMESHDS_SubMesh.hxx,
-         SMESHDS/SMESHDS_SubMesh.ixx, SMESHDS/SMESHDS_SubMesh.jxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/Handle_SMESHDS_DataMapNodeOfDataMapOfShapeSubMesh.hxx,
-         SMESHDS/Handle_SMESHDS_Document.hxx,
-         SMESHDS/Handle_SMESHDS_ListNodeOfListOfAsciiString.hxx,
-         SMESHDS/Handle_SMESHDS_ListNodeOfListOfPtrHypothesis.hxx,
-         SMESHDS/Handle_SMESHDS_SubMesh.hxx, SMESHDS/SMESHDS.cdl,
-         SMESHDS/SMESHDS_Command.hxx, SMESHDS/SMESHDS_CommandType.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerMesh.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapIteratorOfDataMapOfShapeSubMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerMesh_0.cxx,
-         SMESHDS/SMESHDS_DataMapNodeOfDataMapOfIntegerPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_DataMapOfShapeListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_Document.cxx, SMESHDS/SMESHDS_Document.jxx,
-         SMESHDS/SMESHDS_Hypothesis.cxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfAsciiString.hxx,
-         SMESHDS/SMESHDS_ListIteratorOfListOfPtrHypothesis.hxx,
-         SMESHDS/SMESHDS_ListNodeOfListOfPtrHypothesis_0.cxx,
-         SMESHDS/SMESHDS_ListOfAsciiString.hxx,
-         SMESHDS/SMESHDS_ListOfAsciiString_0.cxx,
-         SMESHDS/SMESHDS_ListOfCommand_0.cxx, SMESHDS/SMESHDS_Mesh.cxx,
-         SMESHDS/SMESHDS_Mesh.ixx, SMESHDS/SMESHDS_Mesh.jxx,
-         SMESHDS/SMESHDS_PtrHypothesis.hxx: NRI : First integration.
-
-2003-05-19 13:03  Nicolas Rejneri <nicolas.rejneri@opencascade.com>
-
-       * Makefile.in, build_configure, configure.in.base,
-         resources/ModuleMesh.png, resources/SMESHCatalog.xml,
-         resources/SMESH_en.xml, resources/SMESH_fr.xml,
-         resources/delete.png, resources/mesh.png,
-         resources/mesh_add_sub.png, resources/mesh_algo_hexa.png,
-         resources/mesh_algo_mefisto.png, resources/mesh_algo_quad.png,
-         resources/mesh_algo_regular.png, resources/mesh_angle.png,
-         resources/mesh_area.png, resources/mesh_aspect.png,
-         resources/mesh_compute.png, resources/mesh_connectivity.png,
-         resources/mesh_diagonal.png, resources/mesh_edit.png,
-         resources/mesh_hexa.png, resources/mesh_hexa_n.png,
-         resources/mesh_hypo_area.png, resources/mesh_hypo_length.png,
-         resources/mesh_hypo_segment.png, resources/mesh_hypo_volume.png,
-         resources/mesh_info.png, resources/mesh_init.png,
-         resources/mesh_length.png, resources/mesh_line.png,
-         resources/mesh_line_n.png, resources/mesh_move_node.png,
-         resources/mesh_orientation.png, resources/mesh_pyramid.png,
-         resources/mesh_pyramid_n.png, resources/mesh_quad.png,
-         resources/mesh_quad_n.png, resources/mesh_rem_element.png,
-         resources/mesh_rem_node.png, resources/mesh_set_algo.png,
-         resources/mesh_set_hypo.png, resources/mesh_shading.png,
-         resources/mesh_shrink.png, resources/mesh_skew.png,
-         resources/mesh_taper.png, resources/mesh_tetra.png,
-         resources/mesh_tetra_n.png, resources/mesh_tree_algo.png,
-         resources/mesh_tree_algo_hexa.png,
-         resources/mesh_tree_algo_mefisto.png,
-         resources/mesh_tree_algo_quad.png,
-         resources/mesh_tree_algo_regular.png,
-         resources/mesh_tree_hypo.png, resources/mesh_tree_hypo_area.png,
-         resources/mesh_tree_hypo_length.png,
-         resources/mesh_tree_hypo_segment.png,
-         resources/mesh_tree_hypo_volume.png,
-         resources/mesh_tree_mesh.png, resources/mesh_tree_mesh_warn.png,
-         resources/mesh_triangle.png, resources/mesh_triangle_n.png,
-         resources/mesh_update.png, resources/mesh_vertex.png,
-         resources/mesh_vertex_n.png, resources/mesh_wireframe.png,
-         resources/mesh_wrap.png, resources/select1.png, idl/Makefile.in,
-         idl/SMESH_BasicHypothesis.idl, idl/SMESH_Gen.idl,
-         idl/SMESH_Hypothesis.idl, idl/SMESH_Mesh.idl,
-         src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx,
-         src/DriverDAT/DriverDAT_R_SMDS_Mesh.h,
-         src/DriverDAT/DriverDAT_R_SMESHDS_Document.cxx,
-         src/DriverDAT/DriverDAT_R_SMESHDS_Document.h,
-         src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.cxx,
-         src/DriverDAT/DriverDAT_R_SMESHDS_Mesh.h,
-         src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx,
-         src/DriverDAT/DriverDAT_W_SMDS_Mesh.h,
-         src/DriverDAT/DriverDAT_W_SMESHDS_Document.cxx,
-         src/DriverDAT/DriverDAT_W_SMESHDS_Document.h,
-         src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.cxx,
-         src/DriverDAT/DriverDAT_W_SMESHDS_Mesh.h,
-         src/DriverDAT/Makefile.in,
-         src/DriverMED/DriverMED_R_SMDS_Mesh.cxx,
-         src/DriverMED/DriverMED_R_SMESHDS_Document.cxx,
-         src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx,
-         src/DriverMED/DriverMED_W_SMDS_Mesh.cxx,
-         src/DriverMED/DriverMED_W_SMESHDS_Document.cxx,
-         src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx,
-         src/DriverMED/Makefile.in,
-         src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx,
-         src/DriverUNV/DriverUNV_R_SMDS_Mesh.h,
-         src/DriverUNV/DriverUNV_R_SMESHDS_Document.cxx,
-         src/DriverUNV/DriverUNV_R_SMESHDS_Document.h,
-         src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.cxx,
-         src/DriverUNV/DriverUNV_R_SMESHDS_Mesh.h,
-         src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx,
-         src/DriverUNV/DriverUNV_W_SMDS_Mesh.h,
-         src/DriverUNV/DriverUNV_W_SMESHDS_Document.cxx,
-         src/DriverUNV/DriverUNV_W_SMESHDS_Document.h,
-         src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.cxx,
-         src/DriverUNV/DriverUNV_W_SMESHDS_Mesh.h,
-         src/DriverUNV/Makefile.in: NRI : First integration.
-
-2003-03-07 14:55  tag V1
-
-2003-03-07 14:55  cvsadmin
-
-       * src/DriverMED/: DriverMED_R_SMESHDS_Document.h,
-         DriverMED_W_SMESHDS_Document.h:
-         Initialisation module SMESH_SRC de la base SMESH
-
-2003-03-07 14:55  cvsadmin
-
-       * src/DriverMED/: DriverMED_R_SMDS_Mesh.cxx,
-         DriverMED_R_SMDS_Mesh.h, DriverMED_R_SMESHDS_Document.cxx,
-         DriverMED_R_SMESHDS_Mesh.cxx, DriverMED_R_SMESHDS_Mesh.h,
-         DriverMED_W_SMDS_Mesh.cxx, DriverMED_W_SMDS_Mesh.h,
-         DriverMED_W_SMESHDS_Document.cxx, DriverMED_W_SMESHDS_Mesh.cxx,
-         DriverMED_W_SMESHDS_Mesh.h, Makefile.in: Initial revision
-
index 8687b8971a1c2cc486896492388372733252dbce..30d263caaa2ed7f6a65cd90980afcd508c426427 100644 (file)
@@ -42,7 +42,7 @@ Nb_Segments_4 = Regular_1D_3.NumberOfSegments(12)
 MEFISTO_2D_3 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_3)
 SubMesh_3 = MEFISTO_2D_3.GetSubMesh()
 
-# check exisiting sub-mesh priority order
+# check existing sub-mesh priority order
 [ [ SubMesh_1, SubMesh_3, SubMesh_2 ] ] = Mesh_1.GetMeshOrder()
 isDone = Mesh_1.Compute()
 print "Nb elements at initial order of sub-meshes:", Mesh_1.NbElements()
diff --git a/doc/salome/examples/ex_MakePolyLine.py b/doc/salome/examples/ex_MakePolyLine.py
new file mode 100644 (file)
index 0000000..530d39c
--- /dev/null
@@ -0,0 +1,37 @@
+import salome
+salome.salome_init()
+
+### create geometry
+
+from salome.geom import geomBuilder
+geompy = geomBuilder.New(salome.myStudy)
+
+Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
+geompy.addToStudy( Box_1, 'Box_1' )
+
+### create a mesh
+
+import SMESH
+from salome.smesh import smeshBuilder
+smesh = smeshBuilder.New(salome.myStudy)
+
+Mesh_1 = smesh.Mesh( Box_1 )
+Mesh_1.Segment().NumberOfSegments(15)
+Mesh_1.Triangle()
+Mesh_1.Compute()
+
+# define arguments for MakePolyLine
+
+segments = []
+# between nodes 20 and 1, default plane
+segments.append( SMESH.PolySegment( 20, 0, 1, 0, smesh.MakeDirStruct(0,0,0) ))
+# between nodes 1 and 100, default plane
+segments.append( SMESH.PolySegment( 1, 0, 200, 0, smesh.MakeDirStruct(0,0,0) ))
+# between nodes 200 and edge (578, 577), plane includes vector (1,1,1)
+segments.append( SMESH.PolySegment( 200, 0, 578, 577, smesh.MakeDirStruct(1,1,1) ))
+
+Mesh_1.MakePolyLine( segments, "1D group")
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser(True)
index 812e9428878883a49f86ffef2189c7bc7c2d6cc5..9ee7ce8521df9a58c1bc95032ece239dac750433 100644 (file)
@@ -15,7 +15,7 @@ ids = filter.GetIDs()
 print "Number of faces with aspect ratio > 1.5:", len(ids)
 
 # copy the faces with aspect ratio > 1.5 to another mesh;
-# this demostrates that a filter can be used where usually a group or sub-mesh is acceptable
+# this demonstrates that a filter can be used where usually a group or sub-mesh is acceptable
 filter.SetMesh( mesh.GetMesh() ) # - actually non necessary as mesh is set at filter creation
 mesh2 = smesh.CopyMesh( filter, "AR > 1.5" )
 print "Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces()
index bd85e09e05f55d79c3648a2f95121eb61eaf5ade..abe275c64e28993bc54fb01b3df622fd208f78e6 100644 (file)
@@ -28,22 +28,22 @@ critaria = [ \
     ]
 filt = smesh.GetFilterFromCriteria( critaria )
 filtGroup = mesh.GroupOnFilter( SMESH.FACE, "group on filter", filt )
-print "Group on filter contains %s elemens" % filtGroup.Size()
+print "Group on filter contains %s elements" % filtGroup.Size()
 
 # group on filter is updated if the mesh is modified
 hyp1D.SetStartLength( 2.5 )
 hyp1D.SetEndLength( 2.5 )
 mesh.Compute()
-print "After mesh change, group on filter contains %s elemens" % filtGroup.Size()
+print "After mesh change, group on filter contains %s elements" % filtGroup.Size()
 
 # set a new filter defining the group
 filt2 = smesh.GetFilter( SMESH.FACE, SMESH.FT_RangeOfIds, "1-50" )
 filtGroup.SetFilter( filt2 )
-print "With a new filter, group on filter contains %s elemens" % filtGroup.Size()
+print "With a new filter, group on filter contains %s elements" % filtGroup.Size()
 
 # group is updated at modification of the filter
 filt2.SetCriteria( [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_RangeOfIds, "1-70" )])
 filtIDs3 = filtGroup.GetIDs()
-print "After filter modification, group on filter contains %s elemens" % filtGroup.Size()
+print "After filter modification, group on filter contains %s elements" % filtGroup.Size()
 
 salome.sg.updateObjBrowser(True)
diff --git a/doc/salome/examples/quality_controls_defl.py b/doc/salome/examples/quality_controls_defl.py
new file mode 100644 (file)
index 0000000..9105fee
--- /dev/null
@@ -0,0 +1,45 @@
+# Deflection 2D
+
+
+import salome
+salome.salome_init()
+from salome.geom import geomBuilder
+geompy = geomBuilder.New(salome.myStudy)
+
+import SMESH
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New(salome.myStudy)
+
+# fuse a box and a sphere
+Sphere_1 = geompy.MakeSphereR(100)
+Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
+Fuse = geompy.MakeFuse( Sphere_1, Box_1, theName="box + sphere" )
+
+# create a mesh
+mesh = smesh.Mesh( Fuse, "Deflection_2D")
+algo = mesh.Segment()
+algo.LocalLength(35)
+algo = mesh.Triangle()
+mesh.Compute()
+
+# get min and max deflection
+minMax = mesh.GetMinMax( SMESH.FT_Deflection2D )
+print "min and max deflection: ", minMax
+
+# get deflection of a certain face
+faceID = mesh.NbEdges() + mesh.NbFaces()
+defl = mesh.FunctorValue( SMESH.FT_Deflection2D, faceID )
+print "deflection of face %s = %s" % ( faceID, defl )
+
+margin = minMax[1] / 2
+
+# get all faces with deflection LESS than the margin
+aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Deflection2D, '<', margin, mesh=mesh)
+anIds = aFilter.GetIDs()
+print "%s faces have deflection less than %s" %( len(anIds), margin )
+
+# create a group of faces with deflection MORE than the margin
+aGroup = mesh.MakeGroup("Deflection > " + `margin`, SMESH.FACE, SMESH.FT_Deflection2D,'>',margin)
+print "%s faces have deflection more than %s: %s ..." %( aGroup.Size(), margin, aGroup.GetIDs()[:10] )
+
+salome.sg.updateObjBrowser(True)
index 3319c3208612346169640b91e9bd76ef58ffb46d..2cf9698d1328353250a00758a9613157b47af6d0 100644 (file)
@@ -156,6 +156,7 @@ SET(GOOD_TESTS
   quality_controls_ex17.py
   quality_controls_ex18.py
   quality_controls_ex19.py
+  quality_controls_defl.py
   transforming_meshes_ex01.py
   transforming_meshes_ex02.py
   transforming_meshes_ex03.py
diff --git a/doc/salome/gui/SMESH/images/deflection_2d.png b/doc/salome/gui/SMESH/images/deflection_2d.png
new file mode 100644 (file)
index 0000000..f815962
Binary files /dev/null and b/doc/salome/gui/SMESH/images/deflection_2d.png differ
index 7468931a1e4d646742db40318891272f79dcaf4b..0519da4f5cc6227ff98b2ef9d38d7d2efa7e8796 100644 (file)
@@ -7,21 +7,22 @@ specific condition or a set of conditions. Filters can be used to create
 or edit mesh groups, remove elements from the mesh, control
 mesh quality by different parameters, etc.
 
-Several criteria can be combined together by using logical operators \a
-AND and \a OR. In addition, a filter criterion can be reverted
-using logical operator \a NOT.
+Several \ref filtering_criteria "filtering criteria" can be combined
+together by using logical operators \a AND and \a OR. In addition, a
+filter criterion can be reverted using logical operator \a NOT.
 
-Some filtering criteria use the functionality of \ref quality_page "mesh quality controls"
-to filter mesh nodes / elements by specific characteristic (Area, Length, etc).
+Some filtering criteria use the functionality of \ref quality_page
+"mesh quality controls" to filter mesh nodes / elements by specific
+characteristic (Area, Length, etc).
 
 The functinality of mesh filters is available in both GUI and TUI
 modes:
 
-- In GUI, filters are available in some dialog boxes via
-"Set Filters" button, clicking on which opens the dialog box
+- In GUI, filters are available in some dialog boxes via "Set Filters"
+button, clicking on which opens the \ref filtering_elements "dialog box"
 allowing to specify the list of filter criteria to be applied to the
-current selection. See \subpage selection_filter_library_page page to learn more
-about selection filters and their usage in GUI.
+current selection. See \subpage selection_filter_library_page page to
+learn more about selection filters and their usage in GUI.
 
 - In Python scripts, filters can be used to choose only some mesh
   entities (nodes or elements) for the operations, which require the
index 9dbb5c9923cff006424fe84e3a5c4867d98aa570..84bcf0d4d71aa33f285d32a7774950801756f211 100644 (file)
@@ -37,6 +37,7 @@ Face quality controls:
 <li>\subpage bare_border_faces_page "Bare border faces"</li>
 <li>\subpage over_constrained_faces_page "Over-constrained faces"</li>
 <li>\subpage length_2d_page "Length 2D"</li>
+<li>\subpage deflection_2d_page "Deflection 2D"</li>
 <li>\subpage borders_at_multi_connection_2d_page "Borders at multi-connection 2D"</li>
 <li>\subpage area_page "Area"</li>
 <li>\subpage taper_page "Taper"</li>
diff --git a/doc/salome/gui/SMESH/input/deflection_2d.doc b/doc/salome/gui/SMESH/input/deflection_2d.doc
new file mode 100644 (file)
index 0000000..a9d38cd
--- /dev/null
@@ -0,0 +1,25 @@
+/*!
+
+\page deflection_2d_page Deflection 2D
+
+\n This quality control criterion consists of calculation of distance
+between a mesh face gravity corner and the surface the face discretizes.
+
+<em>To apply the Deflection 2D quality criterion to your mesh:</em>
+<ol>
+<li>Display your mesh in the viewer. </li>
+
+<li>Choose <b>Controls > Face Controls > Deflection 2D</b> or click
+<em>"Deflection 2D"</em> button in the toolbar. 
+
+Your mesh will be displayed in the viewer with faces colored according
+to the applied mesh quality control criterion:
+
+\image html deflection_2d.png
+</li>
+</ol>
+
+<br><b>See Also</b> a sample TUI Script of a 
+\ref tui_deflection_2d "Deflection 2D quality control" operation.  
+
+*/
index 03438c490dbea3f1504627e5a48a2a92a4c83eae..97d63ec029bad9cbdeff7c0f67826e1e075cef0e 100644 (file)
@@ -2,6 +2,10 @@
 
 \page selection_filter_library_page Selection filter library
 
+\tableofcontents
+
+\section selection_filter_library Filter library
+
 \n Selection filter library allows creating and storing in files
 the filters that can be later reused for operations on meshes. You can
 access it from the Main Menu via <b>Tools / Selection filter library</b>.
@@ -18,8 +22,7 @@ the current study. You can \b Add or \b Delete filters.
 \n In <b>Filter name</b> box you can specify the name for your
 filter. By default it is prefixed with the corresponding entity type.
 
-\anchor filtering_elements
-<h2>Filter Dialog</h2>
+\section filtering_elements Filter Dialog
 
 When we use filters during group creation or another operation (by 
 clicking <b>Set Filter</b> button in the corresponding dialog), the
@@ -64,6 +67,8 @@ in the Library.
 is no selected mesh in the Object Browser and the filter can not be
 created. You have to select the mesh and the button will be enabled.
 
+\section filtering_criteria Filtering Criteria
+
 Some criteria are applicable to all <b>Entity types</b>:
 <ul><li>
 <b>Belong to Geom</b> selects entities whose all nodes lie on the
@@ -231,6 +236,10 @@ normal to the neighboring face and the normal to the selected face is less then
 angular tolerance (defined in degrees). Selection continues among all neighbor faces of already 
 selected ones.<br>
 </li><li>
+<b>Deflection 2D</b> selects 2D mesh elements having distance between their gravity
+centers and underlying surfaces, which is more, less or equal (within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>. See also a
+\ref deflection_2d_page "Deflection 2D quality control".
+</li><li>
 <b>Element Diameter 2D</b> selects triangles and quadrangles composed of the edges and
 diagonals with a value of length, which is more, less or equal
 (within a given <b>Tolerance</b>) to the predefined <b>Threshold Value</b>. See also a
index 3713fae3752f9ace9d6ba3d5003cc71eba043e98..71c18b1e08ebc1f88c99b04179b782dadeaecacc 100644 (file)
@@ -1,6 +1,6 @@
 /*!
 
-\page smesh_migration_page Modifing Mesh Python scripts from SALOME 6 and before
+\page smesh_migration_page Modifying Mesh Python scripts from SALOME 6 and before
 
 \n In SALOME 7.2, the Python interface for %Mesh has been slightly modified to offer new functionality:
 
@@ -31,7 +31,7 @@ smesh =  smeshBuilder.New(salome.myStudy)
 
 
 <b> Of course, <em>from smesh import *</em> is no more possible.</b>
-\n You have to explicitely write <em>smesh.some_method()</em>.
+\n You have to explicitly write <em>smesh.some_method()</em>.
 
 <b>All algorithms have been transferred from the namespace <em>smesh</em> to the namespace <em>smeshBuilder</em>.</b>
 \n For instance:
@@ -79,7 +79,7 @@ is replaced by:
 Compound1 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 0, 1, 1e-05)
 \endcode
 
-<b>If you need to import a %SMESH Plugin explicitely, keep in mind that  they are now located in separate namespaces.</b>
+<b>If you need to import a %SMESH Plugin explicitly, keep in mind that they are now located in separate namespaces.</b>
 \n For instance:
 \code
 import StdMeshers
index 3c115293e508985d6d18be38fe36045fc084310f..d77c447e6c2940b6a42a6d54d229d19edfbe3ca4 100755 (executable)
@@ -190,7 +190,7 @@ filters over-constrained faces:
 \section filter_double_elements Double edges, Double faces, Double volumes
 
 filters mesh elements basing on the same set of nodes:
-- element type is either \a SMESH.EGDE, \a SMESH.FACE or \a SMESH.VOLUME
+- element type is either \a SMESH.EDGE, \a SMESH.FACE or \a SMESH.VOLUME
 - functor type is either \a SMESH.FT_EqualEdges, \a
           SMESH.FT_EqualFaces or \a SMESH.FT_EqualVolumes,
 - threshold value is not required
index 1434c9b07230ba47bfc3d6ffb5905b8cdb1543cc..cb1632c1e230e95548bdb5b78763e43de4b69f54 100644 (file)
@@ -37,6 +37,9 @@
 \section tui_length_2d Length 2D
 \tui_script{quality_controls_ex11.py}
 
+\section tui_deflection_2d Deflection 2D
+\tui_script{quality_controls_defl.py}
+
 \section tui_borders_at_multiconnection_2d Borders at Multiconnection 2D
 \tui_script{quality_controls_ex12.py}
 
index 565d189ef5d2ac11a65ab05a4bd95d13399043f0..e3510b109e7fa8ae883dafd06a601f0e3f65b688 100644 (file)
@@ -128,7 +128,7 @@ module StdMeshers
   };
 
   /*!
-   * Common inteface of 1D hypotheses that can be reversed
+   * Common interface of 1D hypotheses that can be reversed
    */
   interface Reversible1D
   {
index c354e064d8fa26db7e34bf8072baad3bcf98e64c..283aa1b297b1a83e6c852eb2991b2a8401470a77 100644 (file)
@@ -61,6 +61,7 @@ module SMESH
     FT_MultiConnection2D,
     FT_Length,
     FT_Length2D,
+    FT_Deflection2D,
     FT_NodeConnectivityNumber,
     FT_BelongToMeshGroup,
     FT_BelongToGeom,
@@ -150,6 +151,7 @@ module SMESH
     typedef sequence<Value> Values;
     Values GetValues();
   };
+  interface Deflection2D      : NumericalFunctor{};
   interface MultiConnection   : NumericalFunctor{};
   interface MultiConnection2D : NumericalFunctor
   {
@@ -585,6 +587,7 @@ module SMESH
     MaxElementLength3D CreateMaxElementLength3D();
     Length             CreateLength();
     Length2D           CreateLength2D();
+    Deflection2D       CreateDeflection2D();
     MultiConnection    CreateMultiConnection();
     MultiConnection2D  CreateMultiConnection2D();
     BallDiameter       CreateBallDiameter();
index 03ae8e0f8f5f3756429b38cb089e73718fe82641..dd0866f8a240579c824e61ceea0755e75a0217b6 100644 (file)
@@ -76,7 +76,7 @@ module SMESH
   const long Tag_LastGroup              = 16;
 
   /*!
-   * Hypothesis definintion error
+   * Hypothesis definition error
    */
   struct AlgoStateError
   {
@@ -343,7 +343,7 @@ module SMESH
       raises ( SALOME::SALOME_Exception );
 
     /*!
-     * Return errors of hypotheses definintion
+     * Return errors of hypotheses definition
      * algo_error_array is empty if everything is OK
      */
     algo_error_array GetAlgoState( in SMESH_Mesh        theMesh,
index 74619a175b81847b1015b226d0ee61131f29adac..f01de1d07abfc3791452470d0c6f3102a469412d 100644 (file)
@@ -568,7 +568,7 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Remove an hypothesis previouly added with AddHypothesis.
+     * Remove an hypothesis previously added with AddHypothesis.
      */
     Hypothesis_Status RemoveHypothesis(in GEOM::GEOM_Object aSubObject,
                                        in SMESH_Hypothesis anHyp)
@@ -751,7 +751,7 @@ module SMESH
     double GetComputeProgress();
 
     /*!
-     * Get informations about mesh contents
+     * Get information about mesh contents
      */
     long NbNodes()
       raises (SALOME::SALOME_Exception);
index ea19b5ebe03f90f0a2d1427744ae9de556f26632..9e40dcb58a8dfb6823802a7995dd813fc548bfca 100644 (file)
@@ -57,6 +57,24 @@ module SMESH
   };
 
 
+  // structure used in MakePolyLine() to define a cutting plane
+  struct PolySegment
+  {
+    // point 1: if node1ID2 > 0, then the point is in the middle of a face edge defined
+    //          by two nodes, else it is at node1ID1
+    long node1ID1;
+    long node1ID2;
+
+    // point 2: if node2ID2 > 0, then the point is in the middle of a face edge defined
+    //          by two nodes, else it is at node2ID1
+    long node2ID1;
+    long node2ID2;
+
+    DirStruct vector; // vector on the plane; to use a default plane set vector = (0,0,0)
+  };
+  typedef sequence<PolySegment> ListOfPolySegments;
+
+
   /*!
    * This interface makes modifications on the Mesh - removing elements and nodes etc.
    */
@@ -300,7 +318,7 @@ module SMESH
      * \param IDsOfElements Ids of triangles to be fused.
      * \param theCriterion Is used to choose a neighbour to fuse with.
      * \param theMaxAngle  Is a max angle between element normals at which fusion
-     *                     is still performed; theMaxAngle is mesured in radians.
+     *                     is still performed; theMaxAngle is measured in radians.
      * \return \c true in case of success, FALSE otherwise.
      */
     boolean TriToQuad (in long_array       IDsOfElements,
@@ -338,7 +356,7 @@ module SMESH
 
     /*!
      * \brief Split quadrangles into triangles.
-     * \param theElems  The faces to be splitted.
+     * \param theElems  The faces to be split.
      * \param the13Diag Is used to choose a diagonal for splitting.
      * \return TRUE in case of success, FALSE otherwise.
      */
@@ -354,7 +372,7 @@ module SMESH
 
     /*!
      *  Find better splitting of the given quadrangle.
-     *  \param IDOfQuad  ID of the quadrangle to be splitted.
+     *  \param IDOfQuad  ID of the quadrangle to be split.
      *  \param Criterion A criterion to choose a diagonal for splitting.
      *  \return 1 if 1-3 diagonal is better, 2 if 2-4
      *          diagonal is better, 0 if error occurs.
@@ -751,7 +769,31 @@ module SMESH
      * 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);
+
+    /*!
+     * Check if a 2D mesh is manifold
+     */
+    boolean IsManifold()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Check if orientation of 2D elements is coherent
+     */
+    boolean IsCoherentOrientation2D()
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Returns all or only closed FreeBorder's.
+     */
+    ListOfFreeBorders FindFreeBorders(in boolean closedOnly)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Fill with 2D elements a hole defined by a FreeBorder.
+     */
+    void FillHole(in FreeBorder hole)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -1184,7 +1226,28 @@ module SMESH
                         in GEOM::GEOM_Object theShape,
                         in string groupName,
                         in double_array theNodesCoords,
-                        out array_of_long_array GroupsOfNodes) 
+                        out array_of_long_array GroupsOfNodes)
+      raises (SALOME::SALOME_Exception);
+
+
+    /*!
+     * \brief Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+     *        the initial mesh. Positions of new nodes are found by cutting the mesh by the
+     *        plane passing through pairs of points specified by each PolySegment structure.
+     *        If there are several paths connecting a pair of points, the shortest path is
+     *        selected by the module. Position of the cutting plane is defined by the two
+     *        points and an optional vector lying on the plane specified by a PolySegment.
+     *        By default the vector is defined by Mesh module as following. A middle point
+     *        of the two given points is computed. The middle point is projected to the mesh.
+     *        The vector goes from the middle point to the projection point. In case of planar
+     *        mesh, the vector is normal to the mesh.
+     *  \param [inout] segments - PolySegment's defining positions of cutting planes.
+     *        Return the used vector which goes from the middle point to its projection.
+     *  \param [in] groupName - optional name of a group where created mesh segments will
+     *        be added.
+     */
+    void MakePolyLine(inout ListOfPolySegments segments,
+                      in    string             groupName)
       raises (SALOME::SALOME_Exception);
   };
 };
index d2801c905efd76ec6449a9fe71667736a261fc43..6db2127ebc5281ba2d5417353c72c47b2b18e684 100755 (executable)
@@ -228,6 +228,7 @@ SET(SMESH_RESOURCES_FILES
   mesh_quality.png
   mesh_show.png
   mesh_hide.png
+  mesh_deflection.png
 )
 
 INSTALL(FILES ${SMESH_RESOURCES_FILES} DESTINATION ${SALOME_SMESH_INSTALL_RES_DATA})
diff --git a/resources/mesh_deflection.png b/resources/mesh_deflection.png
new file mode 100644 (file)
index 0000000..f9d8542
Binary files /dev/null and b/resources/mesh_deflection.png differ
index 9333e702377047a93173cfb392bf6288967740da..b1279a6594d78ec63fecc1d34b2f792ea758e6c3 100644 (file)
@@ -23,6 +23,7 @@
 #include "SMESH_ControlsDef.hxx"
 
 #include "SMDS_BallElement.hxx"
+#include "SMDS_FacePosition.hxx"
 #include "SMDS_Iterator.hxx"
 #include "SMDS_Mesh.hxx"
 #include "SMDS_MeshElement.hxx"
 #include <BRepAdaptor_Surface.hxx>
 #include <BRepBndLib.hxx>
 #include <BRepBuilderAPI_Copy.hxx>
+#include <BRepClass3d_SolidClassifier.hxx>
 #include <BRepClass_FaceClassifier.hxx>
 #include <BRep_Tool.hxx>
+#include <GeomLib_IsPlanarSurface.hxx>
 #include <Geom_CylindricalSurface.hxx>
 #include <Geom_Plane.hxx>
 #include <Geom_Surface.hxx>
 #include <NCollection_Map.hxx>
 #include <Precision.hxx>
+#include <ShapeAnalysis_Surface.hxx>
 #include <TColStd_MapIteratorOfMapOfInteger.hxx>
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_SequenceOfAsciiString.hxx>
@@ -95,6 +99,15 @@ namespace {
       v2.Magnitude() < gp::Resolution() ? 0 : v1.Angle( v2 );
   }
 
+  inline double getCos2( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 )
+  {
+    gp_Vec v1( P1 - P2 ), v2( P3 - P2 );
+    double dot = v1 * v2, len1 = v1.SquareMagnitude(), len2 = v2.SquareMagnitude();
+
+    return ( dot < 0 || len1 < gp::Resolution() || len2 < gp::Resolution() ? -1 :
+             dot * dot / len1 / len2 );
+  }
+
   inline double getArea( const gp_XYZ& P1, const gp_XYZ& P2, const gp_XYZ& P3 )
   {
     gp_Vec aVec1( P2 - P1 );
@@ -261,13 +274,10 @@ bool NumericalFunctor::GetPoints(const SMDS_MeshElement* anElem,
   }
 
   if ( anIter ) {
-    double xyz[3];
+    SMESH_NodeXYZ p;
     while( anIter->more() ) {
-      if ( const SMDS_MeshNode* aNode = static_cast<const SMDS_MeshNode*>( anIter->next() ))
-      {
-        aNode->GetXYZ( xyz );
-        theRes.push_back( gp_XYZ( xyz[0], xyz[1], xyz[2] ));
-      }
+      if ( p.Set( anIter->next() ))
+        theRes.push_back( p );
     }
   }
 
@@ -713,21 +723,25 @@ SMDSAbs_ElementType MaxElementLength3D::GetType() const
 
 double MinimumAngle::GetValue( const TSequenceOfXYZ& P )
 {
-  double aMin;
-
-  if (P.size() <3)
+  if ( P.size() < 3 )
     return 0.;
 
-  aMin = getAngle(P( P.size() ), P( 1 ), P( 2 ));
-  aMin = Min(aMin,getAngle(P( P.size()-1 ), P( P.size() ), P( 1 )));
+  double aMaxCos2;
+
+  aMaxCos2 = getCos2( P( P.size() ), P( 1 ), P( 2 ));
+  aMaxCos2 = Max( aMaxCos2, getCos2( P( P.size()-1 ), P( P.size() ), P( 1 )));
 
   for ( size_t i = 2; i < P.size(); i++ )
   {
-    double A0 = getAngle( P( i-1 ), P( i ), P( i+1 ) );
-    aMin = Min(aMin,A0);
+    double A0 = getCos2( P( i-1 ), P( i ), P( i+1 ) );
+    aMaxCos2 = Max( aMaxCos2, A0 );
   }
+  if ( aMaxCos2 < 0 )
+    return 0; // all nodes coincide
 
-  return aMin * 180.0 / M_PI;
+  double cos = sqrt( aMaxCos2 );
+  if ( cos >=  1 ) return 0;
+  return acos( cos ) * 180.0 / M_PI;
 }
 
 double MinimumAngle::GetBadRate( double Value, int nbNodes ) const
@@ -786,58 +800,51 @@ double AspectRatio::GetValue( const TSequenceOfXYZ& P )
 
   if ( nbNodes == 3 ) {
     // Compute lengths of the sides
-    std::vector< double > aLen (nbNodes);
-    for ( int i = 0; i < nbNodes - 1; i++ )
-      aLen[ i ] = getDistance( P( i + 1 ), P( i + 2 ) );
-    aLen[ nbNodes - 1 ] = getDistance( P( 1 ), P( nbNodes ) );
+    double aLen1 = getDistance( P( 1 ), P( 2 ));
+    double aLen2 = getDistance( P( 2 ), P( 3 ));
+    double aLen3 = getDistance( P( 3 ), P( 1 ));
     // Q = alfa * h * p / S, where
     //
     // alfa = sqrt( 3 ) / 6
     // h - length of the longest edge
     // p - half perimeter
     // S - triangle surface
-    const double alfa = sqrt( 3. ) / 6.;
-    double maxLen = Max( aLen[ 0 ], Max( aLen[ 1 ], aLen[ 2 ] ) );
-    double half_perimeter = ( aLen[0] + aLen[1] + aLen[2] ) / 2.;
-    double anArea = getArea( P( 1 ), P( 2 ), P( 3 ) );
+    const double     alfa = sqrt( 3. ) / 6.;
+    double         maxLen = Max( aLen1, Max( aLen2, aLen3 ));
+    double half_perimeter = ( aLen1 + aLen2 + aLen3 ) / 2.;
+    double         anArea = getArea( P( 1 ), P( 2 ), P( 3 ));
     if ( anArea <= theEps  )
       return theInf;
     return alfa * maxLen * half_perimeter / anArea;
   }
   else if ( nbNodes == 6 ) { // quadratic triangles
     // Compute lengths of the sides
-    std::vector< double > aLen (3);
-    aLen[0] = getDistance( P(1), P(3) );
-    aLen[1] = getDistance( P(3), P(5) );
-    aLen[2] = getDistance( P(5), P(1) );
-    // Q = alfa * h * p / S, where
-    //
-    // alfa = sqrt( 3 ) / 6
-    // h - length of the longest edge
-    // p - half perimeter
-    // S - triangle surface
-    const double alfa = sqrt( 3. ) / 6.;
-    double maxLen = Max( aLen[ 0 ], Max( aLen[ 1 ], aLen[ 2 ] ) );
-    double half_perimeter = ( aLen[0] + aLen[1] + aLen[2] ) / 2.;
-    double anArea = getArea( P(1), P(3), P(5) );
+    double aLen1 = getDistance( P( 1 ), P( 3 ));
+    double aLen2 = getDistance( P( 3 ), P( 5 ));
+    double aLen3 = getDistance( P( 5 ), P( 1 ));
+    // algo same as for the linear triangle
+    const double     alfa = sqrt( 3. ) / 6.;
+    double         maxLen = Max( aLen1, Max( aLen2, aLen3 ));
+    double half_perimeter = ( aLen1 + aLen2 + aLen3 ) / 2.;
+    double         anArea = getArea( P( 1 ), P( 3 ), P( 5 ));
     if ( anArea <= theEps )
       return theInf;
     return alfa * maxLen * half_perimeter / anArea;
   }
   else if( nbNodes == 4 ) { // quadrangle
     // Compute lengths of the sides
-    std::vector< double > aLen (4);
+    double aLen[4];
     aLen[0] = getDistance( P(1), P(2) );
     aLen[1] = getDistance( P(2), P(3) );
     aLen[2] = getDistance( P(3), P(4) );
     aLen[3] = getDistance( P(4), P(1) );
     // Compute lengths of the diagonals
-    std::vector< double > aDia (2);
+    double aDia[2];
     aDia[0] = getDistance( P(1), P(3) );
     aDia[1] = getDistance( P(2), P(4) );
     // Compute areas of all triangles which can be built
     // taking three nodes of the quadrangle
-    std::vector< double > anArea (4);
+    double anArea[4];
     anArea[0] = getArea( P(1), P(2), P(3) );
     anArea[1] = getArea( P(1), P(2), P(4) );
     anArea[2] = getArea( P(1), P(3), P(4) );
@@ -853,35 +860,35 @@ double AspectRatio::GetValue( const TSequenceOfXYZ& P )
     // Si - areas of the triangles
     const double alpha = sqrt( 1 / 32. );
     double L = Max( aLen[ 0 ],
-                 Max( aLen[ 1 ],
-                   Max( aLen[ 2 ],
-                     Max( aLen[ 3 ],
-                       Max( aDia[ 0 ], aDia[ 1 ] ) ) ) ) );
+                    Max( aLen[ 1 ],
+                         Max( aLen[ 2 ],
+                              Max( aLen[ 3 ],
+                                   Max( aDia[ 0 ], aDia[ 1 ] ) ) ) ) );
     double C1 = sqrt( ( aLen[0] * aLen[0] +
                         aLen[1] * aLen[1] +
                         aLen[2] * aLen[2] +
                         aLen[3] * aLen[3] ) / 4. );
     double C2 = Min( anArea[ 0 ],
-                  Min( anArea[ 1 ],
-                    Min( anArea[ 2 ], anArea[ 3 ] ) ) );
+                     Min( anArea[ 1 ],
+                          Min( anArea[ 2 ], anArea[ 3 ] ) ) );
     if ( C2 <= theEps )
       return theInf;
     return alpha * L * C1 / C2;
   }
   else if( nbNodes == 8 || nbNodes == 9 ) { // nbNodes==8 - quadratic quadrangle
     // Compute lengths of the sides
-    std::vector< double > aLen (4);
+    double aLen[4];
     aLen[0] = getDistance( P(1), P(3) );
     aLen[1] = getDistance( P(3), P(5) );
     aLen[2] = getDistance( P(5), P(7) );
     aLen[3] = getDistance( P(7), P(1) );
     // Compute lengths of the diagonals
-    std::vector< double > aDia (2);
+    double aDia[2];
     aDia[0] = getDistance( P(1), P(5) );
     aDia[1] = getDistance( P(3), P(7) );
     // Compute areas of all triangles which can be built
     // taking three nodes of the quadrangle
-    std::vector< double > anArea (4);
+    double anArea[4];
     anArea[0] = getArea( P(1), P(3), P(5) );
     anArea[1] = getArea( P(1), P(3), P(7) );
     anArea[2] = getArea( P(1), P(5), P(7) );
@@ -1272,7 +1279,7 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
   } // switch(nbNodes)
 
   if ( nbNodes > 4 ) {
-    // avaluate aspect ratio of quadranle faces
+    // evaluate aspect ratio of quadrangle faces
     AspectRatio aspect2D;
     SMDS_VolumeTool::VolumeType type = SMDS_VolumeTool::GetType( nbNodes );
     int nbFaces = SMDS_VolumeTool::NbFaces( type );
@@ -1281,7 +1288,7 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
       if ( SMDS_VolumeTool::NbFaceNodes( type, i ) != 4 )
         continue;
       const int* pInd = SMDS_VolumeTool::GetFaceNodesIndices( type, i, true );
-      for ( int p = 0; p < 4; ++p ) // loop on nodes of a quadranle face
+      for ( int p = 0; p < 4; ++p ) // loop on nodes of a quadrangle face
         points( p + 1 ) = P( pInd[ p ] + 1 );
       aQuality = std::max( aQuality, aspect2D.GetValue( points ));
     }
@@ -1553,247 +1560,240 @@ SMDSAbs_ElementType Length::GetType() const
 */
 //================================================================================
 
-double Length2D::GetValue( long theElementId )
+double Length2D::GetValue( const TSequenceOfXYZ& P )
 {
-  TSequenceOfXYZ P;
-
-  if ( GetPoints( theElementId, P ))
-  {
-    double aVal = 0;
-    int len = P.size();
-    SMDSAbs_EntityType aType = P.getElementEntity();
+  double aVal = 0;
+  int len = P.size();
+  SMDSAbs_EntityType aType = P.getElementEntity();
 
-    switch (aType) {
-    case SMDSEntity_Edge:
-      if (len == 2)
-        aVal = getDistance( P( 1 ), P( 2 ) );
-      break;
-    case SMDSEntity_Quad_Edge:
-      if (len == 3) // quadratic edge
-        aVal = getDistance(P( 1 ),P( 3 )) + getDistance(P( 3 ),P( 2 ));
-      break;
-    case SMDSEntity_Triangle:
-      if (len == 3){ // triangles
-        double L1 = getDistance(P( 1 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 1 ));
-        aVal = Min(L1,Min(L2,L3));
-      }
-      break;
-    case SMDSEntity_Quadrangle:
-      if (len == 4){ // quadrangles
-        double L1 = getDistance(P( 1 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 4 ));
-        double L4 = getDistance(P( 4 ),P( 1 ));
-        aVal = Min(Min(L1,L2),Min(L3,L4));
-      }
-      break;
-    case SMDSEntity_Quad_Triangle:
-    case SMDSEntity_BiQuad_Triangle:
-      if (len >= 6){ // quadratic triangles
-        double L1 = getDistance(P( 1 ),P( 2 )) + getDistance(P( 2 ),P( 3 ));
-        double L2 = getDistance(P( 3 ),P( 4 )) + getDistance(P( 4 ),P( 5 ));
-        double L3 = getDistance(P( 5 ),P( 6 )) + getDistance(P( 6 ),P( 1 ));
-        aVal = Min(L1,Min(L2,L3));
-      }
-      break;
-    case SMDSEntity_Quad_Quadrangle:
-    case SMDSEntity_BiQuad_Quadrangle:
-      if (len >= 8){ // quadratic quadrangles
-        double L1 = getDistance(P( 1 ),P( 2 )) + getDistance(P( 2 ),P( 3 ));
-        double L2 = getDistance(P( 3 ),P( 4 )) + getDistance(P( 4 ),P( 5 ));
-        double L3 = getDistance(P( 5 ),P( 6 )) + getDistance(P( 6 ),P( 7 ));
-        double L4 = getDistance(P( 7 ),P( 8 )) + getDistance(P( 8 ),P( 1 ));
-        aVal = Min(Min(L1,L2),Min(L3,L4));
-      }
-      break;
-    case SMDSEntity_Tetra:
-      if (len == 4){ // tetrahedra
-        double L1 = getDistance(P( 1 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 1 ));
-        double L4 = getDistance(P( 1 ),P( 4 ));
-        double L5 = getDistance(P( 2 ),P( 4 ));
-        double L6 = getDistance(P( 3 ),P( 4 ));
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-      }
-      break;
-    case SMDSEntity_Pyramid:
-      if (len == 5){ // pyramid
-        double L1 = getDistance(P( 1 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 4 ));
-        double L4 = getDistance(P( 4 ),P( 1 ));
-        double L5 = getDistance(P( 1 ),P( 5 ));
-        double L6 = getDistance(P( 2 ),P( 5 ));
-        double L7 = getDistance(P( 3 ),P( 5 ));
-        double L8 = getDistance(P( 4 ),P( 5 ));
-
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-        aVal = Min(aVal,Min(L7,L8));
-      }
-      break;
-    case SMDSEntity_Penta:
-      if (len == 6) { // pentahedron
-        double L1 = getDistance(P( 1 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 1 ));
-        double L4 = getDistance(P( 4 ),P( 5 ));
-        double L5 = getDistance(P( 5 ),P( 6 ));
-        double L6 = getDistance(P( 6 ),P( 4 ));
-        double L7 = getDistance(P( 1 ),P( 4 ));
-        double L8 = getDistance(P( 2 ),P( 5 ));
-        double L9 = getDistance(P( 3 ),P( 6 ));
-
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-        aVal = Min(aVal,Min(Min(L7,L8),L9));
-      }
-      break;
-    case SMDSEntity_Hexa:
-      if (len == 8){ // hexahedron
-        double L1 = getDistance(P( 1 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 4 ));
-        double L4 = getDistance(P( 4 ),P( 1 ));
-        double L5 = getDistance(P( 5 ),P( 6 ));
-        double L6 = getDistance(P( 6 ),P( 7 ));
-        double L7 = getDistance(P( 7 ),P( 8 ));
-        double L8 = getDistance(P( 8 ),P( 5 ));
-        double L9 = getDistance(P( 1 ),P( 5 ));
-        double L10= getDistance(P( 2 ),P( 6 ));
-        double L11= getDistance(P( 3 ),P( 7 ));
-        double L12= getDistance(P( 4 ),P( 8 ));
-
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-        aVal = Min(aVal,Min(Min(L7,L8),Min(L9,L10)));
-        aVal = Min(aVal,Min(L11,L12));
-      }
-      break;
-    case SMDSEntity_Quad_Tetra:
-      if (len == 10){ // quadratic tetrahedron
-        double L1 = getDistance(P( 1 ),P( 5 )) + getDistance(P( 5 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 6 )) + getDistance(P( 6 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 7 )) + getDistance(P( 7 ),P( 1 ));
-        double L4 = getDistance(P( 1 ),P( 8 )) + getDistance(P( 8 ),P( 4 ));
-        double L5 = getDistance(P( 2 ),P( 9 )) + getDistance(P( 9 ),P( 4 ));
-        double L6 = getDistance(P( 3 ),P( 10 )) + getDistance(P( 10 ),P( 4 ));
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-      }
-      break;
-    case SMDSEntity_Quad_Pyramid:
-      if (len == 13){ // quadratic pyramid
-        double L1 = getDistance(P( 1 ),P( 6 )) + getDistance(P( 6 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 7 )) + getDistance(P( 7 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 8 )) + getDistance(P( 8 ),P( 4 ));
-        double L4 = getDistance(P( 4 ),P( 9 )) + getDistance(P( 9 ),P( 1 ));
-        double L5 = getDistance(P( 1 ),P( 10 )) + getDistance(P( 10 ),P( 5 ));
-        double L6 = getDistance(P( 2 ),P( 11 )) + getDistance(P( 11 ),P( 5 ));
-        double L7 = getDistance(P( 3 ),P( 12 )) + getDistance(P( 12 ),P( 5 ));
-        double L8 = getDistance(P( 4 ),P( 13 )) + getDistance(P( 13 ),P( 5 ));
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-        aVal = Min(aVal,Min(L7,L8));
-      }
-      break;
-    case SMDSEntity_Quad_Penta:
-    case SMDSEntity_BiQuad_Penta:
-      if (len >= 15){ // quadratic pentahedron
-        double L1 = getDistance(P( 1 ),P( 7 )) + getDistance(P( 7 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 8 )) + getDistance(P( 8 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 9 )) + getDistance(P( 9 ),P( 1 ));
-        double L4 = getDistance(P( 4 ),P( 10 )) + getDistance(P( 10 ),P( 5 ));
-        double L5 = getDistance(P( 5 ),P( 11 )) + getDistance(P( 11 ),P( 6 ));
-        double L6 = getDistance(P( 6 ),P( 12 )) + getDistance(P( 12 ),P( 4 ));
-        double L7 = getDistance(P( 1 ),P( 13 )) + getDistance(P( 13 ),P( 4 ));
-        double L8 = getDistance(P( 2 ),P( 14 )) + getDistance(P( 14 ),P( 5 ));
-        double L9 = getDistance(P( 3 ),P( 15 )) + getDistance(P( 15 ),P( 6 ));
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-        aVal = Min(aVal,Min(Min(L7,L8),L9));
-      }
-      break;
-    case SMDSEntity_Quad_Hexa:
-    case SMDSEntity_TriQuad_Hexa:
-      if (len >= 20) { // quadratic hexahedron
-        double L1 = getDistance(P( 1 ),P( 9 )) + getDistance(P( 9 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 10 )) + getDistance(P( 10 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 11 )) + getDistance(P( 11 ),P( 4 ));
-        double L4 = getDistance(P( 4 ),P( 12 )) + getDistance(P( 12 ),P( 1 ));
-        double L5 = getDistance(P( 5 ),P( 13 )) + getDistance(P( 13 ),P( 6 ));
-        double L6 = getDistance(P( 6 ),P( 14 )) + getDistance(P( 14 ),P( 7 ));
-        double L7 = getDistance(P( 7 ),P( 15 )) + getDistance(P( 15 ),P( 8 ));
-        double L8 = getDistance(P( 8 ),P( 16 )) + getDistance(P( 16 ),P( 5 ));
-        double L9 = getDistance(P( 1 ),P( 17 )) + getDistance(P( 17 ),P( 5 ));
-        double L10= getDistance(P( 2 ),P( 18 )) + getDistance(P( 18 ),P( 6 ));
-        double L11= getDistance(P( 3 ),P( 19 )) + getDistance(P( 19 ),P( 7 ));
-        double L12= getDistance(P( 4 ),P( 20 )) + getDistance(P( 20 ),P( 8 ));
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-        aVal = Min(aVal,Min(Min(L7,L8),Min(L9,L10)));
-        aVal = Min(aVal,Min(L11,L12));
-      }
-      break;
-    case SMDSEntity_Polygon:
-      if ( len > 1 ) {
-        aVal = getDistance( P(1), P( P.size() ));
-        for ( size_t i = 1; i < P.size(); ++i )
-          aVal = Min( aVal, getDistance( P( i ), P( i+1 )));
-      }
-      break;
-    case SMDSEntity_Quad_Polygon:
-      if ( len > 2 ) {
-        aVal = getDistance( P(1), P( P.size() )) + getDistance( P(P.size()), P( P.size()-1 ));
-        for ( size_t i = 1; i < P.size()-1; i += 2 )
-          aVal = Min( aVal, getDistance( P( i ), P( i+1 )) + getDistance( P( i+1 ), P( i+2 )));
-      }
-      break;
-    case SMDSEntity_Hexagonal_Prism:
-      if (len == 12) { // hexagonal prism
-        double L1 = getDistance(P( 1 ),P( 2 ));
-        double L2 = getDistance(P( 2 ),P( 3 ));
-        double L3 = getDistance(P( 3 ),P( 4 ));
-        double L4 = getDistance(P( 4 ),P( 5 ));
-        double L5 = getDistance(P( 5 ),P( 6 ));
-        double L6 = getDistance(P( 6 ),P( 1 ));
-
-        double L7 = getDistance(P( 7 ), P( 8 ));
-        double L8 = getDistance(P( 8 ), P( 9 ));
-        double L9 = getDistance(P( 9 ), P( 10 ));
-        double L10= getDistance(P( 10 ),P( 11 ));
-        double L11= getDistance(P( 11 ),P( 12 ));
-        double L12= getDistance(P( 12 ),P( 7 ));
-
-        double L13 = getDistance(P( 1 ),P( 7 ));
-        double L14 = getDistance(P( 2 ),P( 8 ));
-        double L15 = getDistance(P( 3 ),P( 9 ));
-        double L16 = getDistance(P( 4 ),P( 10 ));
-        double L17 = getDistance(P( 5 ),P( 11 ));
-        double L18 = getDistance(P( 6 ),P( 12 ));
-        aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
-        aVal = Min(aVal, Min(Min(Min(L7,L8),Min(L9,L10)),Min(L11,L12)));
-        aVal = Min(aVal, Min(Min(Min(L13,L14),Min(L15,L16)),Min(L17,L18)));
-      }
-      break;
-    case SMDSEntity_Polyhedra:
-    {
+  switch (aType) {
+  case SMDSEntity_Edge:
+    if (len == 2)
+      aVal = getDistance( P( 1 ), P( 2 ) );
+    break;
+  case SMDSEntity_Quad_Edge:
+    if (len == 3) // quadratic edge
+      aVal = getDistance(P( 1 ),P( 3 )) + getDistance(P( 3 ),P( 2 ));
+    break;
+  case SMDSEntity_Triangle:
+    if (len == 3){ // triangles
+      double L1 = getDistance(P( 1 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 1 ));
+      aVal = Min(L1,Min(L2,L3));
     }
     break;
-    default:
-      return 0;
+  case SMDSEntity_Quadrangle:
+    if (len == 4){ // quadrangles
+      double L1 = getDistance(P( 1 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 4 ));
+      double L4 = getDistance(P( 4 ),P( 1 ));
+      aVal = Min(Min(L1,L2),Min(L3,L4));
+    }
+    break;
+  case SMDSEntity_Quad_Triangle:
+  case SMDSEntity_BiQuad_Triangle:
+    if (len >= 6){ // quadratic triangles
+      double L1 = getDistance(P( 1 ),P( 2 )) + getDistance(P( 2 ),P( 3 ));
+      double L2 = getDistance(P( 3 ),P( 4 )) + getDistance(P( 4 ),P( 5 ));
+      double L3 = getDistance(P( 5 ),P( 6 )) + getDistance(P( 6 ),P( 1 ));
+      aVal = Min(L1,Min(L2,L3));
+    }
+    break;
+  case SMDSEntity_Quad_Quadrangle:
+  case SMDSEntity_BiQuad_Quadrangle:
+    if (len >= 8){ // quadratic quadrangles
+      double L1 = getDistance(P( 1 ),P( 2 )) + getDistance(P( 2 ),P( 3 ));
+      double L2 = getDistance(P( 3 ),P( 4 )) + getDistance(P( 4 ),P( 5 ));
+      double L3 = getDistance(P( 5 ),P( 6 )) + getDistance(P( 6 ),P( 7 ));
+      double L4 = getDistance(P( 7 ),P( 8 )) + getDistance(P( 8 ),P( 1 ));
+      aVal = Min(Min(L1,L2),Min(L3,L4));
+    }
+    break;
+  case SMDSEntity_Tetra:
+    if (len == 4){ // tetrahedra
+      double L1 = getDistance(P( 1 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 1 ));
+      double L4 = getDistance(P( 1 ),P( 4 ));
+      double L5 = getDistance(P( 2 ),P( 4 ));
+      double L6 = getDistance(P( 3 ),P( 4 ));
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
     }
+    break;
+  case SMDSEntity_Pyramid:
+    if (len == 5){ // pyramid
+      double L1 = getDistance(P( 1 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 4 ));
+      double L4 = getDistance(P( 4 ),P( 1 ));
+      double L5 = getDistance(P( 1 ),P( 5 ));
+      double L6 = getDistance(P( 2 ),P( 5 ));
+      double L7 = getDistance(P( 3 ),P( 5 ));
+      double L8 = getDistance(P( 4 ),P( 5 ));
 
-    if (aVal < 0 ) {
-      return 0.;
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+      aVal = Min(aVal,Min(L7,L8));
     }
+    break;
+  case SMDSEntity_Penta:
+    if (len == 6) { // pentahedron
+      double L1 = getDistance(P( 1 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 1 ));
+      double L4 = getDistance(P( 4 ),P( 5 ));
+      double L5 = getDistance(P( 5 ),P( 6 ));
+      double L6 = getDistance(P( 6 ),P( 4 ));
+      double L7 = getDistance(P( 1 ),P( 4 ));
+      double L8 = getDistance(P( 2 ),P( 5 ));
+      double L9 = getDistance(P( 3 ),P( 6 ));
 
-    if ( myPrecision >= 0 )
-    {
-      double prec = pow( 10., (double)( myPrecision ) );
-      aVal = floor( aVal * prec + 0.5 ) / prec;
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+      aVal = Min(aVal,Min(Min(L7,L8),L9));
     }
+    break;
+  case SMDSEntity_Hexa:
+    if (len == 8){ // hexahedron
+      double L1 = getDistance(P( 1 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 4 ));
+      double L4 = getDistance(P( 4 ),P( 1 ));
+      double L5 = getDistance(P( 5 ),P( 6 ));
+      double L6 = getDistance(P( 6 ),P( 7 ));
+      double L7 = getDistance(P( 7 ),P( 8 ));
+      double L8 = getDistance(P( 8 ),P( 5 ));
+      double L9 = getDistance(P( 1 ),P( 5 ));
+      double L10= getDistance(P( 2 ),P( 6 ));
+      double L11= getDistance(P( 3 ),P( 7 ));
+      double L12= getDistance(P( 4 ),P( 8 ));
 
-    return aVal;
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+      aVal = Min(aVal,Min(Min(L7,L8),Min(L9,L10)));
+      aVal = Min(aVal,Min(L11,L12));
+    }
+    break;
+  case SMDSEntity_Quad_Tetra:
+    if (len == 10){ // quadratic tetrahedron
+      double L1 = getDistance(P( 1 ),P( 5 )) + getDistance(P( 5 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 6 )) + getDistance(P( 6 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 7 )) + getDistance(P( 7 ),P( 1 ));
+      double L4 = getDistance(P( 1 ),P( 8 )) + getDistance(P( 8 ),P( 4 ));
+      double L5 = getDistance(P( 2 ),P( 9 )) + getDistance(P( 9 ),P( 4 ));
+      double L6 = getDistance(P( 3 ),P( 10 )) + getDistance(P( 10 ),P( 4 ));
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+    }
+    break;
+  case SMDSEntity_Quad_Pyramid:
+    if (len == 13){ // quadratic pyramid
+      double L1 = getDistance(P( 1 ),P( 6 )) + getDistance(P( 6 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 7 )) + getDistance(P( 7 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 8 )) + getDistance(P( 8 ),P( 4 ));
+      double L4 = getDistance(P( 4 ),P( 9 )) + getDistance(P( 9 ),P( 1 ));
+      double L5 = getDistance(P( 1 ),P( 10 )) + getDistance(P( 10 ),P( 5 ));
+      double L6 = getDistance(P( 2 ),P( 11 )) + getDistance(P( 11 ),P( 5 ));
+      double L7 = getDistance(P( 3 ),P( 12 )) + getDistance(P( 12 ),P( 5 ));
+      double L8 = getDistance(P( 4 ),P( 13 )) + getDistance(P( 13 ),P( 5 ));
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+      aVal = Min(aVal,Min(L7,L8));
+    }
+    break;
+  case SMDSEntity_Quad_Penta:
+  case SMDSEntity_BiQuad_Penta:
+    if (len >= 15){ // quadratic pentahedron
+      double L1 = getDistance(P( 1 ),P( 7 )) + getDistance(P( 7 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 8 )) + getDistance(P( 8 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 9 )) + getDistance(P( 9 ),P( 1 ));
+      double L4 = getDistance(P( 4 ),P( 10 )) + getDistance(P( 10 ),P( 5 ));
+      double L5 = getDistance(P( 5 ),P( 11 )) + getDistance(P( 11 ),P( 6 ));
+      double L6 = getDistance(P( 6 ),P( 12 )) + getDistance(P( 12 ),P( 4 ));
+      double L7 = getDistance(P( 1 ),P( 13 )) + getDistance(P( 13 ),P( 4 ));
+      double L8 = getDistance(P( 2 ),P( 14 )) + getDistance(P( 14 ),P( 5 ));
+      double L9 = getDistance(P( 3 ),P( 15 )) + getDistance(P( 15 ),P( 6 ));
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+      aVal = Min(aVal,Min(Min(L7,L8),L9));
+    }
+    break;
+  case SMDSEntity_Quad_Hexa:
+  case SMDSEntity_TriQuad_Hexa:
+    if (len >= 20) { // quadratic hexahedron
+      double L1 = getDistance(P( 1 ),P( 9 )) + getDistance(P( 9 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 10 )) + getDistance(P( 10 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 11 )) + getDistance(P( 11 ),P( 4 ));
+      double L4 = getDistance(P( 4 ),P( 12 )) + getDistance(P( 12 ),P( 1 ));
+      double L5 = getDistance(P( 5 ),P( 13 )) + getDistance(P( 13 ),P( 6 ));
+      double L6 = getDistance(P( 6 ),P( 14 )) + getDistance(P( 14 ),P( 7 ));
+      double L7 = getDistance(P( 7 ),P( 15 )) + getDistance(P( 15 ),P( 8 ));
+      double L8 = getDistance(P( 8 ),P( 16 )) + getDistance(P( 16 ),P( 5 ));
+      double L9 = getDistance(P( 1 ),P( 17 )) + getDistance(P( 17 ),P( 5 ));
+      double L10= getDistance(P( 2 ),P( 18 )) + getDistance(P( 18 ),P( 6 ));
+      double L11= getDistance(P( 3 ),P( 19 )) + getDistance(P( 19 ),P( 7 ));
+      double L12= getDistance(P( 4 ),P( 20 )) + getDistance(P( 20 ),P( 8 ));
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+      aVal = Min(aVal,Min(Min(L7,L8),Min(L9,L10)));
+      aVal = Min(aVal,Min(L11,L12));
+    }
+    break;
+  case SMDSEntity_Polygon:
+    if ( len > 1 ) {
+      aVal = getDistance( P(1), P( P.size() ));
+      for ( size_t i = 1; i < P.size(); ++i )
+        aVal = Min( aVal, getDistance( P( i ), P( i+1 )));
+    }
+    break;
+  case SMDSEntity_Quad_Polygon:
+    if ( len > 2 ) {
+      aVal = getDistance( P(1), P( P.size() )) + getDistance( P(P.size()), P( P.size()-1 ));
+      for ( size_t i = 1; i < P.size()-1; i += 2 )
+        aVal = Min( aVal, getDistance( P( i ), P( i+1 )) + getDistance( P( i+1 ), P( i+2 )));
+    }
+    break;
+  case SMDSEntity_Hexagonal_Prism:
+    if (len == 12) { // hexagonal prism
+      double L1 = getDistance(P( 1 ),P( 2 ));
+      double L2 = getDistance(P( 2 ),P( 3 ));
+      double L3 = getDistance(P( 3 ),P( 4 ));
+      double L4 = getDistance(P( 4 ),P( 5 ));
+      double L5 = getDistance(P( 5 ),P( 6 ));
+      double L6 = getDistance(P( 6 ),P( 1 ));
+
+      double L7 = getDistance(P( 7 ), P( 8 ));
+      double L8 = getDistance(P( 8 ), P( 9 ));
+      double L9 = getDistance(P( 9 ), P( 10 ));
+      double L10= getDistance(P( 10 ),P( 11 ));
+      double L11= getDistance(P( 11 ),P( 12 ));
+      double L12= getDistance(P( 12 ),P( 7 ));
+
+      double L13 = getDistance(P( 1 ),P( 7 ));
+      double L14 = getDistance(P( 2 ),P( 8 ));
+      double L15 = getDistance(P( 3 ),P( 9 ));
+      double L16 = getDistance(P( 4 ),P( 10 ));
+      double L17 = getDistance(P( 5 ),P( 11 ));
+      double L18 = getDistance(P( 6 ),P( 12 ));
+      aVal = Min(Min(Min(L1,L2),Min(L3,L4)),Min(L5,L6));
+      aVal = Min(aVal, Min(Min(Min(L7,L8),Min(L9,L10)),Min(L11,L12)));
+      aVal = Min(aVal, Min(Min(Min(L13,L14),Min(L15,L16)),Min(L17,L18)));
+    }
+    break;
+  case SMDSEntity_Polyhedra:
+  {
+  }
+  break;
+  default:
+    return 0;
+  }
 
+  if (aVal < 0 ) {
+    return 0.;
   }
-  return 0.;
+
+  if ( myPrecision >= 0 )
+  {
+    double prec = pow( 10., (double)( myPrecision ) );
+    aVal = floor( aVal * prec + 0.5 ) / prec;
+  }
+
+  return aVal;
 }
 
 double Length2D::GetBadRate( double Value, int /*nbNodes*/ ) const
@@ -1908,6 +1908,97 @@ void Length2D::GetValues(TValues& theValues)
   }
 }
 
+//================================================================================
+/*
+  Class       : Deflection2D
+  Description : Functor for calculating number of faces conneted to the edge
+*/
+//================================================================================
+
+double Deflection2D::GetValue( const TSequenceOfXYZ& P )
+{
+  if ( myMesh && P.getElement() )
+  {
+    // get underlying surface
+    if ( myShapeIndex != P.getElement()->getshapeId() )
+    {
+      mySurface.Nullify();
+      myShapeIndex = P.getElement()->getshapeId();
+      const TopoDS_Shape& S =
+        static_cast< const SMESHDS_Mesh* >( myMesh )->IndexToShape( myShapeIndex );
+      if ( !S.IsNull() && S.ShapeType() == TopAbs_FACE )
+      {
+        mySurface = new ShapeAnalysis_Surface( BRep_Tool::Surface( TopoDS::Face( S )));
+
+        GeomLib_IsPlanarSurface isPlaneCheck( mySurface->Surface() );
+        if ( isPlaneCheck.IsPlanar() )
+          myPlane.reset( new gp_Pln( isPlaneCheck.Plan() ));
+        else
+          myPlane.reset();
+      }
+    }
+    // project gravity center to the surface
+    if ( !mySurface.IsNull() )
+    {
+      gp_XYZ gc(0,0,0);
+      gp_XY  uv(0,0);
+      int nbUV = 0;
+      for ( size_t i = 0; i < P.size(); ++i )
+      {
+        gc += P(i+1);
+
+        if ( const SMDS_FacePosition* fPos = dynamic_cast<const SMDS_FacePosition*>
+             ( P.getElement()->GetNode( i )->GetPosition() ))
+        {
+          uv.ChangeCoord(1) += fPos->GetUParameter();
+          uv.ChangeCoord(2) += fPos->GetVParameter();
+          ++nbUV;
+        }
+      }
+      gc /= P.size();
+      if ( nbUV ) uv /= nbUV;
+
+      double maxLen = MaxElementLength2D().GetValue( P );
+      double    tol = 1e-3 * maxLen;
+      double dist;
+      if ( myPlane )
+      {
+        dist = myPlane->Distance( gc );
+        if ( dist < tol )
+          dist = 0;
+      }
+      else
+      {
+        if ( uv.X() != 0 && uv.Y() != 0 ) // faster way
+          mySurface->NextValueOfUV( uv, gc, tol, 0.5 * maxLen );
+        else
+          mySurface->ValueOfUV( gc, tol );
+        dist = mySurface->Gap();
+      }
+      return Round( dist );
+    }
+  }
+  return 0;
+}
+
+void Deflection2D::SetMesh( const SMDS_Mesh* theMesh )
+{
+  NumericalFunctor::SetMesh( dynamic_cast<const SMESHDS_Mesh* >( theMesh ));
+  myShapeIndex = -100;
+  myPlane.reset();
+}
+
+SMDSAbs_ElementType Deflection2D::GetType() const
+{
+  return SMDSAbs_Face;
+}
+
+double Deflection2D::GetBadRate( double Value, int /*nbNodes*/ ) const
+{
+  // meaningless as it is not quality control functor
+  return Value;
+}
+
 //================================================================================
 /*
   Class       : MultiConnection
index 74a4a263d270b1d0efb9f25506e7ccab49fe0bbe..452b27a39216186bc307386159484f824f34b9ca 100644 (file)
@@ -27,7 +27,6 @@
 
 #include "SMESH_TypeDefs.hxx"
 
-#include <BRepClass3d_SolidClassifier.hxx>
 #include <Bnd_B3d.hxx>
 #include <GeomAPI_ProjectPointOnCurve.hxx>
 #include <GeomAPI_ProjectPointOnSurf.hxx>
@@ -54,6 +53,9 @@ class SMESHDS_Mesh;
 class SMESHDS_SubMesh;
 class SMESHDS_GroupBase;
 
+class BRepClass3d_SolidClassifier;
+class ShapeAnalysis_Surface;
+class gp_Pln;
 class gp_Pnt;
 
 namespace SMESH{
@@ -293,7 +295,7 @@ namespace SMESH{
     */
     class SMESHCONTROLS_EXPORT Length2D: public virtual NumericalFunctor{
     public:
-      virtual double GetValue( long theElementId );
+      virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
       virtual SMDSAbs_ElementType GetType() const;
       struct Value{
@@ -307,6 +309,22 @@ namespace SMESH{
     };
     typedef boost::shared_ptr<Length2D> Length2DPtr;
 
+    /*
+      Class       : Deflection2D
+      Description : Functor for calculating distance between a face and geometry
+    */
+    class SMESHCONTROLS_EXPORT Deflection2D: public virtual NumericalFunctor{
+    public:
+      virtual void   SetMesh( const SMDS_Mesh* theMesh );
+      virtual double GetValue( const TSequenceOfXYZ& thePoints );
+      virtual double GetBadRate( double Value, int nbNodes ) const;
+      virtual SMDSAbs_ElementType GetType() const;
+    private:
+      Handle(ShapeAnalysis_Surface) mySurface;
+      int                           myShapeIndex;
+      boost::shared_ptr<gp_Pln>     myPlane;
+    };
+
     /*
       Class       : MultiConnection
       Description : Functor for calculating number of faces connected to the edge
index 024a0b836d4e0bffc94543e0f958f1f77d9ad709..38cdcc778c430767c2c89848eb803f18d5a0195e 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH Driver : implementaion of driver for reading and writing      
+//  SMESH Driver : implementation of driver for reading and writing
 //  File   : Mesh_Reader.cxx
 //  Module : SMESH
 //
index 8bcd157cc302f0d6dd70550e29ef871b478cc76e..d368336409fa369789fb62b9d4862ba21887f5ed 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH Driver : implementaion of driver for reading and writing  
+//  SMESH Driver : implementation of driver for reading and writing
 //  File   : Mesh_Reader.h
 //  Module : SMESH
 //
index e0892c77eba97d946cd90882a6332908a6d7618b..73b6247d2df2a86cede1c86cf1a93c0ab5e62611 100644 (file)
@@ -247,7 +247,7 @@ int GmfOpenMesh(const char *FilNam, int mod, ...)
                 return(0);
         }
 
-        /* Open the file in the required mod and initialyse the mesh structure */
+        /* Open the file in the required mod and initialise the mesh structure */
 
         if(msh->mod == GmfRead)
         {
index 08c4d848d032e3c60f790f69019d5613a4007647..ff0e0f4ec8d2b7a0f8f9cf6f3e86481488af7dcd 100644 (file)
@@ -32,7 +32,7 @@ typedef boost::shared_ptr<DriverMED_Family> DriverMED_FamilyPtr;
 
 namespace DriverMED
 {
-  // Implemetation is in DriverMED_W_Field.cxx
+  // Implementation is in DriverMED_W_Field.cxx
 
   /*
    * Returns MED element geom type (MED::EGeometrieElement) by SMDS type
index f6d67ea597d72ee76eb19488b0b9f874c7c4bc52..a11ba4860bc88e09e8ef0f58ee1213ca38189fca 100644 (file)
@@ -93,7 +93,7 @@ DriverMED_Family
   return myType; 
 }
 
-const std::set< SMDSAbs_ElementType >&
+const ElemTypeSet&
 DriverMED_Family
 ::GetTypes() const
 {
index 1325617f13203d0b34b2e28223f5c52d59d0d6eb..c71ea7254622a777ad0336c91831083a5d965db3 100644 (file)
@@ -36,6 +36,7 @@
 #include "SMESHDS_SubMesh.hxx"
 #include "MED_Common.hxx"
 
+#include <boost/container/flat_set.hpp>
 #include <boost/shared_ptr.hpp>
 #include <set>
 #include <limits>
 #define NIG_BALL_FAMILY    INT_MAX-5
 #define NIG_GROUP_PREFIX "NOT_IN_GRP"
 
-typedef std::list<DriverMED_FamilyPtr               > DriverMED_FamilyPtrList;
-typedef std::map<int,SMESHDS_SubMesh*               > SMESHDS_SubMeshPtrMap;
-typedef std::list<SMESHDS_GroupBase*                > SMESHDS_GroupBasePtrList;
-typedef std::set<const SMDS_MeshElement*,TIDCompare > ElementsSet;
+typedef std::list<DriverMED_FamilyPtr                   > DriverMED_FamilyPtrList;
+typedef std::map<int,SMESHDS_SubMesh*                   > SMESHDS_SubMeshPtrMap;
+typedef std::list<SMESHDS_GroupBase*                    > SMESHDS_GroupBasePtrList;
+typedef std::set<const SMDS_MeshElement*,TIDCompare     > ElementsSet;
+typedef boost::container::flat_set< SMDSAbs_ElementType > ElemTypeSet;
 
 class MESHDRIVERMED_EXPORT DriverMED_Family
 {
@@ -113,7 +115,7 @@ class MESHDRIVERMED_EXPORT DriverMED_Family
 
   void SetType(const SMDSAbs_ElementType theType);
   SMDSAbs_ElementType GetType();
-  const std::set< SMDSAbs_ElementType >& GetTypes() const;
+  const ElemTypeSet&  GetTypes() const;
 
   bool MemberOf(std::string theGroupName) const;
 
@@ -126,9 +128,8 @@ class MESHDRIVERMED_EXPORT DriverMED_Family
 
   //! Split <theSubMesh> on some parts (families) on the basis of the elements type.
   static
-  DriverMED_FamilyPtrList 
-  SplitByType(SMESHDS_SubMesh* theSubMesh,
-              const int        theId);
+  DriverMED_FamilyPtrList SplitByType(SMESHDS_SubMesh* theSubMesh,
+                                      const int        theId);
 
 
   /*! Remove from <Elements> elements, common with <by>,
@@ -143,12 +144,12 @@ class MESHDRIVERMED_EXPORT DriverMED_Family
 
 
  private:
-  int                           myId;
-  SMDSAbs_ElementType           myType;
-  ElementsSet                   myElements;
-  MED::TStringSet               myGroupNames;
-  int                           myGroupAttributVal;
-  std::set<SMDSAbs_ElementType> myTypes; // Issue 0020576
+  int                 myId;
+  SMDSAbs_ElementType myType;
+  ElementsSet         myElements;
+  MED::TStringSet     myGroupNames;
+  int                 myGroupAttributVal;
+  ElemTypeSet         myTypes; // Issue 0020576
 };
 
 #endif
index b3c91db53016b0149fc8870e29f6c4201a26d41e..000316955a73241fe05852f971e80d25461f14b6 100644 (file)
@@ -1092,8 +1092,8 @@ list<TNameAndType> DriverMED_R_SMESHDS_Mesh::GetGroupNamesAndTypes()
     set<string>::const_iterator aGrNamesIter = aGroupNames.begin();
     for (; aGrNamesIter != aGroupNames.end(); aGrNamesIter++)
     {
-      const set< SMDSAbs_ElementType >& types = aFamily->GetTypes();
-      set< SMDSAbs_ElementType >::const_iterator type = types.begin();
+      const ElemTypeSet& types = aFamily->GetTypes();
+      ElemTypeSet::const_iterator type = types.begin();
       for ( ; type != types.end(); ++type )
       {
         TNameAndType aNameAndType = make_pair( *aGrNamesIter, *type );
@@ -1109,28 +1109,51 @@ list<TNameAndType> DriverMED_R_SMESHDS_Mesh::GetGroupNamesAndTypes()
 
 void DriverMED_R_SMESHDS_Mesh::GetGroup(SMESHDS_Group* theGroup)
 {
-  string aGroupName (theGroup->GetStoreName());
+  TFamilyVec * famVecPtr;
+
+  if ( myGroups2FamiliesMap.IsEmpty() ) // PAL23514
+  {
+    TFamilyVec famVector( 1 );
+    map<int, DriverMED_FamilyPtr>::iterator famIter = myFamilies.begin();
+    for ( ; famIter != myFamilies.end(); famIter++ )
+    {
+      DriverMED_FamilyPtr    family = famIter->second;
+      const MED::TStringSet& groups = family->GetGroupNames();
+      famVector[ 0 ] = family;
+      MED::TStringSet::const_iterator grpIter = groups.begin();
+      for ( ; grpIter != groups.end(); ++grpIter )
+      {
+        TCollection_AsciiString groupName = grpIter->c_str();
+        if (( famVecPtr = myGroups2FamiliesMap.ChangeSeek( groupName )))
+          famVecPtr->push_back( family );
+        else
+          myGroups2FamiliesMap.Bind( groupName, famVector );
+      }
+    }
+  }
+
+  const char* aGroupName = theGroup->GetStoreName();
   if(MYDEBUG) MESSAGE("Get Group " << aGroupName);
 
-  map<int, DriverMED_FamilyPtr>::iterator aFamsIter = myFamilies.begin();
-  for (; aFamsIter != myFamilies.end(); aFamsIter++)
+  if (( famVecPtr = myGroups2FamiliesMap.ChangeSeek( aGroupName )))
   {
-    DriverMED_FamilyPtr aFamily = (*aFamsIter).second;
-    if (aFamily->GetTypes().count( theGroup->GetType() ) && aFamily->MemberOf(aGroupName))
+    for ( size_t i = 0; i < famVecPtr->size(); ++i )
     {
-      const ElementsSet&           anElements = aFamily->GetElements();
-      ElementsSet::const_iterator anElemsIter = anElements.begin();
-      for (; anElemsIter != anElements.end(); anElemsIter++)
+      DriverMED_FamilyPtr aFamily = (*famVecPtr)[i];
+      if ( aFamily->GetTypes().count( theGroup->GetType() ))
       {
-        const SMDS_MeshElement * element = *anElemsIter;
-        if ( element->GetType() == theGroup->GetType() ) // Issue 0020576
-          theGroup->SMDSGroup().Add(element);
+        const ElementsSet&           anElements = aFamily->GetElements();
+        ElementsSet::const_iterator anElemsIter = anElements.begin();
+        for (; anElemsIter != anElements.end(); anElemsIter++)
+        {
+          const SMDS_MeshElement * element = *anElemsIter;
+          if ( element->GetType() == theGroup->GetType() ) // Issue 0020576
+            theGroup->SMDSGroup().Add(element);
+        }
+        int aGroupAttrVal = aFamily->GetGroupAttributVal();
+        if( aGroupAttrVal != 0 )
+          theGroup->SetColorGroup(aGroupAttrVal);
       }
-      int aGroupAttrVal = aFamily->GetGroupAttributVal();
-      if( aGroupAttrVal != 0)
-        theGroup->SetColorGroup(aGroupAttrVal);
-//       if ( element ) -- Issue 0020576
-//         theGroup->SetType( theGroup->SMDSGroup().GetType() );
     }
   }
 }
index bd8fa80b05b2ce8ba1eb4a6356ef4573d7fbed66..ba7994e420894d0cb49e4b98427219dbe5aed871 100644 (file)
 #include <list>
 #include <map>
 
+#include <NCollection_DataMap.hxx>
+#include <TCollection_AsciiString.hxx>
+
 class SMESHDS_Mesh;
 class SMESHDS_Group;
 class SMESHDS_SubMesh;
 
-typedef std::pair< std::string, SMDSAbs_ElementType > TNameAndType;
+typedef std::vector< DriverMED_FamilyPtr >                         TFamilyVec;
+typedef std::pair< std::string, SMDSAbs_ElementType >              TNameAndType;
+typedef NCollection_DataMap< TCollection_AsciiString, TFamilyVec > TName2Falilies;
 
 class MESHDRIVERMED_EXPORT DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {
@@ -56,9 +61,9 @@ class MESHDRIVERMED_EXPORT DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
   void SetMeshName(std::string theMeshName);
 
  private:
-  std::string myMeshName;
+  std::string                        myMeshName;
   std::map<int, DriverMED_FamilyPtr> myFamilies;
-
+  TName2Falilies                     myGroups2FamiliesMap;
 };
 
 #endif
index b012325bcbe92b46f501ceed7211296e9f8b7985..57e8edf19482b6db36f39ebea2646fcad0a6d9e5 100644 (file)
@@ -358,7 +358,7 @@ Driver_Mesh::Status DriverMED_W_Field::Perform()
   return DRS_OK;
 }
 
-namespace DriverMED // Implemetation of fuctions declared in DriverMED.hxx
+namespace DriverMED // Implementation of functions declared in DriverMED.hxx
 {
   //================================================================================
   /*!
index 82722c15f3e4f327e412a593d228d6eaaa165c63..75ebf667aef77b4fd8a0999a6abb512c48e3385a 100644 (file)
@@ -780,6 +780,13 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         continue;
       }
 
+      // build map of family numbers for this type
+      if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
+      {
+        fillElemFamilyMap( anElemFamMap, aFamilies, aElemTypeData->_smdsType );
+        isElemFamMapBuilt[ aElemTypeData->_smdsType ] = true;
+      }
+
       // iterator on elements of a current type
       SMDS_ElemIteratorPtr elemIterator;
       int iElem = 0;
@@ -853,7 +860,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
       else if (aElemTypeData->_geomType == ePOLYEDRE )
       {
         elemIterator = myMesh->elementGeomIterator( SMDSGeom_POLYHEDRA );
-        
+
         if ( nbPolyhedronNodes == 0 ) {
           // Count nb of nodes
           while ( elemIterator->more() ) {
@@ -930,13 +937,6 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         // allocate data arrays
         PBallInfo aBallInfo = myMed->CrBallInfo( aMeshInfo, aElemTypeData->_nbElems );
 
-        // build map of family numbers for this type
-        if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
-        {
-          fillElemFamilyMap( anElemFamMap, aFamilies, aElemTypeData->_smdsType );
-          isElemFamMapBuilt[ aElemTypeData->_smdsType ] = true;
-        }
-
         elemIterator = myMesh->elementsIterator( SMDSAbs_Ball );
         while ( elemIterator->more() )
         {
@@ -976,12 +976,6 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
                                                  theConnMode,
                                                  theIsElemNum,
                                                  theIsElemNames);
-        // build map of family numbers for this type
-        if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
-        {
-          fillElemFamilyMap( anElemFamMap, aFamilies, aElemTypeData->_smdsType );
-          isElemFamMapBuilt[ aElemTypeData->_smdsType ] = true;
-        }
 
         TInt aNbNodes = MED::GetNbNodes(aElemTypeData->_geomType);
         elemIterator = myMesh->elementsIterator( aElemTypeData->_smdsType );
index 00eb32bdf3410f694946450c13c5ed022973668a..623cc0e3f70362f71e1a7925d395931b9e0a73ed 100644 (file)
@@ -44,7 +44,7 @@
 #endif
 
 namespace MED{
-  // enum EVersion sould be synchronized with enum MED_VERSION in SMESH_Mesh.idl (.hh)
+  // enum EVersion should be synchronized with enum MED_VERSION in SMESH_Mesh.idl (.hh)
   // i.e. same positive values!
   enum EVersion {eVUnknown = -1, eV2_1, eV2_2, eLATEST,
                  eMINOR_0, eMINOR_1, eMINOR_2, eMINOR_3, eMINOR_4, eMINOR_5, eMINOR_6, eMINOR_7, eMINOR_8, eMINOR_9};
index b6029949b56eddc6e0c9f3ee15c07551ad47a6f8..534e35bd8d0b8c5446e88c996e9f29b09e1f4b59 100644 (file)
@@ -181,7 +181,7 @@ namespace MED
   typedef TIntVector TElemNum;
   typedef SharedPtr<TElemNum> PElemNum;
   
-  //! Define a parent class for all MED entities that describes mesh entites such as nodes and cells.
+  //! Define a parent class for all MED entities that describes mesh entities such as nodes and cells.
   struct MEDWRAPPER_EXPORT TElemInfo: virtual TBase
   {
     PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh
@@ -191,7 +191,7 @@ namespace MED
     TInt myNbElem; //<! Number of corresponding mesh entities
     TInt GetNbElem() const { return myNbElem;} //! Get number of mesh elements
     
-    //! Defines sequence MED Family indexes for corresponding mesh entites
+    //! Defines sequence MED Family indexes for corresponding mesh entities
     PElemNum myFamNum; 
     //! Get number of a MED FAMILY by order number of the mesh element
     TInt GetFamNum(TInt theId) const;
@@ -218,7 +218,7 @@ namespace MED
 
     //! Defines if the mesh elements are named
     EBooleen myIsElemNames;
-    //! Let know if the mesh elements havew names
+    //! Let know if the mesh elements have names
     EBooleen IsElemNames() const { return myIsElemNames;}
 
     //! Contains sequence of the names for the mesh elements
@@ -1047,7 +1047,7 @@ namespace MED
     void SetGrilleStructure(TInt theAxis,TInt theNb);
     
     /*!
-     *Defines sequence MED Family indexes for corresponding mesh entites
+     *Defines sequence MED Family indexes for corresponding mesh entities
      */
     TElemNum myFamNum; 
     //! Get number of a MED FAMILY by order number of the mesh element
@@ -1056,7 +1056,7 @@ namespace MED
     void SetFamNum(TInt theId, TInt theVal);
     
     /*!
-     *Defines sequence MED Family indexes for sub entites
+     *Defines sequence MED Family indexes for sub entities
      */
     TElemNum myFamSubNum; 
     //! Get number of a MED FAMILY by order number of sub element
index 8a7075524156de517b11be3ff984053c8b786985..6bfb2419187b4ff78f5ba71673efdfe6a6c0877e 100644 (file)
@@ -800,7 +800,7 @@ namespace MED
 
 
     //----------------------------------------------------------------------------
-    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
     virtual 
     void
     GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
@@ -808,13 +808,13 @@ namespace MED
                       const TKey2Gauss& theKey2Gauss,
                       TErr* theErr = NULL) = 0;
     
-    //! Write the values for MEDWrapper MED TIEMSTAMP to defined MED file
+    //! Write the values for MEDWrapper MED TIMESTAMP to defined MED file
     virtual 
     void
     SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
                       TErr* theErr = NULL) = 0;
     
-    //! Creates the values for MEDWrapper MED TIEMSTAMP representation
+    //! Creates the values for MEDWrapper MED TIMESTAMP representation
     virtual
     PTimeStampValueBase
     CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
@@ -822,27 +822,27 @@ namespace MED
                      const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
                      EModeSwitch theMode = eFULL_INTERLACE) = 0;
 
-    //! Creates the values for MEDWrapper MED TIEMSTAMP representation
+    //! Creates the values for MEDWrapper MED TIMESTAMP representation
     virtual
     PTimeStampValueBase
     CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
                      const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
                      EModeSwitch theMode = eFULL_INTERLACE);
 
-    //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation
+    //! A copy-constructor for the values for MEDWrapper MED TIMESTAMP representation
     virtual 
     PTimeStampValueBase
     CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
                      const PTimeStampValueBase& theInfo,
                      ETypeChamp theTypeChamp) = 0;
     
-    //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation
+    //! A copy-constructor for the values for MEDWrapper MED TIMESTAMP representation
     virtual 
     PTimeStampValueBase
     CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
                      const PTimeStampValueBase& theInfo);
     
-    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
     PTimeStampValueBase
     GetPTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
                        const TMKey2Profile& theMKey2Profile,
@@ -851,7 +851,7 @@ namespace MED
     
     //----------------------------------------------------------------------------
     // Backward compatibility  declarations
-    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
     virtual 
     void
     GetTimeStampVal(const PTimeStampVal& theVal,
@@ -859,26 +859,26 @@ namespace MED
                     const TKey2Gauss& theKey2Gauss,
                     TErr* theErr = NULL);
     
-    //! Write the values for MEDWrapper MED TIEMSTAMP to defined MED file
+    //! Write the values for MEDWrapper MED TIMESTAMP to defined MED file
     virtual 
     void
     SetTimeStamp(const PTimeStampVal& theVal,
                  TErr* theErr = NULL);
     
-    //! Creates the values for MEDWrapper MED TIEMSTAMP representation
+    //! Creates the values for MEDWrapper MED TIMESTAMP representation
     virtual
     PTimeStampVal
     CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
                    const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
                    EModeSwitch theMode = eFULL_INTERLACE);
 
-    //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation
+    //! A copy-constructor for the values for MEDWrapper MED TIMESTAMP representation
     virtual 
     PTimeStampVal
     CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
                    const PTimeStampVal& theInfo);
     
-    //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file
+    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
     PTimeStampVal
     GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
                      const TMKey2Profile& theMKey2Profile,
index 48ad71c59cebebd0e143981c170ac47fb84ebb44..6bd4e2c629a2000a66d4db19e085e5136b971abf 100644 (file)
@@ -844,11 +844,9 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       break;
     }
     case eLength2D:
-    {
       myFunctor.reset(new SMESH::Controls::Length2D());
       myControlActor = my2DActor;
       break;
-    }
     case eFreeBorders:
       myFunctor.reset(new SMESH::Controls::FreeBorders());
       myControlActor = my1DActor;
@@ -958,6 +956,14 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       myControlActor = my3DActor;
       break;
     }
+    case eDeflection2D:
+    {
+      SMESH::Controls::Deflection2D* aControl = new SMESH::Controls::Deflection2D();
+      aControl->SetPrecision( myControlsPrecision );
+      myFunctor.reset( aControl );
+      myControlActor = my2DActor;
+      break;
+    }
     case eBareBorderVolume:
     {
       myFunctor.reset(new SMESH::Controls::BareBorderVolume());
@@ -1432,6 +1438,10 @@ double* SMESH_ActorDef::GetNodeCoord(int theObjID)
   return myPickableActor->GetNodeCoord(theObjID);
 }
 
+int SMESH_ActorDef::GetNodeVtkId(int theObjID)
+{
+  return myPickableActor->GetNodeVtkId(theObjID);
+}
 
 int SMESH_ActorDef::GetElemObjId(int theVtkID)
 {
index f49d55cbbbe27377753c29b53f0f2e654627ffa7..e8818e4d50b344f94edbb1feef52b8383d1c4e75 100644 (file)
@@ -141,7 +141,7 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
   virtual void SetFacesOrientation3DVectors(bool theState) = 0;
   virtual bool GetFacesOrientation3DVectors() = 0;
 
-  enum eControl{eNone, eLength, eLength2D, eFreeBorders, eFreeEdges, eFreeNodes,
+  enum eControl{eNone, eLength, eLength2D, eDeflection2D, eFreeBorders, eFreeEdges, eFreeNodes,
                 eFreeFaces, eMultiConnection, eArea, eTaper, eAspectRatio,
                 eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D,
                 eMaxElementLength2D, eMaxElementLength3D, eBareBorderFace, eBareBorderVolume,
index dd8879ec6527b3fd4b6965a7eb33e5b66abd2c73..3b9d9c68f97a4de811e5531ed78b268ce4ddf815 100644 (file)
@@ -150,6 +150,7 @@ class SMESH_ActorDef : public SMESH_Actor
 
   virtual int GetNodeObjId(int theVtkID);
   virtual double* GetNodeCoord(int theObjID);
+  virtual int GetNodeVtkId(int theObjID);
 
   virtual int GetElemObjId(int theVtkID);
   virtual vtkCell* GetElemCell(int theObjID);
index cfe6159a2c0e7e4484c444878060473940d275f2..6ef8c4d6112ea2f68167da82ab0ea1e836dae461 100644 (file)
@@ -861,6 +861,12 @@ SMESH_DeviceActor
   return aCoord;
 }
 
+int
+SMESH_DeviceActor
+::GetNodeVtkId(int theObjID) 
+{
+  return myVisualObj->GetNodeVTKId(theObjID);
+}
 
 int
 SMESH_DeviceActor
index 1b8ceb48ebe216b8bca4876a5c0628dd8e6fae6c..30d7c8c42fad16257bb7734e0243be1b8325e84e 100644 (file)
@@ -70,6 +70,7 @@ class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{
 
   virtual int GetNodeObjId(int theVtkID);
   virtual double* GetNodeCoord(int theObjID);
+  virtual int GetNodeVtkId(int theObjID);
 
   virtual int GetElemObjId(int theVtkID);
   virtual vtkCell* GetElemCell(int theObjID);
index 21b47e65a43addc4e7e70ef6cd13ffa2ea11421a..25b10cedc3121486d077e65d2f7ea951d0a4c0a7 100644 (file)
@@ -80,7 +80,7 @@ int SMESH_ExtractGeometry::RequestData(vtkInformation *vtkNotUsed(request),
   vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
   vtkInformation *outInfo = outputVector->GetInformationObject(0);
 
-  // get the input and ouptut
+  // get the input and output
   vtkDataSet *input =
     vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT()));
   vtkUnstructuredGrid *output =
index 3060141c23f47221f4ec47e384b3c90b812f3850..9f01a561f28e66097b734b917e3cade805d717e1 100644 (file)
@@ -242,7 +242,7 @@ int SMESH_FaceOrientationFilter::RequestData(
   vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
   vtkInformation *outInfo = outputVector->GetInformationObject(0);
 
-  // get the input and ouptut
+  // get the input and output
   vtkDataSet *input = vtkDataSet::SafeDownCast(
     inInfo->Get(vtkDataObject::DATA_OBJECT()));
   vtkPolyData *output = vtkPolyData::SafeDownCast(
index 8096b1609fbc22ee5829b729af09cd414f5f4c56..e631e856c3e243e8423e4051e5540c4738a9440b 100644 (file)
@@ -557,7 +557,8 @@ int SMESH_ScalarBarActor::RenderOpaqueGeometry(vtkViewport *viewport)
     }
 
     //polygons & cell colors
-    unsigned char *rgba, *rgb;
+    unsigned char *rgb;
+    const unsigned char *rgba;
     vtkIdType ptIds[4], dcCount=0;
     for ( i = 0; i < numColors; i++ )
     {
index 491f4f0681a51b1efe00af773b0bb3bbaf9aaa96..816d1f5ac6f3fbd150b232ad1d0242e94d067bd6 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDSAbs_ElementType.hxx
 //  Module : SMESH
 //
index 8cf426a91ae87bfe0df9a046c32fd293f01205af..fd3859681325b9784447cf98be9a954d34516b46 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  Module     : SMESH
 //  File       : SMDS_BallElement.cxx
 //  Author     : Edward AGAPOV (eap)
index 6f6ad13c6738394fd0d3b2c03a085fd9f125728d..c62034de77527563915e41cf380e8a9dedd19474 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_BallElement.hxx
 //  Module : SMESH
 //
index 91c96fce7eeebbc717327722825bf3c832f13de1..9ac728d644220bec9da10c72386b56c8abef28f2 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_EdgePosition.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 47093a426a7bc3e6c5e6f5f45318476e46bcaf18..f0870e9704e720aab24c64b5ea6d73063ec5ed58 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_EdgePosition.hxx
 //  Module : SMESH
 //
index 25bd0aafc6f23c954ebabc17233dcde62e037c75..a90df4766859a35a1d1c6d67fb4281c9bd80adab 100755 (executable)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshElement.hxx
 //  Module : SMESH
 //  Created:   12.01.05 18:02:52
index 2b239c85a1987ebb5b3489b0f8d6074a673d2fb5..67ff4f6d1789ffe7dcfcba33570c8e712bc97c8d 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index 4d24ec05d3a7332b6b408aaf9b8caf4d079a9c59..dfd3b7385eb45f424a0e4621fe6b2c1698bd95c2 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index 9a08f27480bf4b23f2ecab711e25b1fc088bb546..fec0b09991dfa3ae56e5bc572f8473748ac525b0 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifndef _SMDS_FaceOfNodes_HeaderFile
 #define _SMDS_FaceOfNodes_HeaderFile
index b0c25049ff26564ad70c57f7b4b0524ebbe972f1..ae12dc313d09ee35e62c0d024be632d7ed01315a 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_FacePosition.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 81ecb4870b8ec1ce5536c2cab682e531764e5c88..45015887d5ad49aefa20ff071f9a780ae96aad7e 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_FacePosition.hxx
 //  Module : SMESH
 //
index fab1642677ea2c483e30811b1c7bf325adf288ae..f20d7062ed8c26f18e516ee3819f81bc70474c3a 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifndef _SMDS_Iterator_HeaderFile
 #define _SMDS_Iterator_HeaderFile
index 050eb506f1a35edc61f4c1547d2ddedd6cd52fd5..3d125fcfbec460d88dea2a427fcdaa0f657fe6fe 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index 07b4b0b380f7428491db311664e384f8117997ed..f2d73d8c797ccff285a0b154c2ee40b98fa41e5d 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #include "SMESH_SMDS.hxx"
 
index 9e1a1f40c2c62adb3fbcd661f987e808a2e99a28..96072ab0e159593a857b7cc3db0ff3d298e8565c 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 // File      : SMDS_IteratorOnIterators.hxx
 // Author    : Edward AGAPOV (eap)
 //
@@ -32,7 +32,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 /// SMDS_Iterator iterating over all elements provided by other iterators
 ///
-/// Other iterators must implement SMDS_Iterator iterface and
+/// Other iterators must implement SMDS_Iterator interface and
 /// must be provided within a stl-like container
 /// BE CAREFUL: iterator pointed value is static_cast'ed to VALUE
 ///////////////////////////////////////////////////////////////////////////////
index c1fea287ffcff1cea6a770b371b22655cf76dd3e..8bce6011b3d6e6ca8877e39279dcbdf7c6c436e8 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_Mesh.hxx
 //  Module : SMESH
 //
@@ -701,7 +701,7 @@ public:
                                 int idnode4, int idnode5, int idnode6) const;
   const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3, int idnode4,
                                 int idnode5, int idnode6, int idnode7, int idnode8) const;
-  const SMDS_MeshElement *FindElement(int IDelem) const;
+  virtual const SMDS_MeshElement * FindElement(int IDelem) const;
   static const SMDS_Mesh0DElement* Find0DElement(const SMDS_MeshNode * n);
   static const SMDS_BallElement* FindBall(const SMDS_MeshNode * n);
   static const SMDS_MeshEdge* FindEdge(const SMDS_MeshNode * n1,
index 2b03025db385cf5832f970be3d359cb8afb7225c..8ac7bcc1821dd43c9e87064ab78238d0dfdf5520 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_Mesh0DElement.cxx
 //  Module : SMESH
 //
index be2840b8eb66a0fcc3e14b14dc260e53ed0d517a..f4b9fa2dd756a2917bd1caffa0ba7e65e5109ee1 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_Mesh0DElement.hxx
 //  Module : SMESH
 //
index 35961237735da757b498b2328ba77b13abfb021c..423d96241f8e11cadd1cfc0d0df91296e4c7f3a7 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshEdge.hxx
 //  Module : SMESH
 //
index 7150b6c59ecfe5cc5a56c533eb5269f72f8270a4..31119a8eda8abc03dfd6cb094b9c797cf14bb73c 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index 620e4d82df2bc5e80ff00d21f3b8250bfc0475c5..4634548aa4f2fa9146bd251edbf23c7300627196 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshElement.hxx
 //  Module : SMESH
 //
index 43a51d5cf972b26f15615819075c4b5bf05f95b3..c7fc45eb6ebba05d0a4e51eebb58334cdc8b8b1c 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshElementIDFactory.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 4bd6c638df4cd55a82116be7b6619518deb7eaf3..f75d24f5c872d0a886cf45938a95d8e8e326a5f5 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshElementIDFactory.hxx
 //  Module : SMESH
 //
index b4e09c56c998bd1842df0e0bf20bcd821d2a510a..1269455965280f756c6910b8ace049628ca21cc9 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #include "SMDS_MeshFace.hxx"
 
index 70f1658f01c696d12f54d32536f57826e9e62d9b..92f2f9b4f64ff2b0a5c4eb93a221568a145990aa 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshFace.hxx
 //  Module : SMESH
 //
index f61079353f7a78bbd240f86eae85c1e02d572f1a..4040a3e1d2193e2d205cdc436c7d467a5b1dc19e 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshGroup.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 052ea2c9041f846d8b274ab4b3b2e75caced2712..7ba1375ad5b8ce92d96db67f95362b1c0d5d74de 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshGroup.hxx
 //  Module : SMESH
 //
index cc765d8665910c5424f82372544ec8acaa6ecd03..ea74aa5769c265c08db96911ad816ab0563c6bd5 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshIDFactory.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index bf36699c93801e836aaa86de8029010afa823320..35be69bd96744d3d478bd90cd2556ee515b5a3bf 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshIDFactory.hxx
 //  Module : SMESH
 //
index 53054f8e4cb93c7ddbfc503f033b9b640e6d58c0..554f0fa7115dd75e0e8e021c97be94f90a051694 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index 43dc9c7f2ffa7d861dbc2b8132ca1ce809e268c3..2c8bad7be6927ed5634abcd28e8fa71af9f50998 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshNode.hxx
 //  Module : SMESH
 //
index 4208546a7b23ecc6cd72c59257609e37909c1f03..fd55895555285ea296caf910b66635f43e70265e 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshObject.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 5d7222cb7de522e13c746e667392d776eba8d96d..4cfb2f2f7ed2597cffc7fd086f74fe1bbe256e6f 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshObject.hxx
 //  Module : SMESH
 //
index bf67d6a36255fd7b5a11d58558ecc4624fa5165a..a56c119b7b0c1e9f650c447689ddde04e3c5c084 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshVolume.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 69bffbfc3085856faffec78d59396549e3a8b348..15887bdcd0778233fc66df31b42354d4a8ed357a 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshVolume.hxx
 //  Module : SMESH
 //
index 8ea55e098c2af99d6a27c65e7536261729f7bec9..54ead2af02c79dabbd4dcdf4e0d2ffbfcd0b056e 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index 67c6115422f0f34515ae6ec4739955fb852f07a2..2fec139fb08974ae1eb5d383407f7c95da04cee5 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifndef _SMDS_PolygonalFaceOfNodes_HeaderFile
 #define _SMDS_PolygonalFaceOfNodes_HeaderFile
index 5da8e7168be8bf314c9a8efc180fa43eaa037f81..20c948ba1b2548122dff28210d85fac1c368da85 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index 61789daf0f682eb17ae61405533f197ceedcbf59..cba8a916951d880732405fc25e56fa543845b6d9 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_PolyhedralVolumeOfNodes.hxx
 //  Module : SMESH
 //
index f329cce8210c6388e038695345d047cb9f155be2..e7c408f0734649139fb2a7f214edbe054017ae71 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_Position.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 3d9dbf53e7fa73353d82c20a756f85f8f3fc8fac..b6976677d291a5ae3f9d6f5f3e5c875cd23158d0 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_Position.hxx
 //  Module : SMESH
 //
index a2a39510c2def39c96cb35322c9fda617cfad277..9f6cf94dfff08675814e273cd9bbf96bb43217f0 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 // File:      SMDS_QuadraticEdge.cxx
 // Created:   16.01.06 16:25:42
 // Author:    Sergey KUUL
index e9faf0bebe78678452a8a5b707ae45d786002047..7eeabf65ad0d3f71c2a673a15705b3a12f6ce361 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_QuadraticEdge.hxx
 //  Module : SMESH
 //
index b96ff5c3168819db80a73a817b063cdc7eacb75c..49066ac827fda51df206bdd008be139cdecf41b8 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 // File:      SMDS_QuadraticFaceOfNodes.cxx
 // Created:   16.01.06 17:12:58
 // Author:    Sergey KUUL
index 96111a478a95746bbbc8bd5b05f2aa97a1381f36..8ef0a9da8c0e273772b15eecb57855653642b8a3 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_QuadraticVolumeOfNodes.hxx
 //  Module : SMESH
 //
index f9c689a1717248393df31e63a8d05bd0260fc2b5..0248ba86b61ea96f464c773a3cf8c6ae4f1018d4 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 // File:      SMDS_QuadraticVolumeOfNodes.cxx
 // Created:   17.01.06 09:46:11
 // Author:    Sergey KUUL
index fadb0d597c990c273307cdeb03fb19f8c133edda..0f3d6a8e6c3c6d87f477ae63107a3615a1dc1f3d 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_QuadraticVolumeOfNodes.hxx
 //  Module : SMESH
 //
index e0b3c8b0888938ca1eafaed263dc8bbb4b69e437..a3bcd44faaeb02f69137d3e0b6cf2d02e1902d5b 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 // File      : SMDS_SetIterator.hxx
 // Created   : Feb 27 2006
 // Author    : Edward AGAPOV (eap)
@@ -51,6 +51,11 @@ namespace SMDS {
     static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) it->second; }
   };
 
+  template<typename VALUE,typename VALUE_SET_ITERATOR>
+  struct PointerAccessor {
+    static VALUE value(VALUE_SET_ITERATOR it) { return (VALUE) &(*it); }
+  };
+
   ///////////////////////////////////////////////////////////////////////////////
   /// Filters of value pointed by iterator
   ///////////////////////////////////////////////////////////////////////////////
index 5c61b20c699e4b572c92227d0a83621aa65e4a27..b2b9a7f2ecb52ebe91886faf900b5bb54447f1d4 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_SpacePosition.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 59543dee3fe9a5abafb266371c17edbb0a80df20..fc2d22cc37f014204e60c178e8f29327ae9f8559 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_SpacePosition.hxx
 //  Module : SMESH
 //
index 0e960cb802d723311459a4b2db4e5d539c02a995..c6502c457c792889f6c0a93d60878e8ccc26d760 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 // File      : SMDS_StdIterator.hxx
 // Created   : Fri Feb  5 11:03:46 2010
 // Author    : Edward AGAPOV (eap)
index 0bedf136b43274524f09e83f1f0b6f26c165db15..d2a92972301f294b61c173a6320c806f5bffa04b 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_TypeOfPosition.hxx
 //  Module : SMESH
 //
index 62b3abdb48933f8fdac7f0c252eee7c87a55052c..0e2d183e2e8d226b522d1b89d59c622486d1bdae 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_VertexPosition.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index d1fa9a7a0c2de60e66583a93b3e0af10ab753b3b..0943de91cfa832eab322b0144627fb378195c844 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_VertexPosition.hxx
 //  Module : SMESH
 //
index fa6b800a415e75101ee183578170bee87a16c9a3..929c5467584631db178b413696879bb780a222d9 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_VolumeOfFaces.cxx
 //  Author : Jean-Michel BOULCOURT
 //  Module : SMESH
index 870d37f3c1ebc6f8ea4f312be44c0b71d7644a56..103b919a0f516a28e0bc48ee4c5562e6b0bf4657 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_VolumeOfFaces.hxx
 //  Module : SMESH
 //
index 670802e76a56180b4d19c77cb8d5762f1de059e0..3f76d5322040d2583d5635969472977b8176ef0e 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //
 #ifdef _MSC_VER
 #pragma warning(disable:4786)
index a1a0f3aac2d9cd74cc1feed32cb193e1a508ac4a..485ea7eda7de15732fa802d7a7a9fe0122c21d0b 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_MeshVolume.hxx
 //  Module : SMESH
 //
index f7857c3eb486e19b45656d8bcc51ad081bbeca1f..9e144a620aaae174eef73eaa48e66d836edb02bd 100644 (file)
@@ -1683,7 +1683,7 @@ double SMDS_VolumeTool::MaxLinearSize2() const
 
 //================================================================================
 /*!
- * \brief fast check that only one volume is build on the face nodes
+ * \brief Fast quickly check that only one volume is built on the face nodes
  *        This check is valid for conformal meshes only
  */
 //================================================================================
@@ -1731,7 +1731,7 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex, const SMDS_MeshElement** otherV
 
 //================================================================================
 /*!
- * \brief Thorough check that only one volume is build on the face nodes
+ * \brief Thorough check that only one volume is built on the face nodes
  */
 //================================================================================
 
index 4e018c0c73c1828080826921b797fe07ff170154..271ab4af5dcb0113d6470129fd0110ffb5d71f41 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 // File      : SMDS_VolumeTool.hxx
 // Module    : SMESH
 // Created   : Tue Jul 13 11:27:17 2004
index 36fe9fa0af3754baf64e19a5abbdf84097531061..aebfb6e0b1d09527dc54e8a28f4a97d6696aa931 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMDS : implementaion of Salome mesh data structure
+//  SMESH SMDS : implementation of Salome mesh data structure
 //  File   : SMDS_VtkEdge.hxx
 //  Module : SMESH
 
index 968154d1a5fa788d2e659fc5a17f2f4e8c17fc78..561f64471f04bd14af51428a18bacd5de113570e 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Algo.cxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
@@ -85,7 +85,7 @@ using namespace std;
 bool SMESH_Algo::Features::IsCompatible( const SMESH_Algo::Features& algo2 ) const
 {
   if ( _dim > algo2._dim ) return algo2.IsCompatible( *this );
-  // algo2 is of highter dimension
+  // algo2 is of higher dimension
   if ( _outElemTypes.empty() || algo2._inElemTypes.empty() )
     return false;
   bool compatible = true;
index ba8c2d356f0a3aad3da622548fbdfcf9405111b6..81ff8eb3aabda71a1c9cd8e603110b2395afb9bb 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Algo.hxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
@@ -69,7 +69,7 @@ typedef std::map< SMESH_subMesh*, std::vector<int> >::iterator MapShapeNbElemsIt
  *  Methods of the class are grouped into several parts:
  *  - main lifecycle methods, like Compute()
  *  - methods describing features of the algorithm, like NeedShape()
- *  - methods related to dependencies between sub-meshes imposed by the algorith
+ *  - methods related to dependencies between sub-meshes imposed by the algorithm
  *  - static utilities, like EdgeLength()
  */
 // ==================================================================================
index bd5654c89588eb1bd05ddde3ae963e978e7cd8eb..69e499dd5effcb8884fc45b732ea9091ac037258 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Gen.cxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
@@ -121,7 +121,7 @@ SMESH_Mesh* SMESH_Gen::CreateMesh(int theStudyId, bool theIsEmbeddedMode)
 {
   Unexpect aCatch(SalomeException);
 
-  // Get studyContext, create it if it does'nt exist, with a SMESHDS_Document
+  // Get studyContext, create it if it doesn't exist, with a SMESHDS_Document
   StudyContextStruct *aStudyContext = GetStudyContext(theStudyId);
 
   // create a new SMESH_mesh object
@@ -1151,7 +1151,7 @@ SMESH_Algo *SMESH_Gen::GetAlgo(SMESH_subMesh * aSubMesh,
 
 StudyContextStruct *SMESH_Gen::GetStudyContext(int studyId)
 {
-  // Get studyContext, create it if it does'nt exist, with a SMESHDS_Document
+  // Get studyContext, create it if it doesn't exist, with a SMESHDS_Document
 
   if (_mapStudyContext.find(studyId) == _mapStudyContext.end())
   {
index d011050354f065381884f99f8ffb016f5c77c67d..64eb26a70a83a274f066faab99fcf7d338f88281 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Gen.hxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
index d76c3750bf0df253bd16e78b05fef3b10434c1a3..5ab9b683dc33aa9743dd89b6cb458522d086ddb2 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Group.cxx
 //  Author : Michael Sazonov (OCC)
 //  Module : SMESH
index 967746c0924076b4a0cb39099b16003fe25409cd..2842b9a51b3888705ebb0078f0972ac5da835d70 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Group.hxx
 //  Author : Michael Sazonov (OCC)
 //  Module : SMESH
index 73c87fec48cb2582cf60b8704bf9126d3b443754..40bb38a0382a573f3b9a8dfdc4f31fc7f824f581 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_HypoFilter.cxx
 //  Module : SMESH
 //
index 3b059c5f27a7c58aa224e1ee31b4e513892ac44c..1a1f34ef8a61d0d40db4212e491a28b8c42f0fa2 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_HypoFilter.hxx
 //  Module : SMESH
 //
index c4107fb3892bed30a88f0b640277375422e4640c..23c52bcc3200786b7c93c76b0e08c471693353c4 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Hypothesis.cxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
index bfcd2f518daa7b303628e8c246220738c9024c5d..7973a26a140d97dd3d4d035183d745b3a498494a 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_Hypothesis.hxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
index 7de8ef36ffca63ee8462cafc015fe6dec359db55..0e2b961ea89b5ee73dc2a7ee317a325e99f55595 100644 (file)
@@ -697,7 +697,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
       }
     }
 
-    // check concurent hypotheses on ancestors
+    // check concurrent hypotheses on ancestors
     if (ret < SMESH_Hypothesis::HYP_CONCURENT && !isGlobalHyp )
     {
       SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
@@ -767,7 +767,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
     if (ret2 > ret) // more severe
       ret = ret2;
 
-    // check concurent hypotheses on ancestors
+    // check concurrent hypotheses on ancestors
     if (ret < SMESH_Hypothesis::HYP_CONCURENT && !IsMainShape( aSubShape ) )
     {
       SMESH_subMeshIteratorPtr smIt = subMesh->getDependsOnIterator(false,false);
@@ -2189,7 +2189,7 @@ ostream& SMESH_Mesh::Dump(ostream& save)
         save << clause << ".3) Faces in detail: " << endl;
         map <int,int>::iterator itF;
         for (itF = myFaceMap.begin(); itF != myFaceMap.end(); itF++)
-          save << "--> nb nodes: " << itF->first << " - nb elemens:\t" << itF->second << endl;
+          save << "--> nb nodes: " << itF->first << " - nb elements:\t" << itF->second << endl;
       }
     }
     save << ++clause << ") Total number of " << orderStr << " volumes:\t" << NbVolumes(order) << endl;
@@ -2214,7 +2214,7 @@ ostream& SMESH_Mesh::Dump(ostream& save)
         save << clause << ".5) Volumes in detail: " << endl;
         map <int,int>::iterator itV;
         for (itV = myVolumesMap.begin(); itV != myVolumesMap.end(); itV++)
-          save << "--> nb nodes: " << itV->first << " - nb elemens:\t" << itV->second << endl;
+          save << "--> nb nodes: " << itV->first << " - nb elements:\t" << itV->second << endl;
       }
     }
     save << endl;
index 62bb61a72d52fdbc4ca3bd94ae492be898dfa039..b11f6c32adc78541bcf1e5eeb10638a17f6b0974 100644 (file)
@@ -97,6 +97,9 @@
 
 #include <Standard_Failure.hxx>
 #include <Standard_ErrorHandler.hxx>
+#include <OSD_Parallel.hxx>
+
+#include "SMESH_TryCatch.hxx" // include after OCCT headers!
 
 #define cast2Node(elem) static_cast<const SMDS_MeshNode*>( elem )
 
@@ -1277,7 +1280,7 @@ int SMESH_MeshEditor::Reorient2D (TIDSortedElemSet &       theFaces,
         }
         if ( otherFace && otherFace != theFace)
         {
-          // link must be reverse in otherFace if orientation ot otherFace
+          // link must be reverse in otherFace if orientation to otherFace
           // is same as that of theFace
           if ( abs(nodeInd2-nodeInd1) == 1 ? nodeInd2 > nodeInd1 : nodeInd1 > nodeInd2 )
           {
@@ -1499,7 +1502,7 @@ bool SMESH_MeshEditor::QuadToTri (TIDSortedElemSet &                   theElems,
 //=======================================================================
 /*!
  * \brief Split each of given quadrangles into 4 triangles.
- * \param theElems - The faces to be splitted. If empty all faces are split.
+ * \param theElems - The faces to be split. If empty all faces are split.
  */
 //=======================================================================
 
@@ -6139,7 +6142,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
         makeEdgePathPoints(aPrms, aTrackEdge,(aN1->GetID()==startNid), LPP);
         LLPPs.push_back(LPP);
         UsedNums.Add(k);
-        // update startN for search following egde
+        // update startN for search following edge
         if( aN1->GetID() == startNid ) startNid = aN2->GetID();
         else startNid = aN1->GetID();
         break;
@@ -6438,7 +6441,7 @@ SMESH_MeshEditor::ExtrusionAlongTrack (TIDSortedElemSet     theElements[2],
         makeEdgePathPoints(aPrms, aTrackEdge, aN1isOK, LPP);
         LLPPs.push_back(LPP);
         UsedNums.Add(k);
-        // update startN for search following egde
+        // update startN for search following edge
         if ( aN1isOK ) aVprev = aV2;
         else           aVprev = aV1;
         break;
@@ -13274,3 +13277,482 @@ void SMESH_MeshEditor::copyPosition( const SMDS_MeshNode* from,
   default:;
   }
 }
+
+namespace // utils for MakePolyLine
+{
+  //================================================================================
+  /*!
+   * \brief Sequence of found points and a current point data
+   */
+  struct Path
+  {
+    std::vector< gp_XYZ >   myPoints;
+    double                  myLength;
+
+    int                     mySrcPntInd; //!< start point index
+    const SMDS_MeshElement* myFace;
+    SMESH_NodeXYZ           myNode1;
+    SMESH_NodeXYZ           myNode2;
+    int                     myNodeInd1;
+    int                     myNodeInd2;
+    double                  myDot1;
+    double                  myDot2;
+    TIDSortedElemSet        myElemSet, myAvoidSet;
+
+    Path(): myLength(0.0), myFace(0) {}
+
+    bool SetCutAtCorner( const SMESH_NodeXYZ&    cornerNode,
+                         const SMDS_MeshElement* face,
+                         const gp_XYZ&           plnNorm,
+                         const gp_XYZ&           plnOrig );
+
+    void AddPoint( const gp_XYZ& p );
+
+    bool Extend( const gp_XYZ& plnNorm, const gp_XYZ& plnOrig );
+
+    bool ReachSamePoint( const Path& other );
+
+    static void Remove( std::vector< Path > & paths, size_t& i );
+  };
+
+  //================================================================================
+  /*!
+   * \brief Return true if this Path meats another
+   */
+  //================================================================================
+
+  bool Path::ReachSamePoint( const Path& other )
+  {
+    return ( mySrcPntInd != other.mySrcPntInd &&
+             myFace == other.myFace );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Remove a path from a vector
+   */
+  //================================================================================
+
+  void Path::Remove( std::vector< Path > & paths, size_t& i )
+  {
+    if ( paths.size() > 1 )
+    {
+      size_t j = paths.size() - 1; // last item to be removed
+      if ( i < j )
+      {
+        paths[ i ].myPoints.swap( paths[ j ].myPoints );
+        paths[ i ].myLength    = paths[ j ].myLength;
+        paths[ i ].mySrcPntInd = paths[ j ].mySrcPntInd;
+        paths[ i ].myFace      = paths[ j ].myFace;
+        paths[ i ].myNode1     = paths[ j ].myNode1;
+        paths[ i ].myNode2     = paths[ j ].myNode2;
+        paths[ i ].myNodeInd1  = paths[ j ].myNodeInd1;
+        paths[ i ].myNodeInd2  = paths[ j ].myNodeInd2;
+        paths[ i ].myDot1      = paths[ j ].myDot1;
+        paths[ i ].myDot2      = paths[ j ].myDot2;
+      }
+    }
+    paths.pop_back();
+    if ( i > 0 )
+      --i;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Store a point that is at a node of a face if the face is intersected by plane.
+   *        Return false if the node is a sole intersection point of the face and the plane
+   */
+  //================================================================================
+
+  bool Path::SetCutAtCorner( const SMESH_NodeXYZ&    cornerNode,
+                             const SMDS_MeshElement* face,
+                             const gp_XYZ&           plnNorm,
+                             const gp_XYZ&           plnOrig )
+  {
+    if ( face == myFace )
+      return false;
+    myNodeInd1 = face->GetNodeIndex( cornerNode._node );
+    myNodeInd2 = ( myNodeInd1 + 1 ) % face->NbCornerNodes();
+    int   ind3 = ( myNodeInd1 + 2 ) % face->NbCornerNodes();
+    myNode1.Set( face->GetNode( ind3 ));
+    myNode2.Set( face->GetNode( myNodeInd2 ));
+
+    myDot1 = plnNorm * ( myNode1 - plnOrig );
+    myDot2 = plnNorm * ( myNode2 - plnOrig );
+
+    bool ok = ( myDot1 * myDot2 < 0 );
+    if ( !ok && myDot1 * myDot2 == 0 )
+    {
+      ok = ( myDot1 != myDot2 );
+      if ( ok && myFace )
+        ok = ( myFace->GetNodeIndex(( myDot1 == 0 ? myNode1 : myNode2 )._node ) < 0 );
+    }
+    if ( ok )
+    {
+      myFace = face;
+      myDot1 = 0;
+      AddPoint( cornerNode );
+    }
+    return ok;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Store a point and update myLength
+   */
+  //================================================================================
+
+  void Path::AddPoint( const gp_XYZ& p )
+  {
+    if ( !myPoints.empty() )
+      myLength += ( p - myPoints.back() ).Modulus();
+    else
+      myLength = 0;
+    myPoints.push_back( p );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Try to find the next point
+   *  \param [in] plnNorm - cutting plane normal
+   *  \param [in] plnOrig - cutting plane origin
+   */
+  //================================================================================
+
+  bool Path::Extend( const gp_XYZ& plnNorm, const gp_XYZ& plnOrig )
+  {
+    int nodeInd3 = ( myNodeInd1 + 1 ) % myFace->NbCornerNodes();
+    if ( myNodeInd2 == nodeInd3 )
+      nodeInd3 = ( myNodeInd1 + 2 ) % myFace->NbCornerNodes();
+
+    SMESH_NodeXYZ node3 = myFace->GetNode( nodeInd3 );
+    double         dot3 = plnNorm * ( node3 - plnOrig );
+
+    if ( dot3 * myDot1 < 0. )
+    {
+      myNode2    = node3;
+      myNodeInd2 = nodeInd3;
+      myDot2     = dot3;
+    }
+    else if ( dot3 * myDot2 < 0. )
+    {
+      myNode1    = node3;
+      myNodeInd1 = nodeInd3;
+      myDot1     = dot3;
+    }
+    else if ( dot3 == 0. )
+    {
+      SMDS_ElemIteratorPtr fIt = node3._node->GetInverseElementIterator(SMDSAbs_Face);
+      while ( fIt->more() )
+        if ( SetCutAtCorner( node3, fIt->next(), plnNorm, plnOrig ))
+          return true;
+      return false;
+    }
+    else if ( myDot2 == 0. )
+    {
+      SMESH_NodeXYZ node2 = myNode2; // copy as myNode2 changes in SetCutAtCorner()
+      SMDS_ElemIteratorPtr fIt = node2._node->GetInverseElementIterator(SMDSAbs_Face);
+      while ( fIt->more() )
+        if ( SetCutAtCorner( node2, fIt->next(), plnNorm, plnOrig ))
+          return true;
+      return false;
+    }
+
+    double r = Abs( myDot1 / ( myDot2 - myDot1 ));
+    AddPoint( myNode1 * ( 1 - r ) + myNode2 * r );
+
+    myAvoidSet.clear();
+    myAvoidSet.insert( myFace );
+    myFace = SMESH_MeshAlgos::FindFaceInSet( myNode1._node, myNode2._node,
+                                             myElemSet,   myAvoidSet,
+                                             &myNodeInd1, &myNodeInd2 );
+    return myFace;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Compute a path between two points of PolySegment
+   */
+  struct PolyPathCompute
+  {
+    SMESH_MeshEditor::TListOfPolySegments& mySegments; //!< inout PolySegment's
+    std::vector< Path >&                   myPaths;    //!< path of each of segments to compute
+    SMESH_Mesh*                            myMesh;
+    mutable std::vector< std::string >     myErrors;
+
+    PolyPathCompute( SMESH_MeshEditor::TListOfPolySegments& theSegments,
+                     std::vector< Path >&                   thePaths,
+                     SMESH_Mesh*                            theMesh):
+      mySegments( theSegments ),
+      myPaths( thePaths ),
+      myMesh( theMesh ),
+      myErrors( theSegments.size() )
+    {
+    }
+#undef SMESH_CAUGHT
+#define SMESH_CAUGHT myErrors[i] =
+    void operator() ( const int i ) const
+    {
+      SMESH_TRY;
+      const_cast< PolyPathCompute* >( this )->Compute( i );
+      SMESH_CATCH( SMESH::returnError );
+    }
+#undef SMESH_CAUGHT
+    //================================================================================
+    /*!
+     * \brief Compute a path of a given segment
+     */
+    //================================================================================
+
+    void Compute( const int iSeg )
+    {
+      SMESH_MeshEditor::PolySegment& polySeg = mySegments[ iSeg ];
+
+      // get a cutting plane
+
+      gp_XYZ p1 = SMESH_NodeXYZ( polySeg.myNode1[0] );
+      gp_XYZ p2 = SMESH_NodeXYZ( polySeg.myNode1[1] );
+      if ( polySeg.myNode2[0] ) p1 = 0.5 * ( p1 + SMESH_NodeXYZ( polySeg.myNode2[0] ));
+      if ( polySeg.myNode2[1] ) p2 = 0.5 * ( p2 + SMESH_NodeXYZ( polySeg.myNode2[1] ));
+
+      gp_XYZ plnNorm = ( p1 - p2 ) ^ polySeg.myVector.XYZ();
+      gp_XYZ plnOrig = p2;
+
+      // find paths connecting the 2 end points of polySeg
+
+      std::vector< Path > paths; paths.reserve(10);
+
+      // initialize paths
+
+      for ( int iP = 0; iP < 2; ++iP ) // loop on the polySeg end points
+      {
+        Path path;
+        path.mySrcPntInd = iP;
+        size_t nbPaths = paths.size();
+
+        if ( polySeg.myNode2[ iP ] && polySeg.myNode2[ iP ] != polySeg.myNode1[ iP ] )
+        {
+          while (( path.myFace = SMESH_MeshAlgos::FindFaceInSet( polySeg.myNode1[ iP ],
+                                                                 polySeg.myNode2[ iP ],
+                                                                 path.myElemSet,
+                                                                 path.myAvoidSet,
+                                                                 &path.myNodeInd1,
+                                                                 &path.myNodeInd2 )))
+          {
+            path.myNode1.Set( polySeg.myNode1[ iP ]);
+            path.myNode2.Set( polySeg.myNode2[ iP ]);
+            path.myDot1 = plnNorm * ( path.myNode1 - plnOrig );
+            path.myDot2 = plnNorm * ( path.myNode2 - plnOrig );
+            path.myPoints.clear();
+            path.AddPoint( 0.5 * ( path.myNode1 + path.myNode2 ));
+            path.myAvoidSet.insert( path.myFace );
+            paths.push_back( path );
+          }
+          if ( nbPaths == paths.size() )
+            throw SALOME_Exception ( SMESH_Comment("No face edge found by point ") << iP+1
+                                     << " in a PolySegment " << iSeg );
+        }
+        else // an end point is at node
+        {
+          std::set<const SMDS_MeshNode* > nodes;
+          SMDS_ElemIteratorPtr fIt = polySeg.myNode1[ iP ]->GetInverseElementIterator(SMDSAbs_Face);
+          while ( fIt->more() )
+          {
+            path.myPoints.clear();
+            if ( path.SetCutAtCorner( polySeg.myNode1[ iP ], fIt->next(), plnNorm, plnOrig ))
+            {
+              if (( path.myDot1 * path.myDot2 != 0 ) ||
+                  ( nodes.insert( path.myDot1 == 0 ? path.myNode1._node : path.myNode2._node ).second ))
+                paths.push_back( path );
+            }
+          }
+        }
+
+        // look for a one-segment path
+        for ( size_t i = 0; i < nbPaths; ++i )
+          for ( size_t j = nbPaths; j < paths.size(); ++j )
+            if ( paths[i].myFace == paths[j].myFace )
+            {
+              myPaths[ iSeg ].myPoints.push_back( paths[i].myPoints[0] );
+              myPaths[ iSeg ].myPoints.push_back( paths[j].myPoints[0] );
+              paths.clear();
+            }
+      }
+
+      // extend paths
+
+      myPaths[ iSeg ].myLength = 1e100;
+
+      while ( paths.size() >= 2 )
+      {
+        for ( size_t i = 0; i < paths.size(); ++i )
+        {
+          Path& path = paths[ i ];
+          if ( !path.Extend( plnNorm, plnOrig ) ||         // path reached a mesh boundary
+               path.myLength > myPaths[ iSeg ].myLength ) // path is longer than others
+          {
+            Path::Remove( paths, i );
+            continue;
+          }
+
+          // join paths that reach same point
+          for ( size_t j = 0; j < paths.size(); ++j )
+          {
+            if ( i != j && paths[i].ReachSamePoint( paths[j] ))
+            {
+              double   distLast = ( paths[i].myPoints.back() - paths[j].myPoints.back() ).Modulus();
+              double fullLength = ( paths[i].myLength + paths[j].myLength + distLast );
+              if ( fullLength < myPaths[ iSeg ].myLength )
+              {
+                myPaths[ iSeg ].myLength = fullLength;
+                std::vector< gp_XYZ > & allPoints = myPaths[ iSeg ].myPoints;
+                allPoints.swap( paths[i].myPoints );
+                allPoints.insert( allPoints.end(),
+                                  paths[j].myPoints.rbegin(),
+                                  paths[j].myPoints.rend() );
+              }
+              Path::Remove( paths, i );
+              Path::Remove( paths, j );
+            }
+          }
+        }
+        if ( !paths.empty() && (int) paths[0].myPoints.size() > myMesh->NbFaces() )
+          throw SALOME_Exception(LOCALIZED( "Infinite loop in MakePolyLine()"));
+      }
+
+      if ( myPaths[ iSeg ].myPoints.empty() )
+        throw SALOME_Exception( SMESH_Comment("Can't find a full path for PolySegment #") << iSeg );
+
+    } // PolyPathCompute::Compute()
+
+  }; // struct PolyPathCompute
+
+} // namespace
+
+//=======================================================================
+//function : MakePolyLine
+//purpose  : Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+//           the initial mesh
+//=======================================================================
+
+void SMESH_MeshEditor::MakePolyLine( TListOfPolySegments&   theSegments,
+                                     SMESHDS_Group*         theGroup,
+                                     SMESH_ElementSearcher* theSearcher)
+{
+  std::vector< Path > segPaths( theSegments.size() ); // path of each of segments
+
+  SMESH_ElementSearcher* searcher = theSearcher;
+  SMESHUtils::Deleter<SMESH_ElementSearcher> delSearcher;
+  if ( !searcher )
+  {
+    searcher = SMESH_MeshAlgos::GetElementSearcher( *GetMeshDS() );
+    delSearcher._obj = searcher;
+  }
+
+  // get cutting planes
+
+  std::vector< bool > isVectorOK( theSegments.size(), true );
+  const double planarCoef = 0.333; // plane height in planar case
+
+  for ( size_t iSeg = 0; iSeg < theSegments.size(); ++iSeg )
+  {
+    PolySegment& polySeg = theSegments[ iSeg ];
+
+    gp_XYZ p1 = SMESH_NodeXYZ( polySeg.myNode1[0] );
+    gp_XYZ p2 = SMESH_NodeXYZ( polySeg.myNode1[1] );
+    if ( polySeg.myNode2[0] ) p1 = 0.5 * ( p1 + SMESH_NodeXYZ( polySeg.myNode2[0] ));
+    if ( polySeg.myNode2[1] ) p2 = 0.5 * ( p2 + SMESH_NodeXYZ( polySeg.myNode2[1] ));
+
+    gp_XYZ plnNorm = ( p1 - p2 ) ^ polySeg.myVector.XYZ();
+
+    isVectorOK[ iSeg ] = ( plnNorm.Modulus() > std::numeric_limits<double>::min() );
+    if ( !isVectorOK[ iSeg ])
+    {
+      gp_XYZ pMid = 0.5 * ( p1 + p2 );
+      const SMDS_MeshElement* face;
+      polySeg.myMidProjPoint = searcher->Project( pMid, SMDSAbs_Face, &face );
+      polySeg.myVector       = polySeg.myMidProjPoint.XYZ() - pMid;
+
+      gp_XYZ faceNorm;
+      SMESH_MeshAlgos::FaceNormal( face, faceNorm );
+
+      if ( polySeg.myVector.Magnitude() < Precision::Confusion() ||
+           polySeg.myVector * faceNorm  < Precision::Confusion() )
+      {
+        polySeg.myVector = faceNorm;
+        polySeg.myMidProjPoint = pMid + faceNorm * ( p1 - p2 ).Modulus() * planarCoef;
+      }
+    }
+    else
+    {
+      polySeg.myVector = plnNorm ^ ( p1 - p2 );
+    }
+  }
+
+  // assure that inverse elements are constructed, avoid their concurrent building in threads
+  GetMeshDS()->nodesIterator()->next()->NbInverseElements();
+
+  // find paths
+
+  PolyPathCompute algo( theSegments, segPaths, myMesh );
+  OSD_Parallel::For( 0, theSegments.size(), algo, theSegments.size() == 1 );
+
+  for ( size_t iSeg = 0; iSeg < theSegments.size(); ++iSeg )
+    if ( !algo.myErrors[ iSeg ].empty() )
+      throw SALOME_Exception( algo.myErrors[ iSeg ].c_str() );
+
+  // create an 1D mesh
+
+  const SMDS_MeshNode *n, *nPrev = 0;
+  SMESHDS_Mesh* mesh = GetMeshDS();
+
+  for ( size_t iSeg = 0; iSeg < theSegments.size(); ++iSeg )
+  {
+    const Path& path = segPaths[iSeg];
+    if ( path.myPoints.size() < 2 )
+      continue;
+
+    double tol = path.myLength / path.myPoints.size() / 1000.;
+    if ( !nPrev || ( SMESH_NodeXYZ( nPrev ) - path.myPoints[0] ).SquareModulus() > tol*tol )
+    {
+      nPrev = mesh->AddNode( path.myPoints[0].X(), path.myPoints[0].Y(), path.myPoints[0].Z() );
+      myLastCreatedNodes.Append( nPrev );
+    }
+    for ( size_t iP = 1; iP < path.myPoints.size(); ++iP )
+    {
+      n = mesh->AddNode( path.myPoints[iP].X(), path.myPoints[iP].Y(), path.myPoints[iP].Z() );
+      myLastCreatedNodes.Append( n );
+
+      const SMDS_MeshElement* elem = mesh->AddEdge( nPrev, n );
+      myLastCreatedElems.Append( elem );
+      if ( theGroup )
+        theGroup->Add( elem );
+
+      nPrev = n;
+    }
+
+    // return a vector
+
+    gp_XYZ pMid = 0.5 * ( path.myPoints[0] + path.myPoints.back() );
+    if ( isVectorOK[ iSeg ])
+    {
+      // find the most distance point of a path
+      double maxDist = 0;
+      for ( size_t iP = 1; iP < path.myPoints.size(); ++iP )
+      {
+        double dist = Abs( theSegments[iSeg].myVector * ( path.myPoints[iP] - path.myPoints[0] ));
+        if ( dist > maxDist )
+        {
+          maxDist = dist;
+          theSegments[iSeg].myMidProjPoint = path.myPoints[iP];
+        }
+      }
+      if ( maxDist < Precision::Confusion() ) // planar case
+        theSegments[iSeg].myMidProjPoint =
+          pMid + theSegments[iSeg].myVector.XYZ().Normalized() * path.myLength * planarCoef;
+    }
+    theSegments[iSeg].myVector = gp_Vec( pMid, theSegments[iSeg].myMidProjPoint );
+  }
+
+  return;
+}
index 663b6ae169a3655d03d36c640fb5846f65711e4f..9a54cb7addd85487c6a3cde93ecb1d2976efb4b0 100644 (file)
 class SMDS_MeshElement;
 class SMDS_MeshFace;
 class SMDS_MeshNode;
+class SMESHDS_Group;
 class SMESHDS_Mesh;
 class SMESHDS_SubMesh;
+class SMESH_ElementSearcher;
 class SMESH_Group;
 class SMESH_Mesh;
 class SMESH_MesherHelper;
@@ -173,7 +175,7 @@ public:
    * \param theElems     - The triangles to be fused.
    * \param theCriterion - Is used to choose a neighbour to fuse with.
    * \param theMaxAngle  - Is a max angle between element normals at which fusion
-   *                       is still performed; theMaxAngle is mesured in radians.
+   *                       is still performed; theMaxAngle is measured in radians.
    * \return bool - Success or not.
    */
   bool TriToQuad (TIDSortedElemSet &                   theElems,
@@ -181,7 +183,7 @@ public:
                   const double                         theMaxAngle);
   /*!
    * \brief Split quadrangles into triangles.
-   * \param theElems     - The faces to be splitted.
+   * \param theElems     - The faces to be split.
    * \param theCriterion - Is used to choose a diagonal for splitting.
    * \return bool - Success or not.
    */
@@ -189,7 +191,7 @@ public:
                   SMESH::Controls::NumericalFunctorPtr theCriterion);
   /*!
    * \brief Split quadrangles into triangles.
-   * \param theElems  - The faces to be splitted.
+   * \param theElems  - The faces to be split.
    * \param the13Diag - Is used to choose a diagonal for splitting.
    * \return bool - Success or not.
    */
@@ -197,7 +199,7 @@ public:
                   const bool         the13Diag);
   /*!
    * \brief Split each of given quadrangles into 4 triangles.
-   * \param theElems - The faces to be splitted. If empty all faces are split.
+   * \param theElems - The faces to be split. If empty all faces are split.
    */
   void QuadTo4Tri (TIDSortedElemSet & theElems);
 
@@ -540,7 +542,7 @@ public:
   // of the side 2. If nb of links in the free border and
   // between theSide2FirstNode and theSide2LastNode are different,
   // additional nodes are inserted on a link provided that no
-  // volume elements share the splitted link.
+  // volume elements share the split link.
   // The side 2 is a free border if theSide2IsFreeBorder == true.
   // Sewing is performed between the given first, second and last
   // nodes on the sides.
@@ -707,6 +709,42 @@ public:
                        bool                    toAddExistingBondary = false,
                        bool                    aroundElements = false);
 
+
+  // structure used in MakePolyLine() to define a cutting plane
+  struct PolySegment
+  {
+    // 2 points: if myNode2 != 0, then the point is the middle of a face edge defined
+    //           by two nodes, else it is at myNode1
+    const SMDS_MeshNode* myNode1[2];
+    const SMDS_MeshNode* myNode2[2];
+
+    gp_Vec myVector; // vector on the plane; to use a default plane set vector = (0,0,0)
+
+    // point to return coordinates of a middle of the two points, projected to mesh
+    gp_Pnt myMidProjPoint;
+  };
+  typedef std::vector<PolySegment> TListOfPolySegments;
+
+  /*!
+   * \brief Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+   *        the initial mesh. Positions of new nodes are found by cutting the mesh by the
+   *        plane passing through pairs of points specified by each PolySegment structure.
+   *        If there are several paths connecting a pair of points, the shortest path is
+   *        selected by the module. Position of the cutting plane is defined by the two
+   *        points and an optional vector lying on the plane specified by a PolySegment.
+   *        By default the vector is defined by Mesh module as following. A middle point
+   *        of the two given points is computed. The middle point is projected to the mesh.
+   *        The vector goes from the middle point to the projection point. In case of planar
+   *        mesh, the vector is normal to the mesh.
+   *  \param [inout] segments - PolySegment's defining positions of cutting planes.
+   *        Return the used vector and position of the middle point.
+   *  \param [in] group - an optional group where created mesh segments will
+   *        be added.
+   */
+  void MakePolyLine( TListOfPolySegments&   segments,
+                     SMESHDS_Group*         group=0,
+                     SMESH_ElementSearcher* searcher=0);
+
  private:
 
   /*!
index 022e091ba698440bc1e2596e219b55ba2871023a..0a9251a26bb14960bb6184948cfd8ad53cf62588 100644 (file)
@@ -2963,7 +2963,7 @@ bool SMESH_MesherHelper::IsDistorted2D( SMESH_subMesh*      faceSM,
  * \brief Find out elements orientation on a geometrical face
  * \param theFace - The face correctly oriented in the shape being meshed
  * \retval bool - true if the face normal and the normal of first element
- *                in the correspoding submesh point in different directions
+ *                in the corresponding submesh point in different directions
  */
 //================================================================================
 
@@ -3460,6 +3460,24 @@ double SMESH_MesherHelper::GetOtherParam(const double param) const
   return fabs(param-myPar1[i]) < fabs(param-myPar2[i]) ? myPar2[i] : myPar1[i];
 }
 
+//=======================================================================
+//function : NbRealSeam
+//purpose  : Return a number of real seam edges in the shape set through
+//           IsQuadraticSubMesh() or SetSubShape(). A real seam edge encounters twice in a wire
+//=======================================================================
+
+size_t SMESH_MesherHelper::NbRealSeam() const
+{
+  size_t nb = 0;
+
+  std::set< int >::const_iterator id = mySeamShapeIds.begin();
+  for ( ; id != mySeamShapeIds.end(); ++id )
+    if ( *id < 0 ) ++nb;
+    else break;
+
+  return nb;
+}
+
 //=======================================================================
 //function : IsOnSeam
 //purpose  : Check if UV is on seam. Return 0 if not, 1 for U seam, 2 for V seam
@@ -4360,7 +4378,7 @@ namespace { // Structures used by FixQuadraticElements()
                                              vector< TChain> &   resultChains,
                                              SMDS_TypeOfPosition pos )
   {
-    // put links in the set and evalute number of result chains by number of boundary links
+    // put links in the set and evaluate number of result chains by number of boundary links
     TLinkSet linkSet;
     size_t nbBndLinks = 0;
     for ( TChain::iterator lnk = allLinks.begin(); lnk != allLinks.end(); ++lnk ) {
@@ -5126,7 +5144,7 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
             MSG("Internal chain - ignore");
             continue;
           }
-          // mesure chain length and compute link position along the chain
+          // measure chain length and compute link position along the chain
           double chainLen = 0;
           vector< double > linkPos;
           TChain savedChain; // backup
index cf3506fea7af1d83ed6c12f37debde26c5b88622..d4f54833ae574dacf157d599aa2f7d4ea926213c 100644 (file)
@@ -52,7 +52,7 @@ typedef std::map<SMESH_TLink, const SMDS_MeshNode*>::iterator ItTLinkNode;
 
 typedef SMDS_Iterator<const TopoDS_Shape*>  PShapeIterator;
 typedef boost::shared_ptr< PShapeIterator > PShapeIteratorPtr;
-  
+
 typedef std::vector<const SMDS_MeshNode* > TNodeColumn;
 typedef std::map< double, TNodeColumn >    TParam2ColumnMap;
 
@@ -561,9 +561,15 @@ public:
   /*!
    * \brief Check if the shape set through IsQuadraticSubMesh() or SetSubShape()
    *        has a degenerated edges
-    * \retval bool - true if it has
+   *  \retval bool - true if there are degenerated edges
    */
   bool HasDegeneratedEdges() const { return !myDegenShapeIds.empty(); }
+  /*!
+   * \brief Return a number of degenerated edges in the shape set through
+   *        IsQuadraticSubMesh() or SetSubShape()
+   *  \retval size_t - nb edges
+   */
+  size_t NbDegeneratedEdges() const { return myDegenShapeIds.size(); }
 
   /*!
    * \brief Check if shape is a seam edge or it's vertex
@@ -610,6 +616,12 @@ public:
    *  \retval bool - true if it has
    */
   bool HasRealSeam() const { return HasSeam() && ( *mySeamShapeIds.begin() < 0 ); }
+  /*!
+   * \brief Return a number of real seam edges in the shape set through
+   *        IsQuadraticSubMesh() or SetSubShape(). A real seam edge encounters twice in a wire
+   *  \retval size_t - nb of real seams
+   */
+  size_t NbRealSeam() const;
   /*!
    * \brief Return index of periodic parametric direction of a closed face
    *  \retval int - 1 for U, 2 for V direction
index 51564bf7820973b8b05f420c17d2a7144fdfb93e..b307ba31c334759c7869b2b73ec0beb83d7c857a 100644 (file)
@@ -2481,7 +2481,7 @@ bool SMESH_Pattern::Apply (const TopoDS_Face&   theFace,
   // If there are several wires, define the order of edges of inner wires:
   // compute UV of inner edge-points using 2 methods: the one for in-face points
   // and the one for on-edge points and then choose the best edge order
-  // by the best correspondance of the 2 results
+  // by the best correspondence of the 2 results
   if ( nbWires > 1 )
   {
     // compute UV of inner edge-points using the method for in-face points
index f994b83ecd020ed74828c79b950ec3f0515aac10..a28033fda4fe6c43d0bf337a5b1ec1ea1f66f75c 100644 (file)
@@ -95,7 +95,7 @@ SMESH_ProxyMesh::SMESH_ProxyMesh(std::vector<SMESH_ProxyMesh::Ptr>& components):
 
 //================================================================================
 /*!
- * \brief Destructor deletes proxy submeshes and tmp elemens
+ * \brief Destructor deletes proxy submeshes and tmp elements
  */
 //================================================================================
 
index 2f89997baeae95d630520b9bd3821b3e2377251a..184a45a51cffdcfef1cbe856d757efc5086a97f5 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : SMESH_subMesh.cxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
index b584a345d6db12cd61a2060866d30b9404a6a563..f85aa4a45a4ac0ac8b6aeb3691188777a4e50271 100644 (file)
@@ -628,7 +628,7 @@ namespace
         "SMESH_TETRAHEDRA","SMESH_QUADRATIC_TETRAHEDRONS","SMESH_PYRAMIDS",
         "SMESH_QUADRATIC_PYRAMIDS","SMESH_HEXAHEDRA","SMESH_QUADRATIC_HEXAHEDRONS",
         "SMESH_TRIQUADRATIC_HEXAHEDRONS","SMESH_PENTAHEDRA","SMESH_QUADRATIC_PENTAHEDRONS",
-               "SMESH_BIQUADRATIC_PENTAHEDRONS",
+        "SMESH_BIQUADRATIC_PENTAHEDRONS",
         "SMESH_OCTAHEDRA","SMESH_POLYEDRONS","SMESH_QUADRATIC_POLYEDRONS","SMESH_BALLS"
       };
       // is typeMsg complete? (compilation failure mains that enum SMDSAbs_EntityType changed)
@@ -1145,6 +1145,8 @@ namespace
       type = QObject::tr( "LENGTH_EDGES" );
     else if ( dynamic_cast< SMESH::Controls::Length2D* >( f.get() ) )
       type = QObject::tr( "LENGTH2D_EDGES" );
+    else if ( dynamic_cast< SMESH::Controls::Deflection2D* >( f.get() ) )
+      type = QObject::tr( "DEFLECTION2D_FACES" );
     else if ( dynamic_cast< SMESH::Controls::MultiConnection* >( f.get() ) )
       type = QObject::tr( "MULTI_BORDERS" );
     else if ( dynamic_cast< SMESH::Controls::MultiConnection2D* >( f.get() ) )
@@ -1680,6 +1682,7 @@ namespace
     ActionControl.Bind( SMESHOp::OpBareBorderFace,        SMESH_Actor::eBareBorderFace );
     ActionControl.Bind( SMESHOp::OpOverConstrainedFace,   SMESH_Actor::eOverConstrainedFace );
     ActionControl.Bind( SMESHOp::OpLength2D,              SMESH_Actor::eLength2D );
+    ActionControl.Bind( SMESHOp::OpDeflection2D,          SMESH_Actor::eDeflection2D );
     ActionControl.Bind( SMESHOp::OpConnection2D,          SMESH_Actor::eMultiConnection2D );
     ActionControl.Bind( SMESHOp::OpArea,                  SMESH_Actor::eArea );
     ActionControl.Bind( SMESHOp::OpTaper,                 SMESH_Actor::eTaper );
@@ -3622,6 +3625,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case SMESHOp::OpBareBorderFace:
   case SMESHOp::OpOverConstrainedFace:
   case SMESHOp::OpLength2D:
+  case SMESHOp::OpDeflection2D:
   case SMESHOp::OpConnection2D:
   case SMESHOp::OpArea:
   case SMESHOp::OpTaper:
@@ -3923,6 +3927,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpBareBorderFace,        "BARE_BORDER_FACE",        "ICON_BARE_BORDER_FACE",        0, true );
   createSMESHAction( SMESHOp::OpOverConstrainedFace,   "OVER_CONSTRAINED_FACE",   "ICON_OVER_CONSTRAINED_FACE",   0, true );
   createSMESHAction( SMESHOp::OpLength2D,              "LENGTH_2D",               "ICON_LENGTH_2D",     0, true );
+  createSMESHAction( SMESHOp::OpDeflection2D,          "DEFLECTION_2D",           "ICON_DEFLECTION_2D", 0, true );
   createSMESHAction( SMESHOp::OpConnection2D,          "CONNECTION_2D",           "ICON_CONNECTION_2D", 0, true );
   createSMESHAction( SMESHOp::OpArea,                  "AREA",                    "ICON_AREA",          0, true );
   createSMESHAction( SMESHOp::OpTaper,                 "TAPER",                   "ICON_TAPER",         0, true );
@@ -4052,6 +4057,7 @@ void SMESHGUI::initialize( CAM_Application* app )
                << SMESHOp::OpNodeConnectivityNb                                         // node controls
                << SMESHOp::OpFreeEdge << SMESHOp::OpFreeBorder
                << SMESHOp::OpLength << SMESHOp::OpConnection << SMESHOp::OpEqualEdge    // edge controls
+               << SMESHOp::OpDeflection2D
                << SMESHOp::OpFreeFace << SMESHOp::OpLength2D << SMESHOp::OpConnection2D
                << SMESHOp::OpArea << SMESHOp::OpTaper << SMESHOp::OpAspectRatio
                << SMESHOp::OpMinimumAngle << SMESHOp::OpWarpingAngle << SMESHOp::OpSkew
@@ -4165,6 +4171,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( SMESHOp::OpSkew,                  faceId,   -1 );
   createMenu( SMESHOp::OpMaxElementLength2D,    faceId,   -1 );
   createMenu( SMESHOp::OpEqualFace,             faceId,   -1 );
+  createMenu( SMESHOp::OpDeflection2D,          faceId,   -1 );
   createMenu( SMESHOp::OpAspectRatio3D,         volumeId, -1 );
   createMenu( SMESHOp::OpVolume,                volumeId, -1 );
   createMenu( SMESHOp::OpMaxElementLength3D,    volumeId, -1 );
@@ -4314,6 +4321,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( SMESHOp::OpSkew,                ctrl2dTb );
   createTool( SMESHOp::OpMaxElementLength2D,  ctrl2dTb );
   createTool( SMESHOp::OpEqualFace,           ctrl2dTb );
+  createTool( SMESHOp::OpDeflection2D,        ctrl2dTb );
 
   createTool( SMESHOp::OpAspectRatio3D,         ctrl3dTb );
   createTool( SMESHOp::OpVolume,                ctrl3dTb );
@@ -4725,10 +4733,15 @@ void SMESHGUI::initialize( CAM_Application* app )
   popupMgr()->insert ( action( SMESHOp::OpOverConstrainedFace ), aSubId, -1 );
   popupMgr()->setRule( action( SMESHOp::OpOverConstrainedFace ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
   popupMgr()->setRule( action( SMESHOp::OpOverConstrainedFace ), "controlMode = 'eOverConstrainedFace'", QtxPopupMgr::ToggleRule );
+
   popupMgr()->insert ( action( SMESHOp::OpEqualFace ), aSubId, -1 );
   popupMgr()->setRule( action( SMESHOp::OpEqualFace ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
   popupMgr()->setRule( action( SMESHOp::OpEqualFace ), "controlMode = 'eCoincidentElems2D'", QtxPopupMgr::ToggleRule );
 
+  popupMgr()->insert ( action( SMESHOp::OpDeflection2D ), aSubId, -1 );
+  popupMgr()->setRule( action( SMESHOp::OpDeflection2D ), aMeshInVtkHasFaces + " && hasGeomReference", QtxPopupMgr::VisibleRule );
+  popupMgr()->setRule( action( SMESHOp::OpDeflection2D ), "controlMode = 'eDeflection2D'", QtxPopupMgr::ToggleRule );
+
   aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS
 
   popupMgr()->insert ( action( SMESHOp::OpAspectRatio3D  ), aSubId, -1 );
index b762d30188e9f0455db5407600a85e5c7add84cf..dd82c712df9a994a10d89b98ef017262b45bfcdc 100644 (file)
@@ -1539,7 +1539,7 @@ SMESHGUI_ComputeOp::SMESHGUI_ComputeOp()
 
 //================================================================================
 /*!
- * \brief Desctructor
+ * \brief Destructor
 */
 //================================================================================
 
@@ -2154,7 +2154,7 @@ SMESHGUI_EvaluateOp::SMESHGUI_EvaluateOp()
 
 //================================================================================
 /*!
- * \brief Desctructor
+ * \brief Destructor
 */
 //================================================================================
 
index 1222c4b808ce93543284befb97f59ba42284b608..f5017351bc37feb34d10ed1bd3f5ab569fb05afe 100755 (executable)
@@ -176,7 +176,7 @@ int SMESHGUI_PredicateFilter::GetId() const
 
 /*
   Class       : SMESHGUI_QuadrangleFilter
-  Description : Verify whether selected cell is quadranle
+  Description : Verify whether selected cell is quadrangle
 */
 
 //=======================================================================
@@ -194,7 +194,7 @@ SMESHGUI_QuadrangleFilter::~SMESHGUI_QuadrangleFilter()
 
 //=======================================================================
 // name    : SMESHGUI_QuadrangleFilter::IsValid
-// Purpose : Verify whether selected cell is quadranle
+// Purpose : Verify whether selected cell is quadrangle
 //=======================================================================
 bool SMESHGUI_QuadrangleFilter::IsValid( const int theCellId ) const
 {
@@ -214,7 +214,7 @@ bool SMESHGUI_QuadrangleFilter::IsValid( const int theCellId ) const
 
 //=======================================================================
 // name    : SMESHGUI_QuadrangleFilter::IsValid
-// Purpose : Verify whether selected cell is quadranle
+// Purpose : Verify whether selected cell is quadrangle
 //=======================================================================
 bool SMESHGUI_QuadrangleFilter::IsObjValid( const int theObjId ) const
 {
index 08a43c7675be5d5c608730f252b0c80ccef7a23c..d8f662b55dcf3803e1c4a5d546fc7cc1077c7fd0 100755 (executable)
@@ -104,7 +104,7 @@ public:
 
 /*
   Class       : SMESHGUI_QuadrangleFilter
-  Description : Verify whether selected cell is quadranle
+  Description : Verify whether selected cell is quadrangle
 */
 
 DEFINE_STANDARD_HANDLE(SMESHGUI_QuadrangleFilter, SMESHGUI_Filter)
index 6c6987c399701ee75f41b78625744014389a09c4..badc87709ffda3ac8d7ea9c786df6d9ef3b5b3ce 100755 (executable)
@@ -798,7 +798,7 @@ void SMESHGUI_FilterTable::Table::setEditable (bool isEditable,
 
 //=======================================================================
 // name    : SMESHGUI_FilterTable::Table::isEditable
-// Purpose : Verify wheter cell is editable
+// Purpose : Verify whether cell is editable
 //=======================================================================
 bool SMESHGUI_FilterTable::Table::isEditable (int row, int col) const
 {
@@ -1572,6 +1572,7 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
                  aCriterion == SMESH::FT_MaxElementLength3D ||
                  aCriterion == SMESH::FT_Length             ||
                  aCriterion == SMESH::FT_Length2D           ||
+                 aCriterion == SMESH::FT_Deflection2D       ||
                  aCriterion == SMESH::FT_BallDiameter );
 
   bool toEnable = (( isDbl && ((ComboItem*)aTable->item(aRow, 1))->value() == SMESH::FT_EqualTo) ||
@@ -1618,6 +1619,7 @@ const char* SMESHGUI_FilterTable::getPrecision( const int aType )
     retval = "len_tol_precision"; break;
   case SMESH::FT_Length:
   case SMESH::FT_Length2D:
+  case SMESH::FT_Deflection2D:
   case SMESH::FT_MaxElementLength2D:
   case SMESH::FT_MaxElementLength3D:
   case SMESH::FT_BallDiameter:
@@ -1793,13 +1795,13 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   }
 
   // find out a type of item required by a new criterion and other table features
-  int aCriterionType       = GetCriterionType(row);
+  int  aCriterionType      = GetCriterionType(row);
   bool anIsDoubleCriterion = false;
   bool anIsIntCriterion    = false;
   bool anIsComboCriterion  = false;
   // other features:
   QList<int> comboIDs; // values to show in a combo item
-  int nbCompareSigns = 0; // possible values are 0,1,3
+  int  nbCompareSigns      = 0; // possible values are 0,1,3
   bool isThresholdEditable = false; // actual for "simple" item types
   switch ( aCriterionType )
   {
@@ -1812,8 +1814,7 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   case SMESH::FT_Area:
   case SMESH::FT_Volume3D:
   case SMESH::FT_MaxElementLength2D:
-  case SMESH::FT_MaxElementLength3D:
-    anIsDoubleCriterion = true; break;
+  case SMESH::FT_MaxElementLength3D: anIsDoubleCriterion = true; break;
 
   case SMESH::FT_FreeBorders:
   case SMESH::FT_FreeEdges:
@@ -1829,7 +1830,8 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
   case SMESH::FT_MultiConnection2D: anIsIntCriterion = true; nbCompareSigns = 3; break;
 
   case SMESH::FT_Length:
-  case SMESH::FT_Length2D: anIsDoubleCriterion = true; break;
+  case SMESH::FT_Length2D:
+  case SMESH::FT_Deflection2D: anIsDoubleCriterion = true; break;
 
   case SMESH::FT_BelongToMeshGroup: break;
 
@@ -2241,6 +2243,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_BelongToGenSurface ] = tr("BELONG_TO_GENSURFACE");
       aCriteria[ SMESH::FT_LyingOnGeom        ] = tr("LYING_ON_GEOM");
       aCriteria[ SMESH::FT_Length2D           ] = tr("LENGTH2D");
+      aCriteria[ SMESH::FT_Deflection2D       ] = tr("DEFLECTION2D");
       aCriteria[ SMESH::FT_MultiConnection2D  ] = tr("MULTI2D_BORDERS");
       aCriteria[ SMESH::FT_FreeFaces          ] = tr("FREE_FACES");
       aCriteria[ SMESH::FT_BareBorderFace     ] = tr("BARE_BORDER_FACE");
index a05414b8c54db553d97fb2e0619d161219ad5982..4fb23cb4eb9458873dc9d758e081fd77eb4f13b6 100644 (file)
@@ -322,7 +322,7 @@ SMESHGUI_MeshInfo::SMESHGUI_MeshInfo( QWidget* parent )
   QLabel*  a2DTriQuad   = createField();
   a2DTriQuad->setObjectName("nbQuadraticTriangle");
   QLabel*  a2DTriBiQuad = createField();
-    a2DTriBiQuad->setObjectName("nbBiQuadraticTriangle");
+  a2DTriBiQuad->setObjectName("nbBiQuadraticTriangle");
   QLabel*  a2DQuaLab    = new QLabel( tr( "QUADRANGLES_LAB" ), this );
   QLabel*  a2DQuaTotal  = createField();
   a2DQuaTotal->setObjectName("nbQuadrangle");
@@ -941,7 +941,7 @@ void SMESHGUI_MeshInfo::saveInfo( QTextStream &out )
   \param parent parent widget
 */
 SMESHGUI_ElemInfo::SMESHGUI_ElemInfo( QWidget* parent )
-: QWidget( parent ), myActor( 0 ), myIsElement( -1 )
+  : QWidget( parent ), myActor( 0 ), myIsElement( -1 )
 {
   myFrame = new QWidget( this );
   myExtra = new ExtraWidget( this );
@@ -966,11 +966,13 @@ SMESHGUI_ElemInfo::~SMESHGUI_ElemInfo()
   \brief Set mesh data source (actor)
   \param actor mesh object actor
 */
-void SMESHGUI_ElemInfo::setSource( SMESH_Actor* actor )
+void SMESHGUI_ElemInfo::setSource( SMESH_Actor* actor, SMESH::SMESH_IDSource_var obj )
 {
   if ( myActor != actor ) {
     myActor = actor;
     myIsElement = -1;
+    SMESH::SMESH_Mesh_var mesh = obj->GetMesh();
+    myMeshHasShape = ( !mesh->_is_nil() && mesh->HasShapeToMesh() );
     clear();
   }
 }
@@ -1163,7 +1165,7 @@ void SMESHGUI_ElemInfo::updateControls()
   \param parent parent widget
 */
 SMESHGUI_SimpleElemInfo::SMESHGUI_SimpleElemInfo( QWidget* parent )
-: SMESHGUI_ElemInfo( parent )
+  : SMESHGUI_ElemInfo( parent )
 {
   myInfo = new QTextBrowser( frame() );
   QVBoxLayout* l = new QVBoxLayout( frame() );
@@ -1178,12 +1180,12 @@ SMESHGUI_SimpleElemInfo::SMESHGUI_SimpleElemInfo( QWidget* parent )
 void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
 {
   clearInternal();
-  
+
   if ( actor() ) {
     int grp_details = SMESHGUI::resourceMgr()->booleanValue( "SMESH", "elem_info_grp_details", false );
     int precision   = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
     int cprecision = -1;
-    if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false )) 
+    if ( SMESHGUI::resourceMgr()->booleanValue( "SMESH", "use_precision", false ))
       cprecision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "controls_precision", -1 );
     foreach ( long id, ids ) {
       if ( !isElements() ) {
@@ -1228,7 +1230,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
           myInfo->append( QString( "<b>%1</b>" ).arg( SMESHGUI_ElemInfo::tr( "FREE_NODE" )).arg( id ));
         }
         // node position
-        SMESH::SMESH_Mesh_ptr aMeshPtr = actor()->GetObject()->GetMeshServer();   
+        SMESH::SMESH_Mesh_ptr aMeshPtr = actor()->GetObject()->GetMeshServer();
         if ( !CORBA::is_nil( aMeshPtr )) {
           SMESH::NodePosition_var pos = aMeshPtr->GetNodePosition( id );
           int shapeID = pos->shapeID;
@@ -1244,8 +1246,8 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
             case GEOM::FACE:
               shapeType = SMESHGUI_ElemInfo::tr( "GEOM_FACE" );
               if ( pos->params.length() == 2 ) {
-               u = pos->params[0];
-               v = pos->params[1];
+                u = pos->params[0];
+                v = pos->params[1];
               }
               break;
             case GEOM::VERTEX:
@@ -1289,7 +1291,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
                 SMESH::SMESH_Group_var         aStdGroup  = SMESH::SMESH_Group::_narrow( aGrp );
                 SMESH::SMESH_GroupOnGeom_var   aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGrp );
                 SMESH::SMESH_GroupOnFilter_var aFltGroup  = SMESH::SMESH_GroupOnFilter::_narrow( aGrp );
-                
+
                 // type : group on geometry, standalone group, group on filter
                 if ( !CORBA::is_nil( aStdGroup )) {
                   myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )).
@@ -1309,11 +1311,11 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
                   myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )).
                                   arg( SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" )) );
                 }
-                
+
                 // size
                 myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "SIZE" )).
                                 arg( QString::number( aGrp->Size() )) );
-                
+
                 // color
                 SALOMEDS::Color color = aGrp->GetColor();
                 myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "COLOR" )).
@@ -1326,11 +1328,11 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
       else {
         //
         // show element info
-        // 
+        //
         const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindElement( id );
         SMESH::Controls::NumericalFunctorPtr afunctor;
         if ( !e ) return;
-        
+
         // Element ID && Type
         QString stype;
         switch( e->GetType() ) {
@@ -1344,7 +1346,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
           stype = SMESHGUI_ElemInfo::tr( "FACE" ); break;
         case SMDSAbs_Volume:
           stype = SMESHGUI_ElemInfo::tr( "VOLUME" ); break;
-        default: 
+        default:
           break;
         }
         if ( stype.isEmpty() ) return;
@@ -1385,7 +1387,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
         case SMDSEntity_Polyhedra:
         case SMDSEntity_Quad_Polyhedra:
           gtype = SMESHGUI_ElemInfo::tr( "POLYHEDRON" ); break;
-        default: 
+        default:
           break;
         }
         if ( !gtype.isEmpty() )
@@ -1444,53 +1446,58 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
           afunctor.reset( new SMESH::Controls::Length() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           afunctor->SetPrecision( cprecision );
-          myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "LENGTH_EDGES" )).arg( afunctor->GetValue( id )) );  
+          myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "LENGTH_EDGES" )).arg( afunctor->GetValue( id )) );
         }
         if( e->GetType() == SMDSAbs_Face ) {
           //Area
           afunctor.reset(  new SMESH::Controls::Area() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
-          afunctor->SetPrecision( cprecision );  
+          afunctor->SetPrecision( cprecision );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "AREA_ELEMENTS" )).arg( afunctor->GetValue( id )) );
           //Taper
           afunctor.reset( new SMESH::Controls::Taper() );
-          afunctor->SetMesh( actor()->GetObject()->GetMesh() );  
+          afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           afunctor->SetPrecision( cprecision );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "TAPER_ELEMENTS" )).arg( afunctor->GetValue( id )) );
           //AspectRatio2D
           afunctor.reset( new SMESH::Controls::AspectRatio() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "ASPECTRATIO_ELEMENTS" )).arg( afunctor->GetValue( id )) );
-          //Minimum angle         
+          //Minimum angle
           afunctor.reset( new SMESH::Controls::MinimumAngle() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           afunctor->SetPrecision( cprecision );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "MINIMUMANGLE_ELEMENTS" )).arg( afunctor->GetValue( id )) );
-          //Wraping angle        
+          //Warping angle
           afunctor.reset( new SMESH::Controls::Warping() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           afunctor->SetPrecision( cprecision );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "WARP_ELEMENTS" )).arg( afunctor->GetValue( id )) );
-          //Skew         
+          //Skew
           afunctor.reset( new SMESH::Controls::Skew() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           afunctor->SetPrecision( cprecision );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "SKEW_ELEMENTS" )).arg( afunctor->GetValue( id )) );
-          //ElemDiam2D   
+          //ElemDiam2D
           afunctor.reset( new SMESH::Controls::MaxElementLength2D() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+          afunctor->SetPrecision( cprecision );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "MAX_ELEMENT_LENGTH_2D" )).arg( afunctor->GetValue( id )) );
+          //min edge length
+          afunctor.reset( new SMESH::Controls::Length2D() );
+          afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+          myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "MIN_ELEM_EDGE" )).arg( afunctor->GetValue( id )) );
         }
         if( e->GetType() == SMDSAbs_Volume ) {
           //AspectRatio3D
           afunctor.reset(  new SMESH::Controls::AspectRatio3D() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "ASPECTRATIO_3D_ELEMENTS" )).arg( afunctor->GetValue( id )) );
-          //Volume      
+          //Volume
           afunctor.reset(  new SMESH::Controls::Volume() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "VOLUME_3D_ELEMENTS" )).arg( afunctor->GetValue( id )) );
-          //ElementDiameter3D    
+          //ElementDiameter3D
           afunctor.reset(  new SMESH::Controls::Volume() );
           afunctor->SetMesh( actor()->GetObject()->GetMesh() );
           myInfo->append( QString( "- <b>%1:</b> %2" ).arg( tr( "MAX_ELEMENT_LENGTH_3D" )).arg( afunctor->GetValue( id )) );
@@ -1501,7 +1508,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
         // Gravity center
         XYZ gc = gravityCenter( e );
         myInfo->append( QString( "<b>%1:</b> (%2, %3, %4)" ).arg( SMESHGUI_ElemInfo::tr( "GRAVITY_CENTER" )).arg( gc.x() ).arg( gc.y() ).arg( gc.z() ));
-        
+
         // Normal vector
         if( e->GetType() == SMDSAbs_Face ) {
           XYZ gc = normal( e );
@@ -1510,7 +1517,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
 
         // Element position
         if ( e->GetType() >= SMDSAbs_Edge && e->GetType() <= SMDSAbs_Volume ) {
-          SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer();    
+          SMESH::SMESH_Mesh_ptr aMesh = actor()->GetObject()->GetMeshServer();
           if ( !CORBA::is_nil( aMesh )) {
             SMESH::ElementPosition pos = aMesh->GetElementPosition( id );
             int shapeID = pos.shapeID;
@@ -1550,7 +1557,7 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
                 SMESH::SMESH_Group_var         aStdGroup  = SMESH::SMESH_Group::_narrow( aGrp );
                 SMESH::SMESH_GroupOnGeom_var   aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGrp );
                 SMESH::SMESH_GroupOnFilter_var aFltGroup  = SMESH::SMESH_GroupOnFilter::_narrow( aGrp );
-                
+
                 // type : group on geometry, standalone group, group on filter
                 if ( !CORBA::is_nil( aStdGroup )) {
                   myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )).
@@ -1570,10 +1577,10 @@ void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
                   myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "TYPE" )).
                                   arg( SMESHGUI_AddInfo::tr( "GROUP_ON_FILTER" )) );
                 }
-                
+
                 myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "SIZE" )).
                                 arg( QString::number( aGrp->Size() )) );
-                
+
                 // color
                 SALOMEDS::Color color = aGrp->GetColor();
                 myInfo->append( QString( "  - <b>%1:</b> %2" ).arg( SMESHGUI_AddInfo::tr( "COLOR" )).
@@ -1652,7 +1659,7 @@ QWidget* SMESHGUI_TreeElemInfo::ItemDelegate::createEditor( QWidget* parent, con
   \param parent parent widget
 */
 SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo( QWidget* parent )
-: SMESHGUI_ElemInfo( parent )
+  : SMESHGUI_ElemInfo( parent )
 {
   myInfo = new QTreeWidget( frame() );
   myInfo->setColumnCount( 2 );
@@ -1992,7 +1999,7 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
             QTreeWidgetItem* taperlItem = createItem( cntrItem, Bold );
             taperlItem->setText( 0, tr( "TAPER_ELEMENTS" ));
             taperlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) );
-            //Wraping angle
+            //Warping angle
             afunctor.reset( new SMESH::Controls::Warping() );
             afunctor->SetMesh( actor()->GetObject()->GetMesh() );
             afunctor->SetPrecision( cprecision );
@@ -2026,6 +2033,15 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
             skewItem->setText( 0, tr( "SKEW_ELEMENTS" ));
             skewItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) );
           }
+          //Deflection
+          if ( hasShapeToMesh() )
+          {
+            afunctor.reset( new SMESH::Controls::Deflection2D() );
+            afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+            QTreeWidgetItem* deflItem = createItem( cntrItem, Bold );
+            deflItem->setText( 0, tr( "DEFLECTION_2D" ));
+            deflItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) );
+          }
           //ElemDiam2D
           if ( !e->IsPoly() )
           {
@@ -2060,6 +2076,13 @@ void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
           diam3Item->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) );
         }
 
+        //min edge length
+        afunctor.reset( new SMESH::Controls::Length2D() );
+        afunctor->SetMesh( actor()->GetObject()->GetMesh() );
+        QTreeWidgetItem* minEdgeItem = createItem( cntrItem, Bold );
+        minEdgeItem->setText( 0, tr( "MIN_ELEM_EDGE" ));
+        minEdgeItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id )) );
+
         // gravity center
         XYZ gc = gravityCenter( e );
         QTreeWidgetItem* gcItem = createItem( elemItem, Bold );
@@ -2386,7 +2409,7 @@ void GrpComputor::compute()
   \param parent parent widget
 */
 SMESHGUI_AddInfo::SMESHGUI_AddInfo( QWidget* parent )
-: QTreeWidget( parent )
+  : QTreeWidget( parent )
 {
   setColumnCount( 2 );
   header()->setStretchLastSection( true );
@@ -2990,7 +3013,7 @@ void SMESHGUI_MeshInfoDlg::showInfo( const Handle(SALOME_InteractiveObject)& IO
           SMESH::GetNameOfSelectedElements( selector, IO, ID ) :
           SMESH::GetNameOfSelectedNodes( selector, IO, ID );
       }
-      myElemInfo->setSource( myActor ) ;
+      myElemInfo->setSource( myActor, obj ) ;
       if ( nb > 0 ) {
         myID->setText( ID.trimmed() );
         QSet<long> ids;
@@ -3627,12 +3650,12 @@ void SMESHGUI_CtrlInfo::showInfo( SMESH::SMESH_IDSource_ptr obj )
       computeOverConstrainedVolumesInfo();
       // aspect Ratio 3D histogram
       computeAspectRatio3D();
-     }
-     else {
-       myButtons[7]->setEnabled( true );
-       myButtons[8]->setEnabled( true );
-       myButtons[9]->setEnabled( true );
-     }
+    }
+    else {
+      myButtons[7]->setEnabled( true );
+      myButtons[8]->setEnabled( true );
+      myButtons[9]->setEnabled( true );
+    }
 #ifdef DISABLE_PLOT2DVIEWER
     myMainLayout->setRowStretch(17,0);
     for( int i=35; i<=37; i++)
@@ -3860,7 +3883,7 @@ void SMESHGUI_CtrlInfo::saveInfo( QTextStream &out ) {
   \param parent parent widget
 */
 SMESHGUI_CtrlInfoDlg::SMESHGUI_CtrlInfoDlg( QWidget* parent )
-: QDialog( parent )
+  : QDialog( parent )
 {
   setAttribute( Qt::WA_DeleteOnClose, true );
   setWindowTitle( tr( "CTRL_INFO" ));
index 4b43e1aa43f323055c18ae4c3d61a0a0c0e5ace0..85edb6001be0c7e56d9119479a77cd0bf3790247 100644 (file)
@@ -153,7 +153,7 @@ public:
   SMESHGUI_ElemInfo( QWidget* = 0 );
   ~SMESHGUI_ElemInfo();
 
-  void         setSource( SMESH_Actor* );
+  void         setSource( SMESH_Actor*, SMESH::SMESH_IDSource_var );
   void         showInfo( long, bool );
   void         showInfo( QSet<long>, bool );
   void         clear();
@@ -179,6 +179,7 @@ protected:
   QWidget*     frame() const;
   SMESH_Actor* actor() const;
   bool         isElements() const;
+  bool         hasShapeToMesh() const { return myMeshHasShape; }
 
   virtual void information( const QList<long>& ) = 0;
   virtual void clearInternal();
@@ -204,6 +205,7 @@ private:
   QWidget*         myFrame;
   ExtraWidget*     myExtra;
   int              myIndex;
+  bool             myMeshHasShape;
 };
 
 class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo
index 63c9885cd83a7c11483237bfa6da063974e17ccc..c45b9eae15288d4f6fee9404f1275b2d09bbc045 100644 (file)
@@ -91,7 +91,7 @@ namespace SMESHOp {
     OpRemoveElemGroupPopup   = 2082,   // POPUP MENU - REMOVE ELEMENTS FROM GROUP
     OpMeshInformation        = 2100,   // MENU MESH  - MESH INFORMATION
     OpWhatIs                 = 2101,   // MENU MESH  - MESH ELEMENT INFORMATION
-    OpStdInfo                = 2102,   // MENU MESH  - MESH STANDART INFORMATION
+    OpStdInfo                = 2102,   // MENU MESH  - MESH STANDARD INFORMATION
     OpFindElementByPoint     = 2103,   // MENU MESH  - FIND ELEMENT BY POINT
     OpUpdate                 = 2200,   // POPUP MENU - UPDATE
     // Controls -----------------------//--------------------------------
@@ -116,6 +116,7 @@ namespace SMESHOp {
     OpSkew                   = 3210,   // MENU CONTROLS - SKEW
     OpMaxElementLength2D     = 3211,   // MENU CONTROLS - ELEMENT DIAMETER 2D
     OpEqualFace              = 3212,   // MENU CONTROLS - DOUBLE FACES
+    OpDeflection2D           = 3213,   // MENU CONTROLS - DEFLECTION 2D
     OpAspectRatio3D          = 3300,   // MENU CONTROLS - ASPECT RATIO 3D
     OpVolume                 = 3301,   // MENU CONTROLS - VOLUME
     OpMaxElementLength3D     = 3302,   // MENU CONTROLS - ELEMENT DIAMETER 3D
index b6976df864921b7e5219e1bf10c74d7c794b9f9a..5eb6dba66ad7937257c028548868e702a7c86aa9 100644 (file)
@@ -364,6 +364,7 @@ QString SMESHGUI_Selection::controlMode( int ind ) const
     switch( actor->GetControlMode() ) {
     case SMESH_Actor::eLength:                mode = "eLength";                break;
     case SMESH_Actor::eLength2D:              mode = "eLength2D";              break;
+    case SMESH_Actor::eDeflection2D:          mode = "eDeflection2D";          break;
     case SMESH_Actor::eFreeEdges:             mode = "eFreeEdges";             break;
     case SMESH_Actor::eFreeNodes:             mode = "eFreeNodes";             break;
     case SMESH_Actor::eFreeBorders:           mode = "eFreeBorders";           break;
@@ -411,6 +412,11 @@ QString SMESHGUI_Selection::controlMode() const
   return "eNone";
 }
 
+//=======================================================================
+//function : isNumFunctor
+//purpose  : return true if a given actor is shown using a numeric functor
+//=======================================================================
+
 bool SMESHGUI_Selection::isNumFunctor( int ind ) const
 {
   bool result = false;
@@ -419,6 +425,7 @@ bool SMESHGUI_Selection::isNumFunctor( int ind ) const
     switch( actor->GetControlMode() ) {
     case SMESH_Actor::eLength:
     case SMESH_Actor::eLength2D:
+    case SMESH_Actor::eDeflection2D:
     case SMESH_Actor::eMultiConnection:
     case SMESH_Actor::eMultiConnection2D:
     case SMESH_Actor::eArea:
@@ -442,7 +449,7 @@ bool SMESHGUI_Selection::isNumFunctor( int ind ) const
 
 //=======================================================================
 //function : facesOrientationMode
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 QString SMESHGUI_Selection::facesOrientationMode( int ind ) const
index 08424f6d49a6d91fe65eae2ac847c5092df9ecf9..3a5e9227ae8e6dd25213c0fbd236a2a5a931259c 100755 (executable)
@@ -22,6 +22,9 @@
 
 // File   : SMESHGUI_SingleEditDlg.cxx
 // Author : Sergey LITONIN, Open CASCADE S.A.S.
+
+#include <SVTK_Selector.h>
+
 // SMESH includes
 //
 #include "SMESHGUI_SingleEditDlg.h"
@@ -42,7 +45,6 @@
 #include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
 
-#include <SVTK_Selector.h>
 #include <SVTK_ViewWindow.h>
 #include <SALOME_ListIO.hxx>
 
@@ -347,9 +349,9 @@ void SMESHGUI_SingleEditDlg::onTextChange (const QString& theNewText)
       aList.Append(anIO);
       mySelectionMgr->setSelectedObjects(aList,false);
       
-      TColStd_IndexedMapOfInteger selectedIndices;
-      TColStd_MapOfInteger newIndices;
-      mySelector->GetIndex(anIO,selectedIndices);
+      SVTK_IndexedMapOfIds selectedIndices;
+      SVTK_ListOfInteger newIndices;
+      mySelector->GetCompositeIndex(anIO,selectedIndices);
 
       int id1, id2;
       if ( !getNodeIds(myEdge->text(), id1, id2) )
@@ -367,25 +369,13 @@ void SMESHGUI_SingleEditDlg::onTextChange (const QString& theNewText)
 
       if ( findTriangles(aNode1,aNode2,tria1,tria2) )
       {
-        newIndices.Add(tria1->GetID());
-
-        const SMDS_MeshNode* a3Nodes[3];
-        SMDS_ElemIteratorPtr it;
-        int edgeInd = 2, i;
-        for (i = 0, it = tria1->nodesIterator(); it->more(); i++) {
-          a3Nodes[ i ] = static_cast<const SMDS_MeshNode*>(it->next());
-          if (i > 0 && ( (a3Nodes[ i ] == aNode1 && a3Nodes[ i - 1] == aNode2) ||
-                         (a3Nodes[ i ] == aNode2 && a3Nodes[ i - 1] == aNode1) ) ) {
-            edgeInd = i - 1;
-            break;
-          }
-        }
-        newIndices.Add(-edgeInd-1);
+       newIndices.push_back( aNode1->GetID() );
+       newIndices.push_back( aNode2->GetID() );
         
         myOkBtn->setEnabled(true);
         myApplyBtn->setEnabled(true);
       }
-      mySelector->AddOrRemoveIndex(anIO,newIndices, false);
+      mySelector->AddOrRemoveCompositeIndex(anIO, newIndices, false);
       SMESH::GetViewWindow(mySMESHGUI)->highlight( anIO, true, true );
     }
   }
@@ -420,7 +410,17 @@ void SMESHGUI_SingleEditDlg::onSelectionDone()
     if(SMDS_Mesh* aMesh = aVisualObj->GetMesh())
     {
       const SMDS_MeshElement* tria[2];
-      if( SMESH::GetEdgeNodes( mySelector, aVisualObj, anId1, anId2 ) >= 1 &&
+      
+      bool valid = false;      
+      SVTK_IndexedMapOfIds anIds;
+      mySelector->GetCompositeIndex(anIO,anIds);
+      if( anIds.Extent() == 1 && anIds(1).size() == 2 ) {
+       anId1 = anIds(1)[0];
+       anId2 = anIds(1)[1];
+       valid = true;
+      }
+             
+      if( valid &&
           findTriangles( aMesh->FindNode( anId1 ), aMesh->FindNode( anId2 ), tria[0],tria[1] ) )
       {
         QString aText = QString("%1-%2").arg(anId1).arg(anId2);
@@ -523,6 +523,7 @@ bool SMESHGUI_SingleEditDlg::onApply()
   // update actor
   if (aResult) {
     mySelector->ClearIndex();
+    mySelector->ClearCompositeIndex();
     mySelectionMgr->setSelectedObjects(aList, false);
     onSelectionDone();
     SMESH::UpdateView();
index 5c5bbab522936705450cfde8bf5554ba1045539b..10bc6ba22351523fb3777999d8747c0da72b8bd6 100644 (file)
@@ -362,7 +362,7 @@ namespace SMESH
     }
 
     if ( objModified ) {
-      // PAL16631. Mesurements showed that to show aVisualObj in SHADING(default) mode,
+      // PAL16631. Measurements showed that to show aVisualObj in SHADING(default) mode,
       // ~5 times more memory is used than it occupies.
       // Warn the user if there is less free memory than 30 sizes of a grid
       // TODO: estimate memory usage in other modes and take current mode into account
@@ -396,7 +396,7 @@ namespace SMESH
 
 
   /*! Return active view window, if it instantiates SVTK_ViewWindow class,
-   *  overwise find or create corresponding view window, make it active and return it.
+   *  otherwise find or create corresponding view window, make it active and return it.
    *  \note Active VVTK_ViewWindow can be returned, because it inherits SVTK_ViewWindow.
    */
   SVTK_ViewWindow* GetViewWindow (const SalomeApp_Module* theModule,
index 3ccd58cba73e98357af4ec4d8df27596b5d259c6..27ce2523f9887c0aed4d35ff9fce82bb98f1bfd2 100644 (file)
             <source>ICON_LENGTH_2D</source>
             <translation>mesh_length_2d.png</translation>
         </message>
+        <message>
+            <source>ICON_DEFLECTION_2D</source>
+            <translation>mesh_deflection.png</translation>
+        </message>
         <message>
             <source>ICON_MAP</source>
             <translation>mesh_pattern.png</translation>
index 9ab185bdbcfe6a907f951ca0a9ef3526690aa9a6..ef6213ce6bd44dbf90d693b37d5e89dfef7ba3ba 100644 (file)
         <source>MIN_DIAG_ELEMENTS</source>
         <translation>Minimum diagonal</translation>
     </message>
+    <message>
+        <source>MIN_ELEM_EDGE</source>
+        <translation>Minimum Edge Length</translation>
+    </message>
     <message>
         <source>ASPECTRATIO_3D_ELEMENTS</source>
         <translation>Aspect Ratio 3D</translation>
         <source>LENGTH2D_EDGES</source>
         <translation>Length 2D</translation>
     </message>
+    <message>
+        <source>DEFLECTION2D_FACES</source>
+        <translation>Deflection 2D</translation>
+    </message>
     <message>
         <source>LENGTH_EDGES</source>
         <translation>Length</translation>
         <source>MAX_ELEMENT_LENGTH_3D</source>
         <translation>Element Diameter 3D</translation>
     </message>
+    <message>
+        <source>DEFLECTION_2D</source>
+        <translation>Deflection 2D</translation>
+    </message>
     <message>
         <source>MEN_ADD</source>
         <translation>Add</translation>
         <source>MEN_LENGTH_2D</source>
         <translation>Length 2D</translation>
     </message>
+    <message>
+        <source>MEN_DEFLECTION_2D</source>
+        <translation>Deflection 2D</translation>
+    </message>
     <message>
         <source>MEN_MAP</source>
         <translation>Pattern Mapping</translation>
@@ -2132,7 +2148,7 @@ Check algorithm documentation for supported geometry</translation>
     </message>
     <message>
         <source>SMESH_MESHINFO_ALL_TYPES</source>
-        <translation>Heterogenous</translation>
+        <translation>Heterogeneous</translation>
     </message>
     <message>
         <source>SMESH_MESHINFO_EDGES</source>
@@ -3278,6 +3294,10 @@ Use Display Entity menu command to show them.
         <source>STB_LENGTH_2D</source>
         <translation>Length 2D</translation>
     </message>
+    <message>
+        <source>STB_DEFLECTION_2D</source>
+        <translation>Deflection 2D</translation>
+    </message>
     <message>
         <source>STB_MAP</source>
         <translation>Pattern mapping</translation>
@@ -3958,6 +3978,10 @@ Use Display Entity menu command to show them.
         <source>TOP_LENGTH_2D</source>
         <translation>Length 2D</translation>
     </message>
+    <message>
+        <source>TOP_DEFLECTION_2D</source>
+        <translation>Deflection 2D</translation>
+    </message>
     <message>
         <source>TOP_MAP</source>
         <translation>Pattern mapping</translation>
@@ -5869,6 +5893,10 @@ Please enter correct value and try again</translation>
         <source>LENGTH2D</source>
         <translation>Length 2D</translation>
     </message>
+    <message>
+        <source>DEFLECTION2D</source>
+        <translation>Deflection 2D</translation>
+    </message>
     <message>
         <source>LESS_THAN</source>
         <translation>Less than</translation>
index c84715eed262da158df4cb9103f7668cfc0a999f..6750f063c00709a06de560f81766339d186074fd 100644 (file)
@@ -47,7 +47,7 @@ SET(_link_LIBRARIES
   ${CAS_TKMesh}
   ${Boost_LIBRARIES}
   SMDS
-)
+  )
 
 # --- headers ---
 
@@ -68,7 +68,7 @@ SET(SMESHUtils_HEADERS
   SMESH_MAT2d.hxx
   SMESH_ControlPnt.hxx
   SMESH_Delaunay.hxx
-)
+  )
 
 # --- sources ---
 
@@ -86,6 +86,7 @@ SET(SMESHUtils_SOURCES
   SMESH_ControlPnt.cxx
   SMESH_DeMerge.cxx
   SMESH_Delaunay.cxx
+  SMESH_FillHole.cxx
   )
 
 # --- rules ---
index 3b46da1b4dcf80176daa165daadd3fc62f2a4356..5ff01e3ab01843f9f18fe9cbbd6efaa6da50e662 100644 (file)
@@ -720,7 +720,7 @@ bool SMESH_Block::ComputeParameters(const gp_Pnt& thePoint,
   const bool isOnFace = IsFaceID( theShapeID );
   double * coef = GetShapeCoef( theShapeID );
 
-  // Find the first guess paremeters
+  // Find the first guess parameters
 
   gp_XYZ start(0, 0, 0);
 
@@ -1585,7 +1585,7 @@ int SMESH_Block::GetOrderedEdges (const TopoDS_Face&   theFace,
 }
 //================================================================================
 /*!
- * \brief Call it after geometry initialisation
+ * \brief Call it after geometry initialization
  */
 //================================================================================
 
index cd680a811445d679febf83140f08b6214f235927..6b0caabbb7bae260816f1c612dc9d117fa76df13 100644 (file)
@@ -306,7 +306,7 @@ public:
  protected:
 
   /*!
-   * \brief Call it after geometry initialisation
+   * \brief Call it after geometry initialization
    */
   void init();
 
index c3bbe6fb58429fbda4d2c8e26428b83db024c803..2de8877e544691e7124ad5ca6b2a203c24498c3c 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : SMESH_Comment.hxx
 // Created   : Wed Mar 14 18:28:45 2007
 // Author    : Edward AGAPOV (eap)
index c30b69db160a7d7baf7f956b76102b06dd64962e..783835f38c05e4cf5141405765a887ab8de7eeb8 100644 (file)
@@ -87,7 +87,7 @@ public:
   bool getInts(std::vector<int>& ids);
 
   // ------------------------
-  // Writting a binary file
+  // Writing a binary file
   // ------------------------
 
   bool openForWriting(); // binary writing only
diff --git a/src/SMESHUtils/SMESH_FillHole.cxx b/src/SMESHUtils/SMESH_FillHole.cxx
new file mode 100644 (file)
index 0000000..ee22ef9
--- /dev/null
@@ -0,0 +1,517 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// File      : SMESH_FillHole.cxx
+// Created   : Tue Sep 26 15:11:17 2017
+// Author    : Edward AGAPOV (eap)
+//
+
+#include "SMESH_MeshAlgos.hxx"
+
+#include "SMESH_Comment.hxx"
+
+#include "SMESH_TypeDefs.hxx"
+#include "SMDS_Mesh.hxx"
+
+#include <Utils_SALOME_Exception.hxx>
+
+#include <boost/intrusive/circular_list_algorithms.hpp>
+#include <boost/container/flat_map.hpp>
+
+#include <Bnd_B3d.hxx>
+
+namespace
+{
+  bool isSmallAngle( double cos2 )
+  {
+    // cosine of min angle at which adjacent faces are considered overlapping
+    const double theMinCos2 = 0.996 * 0.996; // ~5 degrees
+    return ( cos2 > theMinCos2 );
+  }
+
+  struct BEdge;
+  typedef std::multimap< double, BEdge* >          TAngleMap;
+  typedef std::map< const SMDS_MeshElement*, int > TFaceIndMap;
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Edge of a free border
+   */
+  struct BEdge
+  {
+    const SMDS_MeshNode*    myNode1;
+    const SMDS_MeshNode*    myNode2;
+    const SMDS_MeshElement* myFace;   // face adjacent to the border
+
+    gp_XYZ                  myFaceNorm;
+    gp_XYZ                  myDir;     // myNode1 -> myNode2
+    double                  myDirCoef; // 1. or -1, to make myDir oriented as myNodes in myFace
+    double                  myLength;  // between nodes
+    double                  myAngleWithPrev; // between myDir and -myPrev->myDir
+    double                  myMinMaxRatio; // of a possible triangle sides
+    TAngleMap::iterator     myAngleMapPos;
+    double                  myOverlapAngle;  // angle delta due to overlapping
+    const SMDS_MeshNode*    myNode1Shift;    // nodes created to avoid overlapping of faces
+    const SMDS_MeshNode*    myNode2Shift;
+
+    BEdge*                  myPrev; // neighbors in the border
+    BEdge*                  myNext;
+
+    BEdge(): myNode1Shift(0), myNode2Shift(0) {}
+    void   Init( const SMDS_MeshNode* n1, const SMDS_MeshNode* n2,
+                 const SMDS_MeshElement* f=0,
+                 const SMDS_MeshNode* nf1=0, const SMDS_MeshNode* nf2=0 );
+    void   ComputeAngle( bool reverseAngle = false );
+    void   ShiftOverlapped( const SMDS_MeshNode*                  oppNode,
+                            const TFaceIndMap&                    capFaceWithBordInd,
+                            SMDS_Mesh&                            mesh,
+                            std::vector<const SMDS_MeshElement*>& newFaces);
+    void   MakeShiftfFaces( SMDS_Mesh&                            mesh,
+                            std::vector<const SMDS_MeshElement*>& newFaces,
+                            const bool                            isReverse );
+    gp_XYZ GetInFaceDir() const { return myFaceNorm ^ myDir * myDirCoef; }
+    double ShapeFactor()  const { return 0.5 * ( 1. - myMinMaxRatio ); }
+    void   InsertSelf(TAngleMap& edgesByAngle, bool isReverseFaces, bool reBind, bool useOverlap )
+    {
+      if ( reBind ) edgesByAngle.erase( myAngleMapPos );
+      double key = (( isReverseFaces ? 2 * M_PI - myAngleWithPrev : myAngleWithPrev )
+                    + myOverlapAngle * useOverlap
+                    + ShapeFactor() );
+      myAngleMapPos = edgesByAngle.insert( std::make_pair( key, this ));
+    }
+
+    // traits used by boost::intrusive::circular_list_algorithms
+    typedef BEdge         node;
+    typedef BEdge *       node_ptr;
+    typedef const BEdge * const_node_ptr;
+    static node_ptr get_next(const_node_ptr n)             {  return n->myNext;  }
+    static void     set_next(node_ptr n, node_ptr next)    {  n->myNext = next;  }
+    static node_ptr get_previous(const_node_ptr n)         {  return n->myPrev;  }
+    static void     set_previous(node_ptr n, node_ptr prev){  n->myPrev = prev;  }
+  };
+
+  //================================================================================
+  /*!
+   * \brief Initialize a border edge data
+   */
+  //================================================================================
+
+  void BEdge::Init( const SMDS_MeshNode*    n1,
+                    const SMDS_MeshNode*    n2,
+                    const SMDS_MeshElement* newFace, // new cap face
+                    const SMDS_MeshNode*    nf1,
+                    const SMDS_MeshNode*    nf2 )
+  {
+    myNode1  = n1;
+    myNode2  = n2;
+    myDir    = SMESH_NodeXYZ( n2 ) - SMESH_NodeXYZ( n1 );
+    myLength = myDir.Modulus();
+    if ( myLength > std::numeric_limits<double>::min() )
+      myDir /= myLength;
+
+    myFace = newFace;
+    if ( !myFace )
+    {
+      TIDSortedElemSet elemSet, avoidSet;
+      int ind1, ind2;
+      myFace = SMESH_MeshAlgos::FindFaceInSet( n1, n2, elemSet, avoidSet, &ind1, &ind2 );
+      if ( !myFace )
+        throw SALOME_Exception( SMESH_Comment("No face sharing nodes #")
+                                << myNode1->GetID() << " and #" << myNode2->GetID());
+      avoidSet.insert( myFace );
+      if ( SMESH_MeshAlgos::FindFaceInSet( n1, n2, elemSet, avoidSet ))
+        throw SALOME_Exception( SMESH_Comment("No free border between nodes #")
+                                << myNode1->GetID() << " and #" << myNode2->GetID());
+
+      myDirCoef = SMESH_MeshAlgos::IsRightOrder( myFace, myNode1, myNode2 ) ? 1. : -1.;
+    }
+
+    if (! SMESH_MeshAlgos::FaceNormal( myFace, myFaceNorm, /*normalized=*/false ))
+    {
+      SMDS_ElemIteratorPtr fIt = myNode1->GetInverseElementIterator( SMDSAbs_Face );
+      while ( fIt->more() )
+        if ( SMESH_MeshAlgos::FaceNormal( fIt->next(), myFaceNorm, /*normalized=*/false ))
+          break;
+    }
+
+    if ( newFace )
+    {
+      myFace    = 0;
+      myDirCoef = SMESH_MeshAlgos::IsRightOrder( newFace, nf1, nf2 ) ? 1. : -1.;
+      if ( myPrev->myNode2 == n1 )
+        myNode1Shift = myPrev->myNode2Shift;
+      if ( myNext->myNode1 == n2 )
+        myNode2Shift = myNext->myNode1Shift;
+    }
+    else if ( myDirCoef * myPrev->myDirCoef < 0 ) // different orientation of faces
+    {
+      myFaceNorm *= -1;
+      myDirCoef  *= -1;
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Compute myAngleWithPrev
+   */
+  //================================================================================
+
+  void BEdge::ComputeAngle( bool theReverseAngle )
+  {
+    double dot = myDir.Dot( myPrev->myDir.Reversed() );
+    if      ( dot >=  1 ) myAngleWithPrev = 0;
+    else if ( dot <= -1 ) myAngleWithPrev = M_PI;
+    else                  myAngleWithPrev = acos( dot );
+
+    bool isObtuse;
+    gp_XYZ inFaceDirNew = myDir - myPrev->myDir;
+    gp_XYZ   inFaceDir1 = myPrev->GetInFaceDir();
+    gp_XYZ   inFaceDir2 = this->GetInFaceDir();
+    double         dot1 = inFaceDirNew * inFaceDir1;
+    double         dot2 = inFaceDirNew * inFaceDir2;
+    bool     isOverlap1 = ( dot1 > 0 );
+    bool     isOverlap2 = ( dot2 > 0 );
+    if ( !myPrev->myFace )
+      isObtuse = isOverlap1;
+    else if  ( !myFace )
+      isObtuse = isOverlap2;
+    else
+    {
+      double dt1 = myDir.Dot( myPrev->myFaceNorm );
+      double dt2 = myPrev->myDir.Dot( myFaceNorm );
+      isObtuse = ( dt1 > 0 || dt2 < 0 ); // suppose face normals point outside the border
+      if ( theReverseAngle )
+        isObtuse = !isObtuse;
+    }
+    if ( isObtuse )
+    {
+      myAngleWithPrev = 2 * M_PI - myAngleWithPrev;
+    }
+
+    // if ( ! isObtuse )
+    //   isObtuse =
+    //     isSmallAngle( 1 - myDir.CrossSquareMagnitude( myPrev->myDir )); // edges co-directed
+
+    myOverlapAngle = 0;
+    //if ( !isObtuse )
+    {
+      // check if myFace and a triangle built on this and prev edges overlap
+      if ( isOverlap1 )
+      {
+        double cos2 = dot1 * dot1 / inFaceDirNew.SquareModulus() / inFaceDir1.SquareModulus();
+        myOverlapAngle += 1. * M_PI * cos2;
+      }
+      if ( isOverlap2 )
+      {
+        double cos2 = dot2 * dot2 / inFaceDirNew.SquareModulus() / inFaceDir2.SquareModulus();
+        myOverlapAngle += 1. * M_PI * cos2;
+      }
+    }
+
+    {
+      double len3 = SMESH_NodeXYZ( myPrev->myNode1 ).Distance( myNode2 );
+      double minLen = Min( myLength, Min( myPrev->myLength, len3 ));
+      double maxLen = Max( myLength, Max( myPrev->myLength, len3 ));
+      myMinMaxRatio = minLen / maxLen;
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Check if myFace is overlapped by a triangle formed by myNode's and a
+   *        given node. If so, create shifted nodes to avoid overlapping
+   */
+  //================================================================================
+
+  void BEdge::ShiftOverlapped( const SMDS_MeshNode*                  theOppNode,
+                               const TFaceIndMap&                    theCapFaceWithBordInd,
+                               SMDS_Mesh&                            theMesh,
+                               std::vector<const SMDS_MeshElement*>& theNewFaces )
+  {
+    if ( myNode1Shift && myNode2Shift )
+      return;
+
+    gp_XYZ inNewFaceDir = SMESH_NodeXYZ( theOppNode ) - SMESH_NodeXYZ( myNode1 );
+    double          dot = inNewFaceDir.Dot( myFaceNorm );
+    double         cos2 = dot * dot / myFaceNorm.SquareModulus() / inNewFaceDir.SquareModulus();
+    bool      isOverlap = ( isSmallAngle( 1 - cos2 ) && GetInFaceDir() * inNewFaceDir > 0 );
+
+    if ( isOverlap )
+    {
+      gp_XYZ shift = myFaceNorm / myLength / 4;
+      if ( myFace )
+        shift.Reverse();
+      if ( !myNode1Shift )
+      {
+        gp_XYZ p = SMESH_NodeXYZ( myNode1 ) + shift;
+        myNode1Shift = theMesh.AddNode( p.X(), p.Y(), p.Z() );
+        myPrev->myNode2Shift = myNode1Shift;
+      }
+      if ( !myNode2Shift )
+      {
+        gp_XYZ p = SMESH_NodeXYZ( myNode2 ) + shift;
+        myNode2Shift = theMesh.AddNode( p.X(), p.Y(), p.Z() );
+        myNext->myNode1Shift = myNode2Shift;
+      }
+
+      // MakeShiftfFaces() for already created cap faces
+      for ( int is2nd = 0; is2nd < 2; ++is2nd )
+      {
+        const SMDS_MeshNode* ns = is2nd ? myNode2Shift : myNode1Shift;
+        const SMDS_MeshNode* n  = is2nd ? myNode2 : myNode1;
+        if ( !ns ) continue;
+
+        SMDS_ElemIteratorPtr fIt = n->GetInverseElementIterator( SMDSAbs_Face );
+        while ( fIt->more() )
+        {
+          const SMDS_MeshElement* f = fIt->next();
+          if ( !f->isMarked() ) continue;
+
+          TFaceIndMap::const_iterator f2i = theCapFaceWithBordInd.find( f );
+          if ( f2i == theCapFaceWithBordInd.end() )
+            continue;
+          const SMDS_MeshNode* nf1 = f->GetNode(  f2i->second );
+          const SMDS_MeshNode* nf2 = f->GetNode(( f2i->second+1 ) % f->NbNodes() );
+          if ( nf1 == n || nf2 == n )
+          {
+            BEdge tmpE;
+            tmpE.myPrev = tmpE.myNext = this;
+            tmpE.Init( nf1, nf2, f, nf1, nf2 );
+            if ( !tmpE.myNode1Shift && !tmpE.myNode2Shift )
+              tmpE.Init( nf2, nf1, f, nf2, nf1 );
+            tmpE.myFace = f;
+            tmpE.MakeShiftfFaces( theMesh, theNewFaces, tmpE.myDirCoef < 0 );
+          }
+          std::vector< const SMDS_MeshNode* > nodes( f->begin_nodes(), f->end_nodes() );
+          nodes[ f->GetNodeIndex( n ) ] = ns;
+          theMesh.ChangeElementNodes( f, &nodes[0], nodes.size() );
+        }
+      }
+    }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Create a triangle
+   */
+  //================================================================================
+
+  const SMDS_MeshElement* MakeTria( SMDS_Mesh&           mesh,
+                                    const SMDS_MeshNode* n1,
+                                    const SMDS_MeshNode* n2,
+                                    const SMDS_MeshNode* n3,
+                                    const bool           isReverse )
+  {
+    if ( isReverse )
+      return mesh.AddFace( n1, n3, n2 );
+    return mesh.AddFace( n1, n2, n3 );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Create a quadrangle
+   */
+  //================================================================================
+
+  // const SMDS_MeshElement* MakeQuad( SMDS_Mesh&           mesh,
+  //                                   const SMDS_MeshNode* n1,
+  //                                   const SMDS_MeshNode* n2,
+  //                                   const SMDS_MeshNode* n3,
+  //                                   const SMDS_MeshNode* n4,
+  //                                   const bool           isReverse )
+  // {
+  //   if ( isReverse )
+  //     return mesh.AddFace( n4, n3, n2, n1 );
+  //   return mesh.AddFace( n1, n2, n3, n4 );
+  // }
+
+  //================================================================================
+  /*!
+   * \brief Create faces on myNode* and myNode*Shift
+   */
+  //================================================================================
+
+  void BEdge::MakeShiftfFaces(SMDS_Mesh&                            mesh,
+                              std::vector<const SMDS_MeshElement*>& newFaces,
+                              const bool                            isReverse )
+  {
+    if ( !myFace )
+      return;
+    if ( myNode1Shift && myNode2Shift )
+    {
+      newFaces.push_back( MakeTria( mesh, myNode1, myNode2, myNode2Shift, isReverse ));
+      newFaces.push_back( MakeTria( mesh, myNode1, myNode2Shift, myNode1Shift, isReverse ));
+    }
+    else if ( myNode1Shift )
+    {
+      newFaces.push_back( MakeTria( mesh, myNode1, myNode2, myNode1Shift, isReverse ));
+    }
+    else if ( myNode2Shift )
+    {
+      newFaces.push_back( MakeTria( mesh, myNode1, myNode2, myNode2Shift, isReverse ));
+    }
+  }
+
+} // namespace
+
+//================================================================================
+/*!
+ * \brief Fill with 2D elements a hole defined by a TFreeBorder
+ */
+//================================================================================
+
+void SMESH_MeshAlgos::FillHole(const SMESH_MeshAlgos::TFreeBorder &  theFreeBorder,
+                               SMDS_Mesh&                            theMesh,
+                               std::vector<const SMDS_MeshElement*>& theNewFaces)
+{
+  if ( theFreeBorder.size() < 4 ||                // at least 3 nodes
+       theFreeBorder[0] != theFreeBorder.back() ) // the hole must be closed
+    return;
+
+  // prepare data of the border
+
+  ObjectPool< BEdge > edgeAllocator;
+  boost::intrusive::circular_list_algorithms< BEdge > circularList;
+  BEdge* edge;
+  BEdge* edge0 = edgeAllocator.getNew();
+  BEdge* edgePrev = edge0;
+  circularList.init_header( edge0 );
+  edge0->Init( theFreeBorder[0], theFreeBorder[1], 0 );
+  Bnd_B3d box;
+  box.Add( SMESH_NodeXYZ( edge0->myNode1 ));
+  for ( size_t i = 2; i < theFreeBorder.size(); ++i )
+  {
+    edge = edgeAllocator.getNew();
+    circularList.link_after( edgePrev, edge );
+    edge->Init( theFreeBorder[i-1], theFreeBorder[i] );
+    edge->ComputeAngle();
+    edgePrev = edge;
+    box.Add( SMESH_NodeXYZ( edge->myNode1 ));
+  }
+  edge0->ComputeAngle();
+
+  // check if face normals point outside the border
+
+  gp_XYZ hSize = 0.5 * ( box.CornerMax() - box.CornerMin() );
+  const double hDelta = 1e-6 * hSize.Modulus();
+  hSize -= gp_XYZ( hDelta, hDelta, hDelta );
+  if ( hSize.X() < 0 ) hSize.SetX(hDelta);
+  if ( hSize.Y() < 0 ) hSize.SetY(hDelta);
+  if ( hSize.Z() < 0 ) hSize.SetZ(hDelta);
+  box.SetHSize( hSize ); // decrease the box by hDelta
+
+  size_t nbEdges = theFreeBorder.size() - 1;
+  edge = edge0;
+  int nbRev = 0, nbFrw = 0;
+  double angTol = M_PI - ( nbEdges - 2 ) * M_PI / nbEdges, sumDirCoeff = 0;
+  for ( size_t i = 0; i < nbEdges; ++i, edge = edge->myNext )
+  {
+    if ( box.IsOut( SMESH_NodeXYZ( edge->myNode1 )) &&
+         edge->myOverlapAngle < 0.1 * M_PI )
+    {
+      nbRev += edge->myAngleWithPrev > M_PI + angTol;
+      nbFrw += edge->myAngleWithPrev < M_PI - angTol;
+    }
+    sumDirCoeff += edge->myDirCoef;
+
+    // unmark all adjacent faces, new faces will be marked
+    SMDS_ElemIteratorPtr fIt = edge->myNode1->GetInverseElementIterator( SMDSAbs_Face );
+    while ( fIt->more() )
+      fIt->next()->setIsMarked( false );
+  }
+  bool isReverseAngle = ( nbRev > nbFrw ); // true == face normals point inside the border
+  //std::cout << "nbRev="<< nbRev << ", nbFrw="<< nbFrw<<std::endl;
+
+  // sort border edges by myAngleWithPrev
+
+  TAngleMap edgesByAngle;
+  bool useOverlap = true; // to add BEdge.myOverlapAngle when filling edgesByAngle
+  edge = edge0;
+  for ( size_t i = 0; i < nbEdges; ++i, edge = edge->myNext )
+    edge->InsertSelf( edgesByAngle, isReverseAngle, /*reBind=*/false, useOverlap );
+
+  // create triangles to fill the hole
+
+  //compare order of nodes in the edges with their order in faces
+  bool isReverse = sumDirCoeff > 0.5 * nbEdges;
+
+  // faces filling the hole (cap faces) and indices of border edges in them
+  TFaceIndMap capFaceWithBordInd;
+
+  theNewFaces.reserve( nbEdges - 2 );
+  std::vector< const SMDS_MeshNode* > nodes(3);
+  while ( edgesByAngle.size() > 2 )
+  {
+    TAngleMap::iterator a2e = edgesByAngle.begin();
+    edge = a2e->second;
+    if ( useOverlap &&
+         a2e->first - edge->ShapeFactor() > M_PI - angTol ) // all new triangles need shift
+    {
+      // re-sort the edges w/o overlap consideration
+      useOverlap = false;
+      nbEdges = edgesByAngle.size();
+      edgesByAngle.clear();
+      for ( size_t i = 0; i < nbEdges; ++i, edge = edge->myNext )
+        edge->InsertSelf( edgesByAngle, isReverseAngle, /*reBind=*/false, useOverlap );
+      a2e = edgesByAngle.begin();
+    }
+    edge     = a2e->second;
+    edgePrev = edge->myPrev;
+
+    // create shift nodes and faces
+    edgePrev->ShiftOverlapped( edge->myNode2, capFaceWithBordInd, theMesh, theNewFaces );
+    edge->ShiftOverlapped( edgePrev->myNode1, capFaceWithBordInd, theMesh, theNewFaces );
+    edge    ->MakeShiftfFaces( theMesh, theNewFaces, isReverse );
+    edgePrev->MakeShiftfFaces( theMesh, theNewFaces, isReverse );
+
+    // make a cap face
+    //nodes.resize( 3 );
+    nodes[0] = edgePrev->myNode1Shift ? edgePrev->myNode1Shift : edgePrev->myNode1;
+    nodes[1] = edgePrev->myNode2Shift ? edgePrev->myNode2Shift : edgePrev->myNode2;
+    nodes[2] = edge->myNode2Shift     ? edge->myNode2Shift     : edge->myNode2;
+    theNewFaces.push_back( MakeTria( theMesh, nodes[0], nodes[1], nodes[2], isReverse ));
+    // std::cout << nodes[1]->GetID() << " "  << nodes[0]->GetID() << " "  << nodes[2]->GetID()
+    //           << " " << edge->myAngleWithPrev << std::endl;
+
+    // remember a border edge within the new cap face
+    theNewFaces.back()->setIsMarked( true );
+    if ( edgePrev->myFace )
+      capFaceWithBordInd.insert( std::make_pair( theNewFaces.back(), isReverse ? 2 : 0 ));
+    if ( edge->myFace )
+      capFaceWithBordInd.insert( std::make_pair( theNewFaces.back(), 1 ));
+
+    // remove edgePrev from the list and update <edge>
+    edgesByAngle.erase( edgePrev->myAngleMapPos );
+    circularList.unlink( edgePrev ); // remove edgePrev from the border
+
+    edge->Init( edgePrev->myNode1, edge->myNode2, theNewFaces.back(), nodes[0], nodes[2] );
+    edge->ComputeAngle( isReverseAngle );
+    edge->InsertSelf( edgesByAngle, /*isReverse=*/false, /*reBind=*/true, useOverlap );
+    edge->myNext->ComputeAngle( isReverseAngle );
+    edge->myNext->InsertSelf( edgesByAngle, /*isReverse=*/false, /*reBind=*/true, useOverlap );
+    // std::cout << "A " << edge->myNode1->GetID() << " " << edge->myAngleWithPrev
+    //           << " " << edge->myNext->myNode1->GetID() << " " << edge->myNext->myAngleWithPrev
+    //           << std::endl;
+  }
+  edge = edgesByAngle.begin()->second;
+  edge->        MakeShiftfFaces( theMesh, theNewFaces, isReverse );
+  edge->myNext->MakeShiftfFaces( theMesh, theNewFaces, isReverse );
+}
index ae6efa6db59278e06f30a04153a023fdbedb271a..d098604656bde77db45f5dd3de814c60cdbfd816 100644 (file)
@@ -131,8 +131,11 @@ namespace
       if ( myID < 0 )
       {
         myID = id;
-        if ( myNext )
-          myNext->SetID( id + 1 );
+
+        for ( BEdge* be = myNext; be && be->myID < 0; be = be->myNext )
+        {
+          be->myID = ++id;
+        }
       }
     }
     //================================================================================
@@ -821,3 +824,136 @@ void SMESH_MeshAlgos::FindCoincidentFreeBorders(SMDS_Mesh&              mesh,
 
 } // SMESH_MeshAlgos::FindCoincidentFreeBorders()
 
+//================================================================================
+/*
+ * Returns all TFreeBorder's. Optionally check if the mesh is manifold
+ * and if faces are correctly oriented.
+ */
+//================================================================================
+
+void SMESH_MeshAlgos::FindFreeBorders(SMDS_Mesh&       theMesh,
+                                      TFreeBorderVec & theFoundFreeBordes,
+                                      const bool       theClosedOnly,
+                                      bool*            theIsManifold,
+                                      bool*            theIsGoodOri)
+{
+  bool isManifold = true;
+
+  // find free links
+  typedef NCollection_DataMap<SMESH_TLink, const SMDS_MeshElement*, SMESH_TLink > TLink2FaceMap;
+  TLink2FaceMap linkMap;
+  int nbSharedLinks = 0;
+  SMDS_FaceIteratorPtr faceIt = theMesh.facesIterator();
+  while ( faceIt->more() )
+  {
+    const SMDS_MeshElement* face = faceIt->next();
+    if ( !face ) continue;
+
+    const SMDS_MeshNode*     n0 = face->GetNode( face->NbNodes() - 1 );
+    SMDS_NodeIteratorPtr nodeIt = face->interlacedNodesIterator();
+    while ( nodeIt->more() )
+    {
+      const SMDS_MeshNode* n1 = nodeIt->next();
+      SMESH_TLink link( n0, n1 );
+      if ( const SMDS_MeshElement** faceInMap = linkMap.ChangeSeek( link ))
+      {
+        if ( *faceInMap )
+        {
+          if ( theIsGoodOri && *theIsGoodOri && !IsRightOrder( *faceInMap, n1, n0 ))
+            *theIsGoodOri = false;
+        }
+        else
+        {
+          isManifold = false;
+        }
+        nbSharedLinks += bool( *faceInMap );
+        *faceInMap = 0;
+      }
+      else
+      {
+        linkMap.Bind( link, face );
+      }
+      n0 = n1;
+    }
+  }
+  if ( theIsManifold )
+    *theIsManifold = isManifold;
+
+  if ( linkMap.Extent() == nbSharedLinks )
+    return;
+
+  // form free borders
+  std::set   < BNode > bNodes;
+  std::vector< BEdge > bEdges( linkMap.Extent() - nbSharedLinks );
+
+  TLink2FaceMap::Iterator linkIt( linkMap );
+  for ( int iEdge = 0; linkIt.More(); linkIt.Next() )
+  {
+    if ( !linkIt.Value() ) continue;
+    const SMESH_TLink & link = linkIt.Key();
+    std::set< BNode >::iterator n1 = bNodes.insert( BNode( link.node1() )).first;
+    std::set< BNode >::iterator n2 = bNodes.insert( BNode( link.node2() )).first;
+    bEdges[ iEdge ].Set( &*n1, &*n2, linkIt.Value(), iEdge+1 );
+    n1->AddLinked( & bEdges[ iEdge ] );
+    n2->AddLinked( & bEdges[ iEdge ] );
+    ++iEdge;
+  }
+  linkMap.Clear();
+
+  // assign IDs to borders
+  std::vector< BEdge* > borders; // 1st of connected (via myPrev and myNext) edges
+  std::set< BNode >::iterator bn = bNodes.begin();
+  for ( ; bn != bNodes.end(); ++bn )
+  {
+    for ( size_t i = 0; i < bn->myLinkedEdges.size(); ++i )
+    {
+      if ( bn->myLinkedEdges[i]->myBorderID < 0 )
+      {
+        BEdge* be = bn->myLinkedEdges[i];
+        int borderID = borders.size();
+        borders.push_back( be );
+        for ( ; be && be->myBorderID < 0; be = be->myNext )
+        {
+          be->myBorderID = borderID;
+          be->Orient();
+        }
+        bool isClosed = ( be == bn->myLinkedEdges[i] );
+        if ( !isClosed && theClosedOnly )
+        {
+          borders.pop_back();
+          continue;
+        }
+        be = bn->myLinkedEdges[i]->myPrev;
+        for ( ; be && be->myBorderID < 0; be = be->myPrev )
+        {
+          be->myBorderID = borderID;
+          be->Orient();
+        }
+        if ( !isClosed )
+          while ( borders.back()->myPrev )
+            borders.back() = borders.back()->myPrev;
+      }
+    }
+  }
+  theFoundFreeBordes.resize( borders.size() );
+  for ( size_t i = 0; i < borders.size(); ++i )
+  {
+    TFreeBorder & bordNodes = theFoundFreeBordes[ i ];
+    BEdge*               be = borders[i];
+
+    size_t cnt = 1;
+    for ( be = be->myNext; be && be != borders[i]; be = be->myNext )
+      ++cnt;
+    bordNodes.resize( cnt + 1 );
+
+    BEdge* beLast;
+    for ( be = borders[i], cnt = 0;
+          be && cnt < bordNodes.size()-1;
+          be = be->myNext, ++cnt )
+    {
+      bordNodes[ cnt ] = be->myBNode1->Node();
+      beLast = be;
+    }
+    bordNodes.back() = beLast->myBNode2->Node();
+  }
+}
index 8464e245fe197e6765f100a08498d730211522bb..dbf355e111bf188d1a2811c18f0c0e9ed06e6f92 100644 (file)
@@ -35,6 +35,8 @@
 #include "SMDS_VolumeTool.hxx"
 #include "SMESH_OctreeNode.hxx"
 
+#include <Utils_SALOME_Exception.hxx>
+
 #include <GC_MakeSegment.hxx>
 #include <GeomAPI_ExtremaCurveCurve.hxx>
 #include <Geom_Line.hxx>
@@ -228,12 +230,12 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
                       SMDSAbs_ElementType  elemType,
                       SMDS_ElemIteratorPtr theElemIt = SMDS_ElemIteratorPtr(),
                       double               tolerance = NodeRadius );
-    void prepare(); // !!!call it before calling the following methods!!!
     void getElementsNearPoint( const gp_Pnt& point, vector<const SMDS_MeshElement*>& foundElems );
     void getElementsNearLine ( const gp_Ax1& line,  vector<const SMDS_MeshElement*>& foundElems);
     void getElementsInSphere ( const gp_XYZ&                    center,
                                const double                     radius,
                                vector<const SMDS_MeshElement*>& foundElems);
+    ElementBndBoxTree* getLeafAtPoint( const gp_XYZ& point );
 
   protected:
     ElementBndBoxTree() {}
@@ -337,19 +339,6 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
     }
   }
 
-  //================================================================================
-  /*!
-   * \brief Un-mark all elements
-   */
-  //================================================================================
-
-  void ElementBndBoxTree::prepare()
-  {
-    // TElementBoxPool& elBoPool = getElementBoxPool();
-    // for ( size_t i = 0; i < elBoPool.nbElements(); ++i )
-    //   const_cast< ElementBox* >( elBoPool[ i ])->_isMarked = false;
-  }
-
   //================================================================================
   /*!
    * \brief Return elements which can include the point
@@ -471,6 +460,30 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
     }
   }
 
+  //================================================================================
+  /*!
+   * \brief Return a leaf including a point
+   */
+  //================================================================================
+
+  ElementBndBoxTree* ElementBndBoxTree::getLeafAtPoint( const gp_XYZ& point )
+  {
+    if ( getBox()->IsOut( point ))
+      return 0;
+
+    if ( isLeaf() )
+    {
+      return this;
+    }
+    else
+    {
+      for (int i = 0; i < 8; i++)
+        if ( ElementBndBoxTree* l = ((ElementBndBoxTree*) myChildren[i])->getLeafAtPoint( point ))
+          return l;
+    }
+    return 0;
+  }
+
   //================================================================================
   /*!
    * \brief Construct the element box
@@ -539,13 +552,16 @@ struct SMESH_ElementSearcherImpl: public SMESH_ElementSearcher
   virtual const SMDS_MeshElement* FindClosestTo( const gp_Pnt&       point,
                                                  SMDSAbs_ElementType type );
 
-  void GetElementsNearLine( const gp_Ax1&                      line,
-                            SMDSAbs_ElementType                type,
-                            vector< const SMDS_MeshElement* >& foundElems);
-  void GetElementsInSphere( const gp_XYZ&                      center,
-                            const double                       radius,
-                            SMDSAbs_ElementType                type,
-                            vector< const SMDS_MeshElement* >& foundElems);
+  virtual void GetElementsNearLine( const gp_Ax1&                      line,
+                                    SMDSAbs_ElementType                type,
+                                    vector< const SMDS_MeshElement* >& foundElems);
+  virtual void GetElementsInSphere( const gp_XYZ&                      center,
+                                    const double                       radius,
+                                    SMDSAbs_ElementType                type,
+                                    vector< const SMDS_MeshElement* >& foundElems);
+  virtual gp_XYZ Project(const gp_Pnt&            point,
+                         SMDSAbs_ElementType      type,
+                         const SMDS_MeshElement** closestElem);
   double getTolerance();
   bool getIntersParamOnLine(const gp_Lin& line, const SMDS_MeshElement* face,
                             const double tolerance, double & param);
@@ -834,10 +850,6 @@ FindElementsByPoint(const gp_Pnt&                      point,
     {
       _ebbTree[_elementType] = new ElementBndBoxTree( *_mesh, type, _meshPartIt, tolerance );
     }
-    else
-    {
-      _ebbTree[ type ]->prepare();
-    }
     vector< const SMDS_MeshElement* > suspectElems;
     _ebbTree[ type ]->getElementsNearPoint( point, suspectElems );
     vector< const SMDS_MeshElement* >::iterator elem = suspectElems.begin();
@@ -863,13 +875,13 @@ SMESH_ElementSearcherImpl::FindClosestTo( const gp_Pnt&       point,
   const SMDS_MeshElement* closestElem = 0;
   _elementType = type;
 
-  if ( type == SMDSAbs_Face || type == SMDSAbs_Volume )
+  if ( type == SMDSAbs_Face ||
+       type == SMDSAbs_Volume ||
+       type == SMDSAbs_Edge )
   {
     ElementBndBoxTree*& ebbTree = _ebbTree[ type ];
     if ( !ebbTree )
       ebbTree = new ElementBndBoxTree( *_mesh, type, _meshPartIt );
-    else
-      ebbTree->prepare();
 
     vector<const SMDS_MeshElement*> suspectElems;
     ebbTree->getElementsNearPoint( point, suspectElems );
@@ -885,7 +897,6 @@ SMESH_ElementSearcherImpl::FindClosestTo( const gp_Pnt&       point,
         radius = ebbTree->maxSize() / pow( 2., getTreeHeight()) / 2;
       while ( suspectElems.empty() )
       {
-        ebbTree->prepare();
         ebbTree->getElementsInSphere( point.XYZ(), radius, suspectElems );
         radius *= 1.1;
       }
@@ -956,8 +967,6 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
   ElementBndBoxTree*& ebbTree = _ebbTree[ SMDSAbs_Face ];
   if ( !ebbTree )
     ebbTree = new ElementBndBoxTree( *_mesh, _elementType, _meshPartIt );
-  else
-    ebbTree->prepare();
 
   // Algo: analyse transition of a line starting at the point through mesh boundary;
   // try three lines parallel to axis of the coordinate system and perform rough
@@ -974,7 +983,6 @@ TopAbs_State SMESH_ElementSearcherImpl::GetPointState(const gp_Pnt& point)
     gp_Lin line    ( lineAxis );
 
     vector<const SMDS_MeshElement*> suspectFaces; // faces possibly intersecting the line
-    if ( axis > 0 ) ebbTree->prepare();
     ebbTree->getElementsNearLine( lineAxis, suspectFaces );
 
     // Intersect faces with the line
@@ -1187,8 +1195,6 @@ void SMESH_ElementSearcherImpl::GetElementsNearLine( const gp_Ax1&
   ElementBndBoxTree*& ebbTree = _ebbTree[ type ];
   if ( !ebbTree )
     ebbTree = new ElementBndBoxTree( *_mesh, _elementType, _meshPartIt );
-  else
-    ebbTree->prepare();
 
   ebbTree->getElementsNearLine( line, foundElems );
 }
@@ -1208,12 +1214,59 @@ void SMESH_ElementSearcherImpl::GetElementsInSphere( const gp_XYZ&
   ElementBndBoxTree*& ebbTree = _ebbTree[ type ];
   if ( !ebbTree )
     ebbTree = new ElementBndBoxTree( *_mesh, _elementType, _meshPartIt );
-  else
-    ebbTree->prepare();
 
   ebbTree->getElementsInSphere( center, radius, foundElems );
 }
 
+//=======================================================================
+/*
+ * \brief Return a projection of a given point to a mesh.
+ *        Optionally return the closest element
+ */
+//=======================================================================
+
+gp_XYZ SMESH_ElementSearcherImpl::Project(const gp_Pnt&            point,
+                                          SMDSAbs_ElementType      type,
+                                          const SMDS_MeshElement** closestElem)
+{
+  _elementType = type;
+  if ( _mesh->GetMeshInfo().NbElements( _elementType ) == 0 )
+    throw SALOME_Exception( LOCALIZED( "No elements of given type in the mesh" ));
+
+  ElementBndBoxTree*& ebbTree = _ebbTree[ _elementType ];
+  if ( !ebbTree )
+    ebbTree = new ElementBndBoxTree( *_mesh, _elementType );
+
+  gp_XYZ p = point.XYZ();
+  ElementBndBoxTree* ebbLeaf = ebbTree->getLeafAtPoint( p );
+  const Bnd_B3d* box = ebbLeaf->getBox();
+  double radius = ( box->CornerMax() - box->CornerMin() ).Modulus();
+
+  vector< const SMDS_MeshElement* > elems;
+  ebbTree->getElementsInSphere( p, radius, elems );
+  while ( elems.empty() )
+  {
+    radius *= 1.5;
+    ebbTree->getElementsInSphere( p, radius, elems );
+  }
+  gp_XYZ proj, bestProj;
+  const SMDS_MeshElement* elem = 0;
+  double minDist = 2 * radius;
+  for ( size_t i = 0; i < elems.size(); ++i )
+  {
+    double d = SMESH_MeshAlgos::GetDistance( elems[i], p, &proj );
+    if ( d < minDist )
+    {
+      bestProj = proj;
+      elem = elems[i];
+      minDist = d;
+    }
+  }
+  if ( closestElem ) *closestElem = elem;
+
+  return bestProj;
+}
+
 //=======================================================================
 /*!
  * \brief Return true if the point is IN or ON of the element
@@ -1461,17 +1514,19 @@ namespace
 //=======================================================================
 
 double SMESH_MeshAlgos::GetDistance( const SMDS_MeshElement* elem,
-                                     const gp_Pnt&           point )
+                                     const gp_Pnt&           point,
+                                     gp_XYZ*                 closestPnt )
 {
   switch ( elem->GetType() )
   {
   case SMDSAbs_Volume:
-    return GetDistance( dynamic_cast<const SMDS_MeshVolume*>( elem ), point);
+    return GetDistance( dynamic_cast<const SMDS_MeshVolume*>( elem ), point, closestPnt );
   case SMDSAbs_Face:
-    return GetDistance( dynamic_cast<const SMDS_MeshFace*>( elem ), point);
+    return GetDistance( dynamic_cast<const SMDS_MeshFace*>( elem ), point, closestPnt );
   case SMDSAbs_Edge:
-    return GetDistance( dynamic_cast<const SMDS_MeshEdge*>( elem ), point);
+    return GetDistance( dynamic_cast<const SMDS_MeshEdge*>( elem ), point, closestPnt );
   case SMDSAbs_Node:
+    if ( closestPnt ) *closestPnt = SMESH_TNodeXYZ( elem );
     return point.Distance( SMESH_TNodeXYZ( elem ));
   default:;
   }
@@ -1487,9 +1542,10 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshElement* elem,
 //=======================================================================
 
 double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
-                                     const gp_Pnt&        point )
+                                     const gp_Pnt&        point,
+                                     gp_XYZ*              closestPnt )
 {
-  double badDistance = -1;
+  const double badDistance = -1;
   if ( !face ) return badDistance;
 
   // coordinates of nodes (medium nodes, if any, ignored)
@@ -1533,7 +1589,7 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
   trsf.Transforms( tmpPnt );
   gp_XY point2D( tmpPnt.X(), tmpPnt.Z() );
 
-  // loop on segments of the face to analyze point position ralative to the face
+  // loop on edges of the face to analyze point position ralative to the face
   set< PointPos > pntPosSet;
   for ( size_t i = 1; i < xy.size(); ++i )
   {
@@ -1543,31 +1599,40 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
 
   // compute distance
   PointPos pos = *pntPosSet.begin();
-  // cout << "Face " << face->GetID() << " DIST: ";
   switch ( pos._name )
   {
-  case POS_LEFT: {
-    // point is most close to a segment
-    gp_Vec p0p1( point, xyz[ pos._index ] );
-    gp_Vec p1p2( xyz[ pos._index ], xyz[ pos._index+1 ]); // segment vector
-    p1p2.Normalize();
-    double projDist = p0p1 * p1p2; // distance projected to the segment
-    gp_Vec projVec = p1p2 * projDist;
-    gp_Vec distVec = p0p1 - projVec;
-    // cout << distVec.Magnitude()  << ", SEG " << face->GetNode(pos._index)->GetID()
-    //      << " - " << face->GetNodeWrap(pos._index+1)->GetID() << endl;
-    return distVec.Magnitude();
+  case POS_LEFT:
+  {
+    // point is most close to an edge
+    gp_Vec edge( xyz[ pos._index ], xyz[ pos._index+1 ]);
+    gp_Vec n1p ( xyz[ pos._index ], point  );
+    double u = ( edge * n1p ) / edge.SquareMagnitude(); // param [0,1] on the edge
+    // projection of the point on the edge
+    gp_XYZ proj = ( 1. - u ) * xyz[ pos._index ] + u * xyz[ pos._index+1 ];
+    if ( closestPnt ) *closestPnt = proj;
+    return point.Distance( proj );
   }
-  case POS_RIGHT: {
+  case POS_RIGHT:
+  {
     // point is inside the face
-    double distToFacePlane = tmpPnt.Y();
-    // cout << distToFacePlane << ", INSIDE " << endl;
-    return Abs( distToFacePlane );
+    double distToFacePlane = Abs( tmpPnt.Y() );
+    if ( closestPnt )
+    {
+      if ( distToFacePlane < std::numeric_limits<double>::min() ) {
+        *closestPnt = point.XYZ();
+      }
+      else {
+        tmpPnt.SetY( 0 );
+        trsf.Inverted().Transforms( tmpPnt );
+        *closestPnt = tmpPnt;
+      }
+    }
+    return distToFacePlane;
   }
-  case POS_VERTEX: {
+  case POS_VERTEX:
+  {
     // point is most close to a node
     gp_Vec distVec( point, xyz[ pos._index ]);
-    // cout << distVec.Magnitude()  << " VERTEX " << face->GetNode(pos._index)->GetID() << endl;
     return distVec.Magnitude();
   }
   default:;
@@ -1581,7 +1646,9 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshFace* face,
  */
 //=======================================================================
 
-double SMESH_MeshAlgos::GetDistance( const SMDS_MeshEdge* seg, const gp_Pnt& point )
+double SMESH_MeshAlgos::GetDistance( const SMDS_MeshEdge* seg,
+                                     const gp_Pnt&        point,
+                                     gp_XYZ*              closestPnt )
 {
   double dist = Precision::Infinite();
   if ( !seg ) return dist;
@@ -1597,16 +1664,25 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshEdge* seg, const gp_Pnt& poi
   {
     gp_Vec edge( xyz[i-1], xyz[i] );
     gp_Vec n1p ( xyz[i-1], point  );
-    double u = ( edge * n1p ) / edge.SquareMagnitude(); // param [0,1] on the edge
+    double d, u = ( edge * n1p ) / edge.SquareMagnitude(); // param [0,1] on the edge
     if ( u <= 0. ) {
-      dist = Min( dist, n1p.SquareMagnitude() );
+      if (( d = n1p.SquareMagnitude() ) < dist ) {
+        dist = d;
+        if ( closestPnt ) *closestPnt = xyz[i-1];
+      }
     }
     else if ( u >= 1. ) {
-      dist = Min( dist, point.SquareDistance( xyz[i] ));
+      if (( d = point.SquareDistance( xyz[i] )) < dist ) {
+        dist = d;
+        if ( closestPnt ) *closestPnt = xyz[i];
+      }
     }
     else {
-      gp_XYZ proj = ( 1. - u ) * xyz[i-1] + u * xyz[i]; // projection of the point on the edge
-      dist = Min( dist, point.SquareDistance( proj ));
+      gp_XYZ proj = xyz[i-1] + u * edge.XYZ(); // projection of the point on the edge
+      if (( d = point.SquareDistance( proj )) < dist ) {
+        dist = d;
+        if ( closestPnt ) *closestPnt = proj;
+      }
     }
   }
   return Sqrt( dist );
@@ -1620,7 +1696,9 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshEdge* seg, const gp_Pnt& poi
  */
 //=======================================================================
 
-double SMESH_MeshAlgos::GetDistance( const SMDS_MeshVolume* volume, const gp_Pnt& point )
+double SMESH_MeshAlgos::GetDistance( const SMDS_MeshVolume* volume,
+                                     const gp_Pnt&          point,
+                                     gp_XYZ*                closestPnt )
 {
   SMDS_VolumeTool vTool( volume );
   vTool.SetExternalNormal();
@@ -1628,6 +1706,8 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshVolume* volume, const gp_Pnt
 
   double n[3], bc[3];
   double minDist = 1e100, dist;
+  gp_XYZ closeP = point.XYZ();
+  bool isOut = false;
   for ( int iF = 0; iF < vTool.NbFaces(); ++iF )
   {
     // skip a facet with normal not "looking at" the point
@@ -1644,23 +1724,34 @@ double SMESH_MeshAlgos::GetDistance( const SMDS_MeshVolume* volume, const gp_Pnt
     case 3:
     {
       SMDS_FaceOfNodes tmpFace( nodes[0], nodes[ 1*iQ ], nodes[ 2*iQ ] );
-      dist = GetDistance( &tmpFace, point );
+      dist = GetDistance( &tmpFace, point, closestPnt );
       break;
     }
     case 4:
     {
       SMDS_FaceOfNodes tmpFace( nodes[0], nodes[ 1*iQ ], nodes[ 2*iQ ], nodes[ 3*iQ ]);
-      dist = GetDistance( &tmpFace, point );
+      dist = GetDistance( &tmpFace, point, closestPnt );
       break;
     }
     default:
       vector<const SMDS_MeshNode *> nvec( nodes, nodes + vTool.NbFaceNodes( iF ));
       SMDS_PolygonalFaceOfNodes tmpFace( nvec );
-      dist = GetDistance( &tmpFace, point );
+      dist = GetDistance( &tmpFace, point, closestPnt );
+    }
+    if ( dist < minDist )
+    {
+      minDist = dist;
+      isOut = true;
+      if ( closestPnt ) closeP = *closestPnt;
     }
-    minDist = Min( minDist, dist );
   }
-  return minDist;
+  if ( isOut )
+  {
+    if ( closestPnt ) *closestPnt = closeP;
+    return minDist;
+  }
+
+  return 0; // point is inside the volume
 }
 
 //================================================================================
@@ -1804,6 +1895,34 @@ vector< const SMDS_MeshNode*> SMESH_MeshAlgos::GetCommonNodes(const SMDS_MeshEle
       common.push_back( e1->GetNode( i ));
   return common;
 }
+//================================================================================
+/*!
+ * \brief Return true if node1 encounters first in the face and node2, after
+ */
+//================================================================================
+
+bool SMESH_MeshAlgos::IsRightOrder( const SMDS_MeshElement* face,
+                                    const SMDS_MeshNode*    node0,
+                                    const SMDS_MeshNode*    node1 )
+{
+  int i0 = face->GetNodeIndex( node0 );
+  int i1 = face->GetNodeIndex( node1 );
+  if ( face->IsQuadratic() )
+  {
+    if ( face->IsMediumNode( node0 ))
+    {
+      i0 -= ( face->NbNodes()/2 - 1 );
+      i1 *= 2;
+    }
+    else
+    {
+      i1 -= ( face->NbNodes()/2 - 1 );
+      i0 *= 2;
+    }
+  }
+  int diff = i1 - i0;
+  return ( diff == 1 ) || ( diff == -face->NbNodes()+1 );
+}
 
 //=======================================================================
 /*!
index 0bf9c49b5adbb4bdf3f90b83e1fd5b425fe2e8f4..88b1c6d247c8f7d950bded2407e61c4a248069e6 100644 (file)
@@ -100,6 +100,15 @@ struct SMESHUtils_EXPORT SMESH_ElementSearcher
    * \brief Find out if the given point is out of closed 2D mesh.
    */
   virtual TopAbs_State GetPointState(const gp_Pnt& point) = 0;
+
+  /*!
+   * \brief Return a projection of a given point to a 2D mesh.
+   *        Optionally return the closest face
+   */
+  virtual gp_XYZ Project(const gp_Pnt&            point,
+                         SMDSAbs_ElementType      type,
+                         const SMDS_MeshElement** closestFace= 0) = 0;
+
   virtual ~SMESH_ElementSearcher();
 };
 
@@ -112,16 +121,16 @@ namespace SMESH_MeshAlgos
   bool IsOut( const SMDS_MeshElement* element, const gp_Pnt& point, double tol );
 
   SMESHUtils_EXPORT
-  double GetDistance( const SMDS_MeshElement* elem, const gp_Pnt& point );
+  double GetDistance( const SMDS_MeshElement* elem, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
 
   SMESHUtils_EXPORT
-  double GetDistance( const SMDS_MeshEdge* edge, const gp_Pnt& point );
+  double GetDistance( const SMDS_MeshEdge* edge, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
 
   SMESHUtils_EXPORT
-  double GetDistance( const SMDS_MeshFace* face, const gp_Pnt& point );
+  double GetDistance( const SMDS_MeshFace* face, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
 
   SMESHUtils_EXPORT
-  double GetDistance( const SMDS_MeshVolume* volume, const gp_Pnt& point );
+  double GetDistance( const SMDS_MeshVolume* volume, const gp_Pnt& point, gp_XYZ* closestPnt = 0 );
 
   SMESHUtils_EXPORT
   void GetBarycentricCoords( const gp_XY& point,
@@ -153,6 +162,14 @@ namespace SMESH_MeshAlgos
   SMESHUtils_EXPORT
   std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1,
                                                     const SMDS_MeshElement* e2);
+  /*!
+   * \brief Return true if node1 encounters first in the face and node2, after.
+   *        The nodes are supposed to be neighbor nodes in the face.
+   */
+  SMESHUtils_EXPORT
+  bool IsRightOrder( const SMDS_MeshElement* face,
+                     const SMDS_MeshNode*    node0,
+                     const SMDS_MeshNode*    node1 );
 
   /*!
    * \brief Mark elements given by SMDS_Iterator
@@ -203,7 +220,7 @@ namespace SMESH_MeshAlgos
   }
 
   /*!
-   * \brief Return SMESH_NodeSearcher. The caller is responsible for deleteing it
+   * \brief Return SMESH_NodeSearcher. The caller is responsible for deleting it
    */
   SMESHUtils_EXPORT
   SMESH_NodeSearcher* GetNodeSearcher( SMDS_Mesh& mesh );
@@ -252,7 +269,28 @@ namespace SMESH_MeshAlgos
   void FindCoincidentFreeBorders(SMDS_Mesh&              mesh,
                                  double                  tolerance,
                                  CoincidentFreeBorders & foundFreeBordes);
-  
+  /*!
+   * Returns all or only closed TFreeBorder's.
+   * Optionally check if the mesh is manifold and if faces are correctly oriented.
+   *
+   * (Implemented in ./SMESH_FreeBorders.cxx)
+   */
+  SMESHUtils_EXPORT
+  void FindFreeBorders(SMDS_Mesh&       mesh,
+                       TFreeBorderVec & foundFreeBordes,
+                       const bool       closedOnly,
+                       bool*            isManifold = 0,
+                       bool*            isGoodOri = 0);
+  /*!
+   * Fill a hole defined by a TFreeBorder with 2D elements.
+   *
+   * (Implemented in ./SMESH_FillHole.cxx)
+   */
+  SMESHUtils_EXPORT
+  void FillHole(const TFreeBorder &                   freeBorder,
+                SMDS_Mesh&                            mesh,
+                std::vector<const SMDS_MeshElement*>& newFaces);
+
 
   /*!
    * \brief Find nodes whose merge makes the element invalid
index 1f987213a6fd97314b8898215c6e4fce757e3e8d..71e587caa6f566ecb4432640588176d0a7475bfc 100644 (file)
@@ -32,6 +32,12 @@ void SMESH::doNothing(const char* txt)
 {
   MESSAGE( txt << " " << __FILE__ << ": " << __LINE__ );
 }
+
+const char* SMESH::returnError(const char* txt)
+{
+  return txt;
+}
+
 // ------------------------------------------------------------------
 #include "SMESH_ComputeError.hxx"
 
index 44047a694d54aa70b71ece72df8df0430ca468c5..9e5ffd755c71baa871d4418feee5f2d73d2afb8b 100644 (file)
@@ -107,6 +107,7 @@ namespace SMESH
 {
   SMESHUtils_EXPORT void throwSalomeEx(const char* txt);
   SMESHUtils_EXPORT void doNothing(const char* txt);
+  SMESHUtils_EXPORT const char* returnError(const char* txt);
 }
 
 #endif
index c9be990f65b274515dd082b134ac98494fa3619a..dc74b070247dbd56726b7030b4641d3312a4e28e 100644 (file)
@@ -143,13 +143,12 @@ struct SMESH_OrientedLink: public SMESH_TLink
 
 //------------------------------------------
 /*!
- * \brief SMDS_MeshNode -> gp_XYZ convertor
+ * \brief SMDS_MeshNode -> gp_XYZ converter
  */
 //------------------------------------------
 struct SMESH_TNodeXYZ : public gp_XYZ
 {
   const SMDS_MeshNode* _node;
-  double               _xyz[3];
   SMESH_TNodeXYZ( const SMDS_MeshElement* e=0):gp_XYZ(0,0,0),_node(0)
   {
     Set(e);
@@ -159,15 +158,14 @@ struct SMESH_TNodeXYZ : public gp_XYZ
     if (e) {
       assert( e->GetType() == SMDSAbs_Node );
       _node = static_cast<const SMDS_MeshNode*>(e);
-      _node->GetXYZ(_xyz); // - thread safe getting coords
-      SetCoord( _xyz[0], _xyz[1], _xyz[2] );
+      _node->GetXYZ( ChangeData() ); // - thread safe getting coords
       return true;
     }
     return false;
   }
   double Distance(const SMDS_MeshNode* n)       const { return (SMESH_TNodeXYZ( n )-*this).Modulus(); }
   double SquareDistance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).SquareModulus(); }
-  bool operator==(const SMESH_TNodeXYZ& other) const { return _node == other._node; }
+  bool operator==(const SMESH_TNodeXYZ& other)  const { return _node == other._node; }
 };
 typedef SMESH_TNodeXYZ SMESH_NodeXYZ;
 
index 9ae41bf3d4889c6e00d5ee66839adf3a2295f1aa..e7155c2157326b01eca798cf5cf649af80d2fbf4 100644 (file)
@@ -72,7 +72,7 @@ using SMESH::TPythonDump;
 
 /*!
  * \brief Container of commands into which the initial script is split.
- *        It also contains data coresponding to SMESH_Gen contents
+ *        It also contains data corresponding to SMESH_Gen contents
  */
 static Handle(_pyGen) theGen;
 
@@ -294,6 +294,8 @@ namespace {
     //   - FT_BelongToMeshGroup     = 22
     // v 8.1.0: FT_Undefined == 48, new items:
     //   - FT_NodeConnectivityNumber= 22
+    // v 8.5.0: FT_Undefined == 49, new items:
+    //   - FT_Deflection2D          = 22
     //
     // It's necessary to continue recording this history and to fill
     // undef2newItems (see below) accordingly.
@@ -316,6 +318,7 @@ namespace {
       undef2newItems[ 46 ].push_back( 39 );
       undef2newItems[ 47 ].push_back( 22 );
       undef2newItems[ 48 ].push_back( 22 );
+      undef2newItems[ 49 ].push_back( 22 );
 
       ASSERT( undef2newItems.rbegin()->first == SMESH::FT_Undefined );
     }
@@ -498,7 +501,7 @@ SMESH_2smeshpy::ConvertScript(std::list< TCollection_AsciiString >&     theScrip
   MESSAGE_BEGIN ( std::endl << " ######## RESULT ######## " << std::endl<< std::endl );
 #endif
 
-  // clean commmands of removed objects depending on myIsPublished flag
+  // clean commands of removed objects depending on myIsPublished flag
   theGen->ClearCommands();
 
   // reorder commands after conversion
@@ -603,7 +606,7 @@ const char* _pyGen::AccessorMethod() const
 //================================================================================
 /*!
  * \brief Convert a command using a specific converter
 * \param theCommand - the command to convert
 \param theCommand - the command to convert
  */
 //================================================================================
 
@@ -858,8 +861,8 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
       aCommand->GetString() += tmpCmd.GetString();
     }
     // IMP issue 0021014
-    // set GetCriterion(elementType,CritType,Compare,Treshold,UnaryOp,BinaryOp,Tolerance)
-    //                  1           2        3       4        5       6        7
+    // set GetCriterion(elementType,CritType,Compare,Threshold,UnaryOp,BinaryOp,Tolerance)
+    //                  1           2        3       4         5       6        7
     // instead of "SMESH.Filter.Criterion(
     // Type,Compare,Threshold,ThresholdStr,ThresholdID,UnaryOp,BinaryOp,Tolerance,TypeOfElement,Precision)
     // 1    2       3         4            5           6       7        8         9             10
@@ -967,7 +970,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
 //================================================================================
 /*!
  * \brief Convert the command or remember it for later conversion
 * \param theCommand - The python command calling a method of SMESH_Gen
 \param theCommand - The python command calling a method of SMESH_Gen
  */
 //================================================================================
 
@@ -1213,7 +1216,7 @@ void _pyGen::PlaceSubmeshAfterItsCreation( Handle(_pyCommand) theCmdUsingSubmesh
 
 //================================================================================
 /*!
- * \brief Clean commmands of removed objects depending on myIsPublished flag
+ * \brief Clean commands of removed objects depending on myIsPublished flag
  */
 //================================================================================
 
@@ -1276,8 +1279,8 @@ void _pyGen::Free()
 //================================================================================
 /*!
  * \brief Add access method to mesh that is an argument
 * \param theCmd - command to add access method
 * \retval bool - true if added
 \param theCmd - command to add access method
+ * \retval bool - true if added
  */
 //================================================================================
 
@@ -1295,8 +1298,8 @@ bool _pyGen::AddMeshAccessorMethod( Handle(_pyCommand) theCmd ) const
 //================================================================================
 /*!
  * \brief Add access method to algo that is an object or an argument
 * \param theCmd - command to add access method
 * \retval bool - true if added
 \param theCmd - command to add access method
+ * \retval bool - true if added
  */
 //================================================================================
 
@@ -1317,8 +1320,8 @@ bool _pyGen::AddAlgoAccessorMethod( Handle(_pyCommand) theCmd ) const
 //================================================================================
 /*!
  * \brief Find hypothesis by ID (entry)
 * \param theHypID - The hypothesis ID
 * \retval Handle(_pyHypothesis) - The found hypothesis
 \param theHypID - The hypothesis ID
+ * \retval Handle(_pyHypothesis) - The found hypothesis
  */
 //================================================================================
 
@@ -1335,10 +1338,10 @@ Handle(_pyHypothesis) _pyGen::FindHyp( const _pyID& theHypID )
 //================================================================================
 /*!
  * \brief Find algorithm able to create a hypothesis
 * \param theGeom - The shape ID the algorithm was created on
 * \param theMesh - The mesh ID that created the algorithm
 * \param theHypothesis - The hypothesis the algorithm should be able to create
 * \retval Handle(_pyHypothesis) - The found algo
 \param theGeom - The shape ID the algorithm was created on
 \param theMesh - The mesh ID that created the algorithm
 \param theHypothesis - The hypothesis the algorithm should be able to create
+ * \retval Handle(_pyHypothesis) - The found algo
  */
 //================================================================================
 
@@ -1359,8 +1362,8 @@ Handle(_pyHypothesis) _pyGen::FindAlgo( const _pyID& theGeom, const _pyID& theMe
 //================================================================================
 /*!
  * \brief Find subMesh by ID (entry)
 * \param theSubMeshID - The subMesh ID
 * \retval Handle(_pySubMesh) - The found subMesh
 \param theSubMeshID - The subMesh ID
+ * \retval Handle(_pySubMesh) - The found subMesh
  */
 //================================================================================
 
@@ -1376,8 +1379,8 @@ Handle(_pySubMesh) _pyGen::FindSubMesh( const _pyID& theSubMeshID )
 //================================================================================
 /*!
  * \brief Change order of commands in the script
 * \param theCmd1 - One command
 * \param theCmd2 - Another command
 \param theCmd1 - One command
 \param theCmd2 - Another command
  */
 //================================================================================
 
@@ -1394,15 +1397,15 @@ void _pyGen::ExchangeCommands( Handle(_pyCommand) theCmd1, Handle(_pyCommand) th
   int nb1 = theCmd1->GetOrderNb();
   theCmd1->SetOrderNb( theCmd2->GetOrderNb() );
   theCmd2->SetOrderNb( nb1 );
-//   cout << "BECOME " << theCmd1->GetOrderNb() << "\t" << theCmd1->GetString() << endl
-//        << "BECOME " << theCmd2->GetOrderNb() << "\t" << theCmd2->GetString() << endl << endl;
+  //   cout << "BECOME " << theCmd1->GetOrderNb() << "\t" << theCmd1->GetString() << endl
+  //        << "BECOME " << theCmd2->GetOrderNb() << "\t" << theCmd2->GetString() << endl << endl;
 }
 
 //================================================================================
 /*!
  * \brief Set one command after the other
 * \param theCmd - Command to move
 * \param theAfterCmd - Command ater which to insert the first one
 \param theCmd - Command to move
 \param theAfterCmd - Command ater which to insert the first one
  */
 //================================================================================
 
@@ -1414,8 +1417,8 @@ void _pyGen::SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theA
 //================================================================================
 /*!
  * \brief Set one command before the other
 * \param theCmd - Command to move
 * \param theBeforeCmd - Command before which to insert the first one
 \param theCmd - Command to move
 \param theBeforeCmd - Command before which to insert the first one
  */
 //================================================================================
 
@@ -1427,8 +1430,8 @@ void _pyGen::SetCommandBefore( Handle(_pyCommand) theCmd, Handle(_pyCommand) the
 //================================================================================
 /*!
  * \brief Set one command before or after the other
 * \param theCmd - Command to move
 * \param theOtherCmd - Command ater or before which to insert the first one
 \param theCmd - Command to move
 \param theOtherCmd - Command ater or before which to insert the first one
  */
 //================================================================================
 
@@ -1455,7 +1458,7 @@ void _pyGen::setNeighbourCommand( Handle(_pyCommand)& theCmd,
 
 // void _pyGen::addFilterUser( Handle(_pyCommand)& theCommand, const Handle(_pyObject)& user )
 // {
-  // No more needed after adding _pyObject::myArgCommands
+// No more needed after adding _pyObject::myArgCommands
 
 //   const char filterPrefix[] = "aFilter0x";
 //   if ( theCommand->GetString().Search( filterPrefix ) < 1 )
@@ -1481,7 +1484,7 @@ void _pyGen::setNeighbourCommand( Handle(_pyCommand)& theCmd,
 //================================================================================
 /*!
  * \brief Set command be last in list of commands
 * \param theCmd - Command to be last
 \param theCmd - Command to be last
  */
 //================================================================================
 
@@ -1493,8 +1496,8 @@ Handle(_pyCommand)& _pyGen::GetLastCommand()
 //================================================================================
 /*!
  * \brief Set method to access to object wrapped with python class
 * \param theID - The wrapped object entry
 * \param theMethod - The accessor method
 \param theID - The wrapped object entry
 \param theMethod - The accessor method
  */
 //================================================================================
 
@@ -1506,7 +1509,7 @@ void _pyGen::SetAccessorMethod(const _pyID& theID, const char* theMethod )
 //================================================================================
 /*!
  * \brief Generated new ID for object and assign with existing name
 * \param theID - ID of existing object
 \param theID - ID of existing object
  */
 //================================================================================
 
@@ -1546,7 +1549,7 @@ bool _pyGen::AddObject( Handle(_pyObject)& theObj )
   }
   else if ( theObj->IsKind( STANDARD_TYPE( _pyMeshEditor ))) {
     add = myMeshEditors.insert( make_pair( theObj->GetID(),
-                                          Handle(_pyMeshEditor)::DownCast( theObj ))).second;
+                                           Handle(_pyMeshEditor)::DownCast( theObj ))).second;
   }
   else {
     add = myObjects.insert( make_pair( theObj->GetID(), theObj )).second;
@@ -1790,7 +1793,7 @@ _pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd, const _pyID& meshId):
 //================================================================================
 /*!
  * \brief Convert an IDL API command of SMESH::SMESH_Mesh to a method call of python Mesh
 * \param theCommand - Engine method called for this mesh
 \param theCommand - Engine method called for this mesh
  */
 //================================================================================
 
@@ -2428,7 +2431,7 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
       "ExtrusionAlongPathX","ExtrusionAlongPathObject1D","ExtrusionAlongPathObject2D",
       "ExtrusionSweepObjects","RotationSweepObjects","ExtrusionAlongPathObjects",
       "Mirror","MirrorObject","Translate","TranslateObject","Rotate","RotateObject",
-      "FindCoincidentNodes","MergeNodes","FindEqualElements",
+      "FindCoincidentNodes","MergeNodes","FindEqualElements","FillHole",
       "MergeElements","MergeEqualElements","SewFreeBorders","SewConformFreeBorders",
       "FindCoincidentFreeBorders", "SewCoincidentFreeBorders",
       "SewBorderToSide","SewSideElements","ChangeElemNodes","GetLastCreatedNodes",
@@ -2620,7 +2623,7 @@ bool _pyMeshEditor::CanClear()
 //================================================================================
 /*!
  * \brief _pyHypothesis constructor
 * \param theCreationCmd -
 \param theCreationCmd -
  */
 //================================================================================
 
@@ -2633,8 +2636,8 @@ _pyHypothesis::_pyHypothesis(const Handle(_pyCommand)& theCreationCmd):
 //================================================================================
 /*!
  * \brief Creates algorithm or hypothesis
 * \param theCreationCmd - The engine command creating a hypothesis
 * \retval Handle(_pyHypothesis) - Result _pyHypothesis
 \param theCreationCmd - The engine command creating a hypothesis
+ * \retval Handle(_pyHypothesis) - Result _pyHypothesis
  */
 //================================================================================
 
@@ -2723,9 +2726,9 @@ bool _pyHypothesis::IsWrappable(const _pyID& theMesh) const
 //================================================================================
 /*!
  * \brief Convert the command adding a hypothesis to mesh into a smesh command
 * \param theCmd - The command like mesh.AddHypothesis( geom, hypo )
 * \param theAlgo - The algo that can create this hypo
 * \retval bool - false if the command can't be converted
 \param theCmd - The command like mesh.AddHypothesis( geom, hypo )
 \param theAlgo - The algo that can create this hypo
+ * \retval bool - false if the command can't be converted
  */
 //================================================================================
 
@@ -2788,7 +2791,7 @@ bool _pyHypothesis::Addition2Creation( const Handle(_pyCommand)& theCmd,
 //================================================================================
 /*!
  * \brief Remember hypothesis parameter values
- * \param theCommand - The called hypothesis method
+ *  \param theCommand - The called hypothesis method
  */
 //================================================================================
 
@@ -3141,7 +3144,7 @@ void _pyHypothesis::setCreationArg( const int argNb, const _AString& arg )
 //================================================================================
 /*!
  * \brief Remember hypothesis parameter values
- * \param theCommand - The called hypothesis method
+ *  \param theCommand - The called hypothesis method
  */
 //================================================================================
 
@@ -3196,8 +3199,8 @@ void _pyComplexParamHypo::Process( const Handle(_pyCommand)& theCommand)
     {
       CreationMethod& crMethod = type2meth->second;
       while ( (int) crMethod.myArgs.size() < i+1 )
-          crMethod.myArgs.push_back( "[]" );
-        crMethod.myArgs[ i ] = theCommand->GetArg( 1 ); // arg value
+        crMethod.myArgs.push_back( "[]" );
+      crMethod.myArgs[ i ] = theCommand->GetArg( 1 ); // arg value
     }
     myArgCommands.push_back( theCommand );
   }
@@ -3241,7 +3244,7 @@ void _pyComplexParamHypo::Flush()
 //================================================================================
 /*!
  * \brief Convert methods of 1D hypotheses to my own methods
- * \param theCommand - The called hypothesis method
+ *  \param theCommand - The called hypothesis method
  */
 //================================================================================
 
@@ -3278,9 +3281,9 @@ void _pyLayerDistributionHypo::Process( const Handle(_pyCommand)& theCommand)
 //================================================================================
 /*!
  * \brief
 * \param theAdditionCmd - command to be converted
 * \param theMesh - mesh instance
 * \retval bool - status
 \param theAdditionCmd - command to be converted
 \param theMesh - mesh instance
+ * \retval bool - status
  */
 //================================================================================
 
@@ -3382,9 +3385,9 @@ void _pyLayerDistributionHypo::Flush()
 //================================================================================
 /*!
  * \brief additionally to Addition2Creation, clears SetDistrType() command
 * \param theCmd - AddHypothesis() command
 * \param theMesh - mesh to which a hypothesis is added
 * \retval bool - conversion result
 \param theCmd - AddHypothesis() command
 \param theMesh - mesh to which a hypothesis is added
+ * \retval bool - conversion result
  */
 //================================================================================
 
@@ -3464,9 +3467,9 @@ void _pyNumberOfSegmentsHyp::Flush()
 /*!
  * \brief Convert the command adding "SegmentLengthAroundVertex" to mesh
  * into regular1D.LengthNearVertex( length, vertex )
 * \param theCmd - The command like mesh.AddHypothesis( vertex, SegmentLengthAroundVertex )
 * \param theMesh - The mesh needing this hypo
 * \retval bool - false if the command can't be converted
 \param theCmd - The command like mesh.AddHypothesis( vertex, SegmentLengthAroundVertex )
 \param theMesh - The mesh needing this hypo
+ * \retval bool - false if the command can't be converted
  */
 //================================================================================
 
@@ -3509,7 +3512,7 @@ bool _pySegmentLengthAroundVertexHyp::Addition2Creation( const Handle(_pyCommand
 //================================================================================
 /*!
  * \brief _pyAlgorithm constructor
- * \param theCreationCmd - The command like "algo = smeshgen.CreateHypothesis(type,lib)"
+ *  \param theCreationCmd - The command like "algo = smeshgen.CreateHypothesis(type,lib)"
  */
 //================================================================================
 
@@ -3522,9 +3525,9 @@ _pyAlgorithm::_pyAlgorithm(const Handle(_pyCommand)& theCreationCmd)
 //================================================================================
 /*!
  * \brief Convert the command adding an algorithm to mesh
 * \param theCmd - The command like mesh.AddHypothesis( geom, algo )
 * \param theMesh - The mesh needing this algo
 * \retval bool - false if the command can't be converted
 \param theCmd - The command like mesh.AddHypothesis( geom, algo )
 \param theMesh - The mesh needing this algo
+ * \retval bool - false if the command can't be converted
  */
 //================================================================================
 
@@ -3542,8 +3545,8 @@ bool _pyAlgorithm::Addition2Creation( const Handle(_pyCommand)& theCmd,
 //================================================================================
 /*!
  * \brief Return starting position of a part of python command
 * \param thePartIndex - The index of command part
 * \retval int - Part position
 \param thePartIndex - The index of command part
+ * \retval int - Part position
  */
 //================================================================================
 
@@ -3560,8 +3563,8 @@ int _pyCommand::GetBegPos( int thePartIndex ) const
 //================================================================================
 /*!
  * \brief Store starting position of a part of python command
 * \param thePartIndex - The index of command part
 * \param thePosition - Part position
 \param thePartIndex - The index of command part
 \param thePosition - Part position
  */
 //================================================================================
 
@@ -3576,7 +3579,7 @@ void _pyCommand::SetBegPos( int thePartIndex, int thePosition )
 //================================================================================
 /*!
  * \brief Returns whitespace symbols at the line beginning
 * \retval TCollection_AsciiString - result
+ * \retval TCollection_AsciiString - result
  */
 //================================================================================
 
@@ -3593,7 +3596,7 @@ TCollection_AsciiString _pyCommand::GetIndentation()
 //================================================================================
 /*!
  * \brief Return substring of python command looking like ResultValue = Obj.Meth()
 * \retval const TCollection_AsciiString & - ResultValue substring
+ * \retval const TCollection_AsciiString & - ResultValue substring
  */
 //================================================================================
 
@@ -3733,7 +3736,7 @@ const TCollection_AsciiString & _pyCommand::GetObject()
 //================================================================================
 /*!
  * \brief Return substring of python command looking like ResVal = Obj.Method()
 * \retval const TCollection_AsciiString & - Method substring
+ * \retval const TCollection_AsciiString & - Method substring
  */
 //================================================================================
 
@@ -3776,7 +3779,7 @@ bool _pyCommand::IsMethodCall()
 //================================================================================
 /*!
  * \brief Return substring of python command looking like ResVal = Obj.Meth(Arg1,...)
 * \retval const TCollection_AsciiString & - Arg<index> substring
+ * \retval const TCollection_AsciiString & - Arg<index> substring
  */
 //================================================================================
 
@@ -3877,8 +3880,8 @@ int _pyCommand::GetArgBeginning() const
 //================================================================================
 /*!
  * \brief Check if char is a word part
 * \param c - The character to check
 * \retval bool - The check result
 \param c - The character to check
+ * \retval bool - The check result
  */
 //================================================================================
 
@@ -3891,10 +3894,10 @@ static inline bool isWord(const char c, const bool dotIsWord)
 //================================================================================
 /*!
  * \brief Looks for a word in the string and returns word's beginning
 * \param theString - The input string
 * \param theStartPos - The position to start the search, returning word's beginning
 * \param theForward - The search direction
 * \retval TCollection_AsciiString - The found word
 \param theString - The input string
 \param theStartPos - The position to start the search, returning word's beginning
 \param theForward - The search direction
+ * \retval TCollection_AsciiString - The found word
  */
 //================================================================================
 
@@ -4025,9 +4028,9 @@ std::list< _pyID > _pyCommand::GetStudyEntries( const TCollection_AsciiString& s
 //================================================================================
 /*!
  * \brief Look for position where not space char is
 * \param theString - The string
 * \param thePos - The position to search from and which returns result
 * \retval bool - false if there are only space after thePos in theString
 \param theString - The string
 \param thePos - The position to search from and which returns result
+ * \retval bool - false if there are only space after thePos in theString
  */
 //================================================================================
 
@@ -4045,14 +4048,14 @@ bool _pyCommand::SkipSpaces( const TCollection_AsciiString & theString, int & th
 //================================================================================
 /*!
  * \brief Modify a part of the command
 * \param thePartIndex - The index of the part
 * \param thePart - The new part string
 * \param theOldPart - The old part
 \param thePartIndex - The index of the part
 \param thePart - The new part string
 \param theOldPart - The old part
  */
 //================================================================================
 
 void _pyCommand::SetPart(int thePartIndex, const TCollection_AsciiString& thePart,
-                        TCollection_AsciiString& theOldPart)
+                         TCollection_AsciiString& theOldPart)
 {
   int pos = GetBegPos( thePartIndex );
   if ( pos <= Length() && theOldPart != thePart)
@@ -4084,9 +4087,9 @@ void _pyCommand::SetPart(int thePartIndex, const TCollection_AsciiString& thePar
 
 //================================================================================
 /*!
- * \brief Set agrument
 * \param index - The argument index, it counts from 1
 * \param theArg - The argument string
+ * \brief Set argument
 \param index - The argument index, it counts from 1
 \param theArg - The argument string
  */
 //================================================================================
 
@@ -4187,9 +4190,9 @@ bool _pyCommand::SetDependentCmdsAfter() const
 //================================================================================
 /*!
  * \brief Insert accessor method after theObjectID
 * \param theObjectID - id of the accessed object
 * \param theAcsMethod - name of the method giving access to the object
 * \retval bool - false if theObjectID is not found in the command string
 \param theObjectID - id of the accessed object
 \param theAcsMethod - name of the method giving access to the object
+ * \retval bool - false if theObjectID is not found in the command string
  */
 //================================================================================
 
@@ -4277,7 +4280,7 @@ void _pyObject::ClearCommands()
 //================================================================================
 /*!
  * \brief Return method name giving access to an interaface object wrapped by python class
 * \retval const char* - method name
+ * \retval const char* - method name
  */
 //================================================================================
 
@@ -4409,39 +4412,39 @@ _pySubMesh::_pySubMesh(const Handle(_pyCommand)& theCreationCmd, bool toKeepAgrC
 bool _pySubMesh::CanBeArgOfMethod(const _AString& theMethodName)
 {
   return false;
-//   // names of all methods where a sub-mesh can be used as argument
-//   static TStringSet methods;
-//   if ( methods.empty() ) {
-//     const char * names[] = {
-//       // methods of SMESH_Gen
-//       "CopyMesh",
-//       // methods of SMESH_Group
-//       "AddFrom",
-//       // methods of SMESH_Measurements
-//       "MinDistance",
-//       // methods of SMESH_Mesh
-//       "ExportPartToMED","ExportCGNS","ExportPartToDAT","ExportPartToUNV","ExportPartToSTL",
-//       "RemoveSubMesh",
-//       // methods of SMESH_MeshEditor
-//       "ReorientObject","Reorient2D","TriToQuadObject","QuadToTriObject","SplitQuadObject",
-//       "SplitVolumesIntoTetra","SmoothObject","SmoothParametricObject","ConvertFromQuadraticObject",
-//       "RotationSweepObject","RotationSweepObjectMakeGroups","RotationSweepObject1D",
-//       "RotationSweepObject1DMakeGroups","RotationSweepObject2D","RotationSweepObject2DMakeGroups",
-//       "ExtrusionSweepObject","ExtrusionSweepObjectMakeGroups","ExtrusionSweepObject0D",
-//       "ExtrusionSweepObject0DMakeGroups","ExtrusionSweepObject1D","ExtrusionSweepObject2D",
-//       "ExtrusionSweepObject1DMakeGroups","ExtrusionSweepObject2DMakeGroups",
-//       "ExtrusionAlongPathObjX","ExtrusionAlongPathObject","ExtrusionAlongPathObjectMakeGroups",
-//       "ExtrusionAlongPathObject1D","ExtrusionAlongPathObject1DMakeGroups",
-//       "ExtrusionAlongPathObject2D","ExtrusionAlongPathObject2DMakeGroups","MirrorObject",
-//       "MirrorObjectMakeGroups","MirrorObjectMakeMesh","TranslateObject","Scale",
-//       "TranslateObjectMakeGroups","TranslateObjectMakeMesh","ScaleMakeGroups","ScaleMakeMesh",
-//       "RotateObject","RotateObjectMakeGroups","RotateObjectMakeMesh","FindCoincidentNodesOnPart",
-//       "FindCoincidentNodesOnPartBut","FindEqualElements","FindAmongElementsByPoint",
-//       "MakeBoundaryMesh","Create0DElementsOnAllNodes",
-//       "" }; // <- mark of end
-//     methods.Insert( names );
-//   }
-//   return methods.Contains( theMethodName );
+  // names of all methods where a sub-mesh can be used as argument
+  // static TStringSet methods;
+  // if ( methods.empty() ) {
+  //   const char * names[] = {
+  //     // methods of SMESH_Gen
+  //     "CopyMesh",
+  //     // methods of SMESH_Group
+  //     "AddFrom",
+  //     // methods of SMESH_Measurements
+  //     "MinDistance",
+  //     // methods of SMESH_Mesh
+  //     "ExportPartToMED","ExportCGNS","ExportPartToDAT","ExportPartToUNV","ExportPartToSTL",
+  //     "RemoveSubMesh",
+  //     // methods of SMESH_MeshEditor
+  //     "ReorientObject","Reorient2D","TriToQuadObject","QuadToTriObject","SplitQuadObject",
+  //     "SplitVolumesIntoTetra","SmoothObject","SmoothParametricObject","ConvertFromQuadraticObject",
+  //     "RotationSweepObject","RotationSweepObjectMakeGroups","RotationSweepObject1D",
+  //     "RotationSweepObject1DMakeGroups","RotationSweepObject2D","RotationSweepObject2DMakeGroups",
+  //     "ExtrusionSweepObject","ExtrusionSweepObjectMakeGroups","ExtrusionSweepObject0D",
+  //     "ExtrusionSweepObject0DMakeGroups","ExtrusionSweepObject1D","ExtrusionSweepObject2D",
+  //     "ExtrusionSweepObject1DMakeGroups","ExtrusionSweepObject2DMakeGroups",
+  //     "ExtrusionAlongPathObjX","ExtrusionAlongPathObject","ExtrusionAlongPathObjectMakeGroups",
+  //     "ExtrusionAlongPathObject1D","ExtrusionAlongPathObject1DMakeGroups",
+  //     "ExtrusionAlongPathObject2D","ExtrusionAlongPathObject2DMakeGroups","MirrorObject",
+  //     "MirrorObjectMakeGroups","MirrorObjectMakeMesh","TranslateObject","Scale",
+  //     "TranslateObjectMakeGroups","TranslateObjectMakeMesh","ScaleMakeGroups","ScaleMakeMesh",
+  //     "RotateObject","RotateObjectMakeGroups","RotateObjectMakeMesh","FindCoincidentNodesOnPart",
+  //     "FindCoincidentNodesOnPartBut","FindEqualElements","FindAmongElementsByPoint",
+  //     "MakeBoundaryMesh","Create0DElementsOnAllNodes",
+  //     "" }; // <- mark of end
+  //   methods.Insert( names );
+  // }
+  // return methods.Contains( theMethodName );
 }
 
 //================================================================================
@@ -4508,13 +4511,13 @@ _pyGroup::_pyGroup(const Handle(_pyCommand)& theCreationCmd, const _pyID & id)
     //}
     //else {
     // ------------------------->>>>> GroupOnGeom( geom, name, typ )
-      _pyID type = theCreationCmd->GetArg( 1 );
-      _pyID name = theCreationCmd->GetArg( 2 );
-      theCreationCmd->SetMethod( "GroupOnGeom" );
-      theCreationCmd->RemoveArgs();
-      theCreationCmd->SetArg( 1, geom );
-      theCreationCmd->SetArg( 2, name );
-      theCreationCmd->SetArg( 3, type );
+    _pyID type = theCreationCmd->GetArg( 1 );
+    _pyID name = theCreationCmd->GetArg( 2 );
+    theCreationCmd->SetMethod( "GroupOnGeom" );
+    theCreationCmd->RemoveArgs();
+    theCreationCmd->SetArg( 1, geom );
+    theCreationCmd->SetArg( 2, name );
+    theCreationCmd->SetArg( 3, type );
     //}
   }
   else if ( method == "CreateGroupFromFilter" )
index 4531a38ed792404cb3e787ba0ca29af5bc75738b..3c01f79bf78e77b6ac325d7c865fc869d41ea8ee 100644 (file)
@@ -390,7 +390,7 @@ public:
   virtual void Flush() {}
   virtual bool CanClear();
 
-  DEFINE_STANDARD_RTTIEXT(_pyMesh,_pyObject)
+  DEFINE_STANDARD_RTTIEXT(_pyMeshEditor,_pyObject)
 };
 
 // -------------------------------------------------------------------------------------
index 19c46da07fb5bd186afa1a98303547d8ecf23b39..7ca8be9be0cba1b1d31f1371a0b73d7628a58ef3 100644 (file)
@@ -431,6 +431,7 @@ namespace SMESH
       case FT_MultiConnection2D:     myStream<< "aMultiConnection2D";     break;
       case FT_Length:                myStream<< "aLength";                break;
       case FT_Length2D:              myStream<< "aLength2D";              break;
+      case FT_Deflection2D:          myStream<< "aDeflection2D";          break;
       case FT_NodeConnectivityNumber:myStream<< "aNodeConnectivityNumber";break;
       case FT_BelongToMeshGroup:     myStream<< "aBelongToMeshGroup";     break;
       case FT_BelongToGeom:          myStream<< "aBelongToGeom";          break;
@@ -1332,7 +1333,7 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
     {
       // find the function name
       int functBeg = posAlready;
-      char* script = (char*) anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def fuction()"
+      char* script = (char*) anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def function()"
       while ( *script != ' ' ) {
         script--;
         functBeg--;
index 95c338377faa8b5584e8839fa7c2ece8b9fbbe30..28e749b6e758b5a0650660c187f9d41428028b78 100644 (file)
@@ -192,7 +192,7 @@ static TopoDS_Shape getShapeByID (const char* theID)
 
 /*
   Class       : Functor_i
-  Description : An abstact class for all functors
+  Description : An abstract class for all functors
 */
 Functor_i::Functor_i():
   SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
@@ -532,6 +532,21 @@ SMESH::Length2D::Values* Length2D_i::GetValues()
   return aResult._retn();
 }
 
+/*
+  Class       : Deflection2D_i
+  Description : Functor for calculating distance between a face and geometry
+*/
+Deflection2D_i::Deflection2D_i()
+{
+  myNumericalFunctorPtr.reset( new Controls::Deflection2D() );
+  myFunctorPtr = myNumericalFunctorPtr;
+}
+
+FunctorType Deflection2D_i::GetFunctorType()
+{
+  return SMESH::FT_Deflection2D;
+}
+
 /*
   Class       : MultiConnection_i
   Description : Functor for calculating number of faces conneted to the edge
@@ -2111,6 +2126,14 @@ Length2D_ptr FilterManager_i::CreateLength2D()
   return anObj._retn();
 }
 
+Deflection2D_ptr FilterManager_i::CreateDeflection2D()
+{
+  SMESH::Deflection2D_i* aServant = new SMESH::Deflection2D_i();
+  SMESH::Deflection2D_var   anObj = aServant->_this();
+  TPythonDump()<<aServant<<" = "<<this<<".CreateLength2D()";
+  return anObj._retn();
+}
+
 MultiConnection_ptr FilterManager_i::CreateMultiConnection()
 {
   SMESH::MultiConnection_i* aServant = new SMESH::MultiConnection_i();
@@ -2954,6 +2977,9 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
       case SMESH::FT_Length2D:
         aFunctor = aFilterMgr->CreateLength2D();
         break;
+      case SMESH::FT_Deflection2D:
+        aFunctor = aFilterMgr->CreateDeflection2D();
+        break;
       case SMESH::FT_AspectRatio:
         aFunctor = aFilterMgr->CreateAspectRatio();
         break;
@@ -3449,9 +3475,10 @@ static inline LDOMString toString( CORBA::Long theType )
     case FT_EqualFaces            : return "Equal faces";
     case FT_EqualVolumes          : return "Equal volumes";
     case FT_MultiConnection       : return "Borders at multi-connections";
-    case FT_MultiConnection2D     :return "Borders at multi-connections 2D";
+    case FT_MultiConnection2D     : return "Borders at multi-connections 2D";
     case FT_Length                : return "Length";
     case FT_Length2D              : return "Length 2D";
+    case FT_Deflection2D          : return "Deflection 2D";
     case FT_LessThan              : return "Less than";
     case FT_MoreThan              : return "More than";
     case FT_EqualTo               : return "Equal to";
@@ -3460,7 +3487,7 @@ static inline LDOMString toString( CORBA::Long theType )
     case FT_LogicalOR             : return "Or";
     case FT_GroupColor            : return "Color of Group";
     case FT_LinearOrQuadratic     : return "Linear or Quadratic";
-    case FT_ElemGeomType          : return "Element geomtry type";
+    case FT_ElemGeomType          : return "Element geometry type";
     case FT_EntityType            : return "Entity type";
     case FT_Undefined             : return "";
     default                       : return "";
@@ -3500,6 +3527,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr )
   //  else if ( theStr.equals( "Borders at multi-connections 2D" ) ) return FT_MultiConnection2D;
   else if ( theStr.equals( "Length"                       ) ) return FT_Length;
   //  else if ( theStr.equals( "Length2D"                     ) ) return FT_Length2D;
+  else if ( theStr.equals( "Deflection"                   ) ) return FT_Deflection2D;
   else if ( theStr.equals( "Range of IDs"                 ) ) return FT_RangeOfIds;
   else if ( theStr.equals( "Bad Oriented Volume"          ) ) return FT_BadOrientedVolume;
   else if ( theStr.equals( "Volumes with bare border"     ) ) return FT_BareBorderVolume;
@@ -3514,7 +3542,7 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr )
   else if ( theStr.equals( "Or"                           ) ) return FT_LogicalOR;
   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( "Element geometry type"        ) ) return FT_ElemGeomType;
   else if ( theStr.equals( "Entity type"                  ) ) return FT_EntityType;
   else if ( theStr.equals( ""                             ) ) return FT_Undefined;
   else  return FT_Undefined;
@@ -4065,6 +4093,7 @@ static const char** getFunctNames()
     "FT_MultiConnection2D",
     "FT_Length",
     "FT_Length2D",
+    "FT_Deflection2D",
     "FT_NodeConnectivityNumber",
     "FT_BelongToMeshGroup",
     "FT_BelongToGeom",
@@ -4081,7 +4110,7 @@ static const char** getFunctNames()
     "FT_LinearOrQuadratic",
     "FT_GroupColor",
     "FT_ElemGeomType",
-    "FT_EntityType", 
+    "FT_EntityType",
     "FT_CoplanarFaces",
     "FT_BallDiameter",
     "FT_ConnectedElements",
index 9baf0f3bf5e6f3c0cdfe16ed96334ccdefb30ae6..54128103a81fcf4d1627e44c0e55abf668ada32c 100644 (file)
@@ -73,7 +73,7 @@ namespace SMESH
   
   /*
     Class       : Functor_i
-    Description : An abstact class for all functors 
+    Description : An abstract class for all functors 
   */
   class SMESH_I_EXPORT Functor_i: public virtual POA_SMESH::Functor,
                                   public virtual SALOME::GenericObj_i
@@ -266,11 +266,23 @@ namespace SMESH
     Length2D_i();
     SMESH::Length2D::Values*        GetValues();
     FunctorType                     GetFunctorType();
-    
+
   protected:
     Controls::Length2DPtr          myLength2DPtr;
   };
-  
+
+  /*
+    Class       : Deflection2D_i
+    Description : Functor for calculating distance between a face and geometry
+  */
+  class SMESH_I_EXPORT Deflection2D_i: public virtual POA_SMESH::Deflection2D,
+                                       public virtual NumericalFunctor_i
+  {
+  public:
+    Deflection2D_i();
+    FunctorType                     GetFunctorType();
+  };
+
   /*
     Class       : MultiConnection_i
     Description : Functor for calculating number of faces conneted to the edge
@@ -1087,6 +1099,7 @@ namespace SMESH
     MaxElementLength3D_ptr    CreateMaxElementLength3D();
     Length_ptr                CreateLength();
     Length2D_ptr              CreateLength2D();
+    Deflection2D_ptr          CreateDeflection2D();
     NodeConnectivityNumber_ptr CreateNodeConnectivityNumber();
     MultiConnection_ptr       CreateMultiConnection();
     MultiConnection2D_ptr     CreateMultiConnection2D();
index f6877fa472404c875366b9c7cd7887e1adbeaa95..b29e9a90173dd725ca4534098dad708a9ba8f289 100644 (file)
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
 
+#include <BRepPrimAPI_MakeBox.hxx>
+#include <BRepPrimAPI_MakeCylinder.hxx>
+#include <BRepPrimAPI_MakeSphere.hxx>
+#include <BRep_Tool.hxx>
+#include <OSD.hxx>
+#include <TColStd_MapOfAsciiString.hxx>
+#include <TCollection_AsciiString.hxx>
 #include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_MapOfShape.hxx>
 #include <TopoDS.hxx>
-#include <TopoDS_Iterator.hxx>
-#include <TopoDS_Compound.hxx>
 #include <TopoDS_CompSolid.hxx>
-#include <TopoDS_Solid.hxx>
-#include <TopoDS_Shell.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Wire.hxx>
+#include <TopoDS_Compound.hxx>
 #include <TopoDS_Edge.hxx>
-#include <TopoDS_Vertex.hxx>
+#include <TopoDS_Face.hxx>
+#include <TopoDS_Iterator.hxx>
 #include <TopoDS_Shape.hxx>
-#include <TopTools_MapOfShape.hxx>
-#include <TopTools_IndexedMapOfShape.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopoDS_Shell.hxx>
+#include <TopoDS_Solid.hxx>
+#include <TopoDS_Vertex.hxx>
+#include <TopoDS_Wire.hxx>
 #include <gp_Pnt.hxx>
-#include <BRep_Tool.hxx>
-#include <TCollection_AsciiString.hxx>
-#include <OSD.hxx>
-#include <BRepPrimAPI_MakeSphere.hxx>
-#include <BRepPrimAPI_MakeCylinder.hxx>
-#include <BRepPrimAPI_MakeBox.hxx>
 
 
 #ifdef WIN32
@@ -377,7 +378,7 @@ GenericHypothesisCreator_i* SMESH_Gen_i::getHypothesisCreator(const char* theHyp
   throw (SALOME::SALOME_Exception)
 {
   std::string aPlatformLibName;
-  /* It's Need to tranlate lib name for WIN32 or X platform */
+  /* It's Need to translate lib name for WIN32 or X platform */
   if ( theLibName && theLibName[0] != '\0'  )
   {
     int libNameLen = strlen(theLibName);
@@ -1753,7 +1754,7 @@ SMESH_Gen_i::MakeGroupsOfBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
 
 //================================================================================
 /*!
- * \brief Returns errors of hypotheses definintion
+ * \brief Returns errors of hypotheses definition
  * \param theMesh - the mesh
  * \param theSubObject - the main or sub- shape
  * \retval SMESH::algo_error_array* - sequence of errors
@@ -3827,7 +3828,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                 // "Face V positions" - V parameter of node on face
 
                 // Find out nb of nodes on edges and faces
-                // Collect corresponing sub-meshes
+                // Collect corresponding sub-meshes
                 int nbEdgeNodes = 0, nbFaceNodes = 0;
                 list<SMESHDS_SubMesh*> aEdgeSM, aFaceSM;
                 // loop on SMESHDS_SubMesh'es
@@ -4682,18 +4683,23 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
         if ( aTopGroup->ExistInternalObject( name_group ) ) {
           aGroup = new HDFgroup( name_group, aTopGroup );
           aGroup->OpenOnDisk();
-          // get number of groups
-          int aNbSubObjects = aGroup->nInternalObjects();
-          for ( int j = 0; j < aNbSubObjects; j++ ) {
-            char name_dataset[ HDF_NAME_MAX_LEN+1 ];
-            aGroup->InternalObjectIndentify( j, name_dataset );
-            // check if it is an group
-            if ( string( name_dataset ).substr( 0, 5 ) == string( "Group" ) ) {
+          // PAL23514: get all names from the HDFgroup to avoid iteration on its contents
+          // within aGroup->ExistInternalObject( name )
+          std::vector< std::string > subNames;
+          TColStd_MapOfAsciiString mapOfNames;
+          aGroup->GetAllObjects( subNames );
+          for ( size_t iN = 0; iN < subNames.size(); ++iN )
+            mapOfNames.Add( subNames[ iN ].c_str() );
+          // loop on groups
+          for ( size_t j = 0; j < subNames.size(); j++ ) {
+            const std::string& name_dataset = subNames[ j ];
+            // check if it is a group
+            if ( name_dataset.substr( 0, 5 ) == "Group" ) {
               // --> get group id
-              int subid = atoi( string( name_dataset ).substr( 5 ).c_str() );
+              int subid = atoi( name_dataset.substr( 5 ).c_str() );
               if ( subid <= 0 )
                 continue;
-              aDataset = new HDFdataset( name_dataset, aGroup );
+              aDataset = new HDFdataset( name_dataset.c_str(), aGroup );
               aDataset->OpenOnDisk();
 
               // Retrieve actual group name
@@ -4706,7 +4712,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               TopoDS_Shape aShape;
               char aRefName[ 30 ];
               sprintf( aRefName, "Ref on shape %d", subid);
-              if ( aGroup->ExistInternalObject( aRefName ) ) {
+              if ( mapOfNames.Contains( aRefName ))
+              {
                 // load mesh "Ref on shape" - it's an entry to SObject
                 aDataset = new HDFdataset( aRefName, aGroup );
                 aDataset->OpenOnDisk();
@@ -4727,8 +4734,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               // Try to read a filter of SMESH_GroupOnFilter
               SMESH::Filter_var filter;
               SMESH_PredicatePtr predicate;
-              std::string hdfGrpName = "Filter " + SMESH_Comment(subid);
-              if ( aGroup->ExistInternalObject( hdfGrpName.c_str() ))
+              std::string hdfGrpName = ( SMESH_Comment( "Filter ") << subid );
+              if ( mapOfNames.Contains( hdfGrpName.c_str() ))
               {
                 aDataset = new HDFdataset( hdfGrpName.c_str(), aGroup );
                 aDataset->OpenOnDisk();
@@ -4769,13 +4776,13 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               if ( !aGroupBaseDS )
                 continue;
 
-              aGroupBaseDS->SetStoreName( name_dataset );
+              aGroupBaseDS->SetStoreName( name_dataset.c_str() );
 
               // ouv : NPAL12872
               // Read color of the group
               char aGroupColorName[ 30 ];
               sprintf( aGroupColorName, "ColorGroup %d", subid);
-              if ( aGroup->ExistInternalObject( aGroupColorName ) )
+              if ( mapOfNames.Contains( aGroupColorName ))
               {
                 aDataset = new HDFdataset( aGroupColorName, aGroup );
                 aDataset->OpenOnDisk();
index 1e869462cd65cf08dc9936b82e669d92e7550975..e5bd4f95ddc4ebe46783068c5ce8b2e5f5b45112 100644 (file)
@@ -49,6 +49,7 @@
 #include <TCollection_AsciiString.hxx>
 #include <Resource_DataMapOfAsciiStringAsciiString.hxx>
 #include <TColStd_HSequenceOfAsciiString.hxx>
+#include <NCollection_DataMap.hxx>
 
 #include <map>
 #include <sstream>
@@ -61,56 +62,53 @@ class SALOME_LifeCycleCORBA;
 // ==========================================================
 class SMESH_I_EXPORT StudyContext
 {
+  typedef NCollection_DataMap< int, std::string > TInt2StringMap;
+  typedef NCollection_DataMap< int, int >         TInt2IntMap;
 public:
   // constructor
   StudyContext() {}
-  // destructor
-  ~StudyContext()
-  {
-    mapIdToIOR.clear();
-    mapIdToId.clear();
-  }
+
   // register object in the internal map and return its id
   int addObject( std::string theIOR )
   {
     int nextId = getNextId();
-    mapIdToIOR[ nextId ]  = theIOR;
+    mapIdToIOR.Bind( nextId, theIOR );
     return nextId;
   }
   // find the object id in the internal map by the IOR
   int findId( std::string theIOR )
   {
-    std::map<int, std::string>::iterator imap;
+    TInt2StringMap::iterator imap;
     for ( imap = mapIdToIOR.begin(); imap != mapIdToIOR.end(); ++imap ) {
-      if ( imap->second == theIOR )
-        return imap->first;
+      if ( *imap == theIOR )
+        return imap.Iterator().Key();
     }
     return 0;
   }
   // get object's IOR by id
   std::string getIORbyId( const int theId )
   {
-    if ( mapIdToIOR.find( theId ) != mapIdToIOR.end() )
-      return mapIdToIOR[ theId ];
-    return std::string( "" );
+    if ( mapIdToIOR.IsBound( theId ) )
+      return mapIdToIOR( theId );
+    return std::string();
   }
   // get object's IOR by old id
   std::string getIORbyOldId( const int theOldId )
   {
-    if ( mapIdToId.find( theOldId ) != mapIdToId.end() )
-      return getIORbyId( mapIdToId[ theOldId ] );
-    return std::string( "" );
+    if ( mapIdToId.IsBound( theOldId ) )
+      return getIORbyId( mapIdToId( theOldId ));
+    return std::string();
   }
   // maps old object id to the new one (used when restoring data)
   void mapOldToNew( const int oldId, const int newId ) {
-    mapIdToId[ oldId ] = newId;
+    mapIdToId.Bind( oldId, newId );
   }
   // get old id by a new one
   int getOldId( const int newId ) {
-    std::map<int, int>::iterator imap;
+    TInt2IntMap::iterator imap;
     for ( imap = mapIdToId.begin(); imap != mapIdToId.end(); ++imap ) {
-      if ( imap->second == newId )
-        return imap->first;
+      if ( *imap == newId )
+        return imap.Iterator().Key();
     }
     return 0;
   }
@@ -120,13 +118,13 @@ private:
   int getNextId()
   {
     int id = 1;
-    while( mapIdToIOR.find( id ) != mapIdToIOR.end() )
+    while( mapIdToIOR.IsBound( id ) )
       id++;
     return id;
   }
 
-  std::map<int, std::string> mapIdToIOR; // persistent-to-transient map
-  std::map<int, int>         mapIdToId;  // to translate object from persistent to transient form
+  TInt2StringMap mapIdToIOR; // persistent-to-transient map
+  TInt2IntMap    mapIdToId;  // to translate object from persistent to transient form
 };
 
 // ===========================================================
@@ -156,9 +154,9 @@ public:
   // Get the SALOMEDS::SObject corresponding to a CORBA object
   static SALOMEDS::SObject_ptr ObjectToSObject(SALOMEDS::Study_ptr theStudy,
                                                CORBA::Object_ptr   theObject);
-  // Get GEOM Object correspoding to TopoDS_Shape
+  // Get GEOM Object corresponding to TopoDS_Shape
   GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape );
-  // Get TopoDS_Shape correspoding to GEOM_Object
+  // Get TopoDS_Shape corresponding to GEOM_Object
   TopoDS_Shape GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject);
 
   // Default constructor
@@ -323,7 +321,7 @@ public:
                                         SMESH::long_array&    theShapesId )
     throw ( SALOME::SALOME_Exception );
 
-  // Returns errors of hypotheses definintion
+  // Returns errors of hypotheses definition
   SMESH::algo_error_array* GetAlgoState( SMESH::SMESH_Mesh_ptr theMesh,
                                          GEOM::GEOM_Object_ptr theSubObject )
       throw ( SALOME::SALOME_Exception );
@@ -565,7 +563,7 @@ public:
 
   // Return an object that previously had an oldID
   template<class TInterface>
-  typename TInterface::_var_type GetObjectByOldId( const int oldID )
+    typename TInterface::_var_type GetObjectByOldId( const int oldID )
   {
     if ( StudyContext* myStudyContext = GetCurrentStudyContext() ) {
       std::string ior = myStudyContext->getIORbyOldId( oldID );
index b08b7e3e6d35d8b09a536a17ca8b5b5e75a68af5..e434840ddec0bf0ffc29c787052ecaab81033880 100644 (file)
@@ -1006,7 +1006,7 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy
  * \brief Stores names of variables that WILL be passes as parameters when calling
  *        some method of a given object.
  *  \param [in] theObject - the object whose a method WILL be called with \a theParameters.
- *  \param [in] theParameters - a string contating parameters separated by ':'.
+ *  \param [in] theParameters - a string containing parameters separated by ':'.
  */
 //================================================================================
 
index b5a9d4f0654a6be760db0cbb0582d27c4703ea60..6cad2a92eb6c6fed23f9df6f5a0e75e8eca01be2 100644 (file)
@@ -2013,7 +2013,7 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr th
 //=============================================================================
 /*!
  * Find better splitting of the given quadrangle.
- *  \param IDOfQuad  ID of the quadrangle to be splitted.
+ *  \param IDOfQuad  ID of the quadrangle to be split.
  *  \param Criterion A criterion to choose a diagonal for splitting.
  *  \return 1 if 1-3 diagonal is better, 2 if 2-4
  *          diagonal is better, 0 if error occurs.
@@ -3990,7 +3990,7 @@ SMESH_MeshEditor_i::ScaleMakeMesh(SMESH::SMESH_IDSource_ptr  theObject,
     // and then "GetGroups" using SMESH_Mesh::GetGroups()
 
     TPythonDump pydump; // to prevent dump at mesh creation
-    mesh = makeMesh( theMeshName );
+    mesh   = makeMesh( theMeshName );
     mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh );
 
     if ( mesh_i )
@@ -4577,6 +4577,151 @@ CORBA::Short SMESH_MeshEditor_i::GetPointState(CORBA::Double x,
   return 0;
 }
 
+//=======================================================================
+//function : IsManifold
+//purpose  : Check if a 2D mesh is manifold
+//=======================================================================
+
+CORBA::Boolean SMESH_MeshEditor_i::IsManifold()
+  throw (SALOME::SALOME_Exception)
+{
+  bool isManifold = true;
+
+  SMESH_TRY;
+  SMESH_MeshAlgos::TFreeBorderVec foundFreeBordes;
+  SMESH_MeshAlgos::FindFreeBorders( *getMeshDS(),
+                                    foundFreeBordes,
+                                    /*closedOnly=*/true,
+                                    &isManifold );
+  SMESH_CATCH( SMESH::throwCorbaException );
+
+  return isManifold;
+}
+
+//=======================================================================
+//function : IsCoherentOrientation2D
+//purpose  : Check if orientation of 2D elements is coherent
+//=======================================================================
+
+CORBA::Boolean SMESH_MeshEditor_i::IsCoherentOrientation2D()
+  throw (SALOME::SALOME_Exception)
+{
+  bool isGoodOri = true;
+
+  SMESH_TRY;
+  SMESH_MeshAlgos::TFreeBorderVec foundFreeBordes;
+  SMESH_MeshAlgos::FindFreeBorders( *getMeshDS(),
+                                    foundFreeBordes,
+                                    /*closedOnly=*/true,
+                                    /*isManifold=*/0,
+                                    &isGoodOri);
+  SMESH_CATCH( SMESH::throwCorbaException );
+
+  return isGoodOri;
+}
+
+//=======================================================================
+//function : FindFreeBorders
+//purpose  : Returns all or only closed FreeBorder's.
+//=======================================================================
+
+SMESH::ListOfFreeBorders* SMESH_MeshEditor_i::FindFreeBorders(CORBA::Boolean closedOnly)
+  throw (SALOME::SALOME_Exception)
+{
+  SMESH::ListOfFreeBorders_var resBorders = new SMESH::ListOfFreeBorders;
+  SMESH_TRY;
+
+  SMESH_MeshAlgos::TFreeBorderVec foundFreeBordes;
+  SMESH_MeshAlgos::FindFreeBorders( *getMeshDS(), foundFreeBordes, closedOnly );
+
+  resBorders->length( foundFreeBordes.size() );
+  for ( size_t i = 0; i < foundFreeBordes.size(); ++i )
+  {
+    const SMESH_MeshAlgos::TFreeBorder& bordNodes = foundFreeBordes[i];
+    SMESH::FreeBorder&                    bordOut = resBorders[i];
+    bordOut.nodeIDs.length( bordNodes.size() );
+    for ( size_t iN = 0; iN < bordNodes.size(); ++iN )
+      bordOut.nodeIDs[ iN ] = bordNodes[ iN ]->GetID();
+  }
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+
+  return resBorders._retn();
+}
+
+//=======================================================================
+//function : FillHole
+//purpose  : Fill with 2D elements a hole defined by a FreeBorder.
+//=======================================================================
+
+void SMESH_MeshEditor_i::FillHole(const SMESH::FreeBorder& theHole)
+  throw (SALOME::SALOME_Exception)
+{
+  initData();
+
+  if ( theHole.nodeIDs.length() < 4 )
+    THROW_SALOME_CORBA_EXCEPTION("A hole should be bound by at least 3 nodes", SALOME::BAD_PARAM);
+  if ( theHole.nodeIDs[0] != theHole.nodeIDs[ theHole.nodeIDs.length()-1 ] )
+    THROW_SALOME_CORBA_EXCEPTION("Not closed hole boundary. "
+                                 "First and last nodes must be same", SALOME::BAD_PARAM);
+
+  SMESH_MeshAlgos::TFreeBorder bordNodes;
+  bordNodes.resize( theHole.nodeIDs.length() );
+  for ( size_t iN = 0; iN < theHole.nodeIDs.length(); ++iN )
+  {
+    bordNodes[ iN ] = getMeshDS()->FindNode( theHole.nodeIDs[ iN ]);
+    if ( !bordNodes[ iN ] )
+      THROW_SALOME_CORBA_EXCEPTION(SMESH_Comment("Node #") << theHole.nodeIDs[ iN ]
+                                   << " does not exist", SALOME::BAD_PARAM);
+  }
+
+  SMESH_TRY;
+
+  MeshEditor_I::TPreviewMesh* previewMesh = 0;
+  SMDS_Mesh* meshDS = getMeshDS();
+  if ( myIsPreviewMode )
+  {
+    // copy faces sharing nodes of theHole
+    TIDSortedElemSet holeFaces;
+    previewMesh = getPreviewMesh( SMDSAbs_Face );
+    for ( size_t i = 0; i < bordNodes.size(); ++i )
+    {
+      SMDS_ElemIteratorPtr fIt = bordNodes[i]->GetInverseElementIterator( SMDSAbs_Face );
+      while ( fIt->more() )
+      {
+        const SMDS_MeshElement* face = fIt->next();
+        if ( holeFaces.insert( face ).second )
+          previewMesh->Copy( face );
+      }
+      bordNodes[i] = previewMesh->GetMeshDS()->FindNode( bordNodes[i]->GetID() );
+      ASSERT( bordNodes[i] );
+    }
+    meshDS = previewMesh->GetMeshDS();
+  }
+
+  std::vector<const SMDS_MeshElement*> newFaces;
+  SMESH_MeshAlgos::FillHole( bordNodes, *meshDS, newFaces );
+
+  if ( myIsPreviewMode )
+  {
+    previewMesh->Clear();
+    for ( size_t i = 0; i < newFaces.size(); ++i )
+      previewMesh->Copy( newFaces[i] );
+  }
+  else
+  {
+    getEditor().ClearLastCreated();
+    SMESH_SequenceOfElemPtr& aSeq =
+      const_cast<SMESH_SequenceOfElemPtr&>( getEditor().GetLastCreatedElems() );
+    for ( size_t i = 0; i < newFaces.size(); ++i )
+      aSeq.Append( newFaces[i] );
+
+    TPythonDump() << this << ".FillHole( SMESH.FreeBorder(" << theHole.nodeIDs << " ))";
+  }
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+}
+
 //=======================================================================
 //function : convError
 //purpose  :
@@ -6806,3 +6951,130 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
   SMESH_CATCH( SMESH::throwCorbaException );
   return 0;
 }
+
+//================================================================================
+/*!
+ * \brief Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+ *        the initial mesh. Positions of new nodes are found by cutting the mesh by the
+ *        plane passing through pairs of points specified by each PolySegment structure.
+ *        If there are several paths connecting a pair of points, the shortest path is
+ *        selected by the module. Position of the cutting plane is defined by the two
+ *        points and an optional vector lying on the plane specified by a PolySegment.
+ *        By default the vector is defined by Mesh module as following. A middle point
+ *        of the two given points is computed. The middle point is projected to the mesh.
+ *        The vector goes from the middle point to the projection point. In case of planar
+ *        mesh, the vector is normal to the mesh.
+ *  \param [inout] segments - PolySegment's defining positions of cutting planes.
+ *        Return the used vector and position of the middle point.
+ *  \param [in] groupName - optional name of a group where created mesh segments will
+ *        be added.
+ */
+//================================================================================
+
+void SMESH_MeshEditor_i::MakePolyLine(SMESH::ListOfPolySegments& theSegments,
+                                      const char*                theGroupName)
+  throw (SALOME::SALOME_Exception)
+{
+  if ( theSegments.length() == 0 )
+    THROW_SALOME_CORBA_EXCEPTION("No segments given", SALOME::BAD_PARAM );
+  if ( myMesh->NbFaces() == 0 )
+    THROW_SALOME_CORBA_EXCEPTION("No faces in the mesh", SALOME::BAD_PARAM );
+
+  SMESH_TRY;
+  initData(/*deleteSearchers=*/false);
+
+  SMESHDS_Group* groupDS = 0;
+  SMESHDS_Mesh*   meshDS = getMeshDS();
+  if ( myIsPreviewMode ) // copy faces to the tmp mesh
+  {
+    TPreviewMesh * tmpMesh = getPreviewMesh( SMDSAbs_Edge );
+    SMDS_ElemIteratorPtr faceIt = getMeshDS()->elementsIterator( SMDSAbs_Face );
+    while ( faceIt->more() )
+      tmpMesh->Copy( faceIt->next() );
+    meshDS = tmpMesh->GetMeshDS();
+  }
+  else if ( theGroupName[0] ) // find/create a group of segments
+  {
+    SMESH_Mesh::GroupIteratorPtr grpIt = myMesh->GetGroups();
+    while ( !groupDS && grpIt->more() )
+    {
+      SMESH_Group* group = grpIt->next();
+      if ( group->GetGroupDS()->GetType() == SMDSAbs_Edge &&
+           strcmp( group->GetName(), theGroupName ) == 0 )
+      {
+        groupDS = dynamic_cast< SMESHDS_Group* >( group->GetGroupDS() );
+      }
+    }
+    if ( !groupDS )
+    {
+      SMESH::SMESH_Group_var groupVar = myMesh_i->CreateGroup( SMESH::EDGE, theGroupName );
+
+      if ( SMESH_Group_i* groupImpl = SMESH::DownCast<SMESH_Group_i*>( groupVar ))
+        groupDS = dynamic_cast< SMESHDS_Group* >( groupImpl->GetGroupDS() );
+    }
+  }
+
+  // convert input polySegments
+  ::SMESH_MeshEditor::TListOfPolySegments segments( theSegments.length() );
+  for ( CORBA::ULong i = 0; i < theSegments.length(); ++i )
+  {
+    SMESH::PolySegment&               segIn = theSegments[ i ];
+    ::SMESH_MeshEditor::PolySegment& segOut = segments[ i ];
+    segOut.myNode1[0] = meshDS->FindNode( segIn.node1ID1 );
+    segOut.myNode2[0] = meshDS->FindNode( segIn.node1ID2 );
+    segOut.myNode1[1] = meshDS->FindNode( segIn.node2ID1 );
+    segOut.myNode2[1] = meshDS->FindNode( segIn.node2ID2 );
+    segOut.myVector.SetCoord( segIn.vector.PS.x,
+                              segIn.vector.PS.y,
+                              segIn.vector.PS.z );
+    if ( !segOut.myNode1[0] )
+      THROW_SALOME_CORBA_EXCEPTION( SMESH_Comment( "Invalid node ID: ") << segIn.node1ID1,
+                                    SALOME::BAD_PARAM );
+    if ( !segOut.myNode1[1] )
+      THROW_SALOME_CORBA_EXCEPTION( SMESH_Comment( "Invalid node ID: ") << segIn.node2ID1,
+                                    SALOME::BAD_PARAM );
+  }
+
+  // get a static ElementSearcher
+  SMESH::SMESH_IDSource_var idSource = SMESH::SMESH_IDSource::_narrow( myMesh_i->_this() );
+  theSearchersDeleter.Set( myMesh, getPartIOR( idSource, SMESH::FACE ));
+  if ( !theElementSearcher )
+    theElementSearcher = SMESH_MeshAlgos::GetElementSearcher( *getMeshDS() );
+
+  // compute
+  getEditor().MakePolyLine( segments, groupDS, theElementSearcher );
+
+  // return vectors
+  if ( myIsPreviewMode )
+  {
+    for ( CORBA::ULong i = 0; i < theSegments.length(); ++i )
+    {
+      SMESH::PolySegment&             segOut = theSegments[ i ];
+      ::SMESH_MeshEditor::PolySegment& segIn = segments[ i ];
+      segOut.vector.PS.x = segIn.myVector.X();
+      segOut.vector.PS.y = segIn.myVector.Y();
+      segOut.vector.PS.z = segIn.myVector.Z();
+    }
+  }
+  else
+  {
+    TPythonDump() << "_segments = []";
+    for ( CORBA::ULong i = 0; i < theSegments.length(); ++i )
+    {
+      SMESH::PolySegment& segIn = theSegments[ i ];
+      TPythonDump() << "_segments.append( SMESH.PolySegment( "
+                    << segIn.node1ID1 << ", "
+                    << segIn.node1ID2 << ", "
+                    << segIn.node2ID1 << ", "
+                    << segIn.node2ID2 << ", "
+                    << "smeshBuilder.MakeDirStruct( "
+                    << segIn.vector.PS.x << ", "
+                    << segIn.vector.PS.y << ", "
+                    << segIn.vector.PS.z << ")))";
+    }
+    TPythonDump() << this << ".MakePolyLine( _segments, '" << theGroupName << "')";
+  }
+  meshDS->Modified();
+  SMESH_CATCH( SMESH::throwCorbaException );
+  return;
+}
index 74eaa36ad087e6af5fa0c4e58cb03b1b32594f37..bcc0dfc64393f0eb06c0833b3f579b64cef59c8a 100644 (file)
@@ -527,7 +527,7 @@ public:
                                          SMESH::ElementType type)
     throw (SALOME::SALOME_Exception);
   /*!
-   * Searching among the given elements, return elements of given type 
+   * Searching among the given elements, return elements of given type
    * where the given point is IN or ON.
    * 'ALL' type means elements of any type excluding nodes
    */
@@ -545,6 +545,30 @@ public:
   CORBA::Short GetPointState(CORBA::Double x, CORBA::Double y, CORBA::Double z)
     throw (SALOME::SALOME_Exception);
 
+  /*!
+   * Check if a 2D mesh is manifold
+   */
+  CORBA::Boolean IsManifold()
+    throw (SALOME::SALOME_Exception);
+
+  /*!
+   * Check if orientation of 2D elements is coherent
+   */
+  CORBA::Boolean IsCoherentOrientation2D()
+    throw (SALOME::SALOME_Exception);
+
+  /*!
+   * Returns all or only closed FreeBorder's.
+   */
+  SMESH::ListOfFreeBorders* FindFreeBorders(CORBA::Boolean closedOnly)
+    throw (SALOME::SALOME_Exception);
+
+  /*!
+   * Fill with 2D elements a hole defined by a FreeBorder.
+   */
+  void FillHole(const SMESH::FreeBorder& hole)
+    throw (SALOME::SALOME_Exception);
+
   SMESH::CoincidentFreeBorders* FindCoincidentFreeBorders(CORBA::Double tolerance);
   CORBA::Short SewCoincidentFreeBorders(const SMESH::CoincidentFreeBorders& freeBorders,
                                         CORBA::Boolean                      createPolygons,
@@ -552,35 +576,35 @@ public:
     throw (SALOME::SALOME_Exception);
 
   SMESH::SMESH_MeshEditor::Sew_Error
-  SewFreeBorders(CORBA::Long FirstNodeID1,
-                 CORBA::Long SecondNodeID1,
-                 CORBA::Long LastNodeID1,
-                 CORBA::Long FirstNodeID2,
-                 CORBA::Long SecondNodeID2,
-                 CORBA::Long LastNodeID2,
-                 CORBA::Boolean CreatePolygons,
-                 CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
+    SewFreeBorders(CORBA::Long FirstNodeID1,
+                   CORBA::Long SecondNodeID1,
+                   CORBA::Long LastNodeID1,
+                   CORBA::Long FirstNodeID2,
+                   CORBA::Long SecondNodeID2,
+                   CORBA::Long LastNodeID2,
+                   CORBA::Boolean CreatePolygons,
+                   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) throw (SALOME::SALOME_Exception);
+    SewConformFreeBorders(CORBA::Long FirstNodeID1,
+                          CORBA::Long SecondNodeID1,
+                          CORBA::Long LastNodeID1,
+                          CORBA::Long FirstNodeID2,
+                          CORBA::Long SecondNodeID2) throw (SALOME::SALOME_Exception);
   SMESH::SMESH_MeshEditor::Sew_Error
-  SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
-                  CORBA::Long SecondNodeIDOnFreeBorder,
-                  CORBA::Long LastNodeIDOnFreeBorder,
-                  CORBA::Long FirstNodeIDOnSide,
-                  CORBA::Long LastNodeIDOnSide,
-                  CORBA::Boolean CreatePolygons,
-                  CORBA::Boolean CreatePolyedrs) throw (SALOME::SALOME_Exception);
+    SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
+                    CORBA::Long SecondNodeIDOnFreeBorder,
+                    CORBA::Long LastNodeIDOnFreeBorder,
+                    CORBA::Long FirstNodeIDOnSide,
+                    CORBA::Long LastNodeIDOnSide,
+                    CORBA::Boolean CreatePolygons,
+                    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) throw (SALOME::SALOME_Exception);
+    SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
+                    const SMESH::long_array& IDsOfSide2Elements,
+                    CORBA::Long NodeID1OfSide1ToMerge,
+                    CORBA::Long NodeID1OfSide2ToMerge,
+                    CORBA::Long NodeID2OfSide1ToMerge,
+                    CORBA::Long NodeID2OfSide2ToMerge) throw (SALOME::SALOME_Exception);
 
   /*!
    * Set new nodes for given element.
@@ -816,7 +840,7 @@ public:
                       const char* groupName,
                       const SMESH::double_array& theNodesCoords,
                       SMESH::array_of_long_array_out GroupsOfNodes)
-  throw (SALOME::SALOME_Exception);
+    throw (SALOME::SALOME_Exception);
 
   /*!
    * \brief Generated skin mesh (containing 2D cells) from 3D mesh
@@ -844,7 +868,28 @@ public:
                                    SMESH::SMESH_Group_out group)
     throw (SALOME::SALOME_Exception);
 
-private: //!< private methods
+  /*!
+   * \brief Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+   *        the initial mesh. Positions of new nodes are found by cutting the mesh by the
+   *        plane passing through pairs of points specified by each PolySegment structure.
+   *        If there are several paths connecting a pair of points, the shortest path is
+   *        selected by the module. Position of the cutting plane is defined by the two
+   *        points and an optional vector lying on the plane specified by a PolySegment.
+   *        By default the vector is defined by Mesh module as following. A middle point
+   *        of the two given points is computed. The middle point is projected to the mesh.
+   *        The vector goes from the middle point to the projection point. In case of planar
+   *        mesh, the vector is normal to the mesh.
+   *  \param [inout] segments - PolySegment's defining positions of cutting planes.
+   *        Return the used vector and position of the middle point.
+   *  \param [in] groupName - optional name of a group where created mesh segments will
+   *        be added.
+   */
+  void MakePolyLine(SMESH::ListOfPolySegments& segments,
+                    const char*               groupName)
+    throw (SALOME::SALOME_Exception);
+
+
+ private: //!< private methods
 
   ::SMESH_MeshEditor& getEditor();
 
index 423dfb0679fbdd79e0b4bc58af7c1d4ba7d27e4b..986ee3c06ad4ffa93801c99a3f1b5fd76c453842 100644 (file)
@@ -27,6 +27,7 @@
 #define __SMESH_MeshPartDS_HXX__
 
 #include "SMESHDS_Mesh.hxx"
+#include "SMESH_TypeDefs.hxx"
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
@@ -55,6 +56,8 @@ public:
   virtual SMDS_ElemIteratorPtr elementGeomIterator(SMDSAbs_GeometryType type) const;
   virtual SMDS_ElemIteratorPtr elementEntityIterator(SMDSAbs_EntityType type) const;
 
+  virtual const SMDS_MeshElement *FindElement(int IDelem) const;
+
 private:
   TIDSortedElemSet _elements[ SMDSAbs_NbElementTypes ];
   SMESHDS_Mesh*    _meshDS;
@@ -65,6 +68,17 @@ private:
   {
     void Add(const SMDS_MeshElement* e) { SMDS_MeshInfo::addWithPoly( e ); }
   };
+  /*!
+   * \brief Element holing its ID only
+   */
+  struct TElemID : public SMDS_MeshElement
+  {
+    TElemID(int ID) : SMDS_MeshElement( ID ) {}
+    virtual SMDSAbs_ElementType  GetType() const { return SMDSAbs_All; }
+    virtual SMDSAbs_EntityType   GetEntityType() const { return SMDSEntity_Last; }
+    virtual SMDSAbs_GeometryType GetGeomType() const { return SMDSGeom_NONE; }
+    virtual vtkIdType            GetVtkType() const { return -1; }
+  };
 };
 
 #endif
index c4393b108a48d5ef6cc3aa30db764a06704f540a..76fe5989c8a613e24bedbff5489702ad24851041 100644 (file)
@@ -5588,10 +5588,10 @@ TopAbs_ShapeEnum shapeTypeByDim(const int theDim)
 
 //-----------------------------------------------------------------------------
 /*!
- * \brief Internal structure used to find concurent submeshes
+ * \brief Internal structure used to find concurrent submeshes
  *
- * It represents a pair < submesh, concurent dimension >, where
- * 'concurrent dimension' is dimension of shape where the submesh can concurent
+ * It represents a pair < submesh, concurrent dimension >, where
+ * 'concurrent dimension' is dimension of shape where the submesh can concurrent
  *  with another submesh. In other words, it is dimension of a hypothesis assigned
  *  to submesh.
  */
@@ -5983,7 +5983,7 @@ TListOfListOfInt SMESH_Mesh_i::findConcurrentSubMeshes()
     
     removeDimHyps(dimHypListArr);
     
-    // now, minimise the number of concurrent groups
+    // now, minimize the number of concurrent groups
     // Here we assume that lists of submeshes can have same submesh
     // in case of multi-dimension algorithms, as result
     //  list with common submesh has to be united into one list
@@ -6080,7 +6080,7 @@ void SMESH_Mesh_i::convertMeshOrder (const TListOfListOfInt&     theIdsOrder,
       continue;
     if ( theIsDump )
       aPythonDump << "[ ";
-    // convert shape indeces into interfaces
+    // convert shape indices into interfaces
     SMESH::submesh_array_var aResSubSet = new SMESH::submesh_array();
     aResSubSet->length(aSubOrder.size());
     TListOfInt::const_iterator subIt = aSubOrder.begin();
@@ -6122,6 +6122,7 @@ SMESH_MeshPartDS::SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr meshPart):
   SMESH::SMESH_Mesh_var mesh = meshPart->GetMesh();
   SMESH_Mesh_i*       mesh_i = SMESH::DownCast<SMESH_Mesh_i*>( mesh );
 
+  mesh_i->Load();
   _meshDS = mesh_i->GetImpl().GetMeshDS();
 
   SetPersistentId( _meshDS->GetPersistentId() );
@@ -6191,6 +6192,21 @@ SMESH_MeshPartDS::SMESH_MeshPartDS(const std::list< const SMDS_MeshElement* > &
   myInfo = tmpInfo;
 }
 // -------------------------------------------------------------------------------------
+const SMDS_MeshElement * SMESH_MeshPartDS::FindElement(int IDelem) const
+{
+  if ( _meshDS ) return _meshDS->FindElement( IDelem );
+
+  TElemID elem( IDelem );
+  for ( int iType = SMDSAbs_Edge; iType < SMDSAbs_NbElementTypes; ++iType )
+    if ( !_elements[ iType ].empty() )
+    {
+      TIDSortedElemSet::const_iterator it = _elements[ iType ].find( &elem );
+      if ( it != _elements[ iType ].end() )
+        return *it;
+    }
+  return 0;
+}
+// -------------------------------------------------------------------------------------
 SMDS_ElemIteratorPtr SMESH_MeshPartDS::elementGeomIterator(SMDSAbs_GeometryType geomType) const
 {
   if ( _meshDS ) return _meshDS->elementGeomIterator( geomType );
index 3d8980ff9a3751a9efc1b144ceb9b4ba705bcf1d..c7e753d89c3d5f9cda95af08eb166be2aa8b14c6 100644 (file)
@@ -287,10 +287,12 @@ namespace
  */
 //================================================================================
 
-void SMESH_PreMeshInfo::hdf2meshInfo( const std::string& name,
-                                      HDFgroup*          hdfGroup)
+void SMESH_PreMeshInfo::hdf2meshInfo( const std::string&              name,
+                                      HDFgroup*                       hdfGroup,
+                                      const TColStd_MapOfAsciiString& allHdfNames)
 {
-  if ( hdfGroup->ExistInternalObject( name.c_str()) )
+  //if ( hdfGroup->ExistInternalObject( name.c_str()) ) PAL23514
+  if ( allHdfNames.Contains( name.c_str() ))
   {
     HDFdataset* dataset = new HDFdataset( name.c_str(), hdfGroup );
     dataset->OpenOnDisk();
@@ -419,7 +421,17 @@ bool SMESH_PreMeshInfo::readPreInfoFromHDF()
     HDFgroup* infoHdfGroup = new HDFgroup( hdfGroupName, aFile );
     infoHdfGroup->OpenOnDisk();
 
-    _mesh->changePreMeshInfo()->hdf2meshInfo( "Mesh", infoHdfGroup );
+    // PAL23514: get all names from the HDFgroup to avoid iteration on its contents
+    // within aGroup->ExistInternalObject( name )
+    TColStd_MapOfAsciiString mapOfNames;
+    {
+      std::vector< std::string > subNames;
+      infoHdfGroup->GetAllObjects( subNames );
+      for ( size_t iN = 0; iN < subNames.size(); ++iN )
+        mapOfNames.Add( subNames[ iN ].c_str() );
+    }
+
+    _mesh->changePreMeshInfo()->hdf2meshInfo( "Mesh", infoHdfGroup, mapOfNames );
 
     // read SMESH_PreMeshInfo of groups
     map<int, SMESH::SMESH_GroupBase_ptr>::const_iterator i2group = _mesh->_mapGroups.begin();
@@ -432,7 +444,7 @@ bool SMESH_PreMeshInfo::readPreInfoFromHDF()
         if ( SMESHDS_GroupBase* group = group_i->GetGroupDS() )
         {
           const std::string name = group->GetStoreName();
-          group_i->changePreMeshInfo()->hdf2meshInfo( name, infoHdfGroup );
+          group_i->changePreMeshInfo()->hdf2meshInfo( name, infoHdfGroup, mapOfNames );
         }
       }
     }
@@ -444,7 +456,9 @@ bool SMESH_PreMeshInfo::readPreInfoFromHDF()
       if ( SMESH_subMesh_i* sm = SMESH::DownCast<SMESH_subMesh_i*>( id2sm->second ))
       {
         sm->changePreMeshInfo() = newInstance();
-        sm->changePreMeshInfo()->hdf2meshInfo( SMESH_Comment( sm->GetId()), infoHdfGroup );
+        sm->changePreMeshInfo()->hdf2meshInfo( SMESH_Comment( sm->GetId()),
+                                               infoHdfGroup,
+                                               mapOfNames );
       }
     }
   }
index e0469a9786b261bc9401611c88e5eb3bf53dca63..62492c7d455d3b0161e27bbf97270c00e33e05d4 100644 (file)
@@ -33,6 +33,7 @@
 #include CORBA_SERVER_HEADER(SALOMEDS)
 
 #include <TopAbs_ShapeEnum.hxx>
+#include <TColStd_MapOfAsciiString.hxx>
 
 class DriverMED_R_SMESHDS_Mesh;
 class HDFfile;
@@ -101,7 +102,9 @@ private:
 
   // reading from the new study, for which SaveToFile() was called
   bool readPreInfoFromHDF();
-  void hdf2meshInfo( const std::string& dataSetName, HDFgroup* infoHdfGroup );
+  void hdf2meshInfo( const std::string&              dataSetName,
+                     HDFgroup*                       infoHdfGroup,
+                     const TColStd_MapOfAsciiString& allHdfNames);
 
   // reading from the old study, for which SaveToFile() was not called
   bool readMeshInfo();
index b8a4707e33ade879b411df1acbe2bed645f4a1b3..65a12f5c3c8c141017538c6f2d88cba7fff63ce4 100644 (file)
@@ -21,7 +21,7 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-#  SMESH SMESH_SWIG : binding of C++ implementaion with Python
+#  SMESH SMESH_SWIG : binding of C++ implementation with Python
 #  File   : SMESH_blocks.py
 #  Author : Julia DOROVSKIKH
 #  Module : SMESH
index 4fef40fab884171b624d58acd2f477d1db1fa34e..29e0fccf368299dc8a0e38b5d606eef99f5e317f 100644 (file)
@@ -953,6 +953,10 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     ## doc string of the method
     #  @internal
     docHelper  = "Creates prism 3D algorithm for volumes"
+    ## flag pointing whether this algorithm should be used by default in dynamic method
+    #  of smeshBuilder.Mesh class
+    #  @internal
+    isDefault  = True
 
     ## Private constructor.
     #  @param mesh parent mesh object algorithm is assigned to
@@ -979,7 +983,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     ## Return 3D hypothesis holding the 1D one
     def Get3DHypothesis(self):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         return self.distribHyp
 
@@ -987,7 +991,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  hypothesis. Returns the created hypothesis
     def OwnHypothesis(self, hypType, args=[], so="libStdMeshersEngine.so"):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         if not self.nbLayers is None:
             self.mesh.GetMesh().RemoveHypothesis( self.geom, self.nbLayers )
@@ -1008,7 +1012,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #                     the same parameters, else (default) - creates a new one
     def NumberOfLayers(self, n, UseExisting=0):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         self.mesh.RemoveHypothesis( self.distribHyp, self.geom )
         from salome.smesh.smeshBuilder import IsEqual
@@ -1024,7 +1028,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param p the precision of rounding
     def LocalLength(self, l, p=1e-07):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         hyp = self.OwnHypothesis("LocalLength", [l,p])
         hyp.SetLength(l)
@@ -1037,7 +1041,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param s the scale factor (optional)
     def NumberOfSegments(self, n, s=[]):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         if not s:
             hyp = self.OwnHypothesis("NumberOfSegments", [n])
@@ -1054,7 +1058,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param end    the length of the last  segment
     def Arithmetic1D(self, start, end ):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         hyp = self.OwnHypothesis("Arithmetic1D", [start, end])
         hyp.SetLength(start, 1)
@@ -1068,7 +1072,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param ratio  the common ratio of the geometric progression
     def GeometricProgression(self, start, ratio ):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         hyp = self.OwnHypothesis("GeometricProgression", [start, ratio])
         hyp.SetStartLength( start )
@@ -1081,7 +1085,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param end   for the length of the last  segment
     def StartEndLength(self, start, end):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         hyp = self.OwnHypothesis("StartEndLength", [start, end])
         hyp.SetLength(start, 1)
@@ -1093,7 +1097,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param fineness defines the quality of the mesh within the range [0-1]
     def AutomaticLength(self, fineness=0):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorith doesn't support any hyposesis"
+            print "Prism_3D algorithm doesn't support any hypothesis"
             return None
         hyp = self.OwnHypothesis("AutomaticLength")
         hyp.SetFineness( fineness )
index bd5cde5a7e52e48e74bdb1a587b63d2788d79430..6a1a4e1dffe12512924952abfda148165ba284fd 100644 (file)
@@ -966,6 +966,8 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
             functor = aFilterMgr.CreateLength()
         elif theCriterion == FT_Length2D:
             functor = aFilterMgr.CreateLength2D()
+        elif theCriterion == FT_Deflection2D:
+            functor = aFilterMgr.CreateDeflection2D()
         elif theCriterion == FT_NodeConnectivityNumber:
             functor = aFilterMgr.CreateNodeConnectivityNumber()
         elif theCriterion == FT_BallDiameter:
@@ -2311,10 +2313,10 @@ class Mesh:
         return self.editor.MakeIDSource(ids, elemType)
 
 
-    # Get informations about mesh contents:
+    # Get information about mesh contents:
     # ------------------------------------
 
-    ## Get the mesh stattistic
+    ## Get the mesh statistic
     #  @return dictionary type element - count of elements
     #  @ingroup l1_meshinfo
     def GetMeshInfo(self, obj = None):
@@ -3127,6 +3129,16 @@ class Mesh:
     def GetPointState(self, x, y, z):
         return self.editor.GetPointState(x, y, z)
 
+    ## Check if a 2D mesh is manifold
+    #  @ingroup l1_controls
+    def IsManifold(self):
+        return self.editor.IsManifold()
+
+    ## Check if orientation of 2D elements is coherent
+    #  @ingroup l1_controls
+    def IsCoherentOrientation2D(self):
+        return self.editor.IsCoherentOrientation2D()
+
     ## Find the node closest to a point and moves it to a point location
     #  @param x  the X coordinate of a point
     #  @param y  the Y coordinate of a point
@@ -3247,7 +3259,7 @@ class Mesh:
     #          Type SMESH.FunctorType._items in the Python Console to see all items.
     #          Note that not all items correspond to numerical functors.
     #  @param MaxAngle      is the maximum angle between element normals at which the fusion
-    #          is still performed; theMaxAngle is mesured in radians.
+    #          is still performed; theMaxAngle is measured in radians.
     #          Also it could be a name of variable which defines angle in degrees.
     #  @return TRUE in case of success, FALSE otherwise.
     #  @ingroup l2_modif_unitetri
@@ -3266,7 +3278,7 @@ class Mesh:
     #          Type SMESH.FunctorType._items in the Python Console to see all items.
     #          Note that not all items correspond to numerical functors.
     #  @param MaxAngle   a max angle between element normals at which the fusion
-    #          is still performed; theMaxAngle is mesured in radians.
+    #          is still performed; theMaxAngle is measured in radians.
     #  @return TRUE in case of success, FALSE otherwise.
     #  @ingroup l2_modif_unitetri
     def TriToQuadObject (self, theObject, theCriterion, MaxAngle):
@@ -3278,7 +3290,7 @@ class Mesh:
         return self.editor.TriToQuadObject(theObject, Functor, MaxAngle)
 
     ## Split quadrangles into triangles.
-    #  @param IDsOfElements the faces to be splitted.
+    #  @param IDsOfElements the faces to be split.
     #  @param theCriterion is a numerical functor, in terms of enum SMESH.FunctorType, used to
     #         choose a diagonal for splitting. If @a theCriterion is None, which is a default
     #         value, then quadrangles will be split by the smallest diagonal.
@@ -3314,7 +3326,7 @@ class Mesh:
 
     ## Split each of given quadrangles into 4 triangles. A node is added at the center of
     #  a quadrangle.
-    #  @param theElements the faces to be splitted. This can be either mesh, sub-mesh,
+    #  @param theElements the faces to be split. This can be either mesh, sub-mesh,
     #         group or a list of face IDs. By default all quadrangles are split
     #  @ingroup l2_modif_cutquadr
     def QuadTo4Tri (self, theElements=[]):
@@ -3329,7 +3341,7 @@ class Mesh:
         return self.editor.QuadTo4Tri( theElements )
 
     ## Split quadrangles into triangles.
-    #  @param IDsOfElements the faces to be splitted
+    #  @param IDsOfElements the faces to be split
     #  @param Diag13        is used to choose a diagonal for splitting.
     #  @return TRUE in case of success, FALSE otherwise.
     #  @ingroup l2_modif_cutquadr
@@ -3350,7 +3362,7 @@ class Mesh:
         return self.editor.SplitQuadObject(theObject, Diag13)
 
     ## Find a better splitting of the given quadrangle.
-    #  @param IDOfQuad   the ID of the quadrangle to be splitted.
+    #  @param IDOfQuad   the ID of the quadrangle to be split.
     #  @param theCriterion  is a numerical functor, in terms of enum SMESH.FunctorType, used to
     #         choose a diagonal for splitting.
     #         Type SMESH.FunctorType._items in the Python Console to see all items.
@@ -4629,6 +4641,24 @@ class Mesh:
     def MergeEqualElements(self):
         self.editor.MergeEqualElements()
 
+    ## Returns all or only closed free borders
+    #  @return list of SMESH.FreeBorder's
+    #  @ingroup l2_modif_trsf
+    def FindFreeBorders(self, ClosedOnly=True):
+        return self.editor.FindFreeBorders( ClosedOnly )
+
+    ## Fill with 2D elements a hole defined by a SMESH.FreeBorder.
+    #  @param FreeBorder either a SMESH.FreeBorder or a list on node IDs. These nodes
+    #         must describe all sequential nodes of the hole border. The first and the last
+    #         nodes must be the same. Use FindFreeBorders() to get nodes of holes.
+    #  @ingroup l2_modif_trsf
+    def FillHole(self, holeNodes):
+        if holeNodes and isinstance( holeNodes, list ) and isinstance( holeNodes[0], int ):
+            holeNodes = SMESH.FreeBorder(nodeIDs=holeNodes)
+        if not isinstance( holeNodes, SMESH.FreeBorder ):
+            raise TypeError, "holeNodes must be either SMESH.FreeBorder or list of integer and not %s" % holeNodes
+        self.editor.FillHole( holeNodes )
+
     ## Return groups of FreeBorder's coincident within the given tolerance.
     #  @param tolerance the tolerance. If the tolerance <= 0.0 then one tenth of an average
     #         size of elements adjacent to free borders being compared is used.
@@ -4944,7 +4974,40 @@ class Mesh:
     def CreateHoleSkin(self, radius, theShape, groupName, theNodesCoords):
         return self.editor.CreateHoleSkin( radius, theShape, groupName, theNodesCoords )
 
-    def _getFunctor(self, funcType ):
+    ## Create a polyline consisting of 1D mesh elements each lying on a 2D element of
+    #  the initial mesh. Positions of new nodes are found by cutting the mesh by the
+    #  plane passing through pairs of points specified by each PolySegment structure.
+    #  If there are several paths connecting a pair of points, the shortest path is
+    #  selected by the module. Position of the cutting plane is defined by the two
+    #  points and an optional vector lying on the plane specified by a PolySegment.
+    #  By default the vector is defined by Mesh module as following. A middle point
+    #  of the two given points is computed. The middle point is projected to the mesh.
+    #  The vector goes from the middle point to the projection point. In case of planar
+    #  mesh, the vector is normal to the mesh.
+    #  @param segments - PolySegment's defining positions of cutting planes.
+    #         Return the used vector which goes from the middle point to its projection.
+    #  @param groupName - optional name of a group where created mesh segments will
+    #         be added.
+    #  @ingroup l2_modif_duplicat
+    def MakePolyLine(self, segments, groupName='', isPreview=False ):
+        editor = self.editor
+        if isPreview:
+            editor = self.mesh.GetMeshEditPreviewer()
+        segmentsRes = editor.MakePolyLine( segments, groupName )
+        for i, seg in enumerate( segmentsRes ):
+            segments[i].vector = seg.vector
+        if isPreview:
+            return editor.GetPreviewData()
+        return None        
+
+    ## Return a cached numerical functor by its type.
+    #  @param theCriterion functor type - an item of SMESH.FunctorType enumeration.
+    #          Type SMESH.FunctorType._items in the Python Console to see all items.
+    #          Note that not all items correspond to numerical functors.
+    #  @return SMESH_NumericalFunctor. The functor is already initialized
+    #          with a mesh
+    #  @ingroup l1_measurements
+    def GetFunctor(self, funcType ):
         fn = self.functors[ funcType._v ]
         if not fn:
             fn = self.smeshpyD.GetFunctor(funcType)
@@ -4960,7 +5023,7 @@ class Mesh:
     #  @return the functor value or zero in case of invalid arguments
     #  @ingroup l1_measurements
     def FunctorValue(self, funcType, elemId, isElem=True):
-        fn = self._getFunctor( funcType )
+        fn = self.GetFunctor( funcType )
         if fn.GetElementType() == self.GetElementType(elemId, isElem):
             val = fn.GetValue(elemId)
         else:
@@ -5066,7 +5129,7 @@ class Mesh:
             unRegister.set( meshPart )
         if isinstance( meshPart, Mesh ):
             meshPart = meshPart.mesh
-        fun = self._getFunctor( funType )
+        fun = self.GetFunctor( funType )
         if fun:
             if meshPart:
                 if hasattr( meshPart, "SetMesh" ):
@@ -5265,7 +5328,7 @@ class algoCreator:
         if not algoType:
             algoType = self.defaultAlgoType
         if not algoType and self.algoTypeToClass:
-            algoType = self.algoTypeToClass.keys()[0]
+            algoType = sorted( self.algoTypeToClass.keys() )[0]
         if self.algoTypeToClass.has_key( algoType ):
             #print "Create algo",algoType
             return self.algoTypeToClass[ algoType ]( self.mesh, shape )
index 3690f76d8f57ace4a10910a25f3ed29a06b83dd7..e5b5a3d6a3ee529fa2a4b0c3c8ab1025f137fcb1 100644 (file)
@@ -58,7 +58,7 @@ import SMESH, StdMeshers
 #  @ingroup l2_algorithms
 class Mesh_Algorithm:
     
-    ## Private constuctor
+    ## Private constructor
     def __init__(self):
         self.mesh = None
         self.geom = None
index 0a111304ec6e22945118c471f05f8211e9701878..e5a7aeeb068b838349bca1e1a913d45b8a99ec4b 100644 (file)
@@ -24,6 +24,7 @@
 //
 #include "libSMESH_Swig.h"
 
+#include <SVTK_Selector.h>
 
 #include <SMESHGUI.h>
 #include <SMESHGUI_Utils.h>
@@ -820,6 +821,25 @@ void SMESH_Swig::EraseActor( const char* Mesh_Entry, const bool allViewers )
   ProcessVoidEvent(new TEvent(Mesh_Entry, allViewers));
 }
 
+void SMESH_Swig::UpdateActor( const char* Mesh_Entry ) {
+  class TEvent: public SALOME_Event
+  {
+  private:
+    const char* _entry;
+  public:
+    TEvent( const char* Mesh_Entry ) {
+      _entry = Mesh_Entry;
+    }
+    virtual void Execute() {
+      Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject
+        ( _entry, "SMESH", "" );
+      SMESH::Update( anIO, true );
+    }
+  };
+
+  ProcessVoidEvent( new TEvent(Mesh_Entry) );
+}
+
 void SMESH_Swig::SetName(const char* theEntry,
                          const char* theName)
 {
@@ -962,6 +982,78 @@ void SMESH_Swig::select( const char* id, int id1, bool append ) {
   ProcessVoidEvent( new TSelectListEvent( id, ids, append ) );
 }
 
+/*!
+  \brief Helper class for selection edges of cell event
+*/
+class TSelectListOfPairEvent: public SALOME_Event
+{
+  const char*                        myId;
+  std::vector<std::pair<int, int> >  myIdsList;
+  bool                               myIsAppend;
+
+public:
+  TSelectListOfPairEvent(const char* id, std::vector<std::pair<int, int> > ids, bool append) :
+    myId(id),
+    myIdsList(ids),
+    myIsAppend(append)
+  {}
+  virtual void Execute()
+  {
+    
+    LightApp_SelectionMgr* selMgr = 0;
+    SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
+    if( anApp )
+      selMgr = dynamic_cast<LightApp_SelectionMgr*>( anApp->selectionMgr() );
+
+    if( !selMgr )
+      return;
+    
+    selMgr->clearFilters();
+
+    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
+    if(!aViewWindow)
+      return;
+
+    SMESH_Actor* anActor = SMESH::FindActorByEntry( myId );
+    
+    if (!anActor || !anActor->hasIO())
+      return;
+    
+    Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
+    SALOME_ListIO aList;
+    aList.Append(anIO);
+    selMgr->setSelectedObjects(aList, false);
+
+    if ( aViewWindow->SelectionMode() !=  EdgeOfCellSelection ) {
+      return;
+    }
+        
+    SVTK_IndexedMapOfIds aMap;
+    std::vector<std::pair<int, int> >::const_iterator anIter;
+    for (anIter = myIdsList.begin(); anIter != myIdsList.end(); ++anIter) {
+      std::vector<int> aCompositeId;
+      aCompositeId.push_back((*anIter).first);
+      aCompositeId.push_back((*anIter).second);
+      aMap.Add(aCompositeId);
+    }
+
+    // Set new selection
+    SVTK_Selector* aSelector  = aViewWindow->GetSelector();
+    aSelector->AddOrRemoveCompositeIndex(anIO, aMap, myIsAppend);
+    aViewWindow->highlight( anIO, true, true );
+    aViewWindow->GetInteractor()->onEmitSelectionChanged();
+  }
+};
+
+/*!
+  \brief Select the elements on the mesh, sub-mesh or group.
+  \param id object entry
+  \param ids list of the element ids
+  \param mode selection mode
+*/
+void SMESH_Swig::select( const char* id, std::vector<std::pair<int,int> > ids, bool append ) {
+  ProcessVoidEvent( new TSelectListOfPairEvent( id, ids, append ) );
+}
 
 class TGetSelectionModeEvent : public SALOME_Event
 {
@@ -1069,3 +1161,46 @@ public:
 std::vector<int> SMESH_Swig::getSelected( const char* Mesh_Entry ) {
   return ProcessEvent( new TGetSelectedEvent(Mesh_Entry) );
 }
+
+class TGetSelectedPairEvent : public SALOME_Event
+{
+public:
+  typedef std::vector<std::pair<int, int> > TResult;
+  TResult myResult;
+  const char* myId;
+  
+  TGetSelectedPairEvent( const char* id) : 
+    myResult( std::vector<std::pair<int,int> >() ),
+    myId(id)
+  {}
+  
+  virtual void Execute()
+  {
+    SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
+    if( !aViewWindow )
+      return;
+
+    if(aViewWindow->SelectionMode() != EdgeOfCellSelection )
+      return;
+
+    SVTK_Selector* aSelector  = aViewWindow->GetSelector();    
+    if( !aSelector )
+      return;
+
+    SMESH_Actor* anActor = SMESH::FindActorByEntry( myId );
+    
+    if ( !anActor || !anActor->hasIO() )
+      return;
+
+    SVTK_IndexedMapOfIds aMapIndex;
+    aSelector->GetCompositeIndex(anActor->getIO(),aMapIndex);
+
+    for( int i = 1; i <= aMapIndex.Extent(); i++ )
+      myResult.push_back( std::make_pair<int,int>( (int)aMapIndex( i )[0], (int)aMapIndex( i )[1]) );
+  }
+};
+
+std::vector<std::pair<int,int> > SMESH_Swig::getSelectedEdgeOfCell( const char* Mesh_Entry ) {
+  return ProcessEvent( new TGetSelectedPairEvent(Mesh_Entry) );
+}
+
index 5522e95a219589618616afe3caf3ba781a8f6f43..931614c1ef0082a5216bb505475e78dfafc3e329 100644 (file)
@@ -40,6 +40,7 @@
 
 //std includes
 #include <vector>
+#include <utility>
 
 #include <SVTK_Selection.h>
 
@@ -119,6 +120,8 @@ public:
 
   void                       EraseActor( const char*, const bool allViewers = false );
 
+  void                       UpdateActor( const char* Mesh_Entry );
+
   /*!
    * \brief Set mesh icon according to compute status
     * \param Mesh_Entry - entry of a mesh
@@ -131,11 +134,13 @@ public:
 
   void setSelectionMode( SelectionMode selectionMode );
   std::vector<int> getSelected( const char* Mesh_Entry );
+  std::vector<std::pair<int, int> > getSelectedEdgeOfCell( const char* Mesh_Entry );
 
   // --------------------- for the test purposes -----------------------
   SelectionMode getSelectionMode();
   void select( const char *id, std::vector<int> ids, bool append = false );
   void select( const char *id, int id1, bool append = false );
+  void select( const char *id, std::vector<std::pair<int,int> >, bool apend = false );
 
 private:
   SALOMEDS::Study_var        myStudy;
index 339668801d7b8402ef44207d911f9e18c723c593..cb5cc2200bfb49789f0875b97a17e5fd0c593de4 100644 (file)
 
 %include "typemaps.i"
 %include "std_vector.i"
+%include "std_pair.i"
 
 namespace std {
+  
     %template(VectorInt) vector<int>;
+    %template() std::pair<int,int>;
+    %template(PairVector) std::vector<std::pair<int,int> >;
 };
 
 
@@ -128,6 +132,11 @@ class SMESH_Swig
 
   void CreateAndDisplayActor( const char* Mesh_Entry );
   void EraseActor( const char* Mesh_Entry, const bool allViewers = false );
+  void UpdateActor( const char* Mesh_Entry );
+
+  void setSelectionMode( SelectionMode selectionMode);
+  std::vector<int> getSelected( const char* Mesh_Entry );
+  std::vector<std::pair<int,int> > getSelectedEdgeOfCell( const char* Mesh_Entry );
 
   actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
   void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
@@ -139,5 +148,6 @@ class SMESH_Swig
   SelectionMode  getSelectionMode();
   void select( const char *id, std::vector<int> ids, bool append = false );
   void select( const char *id, int id1, bool append = false );
+  void select( const char *id, std::vector<std::pair<int,int> >, bool apend = false );
 
 };
index a06202a8e925228ae6311d830df07c65f16bdfa8..1dff2051523f9b99505cac09045bc8c84c922410 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Arithmetic1D.cxx
 //  Author : Damien COQUERET, OCC
 //  Module : SMESH
index 8705897525c16b78a1b2146e5cfe5444de22e87d..a95940dc4915e2479c0cc838565a7f8d88d482ac 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Arithmetic1D.hxx
 //  Author : Damien COQUERET, OCC
 //  Module : SMESH
index ad5f5263f42152e2100bbfa441c0470d718e2e70..4e49040c1f0787dd0dbe7787c10db7da03d1b5f6 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_AutomaticLength.cxx
 //  Author : Edward AGAPOV, OCC
 //  Module : SMESH
@@ -191,7 +191,7 @@ namespace {
       theTShapeToLengthMap.insert( make_pair( getTShape( edge ), L ));
     }
 
-    // Compute S0 - minimal segement length, is computed by the shortest EDGE
+    // Compute S0 - minimal segment length, is computed by the shortest EDGE
 
     /* image attached to PAL10237
 
index 2e30f8c106f4378a3ea97eb13a558444a3829839..d3da396c270b1880d20de641f2eedfae08bd2bbb 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_AutomaticLength.hxx
 //  Author : Edward AGAPOV, OCC
 //  Module : SMESH
index 002f209619b9847b091359a6cedebcc15757e721..62e590b62e4293f6ba6a621be5db9fb3a33b2b05 100644 (file)
@@ -2460,7 +2460,7 @@ namespace
       ip._faceIDs = e2fIt->second;
       ip._shapeID = edgeID;
 
-      // discretize the EGDE
+      // discretize the EDGE
       GCPnts_UniformDeflection discret( curve, deflection, true );
       if ( !discret.IsDone() || discret.NbPoints() < 2 )
         continue;
@@ -3388,7 +3388,7 @@ namespace
   }
   //================================================================================
   /*!
-   * \brief Classify a point by grid paremeters
+   * \brief Classify a point by grid parameters
    */
   bool Hexahedron::isOutParam(const double uvw[3]) const
   {
@@ -3588,7 +3588,7 @@ bool StdMeshers_Cartesian_3D::Compute(SMESH_Mesh &         theMesh,
       facesItersectors[i].Intersect();
 #endif
 
-    // put interesection points onto the GridLine's; this is done after intersection
+    // put intersection points onto the GridLine's; this is done after intersection
     // to avoid contention of facesItersectors for writing into the same GridLine
     // in case of parallel work of facesItersectors
     for ( size_t i = 0; i < facesItersectors.size(); ++i )
index d80d072a928b1ff93f40043b8857f985d95e910a..ebdbd9ee47e0603cc27b89b7f55d12677945b6bd 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_CompositeHexa_3D.cxx
 // Module    : SMESH
 // Created   : Tue Nov 25 11:04:59 2008
@@ -85,7 +85,7 @@ enum EAxes{ COO_X=1, COO_Y, COO_Z };
 
 //================================================================================
 /*!
- * \brief Convertor of a pair of integers to a sole index
+ * \brief Converter of a pair of integers to a sole index
  */
 struct _Indexer
 {
@@ -564,7 +564,7 @@ bool StdMeshers_CompositeHexa_3D::findBoxFaces( const TopoDS_Shape&    shape,
   if ( !fTop )
     return error(COMPERR_BAD_SHAPE);
 
-  // orient bottom egde of faces along axes of the unit box
+  // orient bottom edge of faces along axes of the unit box
   fBottom->ReverseEdges();
   fBack  ->ReverseEdges();
   fLeft  ->ReverseEdges();
@@ -577,7 +577,7 @@ bool StdMeshers_CompositeHexa_3D::findBoxFaces( const TopoDS_Shape&    shape,
  * \brief Computes hexahedral mesh on a box with composite sides
  *  \param aMesh - mesh to compute
  *  \param aShape - shape to mesh
- *  \retval bool - succes sign
+ *  \retval bool - success sign
  */
 //================================================================================
 
@@ -1158,7 +1158,7 @@ bool _QuadFaceGrid::LoadGrid( SMESH_Mesh& mesh )
 
   myGrid.resize( myIndexer.size() );
 
-  // strore nodes bound to the bottom edge
+  // store nodes bound to the bottom edge
   mySides.GetSide( Q_BOTTOM )->StoreNodes( mesh, myGrid, myReverse );
 
   // store the rest nodes row by row
index f1082b73f02278a6c628ec363925a5b74f2913b7..85cc6f2ec6c89f13064b897cff66f7fe5e0cb450 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_CompositeBlock_3D.hxx
 //  Module : SMESH
 //
index 9a66a56334c295bb11f540a4f5269b1fcdc3edfc..ee3858c26b53472351d82a11e8dde106ab5b870a 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_CompositeSegment_1D.cxx
 //  Module : SMESH
 //
index 5380a65f551ada40df36f02ec855545f1d43efbd..1a0129813037a17b80e60f8d22258d0f3061487a 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_CompositeSegment_1D.hxx
 //  Module : SMESH
 //
index 6181e8cbf2c9e742d2cdaaed52490592ecd45b0e..fa0fcb264a1a47fa4c732cb67a9d9508e48f2edc 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers_Deflection1D : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers_Deflection1D : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Deflection1D.cxx
 //  Module : SMESH
 //
index 664a4a094712833deb6fe53de35c317a667e279f..c1d2d741d7966689b96a3be4e3330ebc0420915b 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Deflection1D.hxx
 //  Module : SMESH
 //
index 7fb3956adfb85a8df5b99f57ecc881c46b548ac2..900723108e1d41e774dc5a156101165bc43bd0c6 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of point distribution algorithm
+//  SMESH StdMeshers : implementation of point distribution algorithm
 //  File   : StdMeshers_Distribution.cxx
 //  Author : Alexandre SOLOVYOV
 //  Module : SMESH
@@ -56,7 +56,6 @@ bool Function::value( const double, double& f ) const
       OCC_CATCH_SIGNALS;
       f = pow( 10., f );
     } catch(Standard_Failure) {
-      Handle(Standard_Failure) aFail = Standard_Failure::Caught();
       f = 0.0;
       ok = false;
     }
@@ -187,7 +186,6 @@ FunctionExpr::FunctionExpr( const char* str, const int conv )
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( ( Standard_CString )str );
   } catch(Standard_Failure) {
-    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     ok = false;
   }
 
@@ -220,7 +218,6 @@ bool FunctionExpr::value( const double t, double& f ) const
     OCC_CATCH_SIGNALS;
     f = myExpr->Expression()->Evaluate( myVars, myValues );
   } catch(Standard_Failure) {
-    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     f = 0.0;
     ok = false;
   }
index 5bcf68c2222d4fd3c0086d578bdab3279282f748..62682390d42edb04f10d1ffaf9dfc777c89510e1 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of point distribution algorithm
+//  SMESH StdMeshers : implementation of point distribution algorithm
 //  File   : StdMeshers_Distribution.hxx
 //  Author : Alexandre SOLOVYOV
 //  Module : SMESH
index e316cb11af7bee8039e66d0d8c10d8a935207fa6..254df4e1c2063d538d047ed2a4094d914ba0c542 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_FixedPoints1D.cxx
 //  Author : Damien COQUERET, OCC
 //  Module : SMESH
index 4855f03074fc8ad227b42f42616cfd3ac390107f..342b5c9d5316d4486763c3b856eea534c6a62ff8 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_FixedPoints1D.hxx
 //  Author : Damien COQUERET, OCC
 //  Module : SMESH
index 33b091783985e0b21ca881ca7a118ff52eed1511..87514e2c9aea69233a7ce1d742aa6fb9e7930a2f 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Geometric1D.cxx
 //  Module : SMESH
 //
index 1dc38b1e2443a9c9ef07d05db745f22393999826..4efc66101a7379bcfc60822a952c00a2756594ff 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Geometric1D.hxx
 //  Module : SMESH
 //
index 12ae7326fe23332323e1de39f919cb7ae1efed15..a32b65891b4552a5a867931658beefe3b322a184 100644 (file)
@@ -145,7 +145,7 @@ namespace
 
   //================================================================================
   /*!
-   * \brief Convertor of a pair of integers to a sole index
+   * \brief Converter of a pair of integers to a sole index
    */
   struct _Indexer
   {
@@ -156,7 +156,7 @@ namespace
   };
   //================================================================================
   /*!
-   * \brief Oriented convertor of a pair of integers to a sole index 
+   * \brief Oriented converter of a pair of integers to a sole index 
    */
   class _OrientedIndexer : public _Indexer
   {
@@ -588,7 +588,7 @@ namespace
                         const SMDS_MeshElement* cornerQuad,
                         const SMDS_MeshNode*    nCorner)
   {
-    // Find out size of block side mesured in nodes and by the way find two rows
+    // Find out size of block side measured in nodes and by the way find two rows
     // of nodes in two directions.
 
     int x, y, nbX, nbY;
index 335a36a788b8cea444ca57efa21dc221dca77efd..aa7b1c043afe64095f87a79f4e7b62d09b1b1815 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Hexa_3D.cxx
 //           Moved here from SMESH_Hexa_3D.cxx
 //  Author : Paul RASCLE, EDF
@@ -189,7 +189,7 @@ namespace
 
   //================================================================================
   /*!
-   * \brief Convertor of a pair of integers to a sole index
+   * \brief Converter of a pair of integers to a sole index
    */
   struct _Indexer
   {
index 8b50468b7c37625f48e238987b1709f2de9bc491..0548c3ff46c154219820ee40d5375aa9f0fb6d54 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Hexa_3D.hxx
 //           Moved here from SMESH_Hexa_3D.hxx
 //  Author : Paul RASCLE, EDF
index 0ee9c4b4130e3c4d3a657be6f6de35863f08739d..bf5128733638d46de93b96d07121fe3eb92f7ff6 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers_ImportSource1D : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers_ImportSource1D : implementation of SMESH idl descriptions
 //  File   : StdMeshers_ImportSource1D.cxx
 //  Module : SMESH
 //
index c4d40d00586a7abab27740c9dac0af4603dc485a..52329e514dd3b1d7f72e022300efc8c55ca89076 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_ImportSource1D.hxx
 //  Module : SMESH
 //
index 193448010e2ca3ae596a8d70a97d2678e8215c41..aeb105383cecebebb26ccae74670cf2a2a632df8 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Import_1D.cxx
 //  Module : SMESH
 //
@@ -211,7 +211,7 @@ namespace // INTERNAL STUFF
                                            "StdMeshers_Import_1D::_Listener") {}
 
   public:
-    // return poiter to a static listener
+    // return pointer to a static listener
     static _Listener* get() { static _Listener theListener; return &theListener; }
 
     static _ImportData* getImportData(const SMESH_Mesh* srcMesh, SMESH_Mesh* tgtMesh);
index 2c016630848dea419d60d36c62e71b0ff82b25c7..ffee0fe4c4f336b492f543b62b74065c07169b45 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  Module : SMESH
 //
 #ifndef _SMESH_Import_1D_HXX_
index 8cc97b6e017243dd4296e504c46d93fdd823b610..949bd3a9073214bc786d6affa7d1840c79e433c3 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Import_1D2D.cxx
 //  Module : SMESH
 //
index a260f1d2d7cd69104b5e465005ca4a79eb89208e..15d1adf67011e1433f28ad53890d809f0b5c397f 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  Module : SMESH
 //
 #ifndef _SMESH_Import_2D_HXX_
index 026d858ae7d0006b03f784608cc4eebc0c436db7..ce35e21b918b80aac7f4281a39eb95029665514c 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_LengthFromEdges.cxx
 //           Moved here from SMESH_LengthFromEdges.cxx
 //  Author : Paul RASCLE, EDF
index 1d210433cb4937eb4286ff890e4d477d79fdab91..14494eec282e502282c80b9263af3bd166037299 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_LengthFromEdges.hxx
 //           Moved here from SMESH_LengthFromEdges.hxx
 //  Author : Paul RASCLE, EDF
index d4ebdfb0afb94f1ac27522bbbc1af8f6ecf312a9..e5c09bd04026f68b3926abfc71abf1c46f8a5b32 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_LocalLength.cxx
 //           Moved here from SMESH_LocalLength.cxx
 //  Author : Paul RASCLE, EDF
index c6de5797be915781f04442db175dd1b1cb8b5312..76815141bd8bae5ec997561954e0adaca9d8db5b 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_LocalLength.hxx
 //           Moved here from SMESH_LocalLength.hxx
 //  Author : Paul RASCLE, EDF
index 972d4b12c04314e0fdf18256625d2a0da1cc0f40..196dbe7daf0fe38a41e2c5fcb0ae0619158e8163 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MEFISTO_2D.cxx
 //           Moved here from SMESH_MEFISTO_2D.cxx
 //  Author : Paul RASCLE, EDF
index 3c9d69b9be48295a404510ff9ee1812a6a5d9048..ba272fd3148d064233cf2afee882e6abed8ee778 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MEFISTO_2D.hxx
 //           Moved here from SMESH_MEFISTO_2D.hxx
 //  Author : Paul RASCLE, EDF
index 513536da152b8d91226be22ecd21c46d0954a8bf..5e423c4b5f5ee463b9b6fbbc69af074b9b9a1dcb 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MaxElementArea.cxx
 //           Moved here from SMESH_MaxElementArea.cxx
 //  Author : Paul RASCLE, EDF
index 187c514c1d97f382ebb038f443abdf6fe2ad6a2e..66139b17ce5c421a3561e90d94f6870c91a4f397 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MaxElementArea.hxx
 //           Moved here from SMESH_MaxElementArea.hxx
 //  Author : Paul RASCLE, EDF
index 7cdb3e488a6b9497011a9f351c037a68e0e284e3..2ded219bbdcca3c44b874eaa1d51b46248699a9d 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MaxElementVolume.cxx
 //           Moved here from SMESH_MaxElementVolume.cxx
 //  Author : Paul RASCLE, EDF
index 88d0218c9cbd2b7e4f5083c53e6e5db87764f3c4..291385f4d23e8ec19c27f701c6903da7a5106437 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MaxElementVolume.hxx
 //           Moved here from SMESH_MaxElementVolume.hxx
 //  Author : Paul RASCLE, EDF
index a5774bbc7e17516b84ba912f2de133eed84b5769..b8ca75232a2b732f12a47ceb4b43bb3cf4f734c0 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MaxLength.cxx
 //  Module : SMESH
 //
index 1024d6af5c6458a46cb0cc672e71b6b119167a65..f9a6ab2ad55b2e451b6751b0d96d37d9cf273e54 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_MaxLength.hxx
 //  Module : SMESH
 //
index a3ab8278d5e10f65ee0999b6b8d1ac210ce6f499..301fd8ba3a41d8e7d2712286d686e633862a3332 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_NotConformAllowed.cxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
index 79c4d021009ce41c632ff37512e9f0a27915c2a7..012eccfbada05c66b3e41d81f9af420c29bd3cc0 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_NotConformAllowed.hxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
index 927e96d02ab10ac89622854ab2d5ea09a4c4d350..fc8da4162a1618b2844191f981091f90394ce84c 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_NumberOfSegments.cxx
 //           Moved here from SMESH_NumberOfSegments.cxx
 //  Author : Paul RASCLE, EDF
@@ -235,7 +235,6 @@ void StdMeshers_NumberOfSegments::SetTableFunction(const vector<double>& table)
         val = pow( 10.0, val );
       }
       catch(Standard_Failure) {
-        Handle(Standard_Failure) aFail = Standard_Failure::Caught();
         throw SALOME_Exception( LOCALIZED( "invalid value"));
         return;
       }
@@ -330,7 +329,6 @@ bool process( const TCollection_AsciiString& str, int convMode,
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( str.ToCString() );
   } catch(Standard_Failure) {
-    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     parsed_ok = false;
   }
 
index 459c286a19e6a36252c1f9c3ce38fc39ccb40613..a85308bbfae94d1708e586547b46992cfd458263 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_NumberOfSegments.hxx
 //           Moved here from SMESH_NumberOfSegments.hxx
 //  Author : Paul RASCLE, EDF
index b6fc7449da78bbdc18c2a44634fed2badc2e620d..0223a7a074cb9b2852fb11bc345510b3fbb8cc21 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers_Penta_3D implementaion of SMESH idl descriptions
+//  SMESH StdMeshers_Penta_3D implementation of SMESH idl descriptions
 //  File   : StdMeshers_Penta_3D.cxx
 //  Module : SMESH
 //
@@ -421,7 +421,7 @@ void StdMeshers_Penta_3D::MakeNodes()
       aZ=(double)i/(double)(myISize-1);
       aCoords.SetCoord(aX, aY, aZ);
       //
-      //   suporting shape ID
+      //   supporting shape ID
       ShapeSupportID(bIsUpperLayer, aBNSSID, aSSID);
       if (!myErrorStatus->IsOK()) {
         MESSAGE("StdMeshers_Penta_3D::MakeNodes() pb");
@@ -574,7 +574,7 @@ double StdMeshers_Penta_3D::SetHorizEdgeXYZ(const gp_XYZ&                  aBase
   SMESH_Block::GetFaceEdgesIDs( aFaceID, edgeVec );
   //
   int coord = SMESH_Block::GetCoordIndOnEdge( edgeVec[ BASE ] );
-  bool isForward = myBlock.IsForwadEdge( edgeVec[ BASE ] );
+  bool isForward = myBlock.IsForwardEdge( edgeVec[ BASE ] );
 
   double param = aBaseNodeParams.Coord( coord );
   if ( !isForward)
@@ -1543,7 +1543,7 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
         }
         // look for a not loaded node of the <face>
         bool found = false;
-        const SMDS_MeshNode* n3 = 0; // a node defferent from n1 and n2
+        const SMDS_MeshNode* n3 = 0; // a node different from n1 and n2
         eIt = face->nodesIterator() ;
         while ( !found && eIt->more() ) {
           node = static_cast<const SMDS_MeshNode*>( eIt->next() );
@@ -1609,11 +1609,11 @@ StdMeshers_SMESHBlock::StdMeshers_SMESHBlock()
 }
 
 //=======================================================================
-//function : IsForwadEdge
+//function : IsForwardEdge
 //purpose  : 
 //=======================================================================
 
-bool StdMeshers_SMESHBlock::IsForwadEdge(const int theEdgeID)
+bool StdMeshers_SMESHBlock::IsForwardEdge(const int theEdgeID)
 {
   int index = myTBlock.ShapeIndex( theEdgeID );
   if ( !myTBlock.IsEdgeID( theEdgeID ))
index 244101e12c1e4fe8a7c0e78219abcea1732f0f78..57f6ad447c7c9a19eee53a06cb91efe4b249447c 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Penta_3D.hxx
 //  Module : SMESH
 //
@@ -86,7 +86,7 @@ public:
 
   SMESH_Block & Block() { return myTBlock; }
 
-  bool IsForwadEdge(const int theEdgeID);
+  bool IsForwardEdge(const int theEdgeID);
 
   int  ErrorStatus() const;
 
index 4dd948be3fb334511a0ec02dc5ccc5890635eb59..9dde41365e3a12a664c5409d757d41c01b39da36 100644 (file)
@@ -3063,7 +3063,7 @@ bool StdMeshers_Prism_3D::IsApplicable(const TopoDS_Shape & shape, bool toCheckA
 
           if ( side._topEdge.IsNull() )
           {
-            // find vertical EDGEs --- EGDEs shared with neighbor side FACEs
+            // find vertical EDGEs --- EDGEs shared with neighbor side FACEs
             for ( int is2nd = 0; is2nd < 2 && isOK; ++is2nd ) // 2 adjacent neighbors
             {
               int di = is2nd ? 1 : -1;
@@ -3424,7 +3424,7 @@ bool StdMeshers_Prism_3D::initPrism(Prism_3D::TPrismTopo& thePrism,
   if ( !botSM ) // find a proper bottom
   {
     bool savedSetErrorToSM = mySetErrorToSM;
-    mySetErrorToSM = false; // ingore errors in initPrism()
+    mySetErrorToSM = false; // ignore errors in initPrism()
 
     // search among meshed FACEs
     list< SMESH_subMesh* >::iterator sm = meshedSubMesh.begin();
@@ -4959,7 +4959,7 @@ bool StdMeshers_Sweeper::ComputeNodesByTrsf( const double tol,
   const size_t zSrc = 0, zTgt = zSize-1;
   if ( zSize < 3 ) return true;
 
-  vector< vector< gp_XYZ > > intPntsOfLayer( zSize ); // node coodinates to compute
+  vector< vector< gp_XYZ > > intPntsOfLayer( zSize ); // node coordinates to compute
   // set coordinates of src and tgt nodes
   for ( size_t z = 0; z < intPntsOfLayer.size(); ++z )
     intPntsOfLayer[ z ].resize( myIntColumns.size() );
@@ -4973,7 +4973,7 @@ bool StdMeshers_Sweeper::ComputeNodesByTrsf( const double tol,
   prepareTopBotDelaunay();
   bool isErrorCorrectable = findDelaunayTriangles();
 
-  // compute coordinates of internal nodes by projecting (transfroming) src and tgt
+  // compute coordinates of internal nodes by projecting (transforming) src and tgt
   // nodes towards the central layer
 
   vector< NSProjUtils::TrsfFinder3D > trsfOfLayer( zSize );
index 62f0b9a14e83de74ec678e8d7f6e6ea08dcbb159..129a6e3e3d202d06c360084352d1a65baebc5544 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Prism_3D.hxx
 //  Module : SMESH
 //
index 924eba9bf39bba644c6748ec5d0093e8ed5c9b56..2070ef108b407d2d8760e8dd820ace1654ca6318 100644 (file)
@@ -479,7 +479,7 @@ namespace {
   }
 
   /*!
-   * \brief Convertor used in Delaunay constructor
+   * \brief Converter used in Delaunay constructor
    */
   struct SideVector2UVPtStructVec
   {
@@ -1253,7 +1253,7 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the
     const TopoDS_Shape& v1 = vMap1(i);
     if ( vMap2.Contains( v1 ))
     {
-      // find an egde sharing v1 and sharing at the same time another common vertex
+      // find an edge sharing v1 and sharing at the same time another common vertex
       PShapeIteratorPtr edgeIt = SMESH_MesherHelper::GetAncestors( v1, *theMesh1, TopAbs_EDGE);
       bool edgeFound = false;
       while ( edgeIt->more() && !edgeFound )
index 976b0311cafac9b3d9f7341765ace65b2b26c953..cf41af1960ad16421791d1a45aa3f275c18eec03 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_Projection_1D.cxx
 // Module    : SMESH
 // Created   : Fri Oct 20 11:37:07 2006
index cf7bccb23082c516d1390b637a0a2b9232f2dae0..2fbd2742045df5fa91700b01b8aa4628cdea3458 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Projection_1D.hxx
 //  Module : SMESH
 //
index 64ce054c5d9d6a2385c97e980f0d8e6de654156e..0686b165a77c6301498028dd42455674b24afa52 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_Projection_2D.cxx
 // Module    : SMESH
 // Created   : Fri Oct 20 11:37:07 2006
index 2ccb2172984c0edee262f0ea99f1ad0a2e475c82..0fbe35cc0cf7295d3430292e6b9fb42ab6d327d7 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Projection_2D.hxx
 //  Module : SMESH
 //
index 040b2efc4bc8f13afb6f5e596022adbf8ac0f3ab..43a6c4c093ac3d5c7e201dda3f2633dcdde651a9 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_Projection_3D.cxx
 // Module    : SMESH
 // Created   : Fri Oct 20 11:37:07 2006
index 008ca7429f7b2ca94af6debfb30b933b553f137c..78db64c6b11567d8d5aa0bab9e27c4ab1210d725 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Projection_3D.hxx
 //  Module : SMESH
 //
index 56a5887bc3c7bac0b225fde756a7e77b0e12bdc1..750d1abd2fe1caa3f5a9fb788b6e395448e4e204 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Propagation.cxx
 //  Module : SMESH
 //
index d94608a965769bb2e9bf017838e2c6fcbf99229a..17b09eefce3e4bf9732ab735821a485c5420c4df 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Propagation.hxx
 //  Module : SMESH
 //
index a4d3ffbdd04d533ae97ba9083fa8df465e3bbfc3..094784908ecec53c054022ea8ff4d7dd3db383ef 100644 (file)
@@ -604,7 +604,7 @@ namespace
              theSinuEdges [0].size() > 0 && theSinuEdges [1].size() > 0 );
 
     // the sinuous EDGEs can be composite and C0 continuous,
-    // therefor we use a complex criterion to find TWO short non-sinuous EDGEs
+    // therefore we use a complex criterion to find TWO short non-sinuous EDGEs
     // and the rest EDGEs will be treated as sinuous.
     // A short edge should have the following features:
     // a) straight
@@ -1019,7 +1019,7 @@ namespace
    *  \param [in] theDivPoints - projections of VERTEXes to MA
    *  \param [in] theSinuEdges - the sinuous EDGEs
    *  \param [in] theSideEdgeIDs - indices of sinuous EDGEs per side
-   *  \param [in] theIsEdgeComputed - is sinuous EGDE is meshed
+   *  \param [in] theIsEdgeComputed - is sinuous EDGE is meshed
    *  \param [in,out] thePointsOnE - the map to fill
    *  \param [out] theNodes2Merge - the map of nodes to merge
    */
@@ -1642,7 +1642,7 @@ namespace
   //================================================================================
   /*!
    * \brief Divide the sinuous EDGEs by projecting the division point of Medial
-   *        Axis to the EGDEs
+   *        Axis to the EDGEs
    *  \param [in] theHelper - the helper
    *  \param [in] theMinSegLen - minimal segment length
    *  \param [in] theMA - the Medial Axis
index b6c49182a35fe246936c364f923bb1bd82b0207b..8b6ccfa3c85dddd5aebb768598841815a60a7043 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers_QuadranglePreference : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers_QuadranglePreference : implementation of SMESH idl descriptions
 //  File   : StdMeshers_QuadranglePreference.cxx
 //  Module : SMESH
 //
index 6ed0677c1795f410bac361c8cde918f5b3db7715..9bc482e1aa0dd3dd6225eaddddeb307f7b793081 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_QuadranglePreference.hxx
 //  Module : SMESH
 //
index 994089cfe4e7fe09482f3102aa8eb5ea3e942894..679769a8f8e0b7c5296de4fdec4a9911df41c665 100644 (file)
@@ -1761,7 +1761,7 @@ bool StdMeshers_Quadrangle_2D::computeQuadPref (SMESH_Mesh &        aMesh,
   //       |   |  |   |
   //       |   |C |   |
   //       | L |  | R |
-  //  left |   |__|   | rigth
+  //  left |   |__|   | right
   //       |  /    \  |
   //       | /  C   \ |
   //       |/        \|
@@ -1774,7 +1774,7 @@ bool StdMeshers_Quadrangle_2D::computeQuadPref (SMESH_Mesh &        aMesh,
   //       |   |__|   |
   //       |  /    \  |
   //       | /  C   \ |
-  //  left |/________\| rigth
+  //  left |/________\| right
   //       |          |
   //       |    C     |
   //       |          |
@@ -2997,7 +2997,7 @@ bool StdMeshers_Quadrangle_2D::computeReduced (SMESH_Mesh &        aMesh,
     //       |   |  |   |
     //       |   |  |   |
     //       | L |  | R |
-    //  left |   |  |   | rigth
+    //  left |   |  |   | right
     //       |  /    \  |
     //       | /  C   \ |
     //       |/        \|
@@ -4593,7 +4593,7 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face&          theFace,
           {
             d = Abs( idealLen - accuLength[ iEV ]);
 
-            // take into account presence of a coresponding halfDivider
+            // take into account presence of a corresponding halfDivider
             const double cornerWgt = 0.5  / nbSides;
             const double vertexWgt = 0.25 / nbSides;
             TGeoIndex hd = halfDivider[ evVec[ iEV ]];
index e014c36c9ee8e0f6044d482da75d4bf242372985..81270bfab6efaf5ae36e2d566762f6b62c87f2a6 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers_QuadraticMesh : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers_QuadraticMesh : implementation of SMESH idl descriptions
 //  File   : StdMeshers_QuadraticMesh.cxx
 //  Module : SMESH
 //
index aba0880899cfb6d776a8dd2c1703af8fa77b1db4..6fd428754655cf2cd42acdac780dd7dfed8d1c82 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_QuadraticMesh.hxx
 //  Module : SMESH
 //
index 23962cba2070d95def31e5867f2d8096784b3f25..c5af23f3dd008138ee4142ac9b5854dd045bbc53 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_RadialPrism_3D.cxx
 // Module    : SMESH
 // Created   : Fri Oct 20 11:37:07 2006
index 144905e8184b5bd7d063fe793190bf94cac1d124..71d4d2238bb7cf3ac41f6f60853b38bdc75324d6 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_RadialPrism_3D.hxx
 //  Module : SMESH
 //
index a029757dde07c258bee719974256ac1b78768377..0b0803b9d350b23a3698aed45e1727aec46627b4 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_RadialQuadrangle_1D2D.hxx
 //  Module : SMESH
 //
index d2af675f7d182f892601886c0e53eb4d10975239..90dba12ad16366aa7b6ea8fe1b2eb0af6d420bd4 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Regular_1D.hxx
 //           Moved here from SMESH_Regular_1D.hxx
 //  Author : Paul RASCLE, EDF
index b5b20f7af8d79476d889dfb9bd5c71315d7498c6..9562e9da185fa065fce7f9298ca40b370bf928d8 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Reversible1D.cxx
 //  Module : SMESH
 //
index c146e1728d95f17be1e08c61319ca347b1698fa2..a856eddfad1e94e1199d72224f2e247514aaff5f 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_Reversible1D.hxx
 //  Module : SMESH
 //
index f938d28291b9ede29780c4d6e3cc8587dd8275f3..b109328a58cbc6517d98c161f0a8a7e91b79732c 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_SegmentAroundVertex_0D.cxx
 // Module    : SMESH
 // Created   : Fri Oct 20 11:37:07 2006
index 3e863df4c998309c4fc48aad36ff1d5270b2e931..4b0e53968be642e481c3726fc719e2232fe36095 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_SegmentAroundVertex_0D.hxx
 //  Module : SMESH
 //
index 317d44cbd232d185be35d010e806094d88d8cfe8..46baaadc2a292e2c9f0a1479c9455ebd38e4086b 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_SegmentLengthAroundVertex.cxx
 //  Module : SMESH
 //
index 66b095c13a8b0ef5b43380481dd09be77c74f5ee..355bee46c5dbca13c2efa98271ce3debcdf59a02 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_SegmentLengthAroundVertex.hxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
index 5e63f8cae30e7cc24e38607cf00a381468613b5a..51bb2cf92e91f443425f7c0d6b24ff547d3b4294 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers_StartEndLength : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers_StartEndLength : implementation of SMESH idl descriptions
 //  File   : StdMeshers_StartEndLength.cxx
 //  Module : SMESH
 //
index 37a442c439b8b57e2edff79c9488683c488e71a6..12f5f3c9573124f62ed4a769286e047cc12fe278 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_StartEndLength.hxx
 //  Module : SMESH
 //
index 6fcd338dca60bcc217db22a6c525cc05eb45870f..2999915f4e5382b1e1162e8f1546f27874fb4374 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_UseExisting_1D2D.cxx
 // Module    : SMESH
 // Created   : Fri Oct 20 11:37:07 2006
index 9bcb4a0fff2c49c33fd0ff86b47a290881bccde3..89b3bf06f24c20f888c9a4d6328ac7220635c9f5 100644 (file)
@@ -17,7 +17,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 //  File   : StdMeshers_UseExisting_1D2D.hxx
 //  Module : SMESH
 //
index 0864aaa252064714fbc3f6dab440d09870db9ca1..34f3f07a5f18d87d3bb0466ebf30badb98574ede 100644 (file)
@@ -764,7 +764,7 @@ namespace VISCOUS_3D
     // Convex FACEs whose radius of curvature is less than the thickness of layers
     map< TGeomID, _ConvexFace >      _convexFaces;
 
-    // shapes (EDGEs and VERTEXes) srink from which is forbidden due to collisions with
+    // shapes (EDGEs and VERTEXes) shrink from which is forbidden due to collisions with
     // the adjacent SOLID
     set< TGeomID >                   _noShrinkShapes;
 
@@ -3082,7 +3082,7 @@ bool _ViscousBuilder::findShapesToSmooth( _SolidData& data )
   }
 
 
-  // Fill _eosC1 to make that C1 FACEs and EGDEs between them to be smoothed as a whole
+  // Fill _eosC1 to make that C1 FACEs and EDGEs between them to be smoothed as a whole
 
   TopTools_MapOfShape c1VV;
 
@@ -4309,7 +4309,7 @@ void _Simplex::SortSimplices(vector<_Simplex>& simplices)
 
 //================================================================================
 /*!
- * \brief DEBUG. Create groups contating temorary data of _LayerEdge's
+ * \brief DEBUG. Create groups containing temporary data of _LayerEdge's
  */
 //================================================================================
 
@@ -6722,7 +6722,7 @@ void _ViscousBuilder::findCollisionEdges( _SolidData& data, SMESH_MesherHelper&
              src2->GetID() < edge->_nodes[0]->GetID() )
           continue; // avoid using same segment twice
 
-        // a _LayerEdge containg tgt2
+        // a _LayerEdge containing tgt2
         _LayerEdge* neiborEdge = edge->_2neibors->_edges[j];
 
         _TmpMeshFaceOnEdge* f = new _TmpMeshFaceOnEdge( edge, neiborEdge, --_tmpFaceID );
@@ -10331,7 +10331,7 @@ bool _ViscousBuilder::shrink(_SolidData& theData)
   vector< _EdgesOnShape* > subEOS;
   vector< _LayerEdge* > lEdges;
 
-  // loop on FACEs to srink mesh on
+  // loop on FACEs to shrink mesh on
   map< TGeomID, list< _SolidData* > >::iterator f2sd = f2sdMap.begin();
   for ( ; f2sd != f2sdMap.end(); ++f2sd )
   {
@@ -10481,13 +10481,13 @@ bool _ViscousBuilder::shrink(_SolidData& theData)
         if ( eos.SWOLType() == TopAbs_EDGE )
         {
           SMESH_subMesh* edgeSM = _mesh->GetSubMesh( eos._sWOL );
-          _Shrinker1D& srinker  = e2shrMap[ edgeSM->GetId() ];
-          eShri1D.insert( & srinker );
-          srinker.AddEdge( eos._edges[0], eos, helper );
+          _Shrinker1D& shrinker  = e2shrMap[ edgeSM->GetId() ];
+          eShri1D.insert( & shrinker );
+          shrinker.AddEdge( eos._edges[0], eos, helper );
           VISCOUS_3D::ToClearSubWithMain( edgeSM, data._solid );
-          // restore params of nodes on EGDE if the EDGE has been already
-          // srinked while srinking other FACE
-          srinker.RestoreParams();
+          // restore params of nodes on EDGE if the EDGE has been already
+          // shrinked while shrinking other FACE
+          shrinker.RestoreParams();
         }
         for ( size_t i = 0; i < eos._edges.size(); ++i )
         {
@@ -10834,7 +10834,7 @@ bool _ViscousBuilder::shrink(_SolidData& theData)
     if ( data2 )
       VISCOUS_3D::ToClearSubWithMain( sm, data2->_solid );
 
-  } // loop on FACES to srink mesh on
+  } // loop on FACES to shrink mesh on
 
 
   // Replace source nodes by target nodes in shrinked mesh edges
@@ -10981,7 +10981,7 @@ void _ViscousBuilder::restoreNoShrink( _LayerEdge& edge ) const
 
 //================================================================================
 /*!
- * \brief Try to fix triangles with high aspect ratio by swaping diagonals
+ * \brief Try to fix triangles with high aspect ratio by swapping diagonals
  */
 //================================================================================
 
index 971cebf884654ad32cba271fd510264247012a62..6cb97c538332e2cbdd489f8bcbff599781373c14 100644 (file)
@@ -176,7 +176,7 @@ namespace VISCOUS_2D
    */
   struct _Segment
   {
-    const gp_XY* _uv[2];       // poiter to _LayerEdge::_uvIn
+    const gp_XY* _uv[2];       // pointer to _LayerEdge::_uvIn
     int          _indexInLine; // position in _PolyLine
 
     _Segment() {}
index eddf11b3ca74d57cc92a5dac7bdda9051084c75c..88ea48899b99667d35607c432b375fdd780e8106 100644 (file)
@@ -430,7 +430,7 @@ namespace StdMeshersGUI
 
   //================================================================================
   /*!
-   * \brief Checks grid definintion mode
+   * \brief Checks grid definition mode
    */
   //================================================================================
 
@@ -1428,7 +1428,7 @@ void StdMeshersGUI_CartesianParamCreator::onResetAxes(bool)
 
 //================================================================================
 /*!
- * \brief SLOT called when the grid definintion mode changes
+ * \brief SLOT called when the grid definition mode changes
  */
 //================================================================================
 
index 7761be258c16c08da6da945eba496e94a457f454..f9ad75818d814768a43d5f10bc1aaee0134180e9 100644 (file)
@@ -352,7 +352,6 @@ void StdMeshersGUI_DistrPreview::update()
     OCC_CATCH_SIGNALS;
     replot();
   } catch(Standard_Failure) {
-    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
   }
 }
 
@@ -399,7 +398,6 @@ bool StdMeshersGUI_DistrPreview::init( const QString& str )
     myExpr = ExprIntrp_GenExp::Create();
     myExpr->Process( ( Standard_CString ) str.toLatin1().data() );
   } catch(Standard_Failure) {
-    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     parsed_ok = false;
   }
 
@@ -438,7 +436,6 @@ double StdMeshersGUI_DistrPreview::calc( bool& ok )
     OCC_CATCH_SIGNALS;
     res = myExpr->Expression()->Evaluate( myVars, myValues );
   } catch(Standard_Failure) {
-    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
     ok = false;
     res = 0.0;
   }
@@ -466,7 +463,6 @@ bool StdMeshersGUI_DistrPreview::convert( double& v ) const
         if(v < -7) v = -7.0;
         v = pow( 10.0, v );
       } catch(Standard_Failure) {
-        Handle(Standard_Failure) aFail = Standard_Failure::Caught();
         v = 0.0;
         ok = false;
       }
index d1acacfef479efdb954220f71916df7a8575cae6..bcda6e0deadad30c1a8b2b70edc1465e7b2dea2a 100644 (file)
@@ -28,7 +28,7 @@
 
 #include <SMESHGUI_SpinBox.h>
 
-// Qt incldues
+// Qt includes
 #include <QItemDelegate>
 #include <QTableWidget>
 #include <QHeaderView>
index 823331951bb1cdcec54112137d1ebdd1c48d4fbd..8ce79e2f83da5269f7367ad914bef2f8afec8c2a 100644 (file)
@@ -36,7 +36,7 @@
 #include <SVTK_ViewWindow.h>
 #include <SALOME_ListIO.hxx>
 
-// SALOME KERNEL incldues
+// SALOME KERNEL includes
 #include <SALOMEDSClient_SObject.hxx>
 #include <SALOMEDSClient_Study.hxx>
 
index 67af7fbe73b1c71b991c0567fc16d183d0aab3b0..e80223a243b47a64d9f3983f6fc65a864dba09a6 100644 (file)
@@ -109,7 +109,7 @@ class STDMESHERSGUI_EXPORT StdMeshersGUI_QuadrangleParamWdg : public QWidget
   void typeChanged(int);
 
  private:
-  QButtonGroup* myType; // Quadranle preference, Triangle preference, Reduced
+  QButtonGroup* myType; // Quadrangle preference, Triangle preference, Reduced
 };
 
 //================================================================================
index a7841c1e5c7203e01d5378874a795cec72d69640..bc551c68bfd1f2b1df132b4411eb286b4561f1f2 100644 (file)
@@ -126,7 +126,7 @@ QWidget* StdMeshersGUI_StdHypothesisCreator::getWidgetForParam( int i ) const
 
 //================================================================================
 /*!
- * \brief Allow modifing myCustomWidgets in const methods
+ * \brief Allow modifying myCustomWidgets in const methods
   * \retval ListOfWidgets* - non-const pointer to myCustomWidgets
  */
 //================================================================================
@@ -1433,7 +1433,7 @@ QString StdMeshersGUI_StdHypothesisCreator::type() const
 //================================================================================
 /*!
  * \brief String to insert in "SMESH_%1_HYPOTHESIS" to get hypothesis type name
- * from message resouce file
+ * from message resource file
   * \param t - hypothesis type
   * \retval QString - result string
  */
index 5b6fe40c30f13be00185adebc70f77b5b4926ca5..91a1b3ca6d26cf31de5e5e8bef6eb3956b151ea1 100644 (file)
@@ -136,7 +136,7 @@ this one for this mesh/sub-mesh.</translation>
     </message>
     <message>
         <source>SMESH_DISTR_EXPR</source>
-        <translation>Distribution with analitic density</translation>
+        <translation>Distribution with analytic density</translation>
     </message>
     <message>
         <source>SMESH_DISTR_REGULAR</source>
index 89cca0caad9342c425e057005b8cbc4c90e81383..7ad64cee20dd2cf27951e8106619a2d25be2023b 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_ObjRefUlils.cxx
 // Created   : Wed Oct 18 15:38:22 2006
 // Author    : Edward AGAPOV (eap)
index 63d6714aae56ed76c731593b785e432956b4aed8..ca30fd3d242e259d4289c750db4328036d7cc07a 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
+//  SMESH SMESH : implementation of SMESH idl descriptions
 // File      : StdMeshers_ObjRefUlils.hxx
 // Created   : Wed Oct 18 15:15:27 2006
 // Author    : Edward AGAPOV (eap)
@@ -42,7 +42,7 @@ class StdMeshers_ObjRefUlils
 {
 public:
   /*!
-   * \brief Return GEOM Object correspoding to TopoDS_Shape
+   * \brief Return GEOM Object corresponding to TopoDS_Shape
     * \param theShape - input TopoDS_Shape
     * \retval GEOM::GEOM_Object_ptr - result object
    */
@@ -54,7 +54,7 @@ public:
    }
 
   /*!
-   * \brief Return TopoDS_Shape correspoding to GEOM_Object
+   * \brief Return TopoDS_Shape corresponding to GEOM_Object
     * \param theGeomObject - input object
     * \retval TopoDS_Shape - result TopoDS_Shape
    */
index b94ca0a0f31a8a05c606ed59ba34d57c50ca70bd..97b28afcfc23d2f14d26aa19f5f07ab741628ef5 100644 (file)
@@ -20,7 +20,7 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH StdMeshers : implementaion of SMESH idl descriptions
+//  SMESH StdMeshers : implementation of SMESH idl descriptions
 //  File   : StdMeshers_i.cxx
 //  Author : Julia DOROVSKIKH
 //  Module : SMESH
index 31f2b73297f9a7b19eb895ec2ed3db91382fcd63..a5d363c14bbf50945179a5867c795350b75a22fb 100644 (file)
@@ -97,7 +97,7 @@ def Publish (ObjToPublish):
         
 def RevolveMesh(MainMesh,**args):
         """
-        This function premits to revolute and scale a 2D mesh while transforming the edge
+        This function permits to revolute and scale a 2D mesh while transforming the edge
         groups into face groups. Moreover, the function automatically creates the face groups 
         corresponding to the symmetry lower and upper faces
         Facultatif arguments are : 
@@ -171,7 +171,7 @@ def RevolveMesh(MainMesh,**args):
                 
 def ExtrudeMesh(MainMesh,**args):
         """
-        This function premits to extrude and scale a 2D mesh while transforming the edge
+        This function permits to extrude and scale a 2D mesh while transforming the edge
         groups into face groups. Moreover, the function automatically creates the face groups 
         corresponding to the symmetry lower and upper faces
         Facultatif arguments are : 
index de5a5b03644cd3821582a2229b54d219953be172..ed48c6717b302b63daf9ec26b8014a09ffd32bbc 100644 (file)
@@ -324,7 +324,7 @@ void Maillage::inputMED(std::string fichierMED)
   // Lecture des infos concernant le premier maillage
   if (MEDmeshInfo(fid, 1, maa, &spacedim, &mdim, &type, desc, dtunit, &sortingtype, &nPasTemps, &axistype, axisname,
                   unitname) < 0)
-    ERREUR("Error while reading mesh informations ");
+    ERREUR("Error while reading mesh information ");
   //cout << chrono() << " --- inputMED: MEDmeshInfo: OK" << endl;
 
 //  cerr << "maa=" << maa << endl;
index e0034905b2a2d2c87d6cd2d97b74a2e2c70e8ea0..ba6fef3a59d78146240d4f93f37935eba405176c 100644 (file)
@@ -34,7 +34,7 @@ These two parameters allow the user to prescribe a Maximal/Minimal size for the
 
 
 - **Mesh gradation**
-This parameter P controls the element size variation : MeshGems-SurfOpt will avoid having two adjacent egdes which sizes vary more than th given gradation. A size correction is applied to the size map : if two adjacent edges are respectively e1 and e2 long and e2 > Pxe1, then, the new size for the second edge will be set to P x e1.
+This parameter P controls the element size variation : MeshGems-SurfOpt will avoid having two adjacent edges which sizes vary more than the given gradation. A size correction is applied to the size map : if two adjacent edges are respectively e1 and e2 long and e2 > Pxe1, then, the new size for the second edge will be set to P x e1.
 **This procedure is deactived if P=-1**
 
 
index a38e6828984e13184ecba2642c13c20cffe004d2..29453af2e7d523ed891cc34a04b9ddccf836c8cf 100644 (file)
@@ -15,7 +15,7 @@ You usually don't have to set this parameter but you can choose to limit the amo
     
 - **File** 
 
-You can change the file used to store remeshing hypotheses, see :ref:`hypothesis-label` for further informations.
+You can change the file used to store remeshing hypotheses, see :ref:`hypothesis-label` for further information.
 
 .. image:: images/Generic.png
    :align: center
index 9f951022550af9bbb8ccde20c22220fdde98d656..a4ba0446d617011afba5a1957cc5b3f09c50da5c 100644 (file)
@@ -429,7 +429,7 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobFileList & meshJo
   //jobParameters->maximum_duration = CORBA::string_dup("01:00");
   jobParameters->queue = CORBA::string_dup("");
 
-  // Setting resource and additionnal properties (if needed)
+  // Setting resource and additional properties (if needed)
   // The resource parameters can be initiated from scratch, for
   // example by specifying the values in hard coding:
   // >>>
@@ -451,7 +451,7 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobFileList & meshJo
     resourceDefinition = _resourcesManager->GetResourceDefinition(resourceName);
   }
   catch (const CORBA::SystemException& ex) {
-    _lastErrorMessage = std::string("We can not access to the ressource ") + std::string(resourceName);
+    _lastErrorMessage = std::string("We can not access the resource ") + std::string(resourceName);
     _lastErrorMessage+= std::string("(check the file CatalogResource.xml)");
     LOG(_lastErrorMessage);
     return JOBID_UNDEFINED;
@@ -462,7 +462,7 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobFileList & meshJo
   // Then, the values can be used to initiate the resource parameters
   // of the job:
   jobParameters->resource_required.name     = CORBA::string_dup(resourceDefinition->name.in());
-  // CAUTION: the additionnal two following parameters MUST be
+  // CAUTION: the additional two following parameters MUST be
   // specified explicitly, because they are not provided by the
   // resource definition:
   jobParameters->resource_required.mem_mb   = resourceDefinition->mem_mb;
@@ -682,7 +682,7 @@ std::vector<std::string> * MeshJobManager_i::_getResourceNames() {
   // SALOME application.
   // In the code instructions, you just have to choose a resource
   // configuration by its name and then define the ResourceParameters
-  // that specify additionnal properties for a specific job submission
+  // that specify additional properties for a specific job submission
   // (use the attribute resource_required of the JobParameters).
 
   return resourceNames;
index 618a4a2f2239e0bb03a02f210c4745a06bcdfba8..177c4ccfa910bf39937414d117600ef7dd93109d 100644 (file)
@@ -73,7 +73,7 @@ private:
   Engines::ResourcesManager_var _resourcesManager;
   
   // This maps the config identifier to the config parameters. A
-  // config is a resource with additionnal data specifying the
+  // config is a resource with additional data specifying the
   // location of the binary program to be executed by the task
   std::map<std::string, MESHJOB::ConfigParameter> _configMap;