X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Adaptive1D.cxx;h=45e22ebb3fc23e654e35e05b63b96608f974025a;hp=55d5d00b48efb02fd29c996e0ca3910b5bc96499;hb=6bac08c1a81f34d3f21c550bd92f83654b2546a5;hpb=80fe1ddefc561a7a571ac08807f7d173f45d8080 diff --git a/src/StdMeshers/StdMeshers_Adaptive1D.cxx b/src/StdMeshers/StdMeshers_Adaptive1D.cxx index 55d5d00b4..45e22ebb3 100644 --- a/src/StdMeshers/StdMeshers_Adaptive1D.cxx +++ b/src/StdMeshers/StdMeshers_Adaptive1D.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -35,9 +35,11 @@ #include #include +#include #include #include #include +#include #include #include #include @@ -278,28 +280,6 @@ namespace // internal utils vector< int > _elementIDs; }; //================================================================================ - /*! - * \brief BRepMesh_IncrementalMesh with access to its protected Bnd_Box - */ - struct IncrementalMesh : public BRepMesh_IncrementalMesh - { - IncrementalMesh(const TopoDS_Shape& shape, - const Standard_Real deflection, - const bool relative): - BRepMesh_IncrementalMesh( shape, deflection, relative ) - { - } - Bnd_B3d GetBox() const - { - Standard_Real TXmin, TYmin, TZmin, TXmax, TYmax, TZmax; - myBox.Get(TXmin, TYmin, TZmin, TXmax, TYmax, TZmax); - Bnd_B3d bb; - bb.Add( gp_XYZ( TXmin, TYmin, TZmin )); - bb.Add( gp_XYZ( TXmax, TYmax, TZmax )); - return bb; - } - }; - //================================================================================ /*! * \brief Link of two nodes */ @@ -942,7 +922,6 @@ StdMeshers_Adaptive1D::StdMeshers_Adaptive1D(int hypId, myMinSize = 1e-10; myMaxSize = 1e+10; myDeflection = 1e-2; - myGrading = 1e-2; myAlgo = NULL; _name = "Adaptive1D"; _param_algo_dim = 1; // is used by SMESH_Regular_1D @@ -969,20 +948,6 @@ void StdMeshers_Adaptive1D::SetDeflection(double value) } } //======================================================================= -//function : SetGrading -//purpose : -void StdMeshers_Adaptive1D::SetGrading(double value) - throw(SALOME_Exception) -{ - if (value <= std::numeric_limits::min() ) - throw SALOME_Exception("Grading must be greater that zero"); - if (myGrading != value) - { - myGrading = value; - NotifySubMeshesHypothesisModification(); - } -} -//======================================================================= //function : SetMinSize //purpose : Sets minimal allowed segment length void StdMeshers_Adaptive1D::SetMinSize(double minSize) @@ -1017,7 +982,7 @@ void StdMeshers_Adaptive1D::SetMaxSize(double maxSize) //purpose : Persistence ostream & StdMeshers_Adaptive1D::SaveTo(ostream & save) { - save << myMinSize << " " << myMaxSize << " " << myDeflection << " " << myGrading; + save << myMinSize << " " << myMaxSize << " " << myDeflection; save << " " << -1 << " " << -1; // preview addition of parameters return save; } @@ -1027,7 +992,7 @@ ostream & StdMeshers_Adaptive1D::SaveTo(ostream & save) istream & StdMeshers_Adaptive1D::LoadFrom(istream & load) { int dummyParam; - bool isOK = (load >> myMinSize >> myMaxSize >> myDeflection >> myGrading >> dummyParam >> dummyParam); + bool isOK = (load >> myMinSize >> myMaxSize >> myDeflection >> dummyParam >> dummyParam); if (!isOK) load.clear(ios::badbit | load.rdstate()); return load; @@ -1097,7 +1062,6 @@ bool StdMeshers_Adaptive1D::SetParametersByDefaults(const TDefaults& dflts, myMinSize = dflts._elemLength / 10; myMaxSize = dflts._elemLength * 2; myDeflection = myMinSize / 7; - myGrading = 0.7; return true; } @@ -1161,17 +1125,26 @@ bool AdaptiveAlgo::Compute(SMESH_Mesh & theMesh, myMesh = &theMesh; SMESH_MesherHelper helper( theMesh ); - const double grading = myHyp->GetGrading(); + const double grading = 0.7; TopTools_IndexedMapOfShape edgeMap, faceMap; TopExp::MapShapes( theShape, TopAbs_EDGE, edgeMap ); TopExp::MapShapes( theMesh.GetShapeToMesh(), TopAbs_FACE, faceMap ); // Triangulate the shape with the given deflection ????????? + { + BRepMesh_IncrementalMesh im( theMesh.GetShapeToMesh(), myHyp->GetDeflection(), /*isRelatif=*/0); + } + + // get a bnd box Bnd_B3d box; { - IncrementalMesh im( theMesh.GetShapeToMesh(), myHyp->GetDeflection(), /*Relatif=*/false); - box = im.GetBox(); + Bnd_Box aBox; + BRepBndLib::Add( theMesh.GetShapeToMesh(), aBox); + Standard_Real TXmin, TYmin, TZmin, TXmax, TYmax, TZmax; + aBox.Get(TXmin, TYmin, TZmin, TXmax, TYmax, TZmax); + box.Add( gp_XYZ( TXmin, TYmin, TZmin )); + box.Add( gp_XYZ( TXmax, TYmax, TZmax )); } // *theProgress = 0.3; @@ -1206,6 +1179,7 @@ bool AdaptiveAlgo::Compute(SMESH_Mesh & theMesh, eData.AddPoint( eData.myPoints.end(), eData.myC3d.LastParameter() ); } } + if ( myEdges.empty() ) return true; if ( _computeCanceled ) return false; // Take into account size of already existing segments