Merge branch 'master' into pra/blocFissure
@ -29,10 +29,10 @@ STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
|
|||||||
|
|
||||||
SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7)
|
SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7)
|
||||||
SET(${PROJECT_NAME_UC}_MINOR_VERSION 4)
|
SET(${PROJECT_NAME_UC}_MINOR_VERSION 4)
|
||||||
SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
|
SET(${PROJECT_NAME_UC}_PATCH_VERSION 1)
|
||||||
SET(${PROJECT_NAME_UC}_VERSION
|
SET(${PROJECT_NAME_UC}_VERSION
|
||||||
${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
|
${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
|
||||||
SET(${PROJECT_NAME_UC}_VERSION_DEV 0)
|
SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
|
||||||
|
|
||||||
# Find KERNEL
|
# Find KERNEL
|
||||||
# ===========
|
# ===========
|
||||||
@ -162,7 +162,7 @@ ENDIF(EXISTS ${GEOM_ROOT_DIR})
|
|||||||
##
|
##
|
||||||
|
|
||||||
# VTK is obligatiry for the SMESH
|
# VTK is obligatiry for the SMESH
|
||||||
FIND_PACKAGE(SalomeVTK 6.1 REQUIRED)
|
FIND_PACKAGE(SalomeVTK REQUIRED)
|
||||||
|
|
||||||
FIND_PACKAGE(SalomeCAS REQUIRED)
|
FIND_PACKAGE(SalomeCAS REQUIRED)
|
||||||
|
|
||||||
|
@ -17,8 +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
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# examples that cant be used for testing because they use external mesher plug-ins
|
||||||
SET(BAD_TESTS
|
SET(BAD_TESTS
|
||||||
3dmesh.py
|
3dmesh.py
|
||||||
|
a3DmeshOnModified2Dmesh.py
|
||||||
creating_meshes_ex01.py
|
creating_meshes_ex01.py
|
||||||
creating_meshes_ex03.py
|
creating_meshes_ex03.py
|
||||||
creating_meshes_ex05.py
|
creating_meshes_ex05.py
|
||||||
@ -40,7 +42,7 @@ SET(BAD_TESTS
|
|||||||
quality_controls_ex21.py
|
quality_controls_ex21.py
|
||||||
quality_controls_ex22.py
|
quality_controls_ex22.py
|
||||||
viewing_meshes_ex01.py
|
viewing_meshes_ex01.py
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(GOOD_TESTS
|
SET(GOOD_TESTS
|
||||||
cartesian_algo.py
|
cartesian_algo.py
|
||||||
|
62
doc/salome/examples/a3DmeshOnModified2Dmesh.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import salome
|
||||||
|
salome.salome_init()
|
||||||
|
|
||||||
|
from salome.geom import geomBuilder
|
||||||
|
geompy = geomBuilder.New(salome.myStudy)
|
||||||
|
|
||||||
|
# This script demonstrates generation of 3D mesh basing on a modified 2D mesh
|
||||||
|
#
|
||||||
|
# Purpose is to get a tetrahedral mesh in a sphere cut by a cube.
|
||||||
|
# The requirement is to have a surface mesh on the cube comprised of
|
||||||
|
# triangles of exactly the same size arranged in a grid pattern.
|
||||||
|
#
|
||||||
|
# To fulfill this requirement we mesh the box using Quadrangle (Mapping)
|
||||||
|
# meshing algorithm, split quadrangles into triangles and then generate
|
||||||
|
# tetrahedrons.
|
||||||
|
|
||||||
|
|
||||||
|
# Make the geometry
|
||||||
|
|
||||||
|
Box_1 = geompy.MakeBox(-100,-100,-100, 100, 100, 100)
|
||||||
|
Sphere_1 = geompy.MakeSphereR( 300 )
|
||||||
|
Cut_1 = geompy.MakeCut(Sphere_1, Box_1, theName="Cut_1")
|
||||||
|
# get a spherical face
|
||||||
|
Sph_Face = geompy.ExtractShapes( Sphere_1, geompy.ShapeType["FACE"] )[0]
|
||||||
|
|
||||||
|
# get the shape Sph_Face turned into during MakeCut()
|
||||||
|
Sph_Face = geompy.GetInPlace(Cut_1, Sph_Face, isNewImplementation=True, theName="Sphere_1")
|
||||||
|
|
||||||
|
|
||||||
|
# 1) Define a mesh with 1D and 2D meshers
|
||||||
|
|
||||||
|
import SMESH
|
||||||
|
from salome.smesh import smeshBuilder
|
||||||
|
smesh = smeshBuilder.New(salome.myStudy)
|
||||||
|
|
||||||
|
Mesh_1 = smesh.Mesh(Cut_1)
|
||||||
|
|
||||||
|
# "global" meshers (assigned to Cut_1) that will be used for the box
|
||||||
|
Regular_1D = Mesh_1.Segment()
|
||||||
|
Local_Length_1 = Regular_1D.LocalLength(20)
|
||||||
|
Quadrangle_2D = Mesh_1.Quadrangle()
|
||||||
|
|
||||||
|
# a "local" mesher (assigned to a sub-mesh on Sphere_1) to mesh the sphere
|
||||||
|
algo_2D = Mesh_1.Triangle( smeshBuilder.NETGEN_1D2D, Sph_Face )
|
||||||
|
algo_2D.SetMaxSize( 70. )
|
||||||
|
algo_2D.SetFineness( smeshBuilder.Moderate )
|
||||||
|
algo_2D.SetMinSize( 7. )
|
||||||
|
|
||||||
|
# 2) Compute 2D mesh
|
||||||
|
isDone = Mesh_1.Compute()
|
||||||
|
|
||||||
|
# 3) Split quadrangles into triangles
|
||||||
|
isDone = Mesh_1.SplitQuadObject( Mesh_1, Diag13=True )
|
||||||
|
|
||||||
|
# 4) Define a 3D mesher
|
||||||
|
Mesh_1.Tetrahedron()
|
||||||
|
|
||||||
|
# 5) Compute 3D mesh
|
||||||
|
Mesh_1.Compute()
|
||||||
|
|
||||||
|
if salome.sg.hasDesktop():
|
||||||
|
salome.sg.updateObjBrowser(1)
|
@ -32,8 +32,8 @@ newMesh = smesh.CopyMesh( mesh, "whole mesh copy")
|
|||||||
# 2. copy a group of 2D elements along with groups
|
# 2. copy a group of 2D elements along with groups
|
||||||
newMesh = smesh.CopyMesh( fGroup, "face group copy with groups",toCopyGroups=True)
|
newMesh = smesh.CopyMesh( fGroup, "face group copy with groups",toCopyGroups=True)
|
||||||
|
|
||||||
# 3. copy a group of nodes with preseving their ids
|
# 3. copy a group of nodes
|
||||||
newMesh = smesh.CopyMesh( nGroup, "node group copy", toKeepIDs=True)
|
newMesh = smesh.CopyMesh( nGroup, "node group copy")
|
||||||
|
|
||||||
# 4. copy some faces
|
# 4. copy some faces
|
||||||
faceIds = fGroup.GetIDs()[-10:]
|
faceIds = fGroup.GetIDs()[-10:]
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
# Use 3D extrusion meshing algorithm
|
# Use 3D extrusion meshing algorithm
|
||||||
|
|
||||||
import salome, smesh, SMESH, geompy
|
import salome
|
||||||
|
|
||||||
salome.salome_init()
|
salome.salome_init()
|
||||||
smesh.SetCurrentStudy( salome.myStudy )
|
|
||||||
|
from salome.geom import geomBuilder
|
||||||
|
geompy = geomBuilder.New(salome.myStudy)
|
||||||
|
|
||||||
|
import SMESH
|
||||||
|
from salome.smesh import smeshBuilder
|
||||||
|
smesh = smeshBuilder.New(salome.myStudy)
|
||||||
|
|
||||||
OX = geompy.MakeVectorDXDYDZ(1,0,0)
|
OX = geompy.MakeVectorDXDYDZ(1,0,0)
|
||||||
OY = geompy.MakeVectorDXDYDZ(0,1,0)
|
OY = geompy.MakeVectorDXDYDZ(0,1,0)
|
||||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 23 KiB |
BIN
doc/salome/gui/SMESH/images/display_entity_choose_item.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
doc/salome/gui/SMESH/images/display_entity_dlg.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
doc/salome/gui/SMESH/images/extrusionalongaline1.png
Executable file → Normal file
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 39 KiB |
BIN
doc/salome/gui/SMESH/images/extrusionalongaline2.png
Executable file → Normal file
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 35 KiB |
@ -257,15 +257,14 @@ hypothesis operation.
|
|||||||
\anchor automatic_length_anchor
|
\anchor automatic_length_anchor
|
||||||
<h2>Automatic Length</h2>
|
<h2>Automatic Length</h2>
|
||||||
|
|
||||||
This hypothesis is automatically applied when you select <b>Assign a
|
|
||||||
set of hypotheses</b> option in Create Mesh menu.
|
|
||||||
|
|
||||||
\image html automaticlength.png
|
|
||||||
|
|
||||||
The dialog box prompts you to define the quality of the future mesh by
|
The dialog box prompts you to define the quality of the future mesh by
|
||||||
only one parameter, which is \b Fineness, ranging from 0 (coarse mesh,
|
only one parameter, which is \b Fineness, ranging from 0 (coarse mesh,
|
||||||
low number of elements) to 1 (extremely fine mesh, great number of
|
low number of elements) to 1 (extremely fine mesh, great number of
|
||||||
elements). Compare one and the same object (sphere) meshed with
|
elements).
|
||||||
|
|
||||||
|
\image html automaticlength.png
|
||||||
|
|
||||||
|
Compare one and the same object (sphere) meshed with
|
||||||
minimum and maximum value of this parameter.
|
minimum and maximum value of this parameter.
|
||||||
|
|
||||||
\image html image147.gif "Example of a very rough mesh. Automatic Length works for 0."
|
\image html image147.gif "Example of a very rough mesh. Automatic Length works for 0."
|
||||||
|
@ -113,10 +113,9 @@ of the enforced nodes.
|
|||||||
projected to the meshed face and located close enough to the
|
projected to the meshed face and located close enough to the
|
||||||
meshed face will be used to create the enforced nodes.</li>
|
meshed face will be used to create the enforced nodes.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
\note <b>Enforced nodes</b> can't be created at \b Reduced transition type.
|
||||||
|
|
||||||
Let us see how the algorithm works:
|
Let us see how the algorithm works:
|
||||||
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li> Initially positions of nodes are computed without taking into
|
<li> Initially positions of nodes are computed without taking into
|
||||||
account the enforced vertex (yellow point).</li>
|
account the enforced vertex (yellow point).</li>
|
||||||
|
@ -7,10 +7,12 @@ a set of entities with a simple topology.
|
|||||||
|
|
||||||
It is possible to \subpage constructing_meshes_page "construct meshes"
|
It is possible to \subpage constructing_meshes_page "construct meshes"
|
||||||
on the basis of geometrical shapes produced in the GEOM module.
|
on the basis of geometrical shapes produced in the GEOM module.
|
||||||
It is also possible to
|
Construction of \subpage constructing_submeshes_page "sub-meshes"
|
||||||
\subpage constructing_submeshes_page "construct mesh on a part of the geometrical object",
|
allows to mesh parts of the geometrical object, for example a face,
|
||||||
for example, a face, with different meshing parameters or using
|
with different meshing parameters or using another meshing algorithm
|
||||||
another meshing algorithm.
|
than other parts.
|
||||||
|
|
||||||
|
3D mesh can be generated basing on a 2D closed mesh.
|
||||||
|
|
||||||
Several created meshes can be \subpage building_compounds_page "combined into another mesh".
|
Several created meshes can be \subpage building_compounds_page "combined into another mesh".
|
||||||
|
|
||||||
@ -62,44 +64,4 @@ described in the following way:
|
|||||||
coordinates of the corresponding vertex.</li>
|
coordinates of the corresponding vertex.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<br><h2>Connections</h2>
|
|
||||||
|
|
||||||
Each mesh entity bounds 0 or more mesh entities of higher
|
|
||||||
dimension. In the same way each mesh entity is bounded by 0 or more
|
|
||||||
mesh entities of lower dimension:
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>A node bounds edges, faces and volumes</li>
|
|
||||||
<li>An edge bounds faces, and volumes</li>
|
|
||||||
<li>A face bounds volumes</li>
|
|
||||||
<li>A volume is bounded by faces, edges and nodes</li>
|
|
||||||
<li>A face is bounded by edges, and nodes</li>
|
|
||||||
<li>An edge is bounded by nodes</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
You can notice that there are two types of connections: \b inverse and
|
|
||||||
\b direct connections.
|
|
||||||
|
|
||||||
<br><h2>Inverse connections</h2>
|
|
||||||
|
|
||||||
This relationship has a particularity that the order of bounded
|
|
||||||
entities has not a direct meaning. Also the number of bounded entities
|
|
||||||
is not fixed.
|
|
||||||
|
|
||||||
\b Example: The edges surrounding a node. The 3rd edge has no more
|
|
||||||
sense that the 5th one.
|
|
||||||
|
|
||||||
<br><h2>Direct connections</h2>
|
|
||||||
|
|
||||||
This relationship has a particularity that the order of bounding
|
|
||||||
entities is meaningful. The number of bounding entities is fixed and
|
|
||||||
depends on the type of the entity (hexahedron, tetrahedron,?).
|
|
||||||
|
|
||||||
\b Example: An edge is composed of two nodes. A face is composed of 3
|
|
||||||
or 4 edges depending if we are dealing with triangles or quadrangles.
|
|
||||||
|
|
||||||
The connections are not only restricted to entities of one dimension
|
|
||||||
higher or lower. For example some algorithms may be interested to
|
|
||||||
retrieve all the faces surrounding a node.
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
@ -52,15 +52,15 @@ geometrical objects.
|
|||||||
|
|
||||||
There is also a number of more specific algorithms:
|
There is also a number of more specific algorithms:
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>\subpage prism_3d_algo_page "for meshing prismatic shapes"</li>
|
||||||
<li>\subpage projection_algos_page "for meshing by projection of another mesh"</li>
|
<li>\subpage projection_algos_page "for meshing by projection of another mesh"</li>
|
||||||
<li>\subpage import_algos_page "for meshing by importing elements from another mesh"</li>
|
<li>\subpage import_algos_page "for meshing by importing elements from another mesh"</li>
|
||||||
<li>\subpage radial_prism_algo_page "for meshing geometrical objects with cavities"</li>
|
<li>\subpage radial_prism_algo_page "for meshing geometrical objects with cavities"</li>
|
||||||
<li>\subpage segments_around_vertex_algo_page "for defining the local size of elements around a certain node"</li>
|
|
||||||
<li>\subpage prism_3d_algo_page "for meshing prismatic shapes"</li>
|
|
||||||
<li>\subpage radial_quadrangle_1D2D_algo_page "for meshing special 2d faces (circles and part of circles)"</li>
|
<li>\subpage radial_quadrangle_1D2D_algo_page "for meshing special 2d faces (circles and part of circles)"</li>
|
||||||
<li>\subpage use_existing_page "Use Edges to be Created Manually" and
|
<li>\subpage use_existing_page "Use Edges to be Created Manually" and
|
||||||
\ref use_existing_page "Use Faces to be Created Manually" algorithms can be
|
\ref use_existing_page "Use Faces to be Created Manually" algorithms can be
|
||||||
used to create a 1D or a 2D mesh in a python script.</li>
|
used to create a 1D or a 2D mesh in a python script.</li>
|
||||||
|
<li>\subpage segments_around_vertex_algo_page "for defining the local size of elements around a certain node"</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
\ref constructing_meshes_page "Constructing meshes" page describes in
|
\ref constructing_meshes_page "Constructing meshes" page describes in
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
<li> \ref preview_anchor "Previewing the mesh" (optional)</li>
|
<li> \ref preview_anchor "Previewing the mesh" (optional)</li>
|
||||||
<li> \ref submesh_order_anchor "Changing sub-mesh priority" (optional)</li>
|
<li> \ref submesh_order_anchor "Changing sub-mesh priority" (optional)</li>
|
||||||
<li> \ref compute_anchor "Computing the mesh"</li>
|
<li> \ref compute_anchor "Computing the mesh"</li>
|
||||||
|
<li> \ref edit_anchor "Editing the mesh" (optional)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
\anchor create_mesh_anchor
|
\anchor create_mesh_anchor
|
||||||
@ -357,8 +358,29 @@ computation reporting. There are the following possibilities: always
|
|||||||
show the information box, show only if an error occurs or never.
|
show the information box, show only if an error occurs or never.
|
||||||
By default, the information box is always shown after mesh computation operation.
|
By default, the information box is always shown after mesh computation operation.
|
||||||
|
|
||||||
<br><br>
|
<p><p>
|
||||||
|
\anchor edit_anchor
|
||||||
|
<h2>Editing the mesh</h2>
|
||||||
|
|
||||||
|
It is possible to \ref modifying_meshes_page "edit the mesh" of
|
||||||
|
lower dimension before generation of mesh of higher dimension.
|
||||||
|
|
||||||
|
For example you can generate 2D mesh, modify it using e.g.
|
||||||
|
\ref pattern_mapping_page, and then generate 3D mesh basing on the
|
||||||
|
modified 2D mesh. The workflow is following:
|
||||||
|
- Define 1D and 2D meshing algorithms.
|
||||||
|
- Compute the mesh. 2D mesh is generated.
|
||||||
|
- Apply \ref pattern_mapping_page.
|
||||||
|
- Define 3D meshing algorithms without modifying 1D and 2D algorithms
|
||||||
|
and hypotheses.
|
||||||
|
- Compute the mesh. 3D mesh is generated.
|
||||||
|
|
||||||
|
\note Nodes and elements added \ref adding_nodes_and_elements_page
|
||||||
|
"manually" can't be used in this workflow because the manually created
|
||||||
|
entities are not attached to any geometry and thus (usually) can't be
|
||||||
|
found by a mesher paving some geometry.
|
||||||
|
|
||||||
|
<b>See Also</b> a sample TUI Script demonstrates the possibility of
|
||||||
|
\ref tui_editing_while_meshing "Intermediate edition while meshing"
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
@ -2,9 +2,21 @@
|
|||||||
|
|
||||||
\page constructing_submeshes_page Constructing sub-meshes
|
\page constructing_submeshes_page Constructing sub-meshes
|
||||||
|
|
||||||
Sub-mesh is a mesh on a geometrical sub-object created with meshing algorithms
|
Sub-mesh is a mesh on a geometrical sub-object (sub-shape) used to assign
|
||||||
and/or hypotheses other than the algorithms and hypotheses assigned to
|
different meshing algorithms and/or hypotheses than the algorithms and
|
||||||
the parent mesh on the parent geometrical object.
|
hypotheses assigned to the parent mesh on the parent geometrical
|
||||||
|
object, that allows getting a local mesh refinement.
|
||||||
|
|
||||||
|
A sub-shape to create a sub-mesh on should be retrieved from the shape
|
||||||
|
of the parent mesh one of the following ways: <ul>
|
||||||
|
<li> In Geometry module, via <em>New Entity > Explode</em> menu.</li>
|
||||||
|
<li> In Geometry module, by creation of a group (<em>New Entity >
|
||||||
|
Group > Create Group</em> menu).</li>
|
||||||
|
<li> In Mesh module, by
|
||||||
|
\ref subshape_by_mesh_elem "selecting a mesh element" generated on a
|
||||||
|
sub-shape of interest. This way is accessible if the mesh is
|
||||||
|
already computed.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
If a geometrical sub-object belongs to several geometrical objects
|
If a geometrical sub-object belongs to several geometrical objects
|
||||||
having different meshes or sub-meshes, it will be meshed with the
|
having different meshes or sub-meshes, it will be meshed with the
|
||||||
@ -56,6 +68,7 @@ sub-mesh. You can select meshing algorithms and hypotheses in the same way as
|
|||||||
in \ref constructing_meshes_page "Create mesh" menu.
|
in \ref constructing_meshes_page "Create mesh" menu.
|
||||||
|
|
||||||
\par
|
\par
|
||||||
|
\anchor subshape_by_mesh_elem
|
||||||
If the parent mesh is already computed, then you can define the
|
If the parent mesh is already computed, then you can define the
|
||||||
\b Geometry by picking mesh elements computed on a sub-shape of interest
|
\b Geometry by picking mesh elements computed on a sub-shape of interest
|
||||||
in the 3D Viewer, i.e. you do not have to extract this sub-shape
|
in the 3D Viewer, i.e. you do not have to extract this sub-shape
|
||||||
@ -77,12 +90,13 @@ Browser.
|
|||||||
\image html find_geom_by_mesh_elem.png
|
\image html find_geom_by_mesh_elem.png
|
||||||
|
|
||||||
\par
|
\par
|
||||||
In this dialog, <b> Element Type </b> defines kind of element to pick in the
|
In this dialog, <b> Element Type </b> defines a kind of element to pick in the
|
||||||
Viewer.
|
Viewer.
|
||||||
Instead of picking an element in the Viewer, you can type its
|
Instead of picking an element in the Viewer, you can type its
|
||||||
ID in <b> Element ID</b> field.
|
ID in <b> Element ID</b> field.
|
||||||
<b> Geometry name </b> field allows defining a name of the sub-shape.
|
<b> Geometry name </b> field allows defining a name of the sub-shape
|
||||||
|
with which the sub-shape will appear in the Object Browser (if not yet
|
||||||
|
there).
|
||||||
|
|
||||||
\par
|
\par
|
||||||
In the Object Browser the structure of the new sub-mesh will be
|
In the Object Browser the structure of the new sub-mesh will be
|
||||||
|
@ -42,9 +42,6 @@ selection_filter_library_page "Selection filter library" page.</li>
|
|||||||
<ul>
|
<ul>
|
||||||
<li>activate <b>Generate groups</b> checkbox to copy the groups of
|
<li>activate <b>Generate groups</b> checkbox to copy the groups of
|
||||||
elements of the source mesh to the newly created mesh.</li>
|
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>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
@ -9,4 +9,13 @@ edges or combine them.
|
|||||||
|
|
||||||
\image html image58.gif Only Edges
|
\image html image58.gif Only Edges
|
||||||
|
|
||||||
|
If the mesh contains a lot of elements, select <b>Choose...</b> item,
|
||||||
|
|
||||||
|
\image html display_entity_choose_item.png Item to call 'Display Entity' dialog box
|
||||||
|
|
||||||
|
and <b>Display Entity</b> dialog box will provide a way to display only some entities at first display instead of displaying all entities long time.
|
||||||
|
|
||||||
|
\image html display_entity_dlg.png 'Display Entity' dialog allows to select entities before displaying
|
||||||
|
|
||||||
|
\note This menu item is available from popup menu in both Object browser and 3D viewer.
|
||||||
*/
|
*/
|
@ -6,12 +6,12 @@
|
|||||||
dimension than the input ones. Any node, segment or 2D element can be
|
dimension than the input ones. Any node, segment or 2D element can be
|
||||||
extruded. Each type of elements has a corresponding type of extruded elements:
|
extruded. Each type of elements has a corresponding type of extruded elements:
|
||||||
<table>
|
<table>
|
||||||
<tr><td><b>Extruded element</b></td><td><b> Result elements </b></td></tr>
|
<tr><td><b>Extruded element</b></td><td><b> Result element </b></td></tr>
|
||||||
<tr><td>Node </td><td> Segments </td></tr>
|
<tr><td>Node </td><td> Segment </td></tr>
|
||||||
<tr><td>Segment </td><td> Quadrilaterals </td></tr>
|
<tr><td>Segment </td><td> Quadrilateral </td></tr>
|
||||||
<tr><td>Triangle </td><td> Pentahedrons </td></tr>
|
<tr><td>Triangle </td><td> Pentahedron </td></tr>
|
||||||
<tr><td>Quadrilateral </td><td> Hexahedrons </td></tr>
|
<tr><td>Quadrilateral </td><td> Hexahedron </td></tr>
|
||||||
<tr><td>Polygon </td><td> Polyhedrons </td></tr>
|
<tr><td>Polygon </td><td> Polyhedron </td></tr>
|
||||||
<tr><td>Hexagonal polygon </td><td> Hexagonal prism </td></tr>
|
<tr><td>Hexagonal polygon </td><td> Hexagonal prism </td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@ -35,7 +35,8 @@ The following dialog common for line and planar elements will appear:
|
|||||||
|
|
||||||
<li>In this dialog:
|
<li>In this dialog:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Select the type of elements which will be extruded (0D, 1D or 2D).</li>
|
<li>Select the type of elements which will be extruded (nodes, 1D or
|
||||||
|
2D elements).</li>
|
||||||
<li>Specify the IDs of the elements which will be extruded by one
|
<li>Specify the IDs of the elements which will be extruded by one
|
||||||
following means:
|
following means:
|
||||||
<ul>
|
<ul>
|
||||||
@ -62,9 +63,15 @@ The following dialog common for line and planar elements will appear:
|
|||||||
<li>specify the distance of extrusion along the vector.</li>
|
<li>specify the distance of extrusion along the vector.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<li>Specify the number of steps.</li>
|
<li>Specify the number of steps.</li>
|
||||||
<li>If you activate <b>Generate Groups</b> check-box, the created
|
<li>If you activate <b>Generate Groups</b> check-box, the <em>result elements</em>
|
||||||
elements contained in groups will be included into new groups named
|
created from <em>extruded elements</em> contained in groups will be
|
||||||
by pattern "<old group name>_extruded" and "<old group name>_top".</li>
|
included into new groups named by pattern "<old group
|
||||||
|
name>_extruded" and "<old group name>_top". For example if an
|
||||||
|
extruded quadrangle is included in \a Group_1 group then result
|
||||||
|
hexahedra will be included in \a Group_1_extruded group and a
|
||||||
|
quadrangle created at the "top" of extruded mesh will
|
||||||
|
be included in \a Group_1_top group. <br>This check-box is active
|
||||||
|
only if there are some groups in the mesh.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<li>Click \b Apply or <b> Apply and Close</b> button to confirm the operation.</li>
|
<li>Click \b Apply or <b> Apply and Close</b> button to confirm the operation.</li>
|
||||||
|
@ -12,8 +12,6 @@ nodes to polyhedrons at an arbitrary place in the mesh.</li>
|
|||||||
elements (used in quadratic meshes) from quadratic nodes to quadratic polyhedrons at an arbitrary place in the mesh.</li>
|
elements (used in quadratic meshes) from quadratic nodes to quadratic polyhedrons at an arbitrary place in the mesh.</li>
|
||||||
<li>\subpage removing_nodes_and_elements_page "Remove" any existing
|
<li>\subpage removing_nodes_and_elements_page "Remove" any existing
|
||||||
mesh elements.</li>
|
mesh elements.</li>
|
||||||
<li>\subpage renumbering_nodes_and_elements_page "Renumber" nodes and
|
|
||||||
elements of the mesh.</li>
|
|
||||||
<li>\subpage translation_page "Translate" in the indicated direction the mesh or some of
|
<li>\subpage translation_page "Translate" in the indicated direction the mesh or some of
|
||||||
its elements.</li>
|
its elements.</li>
|
||||||
<li>\subpage rotation_page "Rotate" by the indicated axis and angle
|
<li>\subpage rotation_page "Rotate" by the indicated axis and angle
|
||||||
@ -53,6 +51,11 @@ or vice versa.</li>
|
|||||||
<li>\subpage cut_mesh_by_plane_page "Cut a tetrahedron mesh by a plane".</li>
|
<li>\subpage cut_mesh_by_plane_page "Cut a tetrahedron mesh by a plane".</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
It is possible to \ref edit_anchor "modify the mesh" of lower
|
||||||
|
dimension before generation of mesh of higher dimension.
|
||||||
|
|
||||||
|
<p><br></p>
|
||||||
|
|
||||||
\note It is possible to use the variables defined in the SALOME \b NoteBook
|
\note It is possible to use the variables defined in the SALOME \b NoteBook
|
||||||
to specify the numerical parameters used for modification of any object.
|
to specify the numerical parameters used for modification of any object.
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ The smp file contains 4 sections:
|
|||||||
|
|
||||||
-# The first line indicates the total number of pattern nodes (N).
|
-# The first line indicates the total number of pattern nodes (N).
|
||||||
-# The next N lines describe nodes coordinates. Each line contains 2
|
-# The next N lines describe nodes coordinates. Each line contains 2
|
||||||
node coordinates for a 2D pattern or 3 node cordinates for a 3D pattern.
|
node coordinates for a 2D pattern or 3 node coordinates for a 3D pattern.
|
||||||
Note, that node coordinates of a 3D pattern can be defined only by relative values in range [0;1].
|
Note, that node coordinates of a 3D pattern can be defined only by relative values in range [0;1].
|
||||||
-# The key-points line contains the indices of the nodes to be mapped on geometrical
|
-# The key-points line contains the indices of the nodes to be mapped on geometrical
|
||||||
vertices (for a 2D pattern only). Index n refers to the node described
|
vertices (for a 2D pattern only). Index n refers to the node described
|
||||||
@ -89,7 +89,7 @@ An example of a simple 3D pattern smp file:
|
|||||||
|
|
||||||
<br><h2>Application of pattern mapping</h2>
|
<br><h2>Application of pattern mapping</h2>
|
||||||
|
|
||||||
<em>To apply pattern mapping to a geometrical object:</em>
|
<em>To apply pattern mapping to a geometrical object or mesh elements:</em>
|
||||||
|
|
||||||
From the \b Modification menu choose the <b>Pattern Mapping</b> item or click
|
From the \b Modification menu choose the <b>Pattern Mapping</b> item or click
|
||||||
<em>"Pattern mapping"</em> button in the toolbar.
|
<em>"Pattern mapping"</em> button in the toolbar.
|
||||||
@ -113,16 +113,17 @@ created manually or generated automatically from an existing mesh or submesh.</l
|
|||||||
boundaries of the pattern must also be equal to the number of vertices
|
boundaries of the pattern must also be equal to the number of vertices
|
||||||
on internal boundaries of the face;</li>
|
on internal boundaries of the face;</li>
|
||||||
<li> \b Vertex to which the first key-point should be mapped;</li>
|
<li> \b Vertex to which the first key-point should be mapped;</li>
|
||||||
|
</ul>
|
||||||
Alternatively, it is possible to select <b>Refine selected mesh elements</b>
|
Alternatively, it is possible to select <b>Refine selected mesh elements</b>
|
||||||
checkbox and apply the pattern to
|
check-box and apply the pattern to <ul>
|
||||||
<li> <b>Mesh Face</b> instead of a geometric Face</li>
|
<li> <b>Mesh Face</b> instead of a geometric Face</li>
|
||||||
<li> and select \b Node instead of vertex.</li>
|
<li> and select \b Node instead of vertex.</li>
|
||||||
|
</ul>
|
||||||
Additionally it is possible to:
|
Additionally it is possible to: <ul>
|
||||||
<li> <b>Reverse the order of key-points</b> By default, the vertices of
|
<li> <b>Reverse the order of key-points</b>. By default, the vertices of
|
||||||
a face are ordered counterclockwise.<li>
|
a face are ordered counterclockwise.</li>
|
||||||
<li> Enable to <b> Create polygons near boundary</b> </li>
|
<li> Enable to <b> Create polygons near boundary</b> </li>
|
||||||
<li> and <b>Create polyhedrons near boundary</b><li>
|
<li> and <b>Create polyhedrons near boundary</b></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
\n For a <b>3D pattern</b>
|
\n For a <b>3D pattern</b>
|
||||||
@ -133,21 +134,27 @@ In this dialog you should specify:
|
|||||||
<ul>
|
<ul>
|
||||||
<li> \b Pattern, which can be loaded from .smp pattern file previously
|
<li> \b Pattern, which can be loaded from .smp pattern file previously
|
||||||
created manually or generated automatically from an existing mesh or submesh.</li>
|
created manually or generated automatically from an existing mesh or submesh.</li>
|
||||||
<li> A 3D block (Solid) object;</li>
|
<li> A 3D block (Solid) object.</li>
|
||||||
<li> Two vertices that specify the order of nodes in the resulting mesh.</li>
|
<li> Two vertices that specify the order of nodes in the resulting
|
||||||
|
mesh.</li>
|
||||||
|
</ul>
|
||||||
Alternatively, it is possible to select <b>Refine selected mesh elements</b>
|
Alternatively, it is possible to select <b>Refine selected mesh elements</b>
|
||||||
checkbox and apply the pattern to
|
checkbox and apply the pattern to
|
||||||
|
<ul>
|
||||||
<li> One or several <b>Mesh volumes</b> instead of a geometric 3D
|
<li> One or several <b>Mesh volumes</b> instead of a geometric 3D
|
||||||
object</li>
|
object</li>
|
||||||
<li> and select two /b Nodes instead of vertices.</li>
|
<li> and select two /b Nodes instead of vertices.</li>
|
||||||
|
</ul>
|
||||||
Additionally it is possible to:
|
Additionally it is possible to:
|
||||||
|
<ul>
|
||||||
<li> Enable to <b> Create polygons near boundary</b> </li>
|
<li> Enable to <b> Create polygons near boundary</b> </li>
|
||||||
<li> and <b>Create polyhedrons near boundary</b><li>
|
<li> and <b>Create polyhedrons near boundary</b></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
\n Automatic Generation
|
<br>
|
||||||
|
<h3> Automatic Generation </h3>
|
||||||
|
|
||||||
To generate a pattern automatically from an existing mesh or submesh,
|
To generate a pattern automatically from an existing mesh or sub-mesh,
|
||||||
click \b New button.
|
click \b New button.
|
||||||
|
|
||||||
The following dialog box will appear:
|
The following dialog box will appear:
|
||||||
|
@ -237,7 +237,7 @@ See also \ref filter_double_elements "Double Elements quality control".
|
|||||||
<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>
|
</li><li>
|
||||||
<b>Over-constrained volumes</b> selects mesh volumes having only one border shared
|
<b>Over-constrained volumes</b> selects mesh volumes having only one facet shared
|
||||||
with other volumes.
|
with other volumes.
|
||||||
See also \ref over_constrained_volumes_page "Over-constrained volumes quality control".
|
See also \ref over_constrained_volumes_page "Over-constrained volumes quality control".
|
||||||
</li><li>
|
</li><li>
|
||||||
|
@ -18,6 +18,11 @@
|
|||||||
<h2>Change priority of submeshes in Mesh</h2>
|
<h2>Change priority of submeshes in Mesh</h2>
|
||||||
\tui_script{creating_meshes_ex03.py}
|
\tui_script{creating_meshes_ex03.py}
|
||||||
|
|
||||||
|
<br>
|
||||||
|
\anchor tui_editing_while_meshing
|
||||||
|
<h2>Intermediate edition while meshing</h2>
|
||||||
|
\tui_script{a3DmeshOnModified2Dmesh.py}
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
\anchor tui_editing_mesh
|
\anchor tui_editing_mesh
|
||||||
<h2>Editing a mesh</h2>
|
<h2>Editing a mesh</h2>
|
||||||
|
@ -33,7 +33,7 @@ viewer.</li>
|
|||||||
<li>\subpage display_mode_page "Display Mode" - allows to select between
|
<li>\subpage display_mode_page "Display Mode" - allows to select between
|
||||||
Wireframe, Shading and Nodes presentation.</li>
|
Wireframe, Shading and Nodes presentation.</li>
|
||||||
<li>\subpage display_entity_page "Display Entity" - allows to display
|
<li>\subpage display_entity_page "Display Entity" - allows to display
|
||||||
Faces, Edges or both.</li>
|
entities by types (Faces, Edges, Volumes etc.).</li>
|
||||||
<li><b>2D Quadratic</b> - allows to select between the representation
|
<li><b>2D Quadratic</b> - allows to select between the representation
|
||||||
of quadratic edges as broken <b>lines</b> or as <b>arcs</b></li>
|
of quadratic edges as broken <b>lines</b> or as <b>arcs</b></li>
|
||||||
<li><b>Orientation of faces</b> - shows vectors of orientation of
|
<li><b>Orientation of faces</b> - shows vectors of orientation of
|
||||||
|
@ -34,6 +34,8 @@ SET(SMESH_RESOURCES_FILES
|
|||||||
mesh_aspect_3d.png
|
mesh_aspect_3d.png
|
||||||
mesh_biquad_quadrangle.png
|
mesh_biquad_quadrangle.png
|
||||||
mesh_biquad_triangle.png
|
mesh_biquad_triangle.png
|
||||||
|
mesh_choose.png
|
||||||
|
mesh_choose_all.png
|
||||||
mesh_clear.png
|
mesh_clear.png
|
||||||
mesh_compute.png
|
mesh_compute.png
|
||||||
mesh_diagonal.png
|
mesh_diagonal.png
|
||||||
|
BIN
resources/mesh_choose.png
Normal file
After Width: | Height: | Size: 469 B |
BIN
resources/mesh_choose_all.png
Normal file
After Width: | Height: | Size: 472 B |
@ -1954,6 +1954,7 @@ bool MultiConnection2D::Value::operator<(const MultiConnection2D::Value& x) cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MultiConnection2D::GetValues(MValues& theValues){
|
void MultiConnection2D::GetValues(MValues& theValues){
|
||||||
|
if ( !myMesh ) return;
|
||||||
SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
|
SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
|
||||||
for(; anIter->more(); ){
|
for(; anIter->more(); ){
|
||||||
const SMDS_MeshFace* anElem = anIter->next();
|
const SMDS_MeshFace* anElem = anIter->next();
|
||||||
@ -3134,11 +3135,14 @@ bool RangeOfIds::SetRangeStr( const TCollection_AsciiString& theStr )
|
|||||||
myIds.Clear();
|
myIds.Clear();
|
||||||
|
|
||||||
TCollection_AsciiString aStr = theStr;
|
TCollection_AsciiString aStr = theStr;
|
||||||
aStr.RemoveAll( ' ' );
|
//aStr.RemoveAll( ' ' );
|
||||||
aStr.RemoveAll( '\t' );
|
//aStr.RemoveAll( '\t' );
|
||||||
|
for ( int i = 1; i <= aStr.Length(); ++i )
|
||||||
|
if ( isspace( aStr.Value( i )))
|
||||||
|
aStr.SetValue( i, ',');
|
||||||
|
|
||||||
for ( int aPos = aStr.Search( ",," ); aPos != -1; aPos = aStr.Search( ",," ) )
|
for ( int aPos = aStr.Search( ",," ); aPos != -1; aPos = aStr.Search( ",," ) )
|
||||||
aStr.Remove( aPos, 2 );
|
aStr.Remove( aPos, 1 );
|
||||||
|
|
||||||
TCollection_AsciiString tmpStr = aStr.Token( ",", 1 );
|
TCollection_AsciiString tmpStr = aStr.Token( ",", 1 );
|
||||||
int i = 1;
|
int i = 1;
|
||||||
@ -4247,11 +4251,11 @@ void BelongToGeom::init()
|
|||||||
myIsSubshape = IsSubShape(aMap, myShape);
|
myIsSubshape = IsSubShape(aMap, myShape);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!myIsSubshape)
|
//if (!myIsSubshape) // to be always ready to check an element not bound to geometry
|
||||||
{
|
{
|
||||||
myElementsOnShapePtr.reset(new ElementsOnShape());
|
myElementsOnShapePtr.reset(new ElementsOnShape());
|
||||||
myElementsOnShapePtr->SetTolerance(myTolerance);
|
myElementsOnShapePtr->SetTolerance(myTolerance);
|
||||||
myElementsOnShapePtr->SetAllNodes(true); // belong, while false means "lays on"
|
myElementsOnShapePtr->SetAllNodes(true); // "belong", while false means "lays on"
|
||||||
myElementsOnShapePtr->SetMesh(myMeshDS);
|
myElementsOnShapePtr->SetMesh(myMeshDS);
|
||||||
myElementsOnShapePtr->SetShape(myShape, myType);
|
myElementsOnShapePtr->SetShape(myShape, myType);
|
||||||
}
|
}
|
||||||
@ -4292,36 +4296,43 @@ bool BelongToGeom::IsSatisfy (long theId)
|
|||||||
{
|
{
|
||||||
if( const SMDS_MeshNode* aNode = myMeshDS->FindNode( theId ) )
|
if( const SMDS_MeshNode* aNode = myMeshDS->FindNode( theId ) )
|
||||||
{
|
{
|
||||||
|
if ( aNode->getshapeId() < 1 )
|
||||||
|
return myElementsOnShapePtr->IsSatisfy(theId);
|
||||||
|
|
||||||
const SMDS_PositionPtr& aPosition = aNode->GetPosition();
|
const SMDS_PositionPtr& aPosition = aNode->GetPosition();
|
||||||
SMDS_TypeOfPosition aTypeOfPosition = aPosition->GetTypeOfPosition();
|
SMDS_TypeOfPosition aTypeOfPosition = aPosition->GetTypeOfPosition();
|
||||||
switch( aTypeOfPosition )
|
switch( aTypeOfPosition )
|
||||||
{
|
{
|
||||||
case SMDS_TOP_VERTEX : return IsContains( myMeshDS,myShape,aNode,TopAbs_VERTEX );
|
case SMDS_TOP_VERTEX : return ( IsContains( myMeshDS,myShape,aNode,TopAbs_VERTEX ));
|
||||||
case SMDS_TOP_EDGE : return IsContains( myMeshDS,myShape,aNode,TopAbs_EDGE );
|
case SMDS_TOP_EDGE : return ( IsContains( myMeshDS,myShape,aNode,TopAbs_EDGE ));
|
||||||
case SMDS_TOP_FACE : return IsContains( myMeshDS,myShape,aNode,TopAbs_FACE );
|
case SMDS_TOP_FACE : return ( IsContains( myMeshDS,myShape,aNode,TopAbs_FACE ));
|
||||||
case SMDS_TOP_3DSPACE: return IsContains( myMeshDS,myShape,aNode,TopAbs_SHELL );
|
case SMDS_TOP_3DSPACE: return ( IsContains( myMeshDS,myShape,aNode,TopAbs_SOLID ) ||
|
||||||
|
IsContains( myMeshDS,myShape,aNode,TopAbs_SHELL ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( const SMDS_MeshElement* anElem = myMeshDS->FindElement( theId ) )
|
if ( const SMDS_MeshElement* anElem = myMeshDS->FindElement( theId ))
|
||||||
{
|
{
|
||||||
|
if ( anElem->getshapeId() < 1 )
|
||||||
|
return myElementsOnShapePtr->IsSatisfy(theId);
|
||||||
|
|
||||||
if( myType == SMDSAbs_All )
|
if( myType == SMDSAbs_All )
|
||||||
{
|
{
|
||||||
return IsContains( myMeshDS,myShape,anElem,TopAbs_EDGE ) ||
|
return ( IsContains( myMeshDS,myShape,anElem,TopAbs_EDGE ) ||
|
||||||
IsContains( myMeshDS,myShape,anElem,TopAbs_FACE ) ||
|
IsContains( myMeshDS,myShape,anElem,TopAbs_FACE ) ||
|
||||||
IsContains( myMeshDS,myShape,anElem,TopAbs_SHELL )||
|
IsContains( myMeshDS,myShape,anElem,TopAbs_SOLID )||
|
||||||
IsContains( myMeshDS,myShape,anElem,TopAbs_SOLID );
|
IsContains( myMeshDS,myShape,anElem,TopAbs_SHELL ));
|
||||||
}
|
}
|
||||||
else if( myType == anElem->GetType() )
|
else if( myType == anElem->GetType() )
|
||||||
{
|
{
|
||||||
switch( myType )
|
switch( myType )
|
||||||
{
|
{
|
||||||
case SMDSAbs_Edge : return IsContains( myMeshDS,myShape,anElem,TopAbs_EDGE );
|
case SMDSAbs_Edge : return ( IsContains( myMeshDS,myShape,anElem,TopAbs_EDGE ));
|
||||||
case SMDSAbs_Face : return IsContains( myMeshDS,myShape,anElem,TopAbs_FACE );
|
case SMDSAbs_Face : return ( IsContains( myMeshDS,myShape,anElem,TopAbs_FACE ));
|
||||||
case SMDSAbs_Volume: return IsContains( myMeshDS,myShape,anElem,TopAbs_SHELL )||
|
case SMDSAbs_Volume: return ( IsContains( myMeshDS,myShape,anElem,TopAbs_SOLID )||
|
||||||
IsContains( myMeshDS,myShape,anElem,TopAbs_SOLID );
|
IsContains( myMeshDS,myShape,anElem,TopAbs_SHELL ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
#include <SalomeApp_Application.h>
|
#include <SalomeApp_Application.h>
|
||||||
#include <SUIT_Session.h>
|
#include <SUIT_Session.h>
|
||||||
|
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <GEOM_Client.hxx>
|
#include <GEOM_Client.hxx>
|
||||||
#include <SMESHGUI_Utils.h>
|
#include <SMESHGUI_Utils.h>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
@ -96,7 +96,7 @@ LightApp_SelectionMgr* GeomSelectionTools::selectionMgr()
|
|||||||
*/
|
*/
|
||||||
SALOME_ListIO* GeomSelectionTools::getSelectedSalomeObjects()
|
SALOME_ListIO* GeomSelectionTools::getSelectedSalomeObjects()
|
||||||
{
|
{
|
||||||
SALOME_ListIO* selected;
|
SALOME_ListIO* selected = new SALOME_ListIO;
|
||||||
LightApp_SelectionMgr* aSel = selectionMgr();
|
LightApp_SelectionMgr* aSel = selectionMgr();
|
||||||
aSel->selectedObjects( *selected, NULL, false );
|
aSel->selectedObjects( *selected, NULL, false );
|
||||||
return selected;
|
return selected;
|
||||||
|
@ -58,6 +58,7 @@ SET(_link_LIBRARIES
|
|||||||
${CAS_TKG2d}
|
${CAS_TKG2d}
|
||||||
${CAS_TKCDF}
|
${CAS_TKCDF}
|
||||||
${GEOM_NMTTools}
|
${GEOM_NMTTools}
|
||||||
|
${GEOM_GEOMUtils}
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
SMESHDS
|
SMESHDS
|
||||||
SMESHControls
|
SMESHControls
|
||||||
|
@ -522,9 +522,7 @@ GeomAbs_Shape SMESH_Algo::Continuity(TopoDS_Edge E1,
|
|||||||
Standard_Real tol = BRep_Tool::Tolerance( V );
|
Standard_Real tol = BRep_Tool::Tolerance( V );
|
||||||
Standard_Real angTol = 2e-3;
|
Standard_Real angTol = 2e-3;
|
||||||
try {
|
try {
|
||||||
#if OCC_VERSION_LARGE > 0x06010000
|
|
||||||
OCC_CATCH_SIGNALS;
|
OCC_CATCH_SIGNALS;
|
||||||
#endif
|
|
||||||
return BRepLProp::Continuity(C1, C2, u1, u2, tol, angTol);
|
return BRepLProp::Continuity(C1, C2, u1, u2, tol, angTol);
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
catch (Standard_Failure) {
|
||||||
|
@ -157,8 +157,9 @@ void SMESH_HypoFilter::IsMoreLocalThanPredicate::findPreferable()
|
|||||||
bool SMESH_HypoFilter::IsMoreLocalThanPredicate::IsOk(const SMESH_Hypothesis* aHyp,
|
bool SMESH_HypoFilter::IsMoreLocalThanPredicate::IsOk(const SMESH_Hypothesis* aHyp,
|
||||||
const TopoDS_Shape& aShape) const
|
const TopoDS_Shape& aShape) const
|
||||||
{
|
{
|
||||||
if ( aShape.IsSame( _mesh.GetShapeToMesh() ))
|
if ( aShape.IsSame( _mesh.GetShapeToMesh() ) || // aHyp is global
|
||||||
return false; // aHyp is global
|
aShape.IsSame( _shape ))
|
||||||
|
return false;
|
||||||
|
|
||||||
if ( SMESH_MesherHelper::IsSubShape( aShape, /*mainShape=*/_shape ))
|
if ( SMESH_MesherHelper::IsSubShape( aShape, /*mainShape=*/_shape ))
|
||||||
return true;
|
return true;
|
||||||
|
@ -55,8 +55,10 @@
|
|||||||
#include "DriverCGNS_Write.hxx"
|
#include "DriverCGNS_Write.hxx"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <GEOMUtils.hxx>
|
||||||
|
|
||||||
#undef _Precision_HeaderFile
|
#undef _Precision_HeaderFile
|
||||||
#include <BRepBndLib.hxx>
|
//#include <BRepBndLib.hxx>
|
||||||
#include <BRepPrimAPI_MakeBox.hxx>
|
#include <BRepPrimAPI_MakeBox.hxx>
|
||||||
#include <Bnd_Box.hxx>
|
#include <Bnd_Box.hxx>
|
||||||
#include <TColStd_MapOfInteger.hxx>
|
#include <TColStd_MapOfInteger.hxx>
|
||||||
@ -226,7 +228,7 @@ SMESH_Mesh::~SMESH_Mesh()
|
|||||||
|
|
||||||
bool SMESH_Mesh::MeshExists( int meshId ) const
|
bool SMESH_Mesh::MeshExists( int meshId ) const
|
||||||
{
|
{
|
||||||
return _myDocument ? _myDocument->GetMesh( meshId ) : false;
|
return _myDocument ? bool( _myDocument->GetMesh( meshId )) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -327,8 +329,9 @@ double SMESH_Mesh::GetShapeDiagonalSize(const TopoDS_Shape & aShape)
|
|||||||
{
|
{
|
||||||
if ( !aShape.IsNull() ) {
|
if ( !aShape.IsNull() ) {
|
||||||
Bnd_Box Box;
|
Bnd_Box Box;
|
||||||
BRepBndLib::Add(aShape, Box);
|
GEOMUtils::PreciseBoundingBox(aShape, Box);
|
||||||
return sqrt( Box.SquareExtent() );
|
if ( !Box.IsVoid() )
|
||||||
|
return sqrt( Box.SquareExtent() );
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ typedef std::list<TListOfInt> TListOfListOfInt;
|
|||||||
|
|
||||||
class SMESH_EXPORT SMESH_Mesh
|
class SMESH_EXPORT SMESH_Mesh
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SMESH_Mesh(int theLocalId,
|
SMESH_Mesh(int theLocalId,
|
||||||
int theStudyId,
|
int theStudyId,
|
||||||
SMESH_Gen* theGen,
|
SMESH_Gen* theGen,
|
||||||
|
@ -3701,13 +3701,8 @@ static bool getClosestUV (Extrema_GenExtPS& projector,
|
|||||||
if ( projector.IsDone() ) {
|
if ( projector.IsDone() ) {
|
||||||
double u, v, minVal = DBL_MAX;
|
double u, v, minVal = DBL_MAX;
|
||||||
for ( int i = projector.NbExt(); i > 0; i-- )
|
for ( int i = projector.NbExt(); i > 0; i-- )
|
||||||
#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
|
|
||||||
if ( projector.SquareDistance( i ) < minVal ) {
|
if ( projector.SquareDistance( i ) < minVal ) {
|
||||||
minVal = projector.SquareDistance( i );
|
minVal = projector.SquareDistance( i );
|
||||||
#else
|
|
||||||
if ( projector.Value( i ) < minVal ) {
|
|
||||||
minVal = projector.Value( i );
|
|
||||||
#endif
|
|
||||||
projector.Point( i ).Parameter( u, v );
|
projector.Point( i ).Parameter( u, v );
|
||||||
}
|
}
|
||||||
result.SetCoord( u, v );
|
result.SetCoord( u, v );
|
||||||
@ -10397,15 +10392,12 @@ namespace {
|
|||||||
}
|
}
|
||||||
void Perform(const gp_Pnt& aPnt, double theTol)
|
void Perform(const gp_Pnt& aPnt, double theTol)
|
||||||
{
|
{
|
||||||
|
theTol *= theTol;
|
||||||
_state = TopAbs_OUT;
|
_state = TopAbs_OUT;
|
||||||
_extremum.Perform(aPnt);
|
_extremum.Perform(aPnt);
|
||||||
if ( _extremum.IsDone() )
|
if ( _extremum.IsDone() )
|
||||||
for ( int iSol = 1; iSol <= _extremum.NbExt() && _state == TopAbs_OUT; ++iSol)
|
for ( int iSol = 1; iSol <= _extremum.NbExt() && _state == TopAbs_OUT; ++iSol)
|
||||||
#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
|
|
||||||
_state = ( _extremum.SquareDistance(iSol) <= theTol ? TopAbs_IN : TopAbs_OUT );
|
_state = ( _extremum.SquareDistance(iSol) <= theTol ? TopAbs_IN : TopAbs_OUT );
|
||||||
#else
|
|
||||||
_state = ( _extremum.Value(iSol) <= theTol ? TopAbs_IN : TopAbs_OUT );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
TopAbs_State State() const
|
TopAbs_State State() const
|
||||||
{
|
{
|
||||||
|
@ -242,40 +242,68 @@ void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh)
|
|||||||
for ( TopExp_Explorer eF( aSh, TopAbs_FACE ); eF.More(); eF.Next() )
|
for ( TopExp_Explorer eF( aSh, TopAbs_FACE ); eF.More(); eF.Next() )
|
||||||
{
|
{
|
||||||
const TopoDS_Face& face = TopoDS::Face( eF.Current() );
|
const TopoDS_Face& face = TopoDS::Face( eF.Current() );
|
||||||
|
BRepAdaptor_Surface surf( face, false );
|
||||||
|
if ( surf.IsUPeriodic() || surf.IsUClosed() ) {
|
||||||
|
myParIndex |= U_periodic;
|
||||||
|
myPar1[0] = surf.FirstUParameter();
|
||||||
|
myPar2[0] = surf.LastUParameter();
|
||||||
|
}
|
||||||
|
if ( surf.IsVPeriodic() || surf.IsVClosed() ) {
|
||||||
|
myParIndex |= V_periodic;
|
||||||
|
myPar1[1] = surf.FirstVParameter();
|
||||||
|
myPar2[1] = surf.LastVParameter();
|
||||||
|
}
|
||||||
|
|
||||||
// if ( surface->IsUPeriodic() || surface->IsVPeriodic() ||
|
gp_Pnt2d uv1, uv2;
|
||||||
// surface->IsUClosed() || surface->IsVClosed() )
|
for (TopExp_Explorer exp( face, TopAbs_EDGE ); exp.More(); exp.Next())
|
||||||
{
|
{
|
||||||
//while ( surface->IsKind(STANDARD_TYPE(Geom_RectangularTrimmedSurface )))
|
// look for a "seam" edge, a real seam or an edge on period boundary
|
||||||
//surface = Handle(Geom_RectangularTrimmedSurface)::DownCast( surface )->BasisSurface();
|
TopoDS_Edge edge = TopoDS::Edge( exp.Current() );
|
||||||
|
if ( myParIndex )
|
||||||
for (TopExp_Explorer exp( face, TopAbs_EDGE ); exp.More(); exp.Next())
|
|
||||||
{
|
{
|
||||||
// look for a seam edge
|
BRep_Tool::UVPoints( edge, face, uv1, uv2 );
|
||||||
TopoDS_Edge edge = TopoDS::Edge( exp.Current() );
|
const double du = Abs( uv1.Coord(1) - uv2.Coord(1) );
|
||||||
if ( BRep_Tool::IsClosed( edge, face )) {
|
const double dv = Abs( uv1.Coord(2) - uv2.Coord(2) );
|
||||||
// initialize myPar1, myPar2 and myParIndex
|
|
||||||
gp_Pnt2d uv1, uv2;
|
bool isSeam = BRep_Tool::IsClosed( edge, face );
|
||||||
BRep_Tool::UVPoints( edge, face, uv1, uv2 );
|
if ( isSeam ) // real seam - having two pcurves on face
|
||||||
if ( Abs( uv1.Coord(1) - uv2.Coord(1) ) < Abs( uv1.Coord(2) - uv2.Coord(2) ))
|
{
|
||||||
|
// pcurve can lie not on pediod boundary (22582, mesh_Quadratic_01/C9)
|
||||||
|
if ( du < dv )
|
||||||
{
|
{
|
||||||
double u1 = uv1.Coord(1);
|
double u1 = uv1.Coord(1);
|
||||||
edge.Reverse();
|
edge.Reverse();
|
||||||
BRep_Tool::UVPoints( edge, face, uv1, uv2 );
|
BRep_Tool::UVPoints( edge, face, uv1, uv2 );
|
||||||
double u2 = uv1.Coord(1);
|
double u2 = uv1.Coord(1);
|
||||||
myParIndex |= U_periodic;
|
|
||||||
myPar1[0] = Min( u1, u2 );
|
myPar1[0] = Min( u1, u2 );
|
||||||
myPar2[0] = Max( u1, u2 );
|
myPar2[0] = Max( u1, u2 );
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
double v1 = uv1.Coord(2);
|
double v1 = uv1.Coord(2);
|
||||||
edge.Reverse();
|
edge.Reverse();
|
||||||
BRep_Tool::UVPoints( edge, face, uv1, uv2 );
|
BRep_Tool::UVPoints( edge, face, uv1, uv2 );
|
||||||
double v2 = uv1.Coord(2);
|
double v2 = uv1.Coord(2);
|
||||||
myParIndex |= V_periodic;
|
|
||||||
myPar1[1] = Min( v1, v2 );
|
myPar1[1] = Min( v1, v2 );
|
||||||
myPar2[1] = Max( v1, v2 );
|
myPar2[1] = Max( v1, v2 );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else //if ( !isSeam )
|
||||||
|
{
|
||||||
|
// one pcurve but on period boundary (22772, mesh_Quadratic_01/D1)
|
||||||
|
if (( myParIndex & U_periodic ) && du < Precision::PConfusion() )
|
||||||
|
{
|
||||||
|
isSeam = ( Abs( uv1.Coord(1) - myPar1[0] ) < Precision::PConfusion() ||
|
||||||
|
Abs( uv1.Coord(1) - myPar2[0] ) < Precision::PConfusion() );
|
||||||
|
}
|
||||||
|
else if (( myParIndex & V_periodic ) && dv < Precision::PConfusion() )
|
||||||
|
{
|
||||||
|
isSeam = ( Abs( uv1.Coord(2) - myPar1[1] ) < Precision::PConfusion() ||
|
||||||
|
Abs( uv1.Coord(2) - myPar2[1] ) < Precision::PConfusion() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( isSeam )
|
||||||
|
{
|
||||||
// store seam shape indices, negative if shape encounters twice
|
// store seam shape indices, negative if shape encounters twice
|
||||||
int edgeID = meshDS->ShapeToIndex( edge );
|
int edgeID = meshDS->ShapeToIndex( edge );
|
||||||
mySeamShapeIds.insert( IsSeamShape( edgeID ) ? -edgeID : edgeID );
|
mySeamShapeIds.insert( IsSeamShape( edgeID ) ? -edgeID : edgeID );
|
||||||
@ -284,27 +312,12 @@ void SMESH_MesherHelper::SetSubShape(const TopoDS_Shape& aSh)
|
|||||||
mySeamShapeIds.insert( IsSeamShape( vertexID ) ? -vertexID : vertexID );
|
mySeamShapeIds.insert( IsSeamShape( vertexID ) ? -vertexID : vertexID );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// look for a degenerated edge
|
|
||||||
if ( SMESH_Algo::isDegenerated( edge )) {
|
|
||||||
myDegenShapeIds.insert( meshDS->ShapeToIndex( edge ));
|
|
||||||
for ( TopExp_Explorer v( edge, TopAbs_VERTEX ); v.More(); v.Next() )
|
|
||||||
myDegenShapeIds.insert( meshDS->ShapeToIndex( v.Current() ));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ( !myDegenShapeIds.empty() && !myParIndex )
|
// look for a degenerated edge
|
||||||
{
|
if ( SMESH_Algo::isDegenerated( edge )) {
|
||||||
BRepAdaptor_Surface surf( face, false );
|
myDegenShapeIds.insert( meshDS->ShapeToIndex( edge ));
|
||||||
if ( surf.IsUPeriodic() || surf.IsUClosed() ) {
|
for ( TopExp_Explorer v( edge, TopAbs_VERTEX ); v.More(); v.Next() )
|
||||||
myParIndex |= U_periodic;
|
myDegenShapeIds.insert( meshDS->ShapeToIndex( v.Current() ));
|
||||||
myPar1[0] = surf.FirstUParameter();
|
|
||||||
myPar2[0] = surf.LastUParameter();
|
|
||||||
}
|
|
||||||
else if ( surf.IsVPeriodic() || surf.IsVClosed() ) {
|
|
||||||
myParIndex |= V_periodic;
|
|
||||||
myPar1[1] = surf.FirstVParameter();
|
|
||||||
myPar2[1] = surf.LastVParameter();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -380,10 +393,13 @@ void SMESH_MesherHelper::AddTLinkNode(const SMDS_MeshNode* n1,
|
|||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
void SMESH_MesherHelper::AddTLinks(const SMDS_MeshEdge* edge)
|
bool SMESH_MesherHelper::AddTLinks(const SMDS_MeshEdge* edge)
|
||||||
{
|
{
|
||||||
if ( edge->IsQuadratic() )
|
if ( edge && edge->IsQuadratic() )
|
||||||
AddTLinkNode(edge->GetNode(0), edge->GetNode(1), edge->GetNode(2));
|
AddTLinkNode(edge->GetNode(0), edge->GetNode(1), edge->GetNode(2));
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -392,8 +408,9 @@ void SMESH_MesherHelper::AddTLinks(const SMDS_MeshEdge* edge)
|
|||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
void SMESH_MesherHelper::AddTLinks(const SMDS_MeshFace* f)
|
bool SMESH_MesherHelper::AddTLinks(const SMDS_MeshFace* f)
|
||||||
{
|
{
|
||||||
|
bool isQuad = true;
|
||||||
if ( !f->IsPoly() )
|
if ( !f->IsPoly() )
|
||||||
switch ( f->NbNodes() ) {
|
switch ( f->NbNodes() ) {
|
||||||
case 7:
|
case 7:
|
||||||
@ -417,7 +434,9 @@ void SMESH_MesherHelper::AddTLinks(const SMDS_MeshFace* f)
|
|||||||
AddTLinkNode(f->GetNode(2),f->GetNode(3),f->GetNode(6));
|
AddTLinkNode(f->GetNode(2),f->GetNode(3),f->GetNode(6));
|
||||||
AddTLinkNode(f->GetNode(3),f->GetNode(0),f->GetNode(7)); break;
|
AddTLinkNode(f->GetNode(3),f->GetNode(0),f->GetNode(7)); break;
|
||||||
default:;
|
default:;
|
||||||
|
isQuad = false;
|
||||||
}
|
}
|
||||||
|
return isQuad;
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -426,7 +445,7 @@ void SMESH_MesherHelper::AddTLinks(const SMDS_MeshFace* f)
|
|||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
void SMESH_MesherHelper::AddTLinks(const SMDS_MeshVolume* volume)
|
bool SMESH_MesherHelper::AddTLinks(const SMDS_MeshVolume* volume)
|
||||||
{
|
{
|
||||||
if ( volume->IsQuadratic() )
|
if ( volume->IsQuadratic() )
|
||||||
{
|
{
|
||||||
@ -460,7 +479,9 @@ void SMESH_MesherHelper::AddTLinks(const SMDS_MeshVolume* volume)
|
|||||||
nFCenter ));
|
nFCenter ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -586,14 +607,24 @@ gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face& F,
|
|||||||
Handle(Geom_Surface) S = BRep_Tool::Surface(F,loc);
|
Handle(Geom_Surface) S = BRep_Tool::Surface(F,loc);
|
||||||
Standard_Boolean isUPeriodic = S->IsUPeriodic();
|
Standard_Boolean isUPeriodic = S->IsUPeriodic();
|
||||||
Standard_Boolean isVPeriodic = S->IsVPeriodic();
|
Standard_Boolean isVPeriodic = S->IsVPeriodic();
|
||||||
|
gp_Pnt2d newUV = uv;
|
||||||
if ( isUPeriodic || isVPeriodic ) {
|
if ( isUPeriodic || isVPeriodic ) {
|
||||||
Standard_Real UF,UL,VF,VL;
|
Standard_Real UF,UL,VF,VL;
|
||||||
S->Bounds(UF,UL,VF,VL);
|
S->Bounds(UF,UL,VF,VL);
|
||||||
if(isUPeriodic)
|
if ( isUPeriodic )
|
||||||
uv.SetX( uv.X() + ShapeAnalysis::AdjustToPeriod(uv.X(),UF,UL));
|
newUV.SetX( uv.X() + ShapeAnalysis::AdjustToPeriod(uv.X(),UF,UL));
|
||||||
if(isVPeriodic)
|
if ( isVPeriodic )
|
||||||
uv.SetY( uv.Y() + ShapeAnalysis::AdjustToPeriod(uv.Y(),VF,VL));
|
newUV.SetY( uv.Y() + ShapeAnalysis::AdjustToPeriod(uv.Y(),VF,VL));
|
||||||
}
|
}
|
||||||
|
if ( n2 )
|
||||||
|
{
|
||||||
|
gp_Pnt2d uv2 = GetNodeUV( F, n2, 0, check );
|
||||||
|
if ( isUPeriodic && Abs( uv.X()-uv2.X() ) < Abs( newUV.X()-uv2.X() ))
|
||||||
|
newUV.SetX( uv.X() );
|
||||||
|
if ( isVPeriodic && Abs( uv.Y()-uv2.Y() ) < Abs( newUV.Y()-uv2.Y() ))
|
||||||
|
newUV.SetY( uv.Y() );
|
||||||
|
}
|
||||||
|
uv = newUV;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX)
|
else if(Pos->GetTypeOfPosition()==SMDS_TOP_VERTEX)
|
||||||
@ -910,7 +941,7 @@ bool SMESH_MesherHelper::CheckNodeU(const TopoDS_Edge& E,
|
|||||||
int shapeID = n->getshapeId();
|
int shapeID = n->getshapeId();
|
||||||
bool infinit = Precision::IsInfinite( u );
|
bool infinit = Precision::IsInfinite( u );
|
||||||
bool zero = ( u == 0. );
|
bool zero = ( u == 0. );
|
||||||
if ( force || toCheckPosOnShape( shapeID ) || infinit || zero )
|
if ( force || infinit || zero || toCheckPosOnShape( shapeID ))
|
||||||
{
|
{
|
||||||
TopLoc_Location loc; double f,l;
|
TopLoc_Location loc; double f,l;
|
||||||
Handle(Geom_Curve) curve = BRep_Tool::Curve( E,loc,f,l );
|
Handle(Geom_Curve) curve = BRep_Tool::Curve( E,loc,f,l );
|
||||||
@ -927,7 +958,7 @@ bool SMESH_MesherHelper::CheckNodeU(const TopoDS_Edge& E,
|
|||||||
gp_Pnt nodePnt = SMESH_TNodeXYZ( n );
|
gp_Pnt nodePnt = SMESH_TNodeXYZ( n );
|
||||||
if ( !loc.IsIdentity() ) nodePnt.Transform( loc.Transformation().Inverted() );
|
if ( !loc.IsIdentity() ) nodePnt.Transform( loc.Transformation().Inverted() );
|
||||||
gp_Pnt curvPnt;
|
gp_Pnt curvPnt;
|
||||||
double dist = u;
|
double dist = 2*tol;
|
||||||
if ( !infinit )
|
if ( !infinit )
|
||||||
{
|
{
|
||||||
curvPnt = curve->Value( u );
|
curvPnt = curve->Value( u );
|
||||||
@ -2433,7 +2464,7 @@ namespace
|
|||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : IsStructured
|
//function : IsStructured
|
||||||
//purpose : Return true if 2D mesh on FACE is structured
|
//purpose : Return true if 2D mesh on FACE is a structured rectangle
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
|
bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
|
||||||
@ -2523,6 +2554,79 @@ bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : IsDistorted2D
|
||||||
|
//purpose : Return true if 2D mesh on FACE is ditorted
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
bool SMESH_MesherHelper::IsDistorted2D( SMESH_subMesh* faceSM,
|
||||||
|
bool checkUV)
|
||||||
|
{
|
||||||
|
if ( !faceSM || faceSM->GetSubShape().ShapeType() != TopAbs_FACE )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool haveBadFaces = false;
|
||||||
|
|
||||||
|
SMESH_MesherHelper helper( *faceSM->GetFather() );
|
||||||
|
helper.SetSubShape( faceSM->GetSubShape() );
|
||||||
|
|
||||||
|
const TopoDS_Face& F = TopoDS::Face( faceSM->GetSubShape() );
|
||||||
|
SMESHDS_SubMesh* smDS = helper.GetMeshDS()->MeshElements( F );
|
||||||
|
if ( !smDS || smDS->NbElements() == 0 ) return false;
|
||||||
|
|
||||||
|
SMDS_ElemIteratorPtr faceIt = smDS->GetElements();
|
||||||
|
double prevArea = 0;
|
||||||
|
vector< const SMDS_MeshNode* > nodes;
|
||||||
|
vector< gp_XY > uv;
|
||||||
|
bool* toCheckUV = checkUV ? & checkUV : 0;
|
||||||
|
while ( faceIt->more() && !haveBadFaces )
|
||||||
|
{
|
||||||
|
const SMDS_MeshElement* face = faceIt->next();
|
||||||
|
|
||||||
|
// get nodes
|
||||||
|
nodes.resize( face->NbCornerNodes() );
|
||||||
|
SMDS_MeshElement::iterator n = face->begin_nodes();
|
||||||
|
for ( size_t i = 0; i < nodes.size(); ++n, ++i )
|
||||||
|
nodes[ i ] = *n;
|
||||||
|
|
||||||
|
// avoid elems on degenarate shapes as UV on them can be wrong
|
||||||
|
if ( helper.HasDegeneratedEdges() )
|
||||||
|
{
|
||||||
|
bool isOnDegen = false;
|
||||||
|
for ( size_t i = 0; ( i < nodes.size() && !isOnDegen ); ++i )
|
||||||
|
isOnDegen = helper.IsDegenShape( nodes[ i ]->getshapeId() );
|
||||||
|
if ( isOnDegen )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// prepare to getting UVs
|
||||||
|
const SMDS_MeshNode* inFaceNode = 0;
|
||||||
|
if ( helper.HasSeam() ) {
|
||||||
|
for ( size_t i = 0; ( i < nodes.size() && !inFaceNode ); ++i )
|
||||||
|
if ( !helper.IsSeamShape( nodes[ i ]->getshapeId() ))
|
||||||
|
inFaceNode = nodes[ i ];
|
||||||
|
if ( !inFaceNode )
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// get UVs
|
||||||
|
uv.resize( nodes.size() );
|
||||||
|
for ( size_t i = 0; i < nodes.size(); ++i )
|
||||||
|
uv[ i ] = helper.GetNodeUV( F, nodes[ i ], inFaceNode, toCheckUV );
|
||||||
|
|
||||||
|
// compare orientation of triangles
|
||||||
|
double faceArea = 0;
|
||||||
|
for ( int iT = 0, nbT = nodes.size()-2; iT < nbT; ++iT )
|
||||||
|
{
|
||||||
|
gp_XY v1 = uv[ iT+1 ] - uv[ 0 ];
|
||||||
|
gp_XY v2 = uv[ iT+2 ] - uv[ 0 ];
|
||||||
|
faceArea += v2 ^ v1;
|
||||||
|
}
|
||||||
|
haveBadFaces = ( faceArea * prevArea < 0 );
|
||||||
|
prevArea = faceArea;
|
||||||
|
}
|
||||||
|
|
||||||
|
return haveBadFaces;
|
||||||
|
}
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
* \brief Find out elements orientation on a geometrical face
|
* \brief Find out elements orientation on a geometrical face
|
||||||
@ -2702,6 +2806,28 @@ bool SMESH_MesherHelper::IsSubShape( const TopoDS_Shape& shape, SMESH_Mesh* aMes
|
|||||||
(shape.ShapeType() == TopAbs_COMPOUND && aMesh->GetMeshDS()->IsGroupOfSubShapes( shape ));
|
(shape.ShapeType() == TopAbs_COMPOUND && aMesh->GetMeshDS()->IsGroupOfSubShapes( shape ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : IsBlock
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
|
||||||
|
bool SMESH_MesherHelper::IsBlock( const TopoDS_Shape& shape )
|
||||||
|
{
|
||||||
|
if ( shape.IsNull() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TopoDS_Shell shell;
|
||||||
|
TopExp_Explorer exp( shape, TopAbs_SHELL );
|
||||||
|
if ( !exp.More() ) return false;
|
||||||
|
shell = TopoDS::Shell( exp.Current() );
|
||||||
|
if ( exp.Next(), exp.More() ) return false;
|
||||||
|
|
||||||
|
TopoDS_Vertex v;
|
||||||
|
TopTools_IndexedMapOfOrientedShape map;
|
||||||
|
return SMESH_Block::FindBlockShapes( shell, v, v, map );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
* \brief Return maximal tolerance of shape
|
* \brief Return maximal tolerance of shape
|
||||||
|
@ -117,6 +117,11 @@ class SMESH_EXPORT SMESH_MesherHelper
|
|||||||
*/
|
*/
|
||||||
static bool IsStructured( SMESH_subMesh* faceSM );
|
static bool IsStructured( SMESH_subMesh* faceSM );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Return true if 2D mesh on FACE is distored
|
||||||
|
*/
|
||||||
|
static bool IsDistorted2D( SMESH_subMesh* faceSM, bool checkUV=false );
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Returns true if given node is medium
|
* \brief Returns true if given node is medium
|
||||||
* \param n - node to check
|
* \param n - node to check
|
||||||
@ -167,15 +172,15 @@ class SMESH_EXPORT SMESH_MesherHelper
|
|||||||
* a0 p0 a1
|
* a0 p0 a1
|
||||||
*/
|
*/
|
||||||
inline static gp_XY calcTFI(double x, double y,
|
inline static gp_XY calcTFI(double x, double y,
|
||||||
const gp_XY a0,const gp_XY a1,const gp_XY a2,const gp_XY a3,
|
const gp_XY& a0,const gp_XY& a1,const gp_XY& a2,const gp_XY& a3,
|
||||||
const gp_XY p0,const gp_XY p1,const gp_XY p2,const gp_XY p3);
|
const gp_XY& p0,const gp_XY& p1,const gp_XY& p2,const gp_XY& p3);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Same as "gp_XY calcTFI(...)" but in 3D
|
* \brief Same as "gp_XY calcTFI(...)" but in 3D
|
||||||
*/
|
*/
|
||||||
inline static gp_XYZ calcTFI(double x, double y,
|
inline static gp_XYZ calcTFI(double x, double y,
|
||||||
const gp_XYZ a0,const gp_XYZ a1,const gp_XYZ a2,const gp_XYZ a3,
|
const gp_XYZ& a0,const gp_XYZ& a1,const gp_XYZ& a2,const gp_XYZ& a3,
|
||||||
const gp_XYZ p0,const gp_XYZ p1,const gp_XYZ p2,const gp_XYZ p3);
|
const gp_XYZ& p0,const gp_XYZ& p1,const gp_XYZ& p2,const gp_XYZ& p3);
|
||||||
/*!
|
/*!
|
||||||
* \brief Count nb of sub-shapes
|
* \brief Count nb of sub-shapes
|
||||||
* \param shape - the shape
|
* \param shape - the shape
|
||||||
@ -216,6 +221,8 @@ class SMESH_EXPORT SMESH_MesherHelper
|
|||||||
|
|
||||||
static bool IsSubShape( const TopoDS_Shape& shape, SMESH_Mesh* aMesh );
|
static bool IsSubShape( const TopoDS_Shape& shape, SMESH_Mesh* aMesh );
|
||||||
|
|
||||||
|
static bool IsBlock( const TopoDS_Shape& shape );
|
||||||
|
|
||||||
static double MaxTolerance( const TopoDS_Shape& shape );
|
static double MaxTolerance( const TopoDS_Shape& shape );
|
||||||
|
|
||||||
static double GetAngle( const TopoDS_Edge & E1, const TopoDS_Edge & E2,
|
static double GetAngle( const TopoDS_Edge & E1, const TopoDS_Edge & E2,
|
||||||
@ -637,9 +644,9 @@ public:
|
|||||||
void AddTLinkNodeMap(const TLinkNodeMap& aMap)
|
void AddTLinkNodeMap(const TLinkNodeMap& aMap)
|
||||||
{ myTLinkNodeMap.insert(aMap.begin(), aMap.end()); }
|
{ myTLinkNodeMap.insert(aMap.begin(), aMap.end()); }
|
||||||
|
|
||||||
void AddTLinks(const SMDS_MeshEdge* edge);
|
bool AddTLinks(const SMDS_MeshEdge* edge);
|
||||||
void AddTLinks(const SMDS_MeshFace* face);
|
bool AddTLinks(const SMDS_MeshFace* face);
|
||||||
void AddTLinks(const SMDS_MeshVolume* vol);
|
bool AddTLinks(const SMDS_MeshVolume* vol);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns myTLinkNodeMap
|
* Returns myTLinkNodeMap
|
||||||
@ -725,8 +732,8 @@ public:
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
inline gp_XY
|
inline gp_XY
|
||||||
SMESH_MesherHelper::calcTFI(double x, double y,
|
SMESH_MesherHelper::calcTFI(double x, double y,
|
||||||
const gp_XY a0,const gp_XY a1,const gp_XY a2,const gp_XY a3,
|
const gp_XY& a0,const gp_XY& a1,const gp_XY& a2,const gp_XY& a3,
|
||||||
const gp_XY p0,const gp_XY p1,const gp_XY p2,const gp_XY p3)
|
const gp_XY& p0,const gp_XY& p1,const gp_XY& p2,const gp_XY& p3)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
((1 - y) * p0 + x * p1 + y * p2 + (1 - x) * p3 ) -
|
((1 - y) * p0 + x * p1 + y * p2 + (1 - x) * p3 ) -
|
||||||
@ -735,8 +742,8 @@ SMESH_MesherHelper::calcTFI(double x, double y,
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
inline gp_XYZ
|
inline gp_XYZ
|
||||||
SMESH_MesherHelper::calcTFI(double x, double y,
|
SMESH_MesherHelper::calcTFI(double x, double y,
|
||||||
const gp_XYZ a0,const gp_XYZ a1,const gp_XYZ a2,const gp_XYZ a3,
|
const gp_XYZ& a0,const gp_XYZ& a1,const gp_XYZ& a2,const gp_XYZ& a3,
|
||||||
const gp_XYZ p0,const gp_XYZ p1,const gp_XYZ p2,const gp_XYZ p3)
|
const gp_XYZ& p0,const gp_XYZ& p1,const gp_XYZ& p2,const gp_XYZ& p3)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
((1 - y) * p0 + x * p1 + y * p2 + (1 - x) * p3 ) -
|
((1 - y) * p0 + x * p1 + y * p2 + (1 - x) * p3 ) -
|
||||||
|
@ -501,13 +501,8 @@ static gp_XY project (const SMDS_MeshNode* theNode,
|
|||||||
}
|
}
|
||||||
double u, v, minVal = DBL_MAX;
|
double u, v, minVal = DBL_MAX;
|
||||||
for ( int i = theProjectorPS.NbExt(); i > 0; i-- )
|
for ( int i = theProjectorPS.NbExt(); i > 0; i-- )
|
||||||
#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
|
|
||||||
if ( theProjectorPS.SquareDistance( i ) < minVal ) {
|
if ( theProjectorPS.SquareDistance( i ) < minVal ) {
|
||||||
minVal = theProjectorPS.SquareDistance( i );
|
minVal = theProjectorPS.SquareDistance( i );
|
||||||
#else
|
|
||||||
if ( theProjectorPS.Value( i ) < minVal ) {
|
|
||||||
minVal = theProjectorPS.Value( i );
|
|
||||||
#endif
|
|
||||||
theProjectorPS.Point( i ).Parameter( u, v );
|
theProjectorPS.Point( i ).Parameter( u, v );
|
||||||
}
|
}
|
||||||
return gp_XY( u, v );
|
return gp_XY( u, v );
|
||||||
|
@ -2148,9 +2148,9 @@ TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
|
|||||||
if ( mainShape.IsSame( _subShape ))
|
if ( mainShape.IsSame( _subShape ))
|
||||||
return _subShape;
|
return _subShape;
|
||||||
|
|
||||||
const bool ignoreAuxiliaryHyps = false;
|
const bool skipAuxHyps = false;
|
||||||
list<const SMESHDS_Hypothesis*> aUsedHyp =
|
list<const SMESHDS_Hypothesis*> aUsedHyp =
|
||||||
theAlgo->GetUsedHypothesis( *_father, _subShape, ignoreAuxiliaryHyps ); // copy
|
theAlgo->GetUsedHypothesis( *_father, _subShape, skipAuxHyps ); // copy
|
||||||
|
|
||||||
// put in a compound all shapes with the same hypothesis assigned
|
// put in a compound all shapes with the same hypothesis assigned
|
||||||
// and a good ComputeState
|
// and a good ComputeState
|
||||||
@ -2161,11 +2161,13 @@ TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
|
|||||||
|
|
||||||
theSubs.clear();
|
theSubs.clear();
|
||||||
|
|
||||||
TopExp_Explorer anExplorer( mainShape, _subShape.ShapeType() );
|
SMESH_subMeshIteratorPtr smIt = _father->GetSubMesh( mainShape )->getDependsOnIterator(false);
|
||||||
for ( ; anExplorer.More(); anExplorer.Next() )
|
while ( smIt->more() )
|
||||||
{
|
{
|
||||||
const TopoDS_Shape& S = anExplorer.Current();
|
SMESH_subMesh* subMesh = smIt->next();
|
||||||
SMESH_subMesh* subMesh = _father->GetSubMesh( S );
|
const TopoDS_Shape& S = subMesh->_subShape;
|
||||||
|
if ( S.ShapeType() != this->_subShape.ShapeType() )
|
||||||
|
continue;
|
||||||
theSubs.push_back( subMesh );
|
theSubs.push_back( subMesh );
|
||||||
if ( subMesh == this )
|
if ( subMesh == this )
|
||||||
{
|
{
|
||||||
@ -2173,12 +2175,14 @@ TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
|
|||||||
}
|
}
|
||||||
else if ( subMesh->GetComputeState() == READY_TO_COMPUTE )
|
else if ( subMesh->GetComputeState() == READY_TO_COMPUTE )
|
||||||
{
|
{
|
||||||
SMESH_Algo* anAlgo = theGen->GetAlgo( subMesh );
|
SMESH_Algo* anAlgo = subMesh->GetAlgo();
|
||||||
if (strcmp( anAlgo->GetName(), theAlgo->GetName()) == 0 && // same algo
|
if (( anAlgo->IsSameName( *theAlgo )) && // same algo
|
||||||
anAlgo->GetUsedHypothesis( *_father, S, ignoreAuxiliaryHyps ) == aUsedHyp) // same hyps
|
( anAlgo->GetUsedHypothesis( *_father, S, skipAuxHyps ) == aUsedHyp )) // same hyps
|
||||||
|
{
|
||||||
aBuilder.Add( aCompound, S );
|
aBuilder.Add( aCompound, S );
|
||||||
if ( !subMesh->SubMeshesComputed() )
|
if ( !subMesh->SubMeshesComputed() )
|
||||||
theSubComputed = false;
|
theSubComputed = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +142,7 @@ SET(_moc_HEADERS
|
|||||||
SMESHGUI_PropertiesDlg.h
|
SMESHGUI_PropertiesDlg.h
|
||||||
SMESHGUI_Add0DElemsOnAllNodesDlg.h
|
SMESHGUI_Add0DElemsOnAllNodesDlg.h
|
||||||
SMESHGUI_FieldSelectorWdg.h
|
SMESHGUI_FieldSelectorWdg.h
|
||||||
|
SMESHGUI_DisplayEntitiesDlg.h
|
||||||
)
|
)
|
||||||
|
|
||||||
# header files / no moc processing
|
# header files / no moc processing
|
||||||
@ -249,6 +250,7 @@ SET(_other_SOURCES
|
|||||||
SMESHGUI_MeshEditPreview.cxx
|
SMESHGUI_MeshEditPreview.cxx
|
||||||
SMESHGUI_FileValidator.cxx
|
SMESHGUI_FileValidator.cxx
|
||||||
SMESHGUI_FieldSelectorWdg.cxx
|
SMESHGUI_FieldSelectorWdg.cxx
|
||||||
|
SMESHGUI_DisplayEntitiesDlg.cxx
|
||||||
)
|
)
|
||||||
|
|
||||||
# sources / to compile
|
# sources / to compile
|
||||||
|
@ -81,6 +81,7 @@
|
|||||||
#include "SMESHGUI_SymmetryDlg.h"
|
#include "SMESHGUI_SymmetryDlg.h"
|
||||||
#include "SMESHGUI_TranslationDlg.h"
|
#include "SMESHGUI_TranslationDlg.h"
|
||||||
#include "SMESHGUI_TransparencyDlg.h"
|
#include "SMESHGUI_TransparencyDlg.h"
|
||||||
|
#include "SMESHGUI_DisplayEntitiesDlg.h"
|
||||||
|
|
||||||
#include "SMESHGUI_FilterUtils.h"
|
#include "SMESHGUI_FilterUtils.h"
|
||||||
#include "SMESHGUI_GEOMGenUtils.h"
|
#include "SMESHGUI_GEOMGenUtils.h"
|
||||||
@ -91,14 +92,14 @@
|
|||||||
#include "SMESHGUI_Utils.h"
|
#include "SMESHGUI_Utils.h"
|
||||||
#include "SMESHGUI_VTKUtils.h"
|
#include "SMESHGUI_VTKUtils.h"
|
||||||
|
|
||||||
#include <SMESH_version.h>
|
#include "SMESH_version.h"
|
||||||
|
|
||||||
#include "SMESH_ControlsDef.hxx"
|
#include "SMESH_ControlsDef.hxx"
|
||||||
#include <SMESH_Actor.h>
|
#include "SMESH_Actor.h"
|
||||||
#include <SMESH_ActorUtils.h>
|
#include "SMESH_ActorUtils.h"
|
||||||
#include <SMESH_Client.hxx>
|
#include "SMESH_Client.hxx"
|
||||||
#include <SMESH_ScalarBarActor.h>
|
#include "SMESH_ScalarBarActor.h"
|
||||||
#include <SMESH_TypeFilter.hxx>
|
#include "SMESH_TypeFilter.hxx"
|
||||||
|
|
||||||
// SALOME GUI includes
|
// SALOME GUI includes
|
||||||
#include <SalomeApp_Application.h>
|
#include <SalomeApp_Application.h>
|
||||||
@ -132,7 +133,6 @@
|
|||||||
#include <QtxFontEdit.h>
|
#include <QtxFontEdit.h>
|
||||||
|
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
#ifndef DISABLE_PLOT2DVIEWER
|
#ifndef DISABLE_PLOT2DVIEWER
|
||||||
#include <SPlot2d_ViewModel.h>
|
#include <SPlot2d_ViewModel.h>
|
||||||
@ -1566,111 +1566,124 @@ namespace
|
|||||||
|
|
||||||
void Control( int theCommandID )
|
void Control( int theCommandID )
|
||||||
{
|
{
|
||||||
|
SMESH_Actor::eControl aControl = SMESH_Actor::eNone;
|
||||||
|
switch ( theCommandID ){
|
||||||
|
case SMESHOp::OpFreeNode:
|
||||||
|
aControl = SMESH_Actor::eFreeNodes;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpEqualNode:
|
||||||
|
aControl = SMESH_Actor::eCoincidentNodes;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpFreeEdge:
|
||||||
|
aControl = SMESH_Actor::eFreeEdges;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpFreeBorder:
|
||||||
|
aControl = SMESH_Actor::eFreeBorders;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpLength:
|
||||||
|
aControl = SMESH_Actor::eLength;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpConnection:
|
||||||
|
aControl = SMESH_Actor::eMultiConnection;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpEqualEdge:
|
||||||
|
aControl = SMESH_Actor::eCoincidentElems1D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpFreeFace:
|
||||||
|
aControl = SMESH_Actor::eFreeFaces;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpBareBorderFace:
|
||||||
|
aControl = SMESH_Actor::eBareBorderFace;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpOverConstrainedFace:
|
||||||
|
aControl = SMESH_Actor::eOverConstrainedFace;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpLength2D:
|
||||||
|
aControl = SMESH_Actor::eLength2D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpConnection2D:
|
||||||
|
aControl = SMESH_Actor::eMultiConnection2D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpArea:
|
||||||
|
aControl = SMESH_Actor::eArea;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpTaper:
|
||||||
|
aControl = SMESH_Actor::eTaper;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpAspectRatio:
|
||||||
|
aControl = SMESH_Actor::eAspectRatio;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpMinimumAngle:
|
||||||
|
aControl = SMESH_Actor::eMinimumAngle;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpWarpingAngle:
|
||||||
|
aControl = SMESH_Actor::eWarping;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpSkew:
|
||||||
|
aControl = SMESH_Actor::eSkew;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpMaxElementLength2D:
|
||||||
|
aControl = SMESH_Actor::eMaxElementLength2D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpEqualFace:
|
||||||
|
aControl = SMESH_Actor:: eCoincidentElems2D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpAspectRatio3D:
|
||||||
|
aControl = SMESH_Actor::eAspectRatio3D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpVolume:
|
||||||
|
aControl = SMESH_Actor::eVolume3D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpMaxElementLength3D:
|
||||||
|
aControl = SMESH_Actor::eMaxElementLength3D;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpBareBorderVolume:
|
||||||
|
aControl = SMESH_Actor::eBareBorderVolume;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpOverConstrainedVolume:
|
||||||
|
aControl = SMESH_Actor::eOverConstrainedVolume;
|
||||||
|
break;
|
||||||
|
case SMESHOp::OpEqualVolume:
|
||||||
|
aControl = SMESH_Actor::eCoincidentElems3D;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
|
||||||
LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
|
LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
|
||||||
SALOME_ListIO selected;
|
SALOME_ListIO selected;
|
||||||
if( aSel )
|
if( aSel )
|
||||||
aSel->selectedObjects( selected );
|
aSel->selectedObjects( selected );
|
||||||
|
|
||||||
if( !selected.IsEmpty() ){
|
if( !selected.IsEmpty() ){
|
||||||
Handle(SALOME_InteractiveObject) anIO = selected.First();
|
SALOME_ListIteratorOfListIO It(selected);
|
||||||
if(!anIO.IsNull()){
|
for ( ; It.More(); It.Next())
|
||||||
SMESH_Actor::eControl aControl = SMESH_Actor::eNone;
|
{
|
||||||
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) {
|
Handle(SALOME_InteractiveObject) anIO = It.Value();
|
||||||
switch ( theCommandID ){
|
if(!anIO.IsNull()){
|
||||||
case SMESHOp::OpFreeNode:
|
_PTR(SObject) SO = aStudy->FindObjectID( It.Value()->getEntry() );
|
||||||
aControl = SMESH_Actor::eFreeNodes;
|
if ( SO ) {
|
||||||
break;
|
CORBA::Object_var aObject = SMESH::SObjectToObject( SO );
|
||||||
case SMESHOp::OpEqualNode:
|
SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( aObject );
|
||||||
aControl = SMESH_Actor::eCoincidentNodes;
|
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject );
|
||||||
break;
|
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aObject );
|
||||||
case SMESHOp::OpFreeEdge:
|
if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) {
|
||||||
aControl = SMESH_Actor::eFreeEdges;
|
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) {
|
||||||
break;
|
anActor->SetControlMode(aControl);
|
||||||
case SMESHOp::OpFreeBorder:
|
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
|
||||||
aControl = SMESH_Actor::eFreeBorders;
|
SMESH::RepaintCurrentView();
|
||||||
break;
|
|
||||||
case SMESHOp::OpLength:
|
|
||||||
aControl = SMESH_Actor::eLength;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpConnection:
|
|
||||||
aControl = SMESH_Actor::eMultiConnection;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpEqualEdge:
|
|
||||||
aControl = SMESH_Actor::eCoincidentElems1D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpFreeFace:
|
|
||||||
aControl = SMESH_Actor::eFreeFaces;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpBareBorderFace:
|
|
||||||
aControl = SMESH_Actor::eBareBorderFace;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpOverConstrainedFace:
|
|
||||||
aControl = SMESH_Actor::eOverConstrainedFace;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpLength2D:
|
|
||||||
aControl = SMESH_Actor::eLength2D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpConnection2D:
|
|
||||||
aControl = SMESH_Actor::eMultiConnection2D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpArea:
|
|
||||||
aControl = SMESH_Actor::eArea;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpTaper:
|
|
||||||
aControl = SMESH_Actor::eTaper;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpAspectRatio:
|
|
||||||
aControl = SMESH_Actor::eAspectRatio;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpMinimumAngle:
|
|
||||||
aControl = SMESH_Actor::eMinimumAngle;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpWarpingAngle:
|
|
||||||
aControl = SMESH_Actor::eWarping;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpSkew:
|
|
||||||
aControl = SMESH_Actor::eSkew;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpMaxElementLength2D:
|
|
||||||
aControl = SMESH_Actor::eMaxElementLength2D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpEqualFace:
|
|
||||||
aControl = SMESH_Actor:: eCoincidentElems2D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpAspectRatio3D:
|
|
||||||
aControl = SMESH_Actor::eAspectRatio3D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpVolume:
|
|
||||||
aControl = SMESH_Actor::eVolume3D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpMaxElementLength3D:
|
|
||||||
aControl = SMESH_Actor::eMaxElementLength3D;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpBareBorderVolume:
|
|
||||||
aControl = SMESH_Actor::eBareBorderVolume;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpOverConstrainedVolume:
|
|
||||||
aControl = SMESH_Actor::eOverConstrainedVolume;
|
|
||||||
break;
|
|
||||||
case SMESHOp::OpEqualVolume:
|
|
||||||
aControl = SMESH_Actor::eCoincidentElems3D;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
anActor->SetControlMode(aControl);
|
|
||||||
anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() );
|
|
||||||
SMESH::RepaintCurrentView();
|
|
||||||
#ifndef DISABLE_PLOT2DVIEWER
|
#ifndef DISABLE_PLOT2DVIEWER
|
||||||
if(anActor->GetPlot2Histogram()) {
|
if(anActor->GetPlot2Histogram()) {
|
||||||
SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram();
|
SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram();
|
||||||
QString functorName = functorToString( anActor->GetFunctor());
|
QString functorName = functorToString( anActor->GetFunctor());
|
||||||
QString aHistogramName("%1 : %2");
|
QString aHistogramName("%1 : %2");
|
||||||
aHistogramName = aHistogramName.arg(anIO->getName()).arg(functorName);
|
aHistogramName = aHistogramName.arg(anIO->getName()).arg(functorName);
|
||||||
aHistogram->setName(aHistogramName);
|
aHistogram->setName(aHistogramName);
|
||||||
aHistogram->setHorTitle(functorName);
|
aHistogram->setHorTitle(functorName);
|
||||||
SMESH::ProcessIn2DViewers(anActor);
|
SMESH::ProcessIn2DViewers(anActor);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1743,6 +1756,19 @@ namespace
|
|||||||
return RefType;
|
return RefType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint randomize( uint size )
|
||||||
|
{
|
||||||
|
static bool initialized = false;
|
||||||
|
if ( !initialized ) {
|
||||||
|
qsrand( QDateTime::currentDateTime().toTime_t() );
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
uint v = qrand();
|
||||||
|
v = uint( (double)( v ) / RAND_MAX * size );
|
||||||
|
v = qMax( uint(0), qMin ( v, size-1 ) );
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
} //namespace
|
} //namespace
|
||||||
|
|
||||||
void SMESHGUI::OnEditDelete()
|
void SMESHGUI::OnEditDelete()
|
||||||
@ -2503,6 +2529,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
|||||||
::SetDisplayEntity(theCommandID);
|
::SetDisplayEntity(theCommandID);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Choose entities to be displayed
|
||||||
|
case SMESHOp::OpDEChoose:
|
||||||
|
{
|
||||||
|
( new SMESHGUI_DisplayEntitiesDlg( SMESHGUI::desktop() ) )->exec();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case SMESHOp::OpOrientationOnFaces:
|
case SMESHOp::OpOrientationOnFaces:
|
||||||
{
|
{
|
||||||
LightApp_SelectionMgr* mgr = selectionMgr();
|
LightApp_SelectionMgr* mgr = selectionMgr();
|
||||||
@ -3530,19 +3563,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
|||||||
LightApp_SelectionMgr* mgr = selectionMgr();
|
LightApp_SelectionMgr* mgr = selectionMgr();
|
||||||
SALOME_ListIO selected; mgr->selectedObjects( selected );
|
SALOME_ListIO selected; mgr->selectedObjects( selected );
|
||||||
|
|
||||||
if ( selected.Extent() == 1 && selected.First()->hasEntry() ) {
|
if( !selected.IsEmpty() ) {
|
||||||
_PTR(SObject) SO = aStudy->FindObjectID( selected.First()->getEntry() );
|
SUIT_OverrideCursor wc;
|
||||||
if ( SO ) {
|
::Control( theCommandID );
|
||||||
CORBA::Object_var aObject = SMESH::SObjectToObject( SO );
|
break;
|
||||||
SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( aObject );
|
|
||||||
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject );
|
|
||||||
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aObject );
|
|
||||||
if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) {
|
|
||||||
SUIT_OverrideCursor wc;
|
|
||||||
::Control( theCommandID );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
SUIT_MessageBox::warning(desktop(),
|
SUIT_MessageBox::warning(desktop(),
|
||||||
tr( "SMESH_WRN_WARNING" ),
|
tr( "SMESH_WRN_WARNING" ),
|
||||||
@ -3855,8 +3879,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createSMESHAction( SMESHOp::OpRemoveOrphanNodes, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" );
|
createSMESHAction( SMESHOp::OpRemoveOrphanNodes, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" );
|
||||||
createSMESHAction( SMESHOp::OpClearMesh, "CLEAR_MESH", "ICON_CLEAR_MESH" );
|
createSMESHAction( SMESHOp::OpClearMesh, "CLEAR_MESH", "ICON_CLEAR_MESH" );
|
||||||
|
|
||||||
createSMESHAction( SMESHOp::OpRenumberingNodes, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" );
|
//createSMESHAction( SMESHOp::OpRenumberingNodes, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" );
|
||||||
createSMESHAction( SMESHOp::OpRenumberingElements, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" );
|
//createSMESHAction( SMESHOp::OpRenumberingElements, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" );
|
||||||
|
|
||||||
createSMESHAction( SMESHOp::OpTranslation, "TRANS", "ICON_SMESH_TRANSLATION_VECTOR" );
|
createSMESHAction( SMESHOp::OpTranslation, "TRANS", "ICON_SMESH_TRANSLATION_VECTOR" );
|
||||||
createSMESHAction( SMESHOp::OpRotation, "ROT", "ICON_DLG_MESH_ROTATION" );
|
createSMESHAction( SMESHOp::OpRotation, "ROT", "ICON_DLG_MESH_ROTATION" );
|
||||||
@ -3899,7 +3923,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createSMESHAction( SMESHOp::OpDEFaces, "FACES", "ICON_DLG_TRIANGLE", 0, true );
|
createSMESHAction( SMESHOp::OpDEFaces, "FACES", "ICON_DLG_TRIANGLE", 0, true );
|
||||||
createSMESHAction( SMESHOp::OpDEVolumes, "VOLUMES", "ICON_DLG_TETRAS", 0, true );
|
createSMESHAction( SMESHOp::OpDEVolumes, "VOLUMES", "ICON_DLG_TETRAS", 0, true );
|
||||||
createSMESHAction( SMESHOp::OpDEBalls, "BALLS", "ICON_DLG_BALL", 0, true );
|
createSMESHAction( SMESHOp::OpDEBalls, "BALLS", "ICON_DLG_BALL", 0, true );
|
||||||
createSMESHAction( SMESHOp::OpDEAllEntity, "ALL" );
|
createSMESHAction( SMESHOp::OpDEChoose, "CHOOSE", "ICON_DLG_CHOOSE", 0, false );
|
||||||
|
createSMESHAction( SMESHOp::OpDEAllEntity, "ALL", "ICON_DLG_CHOOSE_ALL", 0, false );
|
||||||
createSMESHAction( SMESHOp::OpOrientationOnFaces, "FACE_ORIENTATION", "", 0, true );
|
createSMESHAction( SMESHOp::OpOrientationOnFaces, "FACE_ORIENTATION", "", 0, true );
|
||||||
|
|
||||||
createSMESHAction( SMESHOp::OpRepresentationLines, "LINE_REPRESENTATION", "", 0, true );
|
createSMESHAction( SMESHOp::OpRepresentationLines, "LINE_REPRESENTATION", "", 0, true );
|
||||||
@ -3927,6 +3952,23 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
|
|
||||||
createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" );
|
createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" );
|
||||||
|
|
||||||
|
QList<int> aCtrlActions;
|
||||||
|
aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode // node controls
|
||||||
|
<< SMESHOp::OpFreeEdge << SMESHOp::OpFreeBorder
|
||||||
|
<< SMESHOp::OpLength << SMESHOp::OpConnection << SMESHOp::OpEqualEdge // edge controls
|
||||||
|
<< SMESHOp::OpFreeFace << SMESHOp::OpLength2D << SMESHOp::OpConnection2D
|
||||||
|
<< SMESHOp::OpArea << SMESHOp::OpTaper << SMESHOp::OpAspectRatio
|
||||||
|
<< SMESHOp::OpMinimumAngle << SMESHOp::OpWarpingAngle << SMESHOp::OpSkew
|
||||||
|
<< SMESHOp::OpMaxElementLength2D << SMESHOp::OpBareBorderFace
|
||||||
|
<< SMESHOp::OpOverConstrainedFace << SMESHOp::OpEqualFace // face controls
|
||||||
|
<< SMESHOp::OpAspectRatio3D << SMESHOp::OpVolume
|
||||||
|
<< SMESHOp::OpMaxElementLength3D << SMESHOp::OpBareBorderVolume
|
||||||
|
<< SMESHOp::OpOverConstrainedVolume << SMESHOp::OpEqualVolume; // volume controls
|
||||||
|
QActionGroup* aCtrlGroup = new QActionGroup( application()->desktop() );
|
||||||
|
aCtrlGroup->setExclusive( true );
|
||||||
|
for( int i = 0; i < aCtrlActions.size(); i++ )
|
||||||
|
aCtrlGroup->addAction( action( aCtrlActions[i] ) );
|
||||||
|
|
||||||
// ----- create menu --------------
|
// ----- create menu --------------
|
||||||
int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ),
|
int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ),
|
||||||
editId = createMenu( tr( "MEN_EDIT" ), -1, 3 ),
|
editId = createMenu( tr( "MEN_EDIT" ), -1, 3 ),
|
||||||
@ -3947,7 +3989,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
volumeId = createMenu( tr( "MEN_VOLUME_CTRL" ), ctrlId, -1, 10 ),
|
volumeId = createMenu( tr( "MEN_VOLUME_CTRL" ), ctrlId, -1, 10 ),
|
||||||
addId = createMenu( tr( "MEN_ADD" ), modifyId, 402 ),
|
addId = createMenu( tr( "MEN_ADD" ), modifyId, 402 ),
|
||||||
removeId = createMenu( tr( "MEN_REMOVE" ), modifyId, 403 ),
|
removeId = createMenu( tr( "MEN_REMOVE" ), modifyId, 403 ),
|
||||||
renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ),
|
//renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ),
|
||||||
transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ),
|
transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ),
|
||||||
basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 );
|
basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 );
|
||||||
|
|
||||||
@ -4031,6 +4073,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( SMESHOp::OpOverConstrainedVolume, volumeId, -1 );
|
createMenu( SMESHOp::OpOverConstrainedVolume, volumeId, -1 );
|
||||||
createMenu( SMESHOp::OpEqualVolume, volumeId, -1 );
|
createMenu( SMESHOp::OpEqualVolume, volumeId, -1 );
|
||||||
createMenu( separator(), ctrlId, -1 );
|
createMenu( separator(), ctrlId, -1 );
|
||||||
|
createMenu( SMESHOp::OpReset, ctrlId, -1 );
|
||||||
|
createMenu( separator(), ctrlId, -1 );
|
||||||
createMenu( SMESHOp::OpOverallMeshQuality, ctrlId, -1 );
|
createMenu( SMESHOp::OpOverallMeshQuality, ctrlId, -1 );
|
||||||
|
|
||||||
createMenu( SMESHOp::OpNode, addId, -1 );
|
createMenu( SMESHOp::OpNode, addId, -1 );
|
||||||
@ -4067,8 +4111,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( separator(), removeId, -1 );
|
createMenu( separator(), removeId, -1 );
|
||||||
createMenu( SMESHOp::OpClearMesh, removeId, -1 );
|
createMenu( SMESHOp::OpClearMesh, removeId, -1 );
|
||||||
|
|
||||||
createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 );
|
//createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 );
|
||||||
createMenu( SMESHOp::OpRenumberingElements, renumId, -1 );
|
//createMenu( SMESHOp::OpRenumberingElements, renumId, -1 );
|
||||||
|
|
||||||
createMenu( SMESHOp::OpTranslation, transfId, -1 );
|
createMenu( SMESHOp::OpTranslation, transfId, -1 );
|
||||||
createMenu( SMESHOp::OpRotation, transfId, -1 );
|
createMenu( SMESHOp::OpRotation, transfId, -1 );
|
||||||
@ -4103,21 +4147,21 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createMenu( SMESHOp::OpUpdate, viewId, -1 );
|
createMenu( SMESHOp::OpUpdate, viewId, -1 );
|
||||||
|
|
||||||
// ----- create toolbars --------------
|
// ----- create toolbars --------------
|
||||||
int meshTb = createTool( tr( "TB_MESH" ) ),
|
int meshTb = createTool( tr( "TB_MESH" ), QString( "SMESHMeshToolbar" ) ),
|
||||||
info = createTool( tr( "TB_INFO" ) ),
|
info = createTool( tr( "TB_INFO" ), QString( "SMESHInformationToolbar" ) ),
|
||||||
groupTb = createTool( tr( "TB_GROUP" ) ),
|
groupTb = createTool( tr( "TB_GROUP" ), QString( "SMESHGroupToolbar" ) ),
|
||||||
ctrl0dTb = createTool( tr( "TB_CTRL0D" ) ),
|
ctrl0dTb = createTool( tr( "TB_CTRL0D" ), QString( "SMESHNodeControlsToolbar" ) ),
|
||||||
ctrl1dTb = createTool( tr( "TB_CTRL1D" ) ),
|
ctrl1dTb = createTool( tr( "TB_CTRL1D" ), QString( "SMESHEdgeControlsToolbar" ) ),
|
||||||
ctrl2dTb = createTool( tr( "TB_CTRL2D" ) ),
|
ctrl2dTb = createTool( tr( "TB_CTRL2D" ), QString( "SMESHFaceControlsToolbar" ) ),
|
||||||
ctrl3dTb = createTool( tr( "TB_CTRL3D" ) ),
|
ctrl3dTb = createTool( tr( "TB_CTRL3D" ), QString( "SMESHVolumeControlsToolbar" ) ),
|
||||||
addElemTb = createTool( tr( "TB_ADD" ) ),
|
addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ),
|
||||||
addNonElemTb = createTool( tr( "TB_ADDNON" ) ),
|
addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ),
|
||||||
remTb = createTool( tr( "TB_REM" ) ),
|
remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ),
|
||||||
renumbTb = createTool( tr( "TB_RENUMBER" ) ),
|
//renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ),
|
||||||
transformTb = createTool( tr( "TB_TRANSFORM" ) ),
|
transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ),
|
||||||
modifyTb = createTool( tr( "TB_MODIFY" ) ),
|
modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ),
|
||||||
measuremTb = createTool( tr( "TB_MEASUREM" ) ),
|
measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ),
|
||||||
dispModeTb = createTool( tr( "TB_DISP_MODE" ) );
|
dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) );
|
||||||
|
|
||||||
createTool( SMESHOp::OpCreateMesh, meshTb );
|
createTool( SMESHOp::OpCreateMesh, meshTb );
|
||||||
createTool( SMESHOp::OpCreateSubMesh, meshTb );
|
createTool( SMESHOp::OpCreateSubMesh, meshTb );
|
||||||
@ -4201,8 +4245,8 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
createTool( SMESHOp::OpRemoveOrphanNodes, remTb );
|
createTool( SMESHOp::OpRemoveOrphanNodes, remTb );
|
||||||
createTool( SMESHOp::OpClearMesh, remTb );
|
createTool( SMESHOp::OpClearMesh, remTb );
|
||||||
|
|
||||||
createTool( SMESHOp::OpRenumberingNodes, renumbTb );
|
//createTool( SMESHOp::OpRenumberingNodes, renumbTb );
|
||||||
createTool( SMESHOp::OpRenumberingElements, renumbTb );
|
//createTool( SMESHOp::OpRenumberingElements, renumbTb );
|
||||||
|
|
||||||
createTool( SMESHOp::OpTranslation, transformTb );
|
createTool( SMESHOp::OpTranslation, transformTb );
|
||||||
createTool( SMESHOp::OpRotation, transformTb );
|
createTool( SMESHOp::OpRotation, transformTb );
|
||||||
@ -4413,6 +4457,11 @@ void SMESHGUI::initialize( CAM_Application* app )
|
|||||||
|
|
||||||
popupMgr()->insert( separator(), anId, -1 );
|
popupMgr()->insert( separator(), anId, -1 );
|
||||||
|
|
||||||
|
popupMgr()->insert( action( SMESHOp::OpDEChoose ), anId, -1 );
|
||||||
|
popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&&" + aType + "&&" + isNotEmpty, QtxPopupMgr::VisibleRule );
|
||||||
|
|
||||||
|
popupMgr()->insert( separator(), anId, -1 );
|
||||||
|
|
||||||
popupMgr()->insert( action( SMESHOp::OpDEAllEntity ), anId, -1 );
|
popupMgr()->insert( action( SMESHOp::OpDEAllEntity ), anId, -1 );
|
||||||
popupMgr()->setRule( action( SMESHOp::OpDEAllEntity ), aDiffElemsInVTK + "&& isVisible && not( elemTypes in entityMode )", QtxPopupMgr::VisibleRule );
|
popupMgr()->setRule( action( SMESHOp::OpDEAllEntity ), aDiffElemsInVTK + "&& isVisible && not( elemTypes in entityMode )", QtxPopupMgr::VisibleRule );
|
||||||
|
|
||||||
@ -4731,6 +4780,8 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study )
|
|||||||
|
|
||||||
void SMESHGUI::studyClosed( SUIT_Study* s )
|
void SMESHGUI::studyClosed( SUIT_Study* s )
|
||||||
{
|
{
|
||||||
|
if( !s )
|
||||||
|
return;
|
||||||
SMESH::RemoveVisuData( s->id() );
|
SMESH::RemoveVisuData( s->id() );
|
||||||
SalomeApp_Module::studyClosed( s );
|
SalomeApp_Module::studyClosed( s );
|
||||||
}
|
}
|
||||||
@ -4879,7 +4930,7 @@ void SMESHGUI::createPreferences()
|
|||||||
addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" );
|
addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" );
|
||||||
int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" );
|
int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" );
|
||||||
setPreferenceProperty( prec, "min", 0 );
|
setPreferenceProperty( prec, "min", 0 );
|
||||||
setPreferenceProperty( prec, "max", 16 );
|
setPreferenceProperty( prec, "max", 100 );
|
||||||
int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" );
|
int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" );
|
||||||
setPreferenceProperty( doubleNodesTol, "precision", 10 );
|
setPreferenceProperty( doubleNodesTol, "precision", 10 );
|
||||||
setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 );
|
setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 );
|
||||||
@ -6901,7 +6952,7 @@ SALOMEDS::Color SMESHGUI::getPredefinedUniqueColor()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static int currentColor = 0;
|
static int currentColor = randomize( colors.size() );
|
||||||
|
|
||||||
SALOMEDS::Color color;
|
SALOMEDS::Color color;
|
||||||
color.R = (double)colors[currentColor].red() / 255.0;
|
color.R = (double)colors[currentColor].red() / 255.0;
|
||||||
|
@ -463,9 +463,7 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::onSelTypeChange(int selType)
|
|||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
* \brief Install
|
* \brief Install filters
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
|
|
||||||
|
@ -586,6 +586,7 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
|
|||||||
SMESH::long_array_var anIdList = new SMESH::long_array;
|
SMESH::long_array_var anIdList = new SMESH::long_array;
|
||||||
anIdList->length( 1 );
|
anIdList->length( 1 );
|
||||||
anIdList[0] = -1;
|
anIdList[0] = -1;
|
||||||
|
const bool onlyNodesInMesh = ( myMesh->NbElements() == 0 );
|
||||||
|
|
||||||
switch (myElementType) {
|
switch (myElementType) {
|
||||||
case SMDSAbs_0DElement:
|
case SMDSAbs_0DElement:
|
||||||
@ -645,6 +646,8 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
|
|||||||
mySelectionMgr->setSelectedObjects( aList, false );
|
mySelectionMgr->setSelectedObjects( aList, false );
|
||||||
|
|
||||||
mySimulation->SetVisibility(false);
|
mySimulation->SetVisibility(false);
|
||||||
|
if ( onlyNodesInMesh )
|
||||||
|
myActor->SetRepresentation( SMESH_Actor::eEdge ); // wireframe
|
||||||
SMESH::UpdateView();
|
SMESH::UpdateView();
|
||||||
|
|
||||||
buttonOk->setEnabled(false);
|
buttonOk->setEnabled(false);
|
||||||
|
@ -166,9 +166,10 @@ SMESHGUI_CopyMeshDlg::SMESHGUI_CopyMeshDlg( SMESHGUI* theModule )
|
|||||||
myCopyGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
|
myCopyGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
|
||||||
myCopyGroupsCheck->setChecked(false);
|
myCopyGroupsCheck->setChecked(false);
|
||||||
|
|
||||||
// CheckBox for keeping ids
|
// CheckBox for keeping ids ( OBSOLETE )
|
||||||
myKeepIdsCheck = new QCheckBox(tr("SMESH_KEEP_IDS"), GroupArguments);
|
myKeepIdsCheck = new QCheckBox(tr("SMESH_KEEP_IDS"), GroupArguments);
|
||||||
myKeepIdsCheck->setChecked(true);
|
myKeepIdsCheck->setChecked(true);
|
||||||
|
myKeepIdsCheck->hide();
|
||||||
|
|
||||||
// layout
|
// layout
|
||||||
GroupArgumentsLayout->addWidget(myTextLabelElements, 0, 0);
|
GroupArgumentsLayout->addWidget(myTextLabelElements, 0, 0);
|
||||||
@ -178,7 +179,7 @@ SMESHGUI_CopyMeshDlg::SMESHGUI_CopyMeshDlg( SMESHGUI* theModule )
|
|||||||
GroupArgumentsLayout->addWidget(meshNameLabel, 2, 0);
|
GroupArgumentsLayout->addWidget(meshNameLabel, 2, 0);
|
||||||
GroupArgumentsLayout->addWidget(myMeshNameEdit, 2, 1, 1, 5);
|
GroupArgumentsLayout->addWidget(myMeshNameEdit, 2, 1, 1, 5);
|
||||||
GroupArgumentsLayout->addWidget(myCopyGroupsCheck, 3, 0, 1, 6);
|
GroupArgumentsLayout->addWidget(myCopyGroupsCheck, 3, 0, 1, 6);
|
||||||
GroupArgumentsLayout->addWidget(myKeepIdsCheck, 4, 0, 1, 6);
|
// GroupArgumentsLayout->addWidget(myKeepIdsCheck, 4, 0, 1, 6);
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
GroupButtons = new QGroupBox(this);
|
GroupButtons = new QGroupBox(this);
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
#include <LightApp_SelectionMgr.h>
|
#include <LightApp_SelectionMgr.h>
|
||||||
|
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
#include <SVTK_Selection.h>
|
#include <SVTK_Selection.h>
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
|
247
src/SMESHGUI/SMESHGUI_DisplayEntitiesDlg.cxx
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2.1 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
//
|
||||||
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
|
//
|
||||||
|
// File : SMESHGUI_DisplayEntitiesDlg.cxx
|
||||||
|
// Author : Alexander KOVALEV, Open CASCADE S.A.S. (alexander.kovalev@opencascade.com)
|
||||||
|
|
||||||
|
#include "SMESHGUI_DisplayEntitiesDlg.h"
|
||||||
|
|
||||||
|
#include "SMESHGUI.h"
|
||||||
|
#include "SMESHGUI_Utils.h"
|
||||||
|
#include "SMESHGUI_VTKUtils.h"
|
||||||
|
#include "SMESHGUI_MeshUtils.h"
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QGridLayout>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QCheckBox>
|
||||||
|
|
||||||
|
#include <SUIT_Session.h>
|
||||||
|
#include <SUIT_MessageBox.h>
|
||||||
|
#include <SUIT_ResourceMgr.h>
|
||||||
|
#include <LightApp_Application.h>
|
||||||
|
#include <LightApp_SelectionMgr.h>
|
||||||
|
#include <SALOME_ListIO.hxx>
|
||||||
|
|
||||||
|
const int MARGIN = 9;
|
||||||
|
const int SPACING = 6;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class SMESHGUI_DisplayEntitiesDlg
|
||||||
|
\brief Dialog box to select entities to be displayed in viewer
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
\brief Constructor
|
||||||
|
\param parent parent widget
|
||||||
|
*/
|
||||||
|
SMESHGUI_DisplayEntitiesDlg::SMESHGUI_DisplayEntitiesDlg( QWidget* parent )
|
||||||
|
: SMESHGUI_Dialog( parent, true, false, Standard )
|
||||||
|
{
|
||||||
|
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
|
||||||
|
|
||||||
|
LightApp_SelectionMgr* mgr = SMESHGUI::selectionMgr();
|
||||||
|
SALOME_ListIO selected;
|
||||||
|
mgr->selectedObjects( selected );
|
||||||
|
SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil();
|
||||||
|
myActor = 0;
|
||||||
|
myNbCheckedButtons = 0;
|
||||||
|
|
||||||
|
SALOME_ListIteratorOfListIO it( selected );
|
||||||
|
myIObject = selected.First();
|
||||||
|
if ( myIObject->hasEntry() ) {
|
||||||
|
myActor = SMESH::FindActorByEntry( myIObject->getEntry() );
|
||||||
|
}
|
||||||
|
myEntityMode = myActor ? myActor->GetEntityMode() : 0;
|
||||||
|
|
||||||
|
aMesh = SMESH::GetMeshByIO( myIObject );
|
||||||
|
|
||||||
|
// set title
|
||||||
|
setWindowTitle( tr( "MEN_DISP_ENT" ) );
|
||||||
|
|
||||||
|
// create widgets
|
||||||
|
QGroupBox* anEntitiesGrp = new QGroupBox( tr( "SMESH_MESHINFO_ENTITIES" ), mainFrame() );
|
||||||
|
QGridLayout* hl = new QGridLayout( anEntitiesGrp );
|
||||||
|
hl->setMargin( MARGIN );
|
||||||
|
hl->setSpacing( SPACING );
|
||||||
|
int nbElements;
|
||||||
|
|
||||||
|
// 0DElements
|
||||||
|
nbElements = myActor ? myActor->GetObject()->GetNbEntities( SMDSAbs_0DElement ) : aMesh->Nb0DElements();
|
||||||
|
my0DElemsTB = new QCheckBox( tr("SMESH_ELEMS0D"), anEntitiesGrp );
|
||||||
|
my0DElemsTB->setIcon( QIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_DLG_ELEM0D" ) ) ) );
|
||||||
|
bool has0DElems = myEntityMode & SMESH_Actor::e0DElements;
|
||||||
|
my0DElemsTB->setChecked( has0DElems );
|
||||||
|
if ( has0DElems )
|
||||||
|
myNbCheckedButtons++;
|
||||||
|
connect( my0DElemsTB, SIGNAL(toggled(bool)), this, SLOT(onChangeEntityMode(bool)) );
|
||||||
|
QLabel* nb0DElemsLab = new QLabel( QString("%1").arg(nbElements).toLatin1().data(), anEntitiesGrp );
|
||||||
|
hl->addWidget( my0DElemsTB, 0, 0 );
|
||||||
|
hl->addWidget( nb0DElemsLab, 0, 1 );
|
||||||
|
my0DElemsTB->setEnabled( nbElements );
|
||||||
|
nb0DElemsLab->setEnabled( nbElements );
|
||||||
|
|
||||||
|
// Edges
|
||||||
|
nbElements = myActor ? myActor->GetObject()->GetNbEntities( SMDSAbs_Edge ) : aMesh->NbEdges();
|
||||||
|
myEdgesTB = new QCheckBox( tr("SMESH_EDGES"), anEntitiesGrp );
|
||||||
|
myEdgesTB->setIcon( QIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_DLG_EDGE" ) ) ) );
|
||||||
|
bool hasEdges = myEntityMode & SMESH_Actor::eEdges;
|
||||||
|
myEdgesTB->setChecked( hasEdges );
|
||||||
|
if ( hasEdges )
|
||||||
|
myNbCheckedButtons++;
|
||||||
|
connect( myEdgesTB, SIGNAL(toggled(bool)), this, SLOT(onChangeEntityMode(bool)) );
|
||||||
|
QLabel* nbEdgesLab = new QLabel( QString("%1").arg(nbElements).toLatin1().data(), anEntitiesGrp );
|
||||||
|
hl->addWidget( myEdgesTB, 1, 0 );
|
||||||
|
hl->addWidget( nbEdgesLab, 1, 1 );
|
||||||
|
myEdgesTB->setEnabled( nbElements );
|
||||||
|
nbEdgesLab->setEnabled( nbElements );
|
||||||
|
|
||||||
|
// Faces
|
||||||
|
nbElements = myActor ? myActor->GetObject()->GetNbEntities( SMDSAbs_Face ) : aMesh->NbFaces();
|
||||||
|
myFacesTB = new QCheckBox( tr("SMESH_FACES"), anEntitiesGrp );
|
||||||
|
myFacesTB->setIcon( QIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_DLG_TRIANGLE" ) ) ) );
|
||||||
|
bool hasFaces = myEntityMode & SMESH_Actor::eFaces;
|
||||||
|
myFacesTB->setChecked( hasFaces );
|
||||||
|
if ( hasFaces )
|
||||||
|
myNbCheckedButtons++;
|
||||||
|
connect( myFacesTB, SIGNAL(toggled(bool)), this, SLOT(onChangeEntityMode(bool)) );
|
||||||
|
QLabel* nbFacesLab = new QLabel( QString("%1").arg(nbElements).toLatin1().data(), anEntitiesGrp );
|
||||||
|
hl->addWidget( myFacesTB, 2, 0 );
|
||||||
|
hl->addWidget( nbFacesLab, 2, 1 );
|
||||||
|
myFacesTB->setEnabled( nbElements );
|
||||||
|
nbFacesLab->setEnabled( nbElements );
|
||||||
|
|
||||||
|
// Volumes
|
||||||
|
nbElements = myActor ? myActor->GetObject()->GetNbEntities( SMDSAbs_Volume ) : aMesh->NbVolumes();
|
||||||
|
myVolumesTB = new QCheckBox( tr("SMESH_VOLUMES"), anEntitiesGrp );
|
||||||
|
myVolumesTB->setIcon( QIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_DLG_TETRAS" ) ) ) );
|
||||||
|
bool hasVolumes = myEntityMode & SMESH_Actor::eVolumes;
|
||||||
|
myVolumesTB->setChecked( hasVolumes );
|
||||||
|
if ( hasVolumes )
|
||||||
|
myNbCheckedButtons++;
|
||||||
|
connect( myVolumesTB, SIGNAL(toggled(bool)), this, SLOT(onChangeEntityMode(bool) ) );
|
||||||
|
QLabel* nbVolumesLab = new QLabel( QString("%1").arg(nbElements).toLatin1().data(), anEntitiesGrp );
|
||||||
|
hl->addWidget( myVolumesTB, 3, 0 );
|
||||||
|
hl->addWidget( nbVolumesLab, 3, 1 );
|
||||||
|
myVolumesTB->setEnabled( nbElements );
|
||||||
|
nbVolumesLab->setEnabled( nbElements );
|
||||||
|
|
||||||
|
// Balls
|
||||||
|
nbElements = myActor ? myActor->GetObject()->GetNbEntities( SMDSAbs_Ball ) : aMesh->NbBalls();
|
||||||
|
myBallsTB = new QCheckBox( tr("SMESH_BALLS"), anEntitiesGrp );
|
||||||
|
myBallsTB->setIcon( QIcon( aResMgr->loadPixmap( "SMESH", tr( "ICON_DLG_BALL" ) ) ) );
|
||||||
|
bool hasBalls = myEntityMode & SMESH_Actor::eBallElem;
|
||||||
|
myBallsTB->setChecked( hasBalls );
|
||||||
|
if ( hasBalls )
|
||||||
|
myNbCheckedButtons++;
|
||||||
|
connect( myBallsTB, SIGNAL(toggled(bool)), this, SLOT(onChangeEntityMode(bool)) );
|
||||||
|
QLabel* nbBallsLab = new QLabel( QString("%1").arg(nbElements).toLatin1().data(), anEntitiesGrp );
|
||||||
|
hl->addWidget( myBallsTB, 4, 0 );
|
||||||
|
hl->addWidget( nbBallsLab, 4, 1 );
|
||||||
|
myBallsTB->setEnabled( nbElements );
|
||||||
|
nbBallsLab->setEnabled( nbElements );
|
||||||
|
|
||||||
|
QVBoxLayout* aDlgLay = new QVBoxLayout( mainFrame() );
|
||||||
|
aDlgLay->setMargin( 0 );
|
||||||
|
aDlgLay->setSpacing( SPACING );
|
||||||
|
aDlgLay->addWidget( anEntitiesGrp );
|
||||||
|
|
||||||
|
button( OK )->setText( tr( "SMESH_BUT_OK" ) );
|
||||||
|
|
||||||
|
connect( this, SIGNAL( dlgHelp() ), this, SLOT( onHelp() ) );
|
||||||
|
connect( this, SIGNAL( dlgOk() ), this, SLOT( onOk() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
\brief Destructor: clean-up resources if necessary
|
||||||
|
*/
|
||||||
|
SMESHGUI_DisplayEntitiesDlg::~SMESHGUI_DisplayEntitiesDlg()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SMESHGUI_DisplayEntitiesDlg::InverseEntityMode(unsigned int& theOutputMode,
|
||||||
|
unsigned int theMode)
|
||||||
|
{
|
||||||
|
bool anIsNotPresent = ~theOutputMode & theMode;
|
||||||
|
if(anIsNotPresent)
|
||||||
|
theOutputMode |= theMode;
|
||||||
|
else
|
||||||
|
theOutputMode &= ~theMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Slot for changing entities state
|
||||||
|
*/
|
||||||
|
void SMESHGUI_DisplayEntitiesDlg::onChangeEntityMode( bool isChecked )
|
||||||
|
{
|
||||||
|
QCheckBox* aSender = (QCheckBox*)sender();
|
||||||
|
if ( myNbCheckedButtons == 1 && !isChecked ) {
|
||||||
|
SUIT_MessageBox::warning(this, tr("SMESH_WRN_WARNING"),
|
||||||
|
tr("WRN_AT_LEAST_ONE"));
|
||||||
|
disconnect( aSender, SIGNAL(toggled(bool)), this, SLOT(onChangeEntityMode(bool)) );
|
||||||
|
aSender->setChecked( true );
|
||||||
|
connect( aSender, SIGNAL(toggled(bool)), this, SLOT(onChangeEntityMode(bool)) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( my0DElemsTB == aSender )
|
||||||
|
InverseEntityMode( myEntityMode, SMESH_Actor::e0DElements );
|
||||||
|
else if ( myEdgesTB == aSender )
|
||||||
|
InverseEntityMode( myEntityMode, SMESH_Actor::eEdges );
|
||||||
|
else if ( myFacesTB == aSender )
|
||||||
|
InverseEntityMode( myEntityMode, SMESH_Actor::eFaces );
|
||||||
|
else if ( myVolumesTB == aSender )
|
||||||
|
InverseEntityMode( myEntityMode, SMESH_Actor::eVolumes );
|
||||||
|
else if ( myBallsTB == aSender )
|
||||||
|
InverseEntityMode( myEntityMode, SMESH_Actor::eBallElem );
|
||||||
|
|
||||||
|
isChecked ? myNbCheckedButtons++ : myNbCheckedButtons--;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Show online help on dialog box
|
||||||
|
*/
|
||||||
|
void SMESHGUI_DisplayEntitiesDlg::onHelp()
|
||||||
|
{
|
||||||
|
LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
|
||||||
|
app->onHelpContextModule( "SMESH", "display_entity_page.html" );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Display or update the mesh in the 3D view with selected entity mode
|
||||||
|
*/
|
||||||
|
void SMESHGUI_DisplayEntitiesDlg::onOk()
|
||||||
|
{
|
||||||
|
const char* entry = myIObject->getEntry();
|
||||||
|
|
||||||
|
if ( !myActor ) {
|
||||||
|
myActor = SMESH::CreateActor(SMESH::GetActiveStudyDocument(),
|
||||||
|
entry, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( myEntityMode != myActor->GetEntityMode() ) {
|
||||||
|
myActor->SetEntityMode(myEntityMode);
|
||||||
|
SUIT_ViewWindow* wnd = SMESH::GetActiveWindow();
|
||||||
|
SMESH::DisplayActor( wnd, myActor );
|
||||||
|
SUIT_DataOwnerPtrList aList;
|
||||||
|
aList.append( new LightApp_DataOwner( entry ) );
|
||||||
|
SMESHGUI::selectionMgr()->setSelected( aList, false );
|
||||||
|
SMESH::UpdateView( wnd, SMESH::eDisplay, entry );
|
||||||
|
}
|
||||||
|
}
|
61
src/SMESHGUI/SMESHGUI_DisplayEntitiesDlg.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// Copyright (C) 2014 CEA/DEN, EDF R&D, OPEN CASCADE
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU Lesser General Public
|
||||||
|
// License as published by the Free Software Foundation; either
|
||||||
|
// version 2.1 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
//
|
||||||
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||||
|
//
|
||||||
|
// File : SMESHGUI_DisplayEntitiesDlg.h
|
||||||
|
// Author : Alexander KOVALEV, Open CASCADE S.A.S. (alexander.kovalev@opencascade.com)
|
||||||
|
|
||||||
|
#ifndef SMESHGUI_DISPLAYENTITIES_H
|
||||||
|
#define SMESHGUI_DISPLAYENTITIES_H
|
||||||
|
|
||||||
|
#include "SMESHGUI_Dialog.h"
|
||||||
|
#include "SMESH_SMESHGUI.hxx"
|
||||||
|
|
||||||
|
#include <SMESH_Actor.h>
|
||||||
|
|
||||||
|
class QCheckBox;
|
||||||
|
|
||||||
|
class SMESHGUI_EXPORT SMESHGUI_DisplayEntitiesDlg : public SMESHGUI_Dialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
SMESHGUI_DisplayEntitiesDlg( QWidget* parent );
|
||||||
|
~SMESHGUI_DisplayEntitiesDlg();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void InverseEntityMode( unsigned int& theOutputMode,
|
||||||
|
unsigned int theMode );
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onOk();
|
||||||
|
void onHelp();
|
||||||
|
void onChangeEntityMode( bool isChecked );
|
||||||
|
|
||||||
|
private:
|
||||||
|
Handle(SALOME_InteractiveObject) myIObject;
|
||||||
|
unsigned int myEntityMode;
|
||||||
|
SMESH_Actor *myActor;
|
||||||
|
int myNbCheckedButtons;
|
||||||
|
QCheckBox* my0DElemsTB;
|
||||||
|
QCheckBox* myEdgesTB;
|
||||||
|
QCheckBox* myFacesTB;
|
||||||
|
QCheckBox* myVolumesTB;
|
||||||
|
QCheckBox* myBallsTB;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SMESHGUI_DISPLAYENTITIES_H
|
@ -48,7 +48,6 @@
|
|||||||
|
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
// Qt includes
|
// Qt includes
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
@ -860,7 +860,7 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument()
|
|||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
// get indices of selcted elements
|
// get indices of selected elements
|
||||||
TColStd_IndexedMapOfInteger aMapIndex;
|
TColStd_IndexedMapOfInteger aMapIndex;
|
||||||
mySelector->GetIndex(IO,aMapIndex);
|
mySelector->GetIndex(IO,aMapIndex);
|
||||||
aNbElements = aMapIndex.Extent();
|
aNbElements = aMapIndex.Extent();
|
||||||
|
@ -62,8 +62,6 @@
|
|||||||
#include <SalomeApp_DoubleSpinBox.h>
|
#include <SalomeApp_DoubleSpinBox.h>
|
||||||
|
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
#include <SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger.hxx>
|
|
||||||
|
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
|
|
||||||
@ -1956,7 +1954,10 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3: {
|
case 3: {
|
||||||
|
int oldValue = aCompareItem->value();
|
||||||
aCompareItem->setItems(getCompare());
|
aCompareItem->setItems(getCompare());
|
||||||
|
if ( oldValue >= 0 )
|
||||||
|
aCompareItem->setValue( oldValue );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,20 +82,25 @@ namespace SMESH
|
|||||||
return GEOM::GEOM_Object::_nil();
|
return GEOM::GEOM_Object::_nil();
|
||||||
}
|
}
|
||||||
|
|
||||||
GEOM::GEOM_Object_ptr GetGeom (_PTR(SObject) theSO)
|
GEOM::GEOM_Object_var GetGeom (_PTR(SObject) theSO)
|
||||||
{
|
{
|
||||||
|
GEOM::GEOM_Object_var aMeshShape;
|
||||||
if (!theSO)
|
if (!theSO)
|
||||||
return GEOM::GEOM_Object::_nil();
|
return aMeshShape;
|
||||||
|
|
||||||
|
CORBA::Object_var obj = _CAST( SObject,theSO )->GetObject();
|
||||||
|
aMeshShape = GEOM::GEOM_Object::_narrow( obj );
|
||||||
|
if ( !aMeshShape->_is_nil() )
|
||||||
|
return aMeshShape;
|
||||||
|
|
||||||
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
|
_PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
|
||||||
if (!aStudy)
|
if (!aStudy)
|
||||||
return GEOM::GEOM_Object::_nil();
|
return aMeshShape;
|
||||||
|
|
||||||
_PTR(ChildIterator) anIter (aStudy->NewChildIterator(theSO));
|
_PTR(ChildIterator) anIter (aStudy->NewChildIterator(theSO));
|
||||||
for ( ; anIter->More(); anIter->Next()) {
|
for ( ; anIter->More(); anIter->Next()) {
|
||||||
_PTR(SObject) aSObject = anIter->Value();
|
_PTR(SObject) aSObject = anIter->Value();
|
||||||
_PTR(SObject) aRefSOClient;
|
_PTR(SObject) aRefSOClient;
|
||||||
GEOM::GEOM_Object_var aMeshShape;
|
|
||||||
|
|
||||||
if (aSObject->ReferencedObject(aRefSOClient)) {
|
if (aSObject->ReferencedObject(aRefSOClient)) {
|
||||||
SALOMEDS_SObject* aRefSO = _CAST(SObject,aRefSOClient);
|
SALOMEDS_SObject* aRefSO = _CAST(SObject,aRefSOClient);
|
||||||
@ -104,11 +109,10 @@ namespace SMESH
|
|||||||
SALOMEDS_SObject* aSO = _CAST(SObject,aSObject);
|
SALOMEDS_SObject* aSO = _CAST(SObject,aSObject);
|
||||||
aMeshShape = GEOM::GEOM_Object::_narrow(aSO->GetObject());
|
aMeshShape = GEOM::GEOM_Object::_narrow(aSO->GetObject());
|
||||||
}
|
}
|
||||||
|
if ( !aMeshShape->_is_nil() )
|
||||||
if (!aMeshShape->_is_nil())
|
return aMeshShape;
|
||||||
return aMeshShape._retn();
|
|
||||||
}
|
}
|
||||||
return GEOM::GEOM_Object::_nil();
|
return aMeshShape;
|
||||||
}
|
}
|
||||||
|
|
||||||
SMESHGUI_EXPORT char* GetGeomName( _PTR(SObject) smeshSO )
|
SMESHGUI_EXPORT char* GetGeomName( _PTR(SObject) smeshSO )
|
||||||
|
@ -47,7 +47,7 @@ namespace SMESH
|
|||||||
|
|
||||||
SMESHGUI_EXPORT GEOM::GEOM_Object_var GetShapeOnMeshOrSubMesh( _PTR(SObject), bool* isMesh=0 );
|
SMESHGUI_EXPORT GEOM::GEOM_Object_var GetShapeOnMeshOrSubMesh( _PTR(SObject), bool* isMesh=0 );
|
||||||
|
|
||||||
SMESHGUI_EXPORT GEOM::GEOM_Object_ptr GetGeom( _PTR(SObject) );
|
SMESHGUI_EXPORT GEOM::GEOM_Object_var GetGeom( _PTR(SObject) );
|
||||||
|
|
||||||
SMESHGUI_EXPORT char* GetGeomName( _PTR(SObject) smeshSO );
|
SMESHGUI_EXPORT char* GetGeomName( _PTR(SObject) smeshSO );
|
||||||
|
|
||||||
|
@ -61,7 +61,6 @@
|
|||||||
#include <LightApp_SelectionMgr.h>
|
#include <LightApp_SelectionMgr.h>
|
||||||
|
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
|
|
||||||
|
@ -59,7 +59,6 @@
|
|||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
#include <QButtonGroup>
|
#include <QButtonGroup>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QtxColorButton.h>
|
#include <QtxColorButton.h>
|
||||||
|
|
||||||
|
@ -670,7 +670,7 @@ void SMESHGUI_HypothesisDlg::onHelp()
|
|||||||
if (app) {
|
if (app) {
|
||||||
QString name = "SMESH";
|
QString name = "SMESH";
|
||||||
if(myCreator) {
|
if(myCreator) {
|
||||||
QVariant pluginName = myCreator->property( PLUGIN_NAME );
|
QVariant pluginName = myCreator->property( SMESH::Plugin_Name() );
|
||||||
if( pluginName.isValid() ) {
|
if( pluginName.isValid() ) {
|
||||||
QString rootDir = pluginName.toString() + "PLUGIN_ROOT_DIR";
|
QString rootDir = pluginName.toString() + "PLUGIN_ROOT_DIR";
|
||||||
QString varValue = QString( getenv(rootDir.toLatin1().constData()));
|
QString varValue = QString( getenv(rootDir.toLatin1().constData()));
|
||||||
|
@ -128,7 +128,7 @@ namespace SMESH
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QObject::tr(QString("SMESH_HYP_%1").arg(theHypStatus).toLatin1().data());
|
aMsg += QObject::tr(QString("SMESH_HYP_%1").arg(theHypStatus).toLatin1().data());
|
||||||
|
|
||||||
if ( theHypStatus == SMESH::HYP_HIDDEN_ALGO ) { // PAL18501
|
if ( theHypStatus == SMESH::HYP_HIDDEN_ALGO ) { // PAL18501
|
||||||
CORBA::String_var hypType = theHyp->GetName();
|
CORBA::String_var hypType = theHyp->GetName();
|
||||||
@ -469,7 +469,7 @@ namespace SMESH
|
|||||||
// It is used to obtain plugin root dir environment variable
|
// It is used to obtain plugin root dir environment variable
|
||||||
// in the SMESHGUI_HypothesisDlg class. Plugin root dir environment
|
// in the SMESHGUI_HypothesisDlg class. Plugin root dir environment
|
||||||
// variable is used to display documentation.
|
// variable is used to display documentation.
|
||||||
aCreator->setProperty(PLUGIN_NAME,aHypData->PluginName);
|
aCreator->setProperty(SMESH::Plugin_Name(),aHypData->PluginName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -511,10 +511,14 @@ namespace SMESH
|
|||||||
|
|
||||||
return SMESH::SMESH_Hypothesis::_nil();
|
return SMESH::SMESH_Hypothesis::_nil();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsApplicable(const QString& aHypType,
|
bool IsApplicable(const QString& aHypType,
|
||||||
GEOM::GEOM_Object_ptr theGeomObject,
|
GEOM::GEOM_Object_ptr theGeomObject,
|
||||||
const bool toCheckAll)
|
const bool toCheckAll)
|
||||||
{
|
{
|
||||||
|
if ( getenv("NO_LIMIT_ALGO_BY_SHAPE")) // allow a workaround for a case if
|
||||||
|
return true; // IsApplicable() returns false due to a bug
|
||||||
|
|
||||||
HypothesisData* aHypData = GetHypothesisData(aHypType);
|
HypothesisData* aHypData = GetHypothesisData(aHypType);
|
||||||
QString aServLib = aHypData->ServerLibName;
|
QString aServLib = aHypData->ServerLibName;
|
||||||
return SMESHGUI::GetSMESHGen()->IsApplicable( aHypType.toLatin1().data(),
|
return SMESHGUI::GetSMESHGen()->IsApplicable( aHypType.toLatin1().data(),
|
||||||
|
@ -58,8 +58,6 @@ class SALOMEDSClient_SObject;
|
|||||||
class algo_error_array;
|
class algo_error_array;
|
||||||
|
|
||||||
|
|
||||||
#define PLUGIN_NAME "PLUGIN_NAME"
|
|
||||||
|
|
||||||
namespace SMESH
|
namespace SMESH
|
||||||
{
|
{
|
||||||
SMESHGUI_EXPORT
|
SMESHGUI_EXPORT
|
||||||
@ -119,6 +117,10 @@ namespace SMESH
|
|||||||
|
|
||||||
SMESHGUI_EXPORT
|
SMESHGUI_EXPORT
|
||||||
QString GetMessageOnAlgoStateErrors( const algo_error_array& );
|
QString GetMessageOnAlgoStateErrors( const algo_error_array& );
|
||||||
|
|
||||||
|
SMESHGUI_EXPORT
|
||||||
|
// name of proprty saving plug-in of a hypothesis
|
||||||
|
inline const char* Plugin_Name() { return "PLUGIN_NAME"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // SMESHGUI_HYPOTHESESUTILS_H
|
#endif // SMESHGUI_HYPOTHESESUTILS_H
|
||||||
|
@ -716,17 +716,17 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview()
|
|||||||
myDlg->myDestinationZ->SetValue(z);
|
myDlg->myDestinationZ->SetValue(z);
|
||||||
}
|
}
|
||||||
if ( myDestCoordChanged ) {
|
if ( myDestCoordChanged ) {
|
||||||
dx = myDlg->myDestinationX->GetValue() - myDlg->myCurrentX->GetValue();
|
dx = myDlg->myDestinationX->GetValue() - x;
|
||||||
dy = myDlg->myDestinationY->GetValue() - myDlg->myCurrentY->GetValue();
|
dy = myDlg->myDestinationY->GetValue() - y;
|
||||||
dz = myDlg->myDestinationZ->GetValue() - myDlg->myCurrentZ->GetValue();
|
dz = myDlg->myDestinationZ->GetValue() - z;
|
||||||
myDlg->myDestDX->SetValue(dx);
|
myDlg->myDestDX->SetValue(dx);
|
||||||
myDlg->myDestDY->SetValue(dy);
|
myDlg->myDestDY->SetValue(dy);
|
||||||
myDlg->myDestDZ->SetValue(dz);
|
myDlg->myDestDZ->SetValue(dz);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dx = myDlg->myDestDX->GetValue() + myDlg->myCurrentX->GetValue();;
|
dx = myDlg->myDestDX->GetValue() + x;
|
||||||
dy = myDlg->myDestDY->GetValue() + myDlg->myCurrentY->GetValue();;
|
dy = myDlg->myDestDY->GetValue() + y;
|
||||||
dz = myDlg->myDestDZ->GetValue() + myDlg->myCurrentZ->GetValue();;
|
dz = myDlg->myDestDZ->GetValue() + z;
|
||||||
myDlg->myDestinationX->SetValue(dx);
|
myDlg->myDestinationX->SetValue(dx);
|
||||||
myDlg->myDestinationY->SetValue(dy);
|
myDlg->myDestinationY->SetValue(dy);
|
||||||
myDlg->myDestinationZ->SetValue(dz);
|
myDlg->myDestinationZ->SetValue(dz);
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#include <SUIT_OverrideCursor.h>
|
#include <SUIT_OverrideCursor.h>
|
||||||
#include <SUIT_ResourceMgr.h>
|
#include <SUIT_ResourceMgr.h>
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
|
|
||||||
#include <QButtonGroup>
|
#include <QButtonGroup>
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
|
@ -171,6 +171,7 @@ void SMESHGUI_MeshTab::addItem( const QString& txt, const int type, const int in
|
|||||||
if ( type <= AddHyp )
|
if ( type <= AddHyp )
|
||||||
{
|
{
|
||||||
myHypCombo[ type ]->addItem( txt, QVariant( index ));
|
myHypCombo[ type ]->addItem( txt, QVariant( index ));
|
||||||
|
myHypCombo[ type ]->setMaxVisibleItems( qMax( 10, myHypCombo[ type ]->count() ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -126,6 +126,7 @@ vtkIdType getCellType( const SMDSAbs_ElementType theType,
|
|||||||
{
|
{
|
||||||
switch( theType )
|
switch( theType )
|
||||||
{
|
{
|
||||||
|
case SMDSAbs_Ball: return VTK_VERTEX;
|
||||||
case SMDSAbs_Node: return VTK_VERTEX;
|
case SMDSAbs_Node: return VTK_VERTEX;
|
||||||
case SMDSAbs_Edge:
|
case SMDSAbs_Edge:
|
||||||
if( theNbNodes == 2 ) return VTK_LINE;
|
if( theNbNodes == 2 ) return VTK_LINE;
|
||||||
|
@ -506,8 +506,9 @@ void SMESHGUI_MeshInfo::showInfo( SMESH::SMESH_IDSource_ptr obj )
|
|||||||
long nb2DLinear = info[SMDSEntity_Triangle] + info[SMDSEntity_Quadrangle] + info[SMDSEntity_Polygon];
|
long nb2DLinear = info[SMDSEntity_Triangle] + info[SMDSEntity_Quadrangle] + info[SMDSEntity_Polygon];
|
||||||
long nb2DQuadratic = info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_Quad_Quadrangle];
|
long nb2DQuadratic = info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_Quad_Quadrangle];
|
||||||
long nb2DBiQuadratic = info[SMDSEntity_BiQuad_Triangle] + info[SMDSEntity_BiQuad_Quadrangle];
|
long nb2DBiQuadratic = info[SMDSEntity_BiQuad_Triangle] + info[SMDSEntity_BiQuad_Quadrangle];
|
||||||
|
long nb2DTotal = nb2DLinear + nb2DQuadratic + nb2DBiQuadratic;
|
||||||
|
|
||||||
myWidgets[i2D][iTotal] ->setProperty( "text", QString::number( nb2DLinear + nb2DQuadratic ));
|
myWidgets[i2D][iTotal] ->setProperty( "text", QString::number( nb2DTotal ));
|
||||||
myWidgets[i2D][iLinear] ->setProperty( "text", QString::number( nb2DLinear ) );
|
myWidgets[i2D][iLinear] ->setProperty( "text", QString::number( nb2DLinear ) );
|
||||||
myWidgets[i2D][iQuadratic] ->setProperty( "text", QString::number( nb2DQuadratic ) );
|
myWidgets[i2D][iQuadratic] ->setProperty( "text", QString::number( nb2DQuadratic ) );
|
||||||
myWidgets[i2D][iBiQuadratic] ->setProperty( "text", QString::number( nb2DBiQuadratic ) );
|
myWidgets[i2D][iBiQuadratic] ->setProperty( "text", QString::number( nb2DBiQuadratic ) );
|
||||||
@ -524,10 +525,11 @@ void SMESHGUI_MeshInfo::showInfo( SMESH::SMESH_IDSource_ptr obj )
|
|||||||
long nbHexahedrons = info[SMDSEntity_Hexa] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_TriQuad_Hexa];
|
long nbHexahedrons = info[SMDSEntity_Hexa] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_TriQuad_Hexa];
|
||||||
long nbPyramids = info[SMDSEntity_Pyramid] + info[SMDSEntity_Quad_Pyramid];
|
long nbPyramids = info[SMDSEntity_Pyramid] + info[SMDSEntity_Quad_Pyramid];
|
||||||
long nbPrisms = info[SMDSEntity_Penta] + info[SMDSEntity_Quad_Penta];
|
long nbPrisms = info[SMDSEntity_Penta] + info[SMDSEntity_Quad_Penta];
|
||||||
long nb3DLinear = info[SMDSEntity_Tetra] + info[SMDSEntity_Hexa] + info[SMDSEntity_Pyramid] + info[SMDSEntity_Penta] + info[SMDSEntity_Polyhedra] + info[SMDSEntity_Hexagonal_Prism];
|
long nb3DLinear = info[SMDSEntity_Tetra] + info[SMDSEntity_Hexa] + info[SMDSEntity_Pyramid] + info[SMDSEntity_Penta] + info[SMDSEntity_Polyhedra] + info[SMDSEntity_Hexagonal_Prism];
|
||||||
long nb3DQuadratic = info[SMDSEntity_Quad_Tetra] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_Quad_Pyramid] + info[SMDSEntity_Quad_Penta];
|
long nb3DQuadratic = info[SMDSEntity_Quad_Tetra] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_Quad_Pyramid] + info[SMDSEntity_Quad_Penta];
|
||||||
long nb3DBiQuadratic = info[SMDSEntity_TriQuad_Hexa];
|
long nb3DBiQuadratic = info[SMDSEntity_TriQuad_Hexa];
|
||||||
myWidgets[i3D][iTotal] ->setProperty( "text", QString::number( nb3DLinear + nb3DQuadratic ) );
|
long nb3DTotal = nb3DLinear + nb3DQuadratic + nb3DBiQuadratic;
|
||||||
|
myWidgets[i3D][iTotal] ->setProperty( "text", QString::number( nb3DTotal ) );
|
||||||
myWidgets[i3D][iLinear] ->setProperty( "text", QString::number( nb3DLinear ) );
|
myWidgets[i3D][iLinear] ->setProperty( "text", QString::number( nb3DLinear ) );
|
||||||
myWidgets[i3D][iQuadratic] ->setProperty( "text", QString::number( nb3DQuadratic ) );
|
myWidgets[i3D][iQuadratic] ->setProperty( "text", QString::number( nb3DQuadratic ) );
|
||||||
myWidgets[i3D][iBiQuadratic] ->setProperty( "text", QString::number( nb3DBiQuadratic ) );
|
myWidgets[i3D][iBiQuadratic] ->setProperty( "text", QString::number( nb3DBiQuadratic ) );
|
||||||
@ -546,7 +548,7 @@ void SMESHGUI_MeshInfo::showInfo( SMESH::SMESH_IDSource_ptr obj )
|
|||||||
myWidgets[i3DPrisms][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Penta] ) );
|
myWidgets[i3DPrisms][iQuadratic] ->setProperty( "text", QString::number( info[SMDSEntity_Quad_Penta] ) );
|
||||||
myWidgets[i3DHexaPrisms][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Hexagonal_Prism] ) );
|
myWidgets[i3DHexaPrisms][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Hexagonal_Prism] ) );
|
||||||
myWidgets[i3DPolyhedrons][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Polyhedra] ) );
|
myWidgets[i3DPolyhedrons][iTotal] ->setProperty( "text", QString::number( info[SMDSEntity_Polyhedra] ) );
|
||||||
long nbElemTotal = info[SMDSEntity_0D] + info[SMDSEntity_Ball] + nbEdges + nb2DLinear + nb2DQuadratic + nb2DBiQuadratic + nb3DLinear + nb3DQuadratic + nb3DBiQuadratic;
|
long nbElemTotal = info[SMDSEntity_0D] + info[SMDSEntity_Ball] + nbEdges + nb2DTotal + nb3DTotal;
|
||||||
long nbElemLinerial = info[SMDSEntity_Edge] + nb2DLinear + nb3DLinear;
|
long nbElemLinerial = info[SMDSEntity_Edge] + nb2DLinear + nb3DLinear;
|
||||||
long nbElemQuadratic = info[SMDSEntity_Quad_Edge] + nb2DQuadratic + nb3DQuadratic;
|
long nbElemQuadratic = info[SMDSEntity_Quad_Edge] + nb2DQuadratic + nb3DQuadratic;
|
||||||
long nbElemBiQuadratic = nb2DBiQuadratic + nb3DBiQuadratic;
|
long nbElemBiQuadratic = nb2DBiQuadratic + nb3DBiQuadratic;
|
||||||
|
@ -26,15 +26,15 @@
|
|||||||
#include "SMESHGUI_MeshOp.h"
|
#include "SMESHGUI_MeshOp.h"
|
||||||
|
|
||||||
#include "SMESHGUI.h"
|
#include "SMESHGUI.h"
|
||||||
#include "SMESHGUI_MeshDlg.h"
|
|
||||||
#include "SMESHGUI_ShapeByMeshDlg.h"
|
|
||||||
#include "SMESHGUI_HypothesesUtils.h"
|
|
||||||
#include "SMESHGUI_Hypotheses.h"
|
|
||||||
#include "SMESHGUI_Utils.h"
|
|
||||||
#include "SMESHGUI_GEOMGenUtils.h"
|
#include "SMESHGUI_GEOMGenUtils.h"
|
||||||
|
#include "SMESHGUI_Hypotheses.h"
|
||||||
#include <SMESH_TypeFilter.hxx>
|
#include "SMESHGUI_HypothesesUtils.h"
|
||||||
#include <SMESH_NumberFilter.hxx>
|
#include "SMESHGUI_MeshDlg.h"
|
||||||
|
#include "SMESHGUI_Operations.h"
|
||||||
|
#include "SMESHGUI_ShapeByMeshDlg.h"
|
||||||
|
#include "SMESHGUI_Utils.h"
|
||||||
|
#include "SMESH_NumberFilter.hxx"
|
||||||
|
#include "SMESH_TypeFilter.hxx"
|
||||||
|
|
||||||
// SALOME GEOM includes
|
// SALOME GEOM includes
|
||||||
#include <GEOM_SelectionFilter.h>
|
#include <GEOM_SelectionFilter.h>
|
||||||
@ -247,8 +247,9 @@ void SMESHGUI_MeshOp::startOperation()
|
|||||||
myDlg->activateObject( myIsMesh ? SMESHGUI_MeshDlg::Geom : SMESHGUI_MeshDlg::Mesh );
|
myDlg->activateObject( myIsMesh ? SMESHGUI_MeshDlg::Geom : SMESHGUI_MeshDlg::Mesh );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
myDlg->activateObject( SMESHGUI_MeshDlg::Obj );
|
myDlg->activateObject( SMESHGUI_MeshDlg::Obj );
|
||||||
|
}
|
||||||
myDlg->setCurrentTab( SMESH::DIM_3D );
|
myDlg->setCurrentTab( SMESH::DIM_3D );
|
||||||
|
|
||||||
QStringList TypeMeshList;
|
QStringList TypeMeshList;
|
||||||
@ -363,15 +364,39 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const
|
|||||||
// skl for NPAL14695 - implementation of searching of mainObj
|
// skl for NPAL14695 - implementation of searching of mainObj
|
||||||
GEOM::GEOM_Object_var mainObj = op->GetMainShape(aSubGeomVar); /* _var not _wrap as
|
GEOM::GEOM_Object_var mainObj = op->GetMainShape(aSubGeomVar); /* _var not _wrap as
|
||||||
mainObj already exists! */
|
mainObj already exists! */
|
||||||
while(1) {
|
while( !mainObj->_is_nil()) {
|
||||||
if (mainObj->_is_nil())
|
|
||||||
return false;
|
|
||||||
CORBA::String_var entry1 = mainObj->GetEntry();
|
CORBA::String_var entry1 = mainObj->GetEntry();
|
||||||
CORBA::String_var entry2 = mainGeom->GetEntry();
|
CORBA::String_var entry2 = mainGeom->GetEntry();
|
||||||
if (std::string( entry1.in() ) == entry2.in() )
|
if (std::string( entry1.in() ) == entry2.in() )
|
||||||
return true;
|
return true;
|
||||||
mainObj = op->GetMainShape(mainObj);
|
mainObj = op->GetMainShape(mainObj);
|
||||||
}
|
}
|
||||||
|
if ( aSubGeomVar->GetShapeType() == GEOM::COMPOUND )
|
||||||
|
{
|
||||||
|
// is aSubGeomVar a compound of sub-shapes?
|
||||||
|
GEOM::GEOM_IShapesOperations_wrap sop = geomGen->GetIShapesOperations(aStudy->StudyId());
|
||||||
|
if (sop->_is_nil()) return false;
|
||||||
|
GEOM::ListOfLong_var ids = sop->GetAllSubShapesIDs( aSubGeomVar,
|
||||||
|
GEOM::SHAPE,/*sorted=*/false);
|
||||||
|
if ( ids->length() > 0 )
|
||||||
|
{
|
||||||
|
ids->length( 1 );
|
||||||
|
GEOM::GEOM_Object_var compSub = geomGen->AddSubShape( aSubGeomVar, ids );
|
||||||
|
if ( !compSub->_is_nil() )
|
||||||
|
{
|
||||||
|
GEOM::ListOfGO_var shared = sop->GetSharedShapes( mainGeom,
|
||||||
|
compSub,
|
||||||
|
compSub->GetShapeType() );
|
||||||
|
geomGen->RemoveObject( compSub );
|
||||||
|
compSub->UnRegister();
|
||||||
|
if ( shared->length() > 0 ) {
|
||||||
|
geomGen->RemoveObject( shared[0] );
|
||||||
|
shared[0]->UnRegister();
|
||||||
|
}
|
||||||
|
return ( shared->length() > 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,8 +405,8 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const
|
|||||||
|
|
||||||
//================================================================================
|
//================================================================================
|
||||||
/*!
|
/*!
|
||||||
* \brief Return name of the algorithm that does not support submeshes and makes
|
* \brief Return name of the algorithm that does not support sub-meshes and makes
|
||||||
* submesh creation useless
|
* sub-mesh creation useless
|
||||||
* \retval char* - string is to be deleted!!!
|
* \retval char* - string is to be deleted!!!
|
||||||
*/
|
*/
|
||||||
//================================================================================
|
//================================================================================
|
||||||
@ -847,7 +872,7 @@ void SMESHGUI_MeshOp::availableHyps( const int theDim,
|
|||||||
theDataList.clear();
|
theDataList.clear();
|
||||||
theHyps.clear();
|
theHyps.clear();
|
||||||
bool isAlgo = ( theHypType == Algo );
|
bool isAlgo = ( theHypType == Algo );
|
||||||
bool isAux = ( theHypType == AddHyp );
|
bool isAux = ( theHypType >= AddHyp );
|
||||||
QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( isAlgo, theDim, isAux, myIsOnGeometry, !myIsMesh );
|
QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( isAlgo, theDim, isAux, myIsOnGeometry, !myIsMesh );
|
||||||
|
|
||||||
QStringList::const_iterator anIter;
|
QStringList::const_iterator anIter;
|
||||||
@ -906,7 +931,7 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim,
|
|||||||
else
|
else
|
||||||
aPart = theHypType == Algo ? SMESH::Tag_AlgorithmsRoot : SMESH::Tag_HypothesisRoot;
|
aPart = theHypType == Algo ? SMESH::Tag_AlgorithmsRoot : SMESH::Tag_HypothesisRoot;
|
||||||
|
|
||||||
const bool isAux = ( theHypType == AddHyp );
|
const bool isAux = ( theHypType >= AddHyp );
|
||||||
const bool allHyps = ( !isMesh && theHypType != Algo && theDim > -1);
|
const bool allHyps = ( !isMesh && theHypType != Algo && theDim > -1);
|
||||||
|
|
||||||
if ( theFather->FindSubObject( aPart, aHypRoot ) )
|
if ( theFather->FindSubObject( aPart, aHypRoot ) )
|
||||||
@ -1489,14 +1514,24 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
|
|||||||
{
|
{
|
||||||
if ( !isAccessibleDim( dim ))
|
if ( !isAccessibleDim( dim ))
|
||||||
continue;
|
continue;
|
||||||
for ( int dlgType = MainHyp; dlgType < nbDlgHypTypes(dim); dlgType++ )
|
|
||||||
|
// get indices of selected hyps
|
||||||
|
const int nbTypes = nbDlgHypTypes(dim);
|
||||||
|
std::vector<int> hypIndexByType( nbTypes, -1 );
|
||||||
|
for ( int dlgType = MainHyp; dlgType < nbTypes; dlgType++ )
|
||||||
|
{
|
||||||
|
hypIndexByType[ dlgType ] = currentHyp( dim, dlgType );
|
||||||
|
}
|
||||||
|
|
||||||
|
// update hyps
|
||||||
|
for ( int dlgType = MainHyp; dlgType < nbTypes; dlgType++ )
|
||||||
{
|
{
|
||||||
const int type = Min( dlgType, AddHyp );
|
const int type = Min( dlgType, AddHyp );
|
||||||
myAvailableHypData[ dim ][ type ].clear();
|
myAvailableHypData[ dim ][ type ].clear();
|
||||||
QStringList anAvailable, anExisting;
|
QStringList anAvailable, anExisting;
|
||||||
|
|
||||||
HypothesisData* curAlgo = algoByDim[ dim ];
|
HypothesisData* curAlgo = algoByDim[ dim ];
|
||||||
int hypIndex = currentHyp( dim, dlgType );
|
int hypIndex = hypIndexByType[ dlgType ];
|
||||||
|
|
||||||
SMESH::SMESH_Hypothesis_var curHyp;
|
SMESH::SMESH_Hypothesis_var curHyp;
|
||||||
if ( hypIndex >= 0 && hypIndex < myExistingHyps[ dim ][ type ].count() )
|
if ( hypIndex >= 0 && hypIndex < myExistingHyps[ dim ][ type ].count() )
|
||||||
@ -1535,24 +1570,26 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
|
|||||||
defaulHypAvlbl = (type == MainHyp && !curAlgo->IsAuxOrNeedHyp );
|
defaulHypAvlbl = (type == MainHyp && !curAlgo->IsAuxOrNeedHyp );
|
||||||
}
|
}
|
||||||
// set list of hypotheses
|
// set list of hypotheses
|
||||||
myDlg->tab( dim )->setAvailableHyps( type, anAvailable );
|
if ( dlgType <= AddHyp )
|
||||||
myDlg->tab( dim )->setExistingHyps( type, anExisting, defaulHypAvlbl );
|
{
|
||||||
|
myDlg->tab( dim )->setAvailableHyps( type, anAvailable );
|
||||||
|
myDlg->tab( dim )->setExistingHyps( type, anExisting, defaulHypAvlbl );
|
||||||
|
}
|
||||||
// set current existing hypothesis
|
// set current existing hypothesis
|
||||||
if ( !curHyp->_is_nil() && !anExisting.isEmpty() )
|
if ( !curHyp->_is_nil() && !anExisting.isEmpty() )
|
||||||
hypIndex = this->find( curHyp, myExistingHyps[ dim ][ type ]);
|
hypIndex = this->find( curHyp, myExistingHyps[ dim ][ type ]);
|
||||||
else
|
else
|
||||||
hypIndex = -1;
|
hypIndex = -1;
|
||||||
if ( !isSubmesh && hypIndex < 0 && anExisting.count() == 1 ) {
|
if ( !isSubmesh && myToCreate && hypIndex < 0 && anExisting.count() == 1 ) {
|
||||||
// none is yet selected => select the sole existing if it is not optional
|
// none is yet selected => select the sole existing if it is not optional
|
||||||
CORBA::String_var hypTypeName = myExistingHyps[ dim ][ type ].first().first->GetName();
|
CORBA::String_var hypTypeName = myExistingHyps[ dim ][ type ].first().first->GetName();
|
||||||
bool isOptional = true;
|
bool isOptional = true;
|
||||||
if ( algoByDim[ dim ] &&
|
if ( algoByDim[ dim ] &&
|
||||||
SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName.in(), isOptional ) &&
|
SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName.in(), isOptional ) &&
|
||||||
!isOptional )
|
!isOptional )
|
||||||
hypIndex = 0;
|
hypIndex = 0;
|
||||||
}
|
}
|
||||||
setCurrentHyp( dim, type, hypIndex );
|
setCurrentHyp( dim, dlgType, hypIndex );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2371,7 +2408,7 @@ bool SMESHGUI_MeshOp::checkSubMeshConcurrency(SMESH::SMESH_Mesh_ptr mesh,
|
|||||||
myDlg->setEnabled( false ); // disactivate selection
|
myDlg->setEnabled( false ); // disactivate selection
|
||||||
selectionMgr()->clearFilters();
|
selectionMgr()->clearFilters();
|
||||||
selectObject( meshSO );
|
selectObject( meshSO );
|
||||||
SMESHGUI::GetSMESHGUI()->OnGUIEvent( 713 ); // MESH_ORDER
|
SMESHGUI::GetSMESHGUI()->OnGUIEvent( SMESHOp::OpMeshOrder ); // MESH_ORDER
|
||||||
qApp->processEvents();
|
qApp->processEvents();
|
||||||
|
|
||||||
myDlg->setEnabled( true );
|
myDlg->setEnabled( true );
|
||||||
@ -2578,11 +2615,11 @@ void SMESHGUI_MeshOp::setFilteredAlgoData( const int theTabIndex, const int theI
|
|||||||
|
|
||||||
bool toCheckIsApplicableToAll = !myIsMesh;
|
bool toCheckIsApplicableToAll = !myIsMesh;
|
||||||
GEOM::GEOM_Object_var aGeomVar;
|
GEOM::GEOM_Object_var aGeomVar;
|
||||||
QString anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
|
QString anEntry =
|
||||||
|
myDlg->selectedObject( myToCreate ? SMESHGUI_MeshDlg::Geom : SMESHGUI_MeshDlg::Obj );
|
||||||
if ( _PTR(SObject) so = studyDS()->FindObjectID( anEntry.toLatin1().data() ))
|
if ( _PTR(SObject) so = studyDS()->FindObjectID( anEntry.toLatin1().data() ))
|
||||||
{
|
{
|
||||||
CORBA::Object_var obj = _CAST( SObject,so )->GetObject();
|
aGeomVar = SMESH::GetGeom( so );
|
||||||
aGeomVar = GEOM::GEOM_Object::_narrow( obj );
|
|
||||||
if ( !aGeomVar->_is_nil() && toCheckIsApplicableToAll )
|
if ( !aGeomVar->_is_nil() && toCheckIsApplicableToAll )
|
||||||
toCheckIsApplicableToAll = ( aGeomVar->GetType() == GEOM_GROUP );
|
toCheckIsApplicableToAll = ( aGeomVar->GetType() == GEOM_GROUP );
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,6 @@
|
|||||||
#include <LightApp_SelectionMgr.h>
|
#include <LightApp_SelectionMgr.h>
|
||||||
#include <LightApp_Application.h>
|
#include <LightApp_Application.h>
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
#include <SalomeApp_Tools.h>
|
#include <SalomeApp_Tools.h>
|
||||||
|
|
||||||
#include <SVTK_Selector.h>
|
#include <SVTK_Selector.h>
|
||||||
|
@ -200,7 +200,8 @@ namespace SMESHOp {
|
|||||||
OpDEFaces = 6042, // POPUP MENU - DISPLAY ENTITY - FACES
|
OpDEFaces = 6042, // POPUP MENU - DISPLAY ENTITY - FACES
|
||||||
OpDEVolumes = 6043, // POPUP MENU - DISPLAY ENTITY - VOLUMES
|
OpDEVolumes = 6043, // POPUP MENU - DISPLAY ENTITY - VOLUMES
|
||||||
OpDEBalls = 6044, // POPUP MENU - DISPLAY ENTITY - BALLS
|
OpDEBalls = 6044, // POPUP MENU - DISPLAY ENTITY - BALLS
|
||||||
OpDEAllEntity = 6045, // POPUP MENU - DISPLAY ENTITY - ALL ENTITY
|
OpDEAllEntity = 6045, // POPUP MENU - DISPLAY ENTITY - ALL ENTITIES
|
||||||
|
OpDEChoose = 6046, // POPUP MENU - DISPLAY ENTITY - CHOOSE ENTITIES
|
||||||
// Representation -----------------//--------------------------------
|
// Representation -----------------//--------------------------------
|
||||||
OpRepresentationLines = 6050, // POPUP MENU - 2D QUADRATIC - LINES
|
OpRepresentationLines = 6050, // POPUP MENU - 2D QUADRATIC - LINES
|
||||||
OpRepresentationArcs = 6051, // POPUP MENU - 2D QUADRATIC - ARCS
|
OpRepresentationArcs = 6051, // POPUP MENU - 2D QUADRATIC - ARCS
|
||||||
|
@ -46,7 +46,6 @@
|
|||||||
// SALOME GUI includes
|
// SALOME GUI includes
|
||||||
#include <LightApp_SelectionMgr.h>
|
#include <LightApp_SelectionMgr.h>
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
#include <SUIT_Desktop.h>
|
#include <SUIT_Desktop.h>
|
||||||
#include <SUIT_MessageBox.h>
|
#include <SUIT_MessageBox.h>
|
||||||
#include <SUIT_OverrideCursor.h>
|
#include <SUIT_OverrideCursor.h>
|
||||||
|
@ -52,7 +52,6 @@
|
|||||||
#include <SVTK_ViewModel.h>
|
#include <SVTK_ViewModel.h>
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
// SALOME KERNEL includes
|
// SALOME KERNEL includes
|
||||||
#include <SALOMEDSClient.hxx>
|
#include <SALOMEDSClient.hxx>
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
#include <SVTK_ViewModel.h>
|
#include <SVTK_ViewModel.h>
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
// SALOME KERNEL includes
|
// SALOME KERNEL includes
|
||||||
#include <SALOMEDSClient.hxx>
|
#include <SALOMEDSClient.hxx>
|
||||||
|
@ -80,8 +80,10 @@ void SMESHGUI_Selection::init( const QString& client, LightApp_SelectionMgr* mgr
|
|||||||
return;
|
return;
|
||||||
_PTR(Study) aStudy = aSStudy->studyDS();
|
_PTR(Study) aStudy = aSStudy->studyDS();
|
||||||
|
|
||||||
for( int i=0, n=count(); i<n; i++ )
|
for( int i=0, n=count(); i<n; i++ ) {
|
||||||
myTypes.append( typeName( type( entry( i ), aStudy ) ) );
|
myTypes.append( typeName( type( entry( i ), aStudy ) ) );
|
||||||
|
myControls.append( controlMode( i ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +124,6 @@ QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const
|
|||||||
else if ( p=="labeledTypes" ) val = QVariant( labeledTypes( ind ) );
|
else if ( p=="labeledTypes" ) val = QVariant( labeledTypes( ind ) );
|
||||||
else if ( p=="shrinkMode" ) val = QVariant( shrinkMode( ind ) );
|
else if ( p=="shrinkMode" ) val = QVariant( shrinkMode( ind ) );
|
||||||
else if ( p=="entityMode" ) val = QVariant( entityMode( ind ) );
|
else if ( p=="entityMode" ) val = QVariant( entityMode( ind ) );
|
||||||
else if ( p=="controlMode" ) val = QVariant( controlMode( ind ) );
|
|
||||||
else if ( p=="isNumFunctor" ) val = QVariant( isNumFunctor( ind ) );
|
else if ( p=="isNumFunctor" ) val = QVariant( isNumFunctor( ind ) );
|
||||||
else if ( p=="displayMode" ) val = QVariant( displayMode( ind ) );
|
else if ( p=="displayMode" ) val = QVariant( displayMode( ind ) );
|
||||||
else if ( p=="isComputable" ) val = QVariant( isComputable( ind ) );
|
else if ( p=="isComputable" ) val = QVariant( isComputable( ind ) );
|
||||||
@ -143,6 +144,21 @@ QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const
|
|||||||
return LightApp_Selection::parameter( ind, p );
|
return LightApp_Selection::parameter( ind, p );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : parameter
|
||||||
|
//purpose :
|
||||||
|
//=======================================================================
|
||||||
|
QVariant SMESHGUI_Selection::parameter( const QString& p ) const
|
||||||
|
{
|
||||||
|
QVariant val;
|
||||||
|
if ( p=="controlMode" ) val = QVariant( controlMode() );
|
||||||
|
|
||||||
|
if ( val.isValid() )
|
||||||
|
return val;
|
||||||
|
else
|
||||||
|
return LightApp_Selection::parameter( p );
|
||||||
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : getVtkOwner
|
//function : getVtkOwner
|
||||||
//purpose :
|
//purpose :
|
||||||
@ -318,6 +334,23 @@ QString SMESHGUI_Selection::controlMode( int ind ) const
|
|||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=======================================================================
|
||||||
|
//function : controlMode
|
||||||
|
//purpose : gets global control mode; return SMESH_Actor::eControl
|
||||||
|
//=======================================================================
|
||||||
|
QString SMESHGUI_Selection::controlMode() const
|
||||||
|
{
|
||||||
|
if( myControls.count() > 0 ) {
|
||||||
|
QString mode = myControls[0];
|
||||||
|
for( int ind = 1; ind < myControls.count(); ind++ ) {
|
||||||
|
if( mode != myControls[ind] )
|
||||||
|
return "eNone";
|
||||||
|
}
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
return "eNone";
|
||||||
|
}
|
||||||
|
|
||||||
bool SMESHGUI_Selection::isNumFunctor( int ind ) const
|
bool SMESHGUI_Selection::isNumFunctor( int ind ) const
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
@ -49,6 +49,7 @@ public:
|
|||||||
|
|
||||||
virtual void init( const QString&, LightApp_SelectionMgr* );
|
virtual void init( const QString&, LightApp_SelectionMgr* );
|
||||||
virtual QVariant parameter( const int, const QString& ) const;
|
virtual QVariant parameter( const int, const QString& ) const;
|
||||||
|
virtual QVariant parameter( const QString& ) const;
|
||||||
virtual bool processOwner( const LightApp_DataOwner* );
|
virtual bool processOwner( const LightApp_DataOwner* );
|
||||||
|
|
||||||
// got from object, not from actor
|
// got from object, not from actor
|
||||||
@ -74,6 +75,7 @@ public:
|
|||||||
virtual QString shrinkMode( int ) const;
|
virtual QString shrinkMode( int ) const;
|
||||||
virtual QList<QVariant> entityMode( int ) const;
|
virtual QList<QVariant> entityMode( int ) const;
|
||||||
virtual QString controlMode( int ) const;
|
virtual QString controlMode( int ) const;
|
||||||
|
virtual QString controlMode() const;
|
||||||
virtual bool isNumFunctor( int ) const;
|
virtual bool isNumFunctor( int ) const;
|
||||||
virtual QString facesOrientationMode( int ) const;
|
virtual QString facesOrientationMode( int ) const;
|
||||||
virtual QString groupType( int ) const;
|
virtual QString groupType( int ) const;
|
||||||
@ -87,6 +89,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QStringList myTypes;
|
QStringList myTypes;
|
||||||
|
QStringList myControls;
|
||||||
QList<SMESH_Actor*> myActors;
|
QList<SMESH_Actor*> myActors;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
#include <SVTK_ViewModel.h>
|
#include <SVTK_ViewModel.h>
|
||||||
|
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
// SALOME KERNEL includes
|
// SALOME KERNEL includes
|
||||||
#include <SALOMEDS_SObject.hxx>
|
#include <SALOMEDS_SObject.hxx>
|
||||||
@ -428,7 +427,7 @@ void SMESHGUI_SelectionOp::selected( QStringList& names,
|
|||||||
{
|
{
|
||||||
_PTR(SObject) obj = _study->studyDS()->FindObjectID( anIt.Value()->getEntry() );
|
_PTR(SObject) obj = _study->studyDS()->FindObjectID( anIt.Value()->getEntry() );
|
||||||
if( obj )
|
if( obj )
|
||||||
names.append( obj->GetName().c_str() );
|
names.append( QString( obj->GetName().c_str() ).trimmed() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -602,7 +602,8 @@ void SMESHGUI_SmoothingDlg::SelectionIntoArgument()
|
|||||||
elements << QString::number( aMapIndex( i+1 ) );
|
elements << QString::number( aMapIndex( i+1 ) );
|
||||||
aString = elements.join(" ");
|
aString = elements.join(" ");
|
||||||
}
|
}
|
||||||
} else if (myEditCurrentArgument == LineEditNodes && !myMesh->_is_nil() && myIO == IO ) {
|
} else if (myEditCurrentArgument == LineEditNodes && !myMesh->_is_nil() && myIO->isSame(IO) )
|
||||||
|
{
|
||||||
myNbOkNodes = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
|
myNbOkNodes = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,6 @@
|
|||||||
#include <SVTK_ViewModel.h>
|
#include <SVTK_ViewModel.h>
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
// SALOME KERNEL includes
|
// SALOME KERNEL includes
|
||||||
#include <SALOMEDSClient.hxx>
|
#include <SALOMEDSClient.hxx>
|
||||||
|
@ -52,7 +52,6 @@
|
|||||||
#include <SVTK_ViewModel.h>
|
#include <SVTK_ViewModel.h>
|
||||||
#include <SVTK_ViewWindow.h>
|
#include <SVTK_ViewWindow.h>
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
// SALOME KERNEL includes
|
// SALOME KERNEL includes
|
||||||
#include <SALOMEDSClient.hxx>
|
#include <SALOMEDSClient.hxx>
|
||||||
|
@ -40,7 +40,6 @@
|
|||||||
#include <SUIT_ResourceMgr.h>
|
#include <SUIT_ResourceMgr.h>
|
||||||
|
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
#include <LightApp_Application.h>
|
#include <LightApp_Application.h>
|
||||||
#include <LightApp_SelectionMgr.h>
|
#include <LightApp_SelectionMgr.h>
|
||||||
|
@ -204,7 +204,7 @@ SMESHGUI_EXPORT
|
|||||||
struct toQStr : public toStrT< QString > {
|
struct toQStr : public toStrT< QString > {
|
||||||
toQStr( char* s ): toStrT< QString >(s) {}
|
toQStr( char* s ): toStrT< QString >(s) {}
|
||||||
};
|
};
|
||||||
class toStdStr : public toStrT< std::string > {
|
struct toStdStr : public toStrT< std::string > {
|
||||||
toStdStr( char* s ): toStrT< std::string >(s) {}
|
toStdStr( char* s ): toStrT< std::string >(s) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -47,7 +47,6 @@
|
|||||||
#include <SUIT_ResourceMgr.h>
|
#include <SUIT_ResourceMgr.h>
|
||||||
|
|
||||||
#include <SALOME_ListIO.hxx>
|
#include <SALOME_ListIO.hxx>
|
||||||
#include <SALOME_ListIteratorOfListIO.hxx>
|
|
||||||
|
|
||||||
#include <SVTK_Selector.h>
|
#include <SVTK_Selector.h>
|
||||||
#include <SVTK_ViewModel.h>
|
#include <SVTK_ViewModel.h>
|
||||||
|
@ -161,8 +161,9 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&,
|
|||||||
for ( int i = 0; i < NB_ATTRIBUTES; ++i ) {
|
for ( int i = 0; i < NB_ATTRIBUTES; ++i ) {
|
||||||
QString aStr = atts.value( name[i] );
|
QString aStr = atts.value( name[i] );
|
||||||
if ( !aStr.isEmpty() ) {
|
if ( !aStr.isEmpty() ) {
|
||||||
aStr.remove( ' ' );
|
attr[i] = aStr.split( ',', QString::SkipEmptyParts );
|
||||||
attr[ i ] = aStr.split( ',', QString::SkipEmptyParts );
|
for ( int j = 0; j < attr[i].count(); ++j )
|
||||||
|
attr[i][j] = attr[i][j].trimmed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,6 +255,14 @@
|
|||||||
<source>ICON_DLG_TRIANGLE</source>
|
<source>ICON_DLG_TRIANGLE</source>
|
||||||
<translation>mesh_triangle.png</translation>
|
<translation>mesh_triangle.png</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_DLG_CHOOSE</source>
|
||||||
|
<translation>mesh_choose.png</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ICON_DLG_CHOOSE_ALL</source>
|
||||||
|
<translation>mesh_choose_all.png</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>ICON_EDIT_GROUP</source>
|
<source>ICON_EDIT_GROUP</source>
|
||||||
<translation>mesh_edit_group.png</translation>
|
<translation>mesh_edit_group.png</translation>
|
||||||
|
@ -396,6 +396,10 @@
|
|||||||
<source>MEN_EDGES</source>
|
<source>MEN_EDGES</source>
|
||||||
<translation>Edges</translation>
|
<translation>Edges</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_CHOOSE</source>
|
||||||
|
<translation>Choose...</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_EDIT</source>
|
<source>MEN_EDIT</source>
|
||||||
<translation>Edit</translation>
|
<translation>Edit</translation>
|
||||||
@ -7805,4 +7809,11 @@ as they are of improper type:
|
|||||||
<translation>Shrink coef:</translation>
|
<translation>Shrink coef:</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_DisplayEntitiesDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>WRN_AT_LEAST_ONE</source>
|
||||||
|
<translation>At least one entity type should be chosen!</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
@ -396,6 +396,10 @@
|
|||||||
<source>MEN_EDGES</source>
|
<source>MEN_EDGES</source>
|
||||||
<translation>Arêtes</translation>
|
<translation>Arêtes</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_CHOOSE</source>
|
||||||
|
<translation type="unfinished">Choose...</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_EDIT</source>
|
<source>MEN_EDIT</source>
|
||||||
<translation>Edition</translation>
|
<translation>Edition</translation>
|
||||||
@ -7753,4 +7757,11 @@ en raison de leurs types incompatibles:
|
|||||||
<translation>Coef de réduction:</translation>
|
<translation>Coef de réduction:</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_DisplayEntitiesDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>WRN_AT_LEAST_ONE</source>
|
||||||
|
<translation type="unfinished">At least one entity type should be chosen!</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
@ -395,6 +395,10 @@
|
|||||||
<source>MEN_EDGES</source>
|
<source>MEN_EDGES</source>
|
||||||
<translation>エッジ</translation>
|
<translation>エッジ</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>MEN_CHOOSE</source>
|
||||||
|
<translation type="unfinished">Choose...</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>MEN_EDIT</source>
|
<source>MEN_EDIT</source>
|
||||||
<translation>編集(&E)</translation>
|
<translation>編集(&E)</translation>
|
||||||
@ -7687,4 +7691,11 @@
|
|||||||
<translation>減少係数:</translation>
|
<translation>減少係数:</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>SMESHGUI_DisplayEntitiesDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>WRN_AT_LEAST_ONE</source>
|
||||||
|
<translation type="unfinished">At least one entity type should be chosen!</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
@ -43,7 +43,8 @@ typedef std::map<const SMDS_MeshElement*,
|
|||||||
std::list<const SMDS_MeshElement*>, TIDCompare > TElemOfElemListMap;
|
std::list<const SMDS_MeshElement*>, TIDCompare > TElemOfElemListMap;
|
||||||
typedef std::map<const SMDS_MeshElement*,
|
typedef std::map<const SMDS_MeshElement*,
|
||||||
std::list<const SMDS_MeshNode*>, TIDCompare > TElemOfNodeListMap;
|
std::list<const SMDS_MeshNode*>, TIDCompare > TElemOfNodeListMap;
|
||||||
typedef std::map<const SMDS_MeshNode*, const SMDS_MeshNode*> TNodeNodeMap;
|
typedef std::map<const SMDS_MeshNode*,
|
||||||
|
const SMDS_MeshNode*, TIDCompare> TNodeNodeMap;
|
||||||
|
|
||||||
//!< Set of elements sorted by ID, to be used to assure predictability of edition
|
//!< Set of elements sorted by ID, to be used to assure predictability of edition
|
||||||
typedef std::set< const SMDS_MeshElement*, TIDCompare > TIDSortedElemSet;
|
typedef std::set< const SMDS_MeshElement*, TIDCompare > TIDSortedElemSet;
|
||||||
|
@ -1793,10 +1793,29 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
|
|||||||
list< Handle(_pyHypothesis) >::iterator hyp;
|
list< Handle(_pyHypothesis) >::iterator hyp;
|
||||||
if ( !myLastComputeCmd.IsNull() )
|
if ( !myLastComputeCmd.IsNull() )
|
||||||
{
|
{
|
||||||
for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp )
|
// check if the previously computed mesh has been edited,
|
||||||
(*hyp)->ComputeDiscarded( myLastComputeCmd );
|
// if so then we do not clear the previous Compute()
|
||||||
|
bool toClear = true;
|
||||||
|
if ( myLastComputeCmd->GetMethod() == "Compute" )
|
||||||
|
{
|
||||||
|
list< Handle(_pyMeshEditor)>::iterator e = myEditors.begin();
|
||||||
|
for ( ; e != myEditors.end() && toClear; ++e )
|
||||||
|
{
|
||||||
|
list< Handle(_pyCommand)>& cmds = (*e)->GetProcessedCmds();
|
||||||
|
list< Handle(_pyCommand) >::reverse_iterator cmd = cmds.rbegin();
|
||||||
|
if ( cmd != cmds.rend() &&
|
||||||
|
(*cmd)->GetOrderNb() > myLastComputeCmd->GetOrderNb() )
|
||||||
|
toClear = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( toClear )
|
||||||
|
{
|
||||||
|
// clear hyp commands called before myLastComputeCmd
|
||||||
|
for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp )
|
||||||
|
(*hyp)->ComputeDiscarded( myLastComputeCmd );
|
||||||
|
|
||||||
myLastComputeCmd->Clear();
|
myLastComputeCmd->Clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
myLastComputeCmd = theCommand;
|
myLastComputeCmd = theCommand;
|
||||||
|
|
||||||
@ -1961,7 +1980,7 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
|
|||||||
//
|
//
|
||||||
// remove "PartTo" from the method
|
// remove "PartTo" from the method
|
||||||
TCollection_AsciiString newMethod = method;
|
TCollection_AsciiString newMethod = method;
|
||||||
newMethod.Remove( 7, 6 );
|
newMethod.Remove( /*where=*/7, /*howmany=*/6 );
|
||||||
theCommand->SetMethod( newMethod );
|
theCommand->SetMethod( newMethod );
|
||||||
// make the 1st arg be the last one (or last but three for ExportMED())
|
// make the 1st arg be the last one (or last but three for ExportMED())
|
||||||
_pyID partID = theCommand->GetArg( 1 );
|
_pyID partID = theCommand->GetArg( 1 );
|
||||||
|
@ -117,17 +117,17 @@ public:
|
|||||||
_pyCommand( const _AString& theString, int theNb=-1 )
|
_pyCommand( const _AString& theString, int theNb=-1 )
|
||||||
: myString( theString ), myOrderNb( theNb ) {};
|
: myString( theString ), myOrderNb( theNb ) {};
|
||||||
_AString & GetString() { return myString; }
|
_AString & GetString() { return myString; }
|
||||||
int GetOrderNb() const { return myOrderNb; }
|
int GetOrderNb() const { return myOrderNb; }
|
||||||
void SetOrderNb( int theNb ) { myOrderNb = theNb; }
|
void SetOrderNb( int theNb ) { myOrderNb = theNb; }
|
||||||
typedef void* TAddr;
|
typedef void* TAddr;
|
||||||
TAddr GetAddress() const { return (void*) this; }
|
TAddr GetAddress() const { return (void*) this; }
|
||||||
int Length() const { return myString.Length(); }
|
int Length() const { return myString.Length(); }
|
||||||
void Clear() { myString.Clear(); myBegPos.Clear(); myArgs.Clear(); }
|
void Clear() { myString.Clear(); myBegPos.Clear(); myArgs.Clear(); }
|
||||||
bool IsEmpty() const { return myString.IsEmpty(); }
|
bool IsEmpty() const { return myString.IsEmpty(); }
|
||||||
_AString GetIndentation();
|
_AString GetIndentation();
|
||||||
const _AString & GetResultValue();
|
const _AString & GetResultValue();
|
||||||
int GetNbResultValues();
|
int GetNbResultValues();
|
||||||
const _AString& GetResultValue(int res);
|
const _AString & GetResultValue(int res);
|
||||||
const _AString & GetObject();
|
const _AString & GetObject();
|
||||||
const _AString & GetMethod();
|
const _AString & GetMethod();
|
||||||
const _AString & GetArg( int index );
|
const _AString & GetArg( int index );
|
||||||
@ -183,11 +183,11 @@ public:
|
|||||||
const _pyID& GetID() { return myID.IsEmpty() ? myCreationCmd->GetResultValue() : myID; }
|
const _pyID& GetID() { return myID.IsEmpty() ? myCreationCmd->GetResultValue() : myID; }
|
||||||
static _pyID FatherID(const _pyID & childID);
|
static _pyID FatherID(const _pyID & childID);
|
||||||
const Handle(_pyCommand)& GetCreationCmd() { return myCreationCmd; }
|
const Handle(_pyCommand)& GetCreationCmd() { return myCreationCmd; }
|
||||||
int GetNbCalls() const { return myProcessedCmds.size(); }
|
int GetNbCalls() const { return myProcessedCmds.size(); }
|
||||||
bool IsInStudy() const { return myIsPublished; }
|
bool IsInStudy() const { return myIsPublished; }
|
||||||
virtual void SetRemovedFromStudy(const bool isRemoved) { myIsPublished = !isRemoved; }
|
virtual void SetRemovedFromStudy(const bool isRemoved) { myIsPublished = !isRemoved; }
|
||||||
void SetCreationCmd( Handle(_pyCommand) cmd ) { myCreationCmd = cmd; }
|
void SetCreationCmd( Handle(_pyCommand) cmd ) { myCreationCmd = cmd; }
|
||||||
int GetCommandNb() { return myCreationCmd->GetOrderNb(); }
|
int GetCommandNb() { return myCreationCmd->GetOrderNb(); }
|
||||||
void AddProcessedCmd( const Handle(_pyCommand) & cmd )
|
void AddProcessedCmd( const Handle(_pyCommand) & cmd )
|
||||||
{ if (myProcessedCmds.empty() || myProcessedCmds.back()!=cmd) myProcessedCmds.push_back( cmd );}
|
{ if (myProcessedCmds.empty() || myProcessedCmds.back()!=cmd) myProcessedCmds.push_back( cmd );}
|
||||||
std::list< Handle(_pyCommand) >& GetProcessedCmds() { return myProcessedCmds; }
|
std::list< Handle(_pyCommand) >& GetProcessedCmds() { return myProcessedCmds; }
|
||||||
|
@ -1550,8 +1550,8 @@ void ConnectedElements_i::SetThreshold ( const char*
|
|||||||
if ( sobj->_is_nil() )
|
if ( sobj->_is_nil() )
|
||||||
THROW_SALOME_CORBA_EXCEPTION
|
THROW_SALOME_CORBA_EXCEPTION
|
||||||
( "ConnectedElements_i::SetThreshold(): invalid vertex study entry", SALOME::BAD_PARAM );
|
( "ConnectedElements_i::SetThreshold(): invalid vertex study entry", SALOME::BAD_PARAM );
|
||||||
CORBA::Object_var obj = sobj->GetObject();
|
CORBA::Object_var obj = sobj->GetObject();
|
||||||
GEOM::GEOM_Object_wrap vertex = GEOM::GEOM_Object::_narrow( obj );
|
GEOM::GEOM_Object_var vertex = GEOM::GEOM_Object::_narrow( obj );
|
||||||
if ( vertex->_is_nil() )
|
if ( vertex->_is_nil() )
|
||||||
THROW_SALOME_CORBA_EXCEPTION
|
THROW_SALOME_CORBA_EXCEPTION
|
||||||
( "ConnectedElements_i::SetThreshold(): no GEOM_Object in SObject", SALOME::BAD_PARAM );
|
( "ConnectedElements_i::SetThreshold(): no GEOM_Object in SObject", SALOME::BAD_PARAM );
|
||||||
@ -3020,7 +3020,8 @@ CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria
|
|||||||
|
|
||||||
SMESH::Predicate_ptr aPrevPredicate = SMESH::Predicate::_nil();
|
SMESH::Predicate_ptr aPrevPredicate = SMESH::Predicate::_nil();
|
||||||
int aPrevBinary = SMESH::FT_Undefined;
|
int aPrevBinary = SMESH::FT_Undefined;
|
||||||
aBinaries.back() = SMESH::FT_Undefined;
|
if ( !aBinaries.empty() )
|
||||||
|
aBinaries.back() = SMESH::FT_Undefined;
|
||||||
|
|
||||||
for ( aPredIter = aPredicates.begin(), aBinaryIter = aBinaries.begin();
|
for ( aPredIter = aPredicates.begin(), aBinaryIter = aBinaries.begin();
|
||||||
aPredIter != aPredicates.end() && aBinaryIter != aBinaries.end();
|
aPredIter != aPredicates.end() && aBinaryIter != aBinaries.end();
|
||||||
|
@ -467,23 +467,22 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
|
|||||||
SMESH_Hypothesis_i* myHypothesis_i = 0;
|
SMESH_Hypothesis_i* myHypothesis_i = 0;
|
||||||
SMESH::SMESH_Hypothesis_var hypothesis_i;
|
SMESH::SMESH_Hypothesis_var hypothesis_i;
|
||||||
std::string aPlatformLibName;
|
std::string aPlatformLibName;
|
||||||
typedef GenericHypothesisCreator_i* (*GetHypothesisCreator)(const char* );
|
GenericHypothesisCreator_i* aCreator =
|
||||||
GenericHypothesisCreator_i* aCreator = getHypothesisCreator(theHypName, theLibName, aPlatformLibName);
|
getHypothesisCreator(theHypName, theLibName, aPlatformLibName);
|
||||||
|
|
||||||
// create a new hypothesis object, store its ref. in studyContext
|
// create a new hypothesis object, store its ref. in studyContext
|
||||||
if(MYDEBUG) MESSAGE("Create Hypothesis " << theHypName);
|
myHypothesis_i = aCreator->Create(myPoa, GetCurrentStudyID(), &myGen);
|
||||||
myHypothesis_i =
|
if (myHypothesis_i)
|
||||||
myHypCreatorMap[string(theHypName)]->Create(myPoa, GetCurrentStudyID(), &myGen);
|
{
|
||||||
myHypothesis_i->SetLibName(aPlatformLibName.c_str()); // for persistency assurance
|
myHypothesis_i->SetLibName(aPlatformLibName.c_str()); // for persistency assurance
|
||||||
|
myHypCreatorMap[ myHypothesis_i->GetName() ] = aCreator;
|
||||||
if (!myHypothesis_i)
|
|
||||||
return hypothesis_i._retn();
|
|
||||||
|
|
||||||
// activate the CORBA servant of hypothesis
|
|
||||||
hypothesis_i = myHypothesis_i->_this();
|
|
||||||
int nextId = RegisterObject( hypothesis_i );
|
|
||||||
if(MYDEBUG) { MESSAGE( "Add hypo to map with id = "<< nextId ); }
|
|
||||||
else { nextId = 0; } // avoid "unused variable" warning in release mode
|
|
||||||
|
|
||||||
|
// activate the CORBA servant of hypothesis
|
||||||
|
hypothesis_i = myHypothesis_i->_this();
|
||||||
|
int nextId = RegisterObject( hypothesis_i );
|
||||||
|
if(MYDEBUG) { MESSAGE( "Add hypo to map with id = "<< nextId ); }
|
||||||
|
else { nextId = 0; } // avoid "unused variable" warning in release mode
|
||||||
|
}
|
||||||
return hypothesis_i._retn();
|
return hypothesis_i._retn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,8 @@
|
|||||||
#include <TCollection_AsciiString.hxx>
|
#include <TCollection_AsciiString.hxx>
|
||||||
#include <TopoDS_Solid.hxx>
|
#include <TopoDS_Solid.hxx>
|
||||||
|
|
||||||
|
#include <cctype>
|
||||||
|
|
||||||
#ifdef _DEBUG_
|
#ifdef _DEBUG_
|
||||||
static int MYDEBUG = 0;
|
static int MYDEBUG = 0;
|
||||||
//static int VARIABLE_DEBUG = 0;
|
//static int VARIABLE_DEBUG = 0;
|
||||||
@ -341,9 +343,15 @@ void SMESH_Gen_i::SetName(SALOMEDS::SObject_ptr theSObject,
|
|||||||
SALOMEDS::GenericAttribute_wrap anAttr =
|
SALOMEDS::GenericAttribute_wrap anAttr =
|
||||||
aStudyBuilder->FindOrCreateAttribute( theSObject, "AttributeName" );
|
aStudyBuilder->FindOrCreateAttribute( theSObject, "AttributeName" );
|
||||||
SALOMEDS::AttributeName_wrap aNameAttr = anAttr;
|
SALOMEDS::AttributeName_wrap aNameAttr = anAttr;
|
||||||
if ( theName && strlen( theName ) != 0 )
|
if ( theName && theName[0] ) {
|
||||||
aNameAttr->SetValue( theName );
|
std::string name( theName ); // trim trailing white spaces
|
||||||
else {
|
for ( size_t i = name.size()-1; i > 0; --i )
|
||||||
|
if ( isspace( name[i] )) name[i] = '\0';
|
||||||
|
else break;
|
||||||
|
aNameAttr->SetValue( name.c_str() );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
CORBA::String_var curName = aNameAttr->Value();
|
CORBA::String_var curName = aNameAttr->Value();
|
||||||
if ( strlen( curName.in() ) == 0 ) {
|
if ( strlen( curName.in() ) == 0 ) {
|
||||||
SMESH_Comment aName(theDefaultName);
|
SMESH_Comment aName(theDefaultName);
|
||||||
|
@ -64,6 +64,7 @@
|
|||||||
#include <Utils_CorbaException.hxx>
|
#include <Utils_CorbaException.hxx>
|
||||||
#include <SALOMEDS_wrap.hxx>
|
#include <SALOMEDS_wrap.hxx>
|
||||||
#include <SALOME_GenericObj_i.hh>
|
#include <SALOME_GenericObj_i.hh>
|
||||||
|
#include <Basics_OCCTVersion.hxx>
|
||||||
|
|
||||||
#include <BRepAdaptor_Surface.hxx>
|
#include <BRepAdaptor_Surface.hxx>
|
||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
@ -4746,9 +4747,16 @@ SMESH_MeshEditor_i::scale(SMESH::SMESH_IDSource_ptr theObject,
|
|||||||
};
|
};
|
||||||
double tol = std::numeric_limits<double>::max();
|
double tol = std::numeric_limits<double>::max();
|
||||||
gp_Trsf aTrsf;
|
gp_Trsf aTrsf;
|
||||||
|
|
||||||
|
#if OCC_VERSION_LARGE > 0x06070100
|
||||||
|
aTrsf.SetValues( S[0], 0, 0, thePoint.x * (1-S[0]),
|
||||||
|
0, S[1], 0, thePoint.y * (1-S[1]),
|
||||||
|
0, 0, S[2], thePoint.z * (1-S[2]) );
|
||||||
|
#else
|
||||||
aTrsf.SetValues( S[0], 0, 0, thePoint.x * (1-S[0]),
|
aTrsf.SetValues( S[0], 0, 0, thePoint.x * (1-S[0]),
|
||||||
0, S[1], 0, thePoint.y * (1-S[1]),
|
0, S[1], 0, thePoint.y * (1-S[1]),
|
||||||
0, 0, S[2], thePoint.z * (1-S[2]), tol, tol);
|
0, 0, S[2], thePoint.z * (1-S[2]), tol, tol);
|
||||||
|
#endif
|
||||||
|
|
||||||
TIDSortedElemSet copyElements;
|
TIDSortedElemSet copyElements;
|
||||||
TIDSortedElemSet* workElements = &elements;
|
TIDSortedElemSet* workElements = &elements;
|
||||||
|
@ -385,7 +385,7 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
|
|||||||
algo = self.mesh.smeshpyD.CreateHypothesis("SegmentAroundVertex_0D", "libStdMeshersEngine.so")
|
algo = self.mesh.smeshpyD.CreateHypothesis("SegmentAroundVertex_0D", "libStdMeshersEngine.so")
|
||||||
pass
|
pass
|
||||||
status = self.mesh.mesh.AddHypothesis(self.geom, algo)
|
status = self.mesh.mesh.AddHypothesis(self.geom, algo)
|
||||||
TreatHypoStatus(status, "SegmentAroundVertex_0D", name, True)
|
TreatHypoStatus(status, "SegmentAroundVertex_0D", name, True, self.mesh)
|
||||||
#
|
#
|
||||||
from salome.smesh.smeshBuilder import IsEqual
|
from salome.smesh.smeshBuilder import IsEqual
|
||||||
comFun = lambda hyp, args: IsEqual(hyp.GetLength(), args[0])
|
comFun = lambda hyp, args: IsEqual(hyp.GetLength(), args[0])
|
||||||
@ -830,12 +830,13 @@ class StdMeshersBuilder_Projection2D(Mesh_Algorithm):
|
|||||||
from salome.smesh.smeshBuilder import AssureGeomPublished
|
from salome.smesh.smeshBuilder import AssureGeomPublished
|
||||||
AssureGeomPublished( self.mesh, geom )
|
AssureGeomPublished( self.mesh, geom )
|
||||||
hyp = self.Hypothesis("ProjectionSource2D", [face,mesh,srcV1,tgtV1,srcV2,tgtV2],
|
hyp = self.Hypothesis("ProjectionSource2D", [face,mesh,srcV1,tgtV1,srcV2,tgtV2],
|
||||||
UseExisting=0)
|
UseExisting=0, toAdd=False)
|
||||||
# it does not seem to be useful to reuse the existing "SourceFace" hypothesis
|
# it does not seem to be useful to reuse the existing "SourceFace" hypothesis
|
||||||
#UseExisting=UseExisting, CompareMethod=self.CompareSourceFace)
|
#UseExisting=UseExisting, CompareMethod=self.CompareSourceFace)
|
||||||
hyp.SetSourceFace( face )
|
hyp.SetSourceFace( face )
|
||||||
hyp.SetSourceMesh( mesh )
|
hyp.SetSourceMesh( mesh )
|
||||||
hyp.SetVertexAssociation( srcV1, srcV2, tgtV1, tgtV2 )
|
hyp.SetVertexAssociation( srcV1, srcV2, tgtV1, tgtV2 )
|
||||||
|
self.mesh.AddHypothesis(hyp, self.geom)
|
||||||
return hyp
|
return hyp
|
||||||
|
|
||||||
pass # end of StdMeshersBuilder_Projection2D class
|
pass # end of StdMeshersBuilder_Projection2D class
|
||||||
|
@ -627,7 +627,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
|
|||||||
# pass result of Mesh.GetIDSource( list_of_ids, type ) as meshPart
|
# pass result of Mesh.GetIDSource( list_of_ids, type ) as meshPart
|
||||||
# @param meshName a name of the new mesh
|
# @param meshName a name of the new mesh
|
||||||
# @param toCopyGroups to create in the new mesh groups the copied elements belongs to
|
# @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
|
# @param toKeepIDs to preserve order of the copied elements or not
|
||||||
# @return an instance of Mesh class
|
# @return an instance of Mesh class
|
||||||
def CopyMesh( self, meshPart, meshName, toCopyGroups=False, toKeepIDs=False):
|
def CopyMesh( self, meshPart, meshName, toCopyGroups=False, toKeepIDs=False):
|
||||||
if (isinstance( meshPart, Mesh )):
|
if (isinstance( meshPart, Mesh )):
|
||||||
@ -1596,7 +1596,7 @@ class Mesh:
|
|||||||
AssureGeomPublished( self, geom, "shape for %s" % hyp.GetName())
|
AssureGeomPublished( self, geom, "shape for %s" % hyp.GetName())
|
||||||
status = self.mesh.AddHypothesis(geom, hyp)
|
status = self.mesh.AddHypothesis(geom, hyp)
|
||||||
else:
|
else:
|
||||||
status = HYP_BAD_GEOMETRY
|
status = HYP_BAD_GEOMETRY,""
|
||||||
hyp_name = GetName( hyp )
|
hyp_name = GetName( hyp )
|
||||||
geom_name = ""
|
geom_name = ""
|
||||||
if geom:
|
if geom:
|
||||||
@ -1876,7 +1876,12 @@ class Mesh:
|
|||||||
# @ingroup l2_grps_create
|
# @ingroup l2_grps_create
|
||||||
def MakeGroupByIds(self, groupName, elementType, elemIDs):
|
def MakeGroupByIds(self, groupName, elementType, elemIDs):
|
||||||
group = self.mesh.CreateGroup(elementType, groupName)
|
group = self.mesh.CreateGroup(elementType, groupName)
|
||||||
group.Add(elemIDs)
|
if hasattr( elemIDs, "GetIDs" ):
|
||||||
|
if hasattr( elemIDs, "SetMesh" ):
|
||||||
|
elemIDs.SetMesh( self.GetMesh() )
|
||||||
|
group.AddFrom( elemIDs )
|
||||||
|
else:
|
||||||
|
group.Add(elemIDs)
|
||||||
return group
|
return group
|
||||||
|
|
||||||
## Creates a mesh group by the given conditions
|
## Creates a mesh group by the given conditions
|
||||||
@ -3451,7 +3456,7 @@ class Mesh:
|
|||||||
|
|
||||||
##
|
##
|
||||||
# @brief Creates missing boundary elements around either the whole mesh or
|
# @brief Creates missing boundary elements around either the whole mesh or
|
||||||
# groups of 2D elements
|
# groups of elements
|
||||||
# @param dimension - defines type of boundary elements to create
|
# @param dimension - defines type of boundary elements to create
|
||||||
# @param groupName - a name of group to store all boundary elements in,
|
# @param groupName - a name of group to store all boundary elements in,
|
||||||
# "" means not to create the group
|
# "" means not to create the group
|
||||||
@ -3459,7 +3464,7 @@ class Mesh:
|
|||||||
# mesh + created boundary elements; "" means not to create the new mesh
|
# mesh + created boundary elements; "" means not to create the new mesh
|
||||||
# @param toCopyAll - if true, the whole initial mesh will be copied into
|
# @param toCopyAll - if true, the whole initial mesh will be copied into
|
||||||
# the new mesh else only boundary elements will be copied into the new mesh
|
# the new mesh else only boundary elements will be copied into the new mesh
|
||||||
# @param groups - groups of 2D elements to make boundary around
|
# @param groups - groups of elements to make boundary around
|
||||||
# @retval tuple( long, mesh, groups )
|
# @retval tuple( long, mesh, groups )
|
||||||
# long - number of added boundary elements
|
# long - number of added boundary elements
|
||||||
# mesh - the mesh where elements were added to
|
# mesh - the mesh where elements were added to
|
||||||
@ -3472,12 +3477,12 @@ class Mesh:
|
|||||||
if mesh: mesh = self.smeshpyD.Mesh(mesh)
|
if mesh: mesh = self.smeshpyD.Mesh(mesh)
|
||||||
return nb, mesh, group
|
return nb, mesh, group
|
||||||
|
|
||||||
## Renumber mesh nodes
|
## Renumber mesh nodes (Obsolete, does nothing)
|
||||||
# @ingroup l2_modif_renumber
|
# @ingroup l2_modif_renumber
|
||||||
def RenumberNodes(self):
|
def RenumberNodes(self):
|
||||||
self.editor.RenumberNodes()
|
self.editor.RenumberNodes()
|
||||||
|
|
||||||
## Renumber mesh elements
|
## Renumber mesh elements (Obsole, does nothing)
|
||||||
# @ingroup l2_modif_renumber
|
# @ingroup l2_modif_renumber
|
||||||
def RenumberElements(self):
|
def RenumberElements(self):
|
||||||
self.editor.RenumberElements()
|
self.editor.RenumberElements()
|
||||||
|
@ -40,7 +40,7 @@ import SMESH
|
|||||||
# @code
|
# @code
|
||||||
# meshMethod = "MyAlgorithm"
|
# meshMethod = "MyAlgorithm"
|
||||||
# @endcode
|
# @endcode
|
||||||
# then an instance of @c MyPlugin_Algorithm can be created by the direct invokation of the function
|
# then an instance of @c MyPlugin_Algorithm can be created by the direct invocation of the function
|
||||||
# of smesh.Mesh class:
|
# of smesh.Mesh class:
|
||||||
# @code
|
# @code
|
||||||
# my_algo = mesh.MyAlgorithm()
|
# my_algo = mesh.MyAlgorithm()
|
||||||
@ -257,7 +257,7 @@ class Mesh_Algorithm:
|
|||||||
|
|
||||||
## Defines "ViscousLayers" hypothesis to give parameters of layers of prisms to build
|
## Defines "ViscousLayers" hypothesis to give parameters of layers of prisms to build
|
||||||
# near mesh boundary. This hypothesis can be used by several 3D algorithms:
|
# near mesh boundary. This hypothesis can be used by several 3D algorithms:
|
||||||
# NETGEN 3D, GHS3D, Hexahedron(i,j,k)
|
# NETGEN 3D, MG-Tetra, Hexahedron(i,j,k)
|
||||||
# @param thickness total thickness of layers of prisms
|
# @param thickness total thickness of layers of prisms
|
||||||
# @param numberOfLayers number of layers of prisms
|
# @param numberOfLayers number of layers of prisms
|
||||||
# @param stretchFactor factor (>1.0) of growth of layer thickness towards inside of mesh
|
# @param stretchFactor factor (>1.0) of growth of layer thickness towards inside of mesh
|
||||||
@ -274,7 +274,14 @@ class Mesh_Algorithm:
|
|||||||
if not "ViscousLayers" in self.GetCompatibleHypothesis():
|
if not "ViscousLayers" in self.GetCompatibleHypothesis():
|
||||||
raise TypeError, "ViscousLayers are not supported by %s"%self.algo.GetName()
|
raise TypeError, "ViscousLayers are not supported by %s"%self.algo.GetName()
|
||||||
if faces and isinstance( faces[0], geomBuilder.GEOM._objref_GEOM_Object ):
|
if faces and isinstance( faces[0], geomBuilder.GEOM._objref_GEOM_Object ):
|
||||||
faces = [ self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f) for f in faces ]
|
import GEOM
|
||||||
|
faceIDs = []
|
||||||
|
for f in faces:
|
||||||
|
if self.mesh.geompyD.ShapeIdToType( f.GetType() ) == "GROUP":
|
||||||
|
faceIDs += f.GetSubShapeIndices()
|
||||||
|
else:
|
||||||
|
faceIDs += [self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f)]
|
||||||
|
faces = faceIDs
|
||||||
hyp = self.Hypothesis("ViscousLayers",
|
hyp = self.Hypothesis("ViscousLayers",
|
||||||
[thickness, numberOfLayers, stretchFactor, faces, isFacesToIgnore],
|
[thickness, numberOfLayers, stretchFactor, faces, isFacesToIgnore],
|
||||||
toAdd=False)
|
toAdd=False)
|
||||||
@ -287,7 +294,7 @@ class Mesh_Algorithm:
|
|||||||
|
|
||||||
## Defines "ViscousLayers2D" hypothesis to give parameters of layers of quadrilateral
|
## Defines "ViscousLayers2D" hypothesis to give parameters of layers of quadrilateral
|
||||||
# elements to build near mesh boundary. This hypothesis can be used by several 2D algorithms:
|
# elements to build near mesh boundary. This hypothesis can be used by several 2D algorithms:
|
||||||
# NETGEN 2D, NETGEN 1D-2D, Quadrangle (mapping), MEFISTO, BLSURF
|
# NETGEN 2D, NETGEN 1D-2D, Quadrangle (mapping), MEFISTO, MG-CADSurf
|
||||||
# @param thickness total thickness of layers of quadrilaterals
|
# @param thickness total thickness of layers of quadrilaterals
|
||||||
# @param numberOfLayers number of layers
|
# @param numberOfLayers number of layers
|
||||||
# @param stretchFactor factor (>1.0) of growth of layer thickness towards inside of mesh
|
# @param stretchFactor factor (>1.0) of growth of layer thickness towards inside of mesh
|
||||||
|
@ -1179,6 +1179,7 @@ bool AdaptiveAlgo::Compute(SMESH_Mesh & theMesh,
|
|||||||
eData.AddPoint( eData.myPoints.end(), eData.myC3d.LastParameter() );
|
eData.AddPoint( eData.myPoints.end(), eData.myC3d.LastParameter() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( myEdges.empty() ) return true;
|
||||||
if ( _computeCanceled ) return false;
|
if ( _computeCanceled ) return false;
|
||||||
|
|
||||||
// Take into account size of already existing segments
|
// Take into account size of already existing segments
|
||||||
|
@ -329,7 +329,7 @@ void StdMeshers_CartesianParameters3D::ComputeCoordinates(const double x0,
|
|||||||
coords.clear();
|
coords.clear();
|
||||||
for ( size_t i = 0; i < spaceFuns.size(); ++i )
|
for ( size_t i = 0; i < spaceFuns.size(); ++i )
|
||||||
{
|
{
|
||||||
FunctionExpr fun( spaceFuns[i].c_str(), /*convMode=*/-1 );
|
StdMeshers::FunctionExpr fun( spaceFuns[i].c_str(), /*convMode=*/-1 );
|
||||||
|
|
||||||
const double p0 = x0 * ( 1. - points[i]) + x1 * points[i];
|
const double p0 = x0 * ( 1. - points[i]) + x1 * points[i];
|
||||||
const double p1 = x0 * ( 1. - points[i+1]) + x1 * points[i+1];
|
const double p1 = x0 * ( 1. - points[i+1]) + x1 * points[i+1];
|
||||||
|
@ -100,17 +100,6 @@ using namespace std;
|
|||||||
//#define _MY_DEBUG_
|
//#define _MY_DEBUG_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if OCC_VERSION_LARGE <= 0x06050300
|
|
||||||
// workaround is required only for OCCT6.5.3 and older (see OCC22809)
|
|
||||||
#define ELLIPSOLID_WORKAROUND
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ELLIPSOLID_WORKAROUND
|
|
||||||
#include <BRepIntCurveSurface_Inter.hxx>
|
|
||||||
#include <BRepTopAdaptor_TopolTool.hxx>
|
|
||||||
#include <BRepAdaptor_HSurface.hxx>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
* Constructor
|
* Constructor
|
||||||
@ -317,41 +306,6 @@ namespace
|
|||||||
void ComputeUVW(const gp_XYZ& p, double uvw[3]);
|
void ComputeUVW(const gp_XYZ& p, double uvw[3]);
|
||||||
void ComputeNodes(SMESH_MesherHelper& helper);
|
void ComputeNodes(SMESH_MesherHelper& helper);
|
||||||
};
|
};
|
||||||
#ifdef ELLIPSOLID_WORKAROUND
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
/*!
|
|
||||||
* \brief struct temporary replacing IntCurvesFace_Intersector until
|
|
||||||
* OCCT bug 0022809 is fixed
|
|
||||||
* http://tracker.dev.opencascade.org/view.php?id=22809
|
|
||||||
*/
|
|
||||||
struct TMP_IntCurvesFace_Intersector
|
|
||||||
{
|
|
||||||
BRepAdaptor_Surface _surf;
|
|
||||||
double _tol;
|
|
||||||
BRepIntCurveSurface_Inter _intcs;
|
|
||||||
vector<IntCurveSurface_IntersectionPoint> _points;
|
|
||||||
BRepTopAdaptor_TopolTool _clsf;
|
|
||||||
|
|
||||||
TMP_IntCurvesFace_Intersector(const TopoDS_Face& face, const double tol)
|
|
||||||
:_surf( face ), _tol( tol ), _clsf( new BRepAdaptor_HSurface(_surf) ) {}
|
|
||||||
Bnd_Box Bounding() const { Bnd_Box b; BRepBndLib::Add (_surf.Face(), b); return b; }
|
|
||||||
void Perform( const gp_Lin& line, const double w0, const double w1 )
|
|
||||||
{
|
|
||||||
_points.clear();
|
|
||||||
for ( _intcs.Init( _surf.Face(), line, _tol ); _intcs.More(); _intcs.Next() )
|
|
||||||
if ( w0 <= _intcs.W() && _intcs.W() <= w1 )
|
|
||||||
_points.push_back( _intcs.Point() );
|
|
||||||
}
|
|
||||||
bool IsDone() const { return true; }
|
|
||||||
int NbPnt() const { return _points.size(); }
|
|
||||||
IntCurveSurface_TransitionOnCurve Transition( const int i ) const { return _points[ i-1 ].Transition(); }
|
|
||||||
double WParameter( const int i ) const { return _points[ i-1 ].W(); }
|
|
||||||
TopAbs_State ClassifyUVPoint(const gp_Pnt2d& p) { return _clsf.Classify( p, _tol ); }
|
|
||||||
};
|
|
||||||
#define __IntCurvesFace_Intersector TMP_IntCurvesFace_Intersector
|
|
||||||
#else
|
|
||||||
#define __IntCurvesFace_Intersector IntCurvesFace_Intersector
|
|
||||||
#endif
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
/*!
|
/*!
|
||||||
* \brief Intersector of TopoDS_Face with all GridLine's
|
* \brief Intersector of TopoDS_Face with all GridLine's
|
||||||
@ -362,7 +316,7 @@ namespace
|
|||||||
TGeomID _faceID;
|
TGeomID _faceID;
|
||||||
Grid* _grid;
|
Grid* _grid;
|
||||||
Bnd_Box _bndBox;
|
Bnd_Box _bndBox;
|
||||||
__IntCurvesFace_Intersector* _surfaceInt;
|
IntCurvesFace_Intersector* _surfaceInt;
|
||||||
vector< std::pair< GridLine*, F_IntersectPoint > > _intersections;
|
vector< std::pair< GridLine*, F_IntersectPoint > > _intersections;
|
||||||
|
|
||||||
FaceGridIntersector(): _grid(0), _surfaceInt(0) {}
|
FaceGridIntersector(): _grid(0), _surfaceInt(0) {}
|
||||||
@ -383,11 +337,11 @@ namespace
|
|||||||
GetCurveFaceIntersector();
|
GetCurveFaceIntersector();
|
||||||
return _bndBox;
|
return _bndBox;
|
||||||
}
|
}
|
||||||
__IntCurvesFace_Intersector* GetCurveFaceIntersector()
|
IntCurvesFace_Intersector* GetCurveFaceIntersector()
|
||||||
{
|
{
|
||||||
if ( !_surfaceInt )
|
if ( !_surfaceInt )
|
||||||
{
|
{
|
||||||
_surfaceInt = new __IntCurvesFace_Intersector( _face, Precision::PConfusion() );
|
_surfaceInt = new IntCurvesFace_Intersector( _face, Precision::PConfusion() );
|
||||||
_bndBox = _surfaceInt->Bounding();
|
_bndBox = _surfaceInt->Bounding();
|
||||||
if ( _bndBox.IsVoid() )
|
if ( _bndBox.IsVoid() )
|
||||||
BRepBndLib::Add (_face, _bndBox);
|
BRepBndLib::Add (_face, _bndBox);
|
||||||
@ -412,7 +366,7 @@ namespace
|
|||||||
gp_Cone _cone;
|
gp_Cone _cone;
|
||||||
gp_Sphere _sphere;
|
gp_Sphere _sphere;
|
||||||
gp_Torus _torus;
|
gp_Torus _torus;
|
||||||
__IntCurvesFace_Intersector* _surfaceInt;
|
IntCurvesFace_Intersector* _surfaceInt;
|
||||||
|
|
||||||
vector< F_IntersectPoint > _intPoints;
|
vector< F_IntersectPoint > _intPoints;
|
||||||
|
|
||||||
|
@ -43,6 +43,8 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
namespace StdMeshers {
|
||||||
|
|
||||||
Function::Function( const int conv )
|
Function::Function( const int conv )
|
||||||
: myConv( conv )
|
: myConv( conv )
|
||||||
{
|
{
|
||||||
@ -345,3 +347,4 @@ bool buildDistribution( const Function& func, const double start, const double e
|
|||||||
data[nbSeg] = end;
|
data[nbSeg] = end;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -37,7 +37,8 @@
|
|||||||
#include <Expr_Array1OfNamedUnknown.hxx>
|
#include <Expr_Array1OfNamedUnknown.hxx>
|
||||||
#include <TColStd_Array1OfReal.hxx>
|
#include <TColStd_Array1OfReal.hxx>
|
||||||
|
|
||||||
|
namespace StdMeshers
|
||||||
|
{
|
||||||
class STDMESHERS_EXPORT Function
|
class STDMESHERS_EXPORT Function
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -114,5 +115,5 @@ bool buildDistribution( const TCollection_AsciiString& f, const int conv, const
|
|||||||
STDMESHERS_EXPORT
|
STDMESHERS_EXPORT
|
||||||
bool buildDistribution( const std::vector<double>& f, const int conv, const double start, const double end,
|
bool buildDistribution( const std::vector<double>& f, const int conv, const double start, const double end,
|
||||||
const int nbSeg, std::vector<double>& data, const double eps );
|
const int nbSeg, std::vector<double>& data, const double eps );
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
#include <GCPnts_AbscissaPoint.hxx>
|
#include <GCPnts_AbscissaPoint.hxx>
|
||||||
#include <Geom2dAdaptor_Curve.hxx>
|
#include <Geom2dAdaptor_Curve.hxx>
|
||||||
|
#include <Geom_Line.hxx>
|
||||||
#include <TopExp.hxx>
|
#include <TopExp.hxx>
|
||||||
#include <TopExp_Explorer.hxx>
|
#include <TopExp_Explorer.hxx>
|
||||||
#include <TopoDS.hxx>
|
#include <TopoDS.hxx>
|
||||||
@ -151,21 +152,26 @@ StdMeshers_FaceSide::StdMeshers_FaceSide(const TopoDS_Face& theFace,
|
|||||||
myMissingVertexNodes = true;
|
myMissingVertexNodes = true;
|
||||||
|
|
||||||
// check if the edge has a non-uniform parametrization (issue 0020705)
|
// check if the edge has a non-uniform parametrization (issue 0020705)
|
||||||
if ( !myC2d[i].IsNull() && myEdgeLength[i] > DBL_MIN)
|
if ( !myC2d[i].IsNull() )
|
||||||
{
|
{
|
||||||
Geom2dAdaptor_Curve A2dC( myC2d[i],
|
if ( myEdgeLength[i] > DBL_MIN)
|
||||||
std::min( myFirst[i], myLast[i] ),
|
|
||||||
std::max( myFirst[i], myLast[i] ));
|
|
||||||
double p2 = myFirst[i]+(myLast[i]-myFirst[i])/2., p4 = myFirst[i]+(myLast[i]-myFirst[i])/4.;
|
|
||||||
double d2 = GCPnts_AbscissaPoint::Length( A2dC, myFirst[i], p2 );
|
|
||||||
double d4 = GCPnts_AbscissaPoint::Length( A2dC, myFirst[i], p4 );
|
|
||||||
//cout<<"len = "<<len<<" d2 = "<<d2<<" fabs(2*d2/len-1.0) = "<<fabs(2*d2/len-1.0)<<endl;
|
|
||||||
myIsUniform[i] = !( fabs(2*d2/myEdgeLength[i]-1.0) > 0.01 || fabs(2*d4/d2-1.0) > 0.01 );
|
|
||||||
//if ( !myIsUniform[i] ) to implement Value3d(u)
|
|
||||||
{
|
{
|
||||||
double fp,lp;
|
Geom2dAdaptor_Curve A2dC( myC2d[i],
|
||||||
Handle(Geom_Curve) C3d = BRep_Tool::Curve(myEdge[i],fp,lp);
|
std::min( myFirst[i], myLast[i] ),
|
||||||
myC3dAdaptor[i].Load( C3d, fp,lp );
|
std::max( myFirst[i], myLast[i] ));
|
||||||
|
double p2 = myFirst[i]+(myLast[i]-myFirst[i])/2., p4 = myFirst[i]+(myLast[i]-myFirst[i])/4.;
|
||||||
|
double d2 = GCPnts_AbscissaPoint::Length( A2dC, myFirst[i], p2 );
|
||||||
|
double d4 = GCPnts_AbscissaPoint::Length( A2dC, myFirst[i], p4 );
|
||||||
|
//cout<<"len = "<<len<<" d2 = "<<d2<<" fabs(2*d2/len-1.0) = "<<fabs(2*d2/len-1.0)<<endl;
|
||||||
|
myIsUniform[i] = !( fabs(2*d2/myEdgeLength[i]-1.0) > 0.01 || fabs(2*d4/d2-1.0) > 0.01 );
|
||||||
|
Handle(Geom_Curve) C3d = BRep_Tool::Curve(myEdge[i],d2,d4);
|
||||||
|
myC3dAdaptor[i].Load( C3d, d2,d4 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const TopoDS_Vertex& V = TopoDS::Vertex( vExp.Value() );
|
||||||
|
Handle(Geom_Curve) C3d = new Geom_Line( BRep_Tool::Pnt( V ), gp::DX() );
|
||||||
|
myC3dAdaptor[i].Load( C3d, 0, 0.5 * BRep_Tool::Tolerance( V ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// reverse a proxy submesh
|
// reverse a proxy submesh
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
|
|
||||||
#include <Basics_Utils.hxx>
|
#include <Basics_Utils.hxx>
|
||||||
|
|
||||||
|
using namespace StdMeshers;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
const double PRECISION = 1e-7;
|
const double PRECISION = 1e-7;
|
||||||
|