index 67b5370f24df57f2a851c455c39c590fa048cb8f..cd405d664bbce1de576fa8b279c2938d7344809c 100644 (file)
dest->SetBackData(false);
outline_callbacks calls;
- NR::Point endButt;
- NR::Point endPos;
+ Geom::Point endButt;
+ Geom::Point endPos;
calls.cubicto = StdCubicTo;
calls.bezierto = StdBezierTo;
calls.arcto = StdArcTo;
// we do so by taking the subpath in the reverse and constructing a path as appropriate
// the construct is stored in "rev"
int curD = curP - 1;
- NR::Point curX;
- NR::Point nextX;
+ Geom::Point curX;
+ Geom::Point nextX;
int firstTyp = descr_cmd[curD]->getType();
bool const needClose = (firstTyp == descr_close);
while (curD > lastM && descr_cmd[curD]->getType() == descr_close) {
@@ -102,8 +102,8 @@ void Path::Outline(Path *dest, double width, JoinType join, ButtType butt, doubl
} else if (typ == descr_cubicto) {
PathDescrCubicTo* nData = dynamic_cast<PathDescrCubicTo*>(descr_cmd[curD]);
nextX = PrevPoint (curD - 1);
- NR::Point isD=-nData->start;
- NR::Point ieD=-nData->end;
+ Geom::Point isD=-nData->start;
+ Geom::Point ieD=-nData->end;
rev->CubicTo (nextX, ieD,isD);
curX = nextX;
curD--;
@@ -157,7 +157,7 @@ void Path::Outline(Path *dest, double width, JoinType join, ButtType butt, doubl
rev->SubContractOutline (0, rev->descr_cmd.size(),
dest, calls, 0.0025 * width * width, width,
join, butt, miter, false, false, endPos, endButt);
- NR::Point endNor=endButt.ccw();
+ Geom::Point endNor=endButt.ccw();
if (butt == butt_round) {
dest->ArcTo (endPos+width*endNor, 1.0001 * width, 1.0001 * width, 0.0, true, true);
} else if (butt == butt_square) {
dest->SetBackData (false);
outline_callbacks calls;
- NR::Point endButt, endPos;
+ Geom::Point endButt, endPos;
calls.cubicto = StdCubicTo;
calls.bezierto = StdBezierTo;
calls.arcto = StdArcTo;
dest->SetBackData (false);
outline_callbacks calls;
- NR::Point endButt, endPos;
+ Geom::Point endButt, endPos;
calls.cubicto = StdCubicTo;
calls.bezierto = StdBezierTo;
calls.arcto = StdArcTo;
// Otherwise there's only one point. (tr: or "only a point")
// [sinon il n'y a qu'un point]
int curD = curP - 1;
- NR::Point curX;
- NR::Point nextX;
+ Geom::Point curX;
+ Geom::Point nextX;
while (curD > lastM && (descr_cmd[curD]->getType()) == descr_close) curD--;
if (curD > lastM) {
curX = PrevPoint (curD);
} else if (typ == descr_cubicto) {
PathDescrCubicTo *nData = dynamic_cast<PathDescrCubicTo*>(descr_cmd[curD]);
nextX = PrevPoint (curD - 1);
- NR::Point isD=-nData->start;
- NR::Point ieD=-nData->end;
+ Geom::Point isD=-nData->start;
+ Geom::Point ieD=-nData->end;
rev->CubicTo (nextX, ieD,isD);
curX = nextX;
curD--;
Path *dest, outline_callbacks & calls,
double tolerance, double width, JoinType join,
ButtType /*butt*/, double miter, bool closeIfNeeded,
- bool skipMoveto, NR::Point &lastP, NR::Point &lastT)
+ bool skipMoveto, Geom::Point &lastP, Geom::Point &lastT)
{
outline_callback_data callsData;
int curP = 1;
// le moveto
- NR::Point curX;
+ Geom::Point curX;
{
int firstTyp = descr_cmd[off]->getType();
if ( firstTyp != descr_moveto ) {
curX = nData->p;
}
}
- NR::Point curT(0, 0);
+ Geom::Point curT(0, 0);
bool doFirst = true;
- NR::Point firstP(0, 0);
- NR::Point firstT(0, 0);
+ Geom::Point firstP(0, 0);
+ Geom::Point firstT(0, 0);
// et le reste, 1 par 1
while (curP < num_pd)
{
int curD = off + curP;
int nType = descr_cmd[curD]->getType();
- NR::Point nextX;
- NR::Point stPos, enPos, stTgt, enTgt, stNor, enNor;
+ Geom::Point nextX;
+ Geom::Point stPos, enPos, stTgt, enTgt, stNor, enNor;
double stRad, enRad, stTle, enTle;
if (nType == descr_forced) {
curP++;
// jointure
{
- NR::Point pos;
+ Geom::Point pos;
pos = curX;
OutlineJoin (dest, pos, curT, stNor, width, join,
miter);
// jointure
{
- NR::Point pos;
+ Geom::Point pos;
pos = firstP;
OutlineJoin (dest, enPos, enNor, firstT, width, join,
miter);
else
{
// jointure
- NR::Point pos;
+ Geom::Point pos;
pos = curX;
OutlineJoin (dest, pos, curT, stNor, width, join, miter);
}
else
{
// jointure
- NR::Point pos;
+ Geom::Point pos;
pos = curX;
OutlineJoin (dest, pos, curT, stNor, width, join, miter);
}
else
{
// jointure
- NR::Point pos;
+ Geom::Point pos;
pos = curX;
OutlineJoin (dest, pos, curT, stNor, width, join, miter);
}
} else dest->MoveTo (curX+width*stNor);
} else {
// jointure
- NR::Point pos;
+ Geom::Point pos;
pos = curX;
if (stTle > 0) OutlineJoin (dest, pos, curT, stNor, width, join, miter);
}
dest->descr_cmd[n_d]->tEn = 1.0;
}
} else if (nbInterm == 1) {
- NR::Point midX;
+ Geom::Point midX;
midX = nData->p;
// et on avance
TangentOnBezAt (0.0, curX, *nData, *nBData, false, stPos, stTgt, stTle, stRad);
} else dest->MoveTo (curX+width*stNor);
} else {
// jointure
- NR::Point pos;
+ Geom::Point pos;
pos = curX;
OutlineJoin (dest, pos, curT, stNor, width, join, miter);
}
(calls.bezierto) (&callsData, tolerance, width);
} else if (nbInterm > 1) {
- NR::Point bx=curX;
- NR::Point cx=curX;
- NR::Point dx=curX;
+ Geom::Point bx=curX;
+ Geom::Point cx=curX;
+ Geom::Point dx=curX;
dx = nData->p;
TangentOnBezAt (0.0, curX, *nData, *nBData, false, stPos, stTgt, stTle, stRad);
} else dest->MoveTo (curX+width*stNor);
} else {
// jointure
- NR::Point pos=curX;
+ Geom::Point pos=curX;
OutlineJoin (dest, pos, stTgt, stNor, width, join, miter);
// dest->LineTo(curX+width*stNor.x,curY+width*stNor.y);
}
dx = nData->p;
ip++;
nData = dynamic_cast<PathDescrIntermBezierTo*>(descr_cmd[ip]);
- NR::Point stx = (bx + cx) / 2;
+ Geom::Point stx = (bx + cx) / 2;
// double stw=(bw+cw)/2;
PathDescrBezierTo tempb((cx + dx) / 2, 1);
dx = nextX;
dx = 2 * dx - cx;
- NR::Point stx = (bx + cx) / 2;
+ Geom::Point stx = (bx + cx) / 2;
// double stw=(bw+cw)/2;
PathDescrBezierTo tempb((cx + dx) / 2, 1);
// like the name says: check whether the path command is actually more than a dumb point.
bool
-Path::IsNulCurve (std::vector<PathDescr*> const &cmd, int curD, NR::Point const &curX)
+Path::IsNulCurve (std::vector<PathDescr*> const &cmd, int curD, Geom::Point const &curX)
{
switch(cmd[curD]->getType()) {
case descr_lineto:
case descr_cubicto:
{
PathDescrCubicTo *nData = dynamic_cast<PathDescrCubicTo*>(cmd[curD]);
- NR::Point A = nData->start + nData->end + 2*(curX - nData->p);
- NR::Point B = 3*(nData->p - curX) - 2*nData->start - nData->end;
- NR::Point C = nData->start;
+ Geom::Point A = nData->start + nData->end + 2*(curX - nData->p);
+ Geom::Point B = 3*(nData->p - curX) - 2*nData->start - nData->end;
+ Geom::Point C = nData->start;
if (Geom::LInfty(A) < 0.0001
&& Geom::LInfty(B) < 0.0001
&& Geom::LInfty (C) < 0.0001) {
@@ -908,15 +908,15 @@ Path::IsNulCurve (std::vector<PathDescr*> const &cmd, int curD, NR::Point const
* \param len Filled in with the length of the segment.
*/
-void Path::TangentOnSegAt(double at, NR::Point const &iS, PathDescrLineTo const &fin,
- NR::Point &pos, NR::Point &tgt, double &len)
+void Path::TangentOnSegAt(double at, Geom::Point const &iS, PathDescrLineTo const &fin,
+ Geom::Point &pos, Geom::Point &tgt, double &len)
{
- NR::Point const iE = fin.p;
- NR::Point const seg = iE - iS;
+ Geom::Point const iE = fin.p;
+ Geom::Point const seg = iE - iS;
double const l = L2(seg);
if (l <= 0.000001) {
pos = iS;
- tgt = NR::Point(0, 0);
+ tgt = Geom::Point(0, 0);
len = 0;
} else {
tgt = seg / l;
@@ -926,10 +926,10 @@ void Path::TangentOnSegAt(double at, NR::Point const &iS, PathDescrLineTo const
}
// barf
-void Path::TangentOnArcAt(double at, const NR::Point &iS, PathDescrArcTo const &fin,
- NR::Point &pos, NR::Point &tgt, double &len, double &rad)
+void Path::TangentOnArcAt(double at, const Geom::Point &iS, PathDescrArcTo const &fin,
+ Geom::Point &pos, Geom::Point &tgt, double &len, double &rad)
{
- NR::Point const iE = fin.p;
+ Geom::Point const iE = fin.p;
double const rx = fin.rx;
double const ry = fin.ry;
double const angle = fin.angle;
@@ -1045,7 +1045,7 @@ void Path::TangentOnArcAt(double at, const NR::Point &iS, PathDescrArcTo const &
pos[1] = dry + sa * rx * cb + ca * ry * sb;
tgt[0] = ca * rx * sb + sa * ry * cb;
tgt[1] = sa * rx * sb - ca * ry * cb;
- NR::Point dtgt;
+ Geom::Point dtgt;
dtgt[0] = -ca * rx * cb + sa * ry * sb;
dtgt[1] = -sa * rx * cb - ca * ry * sb;
len = L2(tgt);
@@ -1062,7 +1062,7 @@ void Path::TangentOnArcAt(double at, const NR::Point &iS, PathDescrArcTo const &
pos[1] = dry + sa * rx * cb + ca * ry * sb;
tgt[0] = ca * rx * sb + sa * ry * cb;
tgt[1] = sa * rx * sb - ca * ry * cb;
- NR::Point dtgt;
+ Geom::Point dtgt;
dtgt[0] = -ca * rx * cb + sa * ry * sb;
dtgt[1] = -sa * rx * cb - ca * ry * sb;
len = L2(tgt);
@@ -1071,28 +1071,28 @@ void Path::TangentOnArcAt(double at, const NR::Point &iS, PathDescrArcTo const &
}
}
void
-Path::TangentOnCubAt (double at, NR::Point const &iS, PathDescrCubicTo const &fin, bool before,
- NR::Point &pos, NR::Point &tgt, double &len, double &rad)
+Path::TangentOnCubAt (double at, Geom::Point const &iS, PathDescrCubicTo const &fin, bool before,
+ Geom::Point &pos, Geom::Point &tgt, double &len, double &rad)
{
- const NR::Point E = fin.p;
- const NR::Point Sd = fin.start;
- const NR::Point Ed = fin.end;
+ const Geom::Point E = fin.p;
+ const Geom::Point Sd = fin.start;
+ const Geom::Point Ed = fin.end;
pos = iS;
- tgt = NR::Point(0,0);
+ tgt = Geom::Point(0,0);
len = rad = 0;
- const NR::Point A = Sd + Ed - 2*E + 2*iS;
- const NR::Point B = 0.5*(Ed - Sd);
- const NR::Point C = 0.25*(6*E - 6*iS - Sd - Ed);
- const NR::Point D = 0.125*(4*iS + 4*E - Ed + Sd);
+ const Geom::Point A = Sd + Ed - 2*E + 2*iS;
+ const Geom::Point B = 0.5*(Ed - Sd);
+ const Geom::Point C = 0.25*(6*E - 6*iS - Sd - Ed);
+ const Geom::Point D = 0.125*(4*iS + 4*E - Ed + Sd);
const double atb = at - 0.5;
pos = (atb * atb * atb)*A + (atb * atb)*B + atb*C + D;
- const NR::Point der = (3 * atb * atb)*A + (2 * atb)*B + C;
- const NR::Point dder = (6 * atb)*A + 2*B;
- const NR::Point ddder = 6 * A;
+ const Geom::Point der = (3 * atb * atb)*A + (2 * atb)*B + C;
+ const Geom::Point dder = (6 * atb)*A + 2*B;
+ const Geom::Point ddder = 6 * A;
- double l = NR::L2 (der);
+ double l = Geom::L2 (der);
// lots of nasty cases. inversion points are sadly too common...
if (l <= 0.0001) {
len = 0;
@@ -1125,26 +1125,26 @@ Path::TangentOnCubAt (double at, NR::Point const &iS, PathDescrCubicTo const &fi
}
void
-Path::TangentOnBezAt (double at, NR::Point const &iS,
+Path::TangentOnBezAt (double at, Geom::Point const &iS,
PathDescrIntermBezierTo & mid,
- PathDescrBezierTo & fin, bool before, NR::Point & pos,
- NR::Point & tgt, double &len, double &rad)
+ PathDescrBezierTo & fin, bool before, Geom::Point & pos,
+ Geom::Point & tgt, double &len, double &rad)
{
pos = iS;
- tgt = NR::Point(0,0);
+ tgt = Geom::Point(0,0);
len = rad = 0;
- const NR::Point A = fin.p + iS - 2*mid.p;
- const NR::Point B = 2*mid.p - 2 * iS;
- const NR::Point C = iS;
+ const Geom::Point A = fin.p + iS - 2*mid.p;
+ const Geom::Point B = 2*mid.p - 2 * iS;
+ const Geom::Point C = iS;
pos = at * at * A + at * B + C;
- const NR::Point der = 2 * at * A + B;
- const NR::Point dder = 2 * A;
- double l = NR::L2(der);
+ const Geom::Point der = 2 * at * A + B;
+ const Geom::Point dder = 2 * A;
+ double l = Geom::L2(der);
if (l <= 0.0001) {
- l = NR::L2(dder);
+ l = Geom::L2(dder);
if (l <= 0.0001) {
// pas de segment....
// Not a segment.
}
void
-Path::OutlineJoin (Path * dest, NR::Point pos, NR::Point stNor, NR::Point enNor, double width,
+Path::OutlineJoin (Path * dest, Geom::Point pos, Geom::Point stNor, Geom::Point enNor, double width,
JoinType join, double miter)
{
const double angSi = cross (enNor,stNor);
@@ -1194,15 +1194,15 @@ Path::OutlineJoin (Path * dest, NR::Point pos, NR::Point stNor, NR::Point enNor,
// l'arrondi des coordonnees des extremites
/* double angle=acos(angCo);
if ( angCo >= 0 ) {
- NR::Point stTgt,enTgt;
+ Geom::Point stTgt,enTgt;
RotCCWTo(stNor,stTgt);
RotCCWTo(enNor,enTgt);
dest->CubicTo(pos.x+width*enNor.x,pos.y+width*enNor.y,
angle*width*stTgt.x,angle*width*stTgt.y,
angle*width*enTgt.x,angle*width*enTgt.y);
} else {
- NR::Point biNor;
- NR::Point stTgt,enTgt,biTgt;
+ Geom::Point biNor;
+ Geom::Point stTgt,enTgt,biTgt;
biNor.x=stNor.x+enNor.x;
biNor.y=stNor.y+enNor.y;
double biL=sqrt(biNor.x*biNor.x+biNor.y*biNor.y);
@@ -1227,8 +1227,8 @@ Path::OutlineJoin (Path * dest, NR::Point pos, NR::Point stNor, NR::Point enNor,
false);
}
} else if (join == join_pointy) {
- NR::Point const biss = unit_vector(NR::rot90( stNor - enNor ));
- double c2 = NR::dot (biss, enNor);
+ Geom::Point const biss = unit_vector(Geom::rot90( stNor - enNor ));
+ double c2 = Geom::dot (biss, enNor);
double l = width / c2;
if ( fabs(l) > miter) {
dest->LineTo (pos + width*enNor);
Path::RecStdCubicTo (outline_callback_data * data, double tol, double width,
int lev)
{
- NR::Point stPos, miPos, enPos;
- NR::Point stTgt, enTgt, miTgt, stNor, enNor, miNor;
+ Geom::Point stPos, miPos, enPos;
+ Geom::Point stTgt, enTgt, miTgt, stNor, enNor, miNor;
double stRad, miRad, enRad;
double stTle, miTle, enTle;
// un cubic
{
- PathDescrCubicTo temp(NR::Point(data->x2, data->y2),
- NR::Point(data->d.c.dx1, data->d.c.dy1),
- NR::Point(data->d.c.dx2, data->d.c.dy2));
+ PathDescrCubicTo temp(Geom::Point(data->x2, data->y2),
+ Geom::Point(data->d.c.dx1, data->d.c.dy1),
+ Geom::Point(data->d.c.dx2, data->d.c.dy2));
- NR::Point initial_point(data->x1, data->y1);
+ Geom::Point initial_point(data->x1, data->y1);
TangentOnCubAt (0.0, initial_point, temp, false, stPos, stTgt, stTle,
stRad);
TangentOnCubAt (0.5, initial_point, temp, false, miPos, miTgt, miTle,
@@ -1298,18 +1298,18 @@ Path::RecStdCubicTo (outline_callback_data * data, double tol, double width,
return;
}
- NR::Point chk;
- const NR::Point req = miPos + width * miNor;
+ Geom::Point chk;
+ const Geom::Point req = miPos + width * miNor;
{
PathDescrCubicTo temp(enPos + width * enNor,
stGue * stTgt,
enGue * enTgt);
double chTle, chRad;
- NR::Point chTgt;
+ Geom::Point chTgt;
TangentOnCubAt (0.5, stPos+width*stNor,
temp, false, chk, chTgt, chTle, chRad);
}
- const NR::Point diff = req - chk;
+ const Geom::Point diff = req - chk;
const double err = dot(diff,diff);
if (err <= tol ) { // tolerance is given as a quadratic value, no need to use tol*tol here
// printf("%f <= %f %i\n",err,tol,lev);
@@ -1360,11 +1360,11 @@ Path::StdCubicTo (Path::outline_callback_data * data, double tol, double width)
void
Path::StdBezierTo (Path::outline_callback_data * data, double tol, double width)
{
- PathDescrBezierTo tempb(NR::Point(data->x2, data->y2), 1);
- PathDescrIntermBezierTo tempi(NR::Point(data->d.b.mx, data->d.b.my));
- NR::Point stPos, enPos, stTgt, enTgt;
+ PathDescrBezierTo tempb(Geom::Point(data->x2, data->y2), 1);
+ PathDescrIntermBezierTo tempi(Geom::Point(data->d.b.mx, data->d.b.my));
+ Geom::Point stPos, enPos, stTgt, enTgt;
double stRad, enRad, stTle, enTle;
- NR::Point tmp(data->x1,data->y1);
+ Geom::Point tmp(data->x1,data->y1);
TangentOnBezAt (0.0, tmp, tempi, tempb, false, stPos, stTgt,
stTle, stRad);
TangentOnBezAt (1.0, tmp, tempi, tempb, true, enPos, enTgt,
Path::RecStdArcTo (outline_callback_data * data, double tol, double width,
int lev)
{
- NR::Point stPos, miPos, enPos;
- NR::Point stTgt, enTgt, miTgt, stNor, enNor, miNor;
+ Geom::Point stPos, miPos, enPos;
+ Geom::Point stTgt, enTgt, miTgt, stNor, enNor, miNor;
double stRad, miRad, enRad;
double stTle, miTle, enTle;
// un cubic
{
- PathDescrArcTo temp(NR::Point(data->x2, data->y2),
+ PathDescrArcTo temp(Geom::Point(data->x2, data->y2),
data->d.a.rx, data->d.a.ry,
data->d.a.angle, data->d.a.large, data->d.a.clock);
- NR::Point tmp(data->x1,data->y1);
+ Geom::Point tmp(data->x1,data->y1);
TangentOnArcAt (data->d.a.stA, tmp, temp, stPos, stTgt,
stTle, stRad);
TangentOnArcAt ((data->d.a.stA + data->d.a.enA) / 2, tmp,
enGue *= enTle;
double sang, eang;
{
- NR::Point tms(data->x1,data->y1),tme(data->x2,data->y2);
+ Geom::Point tms(data->x1,data->y1),tme(data->x2,data->y2);
ArcAngles (tms,tme, data->d.a.rx,
data->d.a.ry, data->d.a.angle, data->d.a.large, !data->d.a.clock,
sang, eang);
return;
}
- NR::Point chk;
- const NR::Point req = miPos + width*miNor;
+ Geom::Point chk;
+ const Geom::Point req = miPos + width*miNor;
{
PathDescrCubicTo temp(enPos + width * enNor, stGue * scal * stTgt, enGue * scal * enTgt);
double chTle, chRad;
- NR::Point chTgt;
+ Geom::Point chTgt;
TangentOnCubAt (0.5, stPos+width*stNor,
temp, false, chk, chTgt, chTle, chRad);
}
- const NR::Point diff = req - chk;
+ const Geom::Point diff = req - chk;
const double err = (dot(diff,diff));
if (err <= tol * tol)
{