]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
NPAL17873: SMESH add a triangle instead of make quadrangles only.
authorjfa <jfa@opencascade.com>
Fri, 1 Feb 2008 08:07:48 +0000 (08:07 +0000)
committerjfa <jfa@opencascade.com>
Fri, 1 Feb 2008 08:07:48 +0000 (08:07 +0000)
13 files changed:
doc/salome/gui/SMESH/images/a-averagelength.png
doc/salome/gui/SMESH/input/1d_meshing_hypo.doc
idl/SMESH_BasicHypothesis.idl
src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx
src/StdMeshers/StdMeshers_LocalLength.cxx
src/StdMeshers/StdMeshers_LocalLength.hxx
src/StdMeshers/StdMeshers_RadialPrism_3D.cxx
src/StdMeshers/StdMeshers_Regular_1D.cxx
src/StdMeshers/StdMeshers_Regular_1D.hxx
src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx
src/StdMeshersGUI/StdMeshers_msg_en.po
src/StdMeshers_I/StdMeshers_LocalLength_i.cxx
src/StdMeshers_I/StdMeshers_LocalLength_i.hxx

index dc007eb575faa7564fa27da30eba60d5de4c1242..70e2afd26dd6ed299365193b2073c28946ed0695 100755 (executable)
Binary files a/doc/salome/gui/SMESH/images/a-averagelength.png and b/doc/salome/gui/SMESH/images/a-averagelength.png differ
index 6fd23f521dd909670da7f9cb9689a3675b682eba..716ddd90d56c5c81849fa6192afe2fef6f6d83d0 100644 (file)
@@ -54,9 +54,18 @@ locations and 1D mesh elements are constructed on segments.
 <b>Average Length</b> hypothesis can be applied for meshing of edges
 composing your geometrical object. Definition of this hypothesis
 consists of setting the \b length of segments, which will split these
-edges. The points on the edges generated by these segments will
-represent nodes of your mesh. Later these nodes will be used for
-meshing of the faces abutting to these edges.
+edges, and the \b precision of rounding. The points on the edges
+generated by these segments will represent nodes of your mesh.
+Later these nodes will be used for meshing of the faces abutting to
+these edges.
+
+The \b precision parameter is used to allow rounding a number of
+segments, calculated from the edge length and average length of
+segment, to the lower integer, if this value outstands from it in
+bounds of the precision. Otherwise, the number of segments is rounded
+to the higher integer. Use value 0.5 to provide rounding to the
+nearest integer, 1.0 for the lower integer, 0.0 for the higher
+integer. Default value is 1e-07.
 
 \image html image41.gif
 
@@ -155,4 +164,4 @@ minimum and maximum value of this parameter.
 
 \image html image148.gif
 
-*/
\ No newline at end of file
+*/
index 9fe9370eea7a0d1775fd275e5bb4c21c65acd20b..5978aa052120b4b9fd93a26b847912f0a1c5ff1d 100644 (file)
@@ -43,13 +43,33 @@ module StdMeshers
     /*!
      * Sets <length> parameter value
      */
-    void SetLength(in double length) 
+    void SetLength(in double length)
+      raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Sets <precision> parameter value
+     *
+     * Precision parameter is used to allow rounding a number of segments,
+     * calculated from the edge length and average length of segment,
+     * to the lower integer, if this value outstands from it in bounds of the precision.
+     * Otherwise, the number of segments is rounded to the higher integer.
+     * Use value 0.5 to provide rounding to the nearest integer,
+     * 1.0 for the lower integer, 0.0 for the higher integer.
+     * Default value is 1e-07. In old studies, restored from file,
+     * this value will be set to zero, what corresponds to the old behaviour.
+     */
+    void SetPrecision(in double precision)
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <length> parameter value
      */
     double GetLength();
+
+    /*!
+     * Returns <precision> parameter value
+     */
+    double GetPrecision();
   };
 
   /*!
@@ -85,7 +105,7 @@ module StdMeshers
     /*!
      * Sets <number of segments> parameter value
      */
-    void SetNumberOfSegments(in long segmentsNumber) 
+    void SetNumberOfSegments(in long segmentsNumber)
       raises (SALOME::SALOME_Exception);
 
     /*!
index c60cbee617f370ddbdc17d3161f53177320b4ebc..381caade19a2358e5705d35784cb8bbb7d1da963 100644 (file)
@@ -119,7 +119,7 @@ namespace {
       return;
     for ( int iE = 0; iE < side.NbEdges(); ++iE )
     {
-      // set listener and its data 
+      // set listener and its data
       EventListenerData * listenerData = new EventListenerData(true);
       const TopoDS_Edge& edge = side.Edge( iE );
       SMESH_subMesh * sm = side.GetMesh()->GetSubMesh( edge );
@@ -333,7 +333,7 @@ bool StdMeshers_CompositeSegment_1D::Compute(SMESH_Mesh &         aMesh,
   auto_ptr< BRepAdaptor_CompCurve > C3d ( side->GetCurve3d() );
   double f = C3d->FirstParameter(), l = C3d->LastParameter();
   list< double > params;
-  if ( !computeInternalParameters ( *C3d, side->Length(), f, l, params, false ))
+  if ( !computeInternalParameters ( aMesh, *C3d, side->Length(), f, l, params, false ))
     return false;
 
   // Redistribute parameters near ends
@@ -349,7 +349,7 @@ bool StdMeshers_CompositeSegment_1D::Compute(SMESH_Mesh &         aMesh,
 
   const SMDS_MeshNode * nFirst = SMESH_Algo::VertexNode( VFirst, meshDS );
   const SMDS_MeshNode * nLast  = SMESH_Algo::VertexNode( VLast, meshDS );
-  if (!nFirst) 
+  if (!nFirst)
     return error(COMPERR_BAD_INPUT_MESH, TComm("No node on vertex ")
                  <<meshDS->ShapeToIndex(VFirst));
   if (!nLast)
@@ -414,4 +414,3 @@ bool StdMeshers_CompositeSegment_1D::Compute(SMESH_Mesh &         aMesh,
 
   return true;
 }
-
index 6fd6bbcf73b87721f572854cab62c3508ec2b9a5..e3fe6e898d5c0f861828e604189aa5578abc9295 100644 (file)
@@ -43,6 +43,7 @@
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
+#include <Precision.hxx>
 
 using namespace std;
 
@@ -56,6 +57,7 @@ StdMeshers_LocalLength::StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen
   :SMESH_Hypothesis(hypId, studyId, gen)
 {
   _length = 1.;
+  _precision = Precision::Confusion();
   _name = "LocalLength";
   _param_algo_dim = 1; // is used by SMESH_Regular_1D
 }
@@ -78,12 +80,13 @@ StdMeshers_LocalLength::~StdMeshers_LocalLength()
 
 void StdMeshers_LocalLength::SetLength(double length) throw(SALOME_Exception)
 {
-       double oldLength = _length;
-       if (length <= 0)
-               throw SALOME_Exception(LOCALIZED("length must be positive"));
-       _length = length;
-       if (oldLength != _length)
-               NotifySubMeshesHypothesisModification();
+  double oldLength = _length;
+  if (length <= 0)
+    throw SALOME_Exception(LOCALIZED("length must be positive"));
+  _length = length;
+  const double precision = 1e-7;
+  if (fabs(oldLength - _length) > precision)
+    NotifySubMeshesHypothesisModification();
 }
 
 //=============================================================================
@@ -94,7 +97,33 @@ void StdMeshers_LocalLength::SetLength(double length) throw(SALOME_Exception)
 
 double StdMeshers_LocalLength::GetLength() const
 {
-       return _length;
+  return _length;
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+void StdMeshers_LocalLength::SetPrecision (double thePrecision) throw(SALOME_Exception)
+{
+  double oldPrecision = _precision;
+  if (_precision < 0)
+    throw SALOME_Exception(LOCALIZED("precision cannot be negative"));
+  _precision = thePrecision;
+  const double precision = 1e-8;
+  if (fabs(oldPrecision - _precision) > precision)
+    NotifySubMeshesHypothesisModification();
+}
+
+//=============================================================================
+/*!
+ *  
+ */
+//=============================================================================
+double StdMeshers_LocalLength::GetPrecision() const
+{
+  return _precision;
 }
 
 //=============================================================================
@@ -105,7 +134,7 @@ double StdMeshers_LocalLength::GetLength() const
 
 ostream & StdMeshers_LocalLength::SaveTo(ostream & save)
 {
-  save << this->_length;
+  save << this->_length << " " << this->_precision;
   return save;
 }
 
@@ -119,11 +148,23 @@ istream & StdMeshers_LocalLength::LoadFrom(istream & load)
 {
   bool isOK = true;
   double a;
+
   isOK = (load >> a);
   if (isOK)
     this->_length = a;
   else
     load.clear(ios::badbit | load.rdstate());
+
+  isOK = (load >> a);
+  if (isOK)
+    this->_precision = a;
+  else
+  {
+    load.clear(ios::badbit | load.rdstate());
+    // old format, without precision
+    _precision = 0.;
+  }
+
   return load;
 }
 
@@ -190,5 +231,7 @@ bool StdMeshers_LocalLength::SetParametersByMesh(const SMESH_Mesh*   theMesh,
   if ( nbEdges )
     _length /= nbEdges;
 
+  _precision = Precision::Confusion();
+
   return nbEdges;
 }
index 79a85df7fdec11580a7d71ccf5cfe5379b1b869c..93fc49a6f590404f1cece7f0fdfad0c7f004b02c 100644 (file)
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
-class STDMESHERS_EXPORT StdMeshers_LocalLength:public SMESH_Hypothesis
+class STDMESHERS_EXPORT StdMeshers_LocalLength: public SMESH_Hypothesis
 {
  public:
   StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen * gen);
   virtual ~ StdMeshers_LocalLength();
 
   void SetLength(double length) throw(SALOME_Exception);
+  void SetPrecision(double precision) throw(SALOME_Exception);
 
   double GetLength() const;
+  double GetPrecision() const;
 
   virtual std::ostream & SaveTo(std::ostream & save);
   virtual std::istream & LoadFrom(std::istream & load);
@@ -60,6 +62,7 @@ class STDMESHERS_EXPORT StdMeshers_LocalLength:public SMESH_Hypothesis
 
  protected:
   double _length;
+  double _precision;
 };
 
 #endif
index cc1b4f89e4be741559018d6601ecad5745423b9a..4bcd5519adf0b4f91a4d8cfe16bd4854d3c4d335 100644 (file)
@@ -160,7 +160,7 @@ bool StdMeshers_RadialPrism_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& a
   // to delete helper at exit from Compute()
   std::auto_ptr<SMESH_MesherHelper> helperDeleter( myHelper );
 
-  // get 2 shells 
+  // get 2 shells
   TopoDS_Solid solid = TopoDS::Solid( aShape );
   TopoDS_Shell outerShell = BRepTools::OuterShell( solid );
   TopoDS_Shape innerShell;
@@ -336,7 +336,7 @@ public:
     BRepAdaptor_Curve C3D(edge);
     double f = C3D.FirstParameter(), l = C3D.LastParameter();
     list< double > params;
-    if ( !StdMeshers_Regular_1D::computeInternalParameters( C3D, len, f, l, params, false ))
+    if ( !StdMeshers_Regular_1D::computeInternalParameters( aMesh, C3D, len, f, l, params, false ))
       return error("StdMeshers_Regular_1D failed to compute layers distribution");
 
     positions.clear();
index 9d051ae1ac9557ff87dce8843b146ad02d170329..b2a5074332644b76cb0acec0002e959fb3ed4e80 100644 (file)
@@ -146,7 +146,9 @@ bool StdMeshers_Regular_1D::CheckHypothesis
     const StdMeshers_LocalLength * hyp =
       dynamic_cast <const StdMeshers_LocalLength * >(theHyp);
     ASSERT(hyp);
-    _value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength();
+    //_value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength();
+    _value[ BEG_LENGTH_IND ] = hyp->GetLength();
+    _value[ END_LENGTH_IND ] = hyp->GetPrecision();
     ASSERT( _value[ BEG_LENGTH_IND ] > 0 );
     _hypType = LOCAL_LENGTH;
     aStatus = SMESH_Hypothesis::HYP_OK;
@@ -224,7 +226,9 @@ bool StdMeshers_Regular_1D::CheckHypothesis
     StdMeshers_AutomaticLength * hyp = const_cast<StdMeshers_AutomaticLength *>
       (dynamic_cast <const StdMeshers_AutomaticLength * >(theHyp));
     ASSERT(hyp);
-    _value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength( &aMesh, aShape );
+    //_value[ BEG_LENGTH_IND ] = _value[ END_LENGTH_IND ] = hyp->GetLength( &aMesh, aShape );
+    _value[ BEG_LENGTH_IND ] = hyp->GetLength( &aMesh, aShape );
+    _value[ END_LENGTH_IND ] = Precision::Confusion(); // ?? or set to zero?
     ASSERT( _value[ BEG_LENGTH_IND ] > 0 );
     _hypType = LOCAL_LENGTH;
     aStatus = SMESH_Hypothesis::HYP_OK;
@@ -243,7 +247,7 @@ static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last,
   // never do this way
   //OSD::SetSignal( true );
 
-  if( nbSeg<=0 )
+  if (nbSeg <= 0)
     return false;
 
   MESSAGE( "computeParamByFunc" );
@@ -251,12 +255,12 @@ static bool computeParamByFunc(Adaptor3d_Curve& C3d, double first, double last,
   int nbPnt = 1 + nbSeg;
   vector<double> x(nbPnt, 0.);
 
-  if( !buildDistribution( func, 0.0, 1.0, nbSeg, x, 1E-4 ) )
+  if (!buildDistribution(func, 0.0, 1.0, nbSeg, x, 1E-4))
      return false;
 
   MESSAGE( "Points:\n" );
   char buf[1024];
-  for( int i=0; i<=nbSeg; i++ )
+  for ( int i=0; i<=nbSeg; i++ )
   {
     sprintf(  buf, "%f\n", float(x[i] ) );
     MESSAGE( buf );
@@ -524,7 +528,7 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh &          theM
           std::swap( algo._value[ BEG_LENGTH_IND ], algo._value[ END_LENGTH_IND ]);
         }
         list<double> params;
-        if ( algo.computeInternalParameters( theC3d, L, from, to, params, false ))
+        if ( algo.computeInternalParameters( theMesh, theC3d, L, from, to, params, false ))
         {
           if ( isEnd1 ) params.reverse();
           while ( 1 + nHalf-- )
@@ -547,12 +551,14 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh &          theM
  *  
  */
 //=============================================================================
-bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d,
+bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
+                                                      Adaptor3d_Curve& theC3d,
                                                       double           theLength,
                                                       double           theFirstU,
                                                       double           theLastU,
                                                       list<double> &   theParams,
-                                                      const bool       theReverse)
+                                                      const bool       theReverse,
+                                                      bool             theConsiderPropagation)
 {
   theParams.clear();
 
@@ -568,6 +574,38 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d,
     {
       // Local Length hypothesis
       double nbseg = ceil(theLength / _value[ BEG_LENGTH_IND ]); // integer sup
+
+      // NPAL17873:
+      bool isFound = false;
+      if (theConsiderPropagation && !_mainEdge.IsNull()) // propagated from some other edge
+      {
+        // Advanced processing to assure equal number of segments in case of Propagation
+        SMESH_subMesh* sm = theMesh.GetSubMeshContaining(_mainEdge);
+        if (sm) {
+          bool computed = sm->IsMeshComputed();
+          if (!computed) {
+            if (sm->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE) {
+              sm->ComputeStateEngine(SMESH_subMesh::COMPUTE);
+              computed = sm->IsMeshComputed();
+            }
+          }
+          if (computed) {
+            SMESHDS_SubMesh* smds = sm->GetSubMeshDS();
+            int nb_segments = smds->NbElements();
+            if (nbseg - 1 <= nb_segments && nb_segments <= nbseg + 1) {
+              isFound = true;
+              nbseg = nb_segments;
+            }
+          }
+        }
+      }
+      if (!isFound) // not found by meshed edge in the propagation chain, use precision
+      {
+        double aPrecision = _value[ END_LENGTH_IND ];
+        double nbseg_prec = ceil((theLength / _value[ BEG_LENGTH_IND ]) - aPrecision);
+        if (nbseg_prec == (nbseg - 1)) nbseg--;
+      }
+
       if (nbseg <= 0)
         nbseg = 1;                        // degenerated edge
       eltSize = theLength / nbseg;
@@ -736,14 +774,14 @@ bool StdMeshers_Regular_1D::computeInternalParameters(Adaptor3d_Curve& theC3d,
  */
 //=============================================================================
 
-bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
+bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & theShape)
 {
   if ( _hypType == NONE )
     return false;
 
-  SMESHDS_Mesh * meshDS = aMesh.GetMeshDS();
+  SMESHDS_Mesh * meshDS = theMesh.GetMeshDS();
 
-  const TopoDS_Edge & EE = TopoDS::Edge(aShape);
+  const TopoDS_Edge & EE = TopoDS::Edge(theShape);
   TopoDS_Edge E = TopoDS::Edge(EE.Oriented(TopAbs_FORWARD));
   int shapeID = meshDS->ShapeToIndex( E );
 
@@ -769,10 +807,10 @@ bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aSh
 
     BRepAdaptor_Curve C3d( E );
     double length = EdgeLength( E );
-    if ( ! computeInternalParameters( C3d, length, f, l, params, reversed )) {
+    if ( ! computeInternalParameters( theMesh, C3d, length, f, l, params, reversed, true )) {
       return false;
     }
-    redistributeNearVertices( aMesh, C3d, length, params, VFirst, VLast );
+    redistributeNearVertices( theMesh, C3d, length, params, VFirst, VLast );
 
     // edge extrema (indexes : 1 & NbPoints) already in SMDS (TopoDS_Vertex)
     // only internal nodes receive an edge position with param on curve
index 269a034bc0039699e1417581e5ebb5edf242e395..4a22e7253db0564713d89e9f5318a4fb42eec157 100644 (file)
@@ -73,12 +73,14 @@ public:
 
 protected:
 
-  virtual bool computeInternalParameters (Adaptor3d_Curve &     theC3d,
-                                          double                theLength,
-                                          double                theFirstU,
-                                          double                theLastU,
-                                          std::list< double > & theParameters,
-                                          const bool            theReverse);
+  virtual bool computeInternalParameters (SMESH_Mesh &        theMesh,
+                                          Adaptor3d_Curve &   theC3d,
+                                          double              theLength,
+                                          double              theFirstU,
+                                          double              theLastU,
+                                          std::list<double> & theParameters,
+                                          const bool          theReverse,
+                                          bool                theConsiderPropagation = false);
 
   virtual void redistributeNearVertices (SMESH_Mesh &          theMesh,
                                          Adaptor3d_Curve &     theC3d,
@@ -101,12 +103,12 @@ protected:
     BEG_LENGTH_IND   = 0,
     END_LENGTH_IND   = 1,
     DEFLECTION_IND   = 0
-    };
+  };
 
   enum IValueIndex {
     NB_SEGMENTS_IND  = 0,
     DISTR_TYPE_IND   = 1,
-    CONV_MODE_IND     = 2
+    CONV_MODE_IND    = 2
   };
 
   enum VValueIndex {
index 13f87e56038c669fe198655c13f553e1b8f18a89..bfe80bdf1a750019906b7da8d48a55fdb3ac7043 100644 (file)
@@ -388,6 +388,7 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
        StdMeshers::StdMeshers_LocalLength::_narrow( hypothesis() );
 
       h->SetLength( params[0].myValue.toDouble() );
+      h->SetPrecision( params[1].myValue.toDouble() );
     }
     else if( hypType()=="SegmentLengthAroundVertex" )
     {
@@ -535,6 +536,9 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
     item.myValue = h->GetLength();
     p.append( item );
+    item.myName = tr("SMESH_LOCAL_LENGTH_PRECISION");
+    item.myValue = h->GetPrecision();
+    p.append( item );
   }
   else if( hypType()=="SegmentLengthAroundVertex" )
   {
@@ -704,12 +708,15 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
  */
 //================================================================================
 
-void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget( QWidget* w, const int ) const
+void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget (QWidget* w, const int param) const
 {
   SMESHGUI_SpinBox* sb = w->inherits( "SMESHGUI_SpinBox" ) ? ( SMESHGUI_SpinBox* )w : 0;
   if( hypType()=="LocalLength" &&  sb )
   {
-    sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, 6 );
+    if (param == 0) // Length
+      sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, 6 );
+    else // Precision
+      sb->RangeStepAndValidator( 0.0, 1.0, 0.05, 6 );
   }
   else if( hypType()=="Arithmetic1D" && sb )
   {
index 922119e1491cc7ca1366b8b40fc117e8e73275da..d8cfd1435aeffac338ada1d70cc0bcf349df077b 100644 (file)
@@ -37,6 +37,9 @@ msgstr "Average Length"
 msgid "SMESH_LOCAL_LENGTH_PARAM"
 msgstr "Length"
 
+msgid "SMESH_LOCAL_LENGTH_PRECISION"
+msgstr "Precision"
+
 msgid "SMESH_LOCAL_LENGTH_TITLE"
 msgstr "Hypothesis Construction"
 
index 4190c1b8c8c91b4f13fd1fb87da1b5bc7547c6a1..f360400ca6893e5349c2107b500cd9c077914f7b 100644 (file)
@@ -48,15 +48,15 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_LocalLength_i::StdMeshers_LocalLength_i( PortableServer::POA_ptr thePOA,
-                                         int                     theStudyId,
-                                         ::SMESH_Gen*            theGenImpl )
-     : SALOME::GenericObj_i( thePOA ), 
+                                                    int                     theStudyId,
+                                                    ::SMESH_Gen*            theGenImpl )
+     : SALOME::GenericObj_i( thePOA ),
        SMESH_Hypothesis_i( thePOA )
 {
   MESSAGE( "StdMeshers_LocalLength_i::StdMeshers_LocalLength_i" );
   myBaseImpl = new ::StdMeshers_LocalLength( theGenImpl->GetANewId(),
-                                       theStudyId,
-                                       theGenImpl );
+                                             theStudyId,
+                                             theGenImpl );
 }
 
 //=============================================================================
@@ -79,7 +79,6 @@ StdMeshers_LocalLength_i::~StdMeshers_LocalLength_i()
  *  Set length
  */
 //=============================================================================
-
 void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength )
      throw ( SALOME::SALOME_Exception )
 {
@@ -97,6 +96,30 @@ void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength )
   SMESH::TPythonDump() << _this() << ".SetLength( " << theLength << " )";
 }
 
+//=============================================================================
+/*!
+ *  StdMeshers_LocalLength_i::SetPrecision
+ *
+ *  Set length
+ */
+//=============================================================================
+void StdMeshers_LocalLength_i::SetPrecision( CORBA::Double thePrecision )
+     throw ( SALOME::SALOME_Exception )
+{
+  MESSAGE( "StdMeshers_LocalLength_i::SetPrecision" );
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetPrecision( thePrecision );
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(),
+                                 SALOME::BAD_PARAM );
+  }
+
+  // Update Python script
+  SMESH::TPythonDump() << _this() << ".SetPrecision( " << thePrecision << " )";
+}
+
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::GetLength
@@ -104,7 +127,6 @@ void StdMeshers_LocalLength_i::SetLength( CORBA::Double theLength )
  *  Get length
  */
 //=============================================================================
-
 CORBA::Double StdMeshers_LocalLength_i::GetLength()
 {
   MESSAGE( "StdMeshers_LocalLength_i::GetLength" );
@@ -112,6 +134,20 @@ CORBA::Double StdMeshers_LocalLength_i::GetLength()
   return this->GetImpl()->GetLength();
 }
 
+//=============================================================================
+/*!
+ *  StdMeshers_LocalLength_i::GetPrecision
+ *
+ *  Get precision
+ */
+//=============================================================================
+CORBA::Double StdMeshers_LocalLength_i::GetPrecision()
+{
+  MESSAGE( "StdMeshers_LocalLength_i::GetPrecision" );
+  ASSERT( myBaseImpl );
+  return this->GetImpl()->GetPrecision();
+}
+
 //=============================================================================
 /*!
  *  StdMeshers_LocalLength_i::GetImpl
@@ -119,7 +155,6 @@ CORBA::Double StdMeshers_LocalLength_i::GetLength()
  *  Get implementation
  */
 //=============================================================================
-
 ::StdMeshers_LocalLength* StdMeshers_LocalLength_i::GetImpl()
 {
   MESSAGE( "StdMeshers_LocalLength_i::GetImpl" );
@@ -139,4 +174,3 @@ CORBA::Boolean StdMeshers_LocalLength_i::IsDimSupported( SMESH::Dimension type )
 {
   return type == SMESH::DIM_1D;
 }
-
index 62c73cbc8695589cfba5d011f139c1c86cd17a5a..a5199780314cc280edd8b9119c8e904f0e08b4db 100644 (file)
@@ -58,8 +58,14 @@ public:
   // Set length
   void SetLength( CORBA::Double theLength )
     throw ( SALOME::SALOME_Exception );
+  // Set precision
+  void SetPrecision( CORBA::Double thePrecision )
+    throw ( SALOME::SALOME_Exception );
+
   // Get length
   CORBA::Double GetLength();
+  // Get precision
+  CORBA::Double GetPrecision();
 
   // Get implementation
   ::StdMeshers_LocalLength* GetImpl();