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
Sub-mesh is a mesh on a geometrical sub-object created with meshing algorithms
and/or hypotheses other than the algorithms and hypotheses assigned to
the parent mesh on the parent geometrical object.
Sub-mesh is a mesh on a geometrical sub-object (sub-shape) used to assign
different meshing algorithms and/or hypotheses than the algorithms and
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
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.
\par
\anchor subshape_by_mesh_elem
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
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
\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.
Instead of picking an element in the Viewer, you can type its
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
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
the point of view of MED convention.
</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.
See also \ref over_constrained_volumes_page "Over-constrained volumes quality control".
</li><li>

View File

@ -3134,11 +3134,14 @@ bool RangeOfIds::SetRangeStr( const TCollection_AsciiString& theStr )
myIds.Clear();
TCollection_AsciiString aStr = theStr;
aStr.RemoveAll( ' ' );
aStr.RemoveAll( '\t' );
//aStr.RemoveAll( ' ' );
//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( ",," ) )
aStr.Remove( aPos, 2 );
aStr.Remove( aPos, 1 );
TCollection_AsciiString tmpStr = aStr.Token( ",", 1 );
int i = 1;

View File

@ -63,7 +63,7 @@ typedef std::list<TListOfInt> TListOfListOfInt;
class SMESH_EXPORT SMESH_Mesh
{
public:
public:
SMESH_Mesh(int theLocalId,
int theStudyId,
SMESH_Gen* theGen,

View File

@ -847,7 +847,7 @@ void SMESHGUI_MeshOp::availableHyps( const int theDim,
theDataList.clear();
theHyps.clear();
bool isAlgo = ( theHypType == Algo );
bool isAux = ( theHypType == AddHyp );
bool isAux = ( theHypType >= AddHyp );
QStringList aHypTypeNameList = SMESH::GetAvailableHypotheses( isAlgo, theDim, isAux, myIsOnGeometry, !myIsMesh );
QStringList::const_iterator anIter;
@ -906,7 +906,7 @@ void SMESHGUI_MeshOp::existingHyps( const int theDim,
else
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);
if ( theFather->FindSubObject( aPart, aHypRoot ) )
@ -1489,14 +1489,24 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
{
if ( !isAccessibleDim( dim ))
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 );
myAvailableHypData[ dim ][ type ].clear();
QStringList anAvailable, anExisting;
HypothesisData* curAlgo = algoByDim[ dim ];
int hypIndex = currentHyp( dim, dlgType );
int hypIndex = hypIndexByType[ dlgType ];
SMESH::SMESH_Hypothesis_var curHyp;
if ( hypIndex >= 0 && hypIndex < myExistingHyps[ dim ][ type ].count() )
@ -1535,9 +1545,11 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
defaulHypAvlbl = (type == MainHyp && !curAlgo->IsAuxOrNeedHyp );
}
// set list of hypotheses
myDlg->tab( dim )->setAvailableHyps( type, anAvailable );
myDlg->tab( dim )->setExistingHyps( type, anExisting, defaulHypAvlbl );
if ( dlgType <= AddHyp )
{
myDlg->tab( dim )->setAvailableHyps( type, anAvailable );
myDlg->tab( dim )->setExistingHyps( type, anExisting, defaulHypAvlbl );
}
// set current existing hypothesis
if ( !curHyp->_is_nil() && !anExisting.isEmpty() )
hypIndex = this->find( curHyp, myExistingHyps[ dim ][ type ]);
@ -1548,11 +1560,11 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
CORBA::String_var hypTypeName = myExistingHyps[ dim ][ type ].first().first->GetName();
bool isOptional = true;
if ( algoByDim[ dim ] &&
SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName.in(), isOptional ) &&
!isOptional )
SMESH::IsAvailableHypothesis( algoByDim[ dim ], hypTypeName.in(), isOptional ) &&
!isOptional )
hypIndex = 0;
}
setCurrentHyp( dim, type, hypIndex );
setCurrentHyp( dim, dlgType, hypIndex );
}
}
}

File diff suppressed because it is too large Load Diff