From: eap Date: Tue, 27 Dec 2016 15:55:29 +0000 (+0300) Subject: IPAL53870: Dump study script creates an excess sub-mesh X-Git-Tag: V8_3_0a2~34 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=b2eb2c3cef7c6fffbcc17e027be5e4d0357a935a IPAL53870: Dump study script creates an excess sub-mesh + Allow Quadratic Mesh hypothesis on sub-meshes for http://www.salome-platform.org/forum/forum_14/325180606/861648983 + Remove unfeasible controls from Mesh Element Info --- diff --git a/resources/StdMeshers.xml.in b/resources/StdMeshers.xml.in index 19b9f895a..5a858500d 100644 --- a/resources/StdMeshers.xml.in +++ b/resources/StdMeshers.xml.in @@ -165,7 +165,6 @@ label-id ="Quadratic Mesh" icon-id ="mesh_algo_quad.png" dim ="1" - context ="GLOBAL" auxiliary="true"/> & ids ) QTreeWidgetItem* cntrItem = createItem( elemItem, Bold ); cntrItem->setText( 0, SMESHGUI_ElemInfo::tr( "CONTROLS" ) ); //Length - if( e->GetType()==SMDSAbs_Edge){ + if( e->GetType()==SMDSAbs_Edge){ afunctor.reset( new SMESH::Controls::Length() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); QTreeWidgetItem* lenItem = createItem( cntrItem, Bold ); lenItem->setText( 0, tr( "LENGTH_EDGES" ) ); - lenItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + lenItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); } if( e->GetType() == SMDSAbs_Face ) { - //Area - afunctor.reset( new SMESH::Controls::Area() ); + //Area + afunctor.reset( new SMESH::Controls::Area() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); QTreeWidgetItem* areaItem = createItem( cntrItem, Bold ); areaItem->setText( 0, tr( "AREA_ELEMENTS" ) ); - areaItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue(id) ) ); + areaItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue(id) ) ); //Taper - afunctor.reset( new SMESH::Controls::Taper() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - afunctor->SetPrecision( cprecision ); - QTreeWidgetItem* taperlItem = createItem( cntrItem, Bold ); - taperlItem->setText( 0, tr( "TAPER_ELEMENTS" ) ); - taperlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + if ( e->NbNodes() == 4 ) // see SMESH_Controls.cxx + { + afunctor.reset( new SMESH::Controls::Taper() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + afunctor->SetPrecision( cprecision ); + QTreeWidgetItem* taperlItem = createItem( cntrItem, Bold ); + taperlItem->setText( 0, tr( "TAPER_ELEMENTS" ) ); + taperlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + //Wraping angle + afunctor.reset( new SMESH::Controls::Warping() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + afunctor->SetPrecision( cprecision ); + QTreeWidgetItem* warpItem = createItem( cntrItem, Bold ); + warpItem->setText( 0, tr( "WARP_ELEMENTS" )); + warpItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + } //AspectRatio2D - afunctor.reset( new SMESH::Controls::AspectRatio() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - QTreeWidgetItem* ratlItem = createItem( cntrItem, Bold ); - ratlItem->setText( 0, tr( "ASPECTRATIO_ELEMENTS" )); - ratlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + if ( !e->IsPoly() ) + { + afunctor.reset( new SMESH::Controls::AspectRatio() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* ratlItem = createItem( cntrItem, Bold ); + ratlItem->setText( 0, tr( "ASPECTRATIO_ELEMENTS" )); + ratlItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + } //Minimum angle afunctor.reset( new SMESH::Controls::MinimumAngle() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); afunctor->SetPrecision( cprecision ); QTreeWidgetItem* minanglItem = createItem( cntrItem, Bold ); minanglItem->setText( 0, tr( "MINIMUMANGLE_ELEMENTS" ) ); - minanglItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); - //Wraping angle - afunctor.reset( new SMESH::Controls::Warping() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - afunctor->SetPrecision( cprecision ); - QTreeWidgetItem* warpItem = createItem( cntrItem, Bold ); - warpItem->setText( 0, tr( "WARP_ELEMENTS" )); - warpItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); - //Skew - afunctor.reset( new SMESH::Controls::Skew() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - afunctor->SetPrecision( cprecision ); - QTreeWidgetItem* skewItem = createItem( cntrItem, Bold ); - skewItem->setText( 0, tr( "SKEW_ELEMENTS" ) ); - skewItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); - //ElemDiam2D - afunctor.reset( new SMESH::Controls::MaxElementLength2D() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - QTreeWidgetItem* diamItem = createItem( cntrItem, Bold ); - diamItem->setText( 0, tr( "MAX_ELEMENT_LENGTH_2D" )); - diamItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + minanglItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + //Skew + if ( e->NbNodes() == 3 || e->NbNodes() == 4 ) + { + afunctor.reset( new SMESH::Controls::Skew() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + afunctor->SetPrecision( cprecision ); + QTreeWidgetItem* skewItem = createItem( cntrItem, Bold ); + skewItem->setText( 0, tr( "SKEW_ELEMENTS" ) ); + skewItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + } + //ElemDiam2D + if ( !e->IsPoly() ) + { + afunctor.reset( new SMESH::Controls::MaxElementLength2D() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* diamItem = createItem( cntrItem, Bold ); + diamItem->setText( 0, tr( "MAX_ELEMENT_LENGTH_2D" )); + diamItem->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + } } if( e->GetType() == SMDSAbs_Volume ) { - //AspectRatio3D - afunctor.reset( new SMESH::Controls::AspectRatio3D() ); - afunctor->SetMesh( actor()->GetObject()->GetMesh() ); - QTreeWidgetItem* ratlItem3 = createItem( cntrItem, Bold ); - ratlItem3->setText( 0, tr( "ASPECTRATIO_3D_ELEMENTS" ) ); - ratlItem3->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + if ( !e->IsPoly() ) + { + //AspectRatio3D + afunctor.reset( new SMESH::Controls::AspectRatio3D() ); + afunctor->SetMesh( actor()->GetObject()->GetMesh() ); + QTreeWidgetItem* ratlItem3 = createItem( cntrItem, Bold ); + ratlItem3->setText( 0, tr( "ASPECTRATIO_3D_ELEMENTS" ) ); + ratlItem3->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + } //Volume afunctor.reset( new SMESH::Controls::Volume() ); afunctor->SetMesh( actor()->GetObject()->GetMesh() ); @@ -2031,7 +2046,7 @@ void SMESHGUI_TreeElemInfo::information( const QList& ids ) afunctor->SetMesh( actor()->GetObject()->GetMesh() ); QTreeWidgetItem* diam3Item = createItem( cntrItem, Bold ); diam3Item->setText( 0, tr( "MAX_ELEMENT_LENGTH_3D" ) ); - diam3Item->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); + diam3Item->setText( 1, QString( "%1" ).arg( afunctor->GetValue( id ) ) ); } // gravity center diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index d5dadd0e1..17ee75746 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -2048,7 +2048,7 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand ) { addCmd = *cmd; cmd = addHypCmds.erase( cmd ); - if ( !theGen->IsToKeepAllCommands() && CanClear() ) { + if ( !theGen->IsToKeepAllCommands() /*&& CanClear()*/ ) { addCmd->Clear(); theCommand->Clear(); } @@ -3474,28 +3474,31 @@ bool _pySegmentLengthAroundVertexHyp::Addition2Creation( const Handle(_pyCommand _pyID vertex = theCmd->GetArg( 1 ); - // the problem here is that segment algo will not be found + // the problem here is that segment algo can be not found // by pyHypothesis::Addition2Creation() for , so we try to find // geometry where segment algorithm is assigned - Handle(_pyHypothesis) algo; _pyID geom = vertex; + Handle(_pyHypothesis) algo = theGen->FindAlgo( geom, theMeshID, this ); while ( algo.IsNull() && !geom.IsEmpty()) { // try to find geom as a father of geom = FatherID( geom ); algo = theGen->FindAlgo( geom, theMeshID, this ); } - if ( algo.IsNull() ) + if ( algo.IsNull() || geom.IsEmpty() ) return false; // also possible to find geom as brother of veretex... + // set geom instead of vertex theCmd->SetArg( 1, geom ); - // set vertex as a second arg - if ( myCurCrMethod->myArgs.size() < 1) setCreationArg( 1, "1" ); // :( - setCreationArg( 2, vertex ); - // mesh.AddHypothesis(vertex, SegmentLengthAroundVertex) --> - // theMeshID.LengthNearVertex( length, vertex ) - return _pyHypothesis::Addition2Creation( theCmd, theMeshID ); + // SegmentLengthAroundVertex = Regular_1D.LengthNearVertex( length ) + if ( _pyHypothesis::Addition2Creation( theCmd, theMeshID )) + { + // set vertex as a second arg + theCmd->SetArg( 2, vertex ); + + return true; + } } return false; } diff --git a/src/SMESH_SWIG/StdMeshersBuilder.py b/src/SMESH_SWIG/StdMeshersBuilder.py index 19f3375f7..afcd449fb 100644 --- a/src/SMESH_SWIG/StdMeshersBuilder.py +++ b/src/SMESH_SWIG/StdMeshersBuilder.py @@ -381,6 +381,7 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm): pass # 0D algorithm if self.geom is None: + self.geom = store_geom raise RuntimeError, "Attemp to create SegmentAroundVertex_0D algoritm on None shape" from salome.smesh.smeshBuilder import AssureGeomPublished, GetName, TreatHypoStatus AssureGeomPublished( self.mesh, self.geom )