X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctgraphics%2Fsgp.cpp;h=57904a621f9a64120b4c210ef33db6fd84743438;hb=b361677a2f7d5b443641faec70b057f2a84dc77e;hp=1bd9a1cdfeef534459f878e7b3ed09e76ec88647;hpb=4a5567b8df652cc3168bb9d439bc23f973a2b5ea;p=ctsim.git diff --git a/libctgraphics/sgp.cpp b/libctgraphics/sgp.cpp index 1bd9a1c..57904a6 100644 --- a/libctgraphics/sgp.cpp +++ b/libctgraphics/sgp.cpp @@ -5,9 +5,9 @@ ** Programmer: Kevin Rosenberg ** ** This is part of the CTSim program -** Copyright (C) 1983-2001 Kevin Rosenberg +** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: sgp.cpp,v 1.28 2001/01/27 21:02:20 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 @@ -175,6 +175,17 @@ SGP::markerNDC (double x, double y) void SGP::pointNDC (double x, double y) { + int xp = static_cast(x * (m_iPhysicalXSize - 1) + 0.5); + int yp = static_cast(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; } @@ -657,7 +668,6 @@ SGP::pointAbs (double x, double y) 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; } @@ -746,31 +756,31 @@ SGP::drawArc (const double r, double start, double stop) 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 }