** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: sgp.cpp,v 1.29 2001/01/28 19:10:18 kevin Exp $
+** $Id: sgp.cpp,v 1.30 2001/03/10 23:14:16 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
void
SGP::pointNDC (double x, double y)
{
+ int xp = static_cast<int>(x * (m_iPhysicalXSize - 1) + 0.5);
+ int yp = static_cast<int>(y * (m_iPhysicalYSize - 1) + 0.5);
+ if (m_driver.isWX())
+ yp = m_iPhysicalYSize - yp;
+
+#if HAVE_WXWINDOWS
+ if (m_driver.isWX())
+ m_driver.idWX()->DrawPoint (xp, yp);
+#endif
+ m_iCurrentPhysicalX = xp;
+ m_iCurrentPhysicalY = yp;
}
double xndc = x, yndc = y;
mc_to_ndc.transformPoint (&xndc, &yndc);
pointNDC (xndc, yndc);
- stylusNDC (xndc, yndc, false); // move to location
m_dCurrentWorldX = x;
m_dCurrentWorldY = y;
}
stop = temp;
}
- double x = r * cos ((double) start);
- double y = r * sin ((double) start);
- moveRel (x, y); // move from center to start of arc
+ double xCent = m_dCurrentWorldX;
+ double yCent = m_dCurrentWorldY;
+
+ double x = r * cos (start);
+ double y = r * sin (start);
+ moveAbs (xCent + x, yCent + y); // move from center to start of arc
- const double thetaIncrement = (5 * (TWOPI / 360));
- double cosTheta = cos(thetaIncrement);
- double sinTheta = sin(thetaIncrement);
+ const double thetaIncrement = (5 * (TWOPI / 360)); // 5 degree increments
+ double cosTheta = cos (thetaIncrement);
+ double sinTheta = sin (thetaIncrement);
- double angle, xp, yp;
- for (angle = start; angle < stop - thetaIncrement; angle += thetaIncrement) {
- xp = cosTheta * x - sinTheta * y; // translate point by thetaIncrement
- yp = sinTheta * x + cosTheta * y;
- lineAbs (xp, yp);
+ for (double angle = start; angle < stop; angle += thetaIncrement) {
+ double xp = cosTheta * x - sinTheta * y; // translate point by thetaIncrement
+ double yp = sinTheta * x + cosTheta * y;
+ lineAbs (xCent + xp, yCent + yp);
x = xp; y = yp;
}
double c = cos (stop - angle);
double s = sin (stop - angle);
- xp = c * x - s * y;
- yp = s * x + c * y;
- lineAbs (xp, yp);
+ double xp = c * x - s * y;
+ double yp = s * x + c * y;
+ lineAbs (xCent + xp, yCent + yp);
- x = r * cos (stop);
- y = r * sin (stop);
- moveRel (-x, -y); // move back to center of circle
+ moveAbs (xCent, yCent); // move back to center of circle
}