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);
|
||||
|
||||
/*!
|
||||
* Return type of submesh element
|
||||
* Returns type of mesh element (same as SMESH_Mesh::GetElementType() )
|
||||
*/
|
||||
ElementType GetElementType( in long id, in boolean iselem )
|
||||
raises (SALOME::SALOME_Exception);
|
||||
|
@ -1359,23 +1359,34 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetCentralNode(const SMDS_MeshNode* n1,
|
||||
bool toCheck = true;
|
||||
if ( !F.IsNull() && !force3d )
|
||||
{
|
||||
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)
|
||||
Handle(ShapeAnalysis_Surface) surface = GetSurface( F );
|
||||
if ( HasDegeneratedEdges() || surface->HasSingularities( 1e-7 ))
|
||||
{
|
||||
gp_Pnt center = calcTFI (0.5, 0.5, // IPAL0052863
|
||||
SMESH_TNodeXYZ(n1), SMESH_TNodeXYZ(n2),
|
||||
SMESH_TNodeXYZ(n3), SMESH_TNodeXYZ(n4),
|
||||
SMESH_TNodeXYZ(n12), SMESH_TNodeXYZ(n23),
|
||||
SMESH_TNodeXYZ(n34), SMESH_TNodeXYZ(n41));
|
||||
gp_Pnt2d uv12 = GetNodeUV( F, n12, n3, &toCheck );
|
||||
uvAvg = surface->NextValueOfUV( uv12, center, BRep_Tool::Tolerance( F )).XY();
|
||||
}
|
||||
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] );
|
||||
|
||||
TopLoc_Location loc;
|
||||
Handle( Geom_Surface ) S = BRep_Tool::Surface( F, loc );
|
||||
P = S->Value( uvAvg.X(), uvAvg.Y() ).Transformed( loc );
|
||||
uvAvg = calcTFI (0.5, 0.5, uv[0],uv[1],uv[2],uv[3], uv[4],uv[5],uv[6],uv[7] );
|
||||
}
|
||||
P = surface->Value( uvAvg );
|
||||
centralNode = meshDS->AddNode( P.X(), P.Y(), P.Z() );
|
||||
// if ( mySetElemOnShape ) node is not elem!
|
||||
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::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
|
||||
SALOMEDS::SObject_wrap objAfter;
|
||||
bool isNewSO = false;
|
||||
if ( SO->_is_nil() )
|
||||
{
|
||||
if ( theTag == 0 ) {
|
||||
SO = aStudyBuilder->NewObject( theFatherObject );
|
||||
isNewSO = true;
|
||||
}
|
||||
else if ( !theFatherObject->FindSubObject( theTag, SO.inout() ))
|
||||
{
|
||||
SO = aStudyBuilder->NewObjectToTag( theFatherObject, theTag );
|
||||
isNewSO = true;
|
||||
|
||||
// define the next tag after given one in the data tree to insert SObject
|
||||
SALOMEDS::SObject_wrap curObj;
|
||||
@ -314,12 +317,13 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy,
|
||||
|
||||
// add object to the use case tree
|
||||
// (to support tree representation customization and drag-n-drop)
|
||||
if ( !CORBA::is_nil( objAfter ) ) {
|
||||
useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag
|
||||
} else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) {
|
||||
useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list
|
||||
if ( isNewSO )
|
||||
{
|
||||
if ( !CORBA::is_nil( objAfter ) )
|
||||
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();
|
||||
}
|
||||
|
||||
@ -421,7 +425,14 @@ static void addReference (SALOMEDS::Study_ptr theStudy,
|
||||
|
||||
// add reference to the use case tree
|
||||
// (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 );
|
||||
}
|
||||
}
|
||||
@ -940,7 +951,7 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy
|
||||
|
||||
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 =
|
||||
GetMeshOrSubmeshByShape( theStudy, theMesh, theShape );
|
||||
if ( aMeshOrSubMesh->_is_nil() )
|
||||
|
Loading…
Reference in New Issue
Block a user