mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-13 17:18:35 +05:00
22874: [CEA 1425] Performance SMESH Module
Fix a leak of PropagationMgrData + Do not use volumes for preview of Extrusion + Fix a regression: empty groups are not removed with contents + avoid too long waiting at creation of hypotheses due to use of GEOMUtils::PreciseBoundingBox() in SMESH_Mesh::GetShapeDiagonalSize()
This commit is contained in:
parent
bbca2cb797
commit
0921263864
BIN
doc/salome/gui/SMESH/images/quad_mesh_invalid.png
Normal file
BIN
doc/salome/gui/SMESH/images/quad_mesh_invalid.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
doc/salome/gui/SMESH/images/quad_meshes.png
Normal file
BIN
doc/salome/gui/SMESH/images/quad_meshes.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
@ -10,6 +10,22 @@ with different parameters you can preset the quantity or size of
|
|||||||
elements which will compose your mesh. So, it will be possible to
|
elements which will compose your mesh. So, it will be possible to
|
||||||
generate a coarse or a more refined mesh.
|
generate a coarse or a more refined mesh.
|
||||||
|
|
||||||
|
The choice of a hypothesis depends on the selected algorithm.
|
||||||
|
|
||||||
|
Hypotheses are created during creation and edition of
|
||||||
|
\ref constructing_meshes_page "meshes" and
|
||||||
|
\ref constructing_submeshes_page "sub-mesh".
|
||||||
|
Once created a hypotheses can be reused during creation and
|
||||||
|
edition of other meshes and sub-meshes. All created hypotheses and
|
||||||
|
algorithms are present in the Object Browser in \a Hypotheses and
|
||||||
|
\a Algorithms folders correspondingly. From the context menu of the
|
||||||
|
hypothesis you can invoke a dialog for modification of its parameters,
|
||||||
|
and \b Unassign command that will unassign the hypothesis from all
|
||||||
|
the meshes and sub-meshes using it.
|
||||||
|
Modification of any hypothesis parameter and unassignment of a
|
||||||
|
hypothesis leads to automatic removal of elements generated with use
|
||||||
|
of this hypothesis.
|
||||||
|
|
||||||
In \b MESH there are the following Basic Hypotheses:
|
In \b MESH there are the following Basic Hypotheses:
|
||||||
<ul>
|
<ul>
|
||||||
<li>\subpage a1d_meshing_hypo_page "1D Hypotheses" (for meshing of
|
<li>\subpage a1d_meshing_hypo_page "1D Hypotheses" (for meshing of
|
||||||
@ -39,8 +55,7 @@ In \b MESH there are the following Basic Hypotheses:
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
There also exist
|
There also exist
|
||||||
\subpage additional_hypo_page "Additional Hypotheses" that can be used together
|
\subpage additional_hypo_page "Additional Hypotheses":
|
||||||
with main hypotheses:
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>\ref propagation_anchor "Propagation of 1D Hypothesis on opposite edges"</li>
|
<li>\ref propagation_anchor "Propagation of 1D Hypothesis on opposite edges"</li>
|
||||||
<li>\ref propagofdistribution_anchor "Propagation of Node Distribution on Opposite Edges"</li>
|
<li>\ref propagofdistribution_anchor "Propagation of Node Distribution on Opposite Edges"</li>
|
||||||
@ -49,6 +64,4 @@ with main hypotheses:
|
|||||||
<li>\ref quadrangle_preference_anchor "Quadrangle preference"</li>
|
<li>\ref quadrangle_preference_anchor "Quadrangle preference"</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
The choice of a hypothesis depends on the selected algorithm.
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
@ -18,7 +18,7 @@ Mesh module provides several ways to create the mesh:
|
|||||||
objects).
|
objects).
|
||||||
|
|
||||||
Construction of \subpage constructing_submeshes_page "sub-meshes"
|
Construction of \subpage constructing_submeshes_page "sub-meshes"
|
||||||
allows to mesh some sub-shapes of the main shape, for example a face,
|
allows to discretize some sub-shapes of the main shape, for example a face,
|
||||||
using different meshing parameters than other sub-shapes.<br>
|
using different meshing parameters than other sub-shapes.<br>
|
||||||
Meshing parameters of meshes and sub-meshes can be
|
Meshing parameters of meshes and sub-meshes can be
|
||||||
\subpage editing_meshes_page "edited". (Upon edition only mesh entities
|
\subpage editing_meshes_page "edited". (Upon edition only mesh entities
|
||||||
@ -58,6 +58,12 @@ Mesh module provides several ways to create the mesh:
|
|||||||
Meshes can be edited using the MESH functions destined for
|
Meshes can be edited using the MESH functions destined for
|
||||||
\ref modifying_meshes_page "modification" of meshes.
|
\ref modifying_meshes_page "modification" of meshes.
|
||||||
|
|
||||||
|
Attractive meshing capabilities include:
|
||||||
|
- 3D and 2D \ref viscous_layers_anchor "Viscous Layers" (boundary
|
||||||
|
layers of highly stretched elements beneficial for high quality
|
||||||
|
viscous computations);
|
||||||
|
- automatic conformal transition between tetrahedral and hexahedral
|
||||||
|
sub-meshes.
|
||||||
|
|
||||||
The \b structure of a SALOME mesh is described by nodes and elements based on
|
The \b structure of a SALOME mesh is described by nodes and elements based on
|
||||||
these nodes. Geometry of the element is defined by the sequence of
|
these nodes. Geometry of the element is defined by the sequence of
|
||||||
|
@ -28,8 +28,8 @@ number of mesh segments following an 1D hypothesis.
|
|||||||
<ul>
|
<ul>
|
||||||
<li><em>Triangle (Mefisto)</em> meshing algorithm - splits faces
|
<li><em>Triangle (Mefisto)</em> meshing algorithm - splits faces
|
||||||
into triangular elements.</li>
|
into triangular elements.</li>
|
||||||
<li><em>Quadrangle (Mapping)</em> meshing algorithm - splits faces
|
<li>\subpage quad_ijk_algo_page "Quadrangle (Mapping)" meshing
|
||||||
into quadrangular elements.</li>
|
algorithm - splits faces into quadrangular elements.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
\image html image123.gif "Example of a triangular 2D mesh"
|
\image html image123.gif "Example of a triangular 2D mesh"
|
||||||
|
@ -89,13 +89,15 @@ The following dialog box will appear:
|
|||||||
\par
|
\par
|
||||||
\image html createmesh-inv2.png
|
\image html createmesh-inv2.png
|
||||||
|
|
||||||
\par
|
|
||||||
It allows to define the \b Name, the parent \b Mesh and the \b
|
It allows to define the \b Name, the parent \b Mesh and the \b
|
||||||
Geometry (e.g. a face if the parent mesh has been built on box) of the
|
Geometry (e.g. a face if the parent mesh has been built on box) of the
|
||||||
sub-mesh. You can define meshing algorithms and hypotheses in the same way as
|
sub-mesh. You can define meshing algorithms and hypotheses in the same way as
|
||||||
in \ref constructing_meshes_page "Create mesh" dialog.
|
in \ref constructing_meshes_page "Create mesh" dialog.
|
||||||
|
|
||||||
\par
|
Later you can change applied hypotheses or their parameters in
|
||||||
|
\ref editing_meshes_page "Edit mesh/sub-mesh" dialog. Mesh entities
|
||||||
|
generated using changed hypotheses are automatically removed.
|
||||||
|
|
||||||
\anchor subshape_by_mesh_elem
|
\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
|
||||||
@ -106,18 +108,14 @@ already down, then click it to release and then click it again. The
|
|||||||
following pop-up menu allowing to choose a way of geometry definition will
|
following pop-up menu allowing to choose a way of geometry definition will
|
||||||
appear.
|
appear.
|
||||||
|
|
||||||
\par
|
|
||||||
\image html choose_geom_selection_way.png
|
\image html choose_geom_selection_way.png
|
||||||
|
|
||||||
\par
|
|
||||||
<b>Direct geometry selection</b> enables selecting the sub-shape in the Object
|
<b>Direct geometry selection</b> enables selecting the sub-shape in the Object
|
||||||
Browser.
|
Browser.
|
||||||
<b>Find geometry by mesh element selection</b> activates the following dialog.
|
<b>Find geometry by mesh element selection</b> activates the following dialog.
|
||||||
|
|
||||||
\par
|
|
||||||
\image html find_geom_by_mesh_elem.png
|
\image html find_geom_by_mesh_elem.png
|
||||||
|
|
||||||
\par
|
|
||||||
In this dialog, <b> Element Type </b> defines a 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
|
||||||
@ -126,22 +124,20 @@ ID in <b> Element ID</b> field.
|
|||||||
with which the sub-shape will appear in the Object Browser (if not yet
|
with which the sub-shape will appear in the Object Browser (if not yet
|
||||||
there).
|
there).
|
||||||
|
|
||||||
\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
|
||||||
displayed as follows:
|
displayed as follows:
|
||||||
|
|
||||||
\image html image10.jpg
|
\image html image10.jpg
|
||||||
|
|
||||||
\par
|
|
||||||
It contains:
|
It contains:
|
||||||
<ul>
|
<ul>
|
||||||
<li>a sub-mesh name (\a SubMeshFace1)
|
<li>a sub-mesh name (\a SubMeshFace1)
|
||||||
<li>a reference to the geometrical object on the basis of which the
|
<li>a reference to the geometrical object on the basis of which the
|
||||||
sub-mesh has been constructed (<em>Cylindrical Face_1</em>);</li>
|
sub-mesh has been constructed (<em>Cylindrical Face_1</em>);</li>
|
||||||
<li><b>Applied hypotheses</b> folder containing the references to the
|
<li><em>Applied hypotheses</em> folder containing the references to the
|
||||||
hypotheses selected at the construction of the sub-mesh;</li>
|
hypotheses assigned to the sub-mesh;</li>
|
||||||
<li><b>Applied algorithms</b> folder containing the references to the
|
<li><em>Applied algorithms</em> folder containing the references to the
|
||||||
algorithms selected at the construction of the sub-mesh.</li>
|
algorithms assigned to the sub-mesh.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<br><b>See Also</b> a sample TUI Script of a
|
<br><b>See Also</b> a sample TUI Script of a
|
||||||
|
@ -16,10 +16,13 @@ You can also change values for the current hypothesis by clicking the
|
|||||||
\image html image122.png
|
\image html image122.png
|
||||||
<center><em>"Edit Hypothesis" button</em></center>
|
<center><em>"Edit Hypothesis" button</em></center>
|
||||||
|
|
||||||
|
Mesh entities generated before using changed hypotheses are automatically removed.
|
||||||
|
|
||||||
See how the mesh constructed on a geometrical object
|
See how the mesh constructed on a geometrical object
|
||||||
changes if we apply different algorithms to it.
|
changes if we apply different meshing parameters to it.
|
||||||
|
|
||||||
\image html edit_mesh1.png "Example of a mesh with Max. Element area 2D hypothesis roughly corresponding to 1D hypotheses on edges"
|
\image html edit_mesh1.png "Example of a mesh with Max. Element area 2D hypothesis roughly corresponding to 1D hypotheses on edges"
|
||||||
|
<br>
|
||||||
|
|
||||||
\image html edit_mesh_change_value_hyp.png "And now the Max Element area is greatly reduced"
|
\image html edit_mesh_change_value_hyp.png "And now the Max Element area is greatly reduced"
|
||||||
|
|
||||||
|
49
doc/salome/gui/SMESH/input/quad_ijk_algo.doc
Normal file
49
doc/salome/gui/SMESH/input/quad_ijk_algo.doc
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*!
|
||||||
|
|
||||||
|
\page quad_ijk_algo_page Quadrangle (Mapping) meshing algorithm
|
||||||
|
|
||||||
|
<b>Quadrangle (Mapping)</b> meshing algorithm is intended for creating
|
||||||
|
all-quadrangle and quad-dominant meshes on faces with no holes and
|
||||||
|
bound by at least three edges.
|
||||||
|
|
||||||
|
The algorithm can create mesh on any face but mesh quality and
|
||||||
|
validity depends on two factors:
|
||||||
|
- face shape (number of edges and concavity of boundary);
|
||||||
|
- discretization of edges.
|
||||||
|
|
||||||
|
\image html quad_mesh_invalid.png "Invalid mesh on quadrilateral concave faces"
|
||||||
|
|
||||||
|
The algorithm uses <em>Transfinite Interpolation</em> technic in
|
||||||
|
parametric space of a face to locate nodes inside the face.
|
||||||
|
|
||||||
|
The algorithm treats any face as a quadrangle. If a face is bound by
|
||||||
|
more than four edges, four most sharp vertices are considered as
|
||||||
|
corners of the quadrangle and all edges between these vertices are
|
||||||
|
treated as quadrangle sides. In the case of three edges, the vertex
|
||||||
|
specified by the user is considered as a degenerated side of the
|
||||||
|
quadrangle.
|
||||||
|
|
||||||
|
\image html quad_meshes.png "Algorithm generates a structured mesh on complex faces provided that edges are properly discretized"
|
||||||
|
|
||||||
|
To get an all-quadrangle mesh you have to carefully define 1D
|
||||||
|
hypotheses on edges of a face. To get a \b structured mesh you have to assure
|
||||||
|
equal number of segments on opposite sides of the quadrangle. If this
|
||||||
|
condition is not respected, the algorithm by default (with no
|
||||||
|
hypothesis) creates \b quad-dominant mesh with triangles located near a
|
||||||
|
side with maximal number of segments. But you can get an
|
||||||
|
\b all-quadrangle mesh in this case by using
|
||||||
|
\ref hypo_quad_params_anchor "Quadrangle Parameters"
|
||||||
|
hypothesis to specify how to make transition mesh between opposite
|
||||||
|
sides with different number of segments, provided that certain
|
||||||
|
conditions are respected. In any case total number of segments must be
|
||||||
|
even. To use \a Reduced transition method there must be equal number
|
||||||
|
of segments on one pair of opposite sides.
|
||||||
|
|
||||||
|
The following hypotheses help in creation of quadrangle meshes.
|
||||||
|
- \ref propagation_anchor "Propagation" additional 1D hypotheses
|
||||||
|
help to get equal number of segments on opposite sides of the
|
||||||
|
quadrilateral face.
|
||||||
|
- \ref a1d_algos_anchor "Composite Side Discretization" algorithm is useful
|
||||||
|
to discretize several C1 continues edges as one quadrangle side.
|
||||||
|
|
||||||
|
*/
|
@ -58,7 +58,7 @@
|
|||||||
#include <GEOMUtils.hxx>
|
#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>
|
||||||
@ -72,11 +72,12 @@
|
|||||||
#include "SMESH_TryCatch.hxx" // include after OCCT headers!
|
#include "SMESH_TryCatch.hxx" // include after OCCT headers!
|
||||||
|
|
||||||
#include "Utils_ExceptHandlers.hxx"
|
#include "Utils_ExceptHandlers.hxx"
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#include <boost/thread/thread.hpp>
|
#include <boost/thread/thread.hpp>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#else
|
#else
|
||||||
#include <pthread.h>
|
include <pthread.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -180,6 +181,23 @@ SMESH_Mesh::~SMESH_Mesh()
|
|||||||
{
|
{
|
||||||
MESSAGE("SMESH_Mesh::~SMESH_Mesh");
|
MESSAGE("SMESH_Mesh::~SMESH_Mesh");
|
||||||
|
|
||||||
|
// Unassign algorithms in order to have all SMESH_subMeshEventListenerData deleted (22874)
|
||||||
|
SMESHDS_SubMeshIteratorPtr smIt = _myMeshDS->SubMeshes();
|
||||||
|
while ( smIt->more() ) {
|
||||||
|
// avoid usual removal of elements while processing RemoveHypothesis( algo ) event
|
||||||
|
const_cast<SMESHDS_SubMesh*>( smIt->next() )->Clear();
|
||||||
|
}
|
||||||
|
const ShapeToHypothesis & hyps = _myMeshDS->GetHypotheses();
|
||||||
|
for ( ShapeToHypothesis::Iterator s2hyps( hyps ); s2hyps.More(); s2hyps.Next() )
|
||||||
|
{
|
||||||
|
const TopoDS_Shape& s = s2hyps.Key();
|
||||||
|
THypList hyps = s2hyps.ChangeValue(); // copy
|
||||||
|
THypList::const_iterator h = hyps.begin();
|
||||||
|
for ( ; h != hyps.end(); ++h )
|
||||||
|
if ( (*h)->GetType() != SMESHDS_Hypothesis::PARAM_ALGO )
|
||||||
|
RemoveHypothesis( s, (*h)->GetID() );
|
||||||
|
}
|
||||||
|
|
||||||
// issue 0020340: EDF 1022 SMESH : Crash with FindNodeClosestTo in a second new study
|
// issue 0020340: EDF 1022 SMESH : Crash with FindNodeClosestTo in a second new study
|
||||||
// Notify event listeners at least that something happens
|
// Notify event listeners at least that something happens
|
||||||
if ( SMESH_subMesh * sm = GetSubMeshContaining(1))
|
if ( SMESH_subMesh * sm = GetSubMeshContaining(1))
|
||||||
@ -329,7 +347,16 @@ double SMESH_Mesh::GetShapeDiagonalSize(const TopoDS_Shape & aShape)
|
|||||||
{
|
{
|
||||||
if ( !aShape.IsNull() ) {
|
if ( !aShape.IsNull() ) {
|
||||||
Bnd_Box Box;
|
Bnd_Box Box;
|
||||||
|
// avoid too long waiting on large shapes. PreciseBoundingBox() was added
|
||||||
|
// to assure same result which else depends on presence of triangulation (IPAL52557).
|
||||||
|
const int maxNbFaces = 4000;
|
||||||
|
int nbFaces = 0;
|
||||||
|
for ( TopExp_Explorer f( aShape, TopAbs_FACE ); f.More() && nbFaces < maxNbFaces; f.Next() )
|
||||||
|
++nbFaces;
|
||||||
|
if ( nbFaces < maxNbFaces )
|
||||||
GEOMUtils::PreciseBoundingBox(aShape, Box);
|
GEOMUtils::PreciseBoundingBox(aShape, Box);
|
||||||
|
else
|
||||||
|
BRepBndLib::Add( aShape, Box);
|
||||||
if ( !Box.IsVoid() )
|
if ( !Box.IsVoid() )
|
||||||
return sqrt( Box.SquareExtent() );
|
return sqrt( Box.SquareExtent() );
|
||||||
}
|
}
|
||||||
|
@ -747,7 +747,7 @@ SMESH_Gen_i::GetHypothesisParameterValues (const char* theHypType,
|
|||||||
return SMESH::SMESH_Hypothesis::_nil();
|
return SMESH::SMESH_Hypothesis::_nil();
|
||||||
::SMESH_Mesh* mesh = meshServant ? &meshServant->GetImpl() : (::SMESH_Mesh*)0;
|
::SMESH_Mesh* mesh = meshServant ? &meshServant->GetImpl() : (::SMESH_Mesh*)0;
|
||||||
|
|
||||||
// create a temporary hypothesis to know its dimention
|
// create a temporary hypothesis to know its dimension
|
||||||
SMESH::SMESH_Hypothesis_var tmpHyp = this->createHypothesis( theHypType, theLibName );
|
SMESH::SMESH_Hypothesis_var tmpHyp = this->createHypothesis( theHypType, theLibName );
|
||||||
SMESH_Hypothesis_i* hypServant = SMESH::DownCast<SMESH_Hypothesis_i*>( tmpHyp );
|
SMESH_Hypothesis_i* hypServant = SMESH::DownCast<SMESH_Hypothesis_i*>( tmpHyp );
|
||||||
if ( !hypServant )
|
if ( !hypServant )
|
||||||
@ -2427,6 +2427,7 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
|
|||||||
// loop on sub-meshes
|
// loop on sub-meshes
|
||||||
for ( int i = 0; i < theMeshesArray.length(); i++)
|
for ( int i = 0; i < theMeshesArray.length(); i++)
|
||||||
{
|
{
|
||||||
|
if ( CORBA::is_nil( theMeshesArray[i] )) continue;
|
||||||
SMESH::SMESH_Mesh_var anInitMesh = theMeshesArray[i]->GetMesh();
|
SMESH::SMESH_Mesh_var anInitMesh = theMeshesArray[i]->GetMesh();
|
||||||
if ( anInitMesh->_is_nil() ) continue;
|
if ( anInitMesh->_is_nil() ) continue;
|
||||||
SMESH_Mesh_i* anInitImpl = SMESH::DownCast<SMESH_Mesh_i*>( anInitMesh );
|
SMESH_Mesh_i* anInitImpl = SMESH::DownCast<SMESH_Mesh_i*>( anInitMesh );
|
||||||
|
@ -182,6 +182,12 @@ namespace MeshEditor_I {
|
|||||||
{
|
{
|
||||||
GetMeshDS()->ClearMesh();
|
GetMeshDS()->ClearMesh();
|
||||||
}
|
}
|
||||||
|
void Remove( SMDSAbs_ElementType type )
|
||||||
|
{
|
||||||
|
SMDS_ElemIteratorPtr eIt = GetMeshDS()->elementsIterator( type );
|
||||||
|
while ( eIt->more() )
|
||||||
|
GetMeshDS()->RemoveFreeElement( eIt->next(), /*sm=*/0, /*fromGroups=*/false );
|
||||||
|
}
|
||||||
};// struct TPreviewMesh
|
};// struct TPreviewMesh
|
||||||
|
|
||||||
static SMESH_NodeSearcher * theNodeSearcher = 0;
|
static SMESH_NodeSearcher * theNodeSearcher = 0;
|
||||||
@ -2398,6 +2404,10 @@ SMESH_MeshEditor_i::RotationSweepObjects(const SMESH::ListOfIDSources & theNodes
|
|||||||
<< TVar( theTolerance ) << ", "
|
<< TVar( theTolerance ) << ", "
|
||||||
<< theMakeGroups << " )";
|
<< theMakeGroups << " )";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getPreviewMesh()->Remove( SMDSAbs_Volume );
|
||||||
|
}
|
||||||
|
|
||||||
return aGroups ? aGroups : new SMESH::ListOfGroups;
|
return aGroups ? aGroups : new SMESH::ListOfGroups;
|
||||||
|
|
||||||
@ -2551,6 +2561,10 @@ SMESH_MeshEditor_i::ExtrusionSweepObjects(const SMESH::ListOfIDSources & theNode
|
|||||||
<< TVar( theNbOfSteps ) << ", "
|
<< TVar( theNbOfSteps ) << ", "
|
||||||
<< theToMakeGroups << " )";
|
<< theToMakeGroups << " )";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getPreviewMesh()->Remove( SMDSAbs_Volume );
|
||||||
|
}
|
||||||
|
|
||||||
return aGroups ? aGroups : new SMESH::ListOfGroups;
|
return aGroups ? aGroups : new SMESH::ListOfGroups;
|
||||||
|
|
||||||
@ -2623,6 +2637,10 @@ SMESH_MeshEditor_i::ExtrusionByNormal(const SMESH::ListOfIDSources& objects,
|
|||||||
<< ", " << dim
|
<< ", " << dim
|
||||||
<< " )";
|
<< " )";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getPreviewMesh()->Remove( SMDSAbs_Volume );
|
||||||
|
}
|
||||||
|
|
||||||
declareMeshModified( /*isReComputeSafe=*/true ); // does not influence Compute()
|
declareMeshModified( /*isReComputeSafe=*/true ); // does not influence Compute()
|
||||||
|
|
||||||
@ -2675,6 +2693,10 @@ SMESH_MeshEditor_i::AdvancedExtrusion(const SMESH::long_array & theIDsOfElements
|
|||||||
<< theSewTolerance << ", "
|
<< theSewTolerance << ", "
|
||||||
<< theMakeGroups << " )";
|
<< theMakeGroups << " )";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getPreviewMesh()->Remove( SMDSAbs_Volume );
|
||||||
|
}
|
||||||
|
|
||||||
return aGroups ? aGroups : new SMESH::ListOfGroups;
|
return aGroups ? aGroups : new SMESH::ListOfGroups;
|
||||||
|
|
||||||
@ -2844,6 +2866,10 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObjects(const SMESH::ListOfIDSources & the
|
|||||||
<< ( theHasRefPoint ? theRefPoint.z : 0 ) << " ), "
|
<< ( theHasRefPoint ? theRefPoint.z : 0 ) << " ), "
|
||||||
<< theMakeGroups << " )";
|
<< theMakeGroups << " )";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getPreviewMesh()->Remove( SMDSAbs_Volume );
|
||||||
|
}
|
||||||
|
|
||||||
return aGroups._retn();
|
return aGroups._retn();
|
||||||
|
|
||||||
|
@ -1077,14 +1077,17 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup
|
|||||||
if ( _preMeshInfo )
|
if ( _preMeshInfo )
|
||||||
_preMeshInfo->FullLoadFromFile();
|
_preMeshInfo->FullLoadFromFile();
|
||||||
|
|
||||||
if ( theGroup->_is_nil() || theGroup->IsEmpty() )
|
if ( theGroup->_is_nil() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
vector<int> nodeIds; // to remove nodes becoming free
|
vector<int> nodeIds; // to remove nodes becoming free
|
||||||
|
if ( !theGroup->IsEmpty() )
|
||||||
|
{
|
||||||
CORBA::Long elemID = theGroup->GetID( 1 );
|
CORBA::Long elemID = theGroup->GetID( 1 );
|
||||||
int nbElemNodes = GetElemNbNodes( elemID );
|
int nbElemNodes = GetElemNbNodes( elemID );
|
||||||
if ( nbElemNodes > 0 )
|
if ( nbElemNodes > 0 )
|
||||||
nodeIds.reserve( theGroup->Size() * nbElemNodes );
|
nodeIds.reserve( theGroup->Size() * nbElemNodes );
|
||||||
|
}
|
||||||
|
|
||||||
// Remove contents
|
// Remove contents
|
||||||
SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( theGroup );
|
SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( theGroup );
|
||||||
|
Loading…
Reference in New Issue
Block a user