mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-26 17:30:35 +05:00
52863: Convert To Bi-Quadratic incorrectly locate in-face central nodes
52865: Wrong order of children under a sub-mesh in the Object Browser
This commit is contained in:
parent
293c27e277
commit
6f7386be59
@ -1044,7 +1044,7 @@ module SMESH
|
|||||||
raises (SALOME::SALOME_Exception);
|
raises (SALOME::SALOME_Exception);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Return type of submesh element
|
* Returns type of mesh element (same as SMESH_Mesh::GetElementType() )
|
||||||
*/
|
*/
|
||||||
ElementType GetElementType( in long id, in boolean iselem )
|
ElementType GetElementType( in long id, in boolean iselem )
|
||||||
raises (SALOME::SALOME_Exception);
|
raises (SALOME::SALOME_Exception);
|
||||||
|
@ -1359,23 +1359,34 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetCentralNode(const SMDS_MeshNode* n1,
|
|||||||
bool toCheck = true;
|
bool toCheck = true;
|
||||||
if ( !F.IsNull() && !force3d )
|
if ( !F.IsNull() && !force3d )
|
||||||
{
|
{
|
||||||
gp_XY uv[8] = {
|
Handle(ShapeAnalysis_Surface) surface = GetSurface( F );
|
||||||
GetNodeUV( F,n1, n3, &toCheck ),
|
if ( HasDegeneratedEdges() || surface->HasSingularities( 1e-7 ))
|
||||||
GetNodeUV( F,n2, n4, &toCheck ),
|
{
|
||||||
GetNodeUV( F,n3, n1, &toCheck ),
|
gp_Pnt center = calcTFI (0.5, 0.5, // IPAL0052863
|
||||||
GetNodeUV( F,n4, n2, &toCheck ),
|
SMESH_TNodeXYZ(n1), SMESH_TNodeXYZ(n2),
|
||||||
GetNodeUV( F,n12, n3 ),
|
SMESH_TNodeXYZ(n3), SMESH_TNodeXYZ(n4),
|
||||||
GetNodeUV( F,n23, n4 ),
|
SMESH_TNodeXYZ(n12), SMESH_TNodeXYZ(n23),
|
||||||
GetNodeUV( F,n34, n2 ),
|
SMESH_TNodeXYZ(n34), SMESH_TNodeXYZ(n41));
|
||||||
GetNodeUV( F,n41, n2 )
|
gp_Pnt2d uv12 = GetNodeUV( F, n12, n3, &toCheck );
|
||||||
};
|
uvAvg = surface->NextValueOfUV( uv12, center, BRep_Tool::Tolerance( F )).XY();
|
||||||
AdjustByPeriod( F, uv, 8 ); // put uv[] within a period (IPAL52698)
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gp_XY uv[8] = {
|
||||||
|
GetNodeUV( F,n1, n3, &toCheck ),
|
||||||
|
GetNodeUV( F,n2, n4, &toCheck ),
|
||||||
|
GetNodeUV( F,n3, n1, &toCheck ),
|
||||||
|
GetNodeUV( F,n4, n2, &toCheck ),
|
||||||
|
GetNodeUV( F,n12, n3 ),
|
||||||
|
GetNodeUV( F,n23, n4 ),
|
||||||
|
GetNodeUV( F,n34, n2 ),
|
||||||
|
GetNodeUV( F,n41, n2 )
|
||||||
|
};
|
||||||
|
AdjustByPeriod( F, uv, 8 ); // put uv[] within a period (IPAL52698)
|
||||||
|
|
||||||
uvAvg = calcTFI (0.5, 0.5, uv[0],uv[1],uv[2],uv[3], uv[4],uv[5],uv[6],uv[7] );
|
uvAvg = calcTFI (0.5, 0.5, uv[0],uv[1],uv[2],uv[3], uv[4],uv[5],uv[6],uv[7] );
|
||||||
|
}
|
||||||
TopLoc_Location loc;
|
P = surface->Value( uvAvg );
|
||||||
Handle( Geom_Surface ) S = BRep_Tool::Surface( F, loc );
|
|
||||||
P = S->Value( uvAvg.X(), uvAvg.Y() ).Transformed( loc );
|
|
||||||
centralNode = meshDS->AddNode( P.X(), P.Y(), P.Z() );
|
centralNode = meshDS->AddNode( P.X(), P.Y(), P.Z() );
|
||||||
// if ( mySetElemOnShape ) node is not elem!
|
// if ( mySetElemOnShape ) node is not elem!
|
||||||
meshDS->SetNodeOnFace( centralNode, faceID, uvAvg.X(), uvAvg.Y() );
|
meshDS->SetNodeOnFace( centralNode, faceID, uvAvg.X(), uvAvg.Y() );
|
||||||
|
@ -265,14 +265,17 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy,
|
|||||||
SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
|
SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
|
||||||
SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
|
SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
|
||||||
SALOMEDS::SObject_wrap objAfter;
|
SALOMEDS::SObject_wrap objAfter;
|
||||||
|
bool isNewSO = false;
|
||||||
if ( SO->_is_nil() )
|
if ( SO->_is_nil() )
|
||||||
{
|
{
|
||||||
if ( theTag == 0 ) {
|
if ( theTag == 0 ) {
|
||||||
SO = aStudyBuilder->NewObject( theFatherObject );
|
SO = aStudyBuilder->NewObject( theFatherObject );
|
||||||
|
isNewSO = true;
|
||||||
}
|
}
|
||||||
else if ( !theFatherObject->FindSubObject( theTag, SO.inout() ))
|
else if ( !theFatherObject->FindSubObject( theTag, SO.inout() ))
|
||||||
{
|
{
|
||||||
SO = aStudyBuilder->NewObjectToTag( theFatherObject, theTag );
|
SO = aStudyBuilder->NewObjectToTag( theFatherObject, theTag );
|
||||||
|
isNewSO = true;
|
||||||
|
|
||||||
// define the next tag after given one in the data tree to insert SObject
|
// define the next tag after given one in the data tree to insert SObject
|
||||||
SALOMEDS::SObject_wrap curObj;
|
SALOMEDS::SObject_wrap curObj;
|
||||||
@ -314,18 +317,19 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy,
|
|||||||
|
|
||||||
// add object to the use case tree
|
// add object to the use case tree
|
||||||
// (to support tree representation customization and drag-n-drop)
|
// (to support tree representation customization and drag-n-drop)
|
||||||
if ( !CORBA::is_nil( objAfter ) ) {
|
if ( isNewSO )
|
||||||
useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag
|
{
|
||||||
} else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) {
|
if ( !CORBA::is_nil( objAfter ) )
|
||||||
useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list
|
useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag
|
||||||
|
else if ( !useCaseBuilder->IsUseCaseNode( SO ) )
|
||||||
|
useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list
|
||||||
}
|
}
|
||||||
|
|
||||||
return SO._retn();
|
return SO._retn();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : setName
|
//function : setName
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
void SMESH_Gen_i::SetName(SALOMEDS::SObject_ptr theSObject,
|
void SMESH_Gen_i::SetName(SALOMEDS::SObject_ptr theSObject,
|
||||||
@ -421,7 +425,14 @@ static void addReference (SALOMEDS::Study_ptr theStudy,
|
|||||||
|
|
||||||
// add reference to the use case tree
|
// add reference to the use case tree
|
||||||
// (to support tree representation customization and drag-n-drop)
|
// (to support tree representation customization and drag-n-drop)
|
||||||
SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
|
SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
|
||||||
|
SALOMEDS::UseCaseIterator_wrap useCaseIter = useCaseBuilder->GetUseCaseIterator(theSObject);
|
||||||
|
for ( ; useCaseIter->More(); useCaseIter->Next() )
|
||||||
|
{
|
||||||
|
SALOMEDS::SObject_wrap curSO = useCaseIter->Value();
|
||||||
|
if ( curSO->Tag() == theTag )
|
||||||
|
return;
|
||||||
|
}
|
||||||
useCaseBuilder->AppendTo( theSObject, aReferenceSO );
|
useCaseBuilder->AppendTo( theSObject, aReferenceSO );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -940,7 +951,7 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy
|
|||||||
|
|
||||||
CORBA::String_var hypEntry = aHypSO->GetID();
|
CORBA::String_var hypEntry = aHypSO->GetID();
|
||||||
|
|
||||||
// Find a mesh or submesh refering to theShape
|
// Find a mesh or sub-mesh referring to theShape
|
||||||
SALOMEDS::SObject_wrap aMeshOrSubMesh =
|
SALOMEDS::SObject_wrap aMeshOrSubMesh =
|
||||||
GetMeshOrSubmeshByShape( theStudy, theMesh, theShape );
|
GetMeshOrSubmeshByShape( theStudy, theMesh, theShape );
|
||||||
if ( aMeshOrSubMesh->_is_nil() )
|
if ( aMeshOrSubMesh->_is_nil() )
|
||||||
|
Loading…
Reference in New Issue
Block a user