diff --git a/configure.ac b/configure.ac
index 7947e5db6..bbc18f64f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -574,6 +574,7 @@ AC_OUTPUT([ \
src/SMESH_PY/Makefile \
src/Tools/Makefile \
src/Tools/MeshCut/Makefile \
+ src/Tools/YamsPlug/Makefile \
src/Tools/padder/Makefile \
src/Tools/padder/meshjob/Makefile \
src/Tools/padder/meshjob/idl/Makefile \
diff --git a/src/Tools/Makefile.am b/src/Tools/Makefile.am
index cae255b85..15af73669 100644
--- a/src/Tools/Makefile.am
+++ b/src/Tools/Makefile.am
@@ -25,7 +25,7 @@
#
include $(top_srcdir)/adm_local/unix/make_common_starter.am
-SUBDIRS = MeshCut padder
+SUBDIRS = MeshCut padder YamsPlug
salomeplugins_PYTHON = \
smesh_plugins.py
diff --git a/src/Tools/YamsPlug/Makefile.am b/src/Tools/YamsPlug/Makefile.am
new file mode 100644
index 000000000..a94bf7153
--- /dev/null
+++ b/src/Tools/YamsPlug/Makefile.am
@@ -0,0 +1,41 @@
+# Copyright (C) 2007-2012 EDF R&D
+#
+# 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.
+#
+# 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
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+
+salomeplugins_PYTHON = \
+ YamsPlugDialog.py\
+ monYamsPlugDialog.py\
+ ViewText.py\
+ monViewText.py\
+ yamsplug_plugin.py
+
+UIPY_FILES = YamsPlugDialog.py ViewText.py
+
+if SMESH_ENABLE_GUI
+ nodist_salomescript_SCRIPTS = $(UIPY_FILES)
+endif
+
+CLEANFILES = $(UIPY_FILES)
+
+EXTRA_DIST += $(UIPY_FILES:%.py=%.ui)
+
+%.py : %.ui
+ $(PYUIC) $< -o $@
diff --git a/src/Tools/YamsPlug/ViewText.ui b/src/Tools/YamsPlug/ViewText.ui
new file mode 100644
index 000000000..18fa63e46
--- /dev/null
+++ b/src/Tools/YamsPlug/ViewText.ui
@@ -0,0 +1,38 @@
+
+
+ ViewExe
+
+
+
+ 0
+ 0
+ 469
+ 489
+
+
+
+ Run Yams
+
+
+ -
+
+
+ -
+
+
+ Ok
+
+
+
+ -
+
+
+ Save
+
+
+
+
+
+
+
+
diff --git a/src/Tools/YamsPlug/YamsPlugDialog.ui b/src/Tools/YamsPlug/YamsPlugDialog.ui
new file mode 100644
index 000000000..0113a1bb1
--- /dev/null
+++ b/src/Tools/YamsPlug/YamsPlugDialog.ui
@@ -0,0 +1,1054 @@
+
+
+ YamsPlugDialog
+
+
+
+ 0
+ 0
+ 799
+ 602
+
+
+
+ Yams : Remeshing tool
+
+
+ false
+
+
+ -
+
+
-
+
+
+ Compute
+
+
+
+ -
+
+
+ Close
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 60
+ 20
+
+
+
+
+ -
+
+
+ Save Params
+
+
+
+ -
+
+
+ Load Params
+
+
+
+ -
+
+
+ Default Params
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 338
+ 25
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ Help
+
+
+
+
+
+ -
+
+
+
+ 10
+
+
+
+ 0
+
+
+
+ Simple Remeshing Options
+
+
+
+
+ 20
+ 140
+ 741
+ 271
+
+
+
+ Optimisation
+
+
+
+
+ 10
+ 30
+ 611
+ 209
+
+
+
+
-
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<table style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Quality improvement</span> is done by point smoothing and edge swapping</p></td></tr></table></body></html>
+
+
+ Quality improvement Only (0)
+
+
+ true
+
+
+
+ -
+
+
+ the given surface triangulation is enriched (no coarsening at all) in such away that the distance
+between the elements in the final mesh and those of the initial one is bounded by auser specified tolerance value.
+One should use this option, to enrich the mesh where purely
+geometrical features may be insuficiently fine, i.e. the resulting mesh will be least as fine as the input.
+Mesh and the geometric features will be refined if needed as specified by the other program parameters.
+The meshes obtained with those settings may not be suitable for computation.
+
+
+ Pure Geometry Enrichment (G)
+
+
+ false
+
+
+
+ -
+
+
+ a uniform subdivision of the given surface triangulation is performed :
+each triangle of the given surface triangulation is considered at and
+is divided into identical triangles.
+
+
+ Uniform Subdivision(U)
+
+
+ false
+
+
+
+ -
+
+
+ a surface sandpapering without shrinkage of the given surface
+triangulation is performed, i.e., the high curvature variations of the
+given surface will be smoothed out without shrinking the volume in
+doing so. If ridges are defined, they will be kept as they are in the
+resulting mesh.
+This option modifies the goemetry.
+
+
+ Smoothing (S)
+
+
+ false
+
+
+
+ -
+
+
+ The given surface triangulation is modified in such a way that the distance between
+the elements in the final mesh and those of the initial one is bounded by a user specfied tolerance value.
+One should use this option, to coarsen when a purely geometrical mesh is needed. (a mesh that keeps
+and obeys its geometric features only.) The meshes obtained with this option are usually not suitable
+for computation because anisotropic elements may be generated
+
+
+ Geometrical Mesh : Coarsening(-2)
+
+
+
+ -
+
+
+ The given surface triangulation is modified in such a way that the distance between
+the elements in the final mesh and those of the initial one is bounded by a user specfied tolerance value.
+One should use this option, to coarsen and enrich when a purely geometrical mesh is needed. (a mesh that keeps
+and obeys its geometric features only.) The meshes obtained with this setting are usually not suitable
+for computation because anisotropic elements may be generated
+
+
+ Geometrical Mesh :Coarsening and Enrichment (2)
+
+
+
+ -
+
+
+ The given surface triangulation is modfied in accordance to a size map.
+The latter can be either the intrinsic size map (computed automatically
+and based on the surface properties, i.e. the local curvatures),
+or on a given size map (which is then combined to the intrinsic size map).
+One should use this option to coarsen the mesh, when a regular mesh
+for computation purposes is desired, i.e. a mesh with good aspect ratios or
+good quality elements.
+
+
+ Mesh for finite element computation : Coarsening (-1)
+
+
+
+ -
+
+
+ The given surface triangulation is modfied in accordance to a size map.
+The latter can be either the intrinsic size map (computed automatically
+and based on the surface properties, i.e. the local curvatures),
+or on a given size map (which is then combined to the intrinsic size map).
+One should use this option to coarsen and enrich the mesh, when a regular mesh
+for computation purposes is desired, i.e. a mesh with good aspect ratios or
+good quality elements
+
+
+ Mesh for finite element computation : Coarsening and Enrichment (1)
+
+
+
+
+
+
+
+
+
+ 20
+ 420
+ 301
+ 71
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></td></tr></table></body></html>
+
+
+ Units
+
+
+
+
+ 10
+ 30
+ 110
+ 24
+
+
+
+ Values are expressed in the model units.
+
+
+ Absolute
+
+
+ false
+
+
+
+
+
+ 160
+ 30
+ 110
+ 24
+
+
+
+ Values are relative to the bounding box size.
+
+
+ Relative
+
+
+ true
+
+
+
+
+
+
+ 410
+ 430
+ 351
+ 71
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Set chordal deviation tolerance:</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This parameter enables the user to bound the maximal chordal deviation allowed,</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">that is, the maximal distance allowed between the detected curve and the plane P</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">of the corresponding mesh face.</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">il faut mettre ici le png</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Definitions: chordal deviation epsilon; curvature r; bounding box s; angles alpha and beta</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In other words, it avoids having faces too far away from the curve </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">they represent (or should represent).</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This parameter enables the user to specify the maximal chordal deviation epsilon max.</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Following that criterion:</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- if the chordal deviation epsilon is smaller than epsilon max, it is acceptable </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> to remove the considered point.</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- if the chordal deviation epsilon is greater than epsilon max, the considered mesh face should be </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> redifined by adding a point on the curve.</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></td></tr></table></body></html>
+
+
+ Chordal deviation Tolerance
+
+
+
+
+ 40
+ 30
+ 81
+ 23
+
+
+
+
+ PreferDefault
+
+
+
+ true
+
+
+ If the Units parameter is relative epsilon max correspond to 0.0001x s x tolerance parameter where s is the size of the bounding box of the domain.
+If the Units parameter is absolute, the tolerance parameter is expressed in model units :
+if P=2 and point coordinaters are givin in millimetre, it menas that the maximal chordal deviation is 2 mm
+
+
+ 10000.000000000000000
+
+
+ 1.000000000000000
+
+
+ 1.000000000000000
+
+
+
+
+
+
+ 10
+ 10
+ 741
+ 121
+
+
+
+
+ 12
+
+
+
+ Original Mesh
+
+
+
+
+ 40
+ 70
+ 191
+ 33
+
+
+
+
+ 10
+
+
+
+ Mesh File (GMF format)
+
+
+
+
+
+ 240
+ 70
+ 481
+ 31
+
+
+
+
+ 10
+
+
+
+
+
+
+ 190
+ 30
+ 41
+ 31
+
+
+
+
+
+
+
+ ../../../../../../../../SalomeSrc/SMESH_V6_main/src/Tools/YamsPlug/open.png../../../../../../../../SalomeSrc/SMESH_V6_main/src/Tools/YamsPlug/open.png
+
+
+
+ 18
+ 18
+
+
+
+ false
+
+
+
+
+
+ 240
+ 30
+ 481
+ 31
+
+
+
+
+ 10
+
+
+
+
+
+
+ 40
+ 30
+ 141
+ 31
+
+
+
+
+ 10
+ false
+
+
+
+ QFrame::Box
+
+
+ Smesh mesh
+
+
+ false
+
+
+ 0
+
+
+
+
+
+ 10
+ 80
+ 31
+ 18
+
+
+
+ or
+
+
+
+ GBUnit
+ GBTolerance_2
+ groupBox
+ GBOptim
+
+
+
+ Advanced Remeshing Options
+
+
+
+
+ 10
+ 10
+ 761
+ 71
+
+
+
+ You can disable :
+
+
+
+
+ 100
+ 20
+ 271
+ 23
+
+
+
+ if not set (ridge detection disabled), Yams will not try to detect any new ridge edge by its own mechanism :
+it will consider as ridge only the ridges given in the mesh.
+All non-ridge edges that would have been detected as ridge by the Ridge angle paramaeter
+(see below) will be considered as part of the same continuous patch.
+This option should not be checked when all the known ridges of the mesh are given and
+when all other possible ridges are not geometric ridges to take into account.
+
+
+ ridge detection
+
+
+ true
+
+
+
+
+
+ 100
+ 40
+ 271
+ 23
+
+
+
+ When not set (point smoothing is disabled), Yams will not try to move the initial given vertices
+(along an edge, a ridge or onto the surface), hence Yams will only swap edges, remove vertices
+or add vertices (refines) to change the mesh.
+
+
+ point smoothing
+
+
+ true
+
+
+
+
+
+
+ 10
+ 100
+ 761
+ 321
+
+
+
+ You can control
+
+
+
+
+ 10
+ 30
+ 91
+ 23
+
+
+
+ 0.890000000000000
+
+
+ 0.010000000000000
+
+
+ 0.040000000000000
+
+
+
+
+
+ 120
+ 20
+ 631
+ 61
+
+
+
+ This field (as well as tolerance) enables the user to control the accuracy of the
+piecewise linear approximation of the surface. This parameter enables the user to
+control the maximal angle allowed between two adjacent faces. It can be used to
+bound the maximal deviation of the mesh faces from the tangent planes at mesh vertices.
+In other words, it avoids having sharp angles between faces representing a smooth curve.
+This parameter enables the user to specify the maximal chordal deviation "max relatively to the curvature.
+Following that criterion:
+- if the chordal deviation epsilon is smaller than epsilon max *r, it is acceptable to remove the considered point;
+- if the chordal deviation epsilon is greater than epsiolon max*r, the considered mesh face should be redefined
+by adding a point on the curve.
+One can see that the smaller the radius r, the harder it is to satisfy this criterion:
+epsilon max is a real value corresponding to a percentage, the ratio between the chordal deviation to
+the local curvature. This field is used only for optimisation style -O values of -1, 0 and 1.
+The default value for "max is set to 0:04 which leads to angles of less than 33 degrees between two adjacent
+faces .
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Geometrical approximation : Maximum angle allowed between a face and a curve </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">(not separated by a ridge). </span>0.04 corresponds to 16.26 degrees (arccos(1-0.04))</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></td></tr></table></body></html>
+
+
+
+
+
+ 120
+ 70
+ 581
+ 71
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ridge angle:</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">if the angle between the normal vectors of two adjacent faces exceeds</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">this value, the edge common to the faces is a ridge</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></td></tr></table></body></html>
+
+
+
+
+
+ 10
+ 90
+ 91
+ 23
+
+
+
+ 90.000000000000000
+
+
+ 45.000000000000000
+
+
+
+
+
+ 120
+ 140
+ 521
+ 41
+
+
+
+ This parameter allows the user to prescribe a maximal size hmax
+for the mesh elements i.e., the lengths of the edges with respect to the specified
+ size map. The corresponding values are either relative or absolute depending on the choosen parameter.
+The default values are automatically set based on the surface geometry (curvature dependent) and its
+bounding box size.
+Please note that, as it is not strictly possible to obey the given or computed size map, the actual maximal
+size may be slightly bigger than the prescribed ones.
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maximal size allowed around vertices:</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">the lengths of the edges with respect to the specified size map.</p></td></tr></table></body></html>
+
+
+
+
+
+ 120
+ 240
+ 591
+ 61
+
+
+
+ This parameter enables the user to control the element size variation in the triangulation.
+Yams will avoid getting two adjacent edges which sizes differ by a factor bigger than this parameter.
+To avoid rapid size variations, a size correction procedure is applied to the size map.
+In other words: if two adjacent edges are respectively e1 and e2 long
+if e2 > parameter * e1 then e02 the new size for the second edge will be set to parameter* e1.
+This procedure is de-activated if yams computes a mesh for finite element with only coarsening.
+The default value is 1.3, which is the usual value set for computational meshes.
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Mesh Gradation ie the element size variation in the triangulation:</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Yams will avoid having two adjacent edges which sizes </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">vary more than the given gradation.</p></td></tr></table></body></html>
+
+
+
+
+
+ 10
+ 250
+ 91
+ 23
+
+
+
+ 0.010000000000000
+
+
+ 1.300000000000000
+
+
+
+
+
+ 10
+ 150
+ 91
+ 23
+
+
+
+ -100.000000000000000
+
+
+ 0.010000000000000
+
+
+ -2.000000000000000
+
+
+
+
+
+ 120
+ 190
+ 521
+ 41
+
+
+
+ This parameter allows the user to prescribe a maximal size hmax
+for the mesh elements i.e., the lengths of the edges with respect to the specified
+ size map. The corresponding values are either relative or absolute depending on the choosen parameter.
+The default values are automatically set based on the surface geometry (curvature dependent) and its
+bounding box size.
+Please note that, as it is not strictly possible to obey the given or computed size map, the actual maximal
+size may be slightly bigger than the prescribed ones.
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Minimal size allowed around vertices:</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">the lengths of the edges with respect to the specified size map.</p></td></tr></table></body></html>
+
+
+
+
+
+ 10
+ 200
+ 91
+ 23
+
+
+
+ -100.000000000000000
+
+
+ 0.010000000000000
+
+
+ -2.000000000000000
+
+
+
+
+
+
+ 10
+ 440
+ 751
+ 61
+
+
+
+ You can enable :
+
+
+
+
+ 100
+ 20
+ 271
+ 23
+
+
+
+ if set, Yams creates new vertices placed on the curved surface and adds them to elements.
+It means one extra vertex on edge (P2 or quadratic triangles).
+New created vertices are saved in the .mesh file under keyword section Vertices
+
+
+ split edge
+
+
+ false
+
+
+
+
+
+
+ Generic Options
+
+
+
+
+ 40
+ 160
+ 441
+ 27
+
+
+
+ -
+
+
+ Verbosity Level
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 28
+ 20
+
+
+
+
+ -
+
+
+ 10
+
+
+ 3
+
+
+
+
+
+
+
+
+ 40
+ 210
+ 441
+ 27
+
+
+
+ -
+
+
+
+ 225
+ 25
+
+
+
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Memory size (in Mbytes)</p></td></tr></table></body></html>
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 28
+ 20
+
+
+
+
+ -
+
+
+ The program requires roughly about 370 bytes per point. It is thus possible to estimate a priori
+the required memory size to complete a job. As an example of memory space needed, a mesh
+of 543,652 points (1,087,716 triangles) requires 182 Mbytes (about 351 bytes per point). Conversely,
+a workstation having 512 Mbytes of memory can handle a mesh of about 2,750,000 points.
+The memory needed for mesh modification is allocated dynamically at the beginning of the procedure
+(data reading), based on the initial triangulation size. When the program reaches the amount of maximal
+memory allowed, it will stop inserting points and, if possible, the current mesh will be saved as it is,
+valid and conformal, provided the input mesh was valid and conformal.
+Specify the memory if:
+- the automatically allocated memory reveals insufficient when the user asked to enrich the given mesh;
+- you want to limit the amount of memory used by the program.
+If the input mesh size requires more memory than requested or if the allocated memory (user defined or not)
+exceeds the machine capabilities, the tool will stop because of insufficient memory.
+
+
+ 100000
+
+
+ 0
+
+
+
+
+
+
+
+
+ 40
+ 40
+ 30
+ 31
+
+
+
+
+
+
+
+ ../../../../../../../../SalomeSrc/SMESH_V6_main/src/Tools/YamsPlug/open.png../../../../../../../../SalomeSrc/SMESH_V6_main/src/Tools/YamsPlug/open.png
+
+
+
+
+
+ 80
+ 40
+ 661
+ 31
+
+
+
+
+
+
+ 40
+ 10
+ 391
+ 18
+
+
+
+ File used to save Yams Params :
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Tools/YamsPlug/monViewText.py b/src/Tools/YamsPlug/monViewText.py
new file mode 100644
index 000000000..19dcd3ea2
--- /dev/null
+++ b/src/Tools/YamsPlug/monViewText.py
@@ -0,0 +1,86 @@
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2012 EDF R&D
+#
+# 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.
+#
+# 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
+#
+# Modules Python
+import string,types,os
+import traceback
+
+from PyQt4 import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+# Import des panels
+
+# ------------------------------- #
+from ViewText import Ui_ViewExe
+class MonViewText(Ui_ViewExe,QDialog):
+# ------------------------------- #
+ """
+ Classe permettant la visualisation de texte
+ """
+ def __init__(self,parent,txt):
+ QDialog.__init__(self,parent)
+ self.setupUi(self)
+ self.resize( QSize(600,600).expandedTo(self.minimumSizeHint()) )
+ self.connect( self.PB_Ok,SIGNAL("clicked()"), self, SLOT("close()") )
+ self.connect( self.PB_Save,SIGNAL("clicked()"), self.saveFile )
+ self.monExe=QProcess(self)
+
+
+ self.connect(self.monExe, SIGNAL("readyReadStandardOutput()"), self.readFromStdOut )
+ self.connect(self.monExe, SIGNAL("readyReadStandardError()"), self.readFromStdErr )
+
+ # Je n arrive pas a utiliser le setEnvironment du QProcess
+ # fonctionne hors Salome mais pas dans Salome ???
+ LICENCE=os.environ['DISTENE_LICENCE_FILE_FOR_YAMS']
+ txt='export DISTENE_LICENSE_FILE='+LICENCE+';'+ txt
+ pid=self.monExe.pid()
+ nomFichier='/tmp/yam_'+str(pid)+'.py'
+ f=open(nomFichier,'w')
+ f.write(txt)
+ f.close()
+
+ maBidouille='sh ' + nomFichier
+ self.monExe.start(maBidouille)
+ self.monExe.closeWriteChannel()
+ self.show()
+
+
+ def saveFile(self):
+ #recuperation du nom du fichier
+ savedir=os.environ['HOME']
+ fn = QFileDialog.getSaveFileName(None, self.trUtf8("Save File"),savedir)
+ if fn.isNull() : return
+ ulfile = os.path.abspath(unicode(fn))
+ try:
+ f = open(fn, 'wb')
+ f.write(str(self.TB_Exe.toPlainText()))
+ f.close()
+ except IOError, why:
+ QMessageBox.critical(self, self.trUtf8('Save File'),
+ self.trUtf8('The file %1 could not be saved.
Reason: %2')
+ .arg(unicode(fn)).arg(str(why)))
+
+ def readFromStdErr(self):
+ a=self.monExe.readAllStandardError()
+ self.TB_Exe.append(QString.fromUtf8(a.data(),len(a))) ;
+
+ def readFromStdOut(self) :
+ a=self.monExe.readAllStandardOutput()
+ self.TB_Exe.append(QString.fromUtf8(a.data(),len(a))) ;
diff --git a/src/Tools/YamsPlug/monYamsPlugDialog.py b/src/Tools/YamsPlug/monYamsPlugDialog.py
new file mode 100644
index 000000000..3e995c21a
--- /dev/null
+++ b/src/Tools/YamsPlug/monYamsPlugDialog.py
@@ -0,0 +1,318 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2012 EDF R&D
+#
+# 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.
+#
+# 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
+#
+# Modules Python
+# Modules Eficas
+
+import os
+from YamsPlugDialog import Ui_YamsPlugDialog
+from monViewText import MonViewText
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+
+class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
+ """
+ """
+ def __init__(self):
+ QWidget.__init__(self)
+ self.setupUi(self)
+ self.connecterSignaux()
+ self.fichierIn=""
+ self.fichierOut=""
+ self.MeshIn=""
+ self.num=1
+
+# Ces parametres ne sont pas remis à rien par le clean
+ self.paramsFile= os.path.abspath(os.path.join(os.environ['HOME'],'.yams.dat'))
+ self.LE_ParamsFile.setText(self.paramsFile)
+ self.LE_MeshFile.setText("")
+ self.LE_MeshSmesh.setText("")
+
+ def connecterSignaux(self) :
+ self.connect(self.PB_Cancel,SIGNAL("clicked()"),self.PBCancelPressed)
+ self.connect(self.PB_Default,SIGNAL("clicked()"),self.clean)
+ self.connect(self.PB_Help,SIGNAL("clicked()"),self.PBHelpPressed)
+ self.connect(self.PB_Load,SIGNAL("clicked()"),self.PBLoadPressed)
+ self.connect(self.PB_OK,SIGNAL("clicked()"),self.PBOKPressed)
+ self.connect(self.PB_Save,SIGNAL("clicked()"),self.PBSavePressed)
+ self.connect(self.PB_MeshFile,SIGNAL("clicked()"),self.PBMeshFilePressed)
+ self.connect(self.PB_MeshSmesh,SIGNAL("clicked()"),self.PBMeshSmeshPressed)
+ self.connect(self.PB_ParamsFileExplorer,SIGNAL("clicked()"),self.setParamsFileName)
+ self.connect(self.LE_MeshFile,SIGNAL("returnPressed()"),self.meshFileNameChanged)
+ self.connect(self.LE_ParamsFile,SIGNAL("returnPressed()"),self.paramsFileNameChanged)
+
+
+ def PBHelpPressed(self):
+ try :
+ maDoc=os.environ['DISTENE_YAMS_DOC_PDF']
+ commande='kpdf '+maDoc
+ os.system (commande)
+ except:
+ QMessageBox.warning( self, "Help unavailable", str(maDoc) + " not found")
+
+
+ def PBOKPressed(self):
+ if not(self.PrepareLigneCommande()) : return
+ self.PBSavePressed(NomHypo=True)
+ maFenetre=MonViewText(self,self.commande)
+ if os.path.isfile(self.fichierOut) :self.enregistreResultat()
+
+ def enregistreResultat(self):
+ import smesh
+ import SMESH
+ import salome
+ from salome.kernel import studyedit
+
+ maStudy=studyedit.getActiveStudy()
+ smesh.SetCurrentStudy(maStudy)
+ (outputMesh, status) = smesh.CreateMeshesFromGMF(self.fichierOut)
+ meshname = 'yams'+str(self.num)
+ smesh.SetName(outputMesh.GetMesh(), meshname)
+ outputMesh.Compute()
+
+
+ self.editor = studyedit.getStudyEditor() #
+ moduleEntry=self.editor.findOrCreateComponent("SMESH","SMESH")
+ HypReMeshEntry = self.editor.findOrCreateItem( moduleEntry, name = 'HypoForRemesh',
+ comment = 'HypoForRemshing')
+ monStudyBuilder=maStudy.NewBuilder();
+ monStudyBuilder.NewCommand();
+ newStudyIter=monStudyBuilder.NewObject(HypReMeshEntry)
+ aNameAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeName")
+ hypoName = 'monHypo_Yams_'+str(self.num)
+ aNameAttrib.SetValue(hypoName)
+ aCommentAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeComment")
+ aCommentAttrib.SetValue(str(self.commande))
+
+ SOMesh=maStudy.FindObjectByName(meshname ,"SMESH")[0]
+ newLink=monStudyBuilder.NewObject(SOMesh)
+ monStudyBuilder.Addreference(newLink, newStudyIter);
+ if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(0)
+ self.num+=1
+ return True
+
+ def PBSavePressed(self,NomHypo=False):
+ if NomHypo : text = '# Params for Hypothese : monHypo_Yams_'+str(self.num - 1)+"\n"
+ else : text = '# Save intermediate params \n'
+ text += "# Params for mesh : " + self.LE_MeshSmesh.text() +'\n'
+ for RB in self.GBOptim.findChildren(QRadioButton,):
+ if RB.isChecked()==True:
+ text+="Optimisation ='"+RB.text()+"'\n"
+ break
+ for RB in self.GBUnit.findChildren(QRadioButton,):
+ if RB.isChecked()==True:
+ text+="Units ='"+RB.text()+"'\n"
+ text+='Chordal_Tolerance_Deviation='+str(self.SP_Tolerance.value())+'\n'
+
+ text+='Ridge_Detection=' + str(self.CB_Ridge.isChecked())+'\n'
+ text+='Split_Edge=' + str(self.CB_SplitEdge.isChecked())+'\n'
+ text+='Point_Smoothing=' + str(self.CB_Point.isChecked())+'\n'
+ text+='Geometrical_Approximation='+ str(self.SP_Geomapp.value()) +'\n'
+ text+='Ridge_Angle=' + str(self.SP_Ridge.value()) +'\n'
+ text+='Maximum_Size=' + str(self.SP_MaxSize.value()) +'\n'
+ text+='Minimum_Size=' + str(self.SP_MaxSize.value()) +'\n'
+ text+='Mesh_Gradation=' + str(self.SP_Gradation.value())+'\n'
+
+ text+='Verbosity=' + str(self.SP_Verbosity.value())+'\n'
+ text+='Memory=' + str(self.SP_Memory.value())+'\n'
+ text+='\n\n'
+
+ try :
+ f=open(self.paramsFile,'a')
+ except :
+ QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
+ return
+ try :
+ f.write(text)
+ except :
+ QMessageBox.warning( self, "File", "Unable to write "+self.paramsFile)
+ return
+ f.close()
+
+ def PBLoadPressed(self):
+ try :
+ f=open(self.paramsFile,'r')
+ except :
+ QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
+ return
+ try :
+ text=f.read()
+ except :
+ QMessageBox.warning( self, "File", "Unable to read "+self.paramsFile)
+ return
+ f.close()
+ d={}
+ exec text in d
+ for RB in self.GBOptim.findChildren(QRadioButton,):
+ if d['Optimisation']== RB.text():
+ RB.setChecked(True)
+ break
+ for RB in self.GBUnit.findChildren(QRadioButton,):
+ if d['Units']== RB.text():
+ RB.setChecked(True)
+ break
+ self.SP_Tolerance.setValue(d['Chordal_Tolerance_Deviation'])
+
+ self.CB_Ridge.setChecked(d['Ridge_Detection'])
+ self.CB_Point.setChecked(d['Point_Smoothing'])
+ self.CB_SplitEdge.setChecked(d['Split_Edge'])
+ self.SP_Geomapp.setValue(d['Geometrical_Approximation'])
+ self.SP_Ridge.setValue(d['Ridge_Angle'])
+ self.SP_MaxSize.setValue(d['Maximum_Size'])
+ self.SP_MinSize.setValue(d['Minimum_Size'])
+ self.SP_Gradation.setValue(d['Mesh_Gradation'])
+
+ self.SP_Verbosity.setValue(d['Verbosity'])
+ self.SP_Memory.setValue(d['Memory'])
+
+
+ def PBCancelPressed(self):
+ self.close()
+
+ def PBMeshFilePressed(self):
+ fd = QFileDialog(self, "select an existing Mesh file", self.LE_MeshFile.text(), "Mesh-Files (*.mesh);;All Files (*)")
+ if fd.exec_():
+ infile = fd.selectedFiles()[0]
+ self.LE_MeshFile.setText(infile)
+ self.fichierIn=infile.toLatin1()
+
+ def setParamsFileName(self):
+ fd = QFileDialog(self, "select a file", self.LE_ParamsFile.text(), "dat Files (*.dat);;All Files (*)")
+ if fd.exec_():
+ infile = fd.selectedFiles()[0]
+ self.LE_ParamsFile.setText(infile)
+ self.paramsFile=infile.toLatin1()
+
+
+ def meshFileNameChanged(self):
+ self.fichierIn=self.LE_MeshFile.text()
+ if os.path.exists(self.fichierIn): return
+ QMessageBox.warning( self, "Unknown File", "File doesn't exist")
+
+ def paramsFileNameChanged(self):
+ self.paramsFile=self.LE_ParamsFile.text()
+
+ def PBMeshSmeshPressed(self):
+ import salome
+ import smesh
+ from salome.kernel import studyedit
+ from salome.smesh.smeshstudytools import SMeshStudyTools
+ from salome.gui import helper as guihelper
+ from omniORB import CORBA
+
+ mySObject, myEntry = guihelper.getSObjectSelected()
+ if CORBA.is_nil(mySObject) or mySObject==None:
+ QMessageBox.critical(self, "Mesh", "select an input mesh")
+ return
+ self.smeshStudyTool = SMeshStudyTools()
+ self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject)
+ if CORBA.is_nil(self.__selectedMesh):
+ QMessageBox.critical(self, "Mesh", "select an input mesh")
+ return
+ myName = mySObject.GetName()
+ self.MeshIn=myName
+ self.LE_MeshSmesh.setText(myName)
+
+ def prepareFichier(self):
+ self.fichierIn="/tmp/PourYam_"+str(self.num)+".mesh"
+ import SMESH
+ self.__selectedMesh.ExportGMF(self.__selectedMesh,self.fichierIn)
+
+ def PrepareLigneCommande(self):
+ self.commande="yams "
+ verbosity=str(self.SP_Verbosity.value())
+ self.commande+="-v "+verbosity
+ for obj in self.mesRB.children():
+ try :
+ if obj.isChecked():
+ self.style=obj.objectName().remove(0,3)
+ self.style.replace("_","-")
+ break
+ except :
+ pass
+ self.commande+=" -O "+self.style.toLatin1()
+ if self.fichierIn=="" and self.MeshIn=="" :
+ QMessageBox.critical(self, "Mesh", "select an input mesh")
+ return False
+ if self.MeshIn!="" : self.prepareFichier()
+ if not (os.path.isfile(self.fichierIn)):
+ QMessageBox.critical(self, "File", "unable to read GMF Mesh in "+str(self.fichierIn))
+ return False
+
+ deb=os.path.splitext(self.fichierIn)
+ self.fichierOut=deb[0]+'.d.meshb'
+
+ if self.RB_Absolute.isChecked()==True :
+ self.commande+=' -Dabsolute'
+ else :
+ self.commande+=' -Drelative'
+ self.commande+=',tolerance=%f'%self.SP_Tolerance.value()
+ if self.CB_Ridge.isChecked()==False : self.commande+=',nr'
+ if self.CB_Point.isChecked()==False : self.commande+=',ns'
+ if self.SP_Geomapp.value()!=0.04 : self.commande+=',geomapp=%f'%self.SP_Geomapp.value()
+ if self.SP_Ridge.value()!=45.0 : self.commande+=',ridge=%f'%self.SP_Ridge.value()
+ if self.SP_MaxSize.value()!=-2 : self.commande+=',maxsize=%f'%self.SP_MaxSize.value()
+ if self.SP_MinSize.value()!=-2 : self.commande+=',minsize=%f'%self.SP_MinSize.value()
+ if self.SP_Gradation.value()!=1.3 : self.commande+=',gradation=%f'%self.SP_MaxSize.value()
+ if self.CB_SplitEdge.isChecked()==True : self.commande+=',splitedge=1'
+
+ if self.SP_Verbosity.value()!=3 : self.commande+=' -v %d'%self.SP_Verbosity.value()
+ if self.SP_Memory.value()!=0 : self.commande+=' -m %d'%self.SP_Memory.value()
+
+ self.commande+=" "+self.fichierIn
+ return True
+
+ def clean(self):
+ self.RB_0.setChecked(True)
+ self.RB_G.setChecked(False)
+ self.RB_U.setChecked(False)
+ self.RB_S.setChecked(False)
+ self.RB_2.setChecked(False)
+ self.RB__2.setChecked(False)
+ self.RB_1.setChecked(False)
+ self.RB__1.setChecked(False)
+ self.RB_Absolute.setChecked(False)
+ self.RB_Relative.setChecked(True)
+ self.SP_Tolerance.setProperty("value", 1.0)
+ self.SP_Geomapp.setProperty("value", 0.04)
+ self.SP_Ridge.setProperty("value", 45.0)
+ self.SP_Gradation.setProperty("value", 1.3)
+ self.CB_Ridge.setChecked(True)
+ self.CB_Point.setChecked(True)
+ self.CB_SplitEdge.setChecked(False)
+ self.SP_MaxSize.setProperty("value", -2.0)
+ self.SP_MinSize.setProperty("value", -2.0)
+ self.SP_Verbosity.setProperty("value", 3)
+ self.SP_Memory.setProperty("value", 0)
+
+
+__dialog=None
+def getDialog():
+ """
+ This function returns a singleton instance of the plugin dialog.
+ c est obligatoire pour faire un show sans parent...
+ """
+ global __dialog
+ if __dialog is None:
+ __dialog = MonYamsPlugDialog()
+ #else :
+ # __dialog.clean()
+ return __dialog
+
diff --git a/src/Tools/YamsPlug/select1.png b/src/Tools/YamsPlug/select1.png
new file mode 100644
index 000000000..ecb252ab7
Binary files /dev/null and b/src/Tools/YamsPlug/select1.png differ
diff --git a/src/Tools/YamsPlug/yamsplug_plugin.py b/src/Tools/YamsPlug/yamsplug_plugin.py
new file mode 100644
index 000000000..4e04a9833
--- /dev/null
+++ b/src/Tools/YamsPlug/yamsplug_plugin.py
@@ -0,0 +1,44 @@
+# Copyright (C) 2006-2012 EDF R&D
+#
+# 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.
+#
+# 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
+#
+
+# if you already have plugins defined in a salome_plugins.py file, add this file at the end.
+# if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
+
+def YamsLct(context):
+ # get context study, studyId, salomeGui
+ study = context.study
+ studyId = context.studyId
+ sg = context.sg
+
+ import os
+ import subprocess
+ import tempfile
+ from PyQt4 import QtCore
+ from PyQt4 import QtGui
+ from PyQt4.QtGui import QFileDialog
+ from PyQt4.QtGui import QMessageBox
+
+ try :
+ os.environ['DISTENE_LICENCE_FILE_FOR_YAMS']
+ except:
+ QMessageBox.warning(None,"Products","Distene's products are not installed")
+ return
+ import monYamsPlugDialog
+ window=monYamsPlugDialog.getDialog()
+ window.show()