+
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+
+bool StdMeshers_Regular_1D::Evaluate(SMESH_Mesh & theMesh,
+ const TopoDS_Shape & theShape,
+ MapShapeNbElems& theResMap)
+{
+ if ( _hypType == NONE )
+ return false;
+
+ if ( _hypType == ADAPTIVE )
+ {
+ _adaptiveHyp->GetAlgo()->InitComputeError();
+ _adaptiveHyp->GetAlgo()->Evaluate( theMesh, theShape, theResMap );
+ return error( _adaptiveHyp->GetAlgo()->GetComputeError() );
+ }
+
+ const TopoDS_Edge & EE = TopoDS::Edge(theShape);
+ TopoDS_Edge E = TopoDS::Edge(EE.Oriented(TopAbs_FORWARD));
+
+ double f, l;
+ Handle(Geom_Curve) Curve = BRep_Tool::Curve(E, f, l);
+
+ TopoDS_Vertex VFirst, VLast;
+ TopExp::Vertices(E, VFirst, VLast); // Vfirst corresponds to f and Vlast to l
+
+ ASSERT(!VFirst.IsNull());
+ ASSERT(!VLast.IsNull());
+
+ std::vector<int> aVec(SMDSEntity_Last,0);
+
+ double length = EdgeLength( E );
+ if ( !Curve.IsNull() && length > 0 )
+ {
+ list< double > params;
+ BRepAdaptor_Curve C3d( E );
+ if ( ! computeInternalParameters( theMesh, C3d, length, f, l, params, false, true )) {
+ SMESH_subMesh * sm = theMesh.GetSubMesh(theShape);
+ theResMap.insert(std::make_pair(sm,aVec));
+ SMESH_ComputeErrorPtr& smError = sm->GetComputeError();
+ smError.reset( new SMESH_ComputeError(COMPERR_ALGO_FAILED,"Submesh can not be evaluated",this));
+ return false;
+ }
+ redistributeNearVertices( theMesh, C3d, length, params, VFirst, VLast );
+
+ if(_quadraticMesh) {
+ aVec[SMDSEntity_Node ] = 2*params.size() + 1;
+ aVec[SMDSEntity_Quad_Edge] = params.size() + 1;
+ }
+ else {
+ aVec[SMDSEntity_Node] = params.size();
+ aVec[SMDSEntity_Edge] = params.size() + 1;
+ }
+
+ }
+ else {
+ // Edge is a degenerated Edge : We put n = 5 points on the edge.
+ if ( _quadraticMesh ) {
+ aVec[SMDSEntity_Node ] = 11;
+ aVec[SMDSEntity_Quad_Edge] = 6;
+ }
+ else {
+ aVec[SMDSEntity_Node] = 5;
+ aVec[SMDSEntity_Edge] = 6;
+ }
+ }
+
+ SMESH_subMesh * sm = theMesh.GetSubMesh( theShape );
+ theResMap.insert( std::make_pair( sm, aVec ));
+
+ return true;
+}
+
+