IPAL52478: Too thin viscous layers are constructed

+ a fix of Mesh dialog for 22483
+ allow white-space-separated IDs for RangeOdIDs filter
+ docs improved
This commit is contained in:
eap 2014-09-09 18:12:47 +04:00
parent b5bc313d9b
commit ac69e1629b
6 changed files with 1132 additions and 311 deletions

View File

@ -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

View File

@ -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>

View File

@ -3134,11 +3134,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;

View File

@ -847,7 +847,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 +906,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 +1489,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,9 +1545,11 @@ 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
if ( dlgType <= AddHyp )
{
myDlg->tab( dim )->setAvailableHyps( type, anAvailable ); myDlg->tab( dim )->setAvailableHyps( type, anAvailable );
myDlg->tab( dim )->setExistingHyps( type, anExisting, defaulHypAvlbl ); 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 ]);
@ -1552,7 +1564,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
!isOptional ) !isOptional )
hypIndex = 0; hypIndex = 0;
} }
setCurrentHyp( dim, type, hypIndex ); setCurrentHyp( dim, dlgType, hypIndex );
} }
} }
} }

File diff suppressed because it is too large Load Diff