Skip to content
Snippets Groups Projects
Commit de9345f1 authored by Jean-François Remacle's avatar Jean-François Remacle
Browse files

*** empty log message ***

parent 2769c401
No related branches found
No related tags found
No related merge requests found
// $Id: GeoInterpolation.cpp,v 1.22 2007-03-02 14:54:25 remacle Exp $ // $Id: GeoInterpolation.cpp,v 1.23 2007-03-05 11:07:14 remacle Exp $
// //
// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
// //
...@@ -136,9 +136,10 @@ Vertex InterpolateUBS(Curve * Curve, double u, int derivee) ...@@ -136,9 +136,10 @@ Vertex InterpolateUBS(Curve * Curve, double u, int derivee)
int NbControlPoints, NbCurves, iCurve; int NbControlPoints, NbCurves, iCurve;
double t, t1, t2; double t, t1, t2;
Vertex *v[4]; Vertex *v[4];
Vertex V;
NbControlPoints = List_Nbr(Curve->Control_Points); NbControlPoints = List_Nbr(Curve->Control_Points);
NbCurves = NbControlPoints - 3; NbCurves = NbControlPoints - (Curve->beg==Curve->end ? 1 : 3);
iCurve = (int)(u * (double)NbCurves) + 1; iCurve = (int)(u * (double)NbCurves) + 1;
...@@ -152,12 +153,23 @@ Vertex InterpolateUBS(Curve * Curve, double u, int derivee) ...@@ -152,12 +153,23 @@ Vertex InterpolateUBS(Curve * Curve, double u, int derivee)
t = (u - t1) / (t2 - t1); t = (u - t1) / (t2 - t1);
List_Read(Curve->Control_Points, iCurve - 1, &v[0]); for(int i=0;i<4;i++){
List_Read(Curve->Control_Points, iCurve, &v[1]); int k=iCurve - (Curve->beg==Curve->end ? 2 : 1) + i;
List_Read(Curve->Control_Points, iCurve + 1, &v[2]); if (k<0) k+=NbControlPoints - 1;
List_Read(Curve->Control_Points, iCurve + 2, &v[3]); if (k>=NbControlPoints) k-=NbControlPoints - 1;
List_Read(Curve->Control_Points, k , &v[i]);
return InterpolateCubicSpline(v, t, Curve->mat, derivee, t1, t2); }
if (Curve->geometry)
{
SPoint2 pp = InterpolateCubicSpline(v, t, Curve->mat, 0, t1, t2,Curve->geometry);
SPoint3 pt = Curve->geometry->point(pp);
V.Pos.X = pt.x();
V.Pos.Y = pt.y();
V.Pos.Z = pt.z();
return V;
}
else
return InterpolateCubicSpline(v, t, Curve->mat, 0, t1, t2);
} }
// Non Uniform BSplines // Non Uniform BSplines
......
// $Id: gmshEdge.cpp,v 1.31 2007-03-02 18:20:56 remacle Exp $ // $Id: gmshEdge.cpp,v 1.32 2007-03-05 11:07:14 remacle Exp $
// //
// Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
// //
...@@ -158,6 +158,36 @@ SPoint2 gmshEdge::reparamOnFace(GFace *face, double epar,int dir) const ...@@ -158,6 +158,36 @@ SPoint2 gmshEdge::reparamOnFace(GFace *face, double epar,int dir) const
return p; return p;
} }
break; break;
case MSH_SEGM_BSPLN:
case MSH_SEGM_BEZIER:
int NbControlPoints, NbCurves, iCurve;
double t, t1, t2;
Vertex *v[4];
NbControlPoints = List_Nbr(c->Control_Points);
NbCurves = NbControlPoints - (c->beg==c->end ? 1 : 3);
iCurve = (int)(epar * (double)NbCurves) + 1;
if(iCurve > NbCurves)
iCurve = NbCurves;
else if (iCurve < 1)
iCurve = 1;
t1 = (double)(iCurve - 1) / (double)(NbCurves);
t2 = (double)(iCurve) / (double)(NbCurves);
t = (epar - t1) / (t2 - t1);
for(int j = 0; j < 4; j ++ ){
int k=iCurve - (c->beg==c->end ? 2 : 1) + j;
if(k<0)
k += NbControlPoints - 1;
if(k>=NbControlPoints)
k -= NbControlPoints - 1;
List_Read(c->Control_Points,k, &v[j]);
}
return InterpolateCubicSpline(v, t, c->mat, 0, t1, t2,c->geometry);
case MSH_SEGM_SPLN : case MSH_SEGM_SPLN :
{ {
Vertex *v[4]; Vertex *v[4];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment