Merge from V6_2_BR 23/12/2010
@ -41,7 +41,7 @@ SUBDIRS = idl adm_local resources src doc bin
|
|||||||
|
|
||||||
DIST_SUBDIRS = idl adm_local resources src doc bin
|
DIST_SUBDIRS = idl adm_local resources src doc bin
|
||||||
|
|
||||||
DISTCLEANFILES = a.out aclocal.m4 configure local-install.sh
|
DISTCLEANFILES = a.out aclocal.m4 configure local-install.sh hack_libtool
|
||||||
|
|
||||||
salomeinclude_DATA = SMESH_version.h
|
salomeinclude_DATA = SMESH_version.h
|
||||||
|
|
||||||
|
@ -444,6 +444,9 @@ sed -i "s%^CC=\"\(.*\)\"%hack_libtool (){ \n\
|
|||||||
$(pwd)/hack_libtool \1 \"\$[@]\" \n\
|
$(pwd)/hack_libtool \1 \"\$[@]\" \n\
|
||||||
}\n\
|
}\n\
|
||||||
CC=\"hack_libtool\"%g" libtool
|
CC=\"hack_libtool\"%g" libtool
|
||||||
|
sed -i "s%\(\s*\)for searchdir in \$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path; do%\1searchdirs=\"\$newlib_search_path \$lib_search_path \$sys_lib_search_path \$shlib_search_path\"\n\1for searchdir in \$searchdirs; do%g" libtool
|
||||||
|
sed -i "s%\(\s*\)searchdirs=\"\$newlib_search_path \$lib_search_path \(.*\)\"%\1searchdirs=\"\$newlib_search_path \$lib_search_path\"\n\1sss_beg=\"\"\n\1sss_end=\"\2\"%g" libtool
|
||||||
|
sed -i "s%\(\s*\)\(for searchdir in \$searchdirs; do\)%\1for sss in \$searchdirs; do\n\1 if ! test -d \$sss; then continue; fi\n\1 ssss=\$(cd \$sss; pwd)\n\1 if test \"\$ssss\" != \"\" \&\& test -d \$ssss; then\n\1 case \$ssss in\n\1 /usr/lib | /usr/lib64 ) ;;\n\1 * ) sss_beg=\"\$sss_beg \$ssss\" ;;\n\1 esac\n\1 fi\n\1done\n\1searchdirs=\"\$sss_beg \$sss_end\"\n\1\2%g" libtool
|
||||||
],[])
|
],[])
|
||||||
|
|
||||||
# This list is initiated using autoscan and must be updated manually
|
# This list is initiated using autoscan and must be updated manually
|
||||||
@ -460,6 +463,7 @@ AC_OUTPUT([ \
|
|||||||
SMESH_version.h \
|
SMESH_version.h \
|
||||||
doc/Makefile \
|
doc/Makefile \
|
||||||
doc/docutils/Makefile \
|
doc/docutils/Makefile \
|
||||||
|
doc/docutils/conf.py \
|
||||||
doc/salome/Makefile \
|
doc/salome/Makefile \
|
||||||
doc/salome/gui/Makefile \
|
doc/salome/gui/Makefile \
|
||||||
doc/salome/gui/SMESH/Makefile \
|
doc/salome/gui/SMESH/Makefile \
|
||||||
|
@ -47,7 +47,7 @@ htm:
|
|||||||
mkdir -p html doctrees
|
mkdir -p html doctrees
|
||||||
PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH} \
|
PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH} \
|
||||||
LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH} \
|
LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH} \
|
||||||
$(SPHINXBUILD) -W -b html $(ALLSPHINXOPTS) html
|
$(SPHINXBUILD) -c $(top_builddir)/doc/docutils -W -b html $(ALLSPHINXOPTS) html
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished. The HTML pages are in html."
|
@echo "Build finished. The HTML pages are in html."
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ latex:
|
|||||||
mkdir -p latex doctrees
|
mkdir -p latex doctrees
|
||||||
PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH} \
|
PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH} \
|
||||||
LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH} \
|
LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH} \
|
||||||
$(SPHINXBUILD) -W -b latex $(ALLSPHINXOPTS) latex
|
$(SPHINXBUILD) -c $(top_builddir)/doc/docutils -W -b latex $(ALLSPHINXOPTS) latex
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished; the LaTeX files are in latex."
|
@echo "Build finished; the LaTeX files are in latex."
|
||||||
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
|
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
|
||||||
@ -71,9 +71,6 @@ RSTFILES= \
|
|||||||
|
|
||||||
EXTRA_DIST+= $(RSTFILES)
|
EXTRA_DIST+= $(RSTFILES)
|
||||||
|
|
||||||
EXTRA_DIST+= \
|
|
||||||
conf.py
|
|
||||||
|
|
||||||
install-data-local: html/index.html
|
install-data-local: html/index.html
|
||||||
test -z $(pydocdir) || mkdir -p $(DESTDIR)$(pydocdir)
|
test -z $(pydocdir) || mkdir -p $(DESTDIR)$(pydocdir)
|
||||||
if test -d "html"; then b=; else b="$(srcdir)/"; fi; \
|
if test -d "html"; then b=; else b="$(srcdir)/"; fi; \
|
||||||
|
@ -54,9 +54,9 @@ copyright = '2010 EDF R&D'
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '6.2.0'
|
version = '@VERSION@'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '6.2.0'
|
release = '@VERSION@'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
BIN
doc/salome/gui/SMESH/images/bare_border_faces_smpl.png
Normal file
After Width: | Height: | Size: 8.9 KiB |
BIN
doc/salome/gui/SMESH/images/bare_border_volumes_smpl.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
doc/salome/gui/SMESH/images/controls_popup.png
Executable file
After Width: | Height: | Size: 1.9 KiB |
BIN
doc/salome/gui/SMESH/images/copy_mesh_dlg.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
doc/salome/gui/SMESH/images/copy_mesh_icon.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
doc/salome/gui/SMESH/images/over_constrained_faces.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
doc/salome/gui/SMESH/images/over_constrained_volumes.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
doc/salome/gui/SMESH/images/scalar_bar_dlg.png
Executable file
After Width: | Height: | Size: 22 KiB |
@ -16,6 +16,9 @@ for example, a face.
|
|||||||
|
|
||||||
Several created meshes can be \subpage building_compounds_page "combined into mesh compounds".
|
Several created meshes can be \subpage building_compounds_page "combined into mesh compounds".
|
||||||
|
|
||||||
|
The whole mesh or it's part can be \subpage copy_mesh_page "copied"
|
||||||
|
into another mesh.
|
||||||
|
|
||||||
All created meshes and submeshes can be \subpage editing_meshes_page "edited".
|
All created meshes and submeshes can be \subpage editing_meshes_page "edited".
|
||||||
|
|
||||||
Meshes can be also edited using the MESH functions destined for
|
Meshes can be also edited using the MESH functions destined for
|
||||||
|
@ -32,6 +32,8 @@ Edge quality controls:
|
|||||||
Face quality controls:
|
Face quality controls:
|
||||||
<ul>
|
<ul>
|
||||||
<li>\subpage free_faces_page "Free faces"</li>
|
<li>\subpage free_faces_page "Free faces"</li>
|
||||||
|
<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 length_2d_page "Length 2D"</li>
|
||||||
<li>\subpage borders_at_multi_connection_2d_page "Borders at multi-connection 2D"</li>
|
<li>\subpage borders_at_multi_connection_2d_page "Borders at multi-connection 2D"</li>
|
||||||
<li>\subpage area_page "Area"</li>
|
<li>\subpage area_page "Area"</li>
|
||||||
@ -40,14 +42,31 @@ Face quality controls:
|
|||||||
<li>\subpage minimum_angle_page "Minimum angle"</li>
|
<li>\subpage minimum_angle_page "Minimum angle"</li>
|
||||||
<li>\subpage warping_page "Warping"</li>
|
<li>\subpage warping_page "Warping"</li>
|
||||||
<li>\subpage skew_page "Skew"</li>
|
<li>\subpage skew_page "Skew"</li>
|
||||||
<li>\subpage max_element_length_2d_page "Max element length 2D"</li>
|
<li>\subpage max_element_length_2d_page "Element Diameter 2D"</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
Volume quality controls:
|
Volume quality controls:
|
||||||
<ul>
|
<ul>
|
||||||
<li>\subpage aspect_ratio_3d_page "Aspect ratio 3D"</li>
|
<li>\subpage aspect_ratio_3d_page "Aspect ratio 3D"</li>
|
||||||
<li>\subpage volume_page "Volume"</li>
|
<li>\subpage volume_page "Volume"</li>
|
||||||
<li>\subpage max_element_length_3d_page "Max element length 3D"</li>
|
<li>\subpage max_element_length_3d_page "Element Diameter 3D"</li>
|
||||||
|
<li>\subpage bare_border_volumes_page "Bare border volumes"</li>
|
||||||
|
<li>\subpage over_constrained_volumes_page "Over-constrained volumes"</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
To manage the quality controls call pop-up in the VTK viewer and select "Controls" sub-menu
|
||||||
|
\image html controls_popup.png
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> <b>Reset</b> switches off quality controls;</li>
|
||||||
|
<li> <b>Node Controls</b> provides access to the node quality controls;</li>
|
||||||
|
<li> <b>Edge Controls</b> provides access to the edge quality controls;</li>
|
||||||
|
<li> <b>Face Controls</b> provides access to the face quality controls;</li>
|
||||||
|
<li> <b>Volume Controls</b> provides access to the volume quality controls;</li>
|
||||||
|
<li> <b>Scalar Bar Properties</b> allows setting \subpage scalar_bar_dlg;</li>
|
||||||
|
<li> <b>Export Distribution...</b> allows saving the distribution of quality control values in the text file;</li>
|
||||||
|
<li> <b>Show Distribution</b> Shows/Hides the distribution histogram of the quality control values in the VTK Viewer.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
15
doc/salome/gui/SMESH/input/bare_border_face.doc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*!
|
||||||
|
|
||||||
|
\page bare_border_faces_page Bare border faces
|
||||||
|
|
||||||
|
This mesh quality control highlights the faces having the border not
|
||||||
|
shared with other faces (free border) and missing an edge based on
|
||||||
|
nodes of the free border. The faces with bare border are shown with a
|
||||||
|
color different from the color of shared faces.
|
||||||
|
|
||||||
|
\image html bare_border_faces_smpl.png
|
||||||
|
|
||||||
|
\sa A sample TUI Script making a group of faces highlighted in the
|
||||||
|
picture is \ref tui_bare_border_faces "Bare border faces Control".
|
||||||
|
|
||||||
|
*/
|
15
doc/salome/gui/SMESH/input/bare_border_volumes.doc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*!
|
||||||
|
|
||||||
|
\page bare_border_volumes_page Bare border volumes
|
||||||
|
|
||||||
|
This mesh quality control highlights the volumes having the border not
|
||||||
|
shared with other volumes (free border) and missing a face based on
|
||||||
|
nodes of the free border. The volumes with bare border are shown with a
|
||||||
|
color different from the color of shared volumes.
|
||||||
|
|
||||||
|
\image html bare_border_volumes_smpl.png
|
||||||
|
|
||||||
|
\sa A sample TUI Script making a group of volumes highlighted in the
|
||||||
|
picture is \ref tui_bare_border_volumes "Bare border volumes Control".
|
||||||
|
|
||||||
|
*/
|
56
doc/salome/gui/SMESH/input/copy_mesh.doc
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*!
|
||||||
|
|
||||||
|
\page copy_mesh_page Copy Mesh
|
||||||
|
|
||||||
|
\n A mesh can be created by copying a part of or the whole other mesh.
|
||||||
|
|
||||||
|
<em>To make a copy of a mesh:</em>
|
||||||
|
|
||||||
|
\par
|
||||||
|
From the \b Mesh menu select <b>Copy Mesh</b> or click <em>"Copy Mesh"</em>
|
||||||
|
button in the toolbar.
|
||||||
|
|
||||||
|
\image html copy_mesh_icon.png
|
||||||
|
<center><em>"Copy Mesh" button</em></center>
|
||||||
|
|
||||||
|
\par
|
||||||
|
The following dialog box will appear:
|
||||||
|
|
||||||
|
\image html copy_mesh_dlg.png
|
||||||
|
|
||||||
|
\par
|
||||||
|
In the dialog:
|
||||||
|
<ul>
|
||||||
|
<li>specify the part of mesh to copy:
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><b>Select the whole mesh, submesh or group</b> by mouse activating
|
||||||
|
this checkbox; or</li>
|
||||||
|
<li>choose mesh elements with the mouse in the 3D Viewer. It is
|
||||||
|
possible to select a whole area with a mouse frame; or</li>
|
||||||
|
<li>input the <b>Source Element IDs</b> directly in this field. The
|
||||||
|
selected elements will be highlighted in the viewer; or</li>
|
||||||
|
<li>apply Filters. <b>Set filter</b> button allows to apply a filter
|
||||||
|
to the selection of elements. See more about filters in the \ref
|
||||||
|
selection_filter_library_page "Selection filter library" page.</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>specify the <b>New Mesh Name</b>;</li>
|
||||||
|
|
||||||
|
<li>specify the conditions of copying:
|
||||||
|
<ul>
|
||||||
|
<li>activate <b>Generate groups</b> checkbox to copy the groups of
|
||||||
|
elements of the source mesh to the newly created mesh.</li>
|
||||||
|
<li>activate <b>Preserve IDs of elements</b> checkbox to keep
|
||||||
|
the IDs of new nodes and elements the same as the IDs of source nodes
|
||||||
|
and elements.</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>Click \b Apply or <b>Apply and Close</b> button to confirm the operation.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<b>See Also</b> a sample
|
||||||
|
\ref tui_copy_mesh "TUI Example of mesh copying."
|
||||||
|
*/
|
14
doc/salome/gui/SMESH/input/over_constrained_faces.doc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/*!
|
||||||
|
|
||||||
|
\page over_constrained_faces_page Over-constrained faces
|
||||||
|
|
||||||
|
\n This mesh quality control highlights faces sharing only one of its borders with other faces.
|
||||||
|
|
||||||
|
\image html over_constrained_faces.png
|
||||||
|
|
||||||
|
In this picture the over-constrained face is displayed in red.
|
||||||
|
|
||||||
|
<br><b>See Also</b> a sample TUI Script of a
|
||||||
|
\ref tui_over_constrained_faces "Over-constrained faces" filter.
|
||||||
|
|
||||||
|
*/
|
14
doc/salome/gui/SMESH/input/over_constrained_volumes.doc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/*!
|
||||||
|
|
||||||
|
\page over_constrained_volumes_page Over-constrained volumes
|
||||||
|
|
||||||
|
\n This mesh quality control highlights volumes sharing only one of its borders with other volumes.
|
||||||
|
|
||||||
|
\image html over_constrained_volumes.png
|
||||||
|
|
||||||
|
In this picture the over-constrained volume is displayed in red.
|
||||||
|
|
||||||
|
<br><b>See Also</b> a sample TUI Script of a
|
||||||
|
\ref tui_over_constrained_volumes "Over-constrained volumes" filter.
|
||||||
|
|
||||||
|
*/
|
@ -17,12 +17,13 @@ The following dialog box will appear:
|
|||||||
\image html projection_1d.png
|
\image html projection_1d.png
|
||||||
|
|
||||||
In this menu you can define the \b Name of the algorithm, the already
|
In this menu you can define the \b Name of the algorithm, the already
|
||||||
meshed source \b Edge and the \b Mesh (optional, use it if there are several
|
meshed source \b Edge and the \b Mesh (It can be omitted only when
|
||||||
different meshes on the same edge). It could also be necessary to
|
projecting a submesh on another one from the same global Mesh).
|
||||||
define the orientation of edges, which is done by indicating the
|
It could also be necessary to define the orientation of edges,
|
||||||
<b>Source Vertex</b> being the first point of the Source Edge and the
|
which is done by indicating the <b>Source Vertex</b> being the first point
|
||||||
<b>Target Vertex</b> being the first point of the created \b Edge. For
|
of the Source Edge and the <b>Target Vertex</b> being the first point of
|
||||||
a group of edges, <b>Source</b> and <b>Target</b> vertices should be
|
the created \b Edge.
|
||||||
|
For a group of edges, <b>Source</b> and <b>Target</b> vertices should be
|
||||||
shared by only one edge of the group. If <b>Source</b> and
|
shared by only one edge of the group. If <b>Source</b> and
|
||||||
<b>Target</b> vertices are specified, the elements of the group must be ajacent.
|
<b>Target</b> vertices are specified, the elements of the group must be ajacent.
|
||||||
|
|
||||||
@ -42,17 +43,17 @@ following dialog box will appear:
|
|||||||
\image html projection_2d.png
|
\image html projection_2d.png
|
||||||
|
|
||||||
In this menu you can define the \b Name of the algorithm, the already
|
In this menu you can define the \b Name of the algorithm, the already
|
||||||
meshed source \b Face and the \b Mesh (optional, use it if there are several
|
meshed source \b Face and the \b Mesh (It can be omitted only when
|
||||||
different meshes on the same face). It could also be necessary to
|
projecting a submesh on another one from the same global Mesh).
|
||||||
define the orientation of mesh on the face, which is done by
|
It could also be necessary to define the orientation of mesh on the face
|
||||||
indicating two <b>Source Vertices</b>, which belong to the same edge of the
|
, which is done by indicating two <b>Source Vertices</b>, which belong
|
||||||
source face, and two <b>Target Vertices</b>, which belong to the same edge of
|
to the same edge of the source face, and two <b>Target Vertices</b>, which
|
||||||
the created \b Face.
|
belong to the same edge of the created \b Face.
|
||||||
|
|
||||||
\n <b>Projection 3D</b> algorithm allows to define the mesh of a shape by
|
\n <b>Projection 3D</b> algorithm allows to define the mesh of a shape by
|
||||||
the projection of another already meshed shape. This algorithm works
|
the projection of another already meshed shape. This algorithm works
|
||||||
only if all faces and edges of the target face have been meshed as 1D
|
only if all faces and edges of the target shape have been meshed as 1D-2D
|
||||||
Projections of the faces and edges of the source face. Another
|
Projections of the faces and edges of the source shape. Another
|
||||||
limitation is that this algorithm currently works only on boxes.
|
limitation is that this algorithm currently works only on boxes.
|
||||||
|
|
||||||
To apply this algorithm select the solid to be meshed (indicated in
|
To apply this algorithm select the solid to be meshed (indicated in
|
||||||
@ -63,9 +64,9 @@ following dialog box will appear:
|
|||||||
\image html projection_3d.png
|
\image html projection_3d.png
|
||||||
|
|
||||||
In this menu you can define the \b Name of the algorithm, the already
|
In this menu you can define the \b Name of the algorithm, the already
|
||||||
meshed source <b>3D shape</b> and the \b Mesh (optional, use it if there are
|
meshed source <b>3D shape</b> and the \b Mesh (It can be omitted only when
|
||||||
several different meshes on the same shape). It could also be
|
projecting a submesh on another one from the same global Mesh).
|
||||||
necessary to define the orientation of mesh on the shape, which is
|
It could also be necessary to define the orientation of mesh on the shape, which is
|
||||||
done by indicating two <b>Source Vertices</b>, which belong to the same edge
|
done by indicating two <b>Source Vertices</b>, which belong to the same edge
|
||||||
of the source <b>3D Shape</b>, and two <b>Target Vertices</b>, which belong to the
|
of the source <b>3D Shape</b>, and two <b>Target Vertices</b>, which belong to the
|
||||||
same edge of the source <b>3D Shape</b>.
|
same edge of the source <b>3D Shape</b>.
|
||||||
|
40
doc/salome/gui/SMESH/input/scalar_bar.doc
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
/*!
|
||||||
|
|
||||||
|
\page scalar_bar_dlg Scalar Bar properties
|
||||||
|
|
||||||
|
In this dialog you can specify the properties of the scalar bar
|
||||||
|
|
||||||
|
\image html scalar_bar_dlg.png
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><b>Scalar Range</b> in this menu you can specify
|
||||||
|
<b>Min value</b> and <b>Max value</b> of the <b>Scalar Bar</b> </li>
|
||||||
|
|
||||||
|
<li><b>Font</b> - in this menu you can set type, face and color for
|
||||||
|
the font of <b>Title</b> and <b>Labels</b> of the <b>Scalar
|
||||||
|
Bar</b></li>
|
||||||
|
|
||||||
|
<li><b>Colors & Labels</b> - in this menu you can set the <b>number of
|
||||||
|
colors</b> and the <b>number of labels</b> of the <b>Scalar
|
||||||
|
Bar</b></li>
|
||||||
|
|
||||||
|
<li><b>Orientation</b> - allows choosing between vertical and
|
||||||
|
horizontal orientation of the <b>Scalar Bar</b></li>.
|
||||||
|
|
||||||
|
<li><b>Origin & Size Vertical & Horizontal</b> - allows defining the
|
||||||
|
location (<b>X</b> and <b>Y</b>) and size (<b>Width</b> and
|
||||||
|
<b>Height</b>) of <b>Scalar Bar</b></li>
|
||||||
|
<ul>
|
||||||
|
<li><b>X</b>: abscissa of the origin (from the left
|
||||||
|
side)</li>
|
||||||
|
<li><b>Y</b>: ordinate of the origin (from the bottom)</li>
|
||||||
|
</ul>
|
||||||
|
<li><b>Distribution</b> in this menu you can Show/Hide distribution histogram of the values of the <b>Scalar Bar</b> and specify histogram properties</li>
|
||||||
|
<ul>
|
||||||
|
<li><b>Multicolor</b> the histogram is colored as <b>Scalar Bar</b></li>
|
||||||
|
<li><b>Monocolor</b> the histogram is colored as selected with <b>Distribution color</b> selector</li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
@ -144,7 +144,14 @@ Additional criteria to select mesh <b>Faces</b> are the following:
|
|||||||
one element of mesh only. See also a
|
one element of mesh only. See also a
|
||||||
\ref free_edges_page "Free Edges quality control".
|
\ref free_edges_page "Free Edges quality control".
|
||||||
</li><li>
|
</li><li>
|
||||||
<b>Free faces</b> selects 3D mesh elements wich belong to less than two volumes.
|
<b>Free faces</b> selects 2D mesh elements wich belong to less than two volumes.
|
||||||
|
</li><li>
|
||||||
|
<b>Faces with bare border</b> selects 2D mesh elements having a free border without an edge on it.
|
||||||
|
See also \ref bare_border_faces_page "Bare border faces quality control".
|
||||||
|
</li><li>
|
||||||
|
<b>Over-constrained faces</b> selects 2D mesh elements having only one border shared
|
||||||
|
with other 2D elements.
|
||||||
|
See also \ref over_constrained_faces_page "Over-constrained faces quality control".
|
||||||
</li><li>
|
</li><li>
|
||||||
<b>Borders at Multi-Connections 2D</b> selects cells consisting of edges belonging to
|
<b>Borders at Multi-Connections 2D</b> selects cells consisting of edges belonging to
|
||||||
several elements of mesh. The number of mesh elements should be more, less or equal
|
several elements of mesh. The number of mesh elements should be more, less or equal
|
||||||
@ -187,6 +194,13 @@ diagonals with a value of length, which is more, less or equal
|
|||||||
</li><li>
|
</li><li>
|
||||||
<b>Bad oriented volume</b> selects mesh volumes, which are incorrectly oriented from
|
<b>Bad oriented volume</b> selects mesh volumes, which are incorrectly oriented from
|
||||||
the point of view of MED convention.
|
the point of view of MED convention.
|
||||||
|
</li><li>
|
||||||
|
<b>Over-constrained volumes</b> selects mesh volumes having only one border shared
|
||||||
|
with other volumes.
|
||||||
|
See also \ref over_constrained_volumes_page "Over-constrained volumes quality control".
|
||||||
|
</li><li>
|
||||||
|
<b>Volumes with bare border</b> selects 3D mesh elements having a free border without a face on it.
|
||||||
|
See also \ref bare_border_volumes_page "Bare border volumes quality control".
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -249,4 +249,48 @@ demonstrating the resulting mesh.
|
|||||||
\skipline import geompy
|
\skipline import geompy
|
||||||
\until #end
|
\until #end
|
||||||
|
|
||||||
|
<br>
|
||||||
|
\anchor tui_copy_mesh
|
||||||
|
<h2>Mesh Copying</h2>
|
||||||
|
\code
|
||||||
|
from smesh import *
|
||||||
|
SetCurrentStudy(salome.myStudy)
|
||||||
|
|
||||||
|
# make geometry of a box
|
||||||
|
box = geompy.MakeBoxDXDYDZ(100,100,100)
|
||||||
|
face = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])[0]
|
||||||
|
|
||||||
|
# generate 3D mesh
|
||||||
|
mesh = Mesh(box)
|
||||||
|
localAlgo = mesh.Triangle(face)
|
||||||
|
mesh.AutomaticHexahedralization()
|
||||||
|
|
||||||
|
# objects to copy
|
||||||
|
fGroup = mesh.GroupOnGeom( face, "2D on face")
|
||||||
|
nGroup = mesh.GroupOnGeom( face, "nodes on face", NODE)
|
||||||
|
subMesh = localAlgo.GetSubMesh()
|
||||||
|
|
||||||
|
# make a new mesh by copying different part of the mesh
|
||||||
|
|
||||||
|
# 1. copy the whole mesh
|
||||||
|
newMesh = CopyMesh( mesh, "whole mesh copy")
|
||||||
|
|
||||||
|
# 2. copy a group of 2D elements along with groups
|
||||||
|
newMesh = CopyMesh( fGroup, "face group copy with groups",toCopyGroups=True)
|
||||||
|
|
||||||
|
# 3. copy a group of nodes with preseving their ids
|
||||||
|
newMesh = CopyMesh( nGroup, "node group copy", toKeepIDs=True)
|
||||||
|
|
||||||
|
# 4. copy some faces
|
||||||
|
faceIds = fGroup.GetIDs()[-10:]
|
||||||
|
newMesh = CopyMesh( mesh.GetIDSource( faceIds, FACE ), "some faces copy")
|
||||||
|
|
||||||
|
# 5. copy some nodes
|
||||||
|
nodeIds = nGroup.GetIDs()[-10:]
|
||||||
|
newMesh = CopyMesh( mesh.GetIDSource( nodeIds, NODE), "some nodes copy")
|
||||||
|
|
||||||
|
# 6. copy a sub-mesh
|
||||||
|
newMesh = CopyMesh( subMesh, "submesh copy" )
|
||||||
|
\endcode
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
@ -90,7 +90,7 @@ Filter 2D mesh elements (faces) according to the minimum angle value:
|
|||||||
# create mesh
|
# create mesh
|
||||||
from SMESH_mechanic import *
|
from SMESH_mechanic import *
|
||||||
# get faces with minimum angle > 75
|
# get faces with minimum angle > 75
|
||||||
filter = smesh.GetFilter(smesh.FACE, smesh.FT_MinimumAngle, smesh.FT_MoreThan, 75)
|
filter = smesh.GetFilter(smesh.FACE, smesh.FT_MinimumAngle,">", 75)
|
||||||
ids = mesh.GetIdsFromFilter(filter)
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
print "Number of faces with minimum angle > 75:", len(ids)
|
print "Number of faces with minimum angle > 75:", len(ids)
|
||||||
\endcode
|
\endcode
|
||||||
@ -237,7 +237,7 @@ from SMESH_mechanic import *
|
|||||||
# add node
|
# add node
|
||||||
mesh.AddNode(0,0,0)
|
mesh.AddNode(0,0,0)
|
||||||
# get all free nodes
|
# get all free nodes
|
||||||
filter = smesh.GetFilter(smesh.EDGE, smesh.FT_FreeNodes)
|
filter = smesh.GetFilter(smesh.NODE, smesh.FT_FreeNodes)
|
||||||
ids = mesh.GetIdsFromFilter(filter)
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
print "Number of free nodes:", len(ids)
|
print "Number of free nodes:", len(ids)
|
||||||
\endcode
|
\endcode
|
||||||
@ -255,13 +255,69 @@ Filter free faces:
|
|||||||
# create mesh
|
# create mesh
|
||||||
from SMESH_mechanic import *
|
from SMESH_mechanic import *
|
||||||
# get all free faces
|
# get all free faces
|
||||||
filter = smesh.GetFilter(smesh.EDGE, smesh.FT_FreeFaces)
|
filter = smesh.GetFilter(smesh.FACE, smesh.FT_FreeFaces)
|
||||||
ids = mesh.GetIdsFromFilter(filter)
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
print "Number of free faces:", len(ids)
|
print "Number of free faces:", len(ids)
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
\sa \ref tui_free_faces
|
\sa \ref tui_free_faces
|
||||||
|
|
||||||
|
\section filter_bare_border_faces Bare border faces
|
||||||
|
|
||||||
|
Filter faces with bare borders:
|
||||||
|
- element type is \a smesh.FACE
|
||||||
|
- functor type is \a smesh.FT_BareBorderFace
|
||||||
|
- threshold value is not required
|
||||||
|
|
||||||
|
\code
|
||||||
|
# create mesh
|
||||||
|
from SMESH_mechanic import *
|
||||||
|
# remove some faces to have faces with bare borders
|
||||||
|
mesh.RemoveElements( mesh.GetElementsByType(FACE)[0:5] )
|
||||||
|
# get all faces bare borders
|
||||||
|
filter = smesh.GetFilter(smesh.FACE, smesh.FT_BareBorderFace)
|
||||||
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
|
print "Faces with bare borders:", ids
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa \ref tui_bare_border_faces
|
||||||
|
|
||||||
|
\section filter_coplanar_faces Coplanar faces
|
||||||
|
|
||||||
|
Filter faces with bare borders:
|
||||||
|
- element type is \a smesh.FACE
|
||||||
|
- functor type is \a smesh.FT_CoplanarFaces
|
||||||
|
- threshold value is the face ID
|
||||||
|
- tolerance is in degrees
|
||||||
|
|
||||||
|
\code
|
||||||
|
# create mesh
|
||||||
|
from SMESH_mechanic import *
|
||||||
|
faceID = mesh.GetElementsByType(FACE)[0]
|
||||||
|
# get all faces co-planar to the first face with tolerance 5 degrees
|
||||||
|
filter = smesh.GetFilter(smesh.FACE, smesh.FT_CoplanarFaces,faceID,Tolerance=5.0)
|
||||||
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
|
print "Number of faces coplanar with the first one:", len(ids)
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\section filter_over_constrained_faces Over-constrained faces
|
||||||
|
|
||||||
|
Filter over-constrained faces:
|
||||||
|
- element type is \a smesh.FACE
|
||||||
|
- functor type is \a smesh.FT_OverConstrainedFace
|
||||||
|
- threshold value is not required
|
||||||
|
|
||||||
|
\code
|
||||||
|
# create mesh
|
||||||
|
from SMESH_mechanic import *
|
||||||
|
# get all over-constrained faces
|
||||||
|
filter = smesh.GetFilter(smesh.FACE, smesh.FT_OverConstrainedFace)
|
||||||
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
|
print "Over-constrained faces:", ids
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa \ref tui_over_constrained_faces
|
||||||
|
|
||||||
\section filter_borders_multiconnection Borders at multi-connection
|
\section filter_borders_multiconnection Borders at multi-connection
|
||||||
|
|
||||||
Filter border 1D mesh elements (edges) according to the specified number of
|
Filter border 1D mesh elements (edges) according to the specified number of
|
||||||
@ -377,6 +433,48 @@ print "Number of volumes with maximum element length > 10:", len(ids)
|
|||||||
|
|
||||||
\sa \ref tui_max_element_length_3d
|
\sa \ref tui_max_element_length_3d
|
||||||
|
|
||||||
|
\section filter_bare_border_volumes Bare border volumes
|
||||||
|
|
||||||
|
Filter 3D mesh elements with bare borders:
|
||||||
|
- element type is \a smesh.VOLUME
|
||||||
|
- functor type is \a smesh.FT_BareBorderVolume
|
||||||
|
- threshold value is not required
|
||||||
|
|
||||||
|
\code
|
||||||
|
# create mesh
|
||||||
|
from SMESH_mechanic import *
|
||||||
|
mesh.Tetrahedron()
|
||||||
|
mesh.Compute()
|
||||||
|
# remove some volumes to have volumes with bare borders
|
||||||
|
mesh.RemoveElements( mesh.GetElementsByType(VOLUME)[0:5] )
|
||||||
|
# get all volumes with bare borders
|
||||||
|
filter = smesh.GetFilter(smesh.VOLUME, smesh.FT_BareBorderVolume)
|
||||||
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
|
print "Volumes with bare borders:", ids
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa \ref tui_bare_border_volumes
|
||||||
|
|
||||||
|
\section filter_over_constrained_volumes Over-constrained volumes
|
||||||
|
|
||||||
|
Filter over-constrained volumes:
|
||||||
|
- element type is \a smesh.VOLUME
|
||||||
|
- functor type is \a smesh.FT_OverConstrainedVolume
|
||||||
|
- threshold value is not required
|
||||||
|
|
||||||
|
\code
|
||||||
|
# create mesh
|
||||||
|
from SMESH_mechanic import *
|
||||||
|
mesh.Tetrahedron()
|
||||||
|
mesh.Compute()
|
||||||
|
# get all over-constrained volumes
|
||||||
|
filter = smesh.GetFilter(smesh.VOLUME, smesh.FT_OverConstrainedVolume)
|
||||||
|
ids = mesh.GetIdsFromFilter(filter)
|
||||||
|
print "Over-constrained volumes:", ids
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa \ref tui_over_constrained_faces
|
||||||
|
|
||||||
\section filter_belong_to_geom Belong to Geom
|
\section filter_belong_to_geom Belong to Geom
|
||||||
|
|
||||||
Filter mesh entities (nodes or elements) which all nodes lie on the
|
Filter mesh entities (nodes or elements) which all nodes lie on the
|
||||||
|
@ -309,6 +309,90 @@ aGroup.Add(aFaceIds)
|
|||||||
salome.sg.updateObjBrowser(1)
|
salome.sg.updateObjBrowser(1)
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
|
\section tui_bare_border_faces Bare border faces
|
||||||
|
|
||||||
|
\code
|
||||||
|
from smesh import *
|
||||||
|
SetCurrentStudy(salome.myStudy)
|
||||||
|
|
||||||
|
box = geompy.MakeBoxDXDYDZ(100, 100, 100)
|
||||||
|
geompy.addToStudy( box, "box" )
|
||||||
|
|
||||||
|
mesh = smesh.Mesh(box)
|
||||||
|
mesh.Segment().NumberOfSegments(3)
|
||||||
|
mesh.Quadrangle()
|
||||||
|
mesh.Compute()
|
||||||
|
|
||||||
|
# remove 2 faces
|
||||||
|
allFaces = mesh.GetElementsByType(FACE)
|
||||||
|
mesh.RemoveElements( allFaces[0:2])
|
||||||
|
|
||||||
|
bareGroup = mesh.MakeGroup("bare faces", FACE, FT_BareBorderFace)
|
||||||
|
assert(bareGroup.Size() == 3)
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\section tui_bare_border_volumes Bare border volumes
|
||||||
|
|
||||||
|
\code
|
||||||
|
from smesh import *
|
||||||
|
SetCurrentStudy(salome.myStudy)
|
||||||
|
|
||||||
|
box = geompy.MakeBoxDXDYDZ(100, 30, 10)
|
||||||
|
# the smallest face of the box
|
||||||
|
face = geompy.SubShapeAllSorted( box, geompy.ShapeType["FACE"])[0]
|
||||||
|
|
||||||
|
geompy.addToStudy( box, "box" )
|
||||||
|
geompy.addToStudyInFather( box, face, "face" )
|
||||||
|
|
||||||
|
mesh = Mesh(box)
|
||||||
|
mesh.AutomaticHexahedralization();
|
||||||
|
|
||||||
|
# remove half of mesh faces from the smallest face
|
||||||
|
faceFaces = mesh.GetSubMeshElementsId(face)
|
||||||
|
faceToRemove = faceFaces[: len(faceFaces)/2]
|
||||||
|
mesh.RemoveElements( faceToRemove )
|
||||||
|
|
||||||
|
# make a group of volumes missing the removed faces
|
||||||
|
bareGroup = mesh.MakeGroup("bare volumes", VOLUME, FT_BareBorderVolume)
|
||||||
|
assert(bareGroup.Size() == len( faceToRemove))
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\section tui_over_constrained_faces Over-constrained faces
|
||||||
|
\code
|
||||||
|
from smesh import *
|
||||||
|
SetCurrentStudy(salome.myStudy)
|
||||||
|
|
||||||
|
mesh = Mesh()
|
||||||
|
faceFilter = GetFilter(FACE,FT_OverConstrainedFace)
|
||||||
|
|
||||||
|
#make an edge
|
||||||
|
n1 = mesh.AddNode(0,0,0)
|
||||||
|
n2 = mesh.AddNode(10,0,0)
|
||||||
|
edge = mesh.AddEdge([n1,n2])
|
||||||
|
assert( not mesh.GetIdsFromFilter( faceFilter ))
|
||||||
|
|
||||||
|
# make faces
|
||||||
|
mesh.ExtrusionSweep([edge], MakeDirStruct(0,7,0), 5)
|
||||||
|
assert( 2 == len( mesh.GetIdsFromFilter( faceFilter )))
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\section tui_over_constrained_volumes Over-constrained volumes
|
||||||
|
\code
|
||||||
|
from smesh import *
|
||||||
|
SetCurrentStudy(salome.myStudy)
|
||||||
|
|
||||||
|
mesh = Mesh()
|
||||||
|
volumeFilter = GetFilter(VOLUME,FT_OverConstrainedVolume)
|
||||||
|
|
||||||
|
# make volumes by extrusion of one face
|
||||||
|
n1 = mesh.AddNode(0,0,0)
|
||||||
|
n2 = mesh.AddNode(10,0,0)
|
||||||
|
edge = mesh.AddEdge([n1,n2])
|
||||||
|
mesh.ExtrusionSweep([edge], MakeDirStruct(0,7,0), 1)
|
||||||
|
mesh.ExtrusionSweep( mesh.GetElementsByType(FACE), MakeDirStruct(0,0,5), 7)
|
||||||
|
assert( 2 == len( mesh.GetIdsFromFilter( volumeFilter )))
|
||||||
|
\endcode
|
||||||
|
|
||||||
\section tui_length_2d Length 2D
|
\section tui_length_2d Length 2D
|
||||||
|
|
||||||
\code
|
\code
|
||||||
|
@ -64,6 +64,10 @@ module SMESH
|
|||||||
FT_LyingOnGeom,
|
FT_LyingOnGeom,
|
||||||
FT_RangeOfIds,
|
FT_RangeOfIds,
|
||||||
FT_BadOrientedVolume,
|
FT_BadOrientedVolume,
|
||||||
|
FT_BareBorderVolume,
|
||||||
|
FT_BareBorderFace,
|
||||||
|
FT_OverConstrainedVolume,
|
||||||
|
FT_OverConstrainedFace,
|
||||||
FT_LinearOrQuadratic,
|
FT_LinearOrQuadratic,
|
||||||
FT_GroupColor,
|
FT_GroupColor,
|
||||||
FT_ElemGeomType,
|
FT_ElemGeomType,
|
||||||
@ -88,6 +92,7 @@ module SMESH
|
|||||||
};
|
};
|
||||||
typedef sequence<HistogramRectangle> Histogram;
|
typedef sequence<HistogramRectangle> Histogram;
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Base interface for all functors ( i.e. numerical functors and predicates )
|
* Base interface for all functors ( i.e. numerical functors and predicates )
|
||||||
*/
|
*/
|
||||||
@ -98,8 +103,6 @@ module SMESH
|
|||||||
ElementType GetElementType();
|
ElementType GetElementType();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Numerical functors are intended for calculating value by Id of mesh entity
|
* Numerical functors are intended for calculating value by Id of mesh entity
|
||||||
*/
|
*/
|
||||||
@ -150,6 +153,7 @@ module SMESH
|
|||||||
Values GetValues();
|
Values GetValues();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Predicates are intended for verification of criteria,
|
* Predicates are intended for verification of criteria,
|
||||||
* must return bool value by mesh id
|
* must return bool value by mesh id
|
||||||
@ -166,6 +170,29 @@ module SMESH
|
|||||||
*/
|
*/
|
||||||
interface BadOrientedVolume: Predicate {};
|
interface BadOrientedVolume: Predicate {};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Logical functor (predicate) "Volumes with bare border".
|
||||||
|
* Verify whether a mesh volume has a free facet without a mesh face on it
|
||||||
|
*/
|
||||||
|
interface BareBorderVolume: Predicate {};
|
||||||
|
/*!
|
||||||
|
* Logical functor (predicate) "Faces with bare border".
|
||||||
|
* Verify whether a mesh face has a side not shared with another face
|
||||||
|
* and without a mesh edge on it
|
||||||
|
*/
|
||||||
|
interface BareBorderFace: Predicate {};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Logical functor (predicate) "Over-constrained Volume"
|
||||||
|
* Verify whether a mesh volume has only one facet shared with other volumes
|
||||||
|
*/
|
||||||
|
interface OverConstrainedVolume: Predicate {};
|
||||||
|
/*!
|
||||||
|
* Logical functor (predicate) "Over-constrained Face".
|
||||||
|
* Verify whether a mesh face has only one border shared with other faces
|
||||||
|
*/
|
||||||
|
interface OverConstrainedFace: Predicate {};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Logical functor (predicate) "Belong To Geometry".
|
* Logical functor (predicate) "Belong To Geometry".
|
||||||
* Verify whether mesh element or node belong to pointed Geom Object
|
* Verify whether mesh element or node belong to pointed Geom Object
|
||||||
@ -503,6 +530,10 @@ module SMESH
|
|||||||
RangeOfIds CreateRangeOfIds();
|
RangeOfIds CreateRangeOfIds();
|
||||||
|
|
||||||
BadOrientedVolume CreateBadOrientedVolume();
|
BadOrientedVolume CreateBadOrientedVolume();
|
||||||
|
BareBorderVolume CreateBareBorderVolume();
|
||||||
|
BareBorderFace CreateBareBorderFace();
|
||||||
|
OverConstrainedVolume CreateOverConstrainedVolume();
|
||||||
|
OverConstrainedFace CreateOverConstrainedFace();
|
||||||
LinearOrQuadratic CreateLinearOrQuadratic();
|
LinearOrQuadratic CreateLinearOrQuadratic();
|
||||||
|
|
||||||
GroupColor CreateGroupColor();
|
GroupColor CreateGroupColor();
|
||||||
|
@ -221,10 +221,45 @@ module SMESH
|
|||||||
raises ( SALOME::SALOME_Exception );
|
raises ( SALOME::SALOME_Exception );
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Create a Mesh object, without a geometry shape reference
|
* Create a mesh by copying a part of another mesh
|
||||||
|
* \param meshPart - a part of mesh to copy
|
||||||
|
* \param meshName - a name of the new mesh
|
||||||
|
* \param toCopyGroups - to create in the new mesh groups
|
||||||
|
* the copied elements belongs to
|
||||||
|
* \param toKeepIDs - to preserve IDs of the copied elements or not
|
||||||
*/
|
*/
|
||||||
// SMESH_Mesh NewEmpty()
|
SMESH_Mesh CopyMesh(in SMESH_IDSource meshPart,
|
||||||
// raises ( SALOME::SALOME_Exception );
|
in string meshName,
|
||||||
|
in boolean toCopyGroups,
|
||||||
|
in boolean toKeepIDs)
|
||||||
|
raises ( SALOME::SALOME_Exception );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Concatenate the given meshes into one mesh.
|
||||||
|
* Union groups with the same name and type if
|
||||||
|
* theUniteIdenticalGroups flag is true.
|
||||||
|
* Merge coincident nodes and elements if
|
||||||
|
* theMergeNodesAndElements flag is true.
|
||||||
|
*/
|
||||||
|
SMESH_Mesh Concatenate(in mesh_array theMeshesArray,
|
||||||
|
in boolean theUniteIdenticalGroups,
|
||||||
|
in boolean theMergeNodesAndElements,
|
||||||
|
in double theMergeTolerance)
|
||||||
|
raises ( SALOME::SALOME_Exception );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Concatenate the given meshes into one mesh.
|
||||||
|
* Union groups with the same name and type if
|
||||||
|
* theUniteIdenticalGroups flag is true.
|
||||||
|
* Merge coincident nodes and elements if
|
||||||
|
* theMergeNodesAndElements flag is true.
|
||||||
|
* Create the groups of all elements from initial meshes.
|
||||||
|
*/
|
||||||
|
SMESH_Mesh ConcatenateWithGroups(in mesh_array theMeshesArray,
|
||||||
|
in boolean theUniteIdenticalGroups,
|
||||||
|
in boolean theMergeNodesAndElements,
|
||||||
|
in double theMergeTolerance)
|
||||||
|
raises ( SALOME::SALOME_Exception );
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Mesh a subShape.
|
* Mesh a subShape.
|
||||||
@ -309,33 +344,6 @@ module SMESH
|
|||||||
in long theElementID)
|
in long theElementID)
|
||||||
raises ( SALOME::SALOME_Exception );
|
raises ( SALOME::SALOME_Exception );
|
||||||
|
|
||||||
/*!
|
|
||||||
* Concatenate the given meshes into one mesh.
|
|
||||||
* Union groups with the same name and type if
|
|
||||||
* theUniteIdenticalGroups flag is true.
|
|
||||||
* Merge coincident nodes and elements if
|
|
||||||
* theMergeNodesAndElements flag is true.
|
|
||||||
*/
|
|
||||||
SMESH_Mesh Concatenate(in mesh_array theMeshesArray,
|
|
||||||
in boolean theUniteIdenticalGroups,
|
|
||||||
in boolean theMergeNodesAndElements,
|
|
||||||
in double theMergeTolerance)
|
|
||||||
raises ( SALOME::SALOME_Exception );
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* Concatenate the given meshes into one mesh.
|
|
||||||
* Union groups with the same name and type if
|
|
||||||
* theUniteIdenticalGroups flag is true.
|
|
||||||
* Merge coincident nodes and elements if
|
|
||||||
* theMergeNodesAndElements flag is true.
|
|
||||||
* Create the groups of all elements from initial meshes.
|
|
||||||
*/
|
|
||||||
SMESH_Mesh ConcatenateWithGroups(in mesh_array theMeshesArray,
|
|
||||||
in boolean theUniteIdenticalGroups,
|
|
||||||
in boolean theMergeNodesAndElements,
|
|
||||||
in double theMergeTolerance)
|
|
||||||
raises ( SALOME::SALOME_Exception );
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Return id of object, registered in current study context
|
* \brief Return id of object, registered in current study context
|
||||||
*
|
*
|
||||||
|
@ -107,6 +107,10 @@ dist_salomeres_DATA = \
|
|||||||
mesh_vertex_n.png \
|
mesh_vertex_n.png \
|
||||||
mesh_vertex.png \
|
mesh_vertex.png \
|
||||||
mesh_volume_3d.png \
|
mesh_volume_3d.png \
|
||||||
|
bare_border_volume.png \
|
||||||
|
bare_border_face.png \
|
||||||
|
over_constrained_volume.png \
|
||||||
|
over_constrained_face.png \
|
||||||
mesh_wireframe.png \
|
mesh_wireframe.png \
|
||||||
mesh_points.png \
|
mesh_points.png \
|
||||||
mesh_wrap.png \
|
mesh_wrap.png \
|
||||||
@ -173,6 +177,7 @@ dist_salomeres_DATA = \
|
|||||||
mesh_tree_hypo_projection_3d.png \
|
mesh_tree_hypo_projection_3d.png \
|
||||||
mesh_tree_hypo_projection_2d.png \
|
mesh_tree_hypo_projection_2d.png \
|
||||||
mesh_build_compound.png \
|
mesh_build_compound.png \
|
||||||
|
copy_mesh.png \
|
||||||
mesh_node_to_point.png \
|
mesh_node_to_point.png \
|
||||||
mesh_tree_mesh_partial.png \
|
mesh_tree_mesh_partial.png \
|
||||||
mesh_extractGroup.png \
|
mesh_extractGroup.png \
|
||||||
|
BIN
resources/bare_border_face.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
resources/bare_border_volume.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
resources/copy_mesh.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
resources/over_constrained_face.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
resources/over_constrained_volume.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
@ -310,12 +310,16 @@ double NumericalFunctor::GetValue( long theId )
|
|||||||
* \param nbIntervals - number of intervals
|
* \param nbIntervals - number of intervals
|
||||||
* \param nbEvents - number of mesh elements having values within i-th interval
|
* \param nbEvents - number of mesh elements having values within i-th interval
|
||||||
* \param funValues - boundaries of intervals
|
* \param funValues - boundaries of intervals
|
||||||
|
* \param elements - elements to check vulue of; empty list means "of all"
|
||||||
|
* \param minmax - boundaries of diapason of values to divide into intervals
|
||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
void NumericalFunctor::GetHistogram(int nbIntervals,
|
void NumericalFunctor::GetHistogram(int nbIntervals,
|
||||||
std::vector<int>& nbEvents,
|
std::vector<int>& nbEvents,
|
||||||
std::vector<double>& funValues)
|
std::vector<double>& funValues,
|
||||||
|
const vector<int>& elements,
|
||||||
|
const double* minmax)
|
||||||
{
|
{
|
||||||
if ( nbIntervals < 1 ||
|
if ( nbIntervals < 1 ||
|
||||||
!myMesh ||
|
!myMesh ||
|
||||||
@ -326,13 +330,30 @@ void NumericalFunctor::GetHistogram(int nbIntervals,
|
|||||||
|
|
||||||
// get all values sorted
|
// get all values sorted
|
||||||
std::multiset< double > values;
|
std::multiset< double > values;
|
||||||
|
if ( elements.empty() )
|
||||||
|
{
|
||||||
SMDS_ElemIteratorPtr elemIt = myMesh->elementsIterator(GetType());
|
SMDS_ElemIteratorPtr elemIt = myMesh->elementsIterator(GetType());
|
||||||
while ( elemIt->more() )
|
while ( elemIt->more() )
|
||||||
values.insert( GetValue( elemIt->next()->GetID() ));
|
values.insert( GetValue( elemIt->next()->GetID() ));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vector<int>::const_iterator id = elements.begin();
|
||||||
|
for ( ; id != elements.end(); ++id )
|
||||||
|
values.insert( GetValue( *id ));
|
||||||
|
}
|
||||||
|
|
||||||
// case nbIntervals == 1
|
if ( minmax )
|
||||||
|
{
|
||||||
|
funValues[0] = minmax[0];
|
||||||
|
funValues[nbIntervals] = minmax[1];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
funValues[0] = *values.begin();
|
funValues[0] = *values.begin();
|
||||||
funValues[nbIntervals] = *values.rbegin();
|
funValues[nbIntervals] = *values.rbegin();
|
||||||
|
}
|
||||||
|
// case nbIntervals == 1
|
||||||
if ( nbIntervals == 1 )
|
if ( nbIntervals == 1 )
|
||||||
{
|
{
|
||||||
nbEvents[0] = values.size();
|
nbEvents[0] = values.size();
|
||||||
@ -350,15 +371,21 @@ void NumericalFunctor::GetHistogram(int nbIntervals,
|
|||||||
std::multiset< double >::iterator min = values.begin(), max;
|
std::multiset< double >::iterator min = values.begin(), max;
|
||||||
for ( int i = 0; i < nbIntervals; ++i )
|
for ( int i = 0; i < nbIntervals; ++i )
|
||||||
{
|
{
|
||||||
|
// find end value of i-th interval
|
||||||
double r = (i+1) / double( nbIntervals );
|
double r = (i+1) / double( nbIntervals );
|
||||||
funValues[i+1] = funValues.front() * (1-r) + funValues.back() * r;
|
funValues[i+1] = funValues.front() * (1-r) + funValues.back() * r;
|
||||||
|
|
||||||
|
// count values in the i-th interval if there are any
|
||||||
if ( min != values.end() && *min <= funValues[i+1] )
|
if ( min != values.end() && *min <= funValues[i+1] )
|
||||||
{
|
{
|
||||||
max = values.upper_bound( funValues[i+1] ); // greater than funValues[i+1], or end()
|
// find the first value out of the interval
|
||||||
|
max = values.upper_bound( funValues[i+1] ); // max is greater than funValues[i+1], or end()
|
||||||
nbEvents[i] = std::distance( min, max );
|
nbEvents[i] = std::distance( min, max );
|
||||||
min = max;
|
min = max;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// add values larger than minmax[1]
|
||||||
|
nbEvents.back() += std::distance( min, values.end() );
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -1902,7 +1929,115 @@ SMDSAbs_ElementType BadOrientedVolume::GetType() const
|
|||||||
return SMDSAbs_Volume;
|
return SMDSAbs_Volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BareBorderVolume
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool BareBorderVolume::IsSatisfy(long theElementId )
|
||||||
|
{
|
||||||
|
SMDS_VolumeTool myTool;
|
||||||
|
if ( myTool.Set( myMesh->FindElement(theElementId)))
|
||||||
|
{
|
||||||
|
for ( int iF = 0; iF < myTool.NbFaces(); ++iF )
|
||||||
|
if ( myTool.IsFreeFace( iF ))
|
||||||
|
{
|
||||||
|
const SMDS_MeshNode** n = myTool.GetFaceNodes(iF);
|
||||||
|
vector< const SMDS_MeshNode*> nodes( n, n+myTool.NbFaceNodes(iF));
|
||||||
|
if ( !myMesh->FindElement( nodes, SMDSAbs_Face, /*Nomedium=*/false))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BareBorderFace
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool BareBorderFace::IsSatisfy(long theElementId )
|
||||||
|
{
|
||||||
|
if ( const SMDS_MeshElement* face = myMesh->FindElement(theElementId))
|
||||||
|
if ( face->GetType() == SMDSAbs_Face )
|
||||||
|
{
|
||||||
|
int nbN = face->NbCornerNodes();
|
||||||
|
for ( int i = 0; i < nbN; ++i )
|
||||||
|
{
|
||||||
|
// check if a link is shared by another face
|
||||||
|
const SMDS_MeshNode* n1 = face->GetNode( i );
|
||||||
|
const SMDS_MeshNode* n2 = face->GetNode( (i+1)%nbN );
|
||||||
|
SMDS_ElemIteratorPtr fIt = n1->GetInverseElementIterator( SMDSAbs_Face );
|
||||||
|
bool isShared = false;
|
||||||
|
while ( !isShared && fIt->more() )
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement* f = fIt->next();
|
||||||
|
isShared = ( f != face && f->GetNodeIndex(n2) != -1 );
|
||||||
|
}
|
||||||
|
if ( !isShared )
|
||||||
|
{
|
||||||
|
myLinkNodes.resize( 2 + face->IsQuadratic());
|
||||||
|
myLinkNodes[0] = n1;
|
||||||
|
myLinkNodes[1] = n2;
|
||||||
|
if ( face->IsQuadratic() )
|
||||||
|
myLinkNodes[2] = face->GetNode( i+nbN );
|
||||||
|
return !myMesh->FindElement( myLinkNodes, SMDSAbs_Edge, /*noMedium=*/false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : OverConstrainedVolume
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool OverConstrainedVolume::IsSatisfy(long theElementId )
|
||||||
|
{
|
||||||
|
// An element is over-constrained if it has N-1 free borders where
|
||||||
|
// N is the number of edges/faces for a 2D/3D element.
|
||||||
|
SMDS_VolumeTool myTool;
|
||||||
|
if ( myTool.Set( myMesh->FindElement(theElementId)))
|
||||||
|
{
|
||||||
|
int nbSharedFaces = 0;
|
||||||
|
for ( int iF = 0; iF < myTool.NbFaces(); ++iF )
|
||||||
|
if ( !myTool.IsFreeFace( iF ) && ++nbSharedFaces > 1 )
|
||||||
|
break;
|
||||||
|
return ( nbSharedFaces == 1 );
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : OverConstrainedFace
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool OverConstrainedFace::IsSatisfy(long theElementId )
|
||||||
|
{
|
||||||
|
// An element is over-constrained if it has N-1 free borders where
|
||||||
|
// N is the number of edges/faces for a 2D/3D element.
|
||||||
|
if ( const SMDS_MeshElement* face = myMesh->FindElement(theElementId))
|
||||||
|
if ( face->GetType() == SMDSAbs_Face )
|
||||||
|
{
|
||||||
|
int nbSharedBorders = 0;
|
||||||
|
int nbN = face->NbCornerNodes();
|
||||||
|
for ( int i = 0; i < nbN; ++i )
|
||||||
|
{
|
||||||
|
// check if a link is shared by another face
|
||||||
|
const SMDS_MeshNode* n1 = face->GetNode( i );
|
||||||
|
const SMDS_MeshNode* n2 = face->GetNode( (i+1)%nbN );
|
||||||
|
SMDS_ElemIteratorPtr fIt = n1->GetInverseElementIterator( SMDSAbs_Face );
|
||||||
|
bool isShared = false;
|
||||||
|
while ( !isShared && fIt->more() )
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement* f = fIt->next();
|
||||||
|
isShared = ( f != face && f->GetNodeIndex(n2) != -1 );
|
||||||
|
}
|
||||||
|
if ( isShared && ++nbSharedBorders > 1 )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ( nbSharedBorders == 1 );
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class : FreeBorders
|
Class : FreeBorders
|
||||||
|
@ -129,7 +129,9 @@ namespace SMESH{
|
|||||||
virtual double GetValue(const TSequenceOfXYZ& thePoints) { return -1.0;};
|
virtual double GetValue(const TSequenceOfXYZ& thePoints) { return -1.0;};
|
||||||
void GetHistogram(int nbIntervals,
|
void GetHistogram(int nbIntervals,
|
||||||
std::vector<int>& nbEvents,
|
std::vector<int>& nbEvents,
|
||||||
std::vector<double>& funValues);
|
std::vector<double>& funValues,
|
||||||
|
const std::vector<int>& elements,
|
||||||
|
const double* minmax=0);
|
||||||
virtual SMDSAbs_ElementType GetType() const = 0;
|
virtual SMDSAbs_ElementType GetType() const = 0;
|
||||||
virtual double GetBadRate( double Value, int nbNodes ) const = 0;
|
virtual double GetBadRate( double Value, int nbNodes ) const = 0;
|
||||||
long GetPrecision() const;
|
long GetPrecision() const;
|
||||||
@ -378,6 +380,67 @@ namespace SMESH{
|
|||||||
const SMDS_Mesh* myMesh;
|
const SMDS_Mesh* myMesh;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
BareBorderVolume
|
||||||
|
*/
|
||||||
|
class SMESHCONTROLS_EXPORT BareBorderVolume: public Predicate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BareBorderVolume():myMesh(0) {}
|
||||||
|
virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; }
|
||||||
|
virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Volume; }
|
||||||
|
virtual bool IsSatisfy( long theElementId );
|
||||||
|
protected:
|
||||||
|
const SMDS_Mesh* myMesh;
|
||||||
|
};
|
||||||
|
typedef boost::shared_ptr<BareBorderVolume> BareBorderVolumePtr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
BareBorderFace
|
||||||
|
*/
|
||||||
|
class SMESHCONTROLS_EXPORT BareBorderFace: public Predicate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BareBorderFace():myMesh(0) {}
|
||||||
|
virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; }
|
||||||
|
virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Face; }
|
||||||
|
virtual bool IsSatisfy( long theElementId );
|
||||||
|
protected:
|
||||||
|
const SMDS_Mesh* myMesh;
|
||||||
|
std::vector< const SMDS_MeshNode* > myLinkNodes;
|
||||||
|
};
|
||||||
|
typedef boost::shared_ptr<BareBorderFace> BareBorderFacePtr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
OverConstrainedVolume
|
||||||
|
*/
|
||||||
|
class SMESHCONTROLS_EXPORT OverConstrainedVolume: public Predicate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OverConstrainedVolume():myMesh(0) {}
|
||||||
|
virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; }
|
||||||
|
virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Volume; }
|
||||||
|
virtual bool IsSatisfy( long theElementId );
|
||||||
|
protected:
|
||||||
|
const SMDS_Mesh* myMesh;
|
||||||
|
};
|
||||||
|
typedef boost::shared_ptr<OverConstrainedVolume> OverConstrainedVolumePtr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
OverConstrainedFace
|
||||||
|
*/
|
||||||
|
class SMESHCONTROLS_EXPORT OverConstrainedFace: public Predicate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OverConstrainedFace():myMesh(0) {}
|
||||||
|
virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; }
|
||||||
|
virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Face; }
|
||||||
|
virtual bool IsSatisfy( long theElementId );
|
||||||
|
protected:
|
||||||
|
const SMDS_Mesh* myMesh;
|
||||||
|
std::vector< const SMDS_MeshNode* > myLinkNodes;
|
||||||
|
};
|
||||||
|
typedef boost::shared_ptr<OverConstrainedFace> OverConstrainedFacePtr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class : FreeEdges
|
Class : FreeEdges
|
||||||
|
@ -204,6 +204,25 @@ SMESH_ActorDef::SMESH_ActorDef()
|
|||||||
aFilter->RegisterCellsWithType(VTK_POLYHEDRON);
|
aFilter->RegisterCellsWithType(VTK_POLYHEDRON);
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
|
my3DExtActor = SMESH_DeviceActor::New();
|
||||||
|
my3DExtActor->SetUserMatrix(aMatrix);
|
||||||
|
my3DExtActor->PickableOff();
|
||||||
|
my3DExtActor->SetProperty(my2DExtProp);
|
||||||
|
my3DExtActor->SetBackfaceProperty(my2DExtProp);
|
||||||
|
my3DExtActor->SetRepresentation(SMESH_DeviceActor::eSurface);
|
||||||
|
aFilter = my3DExtActor->GetExtractUnstructuredGrid();
|
||||||
|
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_TETRA);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_VOXEL);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_WEDGE);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_PYRAMID);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
|
||||||
|
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
|
||||||
|
|
||||||
//Definition 1D device of the actor
|
//Definition 1D device of the actor
|
||||||
//---------------------------------
|
//---------------------------------
|
||||||
myEdgeProp = vtkProperty::New();
|
myEdgeProp = vtkProperty::New();
|
||||||
@ -537,6 +556,7 @@ SMESH_ActorDef::~SMESH_ActorDef()
|
|||||||
my2DExtProp->Delete();
|
my2DExtProp->Delete();
|
||||||
my2DExtActor->Delete();
|
my2DExtActor->Delete();
|
||||||
my3DActor->Delete();
|
my3DActor->Delete();
|
||||||
|
my3DExtActor->Delete();
|
||||||
|
|
||||||
myNodeActor->Delete();
|
myNodeActor->Delete();
|
||||||
myBaseActor->Delete();
|
myBaseActor->Delete();
|
||||||
@ -760,6 +780,14 @@ SetControlMode(eControl theMode,
|
|||||||
myFunctor.reset(new SMESH::Controls::FreeFaces());
|
myFunctor.reset(new SMESH::Controls::FreeFaces());
|
||||||
myControlActor = my2DActor;
|
myControlActor = my2DActor;
|
||||||
break;
|
break;
|
||||||
|
case eBareBorderFace:
|
||||||
|
myFunctor.reset(new SMESH::Controls::BareBorderFace());
|
||||||
|
myControlActor = my2DActor;
|
||||||
|
break;
|
||||||
|
case eOverConstrainedFace:
|
||||||
|
myFunctor.reset(new SMESH::Controls::OverConstrainedFace());
|
||||||
|
myControlActor = my2DActor;
|
||||||
|
break;
|
||||||
case eMultiConnection:
|
case eMultiConnection:
|
||||||
myFunctor.reset(new SMESH::Controls::MultiConnection());
|
myFunctor.reset(new SMESH::Controls::MultiConnection());
|
||||||
myControlActor = my1DActor;
|
myControlActor = my1DActor;
|
||||||
@ -824,6 +852,18 @@ SetControlMode(eControl theMode,
|
|||||||
myControlActor = my3DActor;
|
myControlActor = my3DActor;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case eBareBorderVolume:
|
||||||
|
{
|
||||||
|
myFunctor.reset(new SMESH::Controls::BareBorderVolume());
|
||||||
|
myControlActor = my3DActor;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case eOverConstrainedVolume:
|
||||||
|
{
|
||||||
|
myFunctor.reset(new SMESH::Controls::OverConstrainedVolume());
|
||||||
|
myControlActor = my3DActor;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case eMinimumAngle:
|
case eMinimumAngle:
|
||||||
{
|
{
|
||||||
SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
|
SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
|
||||||
@ -865,14 +905,22 @@ SetControlMode(eControl theMode,
|
|||||||
my1DExtActor->SetExtControlMode(myFunctor);
|
my1DExtActor->SetExtControlMode(myFunctor);
|
||||||
break;
|
break;
|
||||||
case eFreeFaces:
|
case eFreeFaces:
|
||||||
|
case eBareBorderFace:
|
||||||
|
case eOverConstrainedFace:
|
||||||
my2DExtActor->SetExtControlMode(myFunctor);
|
my2DExtActor->SetExtControlMode(myFunctor);
|
||||||
break;
|
break;
|
||||||
|
case eBareBorderVolume:
|
||||||
|
case eOverConstrainedVolume:
|
||||||
|
my3DExtActor->SetExtControlMode(myFunctor);
|
||||||
|
break;
|
||||||
case eLength2D:
|
case eLength2D:
|
||||||
case eMultiConnection2D:
|
case eMultiConnection2D:
|
||||||
my1DExtActor->SetExtControlMode(myFunctor,myScalarBarActor,myLookupTable);
|
my1DExtActor->SetExtControlMode(myFunctor,myScalarBarActor,myLookupTable);
|
||||||
|
UpdateDistribution();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
myControlActor->SetControlMode(myFunctor,myScalarBarActor,myLookupTable);
|
myControlActor->SetControlMode(myFunctor,myScalarBarActor,myLookupTable);
|
||||||
|
UpdateDistribution();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -916,6 +964,7 @@ void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){
|
|||||||
theRenderer->AddActor(myNodeExtActor);
|
theRenderer->AddActor(myNodeExtActor);
|
||||||
|
|
||||||
my3DActor->AddToRender(theRenderer);
|
my3DActor->AddToRender(theRenderer);
|
||||||
|
my3DExtActor->AddToRender(theRenderer);
|
||||||
my2DActor->AddToRender(theRenderer);
|
my2DActor->AddToRender(theRenderer);
|
||||||
my2DExtActor->AddToRender(theRenderer);
|
my2DExtActor->AddToRender(theRenderer);
|
||||||
|
|
||||||
@ -959,6 +1008,7 @@ void SMESH_ActorDef::RemoveFromRender(vtkRenderer* theRenderer){
|
|||||||
my2DActor->RemoveFromRender(theRenderer);
|
my2DActor->RemoveFromRender(theRenderer);
|
||||||
my2DExtActor->RemoveFromRender(theRenderer);
|
my2DExtActor->RemoveFromRender(theRenderer);
|
||||||
my3DActor->RemoveFromRender(theRenderer);
|
my3DActor->RemoveFromRender(theRenderer);
|
||||||
|
my3DExtActor->RemoveFromRender(theRenderer);
|
||||||
|
|
||||||
theRenderer->RemoveActor(myScalarBarActor);
|
theRenderer->RemoveActor(myScalarBarActor);
|
||||||
theRenderer->RemoveActor(myPointLabels);
|
theRenderer->RemoveActor(myPointLabels);
|
||||||
@ -994,6 +1044,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
|
|||||||
my2DActor->Init(myVisualObj,myImplicitBoolean);
|
my2DActor->Init(myVisualObj,myImplicitBoolean);
|
||||||
my2DExtActor->Init(myVisualObj,myImplicitBoolean);
|
my2DExtActor->Init(myVisualObj,myImplicitBoolean);
|
||||||
my3DActor->Init(myVisualObj,myImplicitBoolean);
|
my3DActor->Init(myVisualObj,myImplicitBoolean);
|
||||||
|
my3DExtActor->Init(myVisualObj,myImplicitBoolean);
|
||||||
|
|
||||||
my0DActor->GetMapper()->SetLookupTable(myLookupTable);
|
my0DActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||||
//my0DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
//my0DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||||
@ -1004,6 +1055,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
|
|||||||
my2DActor->GetMapper()->SetLookupTable(myLookupTable);
|
my2DActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||||
my2DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
my2DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||||
my3DActor->GetMapper()->SetLookupTable(myLookupTable);
|
my3DActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||||
|
my3DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
||||||
|
|
||||||
vtkFloatingPointType aFactor, aUnits;
|
vtkFloatingPointType aFactor, aUnits;
|
||||||
my2DActor->GetPolygonOffsetParameters(aFactor,aUnits);
|
my2DActor->GetPolygonOffsetParameters(aFactor,aUnits);
|
||||||
@ -1076,6 +1128,7 @@ void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){
|
|||||||
my2DActor->SetTransform(theTransform);
|
my2DActor->SetTransform(theTransform);
|
||||||
my2DExtActor->SetTransform(theTransform);
|
my2DExtActor->SetTransform(theTransform);
|
||||||
my3DActor->SetTransform(theTransform);
|
my3DActor->SetTransform(theTransform);
|
||||||
|
my3DExtActor->SetTransform(theTransform);
|
||||||
|
|
||||||
Modified();
|
Modified();
|
||||||
}
|
}
|
||||||
@ -1131,6 +1184,7 @@ void SMESH_ActorDef::SetShrinkFactor(vtkFloatingPointType theValue){
|
|||||||
my2DActor->SetShrinkFactor(theValue);
|
my2DActor->SetShrinkFactor(theValue);
|
||||||
my2DExtActor->SetShrinkFactor(theValue);
|
my2DExtActor->SetShrinkFactor(theValue);
|
||||||
my3DActor->SetShrinkFactor(theValue);
|
my3DActor->SetShrinkFactor(theValue);
|
||||||
|
my3DExtActor->SetShrinkFactor(theValue);
|
||||||
|
|
||||||
Modified();
|
Modified();
|
||||||
}
|
}
|
||||||
@ -1146,6 +1200,7 @@ void SMESH_ActorDef::SetShrink(){
|
|||||||
my2DActor->SetShrink();
|
my2DActor->SetShrink();
|
||||||
my2DExtActor->SetShrink();
|
my2DExtActor->SetShrink();
|
||||||
my3DActor->SetShrink();
|
my3DActor->SetShrink();
|
||||||
|
my3DExtActor->SetShrink();
|
||||||
|
|
||||||
myIsShrunk = true;
|
myIsShrunk = true;
|
||||||
Modified();
|
Modified();
|
||||||
@ -1162,6 +1217,7 @@ void SMESH_ActorDef::UnShrink(){
|
|||||||
my2DActor->UnShrink();
|
my2DActor->UnShrink();
|
||||||
my2DExtActor->UnShrink();
|
my2DExtActor->UnShrink();
|
||||||
my3DActor->UnShrink();
|
my3DActor->UnShrink();
|
||||||
|
my3DExtActor->UnShrink();
|
||||||
|
|
||||||
myIsShrunk = false;
|
myIsShrunk = false;
|
||||||
Modified();
|
Modified();
|
||||||
@ -1208,6 +1264,7 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
|
|||||||
my2DActor->VisibilityOff();
|
my2DActor->VisibilityOff();
|
||||||
my2DExtActor->VisibilityOff();
|
my2DExtActor->VisibilityOff();
|
||||||
my3DActor->VisibilityOff();
|
my3DActor->VisibilityOff();
|
||||||
|
my3DExtActor->VisibilityOff();
|
||||||
|
|
||||||
myScalarBarActor->VisibilityOff();
|
myScalarBarActor->VisibilityOff();
|
||||||
myPointLabels->VisibilityOff();
|
myPointLabels->VisibilityOff();
|
||||||
@ -1227,8 +1284,14 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
|
|||||||
my1DExtActor->VisibilityOn();
|
my1DExtActor->VisibilityOn();
|
||||||
break;
|
break;
|
||||||
case eFreeFaces:
|
case eFreeFaces:
|
||||||
|
case eBareBorderFace:
|
||||||
|
case eOverConstrainedFace:
|
||||||
my2DExtActor->VisibilityOn();
|
my2DExtActor->VisibilityOn();
|
||||||
break;
|
break;
|
||||||
|
case eBareBorderVolume:
|
||||||
|
case eOverConstrainedVolume:
|
||||||
|
my3DExtActor->VisibilityOn();
|
||||||
|
break;
|
||||||
case eLength2D:
|
case eLength2D:
|
||||||
case eMultiConnection2D:
|
case eMultiConnection2D:
|
||||||
my1DExtActor->VisibilityOn();
|
my1DExtActor->VisibilityOn();
|
||||||
@ -1467,6 +1530,7 @@ void SMESH_ActorDef::SetRepresentation (int theMode)
|
|||||||
//my0DExtActor->SetVisibility(false);
|
//my0DExtActor->SetVisibility(false);
|
||||||
my1DExtActor->SetVisibility(false);
|
my1DExtActor->SetVisibility(false);
|
||||||
my2DExtActor->SetVisibility(false);
|
my2DExtActor->SetVisibility(false);
|
||||||
|
my3DExtActor->SetVisibility(false);
|
||||||
|
|
||||||
// ???
|
// ???
|
||||||
//my0DActor->SetProperty(aProp);
|
//my0DActor->SetProperty(aProp);
|
||||||
@ -1797,6 +1861,7 @@ SMESH_ActorDef::SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed)
|
|||||||
my2DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
my2DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||||
my2DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
my2DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||||
my3DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
my3DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||||
|
my3DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkIdType
|
vtkIdType
|
||||||
@ -1968,6 +2033,27 @@ void SMESH_ActorDef::UpdateScalarBar()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SMESH_ActorDef::UpdateDistribution()
|
||||||
|
{
|
||||||
|
if(SMESH::Controls::NumericalFunctor* fun =
|
||||||
|
dynamic_cast<SMESH::Controls::NumericalFunctor*>(myFunctor.get()))
|
||||||
|
{
|
||||||
|
int nbIntervals = myScalarBarActor->GetMaximumNumberOfColors();
|
||||||
|
std::vector<int> nbEvents;
|
||||||
|
std::vector<double> funValues;
|
||||||
|
SMESH_VisualObjDef::TEntityList elems;
|
||||||
|
if ( ! dynamic_cast<SMESH_MeshObj*>(myVisualObj.get()))
|
||||||
|
dynamic_cast<SMESH_VisualObjDef*>(myVisualObj.get())->GetEntities( fun->GetType(), elems );
|
||||||
|
std::vector<int> elemIds;
|
||||||
|
for ( SMESH_VisualObjDef::TEntityList::iterator e = elems.begin(); e != elems.end(); ++e)
|
||||||
|
elemIds.push_back( (*e)->GetID());
|
||||||
|
vtkLookupTable* lookupTable = static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
|
||||||
|
double * range = lookupTable->GetRange();
|
||||||
|
fun->GetHistogram(nbIntervals, nbEvents, funValues, elemIds, range);
|
||||||
|
myScalarBarActor->SetDistribution(nbEvents);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SMESH_ActorDef::SetQuadratic2DRepresentation(EQuadratic2DRepresentation theMode)
|
void SMESH_ActorDef::SetQuadratic2DRepresentation(EQuadratic2DRepresentation theMode)
|
||||||
{
|
{
|
||||||
switch(theMode) {
|
switch(theMode) {
|
||||||
|
@ -123,7 +123,8 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
|
|||||||
enum eControl{eNone, eLength, eLength2D, eFreeBorders, eFreeEdges, eFreeNodes,
|
enum eControl{eNone, eLength, eLength2D, eFreeBorders, eFreeEdges, eFreeNodes,
|
||||||
eFreeFaces, eMultiConnection, eArea, eTaper, eAspectRatio,
|
eFreeFaces, eMultiConnection, eArea, eTaper, eAspectRatio,
|
||||||
eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D,
|
eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D,
|
||||||
eMaxElementLength2D, eMaxElementLength3D};
|
eMaxElementLength2D, eMaxElementLength3D, eBareBorderFace, eBareBorderVolume,
|
||||||
|
eOverConstrainedFace, eOverConstrainedVolume};
|
||||||
virtual void SetControlMode(eControl theMode) = 0;
|
virtual void SetControlMode(eControl theMode) = 0;
|
||||||
virtual eControl GetControlMode() = 0;
|
virtual eControl GetControlMode() = 0;
|
||||||
virtual SMESH::Controls::FunctorPtr GetFunctor() = 0;
|
virtual SMESH::Controls::FunctorPtr GetFunctor() = 0;
|
||||||
@ -141,6 +142,7 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
|
|||||||
virtual long GetControlsPrecision() const = 0;
|
virtual long GetControlsPrecision() const = 0;
|
||||||
|
|
||||||
virtual void UpdateScalarBar() = 0;
|
virtual void UpdateScalarBar() = 0;
|
||||||
|
virtual void UpdateDistribution() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -196,6 +196,7 @@ class SMESH_ActorDef : public SMESH_Actor
|
|||||||
virtual long GetControlsPrecision() const { return myControlsPrecision; }
|
virtual long GetControlsPrecision() const { return myControlsPrecision; }
|
||||||
|
|
||||||
virtual void UpdateScalarBar();
|
virtual void UpdateScalarBar();
|
||||||
|
virtual void UpdateDistribution();
|
||||||
|
|
||||||
|
|
||||||
virtual void SetQuadratic2DRepresentation(EQuadratic2DRepresentation);
|
virtual void SetQuadratic2DRepresentation(EQuadratic2DRepresentation);
|
||||||
@ -234,6 +235,7 @@ class SMESH_ActorDef : public SMESH_Actor
|
|||||||
SMESH_DeviceActor* my2DActor;
|
SMESH_DeviceActor* my2DActor;
|
||||||
SMESH_DeviceActor* my2DExtActor;
|
SMESH_DeviceActor* my2DExtActor;
|
||||||
SMESH_DeviceActor* my3DActor;
|
SMESH_DeviceActor* my3DActor;
|
||||||
|
SMESH_DeviceActor* my3DExtActor;
|
||||||
SMESH_DeviceActor* myControlActor;
|
SMESH_DeviceActor* myControlActor;
|
||||||
|
|
||||||
vtkProperty* myNodeExtProp;
|
vtkProperty* myNodeExtProp;
|
||||||
|
@ -310,12 +310,6 @@ SMESH_DeviceActor
|
|||||||
double aValue = aNumericalFunctor->GetValue(anObjId);
|
double aValue = aNumericalFunctor->GetValue(anObjId);
|
||||||
aScalars->SetValue(i,aValue);
|
aScalars->SetValue(i,aValue);
|
||||||
}
|
}
|
||||||
int nbIntervals = theScalarBarActor->GetMaximumNumberOfColors();
|
|
||||||
std::vector<int> nbEvents;
|
|
||||||
std::vector<double> funValues;
|
|
||||||
aNumericalFunctor->GetHistogram(nbIntervals, nbEvents, funValues);
|
|
||||||
theScalarBarActor->SetDistribution(nbEvents);
|
|
||||||
|
|
||||||
}else if(Predicate* aPredicate = dynamic_cast<Predicate*>(theFunctor.get())){
|
}else if(Predicate* aPredicate = dynamic_cast<Predicate*>(theFunctor.get())){
|
||||||
for(vtkIdType i = 0; i < aNbCells; i++){
|
for(vtkIdType i = 0; i < aNbCells; i++){
|
||||||
vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i);
|
vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i);
|
||||||
@ -475,16 +469,6 @@ SMESH_DeviceActor
|
|||||||
myMergeFilter->SetScalars(aDataSet);
|
myMergeFilter->SetScalars(aDataSet);
|
||||||
aDataSet->Delete();
|
aDataSet->Delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set Distribution
|
|
||||||
if(NumericalFunctor* aNumericalFunctor = dynamic_cast<NumericalFunctor*>(theFunctor.get())){
|
|
||||||
int nbIntervals = theScalarBarActor->GetMaximumNumberOfColors();
|
|
||||||
std::vector<int> nbEvents;
|
|
||||||
std::vector<double> funValues;
|
|
||||||
aNumericalFunctor->GetHistogram(nbIntervals, nbEvents, funValues);
|
|
||||||
theScalarBarActor->SetDistribution(nbEvents);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
GetMapper()->SetScalarVisibility(anIsInitialized);
|
GetMapper()->SetScalarVisibility(anIsInitialized);
|
||||||
theScalarBarActor->SetVisibility(anIsInitialized);
|
theScalarBarActor->SetVisibility(anIsInitialized);
|
||||||
@ -501,7 +485,12 @@ SMESH_DeviceActor
|
|||||||
|
|
||||||
using namespace SMESH::Controls;
|
using namespace SMESH::Controls;
|
||||||
if ( dynamic_cast<FreeBorders *>(theFunctor.get()) ||
|
if ( dynamic_cast<FreeBorders *>(theFunctor.get()) ||
|
||||||
dynamic_cast<FreeFaces*>(theFunctor.get()) ) {
|
dynamic_cast<FreeFaces *>(theFunctor.get()) ||
|
||||||
|
dynamic_cast<BareBorderVolume *>(theFunctor.get()) ||
|
||||||
|
dynamic_cast<BareBorderFace *>(theFunctor.get()) ||
|
||||||
|
dynamic_cast<OverConstrainedVolume*>(theFunctor.get()) ||
|
||||||
|
dynamic_cast<OverConstrainedFace *>(theFunctor.get()))
|
||||||
|
{
|
||||||
Predicate* aFreePredicate = dynamic_cast<Predicate*>(theFunctor.get());
|
Predicate* aFreePredicate = dynamic_cast<Predicate*>(theFunctor.get());
|
||||||
myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
||||||
vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid();
|
vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid();
|
||||||
@ -514,7 +503,9 @@ SMESH_DeviceActor
|
|||||||
if(!myExtractUnstructuredGrid->IsCellsRegistered())
|
if(!myExtractUnstructuredGrid->IsCellsRegistered())
|
||||||
myExtractUnstructuredGrid->RegisterCell(-1);
|
myExtractUnstructuredGrid->RegisterCell(-1);
|
||||||
SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid());
|
SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid());
|
||||||
}else if(FreeEdges* aFreeEdges = dynamic_cast<FreeEdges*>(theFunctor.get())){
|
}
|
||||||
|
else if(FreeEdges* aFreeEdges = dynamic_cast<FreeEdges*>(theFunctor.get()))
|
||||||
|
{
|
||||||
SMESH::Controls::FreeEdges::TBorders aBorders;
|
SMESH::Controls::FreeEdges::TBorders aBorders;
|
||||||
aFreeEdges->GetBoreders(aBorders);
|
aFreeEdges->GetBoreders(aBorders);
|
||||||
vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New();
|
vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New();
|
||||||
@ -561,7 +552,9 @@ SMESH_DeviceActor
|
|||||||
|
|
||||||
SetUnstructuredGrid(aDataSet);
|
SetUnstructuredGrid(aDataSet);
|
||||||
aDataSet->Delete();
|
aDataSet->Delete();
|
||||||
}else if(FreeNodes* aFreeNodes = dynamic_cast<FreeNodes*>(theFunctor.get())){
|
}
|
||||||
|
else if(FreeNodes* aFreeNodes = dynamic_cast<FreeNodes*>(theFunctor.get()))
|
||||||
|
{
|
||||||
myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
||||||
vtkIdType aNbNodes = myVisualObj->GetNbEntities(SMDSAbs_Node);
|
vtkIdType aNbNodes = myVisualObj->GetNbEntities(SMDSAbs_Node);
|
||||||
for( vtkIdType i = 0; i < aNbNodes; i++ ){
|
for( vtkIdType i = 0; i < aNbNodes; i++ ){
|
||||||
|
@ -101,7 +101,7 @@ bool SMESH_PreviewActorsCollection::Init( const TopoDS_Shape& theShape, TopAbs_S
|
|||||||
int index = myMapOfShapes.FindIndex( exp.Current() );
|
int index = myMapOfShapes.FindIndex( exp.Current() );
|
||||||
if ( index && !myMapOfActors.contains( index ) ) {
|
if ( index && !myMapOfActors.contains( index ) ) {
|
||||||
// create actor if the index is present
|
// create actor if the index is present
|
||||||
if ( GEOM_Actor* anActor = createActor( exp.Current() )) {
|
if ( GEOM_Actor* anActor = createActor( exp.Current().Oriented(TopAbs_FORWARD))) {
|
||||||
// Create new entry for actor
|
// Create new entry for actor
|
||||||
QString aString = theEntry;
|
QString aString = theEntry;
|
||||||
aString += QString("_%1").arg( index ); // add index to actor entry
|
aString += QString("_%1").arg( index ); // add index to actor entry
|
||||||
|
@ -35,13 +35,22 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
SMDS_MeshElement::SMDS_MeshElement(int ID):myID(ID), myMeshId(-1), myShapeId(0), myIdInShape(-1)
|
SMDS_MeshElement::SMDS_MeshElement(int ID)
|
||||||
{
|
{
|
||||||
|
init(ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
SMDS_MeshElement::SMDS_MeshElement(int id, ShortType meshId, ShortType shapeId):
|
SMDS_MeshElement::SMDS_MeshElement(int id, ShortType meshId, ShortType shapeId)
|
||||||
myID(id), myMeshId(meshId), myShapeId(shapeId), myIdInShape(-1)
|
|
||||||
{
|
{
|
||||||
|
init(id, meshId, shapeId);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SMDS_MeshElement::init(int id, ShortType meshId, ShortType shapeId )
|
||||||
|
{
|
||||||
|
myID = id;
|
||||||
|
myMeshId = meshId;
|
||||||
|
myShapeId = shapeId;
|
||||||
|
myIdInShape = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SMDS_MeshElement::Print(ostream & OS) const
|
void SMDS_MeshElement::Print(ostream & OS) const
|
||||||
|
@ -151,6 +151,7 @@ protected:
|
|||||||
inline void setVtkId(int vtkId) { myVtkID = vtkId; };
|
inline void setVtkId(int vtkId) { myVtkID = vtkId; };
|
||||||
SMDS_MeshElement(int ID=-1);
|
SMDS_MeshElement(int ID=-1);
|
||||||
SMDS_MeshElement(int id, ShortType meshId, ShortType shapeId = 0);
|
SMDS_MeshElement(int id, ShortType meshId, ShortType shapeId = 0);
|
||||||
|
virtual void init(int id = -1, ShortType meshId = -1, ShortType shapeId = 0);
|
||||||
virtual void Print(std::ostream & OS) const;
|
virtual void Print(std::ostream & OS) const;
|
||||||
|
|
||||||
//! Element index in vector SMDS_Mesh::myNodes or SMDS_Mesh::myCells
|
//! Element index in vector SMDS_Mesh::myNodes or SMDS_Mesh::myCells
|
||||||
|
@ -61,12 +61,9 @@ SMDS_MeshNode::SMDS_MeshNode(int id, int meshId, int shapeId, double x, double y
|
|||||||
|
|
||||||
void SMDS_MeshNode::init(int id, int meshId, int shapeId, double x, double y, double z)
|
void SMDS_MeshNode::init(int id, int meshId, int shapeId, double x, double y, double z)
|
||||||
{
|
{
|
||||||
|
SMDS_MeshElement::init(id, meshId, shapeId);
|
||||||
myVtkID = id -1;
|
myVtkID = id -1;
|
||||||
assert(myVtkID >= 0);
|
assert(myVtkID >= 0);
|
||||||
myID = id;
|
|
||||||
myMeshId = meshId;
|
|
||||||
myShapeId = shapeId;
|
|
||||||
myIdInShape = -1;
|
|
||||||
//MESSAGE("Node " << myID << " " << myVtkID << " (" << x << ", " << y << ", " << z << ")");
|
//MESSAGE("Node " << myID << " " << myVtkID << " (" << x << ", " << y << ", " << z << ")");
|
||||||
SMDS_Mesh* mesh = SMDS_Mesh::_meshList[myMeshId];
|
SMDS_Mesh* mesh = SMDS_Mesh::_meshList[myMeshId];
|
||||||
SMDS_UnstructuredGrid * grid = mesh->getGrid();
|
SMDS_UnstructuredGrid * grid = mesh->getGrid();
|
||||||
@ -314,7 +311,10 @@ void SMDS_MeshNode::AddInverseElement(const SMDS_MeshElement* ME)
|
|||||||
{
|
{
|
||||||
const SMDS_MeshCell *cell = dynamic_cast<const SMDS_MeshCell*> (ME);
|
const SMDS_MeshCell *cell = dynamic_cast<const SMDS_MeshCell*> (ME);
|
||||||
assert(cell);
|
assert(cell);
|
||||||
SMDS_Mesh::_meshList[myMeshId]->getGrid()->AddReferenceToCell(myVtkID, cell->getVtkId());
|
SMDS_UnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
|
||||||
|
vtkCellLinks *Links = grid->GetCellLinks();
|
||||||
|
Links->ResizeCellList(myVtkID, 1);
|
||||||
|
Links->AddCellReference(cell->getVtkId(), myVtkID);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
@ -40,6 +40,7 @@ public:
|
|||||||
friend class SMESHDS_Mesh;
|
friend class SMESHDS_Mesh;
|
||||||
friend class SMDS_Mesh;
|
friend class SMDS_Mesh;
|
||||||
friend class ObjectPool<SMDS_MeshNode>;
|
friend class ObjectPool<SMDS_MeshNode>;
|
||||||
|
friend class SMDS_VtkFace;
|
||||||
|
|
||||||
void Print(std::ostream & OS) const;
|
void Print(std::ostream & OS) const;
|
||||||
double X() const;
|
double X() const;
|
||||||
|
@ -25,8 +25,8 @@ SMDS_VtkEdge::~SMDS_VtkEdge()
|
|||||||
|
|
||||||
void SMDS_VtkEdge::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
void SMDS_VtkEdge::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
||||||
{
|
{
|
||||||
|
SMDS_MeshEdge::init();
|
||||||
vtkUnstructuredGrid* grid = mesh->getGrid();
|
vtkUnstructuredGrid* grid = mesh->getGrid();
|
||||||
myIdInShape = -1;
|
|
||||||
myMeshId = mesh->getMeshId();
|
myMeshId = mesh->getMeshId();
|
||||||
vtkIdType aType = VTK_LINE;
|
vtkIdType aType = VTK_LINE;
|
||||||
if (nodeIds.size() == 3)
|
if (nodeIds.size() == 3)
|
||||||
|
@ -24,8 +24,8 @@ SMDS_VtkFace::~SMDS_VtkFace()
|
|||||||
|
|
||||||
void SMDS_VtkFace::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
void SMDS_VtkFace::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
||||||
{
|
{
|
||||||
|
SMDS_MeshFace::init();
|
||||||
vtkUnstructuredGrid* grid = mesh->getGrid();
|
vtkUnstructuredGrid* grid = mesh->getGrid();
|
||||||
myIdInShape = -1;
|
|
||||||
myMeshId = mesh->getMeshId();
|
myMeshId = mesh->getMeshId();
|
||||||
vtkIdType aType = VTK_TRIANGLE;
|
vtkIdType aType = VTK_TRIANGLE;
|
||||||
switch (nodeIds.size())
|
switch (nodeIds.size())
|
||||||
@ -53,8 +53,8 @@ void SMDS_VtkFace::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
|||||||
|
|
||||||
void SMDS_VtkFace::initPoly(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
void SMDS_VtkFace::initPoly(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
||||||
{
|
{
|
||||||
|
SMDS_MeshFace::init();
|
||||||
vtkUnstructuredGrid* grid = mesh->getGrid();
|
vtkUnstructuredGrid* grid = mesh->getGrid();
|
||||||
myIdInShape = -1;
|
|
||||||
myMeshId = mesh->getMeshId();
|
myMeshId = mesh->getMeshId();
|
||||||
myVtkID = grid->InsertNextLinkedCell(VTK_POLYGON, nodeIds.size(), &nodeIds[0]);
|
myVtkID = grid->InsertNextLinkedCell(VTK_POLYGON, nodeIds.size(), &nodeIds[0]);
|
||||||
mesh->setMyModified();
|
mesh->setMyModified();
|
||||||
@ -249,7 +249,7 @@ SMDS_ElemIteratorPtr SMDS_VtkFace::interlacedNodesElemIterator() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! change only the first node, used for temporary triangles in quadrangle to triangle adaptor
|
//! change only the first node, used for temporary triangles in quadrangle to triangle adaptor
|
||||||
void SMDS_VtkFace::ChangeApex(const SMDS_MeshNode* node)
|
void SMDS_VtkFace::ChangeApex(SMDS_MeshNode* node)
|
||||||
{
|
{
|
||||||
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
|
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
|
||||||
vtkIdType npts = 0;
|
vtkIdType npts = 0;
|
||||||
@ -257,6 +257,6 @@ void SMDS_VtkFace::ChangeApex(const SMDS_MeshNode* node)
|
|||||||
grid->GetCellPoints(myVtkID, npts, pts);
|
grid->GetCellPoints(myVtkID, npts, pts);
|
||||||
grid->RemoveReferenceToCell(pts[0], myVtkID);
|
grid->RemoveReferenceToCell(pts[0], myVtkID);
|
||||||
pts[0] = node->getVtkId();
|
pts[0] = node->getVtkId();
|
||||||
grid->AddReferenceToCell(pts[0], myVtkID);
|
node->AddInverseElement(this),
|
||||||
SMDS_Mesh::_meshList[myMeshId]->setMyModified();
|
SMDS_Mesh::_meshList[myMeshId]->setMyModified();
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ public:
|
|||||||
void init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh);
|
void init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh);
|
||||||
void initPoly(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh);
|
void initPoly(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh);
|
||||||
bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
|
bool ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes);
|
||||||
void ChangeApex(const SMDS_MeshNode* node); // to use only for tmp triangles
|
void ChangeApex(SMDS_MeshNode* node); // to use only for tmp triangles
|
||||||
void Print(std::ostream & OS) const;
|
void Print(std::ostream & OS) const;
|
||||||
int NbEdges() const;
|
int NbEdges() const;
|
||||||
int NbFaces() const;
|
int NbFaces() const;
|
||||||
|
@ -21,8 +21,8 @@ SMDS_VtkVolume::SMDS_VtkVolume(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
|||||||
*/
|
*/
|
||||||
void SMDS_VtkVolume::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
void SMDS_VtkVolume::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
||||||
{
|
{
|
||||||
|
SMDS_MeshVolume::init();
|
||||||
vtkUnstructuredGrid* grid = mesh->getGrid();
|
vtkUnstructuredGrid* grid = mesh->getGrid();
|
||||||
myIdInShape = -1;
|
|
||||||
myMeshId = mesh->getMeshId();
|
myMeshId = mesh->getMeshId();
|
||||||
vtkIdType aType = VTK_TETRA;
|
vtkIdType aType = VTK_TETRA;
|
||||||
switch (nodeIds.size())
|
switch (nodeIds.size())
|
||||||
@ -63,6 +63,7 @@ void SMDS_VtkVolume::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
|
|||||||
//#ifdef VTK_HAVE_POLYHEDRON
|
//#ifdef VTK_HAVE_POLYHEDRON
|
||||||
void SMDS_VtkVolume::initPoly(std::vector<vtkIdType> nodeIds, std::vector<int> nbNodesPerFace, SMDS_Mesh* mesh)
|
void SMDS_VtkVolume::initPoly(std::vector<vtkIdType> nodeIds, std::vector<int> nbNodesPerFace, SMDS_Mesh* mesh)
|
||||||
{
|
{
|
||||||
|
SMDS_MeshVolume::init();
|
||||||
//MESSAGE("SMDS_VtkVolume::initPoly");
|
//MESSAGE("SMDS_VtkVolume::initPoly");
|
||||||
SMDS_UnstructuredGrid* grid = mesh->getGrid();
|
SMDS_UnstructuredGrid* grid = mesh->getGrid();
|
||||||
double center[3];
|
double center[3];
|
||||||
|
@ -60,6 +60,7 @@ salomeinclude_HEADERS = \
|
|||||||
lib_LTLIBRARIES = libSMESHimpl.la
|
lib_LTLIBRARIES = libSMESHimpl.la
|
||||||
|
|
||||||
dist_libSMESHimpl_la_SOURCES = \
|
dist_libSMESHimpl_la_SOURCES = \
|
||||||
|
memoire.h \
|
||||||
SMESH_Gen.cxx \
|
SMESH_Gen.cxx \
|
||||||
SMESH_Mesh.cxx \
|
SMESH_Mesh.cxx \
|
||||||
SMESH_subMesh.cxx \
|
SMESH_subMesh.cxx \
|
||||||
|
@ -105,6 +105,23 @@ SMESH_Mesh::SMESH_Mesh(int theLocalId,
|
|||||||
_myMeshDS->ShapeToMesh( PseudoShape() );
|
_myMeshDS->ShapeToMesh( PseudoShape() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Constructor of SMESH_Mesh being a base of some descendant class
|
||||||
|
*/
|
||||||
|
//================================================================================
|
||||||
|
|
||||||
|
SMESH_Mesh::SMESH_Mesh():
|
||||||
|
_groupId( 0 ), _nbSubShapes( 0 )
|
||||||
|
{
|
||||||
|
_myMeshDS = 0;
|
||||||
|
_isShapeToMesh = false;
|
||||||
|
_isAutoColor = false;
|
||||||
|
_isModified = false;
|
||||||
|
_shapeDiagonal = 0.0;
|
||||||
|
_rmGroupCallUp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
*
|
*
|
||||||
@ -265,14 +282,12 @@ void SMESH_Mesh::Clear()
|
|||||||
_myMeshDS->ClearMesh();
|
_myMeshDS->ClearMesh();
|
||||||
|
|
||||||
// update compute state of submeshes
|
// update compute state of submeshes
|
||||||
if ( SMESH_subMesh *sm = GetSubMeshContaining( GetShapeToMesh() ) ) {
|
if ( SMESH_subMesh *sm = GetSubMeshContaining( GetShapeToMesh() ) )
|
||||||
SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(/*includeSelf=*/true,
|
{
|
||||||
/*complexShapeFirst=*/false);
|
|
||||||
while ( smIt->more() ) {
|
|
||||||
sm = smIt->next();
|
|
||||||
sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
|
sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
|
||||||
|
sm->ComputeSubMeshStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
|
||||||
sm->ComputeStateEngine( SMESH_subMesh::CLEAN ); // for event listeners (issue 0020918)
|
sm->ComputeStateEngine( SMESH_subMesh::CLEAN ); // for event listeners (issue 0020918)
|
||||||
}
|
sm->ComputeSubMeshStateEngine( SMESH_subMesh::CLEAN );
|
||||||
}
|
}
|
||||||
_isModified = false;
|
_isModified = false;
|
||||||
}
|
}
|
||||||
|
@ -332,7 +332,7 @@ protected:
|
|||||||
TRmGroupCallUp* _rmGroupCallUp;
|
TRmGroupCallUp* _rmGroupCallUp;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SMESH_Mesh() {};
|
SMESH_Mesh();
|
||||||
SMESH_Mesh(const SMESH_Mesh&) {};
|
SMESH_Mesh(const SMESH_Mesh&) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -132,22 +132,6 @@ SMESH_MeshEditor::AddElement(const vector<const SMDS_MeshNode*> & node,
|
|||||||
int nbnode = node.size();
|
int nbnode = node.size();
|
||||||
SMESHDS_Mesh* mesh = GetMeshDS();
|
SMESHDS_Mesh* mesh = GetMeshDS();
|
||||||
switch ( type ) {
|
switch ( type ) {
|
||||||
case SMDSAbs_0DElement:
|
|
||||||
if ( nbnode == 1 ) {
|
|
||||||
if ( ID >= 0 ) e = mesh->Add0DElementWithID(node[0], ID);
|
|
||||||
else e = mesh->Add0DElement (node[0] );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SMDSAbs_Edge:
|
|
||||||
if ( nbnode == 2 ) {
|
|
||||||
if ( ID >= 0 ) e = mesh->AddEdgeWithID(node[0], node[1], ID);
|
|
||||||
else e = mesh->AddEdge (node[0], node[1] );
|
|
||||||
}
|
|
||||||
else if ( nbnode == 3 ) {
|
|
||||||
if ( ID >= 0 ) e = mesh->AddEdgeWithID(node[0], node[1], node[2], ID);
|
|
||||||
else e = mesh->AddEdge (node[0], node[1], node[2] );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SMDSAbs_Face:
|
case SMDSAbs_Face:
|
||||||
if ( !isPoly ) {
|
if ( !isPoly ) {
|
||||||
if (nbnode == 3) {
|
if (nbnode == 3) {
|
||||||
@ -175,6 +159,7 @@ SMESH_MeshEditor::AddElement(const vector<const SMDS_MeshNode*> & node,
|
|||||||
else e = mesh->AddPolygonalFace (node );
|
else e = mesh->AddPolygonalFace (node );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SMDSAbs_Volume:
|
case SMDSAbs_Volume:
|
||||||
if ( !isPoly ) {
|
if ( !isPoly ) {
|
||||||
if (nbnode == 4) {
|
if (nbnode == 4) {
|
||||||
@ -240,6 +225,32 @@ SMESH_MeshEditor::AddElement(const vector<const SMDS_MeshNode*> & node,
|
|||||||
node[16],node[17],node[18],node[19] );
|
node[16],node[17],node[18],node[19] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SMDSAbs_Edge:
|
||||||
|
if ( nbnode == 2 ) {
|
||||||
|
if ( ID >= 0 ) e = mesh->AddEdgeWithID(node[0], node[1], ID);
|
||||||
|
else e = mesh->AddEdge (node[0], node[1] );
|
||||||
|
}
|
||||||
|
else if ( nbnode == 3 ) {
|
||||||
|
if ( ID >= 0 ) e = mesh->AddEdgeWithID(node[0], node[1], node[2], ID);
|
||||||
|
else e = mesh->AddEdge (node[0], node[1], node[2] );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SMDSAbs_0DElement:
|
||||||
|
if ( nbnode == 1 ) {
|
||||||
|
if ( ID >= 0 ) e = mesh->Add0DElementWithID(node[0], ID);
|
||||||
|
else e = mesh->Add0DElement (node[0] );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SMDSAbs_Node:
|
||||||
|
if ( ID >= 0 ) e = mesh->AddNodeWithID(node[0]->X(), node[0]->Y(), node[0]->Z(), ID);
|
||||||
|
else e = mesh->AddNode (node[0]->X(), node[0]->Y(), node[0]->Z());
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:;
|
||||||
}
|
}
|
||||||
if ( e ) myLastCreatedElems.Append( e );
|
if ( e ) myLastCreatedElems.Append( e );
|
||||||
return e;
|
return e;
|
||||||
@ -3874,6 +3885,8 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap & mapNewNodes,
|
|||||||
const SMDS_MeshElement* elem = itElem->first;
|
const SMDS_MeshElement* elem = itElem->first;
|
||||||
vector<TNodeOfNodeListMapItr>& vecNewNodes = itElemNodes->second;
|
vector<TNodeOfNodeListMapItr>& vecNewNodes = itElemNodes->second;
|
||||||
|
|
||||||
|
if(itElem->second.size()==0) continue;
|
||||||
|
|
||||||
if ( elem->GetType() == SMDSAbs_Edge ) {
|
if ( elem->GetType() == SMDSAbs_Edge ) {
|
||||||
// create a ceiling edge
|
// create a ceiling edge
|
||||||
if (!elem->IsQuadratic()) {
|
if (!elem->IsQuadratic()) {
|
||||||
@ -3898,8 +3911,6 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap & mapNewNodes,
|
|||||||
if ( elem->GetType() != SMDSAbs_Face )
|
if ( elem->GetType() != SMDSAbs_Face )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(itElem->second.size()==0) continue;
|
|
||||||
|
|
||||||
bool hasFreeLinks = false;
|
bool hasFreeLinks = false;
|
||||||
|
|
||||||
TIDSortedElemSet avoidSet;
|
TIDSortedElemSet avoidSet;
|
||||||
|
@ -1700,7 +1700,7 @@ bool SMESH_subMesh::CheckComputeError(SMESH_Algo* theAlgo, const TopoDS_Shape& t
|
|||||||
// Check my state
|
// Check my state
|
||||||
if ( !_computeError || _computeError->IsOK() )
|
if ( !_computeError || _computeError->IsOK() )
|
||||||
{
|
{
|
||||||
_computeState = COMPUTE_OK;
|
_computeState = IsMeshComputed() ? COMPUTE_OK : FAILED_TO_COMPUTE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -193,6 +193,7 @@ public:
|
|||||||
void DumpAlgoState(bool isMain);
|
void DumpAlgoState(bool isMain);
|
||||||
|
|
||||||
bool ComputeStateEngine(int event);
|
bool ComputeStateEngine(int event);
|
||||||
|
void ComputeSubMeshStateEngine(int event);
|
||||||
|
|
||||||
bool Evaluate(MapShapeNbElems& aResMap);
|
bool Evaluate(MapShapeNbElems& aResMap);
|
||||||
|
|
||||||
@ -250,7 +251,6 @@ protected:
|
|||||||
void RemoveSubMeshElementsAndNodes();
|
void RemoveSubMeshElementsAndNodes();
|
||||||
void UpdateDependantsState(const compute_event theEvent);
|
void UpdateDependantsState(const compute_event theEvent);
|
||||||
void UpdateSubMeshState(const compute_state theState);
|
void UpdateSubMeshState(const compute_state theState);
|
||||||
void ComputeSubMeshStateEngine(int event);
|
|
||||||
void CleanDependants();
|
void CleanDependants();
|
||||||
void CleanDependsOn();
|
void CleanDependsOn();
|
||||||
void SetAlgoState(int state);
|
void SetAlgoState(int state);
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
// Author : Nicolas REJNERI
|
// Author : Nicolas REJNERI
|
||||||
// Project : SALOME
|
// Project : SALOME
|
||||||
// Module : SMESH
|
// Module : SMESH
|
||||||
// $Header$
|
|
||||||
//
|
//
|
||||||
#ifndef SMESH_TYPE_HEADER
|
#ifndef SMESH_TYPE_HEADER
|
||||||
#define SMESH_TYPE_HEADER
|
#define SMESH_TYPE_HEADER
|
||||||
@ -57,7 +56,8 @@ enum MeshObjectType {
|
|||||||
GROUP_FACE,
|
GROUP_FACE,
|
||||||
GROUP_VOLUME,
|
GROUP_VOLUME,
|
||||||
GROUP_0D,
|
GROUP_0D,
|
||||||
COMPONENT
|
COMPONENT,
|
||||||
|
IDSOURCE
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -203,6 +203,12 @@ bool SMESH_TypeFilter::isOk (const SUIT_DataOwner* theDataOwner) const
|
|||||||
Ok = true;
|
Ok = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case IDSOURCE:
|
||||||
|
{
|
||||||
|
Ok = ( SMESH_TypeFilter(MESHorSUBMESH).isOk( theDataOwner ) ||
|
||||||
|
SMESH_TypeFilter(GROUP) .isOk( theDataOwner ));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Ok;
|
return Ok;
|
||||||
|
@ -94,6 +94,7 @@ salomeinclude_HEADERS = \
|
|||||||
SMESHGUI_MeshOrderDlg.h \
|
SMESHGUI_MeshOrderDlg.h \
|
||||||
SMESHGUI_MeshOrderOp.h \
|
SMESHGUI_MeshOrderOp.h \
|
||||||
SMESHGUI_FileValidator.h \
|
SMESHGUI_FileValidator.h \
|
||||||
|
SMESHGUI_CopyMeshDlg.h \
|
||||||
SMESH_SMESHGUI.hxx
|
SMESH_SMESHGUI.hxx
|
||||||
|
|
||||||
# Libraries targets
|
# Libraries targets
|
||||||
@ -167,6 +168,7 @@ dist_libSMESH_la_SOURCES = \
|
|||||||
SMESHGUI_FindElemByPointDlg.cxx \
|
SMESHGUI_FindElemByPointDlg.cxx \
|
||||||
SMESHGUI_MeshOrderDlg.cxx \
|
SMESHGUI_MeshOrderDlg.cxx \
|
||||||
SMESHGUI_MeshOrderOp.cxx \
|
SMESHGUI_MeshOrderOp.cxx \
|
||||||
|
SMESHGUI_CopyMeshDlg.cxx \
|
||||||
SMESHGUI_FileValidator.cxx
|
SMESHGUI_FileValidator.cxx
|
||||||
|
|
||||||
MOC_FILES = \
|
MOC_FILES = \
|
||||||
@ -224,6 +226,7 @@ MOC_FILES = \
|
|||||||
SMESHGUI_Make2DFrom3DOp_moc.cxx \
|
SMESHGUI_Make2DFrom3DOp_moc.cxx \
|
||||||
SMESHGUI_FindElemByPointDlg_moc.cxx \
|
SMESHGUI_FindElemByPointDlg_moc.cxx \
|
||||||
SMESHGUI_MeshOrderDlg_moc.cxx \
|
SMESHGUI_MeshOrderDlg_moc.cxx \
|
||||||
|
SMESHGUI_CopyMeshDlg_moc.cxx \
|
||||||
SMESHGUI_MeshOrderOp_moc.cxx
|
SMESHGUI_MeshOrderOp_moc.cxx
|
||||||
|
|
||||||
nodist_libSMESH_la_SOURCES= \
|
nodist_libSMESH_la_SOURCES= \
|
||||||
|
@ -76,6 +76,7 @@
|
|||||||
#include "SMESHGUI_TransparencyDlg.h"
|
#include "SMESHGUI_TransparencyDlg.h"
|
||||||
//#include "SMESHGUI_WhatIsDlg.h"
|
//#include "SMESHGUI_WhatIsDlg.h"
|
||||||
#include "SMESHGUI_DuplicateNodesDlg.h"
|
#include "SMESHGUI_DuplicateNodesDlg.h"
|
||||||
|
#include "SMESHGUI_CopyMeshDlg.h"
|
||||||
|
|
||||||
#include "SMESHGUI_Utils.h"
|
#include "SMESHGUI_Utils.h"
|
||||||
#include "SMESHGUI_MeshUtils.h"
|
#include "SMESHGUI_MeshUtils.h"
|
||||||
@ -141,6 +142,7 @@
|
|||||||
#include <vtkRenderer.h>
|
#include <vtkRenderer.h>
|
||||||
#include <vtkPlane.h>
|
#include <vtkPlane.h>
|
||||||
#include <vtkCallbackCommand.h>
|
#include <vtkCallbackCommand.h>
|
||||||
|
#include <vtkLookupTable.h>
|
||||||
|
|
||||||
// SALOME KERNEL includes
|
// SALOME KERNEL includes
|
||||||
#include <SALOMEDS_Study.hxx>
|
#include <SALOMEDS_Study.hxx>
|
||||||
@ -759,6 +761,14 @@
|
|||||||
type = QObject::tr( "FREE_BORDERS" );
|
type = QObject::tr( "FREE_BORDERS" );
|
||||||
else if ( dynamic_cast< SMESH::Controls::FreeFaces* >( f.get() ) )
|
else if ( dynamic_cast< SMESH::Controls::FreeFaces* >( f.get() ) )
|
||||||
type = QObject::tr( "FREE_FACES" );
|
type = QObject::tr( "FREE_FACES" );
|
||||||
|
else if ( dynamic_cast< SMESH::Controls::BareBorderVolume* >( f.get() ) )
|
||||||
|
type = QObject::tr( "BARE_BORDER_VOLUME" );
|
||||||
|
else if ( dynamic_cast< SMESH::Controls::BareBorderFace* >( f.get() ) )
|
||||||
|
type = QObject::tr( "BARE_BORDER_FACE" );
|
||||||
|
else if ( dynamic_cast< SMESH::Controls::OverConstrainedVolume* >( f.get() ) )
|
||||||
|
type = QObject::tr( "OVER_CONSTRAINED_VOLUME" );
|
||||||
|
else if ( dynamic_cast< SMESH::Controls::OverConstrainedFace* >( f.get() ) )
|
||||||
|
type = QObject::tr( "OVER_CONSTRAINED_FACE" );
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -779,10 +789,26 @@
|
|||||||
if ( aScalarBarActor && aFunctor ) {
|
if ( aScalarBarActor && aFunctor ) {
|
||||||
SMESH::Controls::NumericalFunctor* aNumFun = dynamic_cast<SMESH::Controls::NumericalFunctor*>( aFunctor.get() );
|
SMESH::Controls::NumericalFunctor* aNumFun = dynamic_cast<SMESH::Controls::NumericalFunctor*>( aFunctor.get() );
|
||||||
if ( aNumFun ) {
|
if ( aNumFun ) {
|
||||||
int nbRanges = aScalarBarActor->GetMaximumNumberOfColors();
|
std::vector<int> elements;
|
||||||
|
SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIO);
|
||||||
|
if ( mesh->_is_nil() ) {
|
||||||
|
SMESH::SMESH_IDSource_var idSource =
|
||||||
|
SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(anIO);
|
||||||
|
if ( !idSource->_is_nil() )
|
||||||
|
{
|
||||||
|
SMESH::long_array_var ids = idSource->GetIDs();
|
||||||
|
elements.resize( ids->length() );
|
||||||
|
for ( unsigned i = 0; i < elements.size(); ++i )
|
||||||
|
elements[i] = ids[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int nbIntervals = aScalarBarActor->GetMaximumNumberOfColors();
|
||||||
|
vtkLookupTable* lookupTable =
|
||||||
|
static_cast<vtkLookupTable*>(aScalarBarActor->GetLookupTable());
|
||||||
|
double * minmax = lookupTable->GetRange();
|
||||||
std::vector<int> nbEvents;
|
std::vector<int> nbEvents;
|
||||||
std::vector<double> funValues;
|
std::vector<double> funValues;
|
||||||
aNumFun->GetHistogram( nbRanges, nbEvents, funValues );
|
aNumFun->GetHistogram( nbIntervals, nbEvents, funValues, elements, minmax );
|
||||||
QString anInitialPath = "";
|
QString anInitialPath = "";
|
||||||
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
|
if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
|
||||||
anInitialPath = QDir::currentPath();
|
anInitialPath = QDir::currentPath();
|
||||||
@ -1178,6 +1204,18 @@
|
|||||||
case 6023:
|
case 6023:
|
||||||
aControl = SMESH_Actor::eMaxElementLength3D;
|
aControl = SMESH_Actor::eMaxElementLength3D;
|
||||||
break;
|
break;
|
||||||
|
case 6024:
|
||||||
|
aControl = SMESH_Actor::eBareBorderVolume;
|
||||||
|
break;
|
||||||
|
case 6025:
|
||||||
|
aControl = SMESH_Actor::eBareBorderFace;
|
||||||
|
break;
|
||||||
|
case 6026:
|
||||||
|
aControl = SMESH_Actor::eOverConstrainedVolume;
|
||||||
|
break;
|
||||||
|
case 6027:
|
||||||
|
aControl = SMESH_Actor::eOverConstrainedFace;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
anActor->SetControlMode(aControl);
|
anActor->SetControlMode(aControl);
|
||||||
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
|
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
|
||||||
@ -2024,6 +2062,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
|||||||
case 704: // Edit mesh/sub-mesh
|
case 704: // Edit mesh/sub-mesh
|
||||||
startOperation( theCommandID );
|
startOperation( theCommandID );
|
||||||
break;
|
break;
|
||||||
|
case 705: // copy mesh
|
||||||
|
{
|
||||||
|
if (checkLock(aStudy)) break;
|
||||||
|
EmitSignalDeactivateDialog();
|
||||||
|
( new SMESHGUI_CopyMeshDlg( this ) )->show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 710: // Build compound mesh
|
case 710: // Build compound mesh
|
||||||
{
|
{
|
||||||
if (checkLock(aStudy)) break;
|
if (checkLock(aStudy)) break;
|
||||||
@ -2973,6 +3018,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
|||||||
case 6021:
|
case 6021:
|
||||||
case 6022:
|
case 6022:
|
||||||
case 6023:
|
case 6023:
|
||||||
|
case 6024:
|
||||||
|
case 6025:
|
||||||
|
case 6026:
|
||||||
|
case 6027:
|
||||||
if ( vtkwnd ) {
|
if ( vtkwnd ) {
|
||||||
|
|
||||||
LightApp_SelectionMgr* mgr = selectionMgr();
|
LightApp_SelectionMgr* mgr = selectionMgr();
|
||||||
@ -3189,6 +3238,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createSMESHAction( 702, "CREATE_MESH", "ICON_DLG_INIT_MESH" );
|
createSMESHAction( 702, "CREATE_MESH", "ICON_DLG_INIT_MESH" );
|
||||||
createSMESHAction( 703, "CREATE_SUBMESH", "ICON_DLG_ADD_SUBMESH" );
|
createSMESHAction( 703, "CREATE_SUBMESH", "ICON_DLG_ADD_SUBMESH" );
|
||||||
createSMESHAction( 704, "EDIT_MESHSUBMESH","ICON_DLG_EDIT_MESH" );
|
createSMESHAction( 704, "EDIT_MESHSUBMESH","ICON_DLG_EDIT_MESH" );
|
||||||
|
createSMESHAction( 705, "COPY_MESH", "ICON_COPY_MESH" );
|
||||||
createSMESHAction( 710, "BUILD_COMPOUND", "ICON_BUILD_COMPOUND" );
|
createSMESHAction( 710, "BUILD_COMPOUND", "ICON_BUILD_COMPOUND" );
|
||||||
createSMESHAction( 711, "PRECOMPUTE", "ICON_PRECOMPUTE" );
|
createSMESHAction( 711, "PRECOMPUTE", "ICON_PRECOMPUTE" );
|
||||||
createSMESHAction( 712, "EVALUATE", "ICON_COMPUTE" );
|
createSMESHAction( 712, "EVALUATE", "ICON_COMPUTE" );
|
||||||
@ -3214,6 +3264,10 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createSMESHAction( 6021, "FREE_FACES", "ICON_FREE_FACES", 0, true );
|
createSMESHAction( 6021, "FREE_FACES", "ICON_FREE_FACES", 0, true );
|
||||||
createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true );
|
createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true );
|
||||||
createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true );
|
createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true );
|
||||||
|
createSMESHAction( 6024, "BARE_BORDER_VOLUME","ICON_BARE_BORDER_VOLUME", 0, true );
|
||||||
|
createSMESHAction( 6025, "BARE_BORDER_FACE","ICON_BARE_BORDER_FACE", 0, true );
|
||||||
|
createSMESHAction( 6026, "OVER_CONSTRAINED_VOLUME","ICON_OVER_CONSTRAINED_VOLUME", 0, true );
|
||||||
|
createSMESHAction( 6027, "OVER_CONSTRAINED_FACE","ICON_OVER_CONSTRAINED_FACE", 0, true );
|
||||||
createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true );
|
createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true );
|
||||||
createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION", 0, true );
|
createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION", 0, true );
|
||||||
createSMESHAction( 6005, "FREE_NODE", "ICON_FREE_NODE", 0, true );
|
createSMESHAction( 6005, "FREE_NODE", "ICON_FREE_NODE", 0, true );
|
||||||
@ -3353,6 +3407,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( 703, meshId, -1 );
|
createMenu( 703, meshId, -1 );
|
||||||
createMenu( 704, meshId, -1 );
|
createMenu( 704, meshId, -1 );
|
||||||
createMenu( 710, meshId, -1 );
|
createMenu( 710, meshId, -1 );
|
||||||
|
createMenu( 705, meshId, -1 );
|
||||||
createMenu( separator(), meshId, -1 );
|
createMenu( separator(), meshId, -1 );
|
||||||
createMenu( 701, meshId, -1 );
|
createMenu( 701, meshId, -1 );
|
||||||
createMenu( 711, meshId, -1 );
|
createMenu( 711, meshId, -1 );
|
||||||
@ -3371,8 +3426,6 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( separator(), meshId, -1 );
|
createMenu( separator(), meshId, -1 );
|
||||||
createMenu( 814, meshId, -1 );
|
createMenu( 814, meshId, -1 );
|
||||||
createMenu( separator(), meshId, -1 );
|
createMenu( separator(), meshId, -1 );
|
||||||
createMenu( 813, meshId, -1 );
|
|
||||||
createMenu( separator(), meshId, -1 );
|
|
||||||
createMenu( 900, meshId, -1 );
|
createMenu( 900, meshId, -1 );
|
||||||
//createMenu( 902, meshId, -1 );
|
//createMenu( 902, meshId, -1 );
|
||||||
createMenu( 903, meshId, -1 );
|
createMenu( 903, meshId, -1 );
|
||||||
@ -3385,6 +3438,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( 6001, edgeId, -1 );
|
createMenu( 6001, edgeId, -1 );
|
||||||
createMenu( 6004, edgeId, -1 );
|
createMenu( 6004, edgeId, -1 );
|
||||||
createMenu( 6021, faceId, -1 );
|
createMenu( 6021, faceId, -1 );
|
||||||
|
createMenu( 6025, faceId, -1 );
|
||||||
|
createMenu( 6027, faceId, -1 );
|
||||||
createMenu( 6018, faceId, -1 );
|
createMenu( 6018, faceId, -1 );
|
||||||
createMenu( 6019, faceId, -1 );
|
createMenu( 6019, faceId, -1 );
|
||||||
createMenu( 6011, faceId, -1 );
|
createMenu( 6011, faceId, -1 );
|
||||||
@ -3397,6 +3452,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( 6017, volumeId, -1 );
|
createMenu( 6017, volumeId, -1 );
|
||||||
createMenu( 6009, volumeId, -1 );
|
createMenu( 6009, volumeId, -1 );
|
||||||
createMenu( 6023, volumeId, -1 );
|
createMenu( 6023, volumeId, -1 );
|
||||||
|
createMenu( 6024, volumeId, -1 );
|
||||||
|
createMenu( 6026, volumeId, -1 );
|
||||||
|
|
||||||
createMenu( 4000, addId, -1 );
|
createMenu( 4000, addId, -1 );
|
||||||
createMenu( 4009, addId, -1 );
|
createMenu( 4009, addId, -1 );
|
||||||
@ -3420,6 +3477,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( 4042, removeId, -1 );
|
createMenu( 4042, removeId, -1 );
|
||||||
createMenu( 4044, removeId, -1 );
|
createMenu( 4044, removeId, -1 );
|
||||||
createMenu( separator(), removeId, -1 );
|
createMenu( separator(), removeId, -1 );
|
||||||
|
createMenu( 813, removeId, -1 );
|
||||||
|
createMenu( separator(), removeId, -1 );
|
||||||
createMenu( 4043, removeId, -1 );
|
createMenu( 4043, removeId, -1 );
|
||||||
|
|
||||||
createMenu( 4051, renumId, -1 );
|
createMenu( 4051, renumId, -1 );
|
||||||
@ -3464,6 +3523,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createTool( 703, meshTb );
|
createTool( 703, meshTb );
|
||||||
createTool( 704, meshTb );
|
createTool( 704, meshTb );
|
||||||
createTool( 710, meshTb );
|
createTool( 710, meshTb );
|
||||||
|
createTool( 705, meshTb );
|
||||||
createTool( separator(), meshTb );
|
createTool( separator(), meshTb );
|
||||||
createTool( 701, meshTb );
|
createTool( 701, meshTb );
|
||||||
createTool( 711, meshTb );
|
createTool( 711, meshTb );
|
||||||
@ -3490,6 +3550,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createTool( 6004, ctrlTb );
|
createTool( 6004, ctrlTb );
|
||||||
createTool( separator(), ctrlTb );
|
createTool( separator(), ctrlTb );
|
||||||
createTool( 6021, ctrlTb );
|
createTool( 6021, ctrlTb );
|
||||||
|
createTool( 6025, ctrlTb );
|
||||||
|
createTool( 6027, ctrlTb );
|
||||||
createTool( 6018, ctrlTb );
|
createTool( 6018, ctrlTb );
|
||||||
createTool( 6019, ctrlTb );
|
createTool( 6019, ctrlTb );
|
||||||
createTool( 6011, ctrlTb );
|
createTool( 6011, ctrlTb );
|
||||||
@ -3503,6 +3565,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createTool( 6017, ctrlTb );
|
createTool( 6017, ctrlTb );
|
||||||
createTool( 6009, ctrlTb );
|
createTool( 6009, ctrlTb );
|
||||||
createTool( 6023, ctrlTb );
|
createTool( 6023, ctrlTb );
|
||||||
|
createTool( 6024, ctrlTb );
|
||||||
|
createTool( 6026, ctrlTb );
|
||||||
createTool( separator(), ctrlTb );
|
createTool( separator(), ctrlTb );
|
||||||
|
|
||||||
createTool( 4000, addRemTb );
|
createTool( 4000, addRemTb );
|
||||||
@ -3846,6 +3910,14 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
popupMgr()->setRule( action( 6022 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
popupMgr()->setRule( action( 6022 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||||
popupMgr()->setRule( action( 6022 ), "controlMode = 'eMaxElementLength2D'", QtxPopupMgr::ToggleRule );
|
popupMgr()->setRule( action( 6022 ), "controlMode = 'eMaxElementLength2D'", QtxPopupMgr::ToggleRule );
|
||||||
|
|
||||||
|
popupMgr()->insert ( action( 6025 ), aSubId, -1 ); // BARE_BORDER_FACE
|
||||||
|
popupMgr()->setRule( action( 6025 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||||
|
popupMgr()->setRule( action( 6025 ), "controlMode = 'eBareBorderFace'", QtxPopupMgr::ToggleRule );
|
||||||
|
|
||||||
|
popupMgr()->insert ( action( 6027 ), aSubId, -1 ); // OVER_CONSTRAINED_FACE
|
||||||
|
popupMgr()->setRule( action( 6027 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule );
|
||||||
|
popupMgr()->setRule( action( 6027 ), "controlMode = 'eOverConstrainedFace'", QtxPopupMgr::ToggleRule );
|
||||||
|
|
||||||
aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS
|
aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS
|
||||||
|
|
||||||
popupMgr()->insert ( action( 6017 ), aSubId, -1 ); // ASPECT_3D
|
popupMgr()->insert ( action( 6017 ), aSubId, -1 ); // ASPECT_3D
|
||||||
@ -3860,6 +3932,14 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
popupMgr()->setRule( action( 6023 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
popupMgr()->setRule( action( 6023 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
||||||
popupMgr()->setRule( action( 6023 ), "controlMode = 'eMaxElementLength3D'", QtxPopupMgr::ToggleRule );
|
popupMgr()->setRule( action( 6023 ), "controlMode = 'eMaxElementLength3D'", QtxPopupMgr::ToggleRule );
|
||||||
|
|
||||||
|
popupMgr()->insert ( action( 6024 ), aSubId, -1 ); // BARE_BORDER_VOLUME
|
||||||
|
popupMgr()->setRule( action( 6024 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
||||||
|
popupMgr()->setRule( action( 6024 ), "controlMode = 'eBareBorderVolume'", QtxPopupMgr::ToggleRule );
|
||||||
|
|
||||||
|
popupMgr()->insert ( action( 6026 ), aSubId, -1 ); // OVER_CONSTRAINED_VOLUME
|
||||||
|
popupMgr()->setRule( action( 6026 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
|
||||||
|
popupMgr()->setRule( action( 6026 ), "controlMode = 'eOverConstrainedVolume'", QtxPopupMgr::ToggleRule );
|
||||||
|
|
||||||
popupMgr()->insert( separator(), anId, -1 );
|
popupMgr()->insert( separator(), anId, -1 );
|
||||||
|
|
||||||
popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP
|
popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP
|
||||||
@ -5359,7 +5439,15 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
|
|||||||
aPlaneInfo.PlaneId = aPlaneId;
|
aPlaneInfo.PlaneId = aPlaneId;
|
||||||
aPlaneInfo.ActorList.push_back( aSmeshActor );
|
aPlaneInfo.ActorList.push_back( aSmeshActor );
|
||||||
aPlaneInfo.ViewManager = vman;
|
aPlaneInfo.ViewManager = vman;
|
||||||
aPlaneInfoList.push_back( aPlaneInfo );
|
|
||||||
|
// to make the list sorted by plane id
|
||||||
|
anIter = aPlaneInfoList.begin();
|
||||||
|
for( ; anIter != aPlaneInfoList.end(); anIter++ ) {
|
||||||
|
const TPlaneInfo& aPlaneInfoRef = *anIter;
|
||||||
|
if( aPlaneInfoRef.PlaneId > aPlaneId )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
aPlaneInfoList.insert( anIter, aPlaneInfo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5370,6 +5458,52 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
|
|||||||
} // for names/parameters iterator
|
} // for names/parameters iterator
|
||||||
} // for entries iterator
|
} // for entries iterator
|
||||||
|
|
||||||
|
// take into account planes with empty list of actors referred to them
|
||||||
|
QList<SUIT_ViewManager*> aVMList;
|
||||||
|
getApp()->viewManagers(SVTK_Viewer::Type(), aVMList);
|
||||||
|
|
||||||
|
TPlaneDataMap::const_iterator aPlaneDataIter = aPlaneDataMap.begin();
|
||||||
|
for( ; aPlaneDataIter != aPlaneDataMap.end(); aPlaneDataIter++ ) {
|
||||||
|
int aViewId = aPlaneDataIter->first;
|
||||||
|
if( aViewId >= 0 && aViewId < aVMList.count() ) {
|
||||||
|
SUIT_ViewManager* aViewManager = aVMList.at( aViewId );
|
||||||
|
|
||||||
|
const TPlaneDataList& aPlaneDataList = aPlaneDataIter->second;
|
||||||
|
|
||||||
|
TPlaneInfoList& aPlaneInfoList = aPlaneInfoMap[ aViewId ];
|
||||||
|
TPlaneDataList::const_iterator anIter2 = aPlaneDataList.begin();
|
||||||
|
for( ; anIter2 != aPlaneDataList.end(); anIter2++ ) {
|
||||||
|
const TPlaneData& aPlaneData = *anIter2;
|
||||||
|
int aPlaneId = aPlaneData.Id;
|
||||||
|
|
||||||
|
bool anIsFound = false;
|
||||||
|
TPlaneInfoList::const_iterator anIter3 = aPlaneInfoList.begin();
|
||||||
|
for( ; anIter3 != aPlaneInfoList.end(); anIter3++ ) {
|
||||||
|
const TPlaneInfo& aPlaneInfo = *anIter3;
|
||||||
|
if( aPlaneInfo.PlaneId == aPlaneId ) {
|
||||||
|
anIsFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !anIsFound ) {
|
||||||
|
TPlaneInfo aPlaneInfo; // ActorList field is empty
|
||||||
|
aPlaneInfo.PlaneId = aPlaneId;
|
||||||
|
aPlaneInfo.ViewManager = aViewManager;
|
||||||
|
|
||||||
|
// to make the list sorted by plane id
|
||||||
|
TPlaneInfoList::iterator anIter4 = aPlaneInfoList.begin();
|
||||||
|
for( ; anIter4 != aPlaneInfoList.end(); anIter4++ ) {
|
||||||
|
const TPlaneInfo& aPlaneInfoRef = *anIter4;
|
||||||
|
if( aPlaneInfoRef.PlaneId > aPlaneId )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
aPlaneInfoList.insert( anIter4, aPlaneInfo );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// add clipping planes to actors according to the restored parameters
|
// add clipping planes to actors according to the restored parameters
|
||||||
// and update the clipping plane map
|
// and update the clipping plane map
|
||||||
TPlaneInfoMap::const_iterator anIter1 = aPlaneInfoMap.begin();
|
TPlaneInfoMap::const_iterator anIter1 = aPlaneInfoMap.begin();
|
||||||
|
@ -194,7 +194,8 @@ private:
|
|||||||
struct TSetVisibility {
|
struct TSetVisibility {
|
||||||
TSetVisibility(int theIsVisible): myIsVisible(theIsVisible){}
|
TSetVisibility(int theIsVisible): myIsVisible(theIsVisible){}
|
||||||
void operator()(SMESH::TPlaneData& thePlaneData){
|
void operator()(SMESH::TPlaneData& thePlaneData){
|
||||||
thePlaneData.Plane.GetPointer()->myActor->SetVisibility(myIsVisible);
|
bool anIsEmpty = thePlaneData.ActorList.empty();
|
||||||
|
thePlaneData.Plane.GetPointer()->myActor->SetVisibility(myIsVisible && !anIsEmpty);
|
||||||
}
|
}
|
||||||
int myIsVisible;
|
int myIsVisible;
|
||||||
};
|
};
|
||||||
@ -261,7 +262,18 @@ SMESH::OrientedPlane* SMESHGUI_ClippingDlg::AddPlane (SMESH::TActorList
|
|||||||
|
|
||||||
vtkFloatingPointType aBounds[6];
|
vtkFloatingPointType aBounds[6];
|
||||||
vtkFloatingPointType anOrigin[3];
|
vtkFloatingPointType anOrigin[3];
|
||||||
bool anIsOk = SMESH::ComputeClippingPlaneParameters( theActorList,
|
|
||||||
|
bool anIsOk = false;
|
||||||
|
if( theActorList.empty() ) {
|
||||||
|
// to support planes with empty actor list we should create
|
||||||
|
// a nullified plane that will be initialized later
|
||||||
|
anOrigin[0] = anOrigin[1] = anOrigin[2] = 0;
|
||||||
|
aBounds[0] = aBounds[2] = aBounds[4] = 0;
|
||||||
|
aBounds[1] = aBounds[3] = aBounds[5] = 0;
|
||||||
|
anIsOk = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
anIsOk = SMESH::ComputeClippingPlaneParameters( theActorList,
|
||||||
aNormal,
|
aNormal,
|
||||||
theDistance,
|
theDistance,
|
||||||
aBounds,
|
aBounds,
|
||||||
@ -545,8 +557,10 @@ void SMESHGUI_ClippingDlg::ClickOnApply()
|
|||||||
SMESH::TPlaneData aPlaneData = *anIter2;
|
SMESH::TPlaneData aPlaneData = *anIter2;
|
||||||
SMESH::TPlane aPlane = aPlaneData.Plane;
|
SMESH::TPlane aPlane = aPlaneData.Plane;
|
||||||
SMESH::TActorList anActorList = aPlaneData.ActorList;
|
SMESH::TActorList anActorList = aPlaneData.ActorList;
|
||||||
if( anActorList.empty() )
|
|
||||||
continue;
|
// the check is disabled to support planes with empty actor list
|
||||||
|
//if( anActorList.empty() )
|
||||||
|
// continue;
|
||||||
|
|
||||||
SMESH::OrientedPlane* anOrientedPlane = SMESH::OrientedPlane::New(myViewWindow);
|
SMESH::OrientedPlane* anOrientedPlane = SMESH::OrientedPlane::New(myViewWindow);
|
||||||
anOrientedPlane->ShallowCopy(aPlane.GetPointer());
|
anOrientedPlane->ShallowCopy(aPlane.GetPointer());
|
||||||
|
667
src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx
Normal file
@ -0,0 +1,667 @@
|
|||||||
|
// Copyright (C) 2007-2010 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.
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
// SMESH SMESHGUI : GUI for SMESH component
|
||||||
|
// File : SMESHGUI_CopyMeshDlg.cxx
|
||||||
|
|
||||||
|
#include "SMESHGUI_CopyMeshDlg.h"
|
||||||
|
|
||||||
|
#include "SMESHGUI.h"
|
||||||
|
#include "SMESHGUI_SpinBox.h"
|
||||||
|
#include "SMESHGUI_Utils.h"
|
||||||
|
#include "SMESHGUI_VTKUtils.h"
|
||||||
|
#include "SMESHGUI_MeshUtils.h"
|
||||||
|
#include "SMESHGUI_IdValidator.h"
|
||||||
|
#include "SMESHGUI_FilterDlg.h"
|
||||||
|
|
||||||
|
#include <SMESH_Actor.h>
|
||||||
|
#include <SMESH_TypeFilter.hxx>
|
||||||
|
#include <SMDS_Mesh.hxx>
|
||||||
|
|
||||||
|
// SALOME GUI includes
|
||||||
|
#include <SUIT_Desktop.h>
|
||||||
|
#include <SUIT_ResourceMgr.h>
|
||||||
|
#include <SUIT_Session.h>
|
||||||
|
#include <SUIT_MessageBox.h>
|
||||||
|
#include <SUIT_OverrideCursor.h>
|
||||||
|
|
||||||
|
#include <LightApp_Application.h>
|
||||||
|
#include <LightApp_SelectionMgr.h>
|
||||||
|
|
||||||
|
#include <SVTK_ViewModel.h>
|
||||||
|
#include <SVTK_ViewWindow.h>
|
||||||
|
#include <SALOME_ListIO.hxx>
|
||||||
|
|
||||||
|
// SALOME KERNEL includes
|
||||||
|
#include <SALOMEDSClient_SObject.hxx>
|
||||||
|
|
||||||
|
// OCCT includes
|
||||||
|
#include <TColStd_MapOfInteger.hxx>
|
||||||
|
|
||||||
|
// Qt includes
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QButtonGroup>
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QRadioButton>
|
||||||
|
#include <QCheckBox>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QGridLayout>
|
||||||
|
#include <QSpinBox>
|
||||||
|
#include <QKeyEvent>
|
||||||
|
|
||||||
|
// IDL includes
|
||||||
|
#include <SALOMEconfig.h>
|
||||||
|
#include CORBA_SERVER_HEADER(SMESH_Group)
|
||||||
|
#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class BusyLocker
|
||||||
|
\brief Simple 'busy state' flag locker.
|
||||||
|
\internal
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
class BusyLocker
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! Constructor. Sets passed boolean flag to \c true.
|
||||||
|
BusyLocker( bool& busy ) : myBusy( busy ) { myBusy = true; }
|
||||||
|
//! Destructor. Clear external boolean flag passed as parameter to the constructor to \c false.
|
||||||
|
~BusyLocker() { myBusy = false; }
|
||||||
|
private:
|
||||||
|
bool& myBusy; //! External 'busy state' boolean flag
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SPACING 6
|
||||||
|
#define MARGIN 11
|
||||||
|
|
||||||
|
//To disable automatic genericobj management, the following line should be commented.
|
||||||
|
//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
|
||||||
|
#define WITHGENERICOBJ
|
||||||
|
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Constructor
|
||||||
|
*/
|
||||||
|
//================================================================================
|
||||||
|
|
||||||
|
SMESHGUI_CopyMeshDlg::SMESHGUI_CopyMeshDlg( SMESHGUI* theModule )
|
||||||
|
: QDialog( SMESH::GetDesktop( theModule ) ),
|
||||||
|
mySMESHGUI( theModule ),
|
||||||
|
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
|
||||||
|
myFilterDlg(0),
|
||||||
|
mySelectedObject(SMESH::SMESH_IDSource::_nil())
|
||||||
|
{
|
||||||
|
QPixmap image (SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap("SMESH", tr("ICON_COPY_MESH")));
|
||||||
|
|
||||||
|
setModal(false);
|
||||||
|
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
|
setWindowTitle(tr("SMESH_COPY_MESH_TITLE"));
|
||||||
|
setSizeGripEnabled(true);
|
||||||
|
|
||||||
|
QVBoxLayout* SMESHGUI_CopyMeshDlgLayout = new QVBoxLayout(this);
|
||||||
|
SMESHGUI_CopyMeshDlgLayout->setSpacing(SPACING);
|
||||||
|
SMESHGUI_CopyMeshDlgLayout->setMargin(MARGIN);
|
||||||
|
|
||||||
|
/***************************************************************/
|
||||||
|
ConstructorsBox = new QGroupBox(tr("SMESH_COPY_MESH_TITLE"), this);
|
||||||
|
QButtonGroup* GroupConstructors = new QButtonGroup(this);
|
||||||
|
QHBoxLayout* ConstructorsBoxLayout = new QHBoxLayout(ConstructorsBox);
|
||||||
|
ConstructorsBoxLayout->setSpacing(SPACING);
|
||||||
|
ConstructorsBoxLayout->setMargin(MARGIN);
|
||||||
|
|
||||||
|
QRadioButton* RadioButton1= new QRadioButton(ConstructorsBox);
|
||||||
|
RadioButton1->setIcon(image);
|
||||||
|
GroupConstructors->addButton(RadioButton1, 0);
|
||||||
|
|
||||||
|
ConstructorsBoxLayout->addWidget(RadioButton1);
|
||||||
|
RadioButton1->setChecked(true);
|
||||||
|
GroupConstructors->addButton(RadioButton1, 0);
|
||||||
|
|
||||||
|
/***************************************************************/
|
||||||
|
GroupArguments = new QGroupBox(tr("SMESH_ARGUMENTS"), this);
|
||||||
|
QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments);
|
||||||
|
GroupArgumentsLayout->setSpacing(SPACING);
|
||||||
|
GroupArgumentsLayout->setMargin(MARGIN);
|
||||||
|
|
||||||
|
myIdValidator = new SMESHGUI_IdValidator(this);
|
||||||
|
|
||||||
|
// Controls for idSource/elements selection
|
||||||
|
myTextLabelElements = new QLabel(tr("OBJECT_NAME"), GroupArguments);
|
||||||
|
myLineEditElements = new QLineEdit(GroupArguments);
|
||||||
|
myLineEditElements->setValidator(myIdValidator);
|
||||||
|
myLineEditElements->setMaxLength(-1);
|
||||||
|
myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
|
||||||
|
connect(myFilterBtn, SIGNAL(clicked()), this, SLOT(setFilters()));
|
||||||
|
|
||||||
|
// Control for the mesh objects selection
|
||||||
|
myIdSourceCheck = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments);
|
||||||
|
|
||||||
|
// Name of a mesh to create
|
||||||
|
QLabel* meshNameLabel = new QLabel(tr("NEW_NAME"), GroupArguments);
|
||||||
|
myMeshNameEdit = new QLineEdit(GroupArguments);
|
||||||
|
|
||||||
|
// CheckBox for copying groups
|
||||||
|
myCopyGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
|
||||||
|
myCopyGroupsCheck->setChecked(false);
|
||||||
|
|
||||||
|
// CheckBox for keeping ids
|
||||||
|
myKeepIdsCheck = new QCheckBox(tr("SMESH_KEEP_IDS"), GroupArguments);
|
||||||
|
myKeepIdsCheck->setChecked(true);
|
||||||
|
|
||||||
|
// layout
|
||||||
|
GroupArgumentsLayout->addWidget(myTextLabelElements, 0, 0);
|
||||||
|
GroupArgumentsLayout->addWidget(myLineEditElements, 0, 1, 1, 5);
|
||||||
|
GroupArgumentsLayout->addWidget(myFilterBtn, 0, 6);
|
||||||
|
GroupArgumentsLayout->addWidget(myIdSourceCheck, 1, 0, 1, 6);
|
||||||
|
GroupArgumentsLayout->addWidget(meshNameLabel, 2, 0);
|
||||||
|
GroupArgumentsLayout->addWidget(myMeshNameEdit, 2, 1, 1, 5);
|
||||||
|
GroupArgumentsLayout->addWidget(myCopyGroupsCheck, 3, 0, 1, 6);
|
||||||
|
GroupArgumentsLayout->addWidget(myKeepIdsCheck, 4, 0, 1, 6);
|
||||||
|
|
||||||
|
/***************************************************************/
|
||||||
|
GroupButtons = new QGroupBox(this);
|
||||||
|
QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons);
|
||||||
|
GroupButtonsLayout->setSpacing(SPACING);
|
||||||
|
GroupButtonsLayout->setMargin(MARGIN);
|
||||||
|
|
||||||
|
buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons);
|
||||||
|
buttonOk->setAutoDefault(true);
|
||||||
|
buttonOk->setDefault(true);
|
||||||
|
buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons);
|
||||||
|
buttonApply->setAutoDefault(true);
|
||||||
|
buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons);
|
||||||
|
buttonCancel->setAutoDefault(true);
|
||||||
|
buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons);
|
||||||
|
buttonHelp->setAutoDefault(true);
|
||||||
|
|
||||||
|
GroupButtonsLayout->addWidget(buttonOk);
|
||||||
|
GroupButtonsLayout->addSpacing(10);
|
||||||
|
GroupButtonsLayout->addWidget(buttonApply);
|
||||||
|
GroupButtonsLayout->addSpacing(10);
|
||||||
|
GroupButtonsLayout->addStretch();
|
||||||
|
GroupButtonsLayout->addWidget(buttonCancel);
|
||||||
|
GroupButtonsLayout->addWidget(buttonHelp);
|
||||||
|
|
||||||
|
/***************************************************************/
|
||||||
|
SMESHGUI_CopyMeshDlgLayout->addWidget(ConstructorsBox);
|
||||||
|
SMESHGUI_CopyMeshDlgLayout->addWidget(GroupArguments);
|
||||||
|
SMESHGUI_CopyMeshDlgLayout->addWidget(GroupButtons);
|
||||||
|
|
||||||
|
/* Initialisations */
|
||||||
|
mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
|
||||||
|
|
||||||
|
mySMESHGUI->SetActiveDialogBox((QDialog*)this);
|
||||||
|
|
||||||
|
// Selection filter
|
||||||
|
myIdSourceFilter = new SMESH_TypeFilter( IDSOURCE );
|
||||||
|
|
||||||
|
myHelpFileName = "copy_mesh_page.html";
|
||||||
|
|
||||||
|
Init();
|
||||||
|
|
||||||
|
/* signals and slots connections */
|
||||||
|
connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
||||||
|
connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
|
||||||
|
connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
||||||
|
connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
|
||||||
|
|
||||||
|
connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()),
|
||||||
|
this, SLOT (DeactivateActiveDialog()));
|
||||||
|
connect(mySelectionMgr, SIGNAL (currentSelectionChanged()),
|
||||||
|
this, SLOT (SelectionIntoArgument()));
|
||||||
|
connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()),/* to close dialog if study change */
|
||||||
|
this, SLOT (ClickOnCancel()));
|
||||||
|
|
||||||
|
connect(myLineEditElements, SIGNAL(textChanged(const QString&)),
|
||||||
|
this, SLOT (onTextChange(const QString&)));
|
||||||
|
connect(myIdSourceCheck, SIGNAL(toggled(bool)),
|
||||||
|
this, SLOT (onSelectIdSource(bool)));
|
||||||
|
|
||||||
|
SelectionIntoArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ~SMESHGUI_CopyMeshDlg()
|
||||||
|
// purpose : Destroys the object and frees any allocated resources
|
||||||
|
//=================================================================================
|
||||||
|
|
||||||
|
SMESHGUI_CopyMeshDlg::~SMESHGUI_CopyMeshDlg()
|
||||||
|
{
|
||||||
|
if ( myFilterDlg )
|
||||||
|
{
|
||||||
|
myFilterDlg->setParent( 0 );
|
||||||
|
delete myFilterDlg; myFilterDlg = 0;
|
||||||
|
}
|
||||||
|
if ( myIdSourceFilter )
|
||||||
|
{
|
||||||
|
if ( mySelectionMgr )
|
||||||
|
mySelectionMgr->removeFilter( myIdSourceFilter );
|
||||||
|
delete myIdSourceFilter; myIdSourceFilter=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : Init()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::Init (bool ResetControls)
|
||||||
|
{
|
||||||
|
myBusy = false;
|
||||||
|
|
||||||
|
myMeshNameEdit->setText( SMESH::UniqueMeshName("Mesh"));
|
||||||
|
if ( ResetControls )
|
||||||
|
{
|
||||||
|
myLineEditElements->clear();
|
||||||
|
//myElementsId = "";
|
||||||
|
myNbOkElements = 0;
|
||||||
|
|
||||||
|
buttonOk->setEnabled(false);
|
||||||
|
buttonApply->setEnabled(false);
|
||||||
|
|
||||||
|
myActor = 0;
|
||||||
|
myMesh = SMESH::SMESH_Mesh::_nil();
|
||||||
|
|
||||||
|
myIdSourceCheck->setChecked(true);
|
||||||
|
myCopyGroupsCheck->setChecked(false);
|
||||||
|
myKeepIdsCheck->setChecked(false);
|
||||||
|
|
||||||
|
onSelectIdSource( myIdSourceCheck->isChecked() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnApply()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
|
||||||
|
bool SMESHGUI_CopyMeshDlg::ClickOnApply()
|
||||||
|
{
|
||||||
|
if (mySMESHGUI->isActiveStudyLocked())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if( !isValid() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SUIT_OverrideCursor aWaitCursor;
|
||||||
|
SMESH::SMESH_IDSource_var aPartToCopy;
|
||||||
|
if ( myIdSourceCheck->isChecked())
|
||||||
|
{
|
||||||
|
aPartToCopy = mySelectedObject;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QStringList aListElementsId = myLineEditElements->text().split(" ", QString::SkipEmptyParts);
|
||||||
|
SMESH::long_array_var anElementsId = new SMESH::long_array;
|
||||||
|
anElementsId->length(aListElementsId.count());
|
||||||
|
for (int i = 0; i < aListElementsId.count(); i++)
|
||||||
|
anElementsId[i] = aListElementsId[i].toInt();
|
||||||
|
|
||||||
|
SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
|
||||||
|
aPartToCopy = aMeshEditor->MakeIDSource( anElementsId, SMESH::ALL );
|
||||||
|
}
|
||||||
|
QByteArray meshName = myMeshNameEdit->text().toLatin1();
|
||||||
|
bool toCopyGroups = ( myCopyGroupsCheck->isChecked() );
|
||||||
|
bool toKeepIDs = ( myKeepIdsCheck->isChecked() );
|
||||||
|
|
||||||
|
SMESH::SMESH_Gen_var gen = SMESHGUI::GetSMESHGen();
|
||||||
|
SMESH::SMESH_Mesh_var newMesh =
|
||||||
|
gen->CopyMesh(aPartToCopy, meshName.constData(), toCopyGroups, toKeepIDs);
|
||||||
|
#ifdef WITHGENERICOBJ
|
||||||
|
// obj has been published in study. Its refcount has been incremented.
|
||||||
|
// It is safe to decrement its refcount
|
||||||
|
// so that it will be destroyed when the entry in study will be removed
|
||||||
|
newMesh->Destroy();
|
||||||
|
#endif
|
||||||
|
} catch (...) {
|
||||||
|
}
|
||||||
|
|
||||||
|
mySMESHGUI->updateObjBrowser(true);
|
||||||
|
SMESHGUI::Modified();
|
||||||
|
|
||||||
|
Init(false);
|
||||||
|
mySelectedObject = SMESH::SMESH_IDSource::_nil();
|
||||||
|
SelectionIntoArgument();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnOk()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::ClickOnOk()
|
||||||
|
{
|
||||||
|
if( ClickOnApply() )
|
||||||
|
ClickOnCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnCancel()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::ClickOnCancel()
|
||||||
|
{
|
||||||
|
disconnect(mySelectionMgr, 0, this, 0);
|
||||||
|
if ( mySelectionMgr )
|
||||||
|
mySelectionMgr->removeFilter( myIdSourceFilter );
|
||||||
|
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||||
|
aViewWindow->SetSelectionMode( ActorSelection );
|
||||||
|
mySMESHGUI->ResetState();
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnHelp()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::ClickOnHelp()
|
||||||
|
{
|
||||||
|
LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
|
||||||
|
if (app)
|
||||||
|
app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
|
||||||
|
else {
|
||||||
|
QString platform;
|
||||||
|
#ifdef WIN32
|
||||||
|
platform = "winapplication";
|
||||||
|
#else
|
||||||
|
platform = "application";
|
||||||
|
#endif
|
||||||
|
SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
|
||||||
|
tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
|
||||||
|
arg(app->resourceMgr()->stringValue("ExternalBrowser",
|
||||||
|
platform)).
|
||||||
|
arg(myHelpFileName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
// function : onTextChange()
|
||||||
|
// purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
void SMESHGUI_CopyMeshDlg::onTextChange (const QString& theNewText)
|
||||||
|
{
|
||||||
|
QLineEdit* send = (QLineEdit*)sender();
|
||||||
|
|
||||||
|
if (myBusy) return;
|
||||||
|
BusyLocker lock( myBusy );
|
||||||
|
|
||||||
|
//if (send == myLineEditElements)
|
||||||
|
myNbOkElements = 0;
|
||||||
|
|
||||||
|
buttonOk->setEnabled(false);
|
||||||
|
buttonApply->setEnabled(false);
|
||||||
|
|
||||||
|
// hilight entered elements
|
||||||
|
SMDS_Mesh* aMesh = 0;
|
||||||
|
if (myActor)
|
||||||
|
aMesh = myActor->GetObject()->GetMesh();
|
||||||
|
|
||||||
|
QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
|
||||||
|
if (myActor && aMesh)
|
||||||
|
{
|
||||||
|
TColStd_MapOfInteger newIndices;
|
||||||
|
if (send == myLineEditElements) {
|
||||||
|
for (int i = 0; i < aListId.count(); i++)
|
||||||
|
if ( const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()))
|
||||||
|
{
|
||||||
|
newIndices.Add(e->GetID());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
myNbOkElements = newIndices.Extent();
|
||||||
|
|
||||||
|
Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
|
||||||
|
mySelector->AddOrRemoveIndex( anIO, newIndices, false );
|
||||||
|
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||||
|
aViewWindow->highlight( anIO, true, true );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myNbOkElements = aListId.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (myNbOkElements) {
|
||||||
|
buttonOk->setEnabled(true);
|
||||||
|
buttonApply->setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SelectionIntoArgument()
|
||||||
|
// purpose : Called when selection as changed or other case
|
||||||
|
//=================================================================================
|
||||||
|
|
||||||
|
void SMESHGUI_CopyMeshDlg::SelectionIntoArgument()
|
||||||
|
{
|
||||||
|
if (myBusy) return;
|
||||||
|
BusyLocker lock( myBusy );
|
||||||
|
|
||||||
|
// clear
|
||||||
|
myActor = 0;
|
||||||
|
QString aString = "";
|
||||||
|
|
||||||
|
myLineEditElements->setText(aString);
|
||||||
|
myNbOkElements = 0;
|
||||||
|
buttonOk->setEnabled(false);
|
||||||
|
buttonApply->setEnabled(false);
|
||||||
|
myFilterBtn->setEnabled(false);
|
||||||
|
|
||||||
|
// get selected mesh
|
||||||
|
SALOME_ListIO aList;
|
||||||
|
mySelectionMgr->selectedObjects(aList,SVTK_Viewer::Type());
|
||||||
|
int nbSel = aList.Extent();
|
||||||
|
if (nbSel != 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Handle(SALOME_InteractiveObject) IO = aList.First();
|
||||||
|
mySelectedObject = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
|
||||||
|
if ( mySelectedObject->_is_nil() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
myMesh = SMESH::GetMeshByIO(IO);
|
||||||
|
if (myMesh->_is_nil())
|
||||||
|
return;
|
||||||
|
|
||||||
|
myActor = SMESH::FindActorByEntry(IO->getEntry());
|
||||||
|
if (!myActor)
|
||||||
|
myActor = SMESH::FindActorByObject(myMesh);
|
||||||
|
|
||||||
|
if (myIdSourceCheck->isChecked())
|
||||||
|
{
|
||||||
|
SMESH::GetNameOfSelectedIObjects( mySelectionMgr, aString );
|
||||||
|
if ( aString.isEmpty() ) aString = " ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SMESH::GetNameOfSelectedElements( mySelector, IO, aString );
|
||||||
|
myNbOkElements = aString.size();
|
||||||
|
myFilterBtn->setEnabled(true);
|
||||||
|
}
|
||||||
|
myLineEditElements->setText( aString );
|
||||||
|
bool ok = !aString.isEmpty();
|
||||||
|
|
||||||
|
buttonOk->setEnabled(ok);
|
||||||
|
buttonApply->setEnabled(ok);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : onSelectIdSource
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::onSelectIdSource (bool toSelectMesh)
|
||||||
|
{
|
||||||
|
if (toSelectMesh)
|
||||||
|
myTextLabelElements->setText(tr("OBJECT_NAME"));
|
||||||
|
else
|
||||||
|
myTextLabelElements->setText(tr("ELEM_IDS"));
|
||||||
|
|
||||||
|
if (toSelectMesh) {
|
||||||
|
myLineEditElements->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
mySelectionMgr->clearFilters();
|
||||||
|
mySelectionMgr->installFilter(myIdSourceFilter);
|
||||||
|
SMESH::SetPointRepresentation(false);
|
||||||
|
|
||||||
|
if (toSelectMesh) {
|
||||||
|
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||||
|
aViewWindow->SetSelectionMode( ActorSelection );
|
||||||
|
myLineEditElements->setReadOnly(true);
|
||||||
|
myLineEditElements->setValidator(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||||
|
aViewWindow->SetSelectionMode( CellSelection );
|
||||||
|
myLineEditElements->setReadOnly(false);
|
||||||
|
myLineEditElements->setValidator(myIdValidator);
|
||||||
|
onTextChange(myLineEditElements->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectionIntoArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : isValid
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
|
||||||
|
bool SMESHGUI_CopyMeshDlg::isValid()
|
||||||
|
{
|
||||||
|
if ( myIdSourceCheck->isChecked() )
|
||||||
|
return !mySelectedObject->_is_nil();
|
||||||
|
|
||||||
|
return myNbOkElements > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : DeactivateActiveDialog()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::DeactivateActiveDialog()
|
||||||
|
{
|
||||||
|
if (ConstructorsBox->isEnabled()) {
|
||||||
|
ConstructorsBox->setEnabled(false);
|
||||||
|
GroupArguments->setEnabled(false);
|
||||||
|
GroupButtons->setEnabled(false);
|
||||||
|
mySMESHGUI->ResetState();
|
||||||
|
mySMESHGUI->SetActiveDialogBox(0);
|
||||||
|
if ( mySelectionMgr )
|
||||||
|
mySelectionMgr->removeFilter( myIdSourceFilter );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ActivateThisDialog()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::ActivateThisDialog()
|
||||||
|
{
|
||||||
|
/* Emit a signal to deactivate the active dialog */
|
||||||
|
mySMESHGUI->EmitSignalDeactivateDialog();
|
||||||
|
ConstructorsBox->setEnabled(true);
|
||||||
|
GroupArguments->setEnabled(true);
|
||||||
|
GroupButtons->setEnabled(true);
|
||||||
|
|
||||||
|
mySMESHGUI->SetActiveDialogBox((QDialog*)this);
|
||||||
|
|
||||||
|
onSelectIdSource( myIdSourceCheck->isChecked() );
|
||||||
|
|
||||||
|
SelectionIntoArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : enterEvent()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::enterEvent (QEvent*)
|
||||||
|
{
|
||||||
|
if (!ConstructorsBox->isEnabled())
|
||||||
|
ActivateThisDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : closeEvent()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::closeEvent (QCloseEvent*)
|
||||||
|
{
|
||||||
|
/* same than click on cancel button */
|
||||||
|
ClickOnCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : hideEvent
|
||||||
|
//purpose : caused by ESC key
|
||||||
|
//=======================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::hideEvent (QHideEvent*)
|
||||||
|
{
|
||||||
|
if (!isMinimized())
|
||||||
|
ClickOnCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : keyPressEvent()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::keyPressEvent( QKeyEvent* e )
|
||||||
|
{
|
||||||
|
QDialog::keyPressEvent( e );
|
||||||
|
if ( e->isAccepted() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( e->key() == Qt::Key_F1 ) {
|
||||||
|
e->accept();
|
||||||
|
ClickOnHelp();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : setFilters()
|
||||||
|
// purpose : SLOT. Called when "Filter" button pressed.
|
||||||
|
//=================================================================================
|
||||||
|
void SMESHGUI_CopyMeshDlg::setFilters()
|
||||||
|
{
|
||||||
|
if(myMesh->_is_nil()) {
|
||||||
|
SUIT_MessageBox::critical(this,
|
||||||
|
tr("SMESH_ERROR"),
|
||||||
|
tr("NO_MESH_SELECTED"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( !myFilterDlg )
|
||||||
|
myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, SMESH::ALL );
|
||||||
|
|
||||||
|
myFilterDlg->SetSelection();
|
||||||
|
myFilterDlg->SetMesh( myMesh );
|
||||||
|
myFilterDlg->SetSourceWg( myLineEditElements );
|
||||||
|
|
||||||
|
myFilterDlg->show();
|
||||||
|
}
|
125
src/SMESHGUI/SMESHGUI_CopyMeshDlg.h
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
// Copyright (C) 2007-2010 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.
|
||||||
|
//
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
|
||||||
|
// SMESH SMESHGUI : GUI for SMESH component
|
||||||
|
// File : SMESHGUI_CopyMeshDlg.h
|
||||||
|
//
|
||||||
|
#ifndef SMESHGUI_CopyMeshDLG_H
|
||||||
|
#define SMESHGUI_CopyMeshDLG_H
|
||||||
|
|
||||||
|
// SMESH includes
|
||||||
|
#include "SMESH_SMESHGUI.hxx"
|
||||||
|
|
||||||
|
// Qt includes
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
// IDL includes
|
||||||
|
#include <SALOMEconfig.h>
|
||||||
|
#include CORBA_SERVER_HEADER(SMESH_Mesh)
|
||||||
|
|
||||||
|
class QCheckBox;
|
||||||
|
class QGroupBox;
|
||||||
|
class QLabel;
|
||||||
|
class QLineEdit;
|
||||||
|
class QPushButton;
|
||||||
|
|
||||||
|
class SMESHGUI;
|
||||||
|
class SMESHGUI_IdValidator;
|
||||||
|
class SMESHGUI_FilterDlg;
|
||||||
|
class SMESH_Actor;
|
||||||
|
class SVTK_Selector;
|
||||||
|
class LightApp_SelectionMgr;
|
||||||
|
class SUIT_SelectionFilter;
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// class : SMESHGUI_CopyMeshDlg
|
||||||
|
// purpose : copy some elements or a mesh object into a new mesh
|
||||||
|
//=================================================================================
|
||||||
|
|
||||||
|
class SMESHGUI_EXPORT SMESHGUI_CopyMeshDlg : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
SMESHGUI_CopyMeshDlg( SMESHGUI* );
|
||||||
|
~SMESHGUI_CopyMeshDlg();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Init( bool = true );
|
||||||
|
void closeEvent( QCloseEvent* );
|
||||||
|
void enterEvent( QEvent* ); /* mouse enter the QWidget */
|
||||||
|
void hideEvent( QHideEvent* ); /* ESC key */
|
||||||
|
void keyPressEvent( QKeyEvent* );
|
||||||
|
int GetConstructorId();
|
||||||
|
void setNewMeshName();
|
||||||
|
|
||||||
|
bool isValid();
|
||||||
|
|
||||||
|
SMESHGUI* mySMESHGUI; /* Current SMESHGUI object */
|
||||||
|
SMESHGUI_IdValidator* myIdValidator;
|
||||||
|
LightApp_SelectionMgr* mySelectionMgr; /* User shape selection */
|
||||||
|
int myNbOkElements; /* to check when elements are defined */
|
||||||
|
|
||||||
|
SVTK_Selector* mySelector;
|
||||||
|
|
||||||
|
bool myBusy;
|
||||||
|
SMESH::SMESH_Mesh_var myMesh;
|
||||||
|
SMESH_Actor* myActor;
|
||||||
|
SUIT_SelectionFilter* myIdSourceFilter;
|
||||||
|
|
||||||
|
SMESH::SMESH_IDSource_var mySelectedObject;
|
||||||
|
|
||||||
|
QGroupBox* ConstructorsBox;
|
||||||
|
QGroupBox* GroupArguments;
|
||||||
|
QGroupBox* GroupButtons;
|
||||||
|
|
||||||
|
QPushButton* buttonOk;
|
||||||
|
QPushButton* buttonCancel;
|
||||||
|
QPushButton* buttonApply;
|
||||||
|
QPushButton* buttonHelp;
|
||||||
|
|
||||||
|
QLabel* myTextLabelElements;
|
||||||
|
QLineEdit* myLineEditElements;
|
||||||
|
QLineEdit* myMeshNameEdit;
|
||||||
|
QCheckBox* myIdSourceCheck;
|
||||||
|
QCheckBox* myCopyGroupsCheck;
|
||||||
|
QCheckBox* myKeepIdsCheck;
|
||||||
|
|
||||||
|
QPushButton* myFilterBtn;
|
||||||
|
SMESHGUI_FilterDlg* myFilterDlg;
|
||||||
|
|
||||||
|
QString myHelpFileName;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void ClickOnOk();
|
||||||
|
void ClickOnCancel();
|
||||||
|
bool ClickOnApply();
|
||||||
|
void ClickOnHelp();
|
||||||
|
void SelectionIntoArgument();
|
||||||
|
void DeactivateActiveDialog();
|
||||||
|
void ActivateThisDialog();
|
||||||
|
void onTextChange( const QString& );
|
||||||
|
void onSelectIdSource( bool );
|
||||||
|
void setFilters();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SMESHGUI_CopyMeshDLG_H
|
@ -1180,6 +1180,10 @@ void SMESHGUI_FilterTable::SetCriterion (const int theRow,
|
|||||||
theCriterion.Type != SMESH::FT_FreeNodes &&
|
theCriterion.Type != SMESH::FT_FreeNodes &&
|
||||||
theCriterion.Type != SMESH::FT_FreeFaces &&
|
theCriterion.Type != SMESH::FT_FreeFaces &&
|
||||||
theCriterion.Type != SMESH::FT_BadOrientedVolume &&
|
theCriterion.Type != SMESH::FT_BadOrientedVolume &&
|
||||||
|
theCriterion.Type != SMESH::FT_BareBorderFace &&
|
||||||
|
theCriterion.Type != SMESH::FT_BareBorderVolume &&
|
||||||
|
theCriterion.Type != SMESH::FT_OverConstrainedFace &&
|
||||||
|
theCriterion.Type != SMESH::FT_OverConstrainedVolume &&
|
||||||
theCriterion.Type != SMESH::FT_LinearOrQuadratic)
|
theCriterion.Type != SMESH::FT_LinearOrQuadratic)
|
||||||
{
|
{
|
||||||
aTable->item( theRow, 2 )->setText(QString("%1").arg(theCriterion.Threshold, 0, 'g', 15));
|
aTable->item( theRow, 2 )->setText(QString("%1").arg(theCriterion.Threshold, 0, 'g', 15));
|
||||||
@ -1341,7 +1345,11 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
|
|||||||
aCriterion != SMESH::FT_RangeOfIds &&
|
aCriterion != SMESH::FT_RangeOfIds &&
|
||||||
aCriterion != SMESH::FT_FreeEdges &&
|
aCriterion != SMESH::FT_FreeEdges &&
|
||||||
aCriterion != SMESH::FT_FreeFaces &&
|
aCriterion != SMESH::FT_FreeFaces &&
|
||||||
aCriterion != SMESH::FT_BadOrientedVolume)
|
aCriterion != SMESH::FT_BadOrientedVolume &&
|
||||||
|
aCriterion != SMESH::FT_BareBorderFace &&
|
||||||
|
aCriterion != SMESH::FT_BareBorderVolume &&
|
||||||
|
aCriterion != SMESH::FT_OverConstrainedFace &&
|
||||||
|
aCriterion != SMESH::FT_OverConstrainedVolume)
|
||||||
||
|
||
|
||||||
aCriterion == SMESH::FT_CoplanarFaces);
|
aCriterion == SMESH::FT_CoplanarFaces);
|
||||||
|
|
||||||
@ -1520,9 +1528,13 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
|
|||||||
|
|
||||||
if ((aType == SMESH::NODE && aCriterionType == SMESH::FT_FreeNodes ) ||
|
if ((aType == SMESH::NODE && aCriterionType == SMESH::FT_FreeNodes ) ||
|
||||||
(aType == SMESH::EDGE && aCriterionType == SMESH::FT_FreeBorders ) ||
|
(aType == SMESH::EDGE && aCriterionType == SMESH::FT_FreeBorders ) ||
|
||||||
(aType == SMESH::FACE && (aCriterionType == SMESH::FT_FreeEdges ||
|
(aType == SMESH::FACE && (aCriterionType == SMESH::FT_BareBorderFace ||
|
||||||
|
aCriterionType == SMESH::FT_OverConstrainedFace ||
|
||||||
|
aCriterionType == SMESH::FT_FreeEdges ||
|
||||||
aCriterionType == SMESH::FT_FreeFaces)) ||
|
aCriterionType == SMESH::FT_FreeFaces)) ||
|
||||||
(aType == SMESH::VOLUME && aCriterionType == SMESH::FT_BadOrientedVolume) ||
|
(aType == SMESH::VOLUME && (aCriterionType == SMESH::FT_BadOrientedVolume ||
|
||||||
|
aCriterionType == SMESH::FT_OverConstrainedVolume ||
|
||||||
|
aCriterionType == SMESH::FT_BareBorderVolume)) ||
|
||||||
aCriterionType == SMESH::FT_LinearOrQuadratic ||
|
aCriterionType == SMESH::FT_LinearOrQuadratic ||
|
||||||
aCriterionType == SMESH::FT_GroupColor ||
|
aCriterionType == SMESH::FT_GroupColor ||
|
||||||
aCriterionType == SMESH::FT_ElemGeomType ||
|
aCriterionType == SMESH::FT_ElemGeomType ||
|
||||||
@ -1808,6 +1820,8 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
|
|||||||
aCriteria[ SMESH::FT_Length2D ] = tr("LENGTH2D");
|
aCriteria[ SMESH::FT_Length2D ] = tr("LENGTH2D");
|
||||||
aCriteria[ SMESH::FT_MultiConnection2D ] = tr("MULTI2D_BORDERS");
|
aCriteria[ SMESH::FT_MultiConnection2D ] = tr("MULTI2D_BORDERS");
|
||||||
aCriteria[ SMESH::FT_FreeFaces ] = tr("FREE_FACES");
|
aCriteria[ SMESH::FT_FreeFaces ] = tr("FREE_FACES");
|
||||||
|
aCriteria[ SMESH::FT_BareBorderFace ] = tr("BARE_BORDER_FACE");
|
||||||
|
aCriteria[ SMESH::FT_OverConstrainedFace] = tr("OVER_CONSTRAINED_FACE");
|
||||||
aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR");
|
aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR");
|
||||||
aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR");
|
aCriteria[ SMESH::FT_GroupColor ] = tr("GROUP_COLOR");
|
||||||
aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE");
|
aCriteria[ SMESH::FT_ElemGeomType ] = tr("GEOM_TYPE");
|
||||||
@ -1825,6 +1839,8 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
|
|||||||
aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
|
aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
|
||||||
aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
|
aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
|
||||||
aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME");
|
aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME");
|
||||||
|
aCriteria[ SMESH::FT_BareBorderVolume ] = tr("BARE_BORDER_VOLUME");
|
||||||
|
aCriteria[ SMESH::FT_OverConstrainedVolume] = tr("OVER_CONSTRAINED_VOLUME");
|
||||||
aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D");
|
aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D");
|
||||||
aCriteria[ SMESH::FT_MaxElementLength3D ] = tr("MAX_ELEMENT_LENGTH_3D");
|
aCriteria[ SMESH::FT_MaxElementLength3D ] = tr("MAX_ELEMENT_LENGTH_3D");
|
||||||
aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR");
|
aCriteria[ SMESH::FT_LinearOrQuadratic ] = tr("LINEAR");
|
||||||
|
@ -309,7 +309,7 @@ void SMESHGUI_GenericHypothesisCreator::onDialogFinished( int result )
|
|||||||
|
|
||||||
disconnect( myDlg, SIGNAL( finished( int ) ), this, SLOT( onDialogFinished( int ) ) );
|
disconnect( myDlg, SIGNAL( finished( int ) ), this, SLOT( onDialogFinished( int ) ) );
|
||||||
myDlg->close();
|
myDlg->close();
|
||||||
//delete myDlg;
|
//delete myDlg; since WA_DeleteOnClose==true
|
||||||
myDlg = 0;
|
myDlg = 0;
|
||||||
emit finished( result );
|
emit finished( result );
|
||||||
}
|
}
|
||||||
@ -557,6 +557,8 @@ QString SMESHGUI_GenericHypothesisCreator::helpPage() const
|
|||||||
aHelpFileName = "segments_around_vertex_algo_page.html";
|
aHelpFileName = "segments_around_vertex_algo_page.html";
|
||||||
else if ( aHypType == "QuadrangleParams")
|
else if ( aHypType == "QuadrangleParams")
|
||||||
aHelpFileName = "a2d_meshing_hypo_page.html#hypo_quad_params_anchor";
|
aHelpFileName = "a2d_meshing_hypo_page.html#hypo_quad_params_anchor";
|
||||||
|
else if ( aHypType == "ImportSource1D" || aHypType == "ImportSource2D")
|
||||||
|
aHelpFileName = "import_algos_page.html";
|
||||||
return aHelpFileName;
|
return aHelpFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
|
|
||||||
const int SPACING = 6;
|
const int SPACING = 6;
|
||||||
const int MARGIN = 9;
|
const int MARGIN = 9;
|
||||||
|
const int MAXITEMS = 10;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class SMESHGUI_MeshInfo
|
\class SMESHGUI_MeshInfo
|
||||||
@ -465,8 +466,29 @@ void SMESHGUI_MeshInfo::setFieldsVisible( int start, int end, bool on )
|
|||||||
\param parent parent widget
|
\param parent parent widget
|
||||||
*/
|
*/
|
||||||
SMESHGUI_ElemInfo::SMESHGUI_ElemInfo( QWidget* parent )
|
SMESHGUI_ElemInfo::SMESHGUI_ElemInfo( QWidget* parent )
|
||||||
: QWidget( parent ), myActor( 0 ), myID( 0 ), myIsElement( -1 )
|
: QWidget( parent ), myActor( 0 ), myIsElement( -1 )
|
||||||
{
|
{
|
||||||
|
myFrame = new QWidget( this );
|
||||||
|
myExtra = new QWidget( this );
|
||||||
|
myCurrent = new QLabel( "10/43 items shown", myExtra );
|
||||||
|
myCurrent->setAlignment( Qt::AlignRight | Qt::AlignVCenter );
|
||||||
|
myPrev = new QPushButton( tr( "<<" ), myExtra );
|
||||||
|
myNext = new QPushButton( tr( ">>" ), myExtra );
|
||||||
|
QHBoxLayout* hbl = new QHBoxLayout( myExtra );
|
||||||
|
hbl->setContentsMargins( 0, SPACING, 0, 0 );
|
||||||
|
hbl->setSpacing( SPACING );
|
||||||
|
hbl->addStretch();
|
||||||
|
hbl->addWidget( myCurrent );
|
||||||
|
hbl->addWidget( myPrev );
|
||||||
|
hbl->addWidget( myNext );
|
||||||
|
QVBoxLayout* vbl = new QVBoxLayout( this );
|
||||||
|
vbl->setMargin( 0 );
|
||||||
|
vbl->setSpacing( 0 );
|
||||||
|
vbl->addWidget( myFrame );
|
||||||
|
vbl->addWidget( myExtra );
|
||||||
|
connect( myPrev, SIGNAL( clicked() ), this, SLOT( showPrevious() ) );
|
||||||
|
connect( myNext, SIGNAL( clicked() ), this, SLOT( showNext() ) );
|
||||||
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -484,7 +506,6 @@ void SMESHGUI_ElemInfo::setSource( SMESH_Actor* actor )
|
|||||||
{
|
{
|
||||||
if ( myActor != actor ) {
|
if ( myActor != actor ) {
|
||||||
myActor = actor;
|
myActor = actor;
|
||||||
myID = 0;
|
|
||||||
myIsElement = -1;
|
myIsElement = -1;
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
@ -492,19 +513,87 @@ void SMESHGUI_ElemInfo::setSource( SMESH_Actor* actor )
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Show mesh element information
|
\brief Show mesh element information
|
||||||
\param long id mesh node / element ID
|
\param id mesh node / element ID
|
||||||
\param isElem show mesh element information if \c true or mesh node information if \c false
|
\param isElem show mesh element information if \c true or mesh node information if \c false
|
||||||
*/
|
*/
|
||||||
void SMESHGUI_ElemInfo::showInfo( long id, bool isElem )
|
void SMESHGUI_ElemInfo::showInfo( long id, bool isElem )
|
||||||
{
|
{
|
||||||
myID = id;
|
QSet<long> ids;
|
||||||
myIsElement = isElem;
|
ids << id;
|
||||||
|
showInfo( ids, isElem );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Show mesh element information
|
||||||
|
\param ids mesh nodes / elements identifiers
|
||||||
|
\param isElem show mesh element information if \c true or mesh node information if \c false
|
||||||
|
*/
|
||||||
|
void SMESHGUI_ElemInfo::showInfo( QSet<long> ids, bool isElem )
|
||||||
|
{
|
||||||
|
QList<long> newIds = ids.toList();
|
||||||
|
qSort( newIds );
|
||||||
|
if ( myIDs == newIds && myIsElement == isElem ) return;
|
||||||
|
|
||||||
|
myIDs = newIds;
|
||||||
|
myIsElement = isElem;
|
||||||
|
myIndex = 0;
|
||||||
|
updateControls();
|
||||||
|
information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn void SMESHGUI_ElemInfo::clear()
|
|
||||||
\brief Clear mesh element information widget
|
\brief Clear mesh element information widget
|
||||||
*/
|
*/
|
||||||
|
void SMESHGUI_ElemInfo::clear()
|
||||||
|
{
|
||||||
|
myIDs.clear();
|
||||||
|
myIndex = 0;
|
||||||
|
clearInternal();
|
||||||
|
updateControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Get central area widget
|
||||||
|
\return central widget
|
||||||
|
*/
|
||||||
|
QWidget* SMESHGUI_ElemInfo::frame() const
|
||||||
|
{
|
||||||
|
return myFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Get actor
|
||||||
|
\return actor being used
|
||||||
|
*/
|
||||||
|
SMESH_Actor* SMESHGUI_ElemInfo::actor() const
|
||||||
|
{
|
||||||
|
return myActor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Get current info mode.
|
||||||
|
\return \c true if mesh element information is shown or \c false if node information is shown
|
||||||
|
*/
|
||||||
|
bool SMESHGUI_ElemInfo::isElements() const
|
||||||
|
{
|
||||||
|
return myIsElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn void SMESHGUI_ElemInfo::information( const QList<long>& ids )
|
||||||
|
\brief Show information on the specified nodes / elements
|
||||||
|
|
||||||
|
This function is to be redefined in sub-classes.
|
||||||
|
|
||||||
|
\param ids nodes / elements identifiers information is to be shown on
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Internal clean-up (reset widget)
|
||||||
|
*/
|
||||||
|
void SMESHGUI_ElemInfo::clearInternal()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Get node connectivity
|
\brief Get node connectivity
|
||||||
@ -560,6 +649,39 @@ SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::gravityCenter( const SMDS_MeshElement*
|
|||||||
return xyz;
|
return xyz;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief This slot is called from "Show Previous" button click.
|
||||||
|
Shows information on the previous group of the items.
|
||||||
|
*/
|
||||||
|
void SMESHGUI_ElemInfo::showPrevious()
|
||||||
|
{
|
||||||
|
myIndex = qMax( 0, myIndex-1 );
|
||||||
|
updateControls();
|
||||||
|
information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief This slot is called from "Show Next" button click.
|
||||||
|
Shows information on the next group of the items.
|
||||||
|
*/
|
||||||
|
void SMESHGUI_ElemInfo::showNext()
|
||||||
|
{
|
||||||
|
myIndex = qMin( myIndex+1, myIDs.count() / MAXITEMS );
|
||||||
|
updateControls();
|
||||||
|
information( myIDs.mid( myIndex*MAXITEMS, MAXITEMS ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Update widgets state
|
||||||
|
*/
|
||||||
|
void SMESHGUI_ElemInfo::updateControls()
|
||||||
|
{
|
||||||
|
myExtra->setVisible( myIDs.count() > MAXITEMS );
|
||||||
|
myCurrent->setText( tr( "X_FROM_Y_ITEMS_SHOWN" ).arg( myIndex*MAXITEMS+1 ).arg(qMin(myIndex*MAXITEMS+MAXITEMS, myIDs.count())).arg( myIDs.count() ) );
|
||||||
|
myPrev->setEnabled( myIndex > 0 );
|
||||||
|
myNext->setEnabled( (myIndex+1)*MAXITEMS < myIDs.count() );
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class SMESHGUI_SimpleElemInfo
|
\class SMESHGUI_SimpleElemInfo
|
||||||
\brief Represents mesh element information in the simple text area.
|
\brief Represents mesh element information in the simple text area.
|
||||||
@ -572,32 +694,28 @@ SMESHGUI_ElemInfo::XYZ SMESHGUI_ElemInfo::gravityCenter( const SMDS_MeshElement*
|
|||||||
SMESHGUI_SimpleElemInfo::SMESHGUI_SimpleElemInfo( QWidget* parent )
|
SMESHGUI_SimpleElemInfo::SMESHGUI_SimpleElemInfo( QWidget* parent )
|
||||||
: SMESHGUI_ElemInfo( parent )
|
: SMESHGUI_ElemInfo( parent )
|
||||||
{
|
{
|
||||||
myInfo = new QTextBrowser( this );
|
myInfo = new QTextBrowser( frame() );
|
||||||
QVBoxLayout* l = new QVBoxLayout( this );
|
QVBoxLayout* l = new QVBoxLayout( frame() );
|
||||||
l->setMargin( 0 );
|
l->setMargin( 0 );
|
||||||
l->addWidget( myInfo );
|
l->addWidget( myInfo );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Show mesh element information
|
\brief Show mesh element information
|
||||||
\param long id mesh node / element ID
|
\param ids mesh nodes / elements identifiers
|
||||||
\param isElem show mesh element information if \c true or mesh node information if \c false
|
|
||||||
*/
|
*/
|
||||||
void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem )
|
void SMESHGUI_SimpleElemInfo::information( const QList<long>& ids )
|
||||||
{
|
{
|
||||||
if ( myID == id && myIsElement == isElem ) return;
|
clearInternal();
|
||||||
|
|
||||||
SMESHGUI_ElemInfo::showInfo( id, isElem );
|
if ( actor() ) {
|
||||||
|
|
||||||
clear();
|
|
||||||
|
|
||||||
if ( myActor ) {
|
|
||||||
int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
|
int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
|
||||||
if ( !isElem ) {
|
foreach ( long id, ids ) {
|
||||||
|
if ( !isElements() ) {
|
||||||
//
|
//
|
||||||
// show node info
|
// show node info
|
||||||
//
|
//
|
||||||
const SMDS_MeshElement* e = myActor->GetObject()->GetMesh()->FindNode( id );
|
const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindNode( id );
|
||||||
if ( !e ) return;
|
if ( !e ) return;
|
||||||
const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( e );
|
const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( e );
|
||||||
|
|
||||||
@ -637,7 +755,7 @@ void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem )
|
|||||||
//
|
//
|
||||||
// show element info
|
// show element info
|
||||||
//
|
//
|
||||||
const SMDS_MeshElement* e = myActor->GetObject()->GetMesh()->FindElement( id );
|
const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindElement( id );
|
||||||
if ( !e ) return;
|
if ( !e ) return;
|
||||||
|
|
||||||
// element ID && type
|
// element ID && type
|
||||||
@ -733,7 +851,12 @@ void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem )
|
|||||||
else {
|
else {
|
||||||
myInfo->append( QString( "<b>%1</b>" ).arg( tr( "FREE_NODE" ) ).arg( id ) );
|
myInfo->append( QString( "<b>%1</b>" ).arg( tr( "FREE_NODE" ) ).arg( id ) );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// separator
|
// separator
|
||||||
|
if ( ids.count() > 1 ) {
|
||||||
|
myInfo->append( "" );
|
||||||
|
myInfo->append( "------" );
|
||||||
myInfo->append( "" );
|
myInfo->append( "" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -741,9 +864,9 @@ void SMESHGUI_SimpleElemInfo::showInfo( long id, bool isElem )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Clear mesh element information widget
|
\brief Internal clean-up (reset widget)
|
||||||
*/
|
*/
|
||||||
void SMESHGUI_SimpleElemInfo::clear()
|
void SMESHGUI_SimpleElemInfo::clearInternal()
|
||||||
{
|
{
|
||||||
myInfo->clear();
|
myInfo->clear();
|
||||||
}
|
}
|
||||||
@ -791,37 +914,33 @@ QWidget* SMESHGUI_TreeElemInfo::ItemDelegate::createEditor( QWidget* parent, con
|
|||||||
SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo( QWidget* parent )
|
SMESHGUI_TreeElemInfo::SMESHGUI_TreeElemInfo( QWidget* parent )
|
||||||
: SMESHGUI_ElemInfo( parent )
|
: SMESHGUI_ElemInfo( parent )
|
||||||
{
|
{
|
||||||
myInfo = new QTreeWidget( this );
|
myInfo = new QTreeWidget( frame() );
|
||||||
myInfo->setColumnCount( 2 );
|
myInfo->setColumnCount( 2 );
|
||||||
myInfo->setHeaderLabels( QStringList() << tr( "PROPERTY" ) << tr( "VALUE" ) );
|
myInfo->setHeaderLabels( QStringList() << tr( "PROPERTY" ) << tr( "VALUE" ) );
|
||||||
myInfo->header()->setStretchLastSection( true );
|
myInfo->header()->setStretchLastSection( true );
|
||||||
myInfo->header()->setResizeMode( 0, QHeaderView::ResizeToContents );
|
myInfo->header()->setResizeMode( 0, QHeaderView::ResizeToContents );
|
||||||
myInfo->setItemDelegate( new ItemDelegate( myInfo ) );
|
myInfo->setItemDelegate( new ItemDelegate( myInfo ) );
|
||||||
QVBoxLayout* l = new QVBoxLayout( this );
|
QVBoxLayout* l = new QVBoxLayout( frame() );
|
||||||
l->setMargin( 0 );
|
l->setMargin( 0 );
|
||||||
l->addWidget( myInfo );
|
l->addWidget( myInfo );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Show mesh element information
|
\brief Show mesh element information
|
||||||
\param long id mesh node / element ID
|
\param ids mesh nodes / elements identifiers
|
||||||
\param isElem show mesh element information if \c true or mesh node information if \c false
|
|
||||||
*/
|
*/
|
||||||
void SMESHGUI_TreeElemInfo::showInfo( long id, bool isElem )
|
void SMESHGUI_TreeElemInfo::information( const QList<long>& ids )
|
||||||
{
|
{
|
||||||
if ( myID == id && myIsElement == isElem ) return;
|
clearInternal();
|
||||||
|
|
||||||
SMESHGUI_ElemInfo::showInfo( id, isElem );
|
if ( actor() ) {
|
||||||
|
|
||||||
clear();
|
|
||||||
|
|
||||||
if ( myActor ) {
|
|
||||||
int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
|
int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
|
||||||
if ( !isElem ) {
|
foreach ( long id, ids ) {
|
||||||
|
if ( !isElements() ) {
|
||||||
//
|
//
|
||||||
// show node info
|
// show node info
|
||||||
//
|
//
|
||||||
const SMDS_MeshElement* e = myActor->GetObject()->GetMesh()->FindNode( id );
|
const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindNode( id );
|
||||||
if ( !e ) return;
|
if ( !e ) return;
|
||||||
const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( e );
|
const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( e );
|
||||||
|
|
||||||
@ -882,7 +1001,7 @@ void SMESHGUI_TreeElemInfo::showInfo( long id, bool isElem )
|
|||||||
//
|
//
|
||||||
// show element info
|
// show element info
|
||||||
//
|
//
|
||||||
const SMDS_MeshElement* e = myActor->GetObject()->GetMesh()->FindElement( id );
|
const SMDS_MeshElement* e = actor()->GetObject()->GetMesh()->FindElement( id );
|
||||||
if ( !e ) return;
|
if ( !e ) return;
|
||||||
|
|
||||||
// element ID && type
|
// element ID && type
|
||||||
@ -1020,11 +1139,12 @@ void SMESHGUI_TreeElemInfo::showInfo( long id, bool isElem )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Clear mesh element information widget
|
\brief Internal clean-up (reset widget)
|
||||||
*/
|
*/
|
||||||
void SMESHGUI_TreeElemInfo::clear()
|
void SMESHGUI_TreeElemInfo::clearInternal()
|
||||||
{
|
{
|
||||||
myInfo->clear();
|
myInfo->clear();
|
||||||
myInfo->repaint();
|
myInfo->repaint();
|
||||||
@ -1092,7 +1212,7 @@ SMESHGUI_MeshInfoDlg::SMESHGUI_MeshInfoDlg( QWidget* parent, int page )
|
|||||||
myMode->addButton( new QRadioButton( tr( "ELEM_MODE" ), w ), ElemMode );
|
myMode->addButton( new QRadioButton( tr( "ELEM_MODE" ), w ), ElemMode );
|
||||||
myMode->button( NodeMode )->setChecked( true );
|
myMode->button( NodeMode )->setChecked( true );
|
||||||
myID = new QLineEdit( w );
|
myID = new QLineEdit( w );
|
||||||
myID->setValidator( new SMESHGUI_IdValidator( this, 1 ) );
|
myID->setValidator( new SMESHGUI_IdValidator( this ) );
|
||||||
|
|
||||||
int mode = SMESHGUI::resourceMgr()->integerValue( "SMESH", "mesh_elem_info", 1 );
|
int mode = SMESHGUI::resourceMgr()->integerValue( "SMESH", "mesh_elem_info", 1 );
|
||||||
mode = qMin( 1, qMax( 0, mode ) );
|
mode = qMin( 1, qMax( 0, mode ) );
|
||||||
@ -1173,10 +1293,14 @@ void SMESHGUI_MeshInfoDlg::showInfo( const Handle(SALOME_InteractiveObject)& IO
|
|||||||
SMESH::GetNameOfSelectedElements( selector, IO, ID ) :
|
SMESH::GetNameOfSelectedElements( selector, IO, ID ) :
|
||||||
SMESH::GetNameOfSelectedNodes( selector, IO, ID );
|
SMESH::GetNameOfSelectedNodes( selector, IO, ID );
|
||||||
}
|
}
|
||||||
if ( nb == 1 ) {
|
|
||||||
myID->setText( ID.trimmed() );
|
|
||||||
myElemInfo->setSource( myActor ) ;
|
myElemInfo->setSource( myActor ) ;
|
||||||
myElemInfo->showInfo( ID.toLong(), myMode->checkedId() == ElemMode );
|
if ( nb > 0 ) {
|
||||||
|
myID->setText( ID.trimmed() );
|
||||||
|
QSet<long> ids;
|
||||||
|
QStringList idTxt = ID.split( " ", QString::SkipEmptyParts );
|
||||||
|
foreach ( ID, idTxt )
|
||||||
|
ids << ID.trimmed().toLong();
|
||||||
|
myElemInfo->showInfo( ids, myMode->checkedId() == ElemMode );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
myID->clear();
|
myID->clear();
|
||||||
@ -1247,15 +1371,15 @@ void SMESHGUI_MeshInfoDlg::updateSelection()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int oldID = myID->text().toLong();
|
QString oldID = myID->text().trimmed();
|
||||||
SMESH_Actor* oldActor = myActor;
|
SMESH_Actor* oldActor = myActor;
|
||||||
myID->clear();
|
myID->clear();
|
||||||
|
|
||||||
connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() ) );
|
connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() ) );
|
||||||
updateInfo();
|
updateInfo();
|
||||||
|
|
||||||
if ( oldActor == myActor && myActor && oldID ) {
|
if ( oldActor == myActor && myActor && !oldID.isEmpty() ) {
|
||||||
myID->setText( QString::number( oldID ) );
|
myID->setText( oldID );
|
||||||
idChanged();
|
idChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1328,10 +1452,21 @@ void SMESHGUI_MeshInfoDlg::idChanged()
|
|||||||
if ( myActor && selector ) {
|
if ( myActor && selector ) {
|
||||||
Handle(SALOME_InteractiveObject) IO = myActor->getIO();
|
Handle(SALOME_InteractiveObject) IO = myActor->getIO();
|
||||||
TColStd_MapOfInteger ID;
|
TColStd_MapOfInteger ID;
|
||||||
ID.Add( myID->text().toLong() );
|
QSet<long> ids;
|
||||||
|
QStringList idTxt = myID->text().split( " ", QString::SkipEmptyParts );
|
||||||
|
foreach ( QString tid, idTxt ) {
|
||||||
|
long id = tid.trimmed().toLong();
|
||||||
|
const SMDS_MeshElement* e = myMode->checkedId() == ElemMode ?
|
||||||
|
myActor->GetObject()->GetMesh()->FindElement( id ) :
|
||||||
|
myActor->GetObject()->GetMesh()->FindNode( id );
|
||||||
|
if ( e ) {
|
||||||
|
ID.Add( id );
|
||||||
|
ids << id;
|
||||||
|
}
|
||||||
|
}
|
||||||
selector->AddOrRemoveIndex( IO, ID, false );
|
selector->AddOrRemoveIndex( IO, ID, false );
|
||||||
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
|
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
|
||||||
aViewWindow->highlight( IO, true, true );
|
aViewWindow->highlight( IO, true, true );
|
||||||
myElemInfo->showInfo( myID->text().toLong(), myMode->checkedId() == ElemMode );
|
myElemInfo->showInfo( ids, myMode->checkedId() == ElemMode );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
#include <QSet>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
|
||||||
#include <SALOMEconfig.h>
|
#include <SALOMEconfig.h>
|
||||||
@ -40,6 +41,7 @@
|
|||||||
class QButtonGroup;
|
class QButtonGroup;
|
||||||
class QLabel;
|
class QLabel;
|
||||||
class QLineEdit;
|
class QLineEdit;
|
||||||
|
class QPushButton;
|
||||||
class QTabWidget;
|
class QTabWidget;
|
||||||
class QTextBrowser;
|
class QTextBrowser;
|
||||||
class QTreeWidget;
|
class QTreeWidget;
|
||||||
@ -121,8 +123,9 @@ public:
|
|||||||
~SMESHGUI_ElemInfo();
|
~SMESHGUI_ElemInfo();
|
||||||
|
|
||||||
void setSource( SMESH_Actor* );
|
void setSource( SMESH_Actor* );
|
||||||
virtual void showInfo( long, bool );
|
void showInfo( long, bool );
|
||||||
virtual void clear() = 0;
|
void showInfo( QSet<long>, bool );
|
||||||
|
void clear();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
struct XYZ
|
struct XYZ
|
||||||
@ -137,14 +140,32 @@ protected:
|
|||||||
};
|
};
|
||||||
typedef QMap< int, QList<int> > Connectivity;
|
typedef QMap< int, QList<int> > Connectivity;
|
||||||
|
|
||||||
|
QWidget* frame() const;
|
||||||
|
SMESH_Actor* actor() const;
|
||||||
|
bool isElements() const;
|
||||||
|
|
||||||
|
virtual void information( const QList<long>& ) = 0;
|
||||||
|
virtual void clearInternal();
|
||||||
|
|
||||||
Connectivity nodeConnectivity( const SMDS_MeshNode* );
|
Connectivity nodeConnectivity( const SMDS_MeshNode* );
|
||||||
QString formatConnectivity( Connectivity, int );
|
QString formatConnectivity( Connectivity, int );
|
||||||
XYZ gravityCenter( const SMDS_MeshElement* );
|
XYZ gravityCenter( const SMDS_MeshElement* );
|
||||||
|
|
||||||
protected:
|
private slots:
|
||||||
|
void showPrevious();
|
||||||
|
void showNext();
|
||||||
|
void updateControls();
|
||||||
|
|
||||||
|
private:
|
||||||
SMESH_Actor* myActor;
|
SMESH_Actor* myActor;
|
||||||
long myID;
|
QList<long> myIDs;
|
||||||
int myIsElement;
|
int myIsElement;
|
||||||
|
QWidget* myFrame;
|
||||||
|
QWidget* myExtra;
|
||||||
|
QLabel* myCurrent;
|
||||||
|
QPushButton* myPrev;
|
||||||
|
QPushButton* myNext;
|
||||||
|
int myIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo
|
class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo
|
||||||
@ -152,8 +173,9 @@ class SMESHGUI_EXPORT SMESHGUI_SimpleElemInfo : public SMESHGUI_ElemInfo
|
|||||||
public:
|
public:
|
||||||
SMESHGUI_SimpleElemInfo( QWidget* = 0 );
|
SMESHGUI_SimpleElemInfo( QWidget* = 0 );
|
||||||
|
|
||||||
void showInfo( long, bool );
|
protected:
|
||||||
void clear();
|
void information( const QList<long>& );
|
||||||
|
void clearInternal();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTextBrowser* myInfo;
|
QTextBrowser* myInfo;
|
||||||
@ -166,8 +188,9 @@ class SMESHGUI_EXPORT SMESHGUI_TreeElemInfo : public SMESHGUI_ElemInfo
|
|||||||
public:
|
public:
|
||||||
SMESHGUI_TreeElemInfo( QWidget* = 0 );
|
SMESHGUI_TreeElemInfo( QWidget* = 0 );
|
||||||
|
|
||||||
void showInfo( long, bool );
|
protected:
|
||||||
void clear();
|
void information( const QList<long>& );
|
||||||
|
void clearInternal();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 100 );
|
QTreeWidgetItem* createItem( QTreeWidgetItem* = 0, int = 100 );
|
||||||
|
@ -509,18 +509,6 @@ bool SMESHGUI_Preferences_ScalarBarDlg::onApply()
|
|||||||
myScalarBarActor->SetLabelTextProperty( aLabelsTextPrp );
|
myScalarBarActor->SetLabelTextProperty( aLabelsTextPrp );
|
||||||
|
|
||||||
myScalarBarActor->SetNumberOfLabels( myLabelsSpin->value() );
|
myScalarBarActor->SetNumberOfLabels( myLabelsSpin->value() );
|
||||||
if( myColorsSpin->value() != myScalarBarActor->GetMaximumNumberOfColors() ) {
|
|
||||||
myScalarBarActor->SetMaximumNumberOfColors( myColorsSpin->value() );
|
|
||||||
SMESH::Controls::FunctorPtr fn = myActor->GetFunctor();
|
|
||||||
SMESH::Controls::NumericalFunctor* aNumericalFunctor = dynamic_cast<SMESH::Controls::NumericalFunctor*>(fn.get());
|
|
||||||
if( aNumericalFunctor ) {
|
|
||||||
int nbIntervals = myColorsSpin->value();
|
|
||||||
std::vector<int> nbEvents;
|
|
||||||
std::vector<double> funValues;
|
|
||||||
aNumericalFunctor->GetHistogram(nbIntervals, nbEvents, funValues);
|
|
||||||
myScalarBarActor->SetDistribution(nbEvents);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( myHorizRadioBtn->isChecked() )
|
if ( myHorizRadioBtn->isChecked() )
|
||||||
myScalarBarActor->SetOrientationToHorizontal();
|
myScalarBarActor->SetOrientationToHorizontal();
|
||||||
@ -550,9 +538,22 @@ bool SMESHGUI_Preferences_ScalarBarDlg::onApply()
|
|||||||
double aMax = myMaxEdit->text().toDouble();
|
double aMax = myMaxEdit->text().toDouble();
|
||||||
vtkLookupTable* myLookupTable =
|
vtkLookupTable* myLookupTable =
|
||||||
static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
|
static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
|
||||||
|
double oldMinMax[2] = { myLookupTable->GetRange()[0], myLookupTable->GetRange()[1] };
|
||||||
|
bool rangeChanges = ( fabs( oldMinMax[0] - aMin ) + fabs( oldMinMax[1] - aMax ) >
|
||||||
|
0.001 * ( aMax-aMin + oldMinMax[1]-oldMinMax[0] ));
|
||||||
|
|
||||||
|
bool nbColorsChanged = (myColorsSpin->value() != myScalarBarActor->GetMaximumNumberOfColors());
|
||||||
|
if(nbColorsChanged)
|
||||||
|
myScalarBarActor->SetMaximumNumberOfColors(myColorsSpin->value());
|
||||||
|
|
||||||
|
|
||||||
myLookupTable->SetRange( aMin, aMax );
|
myLookupTable->SetRange( aMin, aMax );
|
||||||
myLookupTable->SetNumberOfTableValues(myColorsSpin->value());
|
myLookupTable->SetNumberOfTableValues(myColorsSpin->value());
|
||||||
myLookupTable->Build();
|
myLookupTable->Build();
|
||||||
|
|
||||||
|
if( nbColorsChanged || rangeChanges)
|
||||||
|
myActor->UpdateDistribution();
|
||||||
|
|
||||||
SMESH::RepaintCurrentView();
|
SMESH::RepaintCurrentView();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,10 @@
|
|||||||
<source>ICON_BUILD_COMPOUND</source>
|
<source>ICON_BUILD_COMPOUND</source>
|
||||||
<translation>mesh_build_compound.png</translation>
|
<translation>mesh_build_compound.png</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_COPY_MESH</source>
|
||||||
|
<translation>copy_mesh.png</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ICON_COMPUTE</source>
|
<source>ICON_COMPUTE</source>
|
||||||
<translation>mesh_compute.png</translation>
|
<translation>mesh_compute.png</translation>
|
||||||
@ -109,6 +113,10 @@
|
|||||||
<source>ICON_DLG_BUILD_COMPOUND_MESH</source>
|
<source>ICON_DLG_BUILD_COMPOUND_MESH</source>
|
||||||
<translation>mesh_build_compound.png</translation>
|
<translation>mesh_build_compound.png</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_DLG_COPY_MESH</source>
|
||||||
|
<translation>copy_mesh.png</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ICON_DLG_ELEM0D</source>
|
<source>ICON_DLG_ELEM0D</source>
|
||||||
<translation>mesh_vertex.png</translation>
|
<translation>mesh_vertex.png</translation>
|
||||||
@ -457,6 +465,22 @@
|
|||||||
<source>ICON_VOLUME_3D</source>
|
<source>ICON_VOLUME_3D</source>
|
||||||
<translation>mesh_volume_3d.png</translation>
|
<translation>mesh_volume_3d.png</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>bare_border_volume.png</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_BARE_BORDER_FACE</source>
|
||||||
|
<translation>bare_border_face.png</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>over_constrained_volume.png</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>over_constrained_face.png</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ICON_WARP</source>
|
<source>ICON_WARP</source>
|
||||||
<translation>mesh_wrap.png</translation>
|
<translation>mesh_wrap.png</translation>
|
||||||
|
@ -187,6 +187,10 @@
|
|||||||
<source>MEN_BUILD_COMPOUND</source>
|
<source>MEN_BUILD_COMPOUND</source>
|
||||||
<translation>Build Compound</translation>
|
<translation>Build Compound</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_COPY_MESH</source>
|
||||||
|
<translation>Copy Mesh</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_CLIP</source>
|
<source>MEN_CLIP</source>
|
||||||
<translation>Clipping</translation>
|
<translation>Clipping</translation>
|
||||||
@ -395,6 +399,22 @@
|
|||||||
<source>STB_FIND_ELEM</source>
|
<source>STB_FIND_ELEM</source>
|
||||||
<translation>Find Element by Point</translation>
|
<translation>Find Element by Point</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>Volumes with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_BARE_BORDER_FACE</source>
|
||||||
|
<translation>Faces with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>Over-constrained volumes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>Over-constrained faces</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_FREE_BORDER</source>
|
<source>MEN_FREE_BORDER</source>
|
||||||
<translation>Free Borders</translation>
|
<translation>Free Borders</translation>
|
||||||
@ -1040,6 +1060,14 @@ Please enter correct values and try again</translation>
|
|||||||
<source>SMESH_BUILD_COMPOUND_TITLE</source>
|
<source>SMESH_BUILD_COMPOUND_TITLE</source>
|
||||||
<translation>Create a Compound</translation>
|
<translation>Create a Compound</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_COPY_MESH_TITLE</source>
|
||||||
|
<translation>Copy Mesh</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_KEEP_IDS</source>
|
||||||
|
<translation>Preserve IDs of elements</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_BUT_ADD</source>
|
<source>SMESH_BUT_ADD</source>
|
||||||
<translation>A&dd</translation>
|
<translation>A&dd</translation>
|
||||||
@ -1451,7 +1479,8 @@ add the exported data to its contents?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_HYP_12</source>
|
<source>SMESH_HYP_12</source>
|
||||||
<translation>Geometry mismatches algorithm's expectation\nCheck algorithm documentation for supported geometry</translation>
|
<translation>Geometry mismatches algorithm's expectation
|
||||||
|
Check algorithm documentation for supported geometry</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_HYP_13</source>
|
<source>SMESH_HYP_13</source>
|
||||||
@ -2274,6 +2303,10 @@ Please check preferences of Mesh module.
|
|||||||
<source>STB_BUILD_COMPOUND</source>
|
<source>STB_BUILD_COMPOUND</source>
|
||||||
<translation>Build Compound Mesh</translation>
|
<translation>Build Compound Mesh</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_COPY_MESH</source>
|
||||||
|
<translation>Copy Mesh</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>STB_CLIP</source>
|
<source>STB_CLIP</source>
|
||||||
<translation>Clipping</translation>
|
<translation>Clipping</translation>
|
||||||
@ -2434,6 +2467,22 @@ Please check preferences of Mesh module.
|
|||||||
<source>STB_FACES</source>
|
<source>STB_FACES</source>
|
||||||
<translation>Faces</translation>
|
<translation>Faces</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>Volumes with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_BARE_BORDER_FACE</source>
|
||||||
|
<translation>Faces with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>Over-constrained volumes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>Over-constrained faces</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>STB_FREE_BORDER</source>
|
<source>STB_FREE_BORDER</source>
|
||||||
<translation>Free Borders</translation>
|
<translation>Free Borders</translation>
|
||||||
@ -2810,6 +2859,10 @@ Please check preferences of Mesh module.
|
|||||||
<source>TOP_BUILD_COMPOUND</source>
|
<source>TOP_BUILD_COMPOUND</source>
|
||||||
<translation>Build Compound Mesh</translation>
|
<translation>Build Compound Mesh</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_COPY_MESH</source>
|
||||||
|
<translation>Copy Mesh</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>TOP_CLIP</source>
|
<source>TOP_CLIP</source>
|
||||||
<translation>Clipping</translation>
|
<translation>Clipping</translation>
|
||||||
@ -2970,6 +3023,22 @@ Please check preferences of Mesh module.
|
|||||||
<source>TOP_FACES</source>
|
<source>TOP_FACES</source>
|
||||||
<translation>Faces</translation>
|
<translation>Faces</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>Volumes with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_BARE_BORDER_FACE</source>
|
||||||
|
<translation>Faces with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>Over-constrained volumes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>Over-constrained faces</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>TOP_FREE_BORDER</source>
|
<source>TOP_FREE_BORDER</source>
|
||||||
<translation>Free Borders</translation>
|
<translation>Free Borders</translation>
|
||||||
@ -4320,6 +4389,22 @@ Please check input data and try again</translation>
|
|||||||
<source>BAD_ORIENTED_VOLUME</source>
|
<source>BAD_ORIENTED_VOLUME</source>
|
||||||
<translation>Bad oriented volume</translation>
|
<translation>Bad oriented volume</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>Volumes with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>BARE_BORDER_FACE</source>
|
||||||
|
<translation>Faces with bare border</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>Over-constrained volumes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>Over-constrained faces</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>BELONG_TO_CYLINDER</source>
|
<source>BELONG_TO_CYLINDER</source>
|
||||||
<translation>Belong to Cylinder</translation>
|
<translation>Belong to Cylinder</translation>
|
||||||
@ -5607,7 +5692,7 @@ It is impossible to read point coordinates from file</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>QUADRANGLES_LAB</source>
|
<source>QUADRANGLES_LAB</source>
|
||||||
<translation>Quadrandgles:</translation>
|
<translation>Quadrangles:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>POLYGONS_LAB</source>
|
<source>POLYGONS_LAB</source>
|
||||||
@ -5795,10 +5880,6 @@ It is impossible to read point coordinates from file</translation>
|
|||||||
<source>NO</source>
|
<source>NO</source>
|
||||||
<translation>No</translation>
|
<translation>No</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>GRAVITY_CENTER</source>
|
|
||||||
<translation>GRAVITY CENTER</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>PROPERTY</source>
|
<source>PROPERTY</source>
|
||||||
<translation>Property</translation>
|
<translation>Property</translation>
|
||||||
@ -5807,6 +5888,10 @@ It is impossible to read point coordinates from file</translation>
|
|||||||
<source>VALUE</source>
|
<source>VALUE</source>
|
||||||
<translation>Value</translation>
|
<translation>Value</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>X_FROM_Y_ITEMS_SHOWN</source>
|
||||||
|
<translation>%1-%2 from %3 items shown</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>SMESHGUI_MinDistance</name>
|
<name>SMESHGUI_MinDistance</name>
|
||||||
@ -5847,6 +5932,21 @@ It is impossible to read point coordinates from file</translation>
|
|||||||
<translation>Distance</translation>
|
<translation>Distance</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_CopyMeshDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_NAME</source>
|
||||||
|
<translation>Source Object</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ELEM_IDS</source>
|
||||||
|
<translation>Source Element IDs</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NEW_NAME</source>
|
||||||
|
<translation>New Mesh Name</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>SMESHGUI_MeasureDlg</name>
|
<name>SMESHGUI_MeasureDlg</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -3,6 +3,42 @@
|
|||||||
<TS version="2.0" language="fr_FR">
|
<TS version="2.0" language="fr_FR">
|
||||||
<context>
|
<context>
|
||||||
<name>@default</name>
|
<name>@default</name>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_EXPORT_MESH</source>
|
||||||
|
<translation>Exporter le maillage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MED_FILES_FILTER</source>
|
||||||
|
<translation>Fichiers MED</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>IDEAS_FILES_FILTER</source>
|
||||||
|
<translation>Fichiers IDEAS</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>DAT_FILES_FILTER</source>
|
||||||
|
<translation>Fichiers DAT</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TEXT_FILES_FILTER</source>
|
||||||
|
<translation>Fichiers TXT</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MED_VX_FILES_FILTER</source>
|
||||||
|
<translation>Fichiers MED %1</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STL_ASCII_FILES_FILTER</source>
|
||||||
|
<translation>Fichiers STL ASCII</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STL_BIN_FILES_FILTER</source>
|
||||||
|
<translation>Fichiers STL binaires</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ALL_FILES_FILTER</source>
|
||||||
|
<translation>Tous les fichiers</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>AREA_ELEMENTS</source>
|
<source>AREA_ELEMENTS</source>
|
||||||
<translation>Aire</translation>
|
<translation>Aire</translation>
|
||||||
@ -107,6 +143,14 @@
|
|||||||
<source>LOCAL_ALGO</source>
|
<source>LOCAL_ALGO</source>
|
||||||
<translation>Local</translation>
|
<translation>Local</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MAX_ELEMENT_LENGTH_2D</source>
|
||||||
|
<translation>Diamètre d'éléments 2D</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MAX_ELEMENT_LENGTH_3D</source>
|
||||||
|
<translation>Diamètre d'éléments 3D</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_ADD</source>
|
<source>MEN_ADD</source>
|
||||||
<translation>Ajouter</translation>
|
<translation>Ajouter</translation>
|
||||||
@ -143,6 +187,10 @@
|
|||||||
<source>MEN_BUILD_COMPOUND</source>
|
<source>MEN_BUILD_COMPOUND</source>
|
||||||
<translation>Construire un assemblage</translation>
|
<translation>Construire un assemblage</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_COPY_MESH</source>
|
||||||
|
<translation>Copier le maillage</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_CLIP</source>
|
<source>MEN_CLIP</source>
|
||||||
<translation>Plan de coupe</translation>
|
<translation>Plan de coupe</translation>
|
||||||
@ -207,6 +255,22 @@
|
|||||||
<source>MEN_CTRL</source>
|
<source>MEN_CTRL</source>
|
||||||
<translation>Contrôles</translation>
|
<translation>Contrôles</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_NODE_CTRL</source>
|
||||||
|
<translation>Contrôles des nœuds</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_EDGE_CTRL</source>
|
||||||
|
<translation>Contrôles des arêtes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_FACE_CTRL</source>
|
||||||
|
<translation>Contrôles des faces</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_VOLUME_CTRL</source>
|
||||||
|
<translation>Contrôles des volumes</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_CUT</source>
|
<source>MEN_CUT</source>
|
||||||
<translation>Découpe des quadrangles</translation>
|
<translation>Découpe des quadrangles</translation>
|
||||||
@ -335,6 +399,22 @@
|
|||||||
<source>STB_FIND_ELEM</source>
|
<source>STB_FIND_ELEM</source>
|
||||||
<translation>Trouver un élément par un point</translation>
|
<translation>Trouver un élément par un point</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>Volumes avec frontière libre</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_BARE_BORDER_FACE</source>
|
||||||
|
<translation>Faces avec frontière libre</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>Volumes sur-contraints</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>Faces sur-contraintes</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_FREE_BORDER</source>
|
<source>MEN_FREE_BORDER</source>
|
||||||
<translation>Frontières libres</translation>
|
<translation>Frontières libres</translation>
|
||||||
@ -391,6 +471,14 @@
|
|||||||
<source>MEN_MAP</source>
|
<source>MEN_MAP</source>
|
||||||
<translation>Projection de motif</translation>
|
<translation>Projection de motif</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_MAX_ELEMENT_LENGTH_2D</source>
|
||||||
|
<translation>Diamètre des éléments 2D</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_MAX_ELEMENT_LENGTH_3D</source>
|
||||||
|
<translation>Diamètre des éléments 3D</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_MED</source>
|
<source>MEN_MED</source>
|
||||||
<translation>Fichier MED</translation>
|
<translation>Fichier MED</translation>
|
||||||
@ -423,6 +511,34 @@
|
|||||||
<source>MEN_MODIFY</source>
|
<source>MEN_MODIFY</source>
|
||||||
<translation>Modification</translation>
|
<translation>Modification</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_MEASURE</source>
|
||||||
|
<translation>Outils de mesure</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_MEASURE_MIN_DIST</source>
|
||||||
|
<translation>Distance minimale</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_MEASURE_MIN_DIST</source>
|
||||||
|
<translation>Calculate minimum distance between two objects</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_MEASURE_MIN_DIST</source>
|
||||||
|
<translation>Minimum distance</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_MEASURE_BND_BOX</source>
|
||||||
|
<translation>Boîte englobante</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_MEASURE_BND_BOX</source>
|
||||||
|
<translation>Calculate bounding box for the selected object(s)</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_MEASURE_BND_BOX</source>
|
||||||
|
<translation>Bounding box</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_MOVE</source>
|
<source>MEN_MOVE</source>
|
||||||
<translation>Déplacer un nœud</translation>
|
<translation>Déplacer un nœud</translation>
|
||||||
@ -539,6 +655,14 @@
|
|||||||
<source>MEN_RESET</source>
|
<source>MEN_RESET</source>
|
||||||
<translation>Restaurer</translation>
|
<translation>Restaurer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_SAVE_DISTRIBUTION</source>
|
||||||
|
<translation>Exporter la distribution...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_SHOW_DISTRIBUTION</source>
|
||||||
|
<translation>Afficher la distribution</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_REVOLUTION</source>
|
<source>MEN_REVOLUTION</source>
|
||||||
<translation>Révolution</translation>
|
<translation>Révolution</translation>
|
||||||
@ -936,6 +1060,14 @@ Merci de les corriger, puis essayez de nouveau</translation>
|
|||||||
<source>SMESH_BUILD_COMPOUND_TITLE</source>
|
<source>SMESH_BUILD_COMPOUND_TITLE</source>
|
||||||
<translation>Créer un assemblage</translation>
|
<translation>Créer un assemblage</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_COPY_MESH_TITLE</source>
|
||||||
|
<translation>Copier le maillage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_KEEP_IDS</source>
|
||||||
|
<translation>Conserver les IDs des éléments</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_BUT_ADD</source>
|
<source>SMESH_BUT_ADD</source>
|
||||||
<translation>A&jouter</translation>
|
<translation>A&jouter</translation>
|
||||||
@ -1200,13 +1332,15 @@ Voulez-vous continuer ?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_EXPORT_MED_V2_1</source>
|
<source>SMESH_EXPORT_MED_V2_1</source>
|
||||||
<translation>Les éléments polygonaux et polyèdriques seront omis dans le cas d'exportation du maillage "%1" à MED 2.1
|
<translation>Les éléments polygonaux et polyèdriques seront omis
|
||||||
|
dans le cas d'exportation du maillage "%1" à MED 2.1
|
||||||
Utilisez MED 2.2 pour l'exportation correcte.
|
Utilisez MED 2.2 pour l'exportation correcte.
|
||||||
Voulez-vous effectuer l'exportation à MED 2.1 ?</translation>
|
Voulez-vous effectuer l'exportation à MED 2.1 ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
|
<source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
|
||||||
<translation>La version MED du fichier "%1" n'est pas connue ou ne correspond pas à la version choisie.
|
<translation>La version MED du fichier "%1" n'est pas connue
|
||||||
|
ou ne correspond pas à la version choisie.
|
||||||
Réécrire le fichier ?</translation>
|
Réécrire le fichier ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
@ -1226,7 +1360,8 @@ Réécrire le fichier ?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_EXPORT_UNV</source>
|
<source>SMESH_EXPORT_UNV</source>
|
||||||
<translation>Les éléments pyramides seront omis au cours de l'exportation du maillage "%1" dans le fichier UNV</translation>
|
<translation>Les éléments pyramides seront omis au cours de l'exportation
|
||||||
|
du maillage "%1" dans le fichier UNV</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_EXTRUSION</source>
|
<source>SMESH_EXTRUSION</source>
|
||||||
@ -1255,7 +1390,8 @@ Réécrire le fichier ?</translation>
|
|||||||
<message>
|
<message>
|
||||||
<source>SMESH_FILE_EXISTS</source>
|
<source>SMESH_FILE_EXISTS</source>
|
||||||
<translation>Le fichier "%1" existe déjà.
|
<translation>Le fichier "%1" existe déjà.
|
||||||
Voulez-vous le réécrire ou y ajouter les données exportées ?</translation>
|
Voulez-vous le réécrire ou y ajouter
|
||||||
|
les données exportées ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_FONT_ARIAL</source>
|
<source>SMESH_FONT_ARIAL</source>
|
||||||
@ -1742,6 +1878,14 @@ Référez-vous à la documentation sur l'algorithme et la géométrie suppo
|
|||||||
<source>SMESH_POSITION_SIZE_SCALARBAR</source>
|
<source>SMESH_POSITION_SIZE_SCALARBAR</source>
|
||||||
<translation>Origine && Taille</translation>
|
<translation>Origine && Taille</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_DISTRIBUTION_SCALARBAR</source>
|
||||||
|
<translation>Distribution</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_SHOW_DISTRIBUTION_SCALARBAR</source>
|
||||||
|
<translation>Afficher la distribution</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_PRECISION</source>
|
<source>SMESH_PRECISION</source>
|
||||||
<translation>Précision</translation>
|
<translation>Précision</translation>
|
||||||
@ -1987,6 +2131,22 @@ Référez-vous à la documentation sur l'algorithme et la géométrie suppo
|
|||||||
<source>SMESH_VERTICAL</source>
|
<source>SMESH_VERTICAL</source>
|
||||||
<translation>Verticale</translation>
|
<translation>Verticale</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_DISTRIBUTION_COLORING_TYPE</source>
|
||||||
|
<translation>Type de coloration</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_MONOCOLOR</source>
|
||||||
|
<translation>Monocouleur</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_DISTRIBUTION_COLOR</source>
|
||||||
|
<translation>Couleur de la distribution:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_MULTICOLOR</source>
|
||||||
|
<translation>Multicouleur</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_VISU_PROBLEM</source>
|
<source>SMESH_VISU_PROBLEM</source>
|
||||||
<translation>Impossible de visualiser le maillage, probablement à cause d'un manque de mémoire</translation>
|
<translation>Impossible de visualiser le maillage, probablement à cause d'un manque de mémoire</translation>
|
||||||
@ -2143,6 +2303,10 @@ Vérifiez la limite dans les préférences du module Mesh.
|
|||||||
<source>STB_BUILD_COMPOUND</source>
|
<source>STB_BUILD_COMPOUND</source>
|
||||||
<translation>Construire un maillage assemblé</translation>
|
<translation>Construire un maillage assemblé</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>STB_COPY_MESH</source>
|
||||||
|
<translation>Copie le maillage</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>STB_CLIP</source>
|
<source>STB_CLIP</source>
|
||||||
<translation>Pan de coupe</translation>
|
<translation>Pan de coupe</translation>
|
||||||
@ -2823,6 +2987,22 @@ Vérifiez la limite dans les préférences du module Mesh.
|
|||||||
<source>TOP_FACES</source>
|
<source>TOP_FACES</source>
|
||||||
<translation>Faces</translation>
|
<translation>Faces</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>Volumes avec frontière libre</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_BARE_BORDER_FACE</source>
|
||||||
|
<translation>Faces avec frontière libre</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>Volumes sur-contraints</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>Faces sur-contraintes</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>TOP_FREE_BORDER</source>
|
<source>TOP_FREE_BORDER</source>
|
||||||
<translation>Frontières libres</translation>
|
<translation>Frontières libres</translation>
|
||||||
@ -2871,6 +3051,14 @@ Vérifiez la limite dans les préférences du module Mesh.
|
|||||||
<source>TOP_MAP</source>
|
<source>TOP_MAP</source>
|
||||||
<translation>Projection de motif</translation>
|
<translation>Projection de motif</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_MAX_ELEMENT_LENGTH_2D</source>
|
||||||
|
<translation>Diamètre des éléments 2D</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_MAX_ELEMENT_LENGTH_3D</source>
|
||||||
|
<translation>Diamètre des éléments 3D</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>TOP_MED</source>
|
<source>TOP_MED</source>
|
||||||
<translation>Importer un fichier MED</translation>
|
<translation>Importer un fichier MED</translation>
|
||||||
@ -2991,6 +3179,14 @@ Vérifiez la limite dans les préférences du module Mesh.
|
|||||||
<source>TOP_RESET</source>
|
<source>TOP_RESET</source>
|
||||||
<translation>Restaurer</translation>
|
<translation>Restaurer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_SAVE_DISTRIBUTION</source>
|
||||||
|
<translation>Exporter la distribution</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOP_SHOW_DISTRIBUTION</source>
|
||||||
|
<translation>Afficher la distribution</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>TOP_REVOLUTION</source>
|
<source>TOP_REVOLUTION</source>
|
||||||
<translation>Révolution</translation>
|
<translation>Révolution</translation>
|
||||||
@ -3123,6 +3319,10 @@ Vérifiez la limite dans les préférences du module Mesh.
|
|||||||
<source>TOP_WIRE</source>
|
<source>TOP_WIRE</source>
|
||||||
<translation>Contours</translation>
|
<translation>Contours</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>UNKNOWN_CONTROL</source>
|
||||||
|
<translation>Inconnu</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>VOLUME_3D_ELEMENTS</source>
|
<source>VOLUME_3D_ELEMENTS</source>
|
||||||
<translation>Aire</translation>
|
<translation>Aire</translation>
|
||||||
@ -3225,6 +3425,10 @@ avec le paramètre '%1' des préférences du module Mesh.</translation
|
|||||||
<source>NB_NODES_REMOVED</source>
|
<source>NB_NODES_REMOVED</source>
|
||||||
<translation>%1 nœud(s) supprimés.</translation>
|
<translation>%1 nœud(s) supprimés.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SMESH_SAVE_DISTRIBUTION</source>
|
||||||
|
<translation>Exporter la distribution</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_PLUGINS_OTHER</source>
|
<source>SMESH_PLUGINS_OTHER</source>
|
||||||
<translation>Extensions SMESH</translation>
|
<translation>Extensions SMESH</translation>
|
||||||
@ -3317,6 +3521,30 @@ Ouvrez une fenêtre VTK et essayez de nouveau</translation>
|
|||||||
<source>PREF_NOTIFY_MODE</source>
|
<source>PREF_NOTIFY_MODE</source>
|
||||||
<translation>Montrer la notification sur le résultat de calcul</translation>
|
<translation>Montrer la notification sur le résultat de calcul</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PREF_NOTIFY_NEVER</source>
|
||||||
|
<translation>Jamais</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PREF_NOTIFY_ERROR</source>
|
||||||
|
<translation>Erreurs uniquement</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PREF_NOTIFY_ALWAYS</source>
|
||||||
|
<translation>Toujours</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PREF_ELEM_INFO</source>
|
||||||
|
<translation>Information des éléments du maillage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PREF_ELEM_INFO_SIMPLE</source>
|
||||||
|
<translation>Simple</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PREF_ELEM_INFO_TREE</source>
|
||||||
|
<translation>Arbre</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>SMESH_PREF_GROUP_PRECISION</source>
|
<source>SMESH_PREF_GROUP_PRECISION</source>
|
||||||
<translation>Précision des champs d'entrée</translation>
|
<translation>Précision des champs d'entrée</translation>
|
||||||
@ -3365,6 +3593,10 @@ Ouvrez une fenêtre VTK et essayez de nouveau</translation>
|
|||||||
<source>PREF_GROUP_SELECTION</source>
|
<source>PREF_GROUP_SELECTION</source>
|
||||||
<translation>Sélection</translation>
|
<translation>Sélection</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PREF_GROUP_INFO</source>
|
||||||
|
<translation>Information du maillage</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>PREF_HIGHLIGHT_COLOR</source>
|
<source>PREF_HIGHLIGHT_COLOR</source>
|
||||||
<translation>Couleur de sélection</translation>
|
<translation>Couleur de sélection</translation>
|
||||||
@ -4121,6 +4353,22 @@ Vérifiez la validité des informations données</translation>
|
|||||||
<source>BAD_ORIENTED_VOLUME</source>
|
<source>BAD_ORIENTED_VOLUME</source>
|
||||||
<translation>Volume mal orienté</translation>
|
<translation>Volume mal orienté</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>BARE_BORDER_VOLUME</source>
|
||||||
|
<translation>Volumes avec frontière libre</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>BARE_BORDER_FACE</source>
|
||||||
|
<translation>Faces avec frontière libre</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OVER_CONSTRAINED_VOLUME</source>
|
||||||
|
<translation>Volumes sur-contraints</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OVER_CONSTRAINED_FACE</source>
|
||||||
|
<translation>Faces sur-contraintes</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>BELONG_TO_CYLINDER</source>
|
<source>BELONG_TO_CYLINDER</source>
|
||||||
<translation>Appartient au cylindre</translation>
|
<translation>Appartient au cylindre</translation>
|
||||||
@ -5173,6 +5421,14 @@ Il y a trop peu de points dans le fichier </translation>
|
|||||||
<source>CLIP_PLANES</source>
|
<source>CLIP_PLANES</source>
|
||||||
<translation>Plans de découpe</translation>
|
<translation>Plans de découpe</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MESHES_SUBMESHES_GROUPS</source>
|
||||||
|
<translation>Maillages, sous-maillages et groupes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SELECT_ALL</source>
|
||||||
|
<translation>Tout sélectionner</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ROTATION_AROUND_X_Y2Z</source>
|
<source>ROTATION_AROUND_X_Y2Z</source>
|
||||||
<translation>Rotation autour de X (Y à Z):</translation>
|
<translation>Rotation autour de X (Y à Z):</translation>
|
||||||
@ -5343,4 +5599,361 @@ Il y a trop peu de points dans le fichier </translation>
|
|||||||
<translation>Le nom du groupe n'est pas indiqué</translation>
|
<translation>Le nom du groupe n'est pas indiqué</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_MeshInfo</name>
|
||||||
|
<message>
|
||||||
|
<source>NAME_LAB</source>
|
||||||
|
<translation>Nom:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_LAB</source>
|
||||||
|
<translation>Objet:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NODES_LAB</source>
|
||||||
|
<translation>Nœuds:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ELEMENTS_LAB</source>
|
||||||
|
<translation>Eléments:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TOTAL_LAB</source>
|
||||||
|
<translation>Total</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>LINEAR_LAB</source>
|
||||||
|
<translation>Linéaire</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>QUADRATIC_LAB</source>
|
||||||
|
<translation>Quadratique</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>0D_LAB</source>
|
||||||
|
<translation>0D:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>1D_LAB</source>
|
||||||
|
<translation>1D (arêtes):</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>2D_LAB</source>
|
||||||
|
<translation>2D (faces):</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TRIANGLES_LAB</source>
|
||||||
|
<translation>Triangles:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>QUADRANGLES_LAB</source>
|
||||||
|
<translation>Quadrangles:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>POLYGONS_LAB</source>
|
||||||
|
<translation>Polygones:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>3D_LAB</source>
|
||||||
|
<translation>3D (volumes):</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TETRAHEDRONS_LAB</source>
|
||||||
|
<translation>Tétrahédrons:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>HEXAHEDONRS_LAB</source>
|
||||||
|
<translation>Hexahédrons:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PYRAMIDS_LAB</source>
|
||||||
|
<translation>Pyramides:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PRISMS_LAB</source>
|
||||||
|
<translation>Prismes:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>POLYHEDRONS_LAB</source>
|
||||||
|
<translation>Polyhédrons:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_MESH</source>
|
||||||
|
<translation>Maillage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_SUBMESH</source>
|
||||||
|
<translation>Sous-maillage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_GROUP</source>
|
||||||
|
<translation>Groupe</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_GROUP_NODES</source>
|
||||||
|
<translation>Groupe de nœuds</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_GROUP_EDGES</source>
|
||||||
|
<translation>Groupe d'arêtes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_GROUP_FACES</source>
|
||||||
|
<translation>Groupe de faces</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_GROUP_VOLUMES</source>
|
||||||
|
<translation>Groupe de volumes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_GROUP_0DELEMS</source>
|
||||||
|
<translation>Groupe d'éléments 0D</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_MeshInfoDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>MESH_INFO</source>
|
||||||
|
<translation>Infiormations de maillage</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>BASE_INFO</source>
|
||||||
|
<translation>Informations de base</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ELEM_INFO</source>
|
||||||
|
<translation>Informations des éléments</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NODE_MODE</source>
|
||||||
|
<translation>Nœud</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ELEM_MODE</source>
|
||||||
|
<translation>Elément</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_ElemInfo</name>
|
||||||
|
<message>
|
||||||
|
<source>COORDINATES</source>
|
||||||
|
<translation>COORDONNÉES</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>CONNECTIVITY</source>
|
||||||
|
<translation>CONNECTIVITÉ</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GRAVITY_CENTER</source>
|
||||||
|
<translation>CENTRE DE GRAVITÉ</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NODE</source>
|
||||||
|
<translation>Nœud</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>0D_ELEMENT</source>
|
||||||
|
<translation>ELÉMENTS 0D</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>0D_ELEMENTS</source>
|
||||||
|
<translation>ELÉMENTS 0D</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>EDGE</source>
|
||||||
|
<translation>ARÊTE</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>EDGES</source>
|
||||||
|
<translation>ARÊTES</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>FACE</source>
|
||||||
|
<translation>FACE</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>FACES</source>
|
||||||
|
<translation>FACES</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>VOLUME</source>
|
||||||
|
<translation>VOLUME</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>VOLUMES</source>
|
||||||
|
<translation>VOLUMES</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>FREE_NODE</source>
|
||||||
|
<translation>Nœud libre (pas de connectivité)</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TYPE</source>
|
||||||
|
<translation>TYPE</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TRIANGLE</source>
|
||||||
|
<translation>Triangle</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>QUADRANGLE</source>
|
||||||
|
<translation>Quadrangle</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>POLYGON</source>
|
||||||
|
<translation>Polygône</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>TETRAHEDRON</source>
|
||||||
|
<translation>Tétrahédron</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>HEXAHEDRON</source>
|
||||||
|
<translation>Hexahédron</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PYRAMID</source>
|
||||||
|
<translation>Pyramide</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PRISM</source>
|
||||||
|
<translation>Prisme</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>POLYHEDRON</source>
|
||||||
|
<translation>Polyhédron</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>QUADRATIC</source>
|
||||||
|
<translation>QUADRATIQUE</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>YES</source>
|
||||||
|
<translation>Oui</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NO</source>
|
||||||
|
<translation>Non</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>PROPERTY</source>
|
||||||
|
<translation>Propriété</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>VALUE</source>
|
||||||
|
<translation>Valeur</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>X_FROM_Y_ITEMS_SHOWN</source>
|
||||||
|
<translation>%1-%2 sur %3 éléments affichés</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_MinDistance</name>
|
||||||
|
<message>
|
||||||
|
<source>FIRST_TARGET</source>
|
||||||
|
<translation>Premier élément</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SECOND_TARGET</source>
|
||||||
|
<translation>Deuxième élément</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NODE</source>
|
||||||
|
<translation>Nœud</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ELEMENT</source>
|
||||||
|
<translation>Elément</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT</source>
|
||||||
|
<translation>Objet</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ORIGIN</source>
|
||||||
|
<translation>Origine</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>COMPUTE</source>
|
||||||
|
<translation>Calculer</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>RESULT</source>
|
||||||
|
<translation>Distance entre les éléments</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>DISTANCE</source>
|
||||||
|
<translation>Distance</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_CopyMeshDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>OBJECT_NAME</source>
|
||||||
|
<translation>Objet source</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ELEM_IDS</source>
|
||||||
|
<translation>IDs des éléments sources</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NEW_NAME</source>
|
||||||
|
<translation>Nom du nouveau maillage</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_MeasureDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>MEASUREMENTS</source>
|
||||||
|
<translation>Outils de mesure</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MIN_DIST</source>
|
||||||
|
<translation>Distance minimale</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>BND_BOX</source>
|
||||||
|
<translation>Boîte englobante</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_BoundingBox</name>
|
||||||
|
<message>
|
||||||
|
<source>SOURCE</source>
|
||||||
|
<translation>Source</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>OBJECTS</source>
|
||||||
|
<translation>Objets</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NODES</source>
|
||||||
|
<translation>Nœuds</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ELEMENTS</source>
|
||||||
|
<translation>Eléments</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>COMPUTE</source>
|
||||||
|
<translation>Calculer</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>RESULT</source>
|
||||||
|
<translation>Boîte englobante</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>SELECTED_NB_OBJ</source>
|
||||||
|
<translation>%1 %2 sélectionnés</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NB_NODES</source>
|
||||||
|
<translation>nœuds</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>NB_ELEMENTS</source>
|
||||||
|
<translation>éléments</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
@ -247,7 +247,8 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
|
|||||||
|
|
||||||
// SMESH_Mesh method?
|
// SMESH_Mesh method?
|
||||||
map< _pyID, Handle(_pyMesh) >::iterator id_mesh = myMeshes.find( objID );
|
map< _pyID, Handle(_pyMesh) >::iterator id_mesh = myMeshes.find( objID );
|
||||||
if ( id_mesh != myMeshes.end() ) {
|
if ( id_mesh != myMeshes.end() )
|
||||||
|
{
|
||||||
// check for mesh editor object
|
// check for mesh editor object
|
||||||
if ( aCommand->GetMethod() == "GetMeshEditor" ) { // MeshEditor creation
|
if ( aCommand->GetMethod() == "GetMeshEditor" ) { // MeshEditor creation
|
||||||
_pyID editorID = aCommand->GetResultValue();
|
_pyID editorID = aCommand->GetResultValue();
|
||||||
@ -268,7 +269,8 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
|
|||||||
|
|
||||||
// SMESH_MeshEditor method?
|
// SMESH_MeshEditor method?
|
||||||
map< _pyID, Handle(_pyMeshEditor) >::iterator id_editor = myMeshEditors.find( objID );
|
map< _pyID, Handle(_pyMeshEditor) >::iterator id_editor = myMeshEditors.find( objID );
|
||||||
if ( id_editor != myMeshEditors.end() ) {
|
if ( id_editor != myMeshEditors.end() )
|
||||||
|
{
|
||||||
id_editor->second->Process( aCommand );
|
id_editor->second->Process( aCommand );
|
||||||
TCollection_AsciiString processedCommand = aCommand->GetString();
|
TCollection_AsciiString processedCommand = aCommand->GetString();
|
||||||
// some commands of SMESH_MeshEditor create meshes
|
// some commands of SMESH_MeshEditor create meshes
|
||||||
@ -277,6 +279,15 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
|
|||||||
aCommand->GetString() = processedCommand; // discard changes made by _pyMesh
|
aCommand->GetString() = processedCommand; // discard changes made by _pyMesh
|
||||||
myMeshes.insert( make_pair( mesh->GetID(), mesh ));
|
myMeshes.insert( make_pair( mesh->GetID(), mesh ));
|
||||||
}
|
}
|
||||||
|
if ( aCommand->GetMethod() == "MakeBoundaryMesh") {
|
||||||
|
_pyID meshID = aCommand->GetResultValue(0);
|
||||||
|
if ( !myMeshes.count( meshID ) )
|
||||||
|
{
|
||||||
|
Handle(_pyMesh) mesh = new _pyMesh( aCommand, meshID );
|
||||||
|
aCommand->GetString() = processedCommand; // discard changes made by _pyMesh
|
||||||
|
myMeshes.insert( make_pair( meshID, mesh ));
|
||||||
|
}
|
||||||
|
}
|
||||||
return aCommand;
|
return aCommand;
|
||||||
}
|
}
|
||||||
// SMESH_Hypothesis method?
|
// SMESH_Hypothesis method?
|
||||||
@ -352,7 +363,7 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
|
|||||||
myMeshes.insert( make_pair( mesh->GetID(), mesh ));
|
myMeshes.insert( make_pair( mesh->GetID(), mesh ));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( method == "CreateMeshesFromUNV" || method == "CreateMeshesFromSTL")
|
if ( method == "CreateMeshesFromUNV" || method == "CreateMeshesFromSTL" || method == "CopyMesh" )
|
||||||
{
|
{
|
||||||
Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue() );
|
Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue() );
|
||||||
myMeshes.insert( make_pair( mesh->GetID(), mesh ));
|
myMeshes.insert( make_pair( mesh->GetID(), mesh ));
|
||||||
@ -1118,14 +1129,15 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
|
|||||||
"ConvertToQuadratic","ConvertFromQuadratic","RenumberNodes","RenumberElements",
|
"ConvertToQuadratic","ConvertFromQuadratic","RenumberNodes","RenumberElements",
|
||||||
"RotationSweep","RotationSweepObject","RotationSweepObject1D","RotationSweepObject2D",
|
"RotationSweep","RotationSweepObject","RotationSweepObject1D","RotationSweepObject2D",
|
||||||
"ExtrusionSweep","AdvancedExtrusion","ExtrusionSweepObject","ExtrusionSweepObject1D","ExtrusionSweepObject2D",
|
"ExtrusionSweep","AdvancedExtrusion","ExtrusionSweepObject","ExtrusionSweepObject1D","ExtrusionSweepObject2D",
|
||||||
"ExtrusionAlongPath","ExtrusionAlongPathObject","ExtrusionAlongPathObject1D","ExtrusionAlongPathObject2D",
|
"ExtrusionAlongPath","ExtrusionAlongPathObject","ExtrusionAlongPathX",
|
||||||
|
"ExtrusionAlongPathObject1D","ExtrusionAlongPathObject2D",
|
||||||
"Mirror","MirrorObject","Translate","TranslateObject","Rotate","RotateObject",
|
"Mirror","MirrorObject","Translate","TranslateObject","Rotate","RotateObject",
|
||||||
"FindCoincidentNodes",/*"FindCoincidentNodesOnPart",*/"MergeNodes","FindEqualElements",
|
"FindCoincidentNodes",/*"FindCoincidentNodesOnPart",*/"MergeNodes","FindEqualElements",
|
||||||
"MergeElements","MergeEqualElements","SewFreeBorders","SewConformFreeBorders",
|
"MergeElements","MergeEqualElements","SewFreeBorders","SewConformFreeBorders",
|
||||||
"SewBorderToSide","SewSideElements","ChangeElemNodes","GetLastCreatedNodes",
|
"SewBorderToSide","SewSideElements","ChangeElemNodes","GetLastCreatedNodes",
|
||||||
"GetLastCreatedElems",
|
"GetLastCreatedElems",
|
||||||
"MirrorMakeMesh","MirrorObjectMakeMesh","TranslateMakeMesh",
|
"MirrorMakeMesh","MirrorObjectMakeMesh","TranslateMakeMesh",
|
||||||
"TranslateObjectMakeMesh","RotateMakeMesh","RotateObjectMakeMesh"
|
"TranslateObjectMakeMesh","RotateMakeMesh","RotateObjectMakeMesh","MakeBoundaryMesh"
|
||||||
,"" }; // <- mark of the end
|
,"" }; // <- mark of the end
|
||||||
sameMethods.Insert( names );
|
sameMethods.Insert( names );
|
||||||
}
|
}
|
||||||
@ -1166,6 +1178,13 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set "ExtrusionAlongPathX()" instead of "ExtrusionAlongPathObjX()"
|
||||||
|
if ( !isPyMeshMethod && method == "ExtrusionAlongPathObjX")
|
||||||
|
{
|
||||||
|
isPyMeshMethod=true;
|
||||||
|
theCommand->SetMethod("ExtrusionAlongPathX");
|
||||||
|
}
|
||||||
|
|
||||||
// set "FindCoincidentNodesOnPart()" instead of "FindCoincidentNodesOnPartBut()"
|
// set "FindCoincidentNodesOnPart()" instead of "FindCoincidentNodesOnPartBut()"
|
||||||
if ( !isPyMeshMethod && method == "FindCoincidentNodesOnPartBut")
|
if ( !isPyMeshMethod && method == "FindCoincidentNodesOnPartBut")
|
||||||
{
|
{
|
||||||
|
@ -232,7 +232,10 @@ namespace SMESH
|
|||||||
if(!aSObject->_is_nil() || CORBA::is_nil( theArg ))
|
if(!aSObject->_is_nil() || CORBA::is_nil( theArg ))
|
||||||
return *this << aSObject;
|
return *this << aSObject;
|
||||||
SMESH::long_array_var anElementsId = theArg->GetIDs();
|
SMESH::long_array_var anElementsId = theArg->GetIDs();
|
||||||
return *this << anElementsId;
|
SMESH::SMESH_Mesh_var mesh = theArg->GetMesh();
|
||||||
|
SMESH::array_of_ElementType_var types = theArg->GetTypes();
|
||||||
|
SMESH::ElementType type = types->length() ? types[0] : SMESH::ALL;
|
||||||
|
return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
TPythonDump&
|
TPythonDump&
|
||||||
@ -283,7 +286,7 @@ namespace SMESH
|
|||||||
case FT_MultiConnection: myStream<< "aMultiConnection"; break;
|
case FT_MultiConnection: myStream<< "aMultiConnection"; break;
|
||||||
case FT_MultiConnection2D: myStream<< "aMultiConnection2D"; break;
|
case FT_MultiConnection2D: myStream<< "aMultiConnection2D"; break;
|
||||||
case FT_Length: myStream<< "aLength"; break;
|
case FT_Length: myStream<< "aLength"; break;
|
||||||
case FT_Length2D: myStream<< "aLength"; break;
|
case FT_Length2D: myStream<< "aLength2D"; break;
|
||||||
case FT_BelongToGeom: myStream<< "aBelongToGeom"; break;
|
case FT_BelongToGeom: myStream<< "aBelongToGeom"; break;
|
||||||
case FT_BelongToPlane: myStream<< "aBelongToPlane"; break;
|
case FT_BelongToPlane: myStream<< "aBelongToPlane"; break;
|
||||||
case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break;
|
case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break;
|
||||||
@ -292,6 +295,10 @@ namespace SMESH
|
|||||||
case FT_CoplanarFaces: myStream<< "aCoplanarFaces"; break;
|
case FT_CoplanarFaces: myStream<< "aCoplanarFaces"; break;
|
||||||
case FT_RangeOfIds: myStream<< "aRangeOfIds"; break;
|
case FT_RangeOfIds: myStream<< "aRangeOfIds"; break;
|
||||||
case FT_BadOrientedVolume: myStream<< "aBadOrientedVolume"; break;
|
case FT_BadOrientedVolume: myStream<< "aBadOrientedVolume"; break;
|
||||||
|
case FT_BareBorderVolume: myStream<< "aBareBorderVolume"; break;
|
||||||
|
case FT_BareBorderFace: myStream<< "aBareBorderFace"; break;
|
||||||
|
case FT_OverConstrainedVolume: myStream<< "aOverConstrainedVolume"; break;
|
||||||
|
case FT_OverConstrainedFace: myStream<< "aOverConstrainedFace"; break;
|
||||||
case FT_LinearOrQuadratic: myStream<< "aLinearOrQuadratic"; break;
|
case FT_LinearOrQuadratic: myStream<< "aLinearOrQuadratic"; break;
|
||||||
case FT_GroupColor: myStream<< "aGroupColor"; break;
|
case FT_GroupColor: myStream<< "aGroupColor"; break;
|
||||||
case FT_ElemGeomType: myStream<< "anElemGeomType"; break;
|
case FT_ElemGeomType: myStream<< "anElemGeomType"; break;
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "SMDS_MeshNode.hxx"
|
#include "SMDS_MeshNode.hxx"
|
||||||
#include "SMDS_MeshElement.hxx"
|
#include "SMDS_MeshElement.hxx"
|
||||||
#include "SMDS_ElemIterator.hxx"
|
#include "SMDS_ElemIterator.hxx"
|
||||||
|
#include "SMDS_VolumeTool.hxx"
|
||||||
|
|
||||||
#include "SMESHDS_Mesh.hxx"
|
#include "SMESHDS_Mesh.hxx"
|
||||||
|
|
||||||
@ -600,7 +601,8 @@ SMESH::Histogram* NumericalFunctor_i::GetHistogram(CORBA::Short nbIntervals)
|
|||||||
{
|
{
|
||||||
std::vector<int> nbEvents;
|
std::vector<int> nbEvents;
|
||||||
std::vector<double> funValues;
|
std::vector<double> funValues;
|
||||||
myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues);
|
std::vector<int> elements;
|
||||||
|
myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues,elements);
|
||||||
|
|
||||||
nbIntervals = CORBA::Short( std::min( nbEvents.size(), funValues.size() - 1));
|
nbIntervals = CORBA::Short( std::min( nbEvents.size(), funValues.size() - 1));
|
||||||
SMESH::Histogram_var histogram = new SMESH::Histogram;
|
SMESH::Histogram_var histogram = new SMESH::Histogram;
|
||||||
@ -937,6 +939,66 @@ FunctorType BadOrientedVolume_i::GetFunctorType()
|
|||||||
return SMESH::FT_BadOrientedVolume;
|
return SMESH::FT_BadOrientedVolume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BareBorderVolume_i
|
||||||
|
Description : Verify whether a mesh volume has a free facet without a face on it
|
||||||
|
*/
|
||||||
|
BareBorderVolume_i::BareBorderVolume_i()
|
||||||
|
{
|
||||||
|
Controls::PredicatePtr control( new Controls::BareBorderVolume() );
|
||||||
|
myFunctorPtr = myPredicatePtr = control;
|
||||||
|
};
|
||||||
|
|
||||||
|
FunctorType BareBorderVolume_i::GetFunctorType()
|
||||||
|
{
|
||||||
|
return SMESH::FT_BareBorderVolume;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BareBorderFace_i
|
||||||
|
Description : Verify whether a mesh face has a free border without an edge on it
|
||||||
|
*/
|
||||||
|
BareBorderFace_i::BareBorderFace_i()
|
||||||
|
{
|
||||||
|
Controls::PredicatePtr control( new Controls::BareBorderFace() );
|
||||||
|
myFunctorPtr = myPredicatePtr = control;
|
||||||
|
};
|
||||||
|
|
||||||
|
FunctorType BareBorderFace_i::GetFunctorType()
|
||||||
|
{
|
||||||
|
return SMESH::FT_BareBorderFace;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : OverConstrainedVolume_i
|
||||||
|
Description : Verify whether a mesh volume has only one facet shared with other volumes
|
||||||
|
*/
|
||||||
|
OverConstrainedVolume_i::OverConstrainedVolume_i()
|
||||||
|
{
|
||||||
|
Controls::PredicatePtr control( new Controls::OverConstrainedVolume() );
|
||||||
|
myFunctorPtr = myPredicatePtr = control;
|
||||||
|
};
|
||||||
|
|
||||||
|
FunctorType OverConstrainedVolume_i::GetFunctorType()
|
||||||
|
{
|
||||||
|
return SMESH::FT_OverConstrainedVolume;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : OverConstrainedFace_i
|
||||||
|
Description : Verify whether a mesh face has only one border shared with other faces
|
||||||
|
*/
|
||||||
|
OverConstrainedFace_i::OverConstrainedFace_i()
|
||||||
|
{
|
||||||
|
Controls::PredicatePtr control( new Controls::OverConstrainedFace() );
|
||||||
|
myFunctorPtr = myPredicatePtr = control;
|
||||||
|
};
|
||||||
|
|
||||||
|
FunctorType OverConstrainedFace_i::GetFunctorType()
|
||||||
|
{
|
||||||
|
return SMESH::FT_OverConstrainedFace;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class : BelongToGeom_i
|
Class : BelongToGeom_i
|
||||||
Description : Predicate for selection on geometrical support
|
Description : Predicate for selection on geometrical support
|
||||||
@ -2036,6 +2098,38 @@ BadOrientedVolume_ptr FilterManager_i::CreateBadOrientedVolume()
|
|||||||
return anObj._retn();
|
return anObj._retn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BareBorderVolume_ptr FilterManager_i::CreateBareBorderVolume()
|
||||||
|
{
|
||||||
|
SMESH::BareBorderVolume_i* aServant = new SMESH::BareBorderVolume_i();
|
||||||
|
SMESH::BareBorderVolume_var anObj = aServant->_this();
|
||||||
|
TPythonDump()<<aServant<<" = "<<this<<".CreateBareBorderVolume()";
|
||||||
|
return anObj._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
BareBorderFace_ptr FilterManager_i::CreateBareBorderFace()
|
||||||
|
{
|
||||||
|
SMESH::BareBorderFace_i* aServant = new SMESH::BareBorderFace_i();
|
||||||
|
SMESH::BareBorderFace_var anObj = aServant->_this();
|
||||||
|
TPythonDump()<<aServant<<" = "<<this<<".CreateBareBorderFace()";
|
||||||
|
return anObj._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
OverConstrainedVolume_ptr FilterManager_i::CreateOverConstrainedVolume()
|
||||||
|
{
|
||||||
|
SMESH::OverConstrainedVolume_i* aServant = new SMESH::OverConstrainedVolume_i();
|
||||||
|
SMESH::OverConstrainedVolume_var anObj = aServant->_this();
|
||||||
|
TPythonDump()<<aServant<<" = "<<this<<".CreateOverConstrainedVolume()";
|
||||||
|
return anObj._retn();
|
||||||
|
}
|
||||||
|
|
||||||
|
OverConstrainedFace_ptr FilterManager_i::CreateOverConstrainedFace()
|
||||||
|
{
|
||||||
|
SMESH::OverConstrainedFace_i* aServant = new SMESH::OverConstrainedFace_i();
|
||||||
|
SMESH::OverConstrainedFace_var anObj = aServant->_this();
|
||||||
|
TPythonDump()<<aServant<<" = "<<this<<".CreateOverConstrainedFace()";
|
||||||
|
return anObj._retn();
|
||||||
|
}
|
||||||
|
|
||||||
LessThan_ptr FilterManager_i::CreateLessThan()
|
LessThan_ptr FilterManager_i::CreateLessThan()
|
||||||
{
|
{
|
||||||
SMESH::LessThan_i* aServant = new SMESH::LessThan_i();
|
SMESH::LessThan_i* aServant = new SMESH::LessThan_i();
|
||||||
@ -2476,6 +2570,62 @@ static inline bool getCriteria( Predicate_i* thePred,
|
|||||||
theCriteria[ i ].Type = FT_BadOrientedVolume;
|
theCriteria[ i ].Type = FT_BadOrientedVolume;
|
||||||
theCriteria[ i ].TypeOfElement = aPred->GetElementType();
|
theCriteria[ i ].TypeOfElement = aPred->GetElementType();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case FT_BareBorderVolume:
|
||||||
|
{
|
||||||
|
BareBorderVolume_i* aPred = dynamic_cast<BareBorderVolume_i*>( thePred );
|
||||||
|
|
||||||
|
CORBA::ULong i = theCriteria->length();
|
||||||
|
theCriteria->length( i + 1 );
|
||||||
|
|
||||||
|
theCriteria[ i ] = createCriterion();
|
||||||
|
|
||||||
|
theCriteria[ i ].Type = FT_BareBorderVolume;
|
||||||
|
theCriteria[ i ].TypeOfElement = aPred->GetElementType();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case FT_BareBorderFace:
|
||||||
|
{
|
||||||
|
BareBorderFace_i* aPred = dynamic_cast<BareBorderFace_i*>( thePred );
|
||||||
|
|
||||||
|
CORBA::ULong i = theCriteria->length();
|
||||||
|
theCriteria->length( i + 1 );
|
||||||
|
|
||||||
|
theCriteria[ i ] = createCriterion();
|
||||||
|
|
||||||
|
theCriteria[ i ].Type = FT_BareBorderFace;
|
||||||
|
theCriteria[ i ].TypeOfElement = aPred->GetElementType();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case FT_OverConstrainedVolume:
|
||||||
|
{
|
||||||
|
OverConstrainedVolume_i* aPred = dynamic_cast<OverConstrainedVolume_i*>( thePred );
|
||||||
|
|
||||||
|
CORBA::ULong i = theCriteria->length();
|
||||||
|
theCriteria->length( i + 1 );
|
||||||
|
|
||||||
|
theCriteria[ i ] = createCriterion();
|
||||||
|
|
||||||
|
theCriteria[ i ].Type = FT_OverConstrainedVolume;
|
||||||
|
theCriteria[ i ].TypeOfElement = aPred->GetElementType();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case FT_OverConstrainedFace:
|
||||||
|
{
|
||||||
|
OverConstrainedFace_i* aPred = dynamic_cast<OverConstrainedFace_i*>( thePred );
|
||||||
|
|
||||||
|
CORBA::ULong i = theCriteria->length();
|
||||||
|
theCriteria->length( i + 1 );
|
||||||
|
|
||||||
|
theCriteria[ i ] = createCriterion();
|
||||||
|
|
||||||
|
theCriteria[ i ].Type = FT_OverConstrainedFace;
|
||||||
|
theCriteria[ i ].TypeOfElement = aPred->GetElementType();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case FT_LessThan:
|
case FT_LessThan:
|
||||||
@ -2723,6 +2873,26 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
|
|||||||
aPredicate = aFilterMgr->CreateBadOrientedVolume();
|
aPredicate = aFilterMgr->CreateBadOrientedVolume();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SMESH::FT_BareBorderVolume:
|
||||||
|
{
|
||||||
|
aPredicate = aFilterMgr->CreateBareBorderVolume();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SMESH::FT_BareBorderFace:
|
||||||
|
{
|
||||||
|
aPredicate = aFilterMgr->CreateBareBorderFace();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SMESH::FT_OverConstrainedVolume:
|
||||||
|
{
|
||||||
|
aPredicate = aFilterMgr->CreateOverConstrainedVolume();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SMESH::FT_OverConstrainedFace:
|
||||||
|
{
|
||||||
|
aPredicate = aFilterMgr->CreateOverConstrainedFace();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SMESH::FT_LinearOrQuadratic:
|
case SMESH::FT_LinearOrQuadratic:
|
||||||
{
|
{
|
||||||
SMESH::LinearOrQuadratic_ptr tmpPred = aFilterMgr->CreateLinearOrQuadratic();
|
SMESH::LinearOrQuadratic_ptr tmpPred = aFilterMgr->CreateLinearOrQuadratic();
|
||||||
@ -2964,6 +3134,10 @@ static inline LDOMString toString( CORBA::Long theType )
|
|||||||
case FT_BelongToGenSurface: return "Belong to Generic Surface";
|
case FT_BelongToGenSurface: return "Belong to Generic Surface";
|
||||||
case FT_LyingOnGeom : return "Lying on Geom";
|
case FT_LyingOnGeom : return "Lying on Geom";
|
||||||
case FT_BadOrientedVolume:return "Bad Oriented Volume";
|
case FT_BadOrientedVolume:return "Bad Oriented Volume";
|
||||||
|
case FT_BareBorderVolume: return "Volumes with bare border";
|
||||||
|
case FT_BareBorderFace : return "Faces with bare border";
|
||||||
|
case FT_OverConstrainedVolume: return "Over-constrained Volumes";
|
||||||
|
case FT_OverConstrainedFace : return "Over-constrained Faces";
|
||||||
case FT_RangeOfIds : return "Range of IDs";
|
case FT_RangeOfIds : return "Range of IDs";
|
||||||
case FT_FreeBorders : return "Free borders";
|
case FT_FreeBorders : return "Free borders";
|
||||||
case FT_FreeEdges : return "Free edges";
|
case FT_FreeEdges : return "Free edges";
|
||||||
@ -3017,6 +3191,10 @@ static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr )
|
|||||||
// else if ( theStr.equals( "Length2D" ) ) return FT_Length2D;
|
// else if ( theStr.equals( "Length2D" ) ) return FT_Length2D;
|
||||||
else if ( theStr.equals( "Range of IDs" ) ) return FT_RangeOfIds;
|
else if ( theStr.equals( "Range of IDs" ) ) return FT_RangeOfIds;
|
||||||
else if ( theStr.equals( "Bad Oriented Volume" ) ) return FT_BadOrientedVolume;
|
else if ( theStr.equals( "Bad Oriented Volume" ) ) return FT_BadOrientedVolume;
|
||||||
|
else if ( theStr.equals( "Volumes with bare border" ) ) return FT_BareBorderVolume;
|
||||||
|
else if ( theStr.equals( "Faces with bare border" ) ) return FT_BareBorderFace;
|
||||||
|
else if ( theStr.equals( "Over-constrained Volumes" ) ) return FT_OverConstrainedVolume;
|
||||||
|
else if ( theStr.equals( "Over-constrained Faces" ) ) return FT_OverConstrainedFace;
|
||||||
else if ( theStr.equals( "Less than" ) ) return FT_LessThan;
|
else if ( theStr.equals( "Less than" ) ) return FT_LessThan;
|
||||||
else if ( theStr.equals( "More than" ) ) return FT_MoreThan;
|
else if ( theStr.equals( "More than" ) ) return FT_MoreThan;
|
||||||
else if ( theStr.equals( "Equal to" ) ) return FT_EqualTo;
|
else if ( theStr.equals( "Equal to" ) ) return FT_EqualTo;
|
||||||
|
@ -44,6 +44,7 @@ class SMESHDS_Mesh;
|
|||||||
namespace SMESH
|
namespace SMESH
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// ================================================================================
|
||||||
namespace Controls
|
namespace Controls
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -123,8 +124,10 @@ namespace SMESH
|
|||||||
Controls::ElementsOnShapePtr myElementsOnShapePtr; // only if myIsSubshape == false
|
Controls::ElementsOnShapePtr myElementsOnShapePtr; // only if myIsSubshape == false
|
||||||
};
|
};
|
||||||
typedef boost::shared_ptr<LyingOnGeom> LyingOnGeomPtr;
|
typedef boost::shared_ptr<LyingOnGeom> LyingOnGeomPtr;
|
||||||
}
|
|
||||||
|
|
||||||
|
} // namespace Controls
|
||||||
|
|
||||||
|
// ================================================================================
|
||||||
/*
|
/*
|
||||||
FUNCTORS
|
FUNCTORS
|
||||||
*/
|
*/
|
||||||
@ -387,6 +390,54 @@ namespace SMESH
|
|||||||
FunctorType GetFunctorType();
|
FunctorType GetFunctorType();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BareBorderVolume_i
|
||||||
|
Description : Verify whether a mesh volume has a free facet without a face on it
|
||||||
|
*/
|
||||||
|
class SMESH_I_EXPORT BareBorderVolume_i: public virtual POA_SMESH::BareBorderVolume,
|
||||||
|
public virtual Predicate_i
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BareBorderVolume_i();
|
||||||
|
FunctorType GetFunctorType();
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BareBorderFace_i
|
||||||
|
Description : Verify whether a mesh face has a free border without an edge on it
|
||||||
|
*/
|
||||||
|
class SMESH_I_EXPORT BareBorderFace_i: public virtual POA_SMESH::BareBorderFace,
|
||||||
|
public virtual Predicate_i
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BareBorderFace_i();
|
||||||
|
FunctorType GetFunctorType();
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : OverConstrainedVolume_i
|
||||||
|
Description : Verify whether a mesh volume has only one facet shared with other volumes
|
||||||
|
*/
|
||||||
|
class SMESH_I_EXPORT OverConstrainedVolume_i: public virtual POA_SMESH::OverConstrainedVolume,
|
||||||
|
public virtual Predicate_i
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OverConstrainedVolume_i();
|
||||||
|
FunctorType GetFunctorType();
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : OverConstrainedFace_i
|
||||||
|
Description : Verify whether a mesh face has only one border shared with other faces
|
||||||
|
*/
|
||||||
|
class SMESH_I_EXPORT OverConstrainedFace_i: public virtual POA_SMESH::OverConstrainedFace,
|
||||||
|
public virtual Predicate_i
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OverConstrainedFace_i();
|
||||||
|
FunctorType GetFunctorType();
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class : BelongToGeom_i
|
Class : BelongToGeom_i
|
||||||
Description : Predicate for selection on geometrical support
|
Description : Predicate for selection on geometrical support
|
||||||
@ -954,6 +1005,10 @@ namespace SMESH
|
|||||||
|
|
||||||
RangeOfIds_ptr CreateRangeOfIds();
|
RangeOfIds_ptr CreateRangeOfIds();
|
||||||
BadOrientedVolume_ptr CreateBadOrientedVolume();
|
BadOrientedVolume_ptr CreateBadOrientedVolume();
|
||||||
|
BareBorderFace_ptr CreateBareBorderFace();
|
||||||
|
BareBorderVolume_ptr CreateBareBorderVolume();
|
||||||
|
OverConstrainedFace_ptr CreateOverConstrainedFace();
|
||||||
|
OverConstrainedVolume_ptr CreateOverConstrainedVolume();
|
||||||
LinearOrQuadratic_ptr CreateLinearOrQuadratic();
|
LinearOrQuadratic_ptr CreateLinearOrQuadratic();
|
||||||
GroupColor_ptr CreateGroupColor();
|
GroupColor_ptr CreateGroupColor();
|
||||||
ElemGeomType_ptr CreateElemGeomType();
|
ElemGeomType_ptr CreateElemGeomType();
|
||||||
|
@ -91,9 +91,10 @@
|
|||||||
|
|
||||||
#include "SMDS_EdgePosition.hxx"
|
#include "SMDS_EdgePosition.hxx"
|
||||||
#include "SMDS_FacePosition.hxx"
|
#include "SMDS_FacePosition.hxx"
|
||||||
#include "SMDS_VertexPosition.hxx"
|
|
||||||
#include "SMDS_SpacePosition.hxx"
|
|
||||||
#include "SMDS_PolyhedralVolumeOfNodes.hxx"
|
#include "SMDS_PolyhedralVolumeOfNodes.hxx"
|
||||||
|
#include "SMDS_SetIterator.hxx"
|
||||||
|
#include "SMDS_SpacePosition.hxx"
|
||||||
|
#include "SMDS_VertexPosition.hxx"
|
||||||
|
|
||||||
#include CORBA_SERVER_HEADER(SMESH_Group)
|
#include CORBA_SERVER_HEADER(SMESH_Group)
|
||||||
#include CORBA_SERVER_HEADER(SMESH_Filter)
|
#include CORBA_SERVER_HEADER(SMESH_Filter)
|
||||||
@ -901,7 +902,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName
|
|||||||
aServant->ImportUNVFile( theFileName );
|
aServant->ImportUNVFile( theFileName );
|
||||||
|
|
||||||
// Dump creation of groups
|
// Dump creation of groups
|
||||||
aServant->GetGroups();
|
SMESH::ListOfGroups_var groups = aServant->GetGroups();
|
||||||
|
|
||||||
aServant->GetImpl().GetMeshDS()->Modified();
|
aServant->GetImpl().GetMeshDS()->Modified();
|
||||||
return aMesh._retn();
|
return aMesh._retn();
|
||||||
@ -982,7 +983,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName,
|
|||||||
}
|
}
|
||||||
// Dump creation of groups
|
// Dump creation of groups
|
||||||
for ( int i = 0; i < aResult->length(); ++i )
|
for ( int i = 0; i < aResult->length(); ++i )
|
||||||
aResult[ i ]->GetGroups();
|
SMESH::ListOfGroups_var groups = aResult[ i ]->GetGroups();
|
||||||
|
|
||||||
return aResult._retn();
|
return aResult._retn();
|
||||||
}
|
}
|
||||||
@ -2026,6 +2027,22 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::mesh_array& theMeshesArray,
|
|||||||
}
|
}
|
||||||
}//elems loop
|
}//elems loop
|
||||||
|
|
||||||
|
// copy orphan nodes
|
||||||
|
SMDS_NodeIteratorPtr itNodes = anInitMeshDS->nodesIterator();
|
||||||
|
while ( itNodes->more() )
|
||||||
|
{
|
||||||
|
const SMDS_MeshNode* aNode = itNodes->next();
|
||||||
|
if ( aNode->NbInverseElements() == 0 )
|
||||||
|
{
|
||||||
|
const SMDS_MeshNode* aNewNode =
|
||||||
|
aNewMeshDS->AddNode(aNode->X(), aNode->Y(), aNode->Z());
|
||||||
|
nodesMap.insert( make_pair(aNode->GetID(), aNewNode->GetID()) );
|
||||||
|
if( theCommonGroups )
|
||||||
|
anIDsNodes[anNbNodes++] = aNewNode->GetID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
aListOfGroups = anInitImpl->GetGroups();
|
aListOfGroups = anInitImpl->GetGroups();
|
||||||
SMESH::SMESH_GroupBase_ptr aGroup;
|
SMESH::SMESH_GroupBase_ptr aGroup;
|
||||||
|
|
||||||
@ -2211,6 +2228,212 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::mesh_array& theMeshesArray,
|
|||||||
return aNewMesh._retn();
|
return aNewMesh._retn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Create a mesh by copying a part of another mesh
|
||||||
|
* \param meshPart - a part of mesh to copy
|
||||||
|
* \param toCopyGroups - to create in the new mesh groups
|
||||||
|
* the copied elements belongs to
|
||||||
|
* \param toKeepIDs - to preserve IDs of the copied elements or not
|
||||||
|
* \retval SMESH::SMESH_Mesh_ptr - the new mesh
|
||||||
|
*/
|
||||||
|
//================================================================================
|
||||||
|
|
||||||
|
SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
|
||||||
|
const char* meshName,
|
||||||
|
CORBA::Boolean toCopyGroups,
|
||||||
|
CORBA::Boolean toKeepIDs)
|
||||||
|
{
|
||||||
|
Unexpect aCatch(SALOME_SalomeException);
|
||||||
|
|
||||||
|
TPythonDump* pyDump = new TPythonDump; // prevent dump from CreateMesh()
|
||||||
|
|
||||||
|
// 1. Get source mesh
|
||||||
|
|
||||||
|
if ( CORBA::is_nil( meshPart ))
|
||||||
|
THROW_SALOME_CORBA_EXCEPTION( "bad IDSource", SALOME::BAD_PARAM );
|
||||||
|
|
||||||
|
SMESH::SMESH_Mesh_var srcMesh = meshPart->GetMesh();
|
||||||
|
SMESH_Mesh_i* srcMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( srcMesh );
|
||||||
|
if ( !srcMesh_i )
|
||||||
|
THROW_SALOME_CORBA_EXCEPTION( "bad mesh of IDSource", SALOME::BAD_PARAM );
|
||||||
|
|
||||||
|
SMESHDS_Mesh* srcMeshDS = srcMesh_i->GetImpl().GetMeshDS();
|
||||||
|
|
||||||
|
// 2. Make a new mesh
|
||||||
|
|
||||||
|
SMESH::SMESH_Mesh_var newMesh = CreateMesh(GEOM::GEOM_Object::_nil());
|
||||||
|
SMESH_Mesh_i* newMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( newMesh );
|
||||||
|
if ( !newMesh_i )
|
||||||
|
THROW_SALOME_CORBA_EXCEPTION( "can't create a mesh", SALOME::INTERNAL_ERROR );
|
||||||
|
SALOMEDS::SObject_var meshSO = ObjectToSObject(myCurrentStudy, newMesh );
|
||||||
|
if ( !meshSO->_is_nil() )
|
||||||
|
{
|
||||||
|
SetName( meshSO, meshName, "Mesh" );
|
||||||
|
SetPixMap( meshSO, "ICON_SMESH_TREE_MESH_IMPORTED");
|
||||||
|
}
|
||||||
|
SMESHDS_Mesh* newMeshDS = newMesh_i->GetImpl().GetMeshDS();
|
||||||
|
::SMESH_MeshEditor editor( &newMesh_i->GetImpl() );
|
||||||
|
|
||||||
|
// 3. Get elements to copy
|
||||||
|
|
||||||
|
SMDS_ElemIteratorPtr srcElemIt;
|
||||||
|
TIDSortedElemSet srcElems;
|
||||||
|
SMESH::array_of_ElementType_var srcElemTypes = meshPart->GetTypes();
|
||||||
|
if ( SMESH::DownCast<SMESH_Mesh_i*>( meshPart ))
|
||||||
|
{
|
||||||
|
srcElemIt = srcMeshDS->elementsIterator();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SMESH::long_array_var ids = meshPart->GetIDs();
|
||||||
|
if ( srcElemTypes->length() == 1 && srcElemTypes[0] == SMESH::NODE ) // group of nodes
|
||||||
|
{
|
||||||
|
for (int i=0; i < ids->length(); i++)
|
||||||
|
if ( const SMDS_MeshElement * elem = srcMeshDS->FindNode( ids[i] ))
|
||||||
|
srcElems.insert( elem );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i=0; i < ids->length(); i++)
|
||||||
|
if ( const SMDS_MeshElement * elem = srcMeshDS->FindElement( ids[i] ))
|
||||||
|
srcElems.insert( elem );
|
||||||
|
}
|
||||||
|
if ( srcElems.empty() )
|
||||||
|
return newMesh._retn();
|
||||||
|
|
||||||
|
typedef SMDS_SetIterator< SMDS_pElement, TIDSortedElemSet::const_iterator > ElIter;
|
||||||
|
srcElemIt = SMDS_ElemIteratorPtr( new ElIter( srcElems.begin(), srcElems.end() ));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Copy elements
|
||||||
|
|
||||||
|
typedef map<SMDS_pElement, SMDS_pElement, TIDCompare> TE2EMap;
|
||||||
|
TE2EMap e2eMapByType[ SMDSAbs_NbElementTypes ];
|
||||||
|
TE2EMap& n2nMap = e2eMapByType[ SMDSAbs_Node ];
|
||||||
|
int iN;
|
||||||
|
const SMDS_MeshNode *nSrc, *nTgt;
|
||||||
|
vector< const SMDS_MeshNode* > nodes;
|
||||||
|
while ( srcElemIt->more() )
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement * elem = srcElemIt->next();
|
||||||
|
nodes.resize( elem->NbNodes());
|
||||||
|
SMDS_ElemIteratorPtr nIt = elem->nodesIterator();
|
||||||
|
if ( toKeepIDs ) {
|
||||||
|
for ( iN = 0; nIt->more(); ++iN )
|
||||||
|
{
|
||||||
|
nSrc = static_cast<const SMDS_MeshNode*>( nIt->next() );
|
||||||
|
nTgt = newMeshDS->FindNode( nSrc->GetID());
|
||||||
|
if ( !nTgt )
|
||||||
|
nTgt = newMeshDS->AddNodeWithID( nSrc->X(), nSrc->Y(), nSrc->Z(), nSrc->GetID());
|
||||||
|
nodes[ iN ] = nTgt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for ( iN = 0; nIt->more(); ++iN )
|
||||||
|
{
|
||||||
|
nSrc = static_cast<const SMDS_MeshNode*>( nIt->next() );
|
||||||
|
TE2EMap::iterator n2n = n2nMap.insert( make_pair( nSrc, SMDS_pNode(0) )).first;
|
||||||
|
if ( !n2n->second )
|
||||||
|
n2n->second = newMeshDS->AddNode( nSrc->X(), nSrc->Y(), nSrc->Z() );
|
||||||
|
nodes[ iN ] = (const SMDS_MeshNode*) n2n->second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( elem->GetType() != SMDSAbs_Node )
|
||||||
|
{
|
||||||
|
int ID = toKeepIDs ? elem->GetID() : 0;
|
||||||
|
const SMDS_MeshElement * newElem = editor.AddElement( nodes,
|
||||||
|
elem->GetType(),
|
||||||
|
elem->IsPoly(),
|
||||||
|
ID);
|
||||||
|
if ( toCopyGroups && !toKeepIDs )
|
||||||
|
e2eMapByType[ elem->GetType() ].insert( make_pair( elem, newElem ));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. Copy groups
|
||||||
|
|
||||||
|
int nbNewGroups = 0;
|
||||||
|
if ( toCopyGroups )
|
||||||
|
{
|
||||||
|
SMESH_Mesh::GroupIteratorPtr gIt = srcMesh_i->GetImpl().GetGroups();
|
||||||
|
while ( gIt->more() )
|
||||||
|
{
|
||||||
|
SMESH_Group* group = gIt->next();
|
||||||
|
const SMESHDS_GroupBase* groupDS = group->GetGroupDS();
|
||||||
|
|
||||||
|
// Check group type. We copy nodal groups containing nodes of copied element
|
||||||
|
SMDSAbs_ElementType groupType = groupDS->GetType();
|
||||||
|
if ( groupType != SMDSAbs_Node &&
|
||||||
|
newMeshDS->GetMeshInfo().NbElements( groupType ) == 0 )
|
||||||
|
continue; // group type differs from types of meshPart
|
||||||
|
|
||||||
|
// Find copied elements in the group
|
||||||
|
vector< const SMDS_MeshElement* > groupElems;
|
||||||
|
SMDS_ElemIteratorPtr eIt = groupDS->GetElements();
|
||||||
|
if ( toKeepIDs )
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement* foundElem;
|
||||||
|
if ( groupType == SMDSAbs_Node )
|
||||||
|
{
|
||||||
|
while ( eIt->more() )
|
||||||
|
if (( foundElem = newMeshDS->FindNode( eIt->next()->GetID() )))
|
||||||
|
groupElems.push_back( foundElem );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while ( eIt->more() )
|
||||||
|
if (( foundElem = newMeshDS->FindElement( eIt->next()->GetID() )))
|
||||||
|
groupElems.push_back( foundElem );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TE2EMap & e2eMap = e2eMapByType[ groupDS->GetType() ];
|
||||||
|
if ( e2eMap.empty() ) continue;
|
||||||
|
int minID = e2eMap.begin()->first->GetID();
|
||||||
|
int maxID = e2eMap.rbegin()->first->GetID();
|
||||||
|
TE2EMap::iterator e2e;
|
||||||
|
while ( eIt->more() && groupElems.size() < e2eMap.size())
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement* e = eIt->next();
|
||||||
|
if ( e->GetID() < minID || e->GetID() > maxID ) continue;
|
||||||
|
if ((e2e = e2eMap.find( e )) != e2eMap.end())
|
||||||
|
groupElems.push_back( e2e->second );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Make a new group
|
||||||
|
if ( !groupElems.empty() )
|
||||||
|
{
|
||||||
|
SMESH::SMESH_Group_var newGroupObj =
|
||||||
|
newMesh->CreateGroup( SMESH::ElementType(groupType), group->GetName() );
|
||||||
|
if ( SMESH_GroupBase_i* newGroup_i = SMESH::DownCast<SMESH_GroupBase_i*>( newGroupObj))
|
||||||
|
{
|
||||||
|
SMESHDS_GroupBase * newGroupDS = newGroup_i->GetGroupDS();
|
||||||
|
SMDS_MeshGroup& smdsGroup = ((SMESHDS_Group*)newGroupDS)->SMDSGroup();
|
||||||
|
for ( unsigned i = 0; i < groupElems.size(); ++i )
|
||||||
|
smdsGroup.Add( groupElems[i] );
|
||||||
|
|
||||||
|
nbNewGroups++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*pyDump << newMesh << " = " << this
|
||||||
|
<< ".CopyMesh( " << meshPart << ", "
|
||||||
|
<< "'" << meshName << "', "
|
||||||
|
<< toCopyGroups << ", "
|
||||||
|
<< toKeepIDs << ")";
|
||||||
|
|
||||||
|
delete pyDump; pyDump = 0; // allow dump in GetGroups()
|
||||||
|
|
||||||
|
if ( nbNewGroups > 0 ) // dump created groups
|
||||||
|
SMESH::ListOfGroups_var groups = newMesh->GetGroups();
|
||||||
|
|
||||||
|
return newMesh._retn();
|
||||||
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
* SMESH_Gen_i::GetMEDVersion
|
* SMESH_Gen_i::GetMEDVersion
|
||||||
|
@ -236,6 +236,12 @@ public:
|
|||||||
SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName )
|
SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName )
|
||||||
throw ( SALOME::SALOME_Exception );
|
throw ( SALOME::SALOME_Exception );
|
||||||
|
|
||||||
|
// Copy a part of mesh
|
||||||
|
SMESH::SMESH_Mesh_ptr CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
|
||||||
|
const char* meshName,
|
||||||
|
CORBA::Boolean toCopyGroups,
|
||||||
|
CORBA::Boolean toKeepIDs);
|
||||||
|
|
||||||
// Compute mesh on a shape
|
// Compute mesh on a shape
|
||||||
CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
|
CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
|
||||||
GEOM::GEOM_Object_ptr theShapeObject )
|
GEOM::GEOM_Object_ptr theShapeObject )
|
||||||
|
@ -2685,6 +2685,8 @@ ExtrusionAlongPathObjX(SMESH::SMESH_IDSource_ptr Object,
|
|||||||
SMESH::ElementType ElemType,
|
SMESH::ElementType ElemType,
|
||||||
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
|
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
|
||||||
{
|
{
|
||||||
|
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
|
||||||
|
|
||||||
SMESH::long_array_var anElementsId = Object->GetIDs();
|
SMESH::long_array_var anElementsId = Object->GetIDs();
|
||||||
SMESH::ListOfGroups * aGroups = extrusionAlongPathX(anElementsId,
|
SMESH::ListOfGroups * aGroups = extrusionAlongPathX(anElementsId,
|
||||||
Path,
|
Path,
|
||||||
@ -2700,12 +2702,8 @@ ExtrusionAlongPathObjX(SMESH::SMESH_IDSource_ptr Object,
|
|||||||
|
|
||||||
if (!myPreviewMode) {
|
if (!myPreviewMode) {
|
||||||
bool isDumpGroups = aGroups && aGroups->length() > 0;
|
bool isDumpGroups = aGroups && aGroups->length() > 0;
|
||||||
TPythonDump aPythonDump;
|
|
||||||
if(isDumpGroups) {
|
|
||||||
aPythonDump << "("<<aGroups;
|
|
||||||
}
|
|
||||||
if (isDumpGroups)
|
if (isDumpGroups)
|
||||||
aPythonDump << ", error)";
|
aPythonDump << "(" << *aGroups << ", error)";
|
||||||
else
|
else
|
||||||
aPythonDump << "error";
|
aPythonDump << "error";
|
||||||
|
|
||||||
@ -2745,6 +2743,8 @@ ExtrusionAlongPathX(const SMESH::long_array& IDsOfElements,
|
|||||||
SMESH::ElementType ElemType,
|
SMESH::ElementType ElemType,
|
||||||
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
|
SMESH::SMESH_MeshEditor::Extrusion_Error& Error)
|
||||||
{
|
{
|
||||||
|
TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
|
||||||
|
|
||||||
SMESH::ListOfGroups * aGroups = extrusionAlongPathX(IDsOfElements,
|
SMESH::ListOfGroups * aGroups = extrusionAlongPathX(IDsOfElements,
|
||||||
Path,
|
Path,
|
||||||
NodeStart,
|
NodeStart,
|
||||||
@ -2759,12 +2759,8 @@ ExtrusionAlongPathX(const SMESH::long_array& IDsOfElements,
|
|||||||
|
|
||||||
if (!myPreviewMode) {
|
if (!myPreviewMode) {
|
||||||
bool isDumpGroups = aGroups && aGroups->length() > 0;
|
bool isDumpGroups = aGroups && aGroups->length() > 0;
|
||||||
TPythonDump aPythonDump;
|
|
||||||
if(isDumpGroups) {
|
|
||||||
aPythonDump << "("<<aGroups;
|
|
||||||
}
|
|
||||||
if (isDumpGroups)
|
if (isDumpGroups)
|
||||||
aPythonDump << ", error)";
|
aPythonDump << "(" << *aGroups << ", error)";
|
||||||
else
|
else
|
||||||
aPythonDump <<"error";
|
aPythonDump <<"error";
|
||||||
|
|
||||||
@ -2780,6 +2776,7 @@ ExtrusionAlongPathX(const SMESH::long_array& IDsOfElements,
|
|||||||
<< ( HasRefPoint ? RefPoint.x : 0 ) << ", "
|
<< ( HasRefPoint ? RefPoint.x : 0 ) << ", "
|
||||||
<< ( HasRefPoint ? RefPoint.y : 0 ) << ", "
|
<< ( HasRefPoint ? RefPoint.y : 0 ) << ", "
|
||||||
<< ( HasRefPoint ? RefPoint.z : 0 ) << " ), "
|
<< ( HasRefPoint ? RefPoint.z : 0 ) << " ), "
|
||||||
|
<< MakeGroups << ", "
|
||||||
<< ElemType << " )";
|
<< ElemType << " )";
|
||||||
}
|
}
|
||||||
return aGroups;
|
return aGroups;
|
||||||
@ -5353,7 +5350,7 @@ SMESH_MeshEditor_i::MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr idSource,
|
|||||||
SMESH_Group* smesh_group = 0;
|
SMESH_Group* smesh_group = 0;
|
||||||
if ( strlen(groupName) )
|
if ( strlen(groupName) )
|
||||||
{
|
{
|
||||||
group_var = mesh_i->CreateGroup( SMESH::ElementType(elemType),groupName);
|
group_var = mesh_i->CreateGroup( SMESH::ElementType(int(elemType)-1),groupName);
|
||||||
if ( SMESH_GroupBase_i* group_i = SMESH::DownCast<SMESH_GroupBase_i*>( group_var ))
|
if ( SMESH_GroupBase_i* group_i = SMESH::DownCast<SMESH_GroupBase_i*>( group_var ))
|
||||||
smesh_group = group_i->GetSmeshGroup();
|
smesh_group = group_i->GetSmeshGroup();
|
||||||
}
|
}
|
||||||
@ -5369,6 +5366,8 @@ SMESH_MeshEditor_i::MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr idSource,
|
|||||||
storeResult( aMeshEditor );
|
storeResult( aMeshEditor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* dimName[] = { "BND_2DFROM3D", "BND_1DFROM3D", "BND_1DFROM2D" };
|
||||||
|
|
||||||
// result of MakeBoundaryMesh() is a tuple (mesh, group)
|
// result of MakeBoundaryMesh() is a tuple (mesh, group)
|
||||||
if ( mesh_var->_is_nil() )
|
if ( mesh_var->_is_nil() )
|
||||||
pyDump << myMesh_i->_this() << ", ";
|
pyDump << myMesh_i->_this() << ", ";
|
||||||
@ -5380,9 +5379,9 @@ SMESH_MeshEditor_i::MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr idSource,
|
|||||||
pyDump << group_var << " = ";
|
pyDump << group_var << " = ";
|
||||||
pyDump << this << ".MakeBoundaryMesh( "
|
pyDump << this << ".MakeBoundaryMesh( "
|
||||||
<< idSource << ", "
|
<< idSource << ", "
|
||||||
<< dim << ", "
|
<< "SMESH." << dimName[int(dim)] << ", "
|
||||||
<< groupName << ", "
|
<< "'" << groupName << "', "
|
||||||
<< meshName<< ", "
|
<< "'" << meshName<< "', "
|
||||||
<< toCopyElements << ", "
|
<< toCopyElements << ", "
|
||||||
<< toCopyExistingBondary << ")";
|
<< toCopyExistingBondary << ")";
|
||||||
|
|
||||||
|
@ -76,17 +76,13 @@ f4 = MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 0, -1), plan_trim)
|
|||||||
|
|
||||||
|
|
||||||
#sphere_decoupee = MakePartition(solids, sphere_outils, [], [], ShapeType["SOLID"])
|
#sphere_decoupee = MakePartition(solids, sphere_outils, [], [], ShapeType["SOLID"])
|
||||||
solids = geompy.SubShapeAll(sphere_troue,geompy.ShapeType["SOLID"])
|
|
||||||
sphere_decoupee = MakePartition(solids, [f1], [], [], ShapeType["SOLID"])
|
|
||||||
solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
|
|
||||||
sphere_decoupee = MakePartition(solids, [f2], [], [], ShapeType["SOLID"])
|
|
||||||
solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
|
|
||||||
sphere_decoupee = MakePartition(solids, [f3], [], [], ShapeType["SOLID"])
|
|
||||||
solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
|
|
||||||
sphere_decoupee = MakePartition(solids, [f4], [], [], ShapeType["SOLID"])
|
|
||||||
solids = geompy.SubShapeAll(sphere_decoupee,geompy.ShapeType["SOLID"])
|
|
||||||
|
|
||||||
sphere_partie = geompy.MakeCompound(solids)
|
sphere_decoupee = MakePartition([sphere_troue], [f1], [], [], ShapeType["SOLID"])
|
||||||
|
sphere_decoupee = MakePartition([sphere_decoupee], [f2], [], [], ShapeType["SOLID"])
|
||||||
|
sphere_decoupee = MakePartition([sphere_decoupee], [f3], [], [], ShapeType["SOLID"])
|
||||||
|
sphere_decoupee = MakePartition([sphere_decoupee], [f4], [], [], ShapeType["SOLID"])
|
||||||
|
|
||||||
|
sphere_partie = geompy.MakeCompound([sphere_decoupee])
|
||||||
|
|
||||||
sphere_partie = GetBlockNearPoint(sphere_decoupee, MakeVertex(-sphere_rayon, 0, 0))
|
sphere_partie = GetBlockNearPoint(sphere_decoupee, MakeVertex(-sphere_rayon, 0, 0))
|
||||||
sphere_bloc = RemoveExtraEdges(sphere_partie)
|
sphere_bloc = RemoveExtraEdges(sphere_partie)
|
||||||
@ -113,17 +109,12 @@ cube_plein = MakeBox(-cube_cote, -cube_cote, -cube_cote, +cube_cote, +cube_co
|
|||||||
cube_trou = MakeCut(cube_plein, sphere_pleine)
|
cube_trou = MakeCut(cube_plein, sphere_pleine)
|
||||||
#cube_decoupe = MakePartition([cube_trou], sphere_outils, [], [], ShapeType["SOLID"])
|
#cube_decoupe = MakePartition([cube_trou], sphere_outils, [], [], ShapeType["SOLID"])
|
||||||
|
|
||||||
solids = geompy.SubShapeAll(cube_trou,geompy.ShapeType["SOLID"])
|
cube_decoupe = MakePartition([cube_trou], [f1], [], [], ShapeType["SOLID"])
|
||||||
cube_decoupe = MakePartition(solids, [f1], [], [], ShapeType["SOLID"])
|
cube_decoupe = MakePartition([cube_decoupe], [f2], [], [], ShapeType["SOLID"])
|
||||||
solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
|
cube_decoupe = MakePartition([cube_decoupe], [f3], [], [], ShapeType["SOLID"])
|
||||||
cube_decoupe = MakePartition(solids, [f2], [], [], ShapeType["SOLID"])
|
cube_decoupe = MakePartition([cube_decoupe], [f4], [], [], ShapeType["SOLID"])
|
||||||
solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
|
|
||||||
cube_decoupe = MakePartition(solids, [f3], [], [], ShapeType["SOLID"])
|
|
||||||
solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
|
|
||||||
cube_decoupe = MakePartition(solids, [f4], [], [], ShapeType["SOLID"])
|
|
||||||
solids = geompy.SubShapeAll(cube_decoupe,geompy.ShapeType["SOLID"])
|
|
||||||
|
|
||||||
cube_decoupe = geompy.MakeCompound(solids)
|
cube_decoupe = geompy.MakeCompound([cube_decoupe])
|
||||||
|
|
||||||
|
|
||||||
cube_partie = GetBlockNearPoint(cube_decoupe, MakeVertex(-cube_cote, 0, 0))
|
cube_partie = GetBlockNearPoint(cube_decoupe, MakeVertex(-cube_cote, 0, 0))
|
||||||
|
@ -17,11 +17,10 @@
|
|||||||
#
|
#
|
||||||
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
#
|
#
|
||||||
|
|
||||||
# File : smesh.py
|
# File : smesh.py
|
||||||
# Author : Francis KLOSS, OCC
|
# Author : Francis KLOSS, OCC
|
||||||
# Module : SMESH
|
# Module : SMESH
|
||||||
#
|
|
||||||
"""
|
"""
|
||||||
\namespace smesh
|
\namespace smesh
|
||||||
\brief Module smesh
|
\brief Module smesh
|
||||||
@ -570,7 +569,7 @@ class smeshDC(SMESH._objref_SMESH_Gen):
|
|||||||
# @return SMESH.AxisStruct
|
# @return SMESH.AxisStruct
|
||||||
# @ingroup l1_auxiliary
|
# @ingroup l1_auxiliary
|
||||||
def GetAxisStruct(self,theObj):
|
def GetAxisStruct(self,theObj):
|
||||||
edges = self.geompyD.SubShapeAll( theObj, geompyDC.ShapeType["EDGE"] )
|
edges = self.geompyD.ExtractShapes( theObj, geompyDC.ShapeType["EDGE"] )
|
||||||
if len(edges) > 1:
|
if len(edges) > 1:
|
||||||
vertex1, vertex2 = self.geompyD.SubShapeAll( edges[0], geompyDC.ShapeType["VERTEX"] )
|
vertex1, vertex2 = self.geompyD.SubShapeAll( edges[0], geompyDC.ShapeType["VERTEX"] )
|
||||||
vertex3, vertex4 = self.geompyD.SubShapeAll( edges[1], geompyDC.ShapeType["VERTEX"] )
|
vertex3, vertex4 = self.geompyD.SubShapeAll( edges[1], geompyDC.ShapeType["VERTEX"] )
|
||||||
@ -663,27 +662,6 @@ class smeshDC(SMESH._objref_SMESH_Gen):
|
|||||||
aMesh = Mesh(self, self.geompyD, aSmeshMesh)
|
aMesh = Mesh(self, self.geompyD, aSmeshMesh)
|
||||||
return aMesh
|
return aMesh
|
||||||
|
|
||||||
## From SMESH_Gen interface
|
|
||||||
# @return the list of integer values
|
|
||||||
# @ingroup l1_auxiliary
|
|
||||||
def GetSubShapesId( self, theMainObject, theListOfSubObjects ):
|
|
||||||
return SMESH._objref_SMESH_Gen.GetSubShapesId(self,theMainObject, theListOfSubObjects)
|
|
||||||
|
|
||||||
## From SMESH_Gen interface. Creates a pattern
|
|
||||||
# @return an instance of SMESH_Pattern
|
|
||||||
#
|
|
||||||
# <a href="../tui_modifying_meshes_page.html#tui_pattern_mapping">Example of Patterns usage</a>
|
|
||||||
# @ingroup l2_modif_patterns
|
|
||||||
def GetPattern(self):
|
|
||||||
return SMESH._objref_SMESH_Gen.GetPattern(self)
|
|
||||||
|
|
||||||
## Sets number of segments per diagonal of boundary box of geometry by which
|
|
||||||
# default segment length of appropriate 1D hypotheses is defined.
|
|
||||||
# Default value is 10
|
|
||||||
# @ingroup l1_auxiliary
|
|
||||||
def SetBoundaryBoxSegmentation(self, nbSegments):
|
|
||||||
SMESH._objref_SMESH_Gen.SetBoundaryBoxSegmentation(self,nbSegments)
|
|
||||||
|
|
||||||
## Concatenate the given meshes into one mesh.
|
## Concatenate the given meshes into one mesh.
|
||||||
# @return an instance of Mesh class
|
# @return an instance of Mesh class
|
||||||
# @param meshes the meshes to combine into one mesh
|
# @param meshes the meshes to combine into one mesh
|
||||||
@ -707,6 +685,41 @@ class smeshDC(SMESH._objref_SMESH_Gen):
|
|||||||
aMesh = Mesh(self, self.geompyD, aSmeshMesh)
|
aMesh = Mesh(self, self.geompyD, aSmeshMesh)
|
||||||
return aMesh
|
return aMesh
|
||||||
|
|
||||||
|
## Create a mesh by copying a part of another mesh.
|
||||||
|
# @param meshPart a part of mesh to copy, either a Mesh, a sub-mesh or a group;
|
||||||
|
# to copy nodes or elements not contained in any mesh object,
|
||||||
|
# pass result of Mesh.GetIDSource( list_of_ids, type ) as meshPart
|
||||||
|
# @param meshName a name of the new mesh
|
||||||
|
# @param toCopyGroups to create in the new mesh groups the copied elements belongs to
|
||||||
|
# @param toKeepIDs to preserve IDs of the copied elements or not
|
||||||
|
# @return an instance of Mesh class
|
||||||
|
def CopyMesh( self, meshPart, meshName, toCopyGroups=False, toKeepIDs=False):
|
||||||
|
if (isinstance( meshPart, Mesh )):
|
||||||
|
meshPart = meshPart.GetMesh()
|
||||||
|
mesh = SMESH._objref_SMESH_Gen.CopyMesh( self,meshPart,meshName,toCopyGroups,toKeepIDs )
|
||||||
|
return Mesh(self, self.geompyD, mesh)
|
||||||
|
|
||||||
|
## From SMESH_Gen interface
|
||||||
|
# @return the list of integer values
|
||||||
|
# @ingroup l1_auxiliary
|
||||||
|
def GetSubShapesId( self, theMainObject, theListOfSubObjects ):
|
||||||
|
return SMESH._objref_SMESH_Gen.GetSubShapesId(self,theMainObject, theListOfSubObjects)
|
||||||
|
|
||||||
|
## From SMESH_Gen interface. Creates a pattern
|
||||||
|
# @return an instance of SMESH_Pattern
|
||||||
|
#
|
||||||
|
# <a href="../tui_modifying_meshes_page.html#tui_pattern_mapping">Example of Patterns usage</a>
|
||||||
|
# @ingroup l2_modif_patterns
|
||||||
|
def GetPattern(self):
|
||||||
|
return SMESH._objref_SMESH_Gen.GetPattern(self)
|
||||||
|
|
||||||
|
## Sets number of segments per diagonal of boundary box of geometry by which
|
||||||
|
# default segment length of appropriate 1D hypotheses is defined.
|
||||||
|
# Default value is 10
|
||||||
|
# @ingroup l1_auxiliary
|
||||||
|
def SetBoundaryBoxSegmentation(self, nbSegments):
|
||||||
|
SMESH._objref_SMESH_Gen.SetBoundaryBoxSegmentation(self,nbSegments)
|
||||||
|
|
||||||
# Filtering. Auxiliary functions:
|
# Filtering. Auxiliary functions:
|
||||||
# ------------------------------
|
# ------------------------------
|
||||||
|
|
||||||
@ -735,6 +748,8 @@ class smeshDC(SMESH._objref_SMESH_Gen):
|
|||||||
# @param UnaryOp FT_LogicalNOT or FT_Undefined
|
# @param UnaryOp FT_LogicalNOT or FT_Undefined
|
||||||
# @param BinaryOp a binary logical operation FT_LogicalAND, FT_LogicalOR or
|
# @param BinaryOp a binary logical operation FT_LogicalAND, FT_LogicalOR or
|
||||||
# FT_Undefined (must be for the last criterion of all criteria)
|
# FT_Undefined (must be for the last criterion of all criteria)
|
||||||
|
# @param Tolerance the tolerance used by FT_BelongToGeom, FT_BelongToSurface,
|
||||||
|
# FT_LyingOnGeom, FT_CoplanarFaces criteria
|
||||||
# @return SMESH.Filter.Criterion
|
# @return SMESH.Filter.Criterion
|
||||||
# @ingroup l1_controls
|
# @ingroup l1_controls
|
||||||
def GetCriterion(self,elementType,
|
def GetCriterion(self,elementType,
|
||||||
@ -742,10 +757,12 @@ class smeshDC(SMESH._objref_SMESH_Gen):
|
|||||||
Compare = FT_EqualTo,
|
Compare = FT_EqualTo,
|
||||||
Treshold="",
|
Treshold="",
|
||||||
UnaryOp=FT_Undefined,
|
UnaryOp=FT_Undefined,
|
||||||
BinaryOp=FT_Undefined):
|
BinaryOp=FT_Undefined,
|
||||||
|
Tolerance=1e-07):
|
||||||
aCriterion = self.GetEmptyCriterion()
|
aCriterion = self.GetEmptyCriterion()
|
||||||
aCriterion.TypeOfElement = elementType
|
aCriterion.TypeOfElement = elementType
|
||||||
aCriterion.Type = self.EnumToLong(CritType)
|
aCriterion.Type = self.EnumToLong(CritType)
|
||||||
|
aCriterion.Tolerance = Tolerance
|
||||||
|
|
||||||
aTreshold = Treshold
|
aTreshold = Treshold
|
||||||
|
|
||||||
@ -810,7 +827,9 @@ class smeshDC(SMESH._objref_SMESH_Gen):
|
|||||||
return None
|
return None
|
||||||
pass
|
pass
|
||||||
elif CritType in [FT_FreeBorders, FT_FreeEdges, FT_BadOrientedVolume, FT_FreeNodes,
|
elif CritType in [FT_FreeBorders, FT_FreeEdges, FT_BadOrientedVolume, FT_FreeNodes,
|
||||||
FT_FreeFaces, FT_LinearOrQuadratic]:
|
FT_FreeFaces, FT_LinearOrQuadratic,
|
||||||
|
FT_BareBorderFace, FT_BareBorderVolume,
|
||||||
|
FT_OverConstrainedFace, FT_OverConstrainedVolume]:
|
||||||
# At this point the treshold is unnecessary
|
# At this point the treshold is unnecessary
|
||||||
if aTreshold == FT_LogicalNOT:
|
if aTreshold == FT_LogicalNOT:
|
||||||
aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
|
aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
|
||||||
@ -845,14 +864,17 @@ class smeshDC(SMESH._objref_SMESH_Gen):
|
|||||||
# @param Compare belongs to {FT_LessThan, FT_MoreThan, FT_EqualTo}
|
# @param Compare belongs to {FT_LessThan, FT_MoreThan, FT_EqualTo}
|
||||||
# @param Treshold the threshold value (range of id ids as string, shape, numeric)
|
# @param Treshold the threshold value (range of id ids as string, shape, numeric)
|
||||||
# @param UnaryOp FT_LogicalNOT or FT_Undefined
|
# @param UnaryOp FT_LogicalNOT or FT_Undefined
|
||||||
|
# @param Tolerance the tolerance used by FT_BelongToGeom, FT_BelongToSurface,
|
||||||
|
# FT_LyingOnGeom, FT_CoplanarFaces criteria
|
||||||
# @return SMESH_Filter
|
# @return SMESH_Filter
|
||||||
# @ingroup l1_controls
|
# @ingroup l1_controls
|
||||||
def GetFilter(self,elementType,
|
def GetFilter(self,elementType,
|
||||||
CritType=FT_Undefined,
|
CritType=FT_Undefined,
|
||||||
Compare=FT_EqualTo,
|
Compare=FT_EqualTo,
|
||||||
Treshold="",
|
Treshold="",
|
||||||
UnaryOp=FT_Undefined):
|
UnaryOp=FT_Undefined,
|
||||||
aCriterion = self.GetCriterion(elementType, CritType, Compare, Treshold, UnaryOp, FT_Undefined)
|
Tolerance=1e-07):
|
||||||
|
aCriterion = self.GetCriterion(elementType, CritType, Compare, Treshold, UnaryOp, FT_Undefined,Tolerance)
|
||||||
aFilterMgr = self.CreateFilterManager()
|
aFilterMgr = self.CreateFilterManager()
|
||||||
aFilter = aFilterMgr.CreateFilter()
|
aFilter = aFilterMgr.CreateFilter()
|
||||||
aCriteria = []
|
aCriteria = []
|
||||||
@ -1330,8 +1352,8 @@ class Mesh:
|
|||||||
shape = geom
|
shape = geom
|
||||||
if shape==0:
|
if shape==0:
|
||||||
shape = self.geom
|
shape = self.geom
|
||||||
nbSolids = len( self.geompyD.SubShapeAll( shape, geompyDC.ShapeType["SOLID"] ))
|
nbSolids = len( self.geompyD.ExtractShapes( shape, geompyDC.ShapeType["SOLID"] ))
|
||||||
nbShells = len( self.geompyD.SubShapeAll( shape, geompyDC.ShapeType["SHELL"] ))
|
nbShells = len( self.geompyD.ExtractShapes( shape, geompyDC.ShapeType["SHELL"] ))
|
||||||
if nbSolids == 0 or nbSolids == nbShells:
|
if nbSolids == 0 or nbSolids == nbShells:
|
||||||
return Mesh_Prism3D(self, geom)
|
return Mesh_Prism3D(self, geom)
|
||||||
return Mesh_RadialPrism3D(self, geom)
|
return Mesh_RadialPrism3D(self, geom)
|
||||||
@ -1744,6 +1766,8 @@ class Mesh:
|
|||||||
# @param Compare belongs to {FT_LessThan, FT_MoreThan, FT_EqualTo}
|
# @param Compare belongs to {FT_LessThan, FT_MoreThan, FT_EqualTo}
|
||||||
# @param Treshold the threshold value (range of id ids as string, shape, numeric)
|
# @param Treshold the threshold value (range of id ids as string, shape, numeric)
|
||||||
# @param UnaryOp FT_LogicalNOT or FT_Undefined
|
# @param UnaryOp FT_LogicalNOT or FT_Undefined
|
||||||
|
# @param Tolerance the tolerance used by FT_BelongToGeom, FT_BelongToSurface,
|
||||||
|
# FT_LyingOnGeom, FT_CoplanarFaces criteria
|
||||||
# @return SMESH_Group
|
# @return SMESH_Group
|
||||||
# @ingroup l2_grps_create
|
# @ingroup l2_grps_create
|
||||||
def MakeGroup(self,
|
def MakeGroup(self,
|
||||||
@ -1752,8 +1776,9 @@ class Mesh:
|
|||||||
CritType=FT_Undefined,
|
CritType=FT_Undefined,
|
||||||
Compare=FT_EqualTo,
|
Compare=FT_EqualTo,
|
||||||
Treshold="",
|
Treshold="",
|
||||||
UnaryOp=FT_Undefined):
|
UnaryOp=FT_Undefined,
|
||||||
aCriterion = self.smeshpyD.GetCriterion(elementType, CritType, Compare, Treshold, UnaryOp, FT_Undefined)
|
Tolerance=1e-07):
|
||||||
|
aCriterion = self.smeshpyD.GetCriterion(elementType, CritType, Compare, Treshold, UnaryOp, FT_Undefined,Tolerance)
|
||||||
group = self.MakeGroupByCriterion(groupName, aCriterion)
|
group = self.MakeGroupByCriterion(groupName, aCriterion)
|
||||||
return group
|
return group
|
||||||
|
|
||||||
@ -1969,6 +1994,13 @@ class Mesh:
|
|||||||
def GetMeshEditor(self):
|
def GetMeshEditor(self):
|
||||||
return self.mesh.GetMeshEditor()
|
return self.mesh.GetMeshEditor()
|
||||||
|
|
||||||
|
## Wrap a list of IDs of elements or nodes into SMESH_IDSource which
|
||||||
|
# can be passed as argument to accepting mesh, group or sub-mesh
|
||||||
|
# @return an instance of SMESH_IDSource
|
||||||
|
# @ingroup l1_auxiliary
|
||||||
|
def GetIDSource(self, ids, elemType):
|
||||||
|
return self.GetMeshEditor().MakeIDSource(ids, elemType)
|
||||||
|
|
||||||
## Gets MED Mesh
|
## Gets MED Mesh
|
||||||
# @return an instance of SALOME_MED::MESH
|
# @return an instance of SALOME_MED::MESH
|
||||||
# @ingroup l1_auxiliary
|
# @ingroup l1_auxiliary
|
||||||
@ -3213,7 +3245,7 @@ class Mesh:
|
|||||||
|
|
||||||
## Generates new elements by extrusion of the elements with given ids
|
## Generates new elements by extrusion of the elements with given ids
|
||||||
# @param IDsOfElements the list of elements ids for extrusion
|
# @param IDsOfElements the list of elements ids for extrusion
|
||||||
# @param StepVector vector, defining the direction and value of extrusion
|
# @param StepVector vector or DirStruct, defining the direction and value of extrusion
|
||||||
# @param NbOfSteps the number of steps
|
# @param NbOfSteps the number of steps
|
||||||
# @param MakeGroups forces the generation of new groups from existing ones
|
# @param MakeGroups forces the generation of new groups from existing ones
|
||||||
# @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
|
# @return the list of created groups (SMESH_GroupBase) if MakeGroups=True, empty list otherwise
|
||||||
@ -3347,6 +3379,9 @@ class Mesh:
|
|||||||
Parameters = AnglesParameters + var_separator + RefPointParameters
|
Parameters = AnglesParameters + var_separator + RefPointParameters
|
||||||
self.mesh.SetParameters(Parameters)
|
self.mesh.SetParameters(Parameters)
|
||||||
|
|
||||||
|
if (isinstance(Path, Mesh)):
|
||||||
|
Path = Path.GetMesh()
|
||||||
|
|
||||||
if isinstance(Base, list):
|
if isinstance(Base, list):
|
||||||
IDsOfElements = []
|
IDsOfElements = []
|
||||||
if Base == []: IDsOfElements = self.GetElementsId()
|
if Base == []: IDsOfElements = self.GetElementsId()
|
||||||
@ -3355,7 +3390,8 @@ class Mesh:
|
|||||||
HasAngles, Angles, LinearVariation,
|
HasAngles, Angles, LinearVariation,
|
||||||
HasRefPoint, RefPoint, MakeGroups, ElemType)
|
HasRefPoint, RefPoint, MakeGroups, ElemType)
|
||||||
else:
|
else:
|
||||||
if isinstance(Base,Mesh):
|
if isinstance(Base, Mesh): Base = Base.GetMesh()
|
||||||
|
if isinstance(Base, SMESH._objref_SMESH_Mesh) or isinstance(Base, SMESH._objref_SMESH_Group) or isinstance(Base, SMESH._objref_SMESH_subMesh):
|
||||||
return self.editor.ExtrusionAlongPathObjX(Base, Path, NodeStart,
|
return self.editor.ExtrusionAlongPathObjX(Base, Path, NodeStart,
|
||||||
HasAngles, Angles, LinearVariation,
|
HasAngles, Angles, LinearVariation,
|
||||||
HasRefPoint, RefPoint, MakeGroups, ElemType)
|
HasRefPoint, RefPoint, MakeGroups, ElemType)
|
||||||
@ -3700,7 +3736,7 @@ class Mesh:
|
|||||||
if ( isinstance( theObject, Mesh )):
|
if ( isinstance( theObject, Mesh )):
|
||||||
theObject = theObject.GetMesh()
|
theObject = theObject.GetMesh()
|
||||||
if ( isinstance( theObject, list )):
|
if ( isinstance( theObject, list )):
|
||||||
theObject = self.editor.MakeIDSource(theObject, SMESH.ALL)
|
theObject = self.GetIDSource(theObject, SMESH.ALL)
|
||||||
|
|
||||||
thePoint, Parameters = ParsePointStruct(thePoint)
|
thePoint, Parameters = ParsePointStruct(thePoint)
|
||||||
self.mesh.SetParameters(Parameters)
|
self.mesh.SetParameters(Parameters)
|
||||||
@ -3721,7 +3757,7 @@ class Mesh:
|
|||||||
if (isinstance(theObject, Mesh)):
|
if (isinstance(theObject, Mesh)):
|
||||||
theObject = theObject.GetMesh()
|
theObject = theObject.GetMesh()
|
||||||
if ( isinstance( theObject, list )):
|
if ( isinstance( theObject, list )):
|
||||||
theObject = self.editor.MakeIDSource(theObject,SMESH.ALL)
|
theObject = self.GetIDSource(theObject,SMESH.ALL)
|
||||||
|
|
||||||
mesh = self.editor.ScaleMakeMesh(theObject, thePoint, theScaleFact,
|
mesh = self.editor.ScaleMakeMesh(theObject, thePoint, theScaleFact,
|
||||||
MakeGroups, NewMeshName)
|
MakeGroups, NewMeshName)
|
||||||
@ -3855,7 +3891,7 @@ class Mesh:
|
|||||||
if not isinstance( exceptNodes, list):
|
if not isinstance( exceptNodes, list):
|
||||||
exceptNodes = [ exceptNodes ]
|
exceptNodes = [ exceptNodes ]
|
||||||
if exceptNodes and isinstance( exceptNodes[0], int):
|
if exceptNodes and isinstance( exceptNodes[0], int):
|
||||||
exceptNodes = [ self.editor.MakeIDSource( exceptNodes, SMESH.NODE)]
|
exceptNodes = [ self.GetIDSource( exceptNodes, SMESH.NODE)]
|
||||||
return self.editor.FindCoincidentNodesOnPartBut(SubMeshOrGroup, Tolerance,exceptNodes)
|
return self.editor.FindCoincidentNodesOnPartBut(SubMeshOrGroup, Tolerance,exceptNodes)
|
||||||
|
|
||||||
## Merges nodes
|
## Merges nodes
|
||||||
@ -4340,8 +4376,11 @@ class Mesh_Algorithm:
|
|||||||
pass
|
pass
|
||||||
self.mesh.smeshpyD.SetName(hypo, hyp + a)
|
self.mesh.smeshpyD.SetName(hypo, hyp + a)
|
||||||
pass
|
pass
|
||||||
|
geomName=""
|
||||||
|
if self.geom:
|
||||||
|
geomName = GetName(self.geom)
|
||||||
status = self.mesh.mesh.AddHypothesis(self.geom, hypo)
|
status = self.mesh.mesh.AddHypothesis(self.geom, hypo)
|
||||||
TreatHypoStatus( status, GetName(hypo), GetName(self.geom), 0 )
|
TreatHypoStatus( status, GetName(hypo), geomName, 0 )
|
||||||
return hypo
|
return hypo
|
||||||
|
|
||||||
## Returns entry of the shape to mesh in the study
|
## Returns entry of the shape to mesh in the study
|
||||||
@ -4625,7 +4664,7 @@ class Mesh_Segment(Mesh_Algorithm):
|
|||||||
store_geom = self.geom
|
store_geom = self.geom
|
||||||
if type(vertex) is types.IntType:
|
if type(vertex) is types.IntType:
|
||||||
if vertex == 0 or vertex == 1:
|
if vertex == 0 or vertex == 1:
|
||||||
vertex = self.mesh.geompyD.SubShapeAllSorted(self.geom, geompyDC.ShapeType["VERTEX"])[vertex]
|
vertex = self.mesh.geompyD.ExtractShapes(self.geom, geompyDC.ShapeType["VERTEX"],True)[vertex]
|
||||||
self.geom = vertex
|
self.geom = vertex
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
@ -4884,20 +4923,31 @@ class Mesh_Triangle(Mesh_Algorithm):
|
|||||||
self.Parameters().SetOptionValue(optionName,level)
|
self.Parameters().SetOptionValue(optionName,level)
|
||||||
|
|
||||||
## Sets QuadAllowed flag.
|
## Sets QuadAllowed flag.
|
||||||
# Only for algoType == NETGEN || NETGEN_2D || BLSURF
|
# Only for algoType == NETGEN(NETGEN_1D2D) || NETGEN_2D || BLSURF
|
||||||
# @ingroup l3_hypos_netgen l3_hypos_blsurf
|
# @ingroup l3_hypos_netgen l3_hypos_blsurf
|
||||||
def SetQuadAllowed(self, toAllow=True):
|
def SetQuadAllowed(self, toAllow=True):
|
||||||
if self.algoType == NETGEN_2D:
|
if self.algoType == NETGEN_2D:
|
||||||
if toAllow: # add QuadranglePreference
|
if not self.params:
|
||||||
self.Hypothesis("QuadranglePreference", UseExisting=1, CompareMethod=self.CompareEqualHyp)
|
# use simple hyps
|
||||||
else: # remove QuadranglePreference
|
hasSimpleHyps = False
|
||||||
|
simpleHyps = ["QuadranglePreference","LengthFromEdges","MaxElementArea"]
|
||||||
for hyp in self.mesh.GetHypothesisList( self.geom ):
|
for hyp in self.mesh.GetHypothesisList( self.geom ):
|
||||||
|
if hyp.GetName() in simpleHyps:
|
||||||
|
hasSimpleHyps = True
|
||||||
if hyp.GetName() == "QuadranglePreference":
|
if hyp.GetName() == "QuadranglePreference":
|
||||||
|
if not toAllow: # remove QuadranglePreference
|
||||||
self.mesh.RemoveHypothesis( self.geom, hyp )
|
self.mesh.RemoveHypothesis( self.geom, hyp )
|
||||||
pass
|
pass
|
||||||
|
return
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
|
if hasSimpleHyps:
|
||||||
|
if toAllow: # add QuadranglePreference
|
||||||
|
self.Hypothesis("QuadranglePreference", UseExisting=1, CompareMethod=self.CompareEqualHyp)
|
||||||
|
pass
|
||||||
return
|
return
|
||||||
|
pass
|
||||||
|
pass
|
||||||
if self.Parameters():
|
if self.Parameters():
|
||||||
self.params.SetQuadAllowed(toAllow)
|
self.params.SetQuadAllowed(toAllow)
|
||||||
return
|
return
|
||||||
@ -4906,8 +4956,7 @@ class Mesh_Triangle(Mesh_Algorithm):
|
|||||||
#
|
#
|
||||||
# @ingroup l3_hypos_netgen
|
# @ingroup l3_hypos_netgen
|
||||||
def Parameters(self, which=SOLE):
|
def Parameters(self, which=SOLE):
|
||||||
if self.params:
|
if not self.params:
|
||||||
return self.params
|
|
||||||
if self.algoType == NETGEN:
|
if self.algoType == NETGEN:
|
||||||
if which == SIMPLE:
|
if which == SIMPLE:
|
||||||
self.params = self.Hypothesis("NETGEN_SimpleParameters_2D", [],
|
self.params = self.Hypothesis("NETGEN_SimpleParameters_2D", [],
|
||||||
@ -4915,21 +4964,17 @@ class Mesh_Triangle(Mesh_Algorithm):
|
|||||||
else:
|
else:
|
||||||
self.params = self.Hypothesis("NETGEN_Parameters_2D", [],
|
self.params = self.Hypothesis("NETGEN_Parameters_2D", [],
|
||||||
"libNETGENEngine.so", UseExisting=0)
|
"libNETGENEngine.so", UseExisting=0)
|
||||||
return self.params
|
|
||||||
elif self.algoType == MEFISTO:
|
elif self.algoType == MEFISTO:
|
||||||
print "Mefisto algo support no multi-parameter hypothesis"
|
print "Mefisto algo support no multi-parameter hypothesis"
|
||||||
return None
|
|
||||||
elif self.algoType == NETGEN_2D:
|
elif self.algoType == NETGEN_2D:
|
||||||
print "NETGEN_2D_ONLY algo support no multi-parameter hypothesis"
|
self.params = self.Hypothesis("NETGEN_Parameters_2D_ONLY", [],
|
||||||
print "NETGEN_2D_ONLY uses 'MaxElementArea' and 'LengthFromEdges' ones"
|
"libNETGENEngine.so", UseExisting=0)
|
||||||
return None
|
|
||||||
elif self.algoType == BLSURF:
|
elif self.algoType == BLSURF:
|
||||||
self.params = self.Hypothesis("BLSURF_Parameters", [],
|
self.params = self.Hypothesis("BLSURF_Parameters", [],
|
||||||
"libBLSURFEngine.so", UseExisting=0)
|
"libBLSURFEngine.so", UseExisting=0)
|
||||||
return self.params
|
|
||||||
else:
|
else:
|
||||||
print "Mesh_Triangle with algo type %s does not have such a parameter, check algo type"%self.algoType
|
print "Mesh_Triangle with algo type %s does not have such a parameter, check algo type"%self.algoType
|
||||||
return None
|
return self.params
|
||||||
|
|
||||||
## Sets MaxSize
|
## Sets MaxSize
|
||||||
#
|
#
|
||||||
@ -5166,8 +5211,7 @@ class Mesh_Tetrahedron(Mesh_Algorithm):
|
|||||||
#
|
#
|
||||||
# @ingroup l3_hypos_netgen
|
# @ingroup l3_hypos_netgen
|
||||||
def Parameters(self, which=SOLE):
|
def Parameters(self, which=SOLE):
|
||||||
if self.params:
|
if not self.params:
|
||||||
return self.params
|
|
||||||
|
|
||||||
if self.algoType == FULL_NETGEN:
|
if self.algoType == FULL_NETGEN:
|
||||||
if which == SIMPLE:
|
if which == SIMPLE:
|
||||||
@ -5176,23 +5220,25 @@ class Mesh_Tetrahedron(Mesh_Algorithm):
|
|||||||
else:
|
else:
|
||||||
self.params = self.Hypothesis("NETGEN_Parameters", [],
|
self.params = self.Hypothesis("NETGEN_Parameters", [],
|
||||||
"libNETGENEngine.so", UseExisting=0)
|
"libNETGENEngine.so", UseExisting=0)
|
||||||
return self.params
|
|
||||||
|
|
||||||
if self.algoType == GHS3D:
|
if self.algoType == NETGEN:
|
||||||
|
self.params = self.Hypothesis("NETGEN_Parameters_3D", [],
|
||||||
|
"libNETGENEngine.so", UseExisting=0)
|
||||||
|
|
||||||
|
elif self.algoType == GHS3D:
|
||||||
self.params = self.Hypothesis("GHS3D_Parameters", [],
|
self.params = self.Hypothesis("GHS3D_Parameters", [],
|
||||||
"libGHS3DEngine.so", UseExisting=0)
|
"libGHS3DEngine.so", UseExisting=0)
|
||||||
return self.params
|
|
||||||
|
|
||||||
if self.algoType == GHS3DPRL:
|
elif self.algoType == GHS3DPRL:
|
||||||
self.params = self.Hypothesis("GHS3DPRL_Parameters", [],
|
self.params = self.Hypothesis("GHS3DPRL_Parameters", [],
|
||||||
"libGHS3DPRLEngine.so", UseExisting=0)
|
"libGHS3DPRLEngine.so", UseExisting=0)
|
||||||
|
else:
|
||||||
|
print "Algo supports no multi-parameter hypothesis"
|
||||||
|
|
||||||
return self.params
|
return self.params
|
||||||
|
|
||||||
print "Algo supports no multi-parameter hypothesis"
|
|
||||||
return None
|
|
||||||
|
|
||||||
## Sets MaxSize
|
## Sets MaxSize
|
||||||
# Parameter of FULL_NETGEN
|
# Parameter of FULL_NETGEN and NETGEN
|
||||||
# @ingroup l3_hypos_netgen
|
# @ingroup l3_hypos_netgen
|
||||||
def SetMaxSize(self, theSize):
|
def SetMaxSize(self, theSize):
|
||||||
self.Parameters().SetMaxSize(theSize)
|
self.Parameters().SetMaxSize(theSize)
|
||||||
@ -5204,7 +5250,7 @@ class Mesh_Tetrahedron(Mesh_Algorithm):
|
|||||||
self.Parameters().SetSecondOrder(theVal)
|
self.Parameters().SetSecondOrder(theVal)
|
||||||
|
|
||||||
## Sets Optimize flag
|
## Sets Optimize flag
|
||||||
# Parameter of FULL_NETGEN
|
# Parameter of FULL_NETGEN and NETGEN
|
||||||
# @ingroup l3_hypos_netgen
|
# @ingroup l3_hypos_netgen
|
||||||
def SetOptimize(self, theVal):
|
def SetOptimize(self, theVal):
|
||||||
self.Parameters().SetOptimize(theVal)
|
self.Parameters().SetOptimize(theVal)
|
||||||
|
@ -120,6 +120,7 @@ namespace // INTERNAL STUFF
|
|||||||
enum _ListenerDataType
|
enum _ListenerDataType
|
||||||
{
|
{
|
||||||
WAIT_HYP_MODIF=1, // data indicating awaiting for valid parameters of src hyp
|
WAIT_HYP_MODIF=1, // data indicating awaiting for valid parameters of src hyp
|
||||||
|
LISTEN_SRC_MESH, // data storing submesh depending on source mesh state
|
||||||
SRC_HYP // data storing ImportSource hyp
|
SRC_HYP // data storing ImportSource hyp
|
||||||
};
|
};
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -130,10 +131,29 @@ namespace // INTERNAL STUFF
|
|||||||
struct _ListenerData : public SMESH_subMeshEventListenerData
|
struct _ListenerData : public SMESH_subMeshEventListenerData
|
||||||
{
|
{
|
||||||
const StdMeshers_ImportSource1D* _srcHyp;
|
const StdMeshers_ImportSource1D* _srcHyp;
|
||||||
_ListenerData(const StdMeshers_ImportSource1D* h):
|
_ListenerData(const StdMeshers_ImportSource1D* h, _ListenerDataType type=SRC_HYP):
|
||||||
SMESH_subMeshEventListenerData(/*isDeletable=*/true), _srcHyp(h)
|
SMESH_subMeshEventListenerData(/*isDeletable=*/true), _srcHyp(h)
|
||||||
{
|
{
|
||||||
myType = SRC_HYP;
|
myType = type;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//================================================================================
|
||||||
|
/*!
|
||||||
|
* \brief Comparator of sub-meshes
|
||||||
|
*/
|
||||||
|
struct _SubLess
|
||||||
|
{
|
||||||
|
bool operator()(const SMESH_subMesh* sm1, const SMESH_subMesh* sm2 ) const
|
||||||
|
{
|
||||||
|
if ( sm1 == sm2 ) return false;
|
||||||
|
if ( !sm1 || !sm2 ) return sm1 < sm2;
|
||||||
|
const TopoDS_Shape& s1 = sm1->GetSubShape();
|
||||||
|
const TopoDS_Shape& s2 = sm2->GetSubShape();
|
||||||
|
TopAbs_ShapeEnum t1 = s1.IsNull() ? TopAbs_SHAPE : s1.ShapeType();
|
||||||
|
TopAbs_ShapeEnum t2 = s2.IsNull() ? TopAbs_SHAPE : s2.ShapeType();
|
||||||
|
if ( t1 == t2)
|
||||||
|
return (sm1 < sm2);
|
||||||
|
return t1 < t2; // to have: face < edge
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -146,10 +166,10 @@ namespace // INTERNAL STUFF
|
|||||||
StdMeshers_Import_1D::TNodeNodeMap _n2n;
|
StdMeshers_Import_1D::TNodeNodeMap _n2n;
|
||||||
StdMeshers_Import_1D::TElemElemMap _e2e;
|
StdMeshers_Import_1D::TElemElemMap _e2e;
|
||||||
|
|
||||||
set< SMESH_subMesh*> _subM; // submeshes relating to this srcMesh
|
set< SMESH_subMesh*, _SubLess > _subM; // submeshes relating to this srcMesh
|
||||||
set< SMESH_subMesh*> _copyMeshSubM; // submeshes requesting mesh copying
|
set< SMESH_subMesh*, _SubLess > _copyMeshSubM; // submeshes requesting mesh copying
|
||||||
set< SMESH_subMesh*> _copyGroupSubM; // submeshes requesting mesh copying
|
set< SMESH_subMesh*, _SubLess > _copyGroupSubM; // submeshes requesting mesh copying
|
||||||
set< SMESH_subMesh*> _computedSubM;
|
set< SMESH_subMesh*, _SubLess > _computedSubM;
|
||||||
|
|
||||||
SMESHDS_SubMesh* _importMeshSubDS; // submesh storing a copy of _srcMesh
|
SMESHDS_SubMesh* _importMeshSubDS; // submesh storing a copy of _srcMesh
|
||||||
int _importMeshSubID; // id of _importMeshSubDS
|
int _importMeshSubID; // id of _importMeshSubDS
|
||||||
@ -196,10 +216,30 @@ namespace // INTERNAL STUFF
|
|||||||
if ( toCopyGroups ) _copyGroupSubM.insert( sm );
|
if ( toCopyGroups ) _copyGroupSubM.insert( sm );
|
||||||
else _copyGroupSubM.erase( sm );
|
else _copyGroupSubM.erase( sm );
|
||||||
}
|
}
|
||||||
|
void addComputed( SMESH_subMesh* sm )
|
||||||
|
{
|
||||||
|
SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(/*includeSelf=*/true,
|
||||||
|
/*complexShapeFirst=*/true);
|
||||||
|
while ( smIt->more() )
|
||||||
|
{
|
||||||
|
sm = smIt->next();
|
||||||
|
switch ( sm->GetSubShape().ShapeType() )
|
||||||
|
{
|
||||||
|
case TopAbs_EDGE:
|
||||||
|
case TopAbs_FACE:
|
||||||
|
_subM.insert( sm );
|
||||||
|
if ( !sm->IsEmpty() )
|
||||||
|
_computedSubM.insert( sm );
|
||||||
|
case TopAbs_VERTEX:
|
||||||
|
break;
|
||||||
|
default:;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
* Listener notified on events of an imported submesh
|
* Listener notified on events relating to imported submesh
|
||||||
*/
|
*/
|
||||||
class _Listener : public SMESH_subMeshEventListener
|
class _Listener : public SMESH_subMeshEventListener
|
||||||
{
|
{
|
||||||
@ -212,11 +252,32 @@ namespace // INTERNAL STUFF
|
|||||||
// return poiter to a static listener
|
// return poiter to a static listener
|
||||||
static _Listener* get() { static _Listener theListener; return &theListener; }
|
static _Listener* get() { static _Listener theListener; return &theListener; }
|
||||||
|
|
||||||
|
static _ImportData* getImportData(const SMESH_Mesh* srcMesh, SMESH_Mesh* tgtMesh);
|
||||||
|
|
||||||
|
static void storeImportSubmesh(SMESH_subMesh* importSub,
|
||||||
|
const SMESH_Mesh* srcMesh,
|
||||||
|
const StdMeshers_ImportSource1D* srcHyp);
|
||||||
|
|
||||||
|
virtual void ProcessEvent(const int event,
|
||||||
|
const int eventType,
|
||||||
|
SMESH_subMesh* subMesh,
|
||||||
|
SMESH_subMeshEventListenerData* data,
|
||||||
|
const SMESH_Hypothesis* hyp);
|
||||||
|
void removeSubmesh( SMESH_subMesh* sm, _ListenerData* data );
|
||||||
|
void clearSubmesh ( SMESH_subMesh* sm, _ListenerData* data, bool clearAllSub );
|
||||||
|
|
||||||
|
// mark sm as missing src hyp with valid groups
|
||||||
|
static void waitHypModification(SMESH_subMesh* sm)
|
||||||
|
{
|
||||||
|
sm->SetEventListener
|
||||||
|
(get(), SMESH_subMeshEventListenerData::MakeData( sm, WAIT_HYP_MODIF ), sm);
|
||||||
|
}
|
||||||
|
};
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
* \brief Find or create ImportData for given meshes
|
* \brief Find or create ImportData for given meshes
|
||||||
*/
|
*/
|
||||||
static _ImportData* getImportData(const SMESH_Mesh* srcMesh,
|
_ImportData* _Listener::getImportData(const SMESH_Mesh* srcMesh,
|
||||||
SMESH_Mesh* tgtMesh)
|
SMESH_Mesh* tgtMesh)
|
||||||
{
|
{
|
||||||
list< _ImportData >& dList = get()->_tgtMesh2ImportData[tgtMesh];
|
list< _ImportData >& dList = get()->_tgtMesh2ImportData[tgtMesh];
|
||||||
@ -230,13 +291,12 @@ namespace // INTERNAL STUFF
|
|||||||
|
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
* \brief Remember an imported mesh and groups
|
* \brief Remember an imported sub-mesh and set needed even listeners
|
||||||
* \param smDS - submesh DS holding the imported mesh
|
* \param importSub - submesh computed by Import algo
|
||||||
* \param sm - submesh computed by Import algo
|
* \param srcMesh - source mesh
|
||||||
* \param srcMeshDS - source mesh
|
|
||||||
* \param srcHyp - ImportSource hypothesis
|
* \param srcHyp - ImportSource hypothesis
|
||||||
*/
|
*/
|
||||||
static _ImportData* storeImportSubmesh(SMESH_subMesh* importSub,
|
void _Listener::storeImportSubmesh(SMESH_subMesh* importSub,
|
||||||
const SMESH_Mesh* srcMesh,
|
const SMESH_Mesh* srcMesh,
|
||||||
const StdMeshers_ImportSource1D* srcHyp)
|
const StdMeshers_ImportSource1D* srcHyp)
|
||||||
{
|
{
|
||||||
@ -246,46 +306,28 @@ namespace // INTERNAL STUFF
|
|||||||
// set a listener to hear events of the source mesh
|
// set a listener to hear events of the source mesh
|
||||||
SMESH_subMesh* smToNotify = importSub;
|
SMESH_subMesh* smToNotify = importSub;
|
||||||
SMESH_subMesh* smToListen = srcMesh->GetSubMeshContaining(1);
|
SMESH_subMesh* smToListen = srcMesh->GetSubMeshContaining(1);
|
||||||
importSub->SetEventListener
|
SMESH_subMeshEventListenerData* data = new _ListenerData(srcHyp, LISTEN_SRC_MESH);
|
||||||
( new SMESH_subMeshEventListener(/*isDeletable=*/true),
|
data->mySubMeshes.push_back( smToNotify );
|
||||||
SMESH_subMeshEventListenerData::MakeData( smToNotify ),
|
importSub->SetEventListener( get(), data, smToListen );
|
||||||
smToListen );
|
|
||||||
|
|
||||||
// remeber the submesh
|
// remeber the submesh importSub and its sub-submeshes
|
||||||
_ImportData* iData = _Listener::getImportData( srcMesh, importSub->GetFather());
|
_ImportData* iData = _Listener::getImportData( srcMesh, importSub->GetFather());
|
||||||
iData->_subM.insert( importSub );
|
|
||||||
iData->trackHypParams( importSub, srcHyp );
|
iData->trackHypParams( importSub, srcHyp );
|
||||||
if ( !importSub->IsEmpty() )
|
iData->addComputed( importSub );
|
||||||
iData->_computedSubM.insert( importSub );
|
|
||||||
if ( !iData->_copyMeshSubM.empty() && iData->_importMeshSubID < 1 )
|
if ( !iData->_copyMeshSubM.empty() && iData->_importMeshSubID < 1 )
|
||||||
{
|
{
|
||||||
SMESH_Mesh* tgtMesh = importSub->GetFather();
|
SMESH_Mesh* tgtMesh = importSub->GetFather();
|
||||||
iData->_importMeshSubID = getSubmeshIDForCopiedMesh( srcMesh->GetMeshDS(),tgtMesh);
|
iData->_importMeshSubID = getSubmeshIDForCopiedMesh( srcMesh->GetMeshDS(),tgtMesh);
|
||||||
iData->_importMeshSubDS = tgtMesh->GetMeshDS()->NewSubMesh( iData->_importMeshSubID );
|
iData->_importMeshSubDS = tgtMesh->GetMeshDS()->NewSubMesh( iData->_importMeshSubID );
|
||||||
}
|
}
|
||||||
if ( !importSub->IsEmpty() )
|
|
||||||
iData->_computedSubM.insert( importSub );
|
|
||||||
|
|
||||||
return iData;
|
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
* \brief mark sm as missing src hyp with valid groups
|
* \brief Remove imported mesh and/or groups if needed
|
||||||
*/
|
|
||||||
static void waitHypModification(SMESH_subMesh* sm)
|
|
||||||
{
|
|
||||||
sm->SetEventListener
|
|
||||||
(get(), SMESH_subMeshEventListenerData::MakeData( sm, WAIT_HYP_MODIF ), sm);
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------
|
|
||||||
/*!
|
|
||||||
* \brief Remove imported mesh and/or groups as soon as no more imported submeshes
|
|
||||||
* remain computed
|
|
||||||
* \param sm - submesh loosing Import algo
|
* \param sm - submesh loosing Import algo
|
||||||
* \param data - data holding imported groups
|
* \param data - data holding imported groups
|
||||||
*/
|
*/
|
||||||
void removeSubmesh( SMESH_subMesh* sm, _ListenerData* data )
|
void _Listener::removeSubmesh( SMESH_subMesh* sm, _ListenerData* data )
|
||||||
{
|
{
|
||||||
list< _ImportData > & dList = _tgtMesh2ImportData[ sm->GetFather() ];
|
list< _ImportData > & dList = _tgtMesh2ImportData[ sm->GetFather() ];
|
||||||
list< _ImportData >::iterator d = dList.begin();
|
list< _ImportData >::iterator d = dList.begin();
|
||||||
@ -303,12 +345,11 @@ namespace // INTERNAL STUFF
|
|||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
* \brief Remove imported mesh and/or groups and
|
* \brief Clear submeshes and remove imported mesh and/or groups if necessary
|
||||||
* clear all submeshes with common source mesh
|
|
||||||
* \param sm - cleared submesh
|
* \param sm - cleared submesh
|
||||||
* \param data - data holding imported groups
|
* \param data - data holding imported groups
|
||||||
*/
|
*/
|
||||||
void clearSubmesh( SMESH_subMesh* sm, _ListenerData* data )
|
void _Listener::clearSubmesh(SMESH_subMesh* sm, _ListenerData* data, bool clearAllSub)
|
||||||
{
|
{
|
||||||
list< _ImportData > & dList = _tgtMesh2ImportData[ sm->GetFather() ];
|
list< _ImportData > & dList = _tgtMesh2ImportData[ sm->GetFather() ];
|
||||||
list< _ImportData >::iterator d = dList.begin();
|
list< _ImportData >::iterator d = dList.begin();
|
||||||
@ -318,12 +359,18 @@ namespace // INTERNAL STUFF
|
|||||||
if ( (*d)._computedSubM.erase( sm ) )
|
if ( (*d)._computedSubM.erase( sm ) )
|
||||||
{
|
{
|
||||||
bool copyMesh = !d->_copyMeshSubM.empty();
|
bool copyMesh = !d->_copyMeshSubM.empty();
|
||||||
if ( copyMesh )
|
if ( copyMesh || clearAllSub )
|
||||||
{
|
{
|
||||||
// clear submeshes
|
// remove imported mesh and groups
|
||||||
|
d->removeImportedMesh( sm->GetFather()->GetMeshDS() );
|
||||||
|
|
||||||
|
if ( data )
|
||||||
|
d->removeGroups( sm, data->_srcHyp );
|
||||||
|
|
||||||
|
// clear the rest submeshes
|
||||||
if ( !d->_computedSubM.empty() )
|
if ( !d->_computedSubM.empty() )
|
||||||
{
|
{
|
||||||
set< SMESH_subMesh*> subs;
|
set< SMESH_subMesh*, _SubLess> subs;
|
||||||
subs.swap( d->_computedSubM ); // avoid recursion via events
|
subs.swap( d->_computedSubM ); // avoid recursion via events
|
||||||
while ( !subs.empty() )
|
while ( !subs.empty() )
|
||||||
{
|
{
|
||||||
@ -333,14 +380,14 @@ namespace // INTERNAL STUFF
|
|||||||
d->removeGroups( sm, hypData->_srcHyp );
|
d->removeGroups( sm, hypData->_srcHyp );
|
||||||
|
|
||||||
subM->ComputeStateEngine( SMESH_subMesh::CLEAN );
|
subM->ComputeStateEngine( SMESH_subMesh::CLEAN );
|
||||||
|
if ( subM->GetSubShape().ShapeType() == TopAbs_FACE )
|
||||||
|
subM->ComputeSubMeshStateEngine( SMESH_subMesh::CLEAN );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// remove imported mesh and groups
|
|
||||||
d->removeImportedMesh( sm->GetFather()->GetMeshDS() );
|
|
||||||
|
|
||||||
if ( data )
|
|
||||||
d->removeGroups( sm, data->_srcHyp );
|
|
||||||
}
|
}
|
||||||
|
sm->ComputeStateEngine( SMESH_subMesh::CLEAN );
|
||||||
|
if ( sm->GetSubShape().ShapeType() == TopAbs_FACE )
|
||||||
|
sm->ComputeSubMeshStateEngine( SMESH_subMesh::CLEAN );
|
||||||
}
|
}
|
||||||
if ( data )
|
if ( data )
|
||||||
d->trackHypParams( sm, data->_srcHyp );
|
d->trackHypParams( sm, data->_srcHyp );
|
||||||
@ -352,7 +399,7 @@ namespace // INTERNAL STUFF
|
|||||||
/*!
|
/*!
|
||||||
* \brief Remove imported mesh and/or groups
|
* \brief Remove imported mesh and/or groups
|
||||||
*/
|
*/
|
||||||
virtual void ProcessEvent(const int event,
|
void _Listener::ProcessEvent(const int event,
|
||||||
const int eventType,
|
const int eventType,
|
||||||
SMESH_subMesh* subMesh,
|
SMESH_subMesh* subMesh,
|
||||||
SMESH_subMeshEventListenerData* data,
|
SMESH_subMeshEventListenerData* data,
|
||||||
@ -360,29 +407,73 @@ namespace // INTERNAL STUFF
|
|||||||
{
|
{
|
||||||
if ( data && data->myType == WAIT_HYP_MODIF )
|
if ( data && data->myType == WAIT_HYP_MODIF )
|
||||||
{
|
{
|
||||||
|
// event of Import submesh
|
||||||
if ( SMESH_subMesh::MODIF_HYP == event &&
|
if ( SMESH_subMesh::MODIF_HYP == event &&
|
||||||
SMESH_subMesh::ALGO_EVENT == eventType )
|
SMESH_subMesh::ALGO_EVENT == eventType )
|
||||||
{
|
{
|
||||||
|
// re-call SetEventListener() to take into account valid parameters
|
||||||
|
// of ImportSource hypothesis
|
||||||
SMESH_Gen* gen = subMesh->GetFather()->GetGen();
|
SMESH_Gen* gen = subMesh->GetFather()->GetGen();
|
||||||
if ( SMESH_Algo* algo = gen->GetAlgo(*subMesh->GetFather(), subMesh->GetSubShape()))
|
if ( SMESH_Algo* algo = gen->GetAlgo(*subMesh->GetFather(), subMesh->GetSubShape()))
|
||||||
algo->SetEventListener( subMesh );
|
algo->SetEventListener( subMesh );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if ( data && data->myType == LISTEN_SRC_MESH )
|
||||||
|
{
|
||||||
|
// event of source mesh
|
||||||
|
if ( SMESH_subMesh::COMPUTE_EVENT == eventType )
|
||||||
|
{
|
||||||
|
switch ( event ) {
|
||||||
|
case SMESH_subMesh::CLEAN:
|
||||||
|
// source mesh cleaned -> clean target mesh
|
||||||
|
clearSubmesh( data->mySubMeshes.front(), (_ListenerData*) data, /*all=*/true );
|
||||||
|
break;
|
||||||
|
case SMESH_subMesh::SUBMESH_COMPUTED: {
|
||||||
|
// source mesh computed -> reset FAILED state of Import submeshes to
|
||||||
|
// READY_TO_COMPUTE
|
||||||
|
SMESH_Mesh* srcMesh = subMesh->GetFather();
|
||||||
|
if ( srcMesh->NbEdges() > 0 || srcMesh->NbFaces() > 0 )
|
||||||
|
{
|
||||||
|
SMESH_Mesh* m = data->mySubMeshes.front()->GetFather();
|
||||||
|
if ( SMESH_subMesh* sm1 = m->GetSubMeshContaining(1))
|
||||||
|
{
|
||||||
|
sm1->ComputeStateEngine(SMESH_subMesh::SUBMESH_COMPUTED );
|
||||||
|
sm1->ComputeSubMeshStateEngine( SMESH_subMesh::SUBMESH_COMPUTED );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // event of Import submesh
|
||||||
|
{
|
||||||
|
// find out what happens: import hyp modified or removed
|
||||||
|
bool removeImport = false, modifHyp = false;
|
||||||
|
if ( SMESH_subMesh::ALGO_EVENT == eventType )
|
||||||
|
modifHyp = true;
|
||||||
|
if ( subMesh->GetAlgoState() != SMESH_subMesh::HYP_OK )
|
||||||
|
{
|
||||||
|
removeImport = true;
|
||||||
|
}
|
||||||
|
else if ( SMESH_subMesh::REMOVE_ALGO == event ||
|
||||||
|
SMESH_subMesh::REMOVE_FATHER_ALGO == event )
|
||||||
{
|
{
|
||||||
SMESH_Gen* gen = subMesh->GetFather()->GetGen();
|
SMESH_Gen* gen = subMesh->GetFather()->GetGen();
|
||||||
SMESH_Algo* algo = gen->GetAlgo(*subMesh->GetFather(),subMesh->GetSubShape() );
|
SMESH_Algo* algo = gen->GetAlgo(*subMesh->GetFather(),subMesh->GetSubShape() );
|
||||||
|
removeImport = ( strncmp( "Import", algo->GetName(), 6 ) != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
if ( subMesh->GetAlgoState() != SMESH_subMesh::HYP_OK ||
|
if ( removeImport )
|
||||||
strncmp( "Import", algo->GetName(), 6 ) != 0 )
|
|
||||||
{
|
{
|
||||||
// treate removal of Import algo from subMesh
|
// treate removal of Import algo from subMesh
|
||||||
removeSubmesh( subMesh, (_ListenerData*) data );
|
removeSubmesh( subMesh, (_ListenerData*) data );
|
||||||
}
|
}
|
||||||
else if ( subMesh->IsEmpty() )
|
else if ( modifHyp )
|
||||||
{
|
{
|
||||||
// treate modification of ImportSource hypothesis
|
// treate modification of ImportSource hypothesis
|
||||||
clearSubmesh( subMesh, (_ListenerData*) data );
|
clearSubmesh( subMesh, (_ListenerData*) data, /*all=*/false );
|
||||||
}
|
}
|
||||||
else if ( SMESH_subMesh::CHECK_COMPUTE_STATE == event &&
|
else if ( SMESH_subMesh::CHECK_COMPUTE_STATE == event &&
|
||||||
SMESH_subMesh::COMPUTE_EVENT == eventType )
|
SMESH_subMesh::COMPUTE_EVENT == eventType )
|
||||||
@ -403,7 +494,6 @@ namespace // INTERNAL STUFF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}; // class _Listener
|
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
@ -495,7 +585,7 @@ namespace // INTERNAL STUFF
|
|||||||
_ImportData* iData = _Listener::getImportData(srcMesh,tgtMesh);
|
_ImportData* iData = _Listener::getImportData(srcMesh,tgtMesh);
|
||||||
|
|
||||||
SMESH_subMesh* importedSM = tgtMesh->GetSubMesh( tgtShape );
|
SMESH_subMesh* importedSM = tgtMesh->GetSubMesh( tgtShape );
|
||||||
iData->_computedSubM.insert( importedSM );
|
iData->addComputed( importedSM );
|
||||||
if ( iData->_computedSubM.size() != iData->_subM.size() )
|
if ( iData->_computedSubM.size() != iData->_subM.size() )
|
||||||
return 0; // not all submeshes computed yet
|
return 0; // not all submeshes computed yet
|
||||||
|
|
||||||
|
@ -153,8 +153,8 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
|||||||
const bool toCheckOri = (helper.NbAncestors( geomFace, theMesh, TopAbs_SOLID ) == 1 );
|
const bool toCheckOri = (helper.NbAncestors( geomFace, theMesh, TopAbs_SOLID ) == 1 );
|
||||||
|
|
||||||
Handle(Geom_Surface) surface = BRep_Tool::Surface( geomFace );
|
Handle(Geom_Surface) surface = BRep_Tool::Surface( geomFace );
|
||||||
if ( helper.GetSubShapeOri( tgtMesh->ShapeToMesh(), geomFace) == TopAbs_REVERSED )
|
const bool reverse =
|
||||||
surface->UReverse();
|
( helper.GetSubShapeOri( tgtMesh->ShapeToMesh(), geomFace) == TopAbs_REVERSED );
|
||||||
gp_Pnt p; gp_Vec du, dv;
|
gp_Pnt p; gp_Vec du, dv;
|
||||||
|
|
||||||
set<int> subShapeIDs;
|
set<int> subShapeIDs;
|
||||||
@ -262,7 +262,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
|||||||
{
|
{
|
||||||
uv = helper.GetNodeUV( geomFace, newNodes[++iNode] );
|
uv = helper.GetNodeUV( geomFace, newNodes[++iNode] );
|
||||||
surface->D1( uv.X(),uv.Y(), p, du,dv );
|
surface->D1( uv.X(),uv.Y(), p, du,dv );
|
||||||
geomNorm = du ^ dv;
|
geomNorm = reverse ? dv^du : du^dv;
|
||||||
}
|
}
|
||||||
while ( geomNorm.SquareMagnitude() < 1e-6 && iNode+1 < face->NbCornerNodes());
|
while ( geomNorm.SquareMagnitude() < 1e-6 && iNode+1 < face->NbCornerNodes());
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
|||||||
int nbFaces = link2Nb->second;
|
int nbFaces = link2Nb->second;
|
||||||
if ( nbFaces == 1 )
|
if ( nbFaces == 1 )
|
||||||
{
|
{
|
||||||
// check if the link lie on face boundary
|
// check if a not shared link lie on face boundary
|
||||||
bool nodesOnBoundary = true;
|
bool nodesOnBoundary = true;
|
||||||
list< TopoDS_Shape > bndShapes;
|
list< TopoDS_Shape > bndShapes;
|
||||||
for ( int is1stN = 0; is1stN < 2 && nodesOnBoundary; ++is1stN )
|
for ( int is1stN = 0; is1stN < 2 && nodesOnBoundary; ++is1stN )
|
||||||
@ -356,6 +356,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
|||||||
if ( Abs(u-f) < 2 * faceTol || Abs(u-l) < 2 * faceTol )
|
if ( Abs(u-f) < 2 * faceTol || Abs(u-l) < 2 * faceTol )
|
||||||
// duplicated node on vertex
|
// duplicated node on vertex
|
||||||
return error("Source elements overlap one another");
|
return error("Source elements overlap one another");
|
||||||
|
tgtSM->RemoveNode( n, /*isNodeDeleted=*/false );
|
||||||
tgtMesh->SetNodeOnEdge( (SMDS_MeshNode*)n, edges[iE], u );
|
tgtMesh->SetNodeOnEdge( (SMDS_MeshNode*)n, edges[iE], u );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -371,10 +372,10 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( !nodesOnBoundary )
|
if ( !nodesOnBoundary )
|
||||||
break; // free internal link
|
break; // error: free internal link
|
||||||
if ( bndShapes.front().ShapeType() == TopAbs_EDGE &&
|
if ( bndShapes.front().ShapeType() == TopAbs_EDGE &&
|
||||||
bndShapes.front() != bndShapes.back() )
|
bndShapes.front() != bndShapes.back() )
|
||||||
break; // link nodes on different geom edges
|
break; // error: link nodes on different geom edges
|
||||||
|
|
||||||
// find geom edge the link is on
|
// find geom edge the link is on
|
||||||
if ( bndShapes.back().ShapeType() != TopAbs_EDGE )
|
if ( bndShapes.back().ShapeType() != TopAbs_EDGE )
|
||||||
@ -389,7 +390,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
|||||||
geomEdge.Nullify();
|
geomEdge.Nullify();
|
||||||
}
|
}
|
||||||
if ( geomEdge.IsNull() )
|
if ( geomEdge.IsNull() )
|
||||||
break; // vertices belong to different edges -> free internal link
|
break; // vertices belong to different edges -> error: free internal link
|
||||||
bndShapes.push_back( geomEdge );
|
bndShapes.push_back( geomEdge );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -407,15 +408,13 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
|
|||||||
|
|
||||||
TopoDS_Edge geomEdge = TopoDS::Edge(bndShapes.back());
|
TopoDS_Edge geomEdge = TopoDS::Edge(bndShapes.back());
|
||||||
helper.CheckNodeU( geomEdge, link._medium, u, 10*faceTol, /*force=*/true );
|
helper.CheckNodeU( geomEdge, link._medium, u, 10*faceTol, /*force=*/true );
|
||||||
|
tgtSM->RemoveNode( link._medium, /*isNodeDeleted=*/false );
|
||||||
tgtMesh->SetNodeOnEdge( (SMDS_MeshNode*)link._medium, geomEdge, u );
|
tgtMesh->SetNodeOnEdge( (SMDS_MeshNode*)link._medium, geomEdge, u );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
edge = tgtMesh->AddEdge( newNodes[0], newNodes[1]);
|
edge = tgtMesh->AddEdge( newNodes[0], newNodes[1]);
|
||||||
}
|
}
|
||||||
// remove nodes from submesh of theShape
|
|
||||||
for ( unsigned i = 0; i < newNodes.size(); ++i )
|
|
||||||
tgtSM->RemoveNode( newNodes[i], /*isNodeDeleted=*/false );
|
|
||||||
if ( !edge )
|
if ( !edge )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1082,6 +1082,7 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the
|
|||||||
TopTools_IndexedMapOfShape vMap1, vMap2;
|
TopTools_IndexedMapOfShape vMap1, vMap2;
|
||||||
TopExp::MapShapes( theShape1, TopAbs_VERTEX, vMap1 );
|
TopExp::MapShapes( theShape1, TopAbs_VERTEX, vMap1 );
|
||||||
TopExp::MapShapes( theShape2, TopAbs_VERTEX, vMap2 );
|
TopExp::MapShapes( theShape2, TopAbs_VERTEX, vMap2 );
|
||||||
|
TopoDS_Vertex VV1[2], VV2[2];
|
||||||
|
|
||||||
if ( vMap1.Extent() != vMap2.Extent() )
|
if ( vMap1.Extent() != vMap2.Extent() )
|
||||||
RETURN_BAD_RESULT("Different nb of vertices");
|
RETURN_BAD_RESULT("Different nb of vertices");
|
||||||
@ -1095,6 +1096,32 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the
|
|||||||
return FindSubShapeAssociation( theShape1, theMesh1, theShape2, theMesh2, theMap);
|
return FindSubShapeAssociation( theShape1, theMesh1, theShape2, theMesh2, theMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try to associate by common vertices of an edge
|
||||||
|
for ( int i = 1; i <= vMap1.Extent(); ++i )
|
||||||
|
{
|
||||||
|
const TopoDS_Shape& v1 = vMap1(i);
|
||||||
|
if ( vMap2.Contains( v1 ))
|
||||||
|
{
|
||||||
|
// find an egde 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 )
|
||||||
|
{
|
||||||
|
TopoDS_Edge edge = TopoDS::Edge( edgeIt->next()->Oriented(TopAbs_FORWARD));
|
||||||
|
TopExp::Vertices(edge, VV1[0], VV1[1]);
|
||||||
|
if ( !VV1[0].IsSame( VV1[1] ))
|
||||||
|
edgeFound = ( vMap2.Contains( VV1[ v1.IsSame(VV1[0]) ? 1:0]));
|
||||||
|
}
|
||||||
|
if ( edgeFound )
|
||||||
|
{
|
||||||
|
InsertAssociation( VV1[0], VV1[0], theMap, bidirect );
|
||||||
|
InsertAssociation( VV1[1], VV1[1], theMap, bidirect );
|
||||||
|
if (FindSubShapeAssociation( theShape1, theMesh1, theShape2, theMesh2, theMap ))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Find transformation to make the shapes be of similar size at same location
|
// Find transformation to make the shapes be of similar size at same location
|
||||||
|
|
||||||
Bnd_Box box[2];
|
Bnd_Box box[2];
|
||||||
@ -1116,7 +1143,6 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the
|
|||||||
|
|
||||||
// Find 2 closest vertices
|
// Find 2 closest vertices
|
||||||
|
|
||||||
TopoDS_Vertex VV1[2], VV2[2];
|
|
||||||
// get 2 linked vertices of shape 1 not belonging to an inner wire of a face
|
// get 2 linked vertices of shape 1 not belonging to an inner wire of a face
|
||||||
TopoDS_Shape edge = theShape1;
|
TopoDS_Shape edge = theShape1;
|
||||||
TopExp_Explorer expF( theShape1, TopAbs_FACE ), expE;
|
TopExp_Explorer expF( theShape1, TopAbs_FACE ), expE;
|
||||||
|
@ -82,10 +82,10 @@ namespace
|
|||||||
SMESH_MeshEditor::TNodeXYZ Pj( Nrem );
|
SMESH_MeshEditor::TNodeXYZ Pj( Nrem );
|
||||||
|
|
||||||
// an apex node to make common to all merged pyramids
|
// an apex node to make common to all merged pyramids
|
||||||
|
if (PrmI->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
SMDS_MeshNode* CommonNode = const_cast<SMDS_MeshNode*>(PrmI->GetNode(4));
|
SMDS_MeshNode* CommonNode = const_cast<SMDS_MeshNode*>(PrmI->GetNode(4));
|
||||||
if ( CommonNode == Nrem ) return; // already merged
|
if ( CommonNode == Nrem ) return; // already merged
|
||||||
int nbI = CommonNode->NbInverseElements( SMDSAbs_Volume );
|
int nbI = CommonNode->NbInverseElements( SMDSAbs_Volume );
|
||||||
//cerr << __LINE__ << " " << nbI << " " << nbJ << endl;
|
|
||||||
SMESH_MeshEditor::TNodeXYZ Pi( CommonNode );
|
SMESH_MeshEditor::TNodeXYZ Pi( CommonNode );
|
||||||
gp_XYZ Pnew = ( nbI*Pi + nbJ*Pj ) / (nbI+nbJ);
|
gp_XYZ Pnew = ( nbI*Pi + nbJ*Pj ) / (nbI+nbJ);
|
||||||
CommonNode->setXYZ( Pnew.X(), Pnew.Y(), Pnew.Z() );
|
CommonNode->setXYZ( Pnew.X(), Pnew.Y(), Pnew.Z() );
|
||||||
@ -116,7 +116,6 @@ namespace
|
|||||||
}
|
}
|
||||||
|
|
||||||
// set the common apex node to pyramids and triangles merged with J
|
// set the common apex node to pyramids and triangles merged with J
|
||||||
//cerr << __LINE__ << " NbInverseElements " << Nrem->NbInverseElements() << endl;
|
|
||||||
SMDS_ElemIteratorPtr itJ = Nrem->GetInverseElementIterator();
|
SMDS_ElemIteratorPtr itJ = Nrem->GetInverseElementIterator();
|
||||||
while ( itJ->more() )
|
while ( itJ->more() )
|
||||||
{
|
{
|
||||||
@ -124,22 +123,15 @@ namespace
|
|||||||
if ( elem->GetType() == SMDSAbs_Volume ) // pyramid
|
if ( elem->GetType() == SMDSAbs_Volume ) // pyramid
|
||||||
{
|
{
|
||||||
vector< const SMDS_MeshNode* > nodes( elem->begin_nodes(), elem->end_nodes() );
|
vector< const SMDS_MeshNode* > nodes( elem->begin_nodes(), elem->end_nodes() );
|
||||||
//cerr << __LINE__ << " volId " << elem->GetID() << " nbNodes " << nodes.size() << endl;
|
|
||||||
nodes[4] = CommonNode;
|
nodes[4] = CommonNode;
|
||||||
MESSAGE("ChangeElementNodes");
|
MESSAGE("ChangeElementNodes");
|
||||||
meshDS->ChangeElementNodes( elem, &nodes[0], nodes.size());
|
meshDS->ChangeElementNodes( elem, &nodes[0], nodes.size());
|
||||||
}
|
}
|
||||||
else if ( tempTrias.count(elem) ) // tmp triangles
|
else if ( tempTrias.count(elem) ) // tmp triangles
|
||||||
{
|
{
|
||||||
//cerr << __LINE__ << " triaId " << elem->GetID() << endl;
|
|
||||||
((SMDS_VtkFace*) elem )->ChangeApex( CommonNode );
|
((SMDS_VtkFace*) elem )->ChangeApex( CommonNode );
|
||||||
}
|
}
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// cerr << __LINE__ << " other " << elem->GetVtkType() << endl;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
//cerr << __LINE__ << " NbInverseElements " << Nrem->NbInverseElements() << endl;
|
|
||||||
ASSERT( Nrem->NbInverseElements() == 0 );
|
ASSERT( Nrem->NbInverseElements() == 0 );
|
||||||
meshDS->RemoveFreeNode( Nrem,
|
meshDS->RemoveFreeNode( Nrem,
|
||||||
meshDS->MeshElements( Nrem->getshapeId()),
|
meshDS->MeshElements( Nrem->getshapeId()),
|
||||||
@ -157,6 +149,8 @@ namespace
|
|||||||
const SMDS_MeshElement* PrmJ,
|
const SMDS_MeshElement* PrmJ,
|
||||||
const bool hasShape)
|
const bool hasShape)
|
||||||
{
|
{
|
||||||
|
if (PrmI->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
|
if (PrmJ->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
const SMDS_MeshNode* nApexI = PrmI->GetNode(4);
|
const SMDS_MeshNode* nApexI = PrmI->GetNode(4);
|
||||||
const SMDS_MeshNode* nApexJ = PrmJ->GetNode(4);
|
const SMDS_MeshNode* nApexJ = PrmJ->GetNode(4);
|
||||||
if ( nApexI == nApexJ ||
|
if ( nApexI == nApexJ ||
|
||||||
@ -264,6 +258,7 @@ namespace
|
|||||||
TRemTrias & tempTrias,
|
TRemTrias & tempTrias,
|
||||||
set<const SMDS_MeshNode*>& nodesToMove)
|
set<const SMDS_MeshNode*>& nodesToMove)
|
||||||
{
|
{
|
||||||
|
if (PrmI->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
TIDSortedElemSet adjacentPyrams, mergedPyrams;
|
TIDSortedElemSet adjacentPyrams, mergedPyrams;
|
||||||
for(int k=0; k<4; k++) // loop on 4 base nodes of PrmI
|
for(int k=0; k<4; k++) // loop on 4 base nodes of PrmI
|
||||||
{
|
{
|
||||||
@ -302,6 +297,8 @@ namespace
|
|||||||
StdMeshers_QuadToTriaAdaptor::StdMeshers_QuadToTriaAdaptor():
|
StdMeshers_QuadToTriaAdaptor::StdMeshers_QuadToTriaAdaptor():
|
||||||
myElemSearcher(0), myNbTriangles(0)
|
myElemSearcher(0), myNbTriangles(0)
|
||||||
{
|
{
|
||||||
|
myResMap.clear();
|
||||||
|
myTempTriangles.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -1003,6 +1000,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh& aMesh)
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
|
SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
|
||||||
|
if (myPyramids[0]->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
int i, j, k, myShapeID = myPyramids[0]->GetNode(4)->getshapeId();
|
int i, j, k, myShapeID = myPyramids[0]->GetNode(4)->getshapeId();
|
||||||
|
|
||||||
if ( !myElemSearcher )
|
if ( !myElemSearcher )
|
||||||
@ -1016,6 +1014,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh& aMesh)
|
|||||||
for ( i = 0; i < myPyramids.size(); ++i )
|
for ( i = 0; i < myPyramids.size(); ++i )
|
||||||
{
|
{
|
||||||
const SMDS_MeshElement* PrmI = myPyramids[i];
|
const SMDS_MeshElement* PrmI = myPyramids[i];
|
||||||
|
if (PrmI->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
MergeAdjacent( PrmI, aMesh, myTempTriangles, nodesToMove );
|
MergeAdjacent( PrmI, aMesh, myTempTriangles, nodesToMove );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1023,6 +1022,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh& aMesh)
|
|||||||
for ( i = 0; i < myPyramids.size(); ++i )
|
for ( i = 0; i < myPyramids.size(); ++i )
|
||||||
{
|
{
|
||||||
const SMDS_MeshElement* PrmI = myPyramids[i];
|
const SMDS_MeshElement* PrmI = myPyramids[i];
|
||||||
|
if (PrmI->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
|
|
||||||
// compare PrmI with all the rest pyramids
|
// compare PrmI with all the rest pyramids
|
||||||
|
|
||||||
@ -1051,6 +1051,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh& aMesh)
|
|||||||
for ( j = 0; j < suspectPyrams.size(); ++j )
|
for ( j = 0; j < suspectPyrams.size(); ++j )
|
||||||
{
|
{
|
||||||
const SMDS_MeshElement* PrmJ = suspectPyrams[j];
|
const SMDS_MeshElement* PrmJ = suspectPyrams[j];
|
||||||
|
//if (PrmJ->GetVtkType() != VTK_PYRAMID) throw SALOME_Exception(LOCALIZED("not a pyramid"));
|
||||||
if ( PrmJ == PrmI || PrmJ->NbCornerNodes() != 5 )
|
if ( PrmJ == PrmI || PrmJ->NbCornerNodes() != 5 )
|
||||||
continue;
|
continue;
|
||||||
if ( myShapeID != PrmJ->GetNode(4)->getshapeId())
|
if ( myShapeID != PrmJ->GetNode(4)->getshapeId())
|
||||||
@ -1135,12 +1136,12 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh& aMesh)
|
|||||||
|
|
||||||
} // loop on all pyramids
|
} // loop on all pyramids
|
||||||
|
|
||||||
if( !nodesToMove.empty() && !meshDS->IsEmbeddedMode() )
|
// if( !nodesToMove.empty() && !meshDS->IsEmbeddedMode() )
|
||||||
{
|
// {
|
||||||
set<const SMDS_MeshNode*>::iterator n = nodesToMove.begin();
|
// set<const SMDS_MeshNode*>::iterator n = nodesToMove.begin();
|
||||||
for ( ; n != nodesToMove.end(); ++n )
|
// for ( ; n != nodesToMove.end(); ++n )
|
||||||
meshDS->MoveNode( *n, (*n)->X(), (*n)->Y(), (*n)->Z() );
|
// meshDS->MoveNode( *n, (*n)->X(), (*n)->Y(), (*n)->Z() );
|
||||||
}
|
// }
|
||||||
|
|
||||||
// rebind triangles of pyramids sharing the same base quadrangle to the first
|
// rebind triangles of pyramids sharing the same base quadrangle to the first
|
||||||
// entrance of the base quadrangle
|
// entrance of the base quadrangle
|
||||||
@ -1148,31 +1149,30 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh& aMesh)
|
|||||||
for ( ++q2t; q2t != myResMap.end(); ++q2t, ++q2tPrev )
|
for ( ++q2t; q2t != myResMap.end(); ++q2t, ++q2tPrev )
|
||||||
{
|
{
|
||||||
if ( q2t->first == q2tPrev->first )
|
if ( q2t->first == q2tPrev->first )
|
||||||
{
|
|
||||||
//cerr << __LINE__ << " splice" << endl;
|
|
||||||
q2tPrev->second.splice( q2tPrev->second.end(), q2t->second );
|
q2tPrev->second.splice( q2tPrev->second.end(), q2t->second );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// delete removed triangles and count resulting nb of triangles
|
// delete removed triangles and count resulting nb of triangles
|
||||||
for (q2t = myResMap.begin(); q2t != myResMap.end(); ++q2t)
|
for (q2t = myResMap.begin(); q2t != myResMap.end(); ++q2t)
|
||||||
{
|
{
|
||||||
TTriaList & trias = q2t->second;
|
TTriaList & trias = q2t->second;
|
||||||
vector<const SMDS_MeshFace*> faceToErase;
|
set<const SMDS_MeshFace*> faceToErase;
|
||||||
faceToErase.clear();
|
faceToErase.clear();
|
||||||
//cerr << __LINE__ << " " << trias.size() << endl;
|
|
||||||
for (TTriaList::iterator tri = trias.begin(); tri != trias.end(); ++tri)
|
for (TTriaList::iterator tri = trias.begin(); tri != trias.end(); ++tri)
|
||||||
{
|
{
|
||||||
//cerr << " " << __LINE__ << endl;
|
|
||||||
const SMDS_MeshFace* face = *tri;
|
const SMDS_MeshFace* face = *tri;
|
||||||
if (myTempTriangles.count(face) && (myTempTriangles[face] == false))
|
if (myTempTriangles.count(face) && (myTempTriangles[face] == false))
|
||||||
faceToErase.push_back(face);
|
faceToErase.insert(face);
|
||||||
else
|
else
|
||||||
myNbTriangles++;
|
myNbTriangles++;
|
||||||
}
|
}
|
||||||
for (vector<const SMDS_MeshFace*>::iterator it = faceToErase.begin(); it != faceToErase.end(); ++it)
|
for (set<const SMDS_MeshFace*>::iterator it = faceToErase.begin(); it != faceToErase.end(); ++it)
|
||||||
{
|
{
|
||||||
const SMDS_MeshFace *face = dynamic_cast<const SMDS_MeshFace*>(*it);
|
const SMDS_MeshFace *face = dynamic_cast<const SMDS_MeshFace*>(*it);
|
||||||
if (face) trias.remove(face);
|
if (face)
|
||||||
|
{
|
||||||
|
trias.remove(face);
|
||||||
|
myTempTriangles.erase(face);
|
||||||
|
}
|
||||||
meshDS->RemoveFreeElement(face, 0, false);
|
meshDS->RemoveFreeElement(face, 0, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|