From: eap Date: Thu, 8 Oct 2009 13:57:20 +0000 (+0000) Subject: 0020526: [CEA] Disk meshing fails X-Git-Tag: V4_1_0_maintainance_FINAL~3 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d5f1f4ce3abf2ca12f20534b477e41193597864a;p=plugins%2Fnetgenplugin.git 0020526: [CEA] Disk meshing fails 1) in PrepareOCCgeometry(), map all subshapes in meshedSM is not provided 2) untabify --- diff --git a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx index 32eb55b..db2d266 100644 --- a/src/NETGENPlugin/NETGENPlugin_Mesher.cxx +++ b/src/NETGENPlugin/NETGENPlugin_Mesher.cxx @@ -47,9 +47,11 @@ #include #include #include +#include #include #include #include +#include #include #include @@ -254,7 +256,7 @@ void NETGENPlugin_Mesher::PrepareOCCgeometry(netgen::OCCGeometry& occgeo, TopExp::MapShapes(root->GetSubShape(), subShapes); while ( smIt->more() ) { SMESH_subMesh* sm = smIt->next(); - if ( sm->IsEmpty() ) { + if ( !meshedSM || sm->IsEmpty() ) { TopoDS_Shape shape = sm->GetSubShape(); if ( shape.ShapeType() != TopAbs_VERTEX ) shape = subShapes( subShapes.FindIndex( shape ));// - shape->index->oriented shape @@ -619,18 +621,25 @@ bool NETGENPlugin_Mesher::Compute() else { // length from edges double length = 0; + TopTools_MapOfShape tmpMap; for ( TopExp_Explorer exp( _shape, TopAbs_EDGE ); exp.More(); exp.Next() ) - length += SMESH_Algo::EdgeLength( TopoDS::Edge( exp.Current() )); - if ( ngMesh->GetNSeg() ) - mparams.maxh = length / ngMesh->GetNSeg(); + if( tmpMap.Add(exp.Current()) ) + length += SMESH_Algo::EdgeLength( TopoDS::Edge( exp.Current() )); + + if ( ngMesh->GetNSeg() ) { + // we have to multiply length by 2 since for each TopoDS_Edge there + // are double set of NETGEN edges or, in other words, we have to + // divide ngMesh->GetNSeg() on 2. + mparams.maxh = 2*length / ngMesh->GetNSeg(); + } else mparams.maxh = 1000; mparams.grading = 0.2; // slow size growth } mparams.maxh = min( mparams.maxh, occgeo.boundingbox.Diam()/2 ); ngMesh->SetGlobalH (mparams.maxh); - netgen::Box<3> bb = occgeo.GetBoundingBox(); - bb.Increase (bb.Diam()/20); + netgen::Box<3> bb = occgeo.GetBoundingBox(); + bb.Increase (bb.Diam()/20); ngMesh->SetLocalH (bb.PMin(), bb.PMax(), mparams.grading); } // let netgen compute 2D mesh @@ -665,10 +674,10 @@ bool NETGENPlugin_Mesher::Compute() // length from faces mparams.maxh = ngMesh->AverageH(); } -// netgen::ARRAY maxhdom; -// maxhdom.SetSize (occgeo.NrSolids()); -// maxhdom = mparams.maxh; -// ngMesh->SetMaxHDomain (maxhdom); +// netgen::ARRAY maxhdom; +// maxhdom.SetSize (occgeo.NrSolids()); +// maxhdom = mparams.maxh; +// ngMesh->SetMaxHDomain (maxhdom); ngMesh->SetGlobalH (mparams.maxh); mparams.grading = 0.4; ngMesh->CalcLocalH();