r7061: initial property settings
[ctsim.git] / libctgraphics / sgp.cpp
index 57904a621f9a64120b4c210ef33db6fd84743438..65095c8968e062ef4b3b7f99943a924e2ae3c6a7 100644 (file)
@@ -7,7 +7,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: sgp.cpp,v 1.30 2001/03/10 23:14:16 kevin Exp $
+**  $Id$
 **
 **  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
 #include "sgp.h"
 
 
-RGBColor SGP::s_aRGBColor[] =
-{
-  RGBColor (0, 0, 0),
-  RGBColor (0, 0, 128),
-  RGBColor (0, 128, 0),
-  RGBColor (0, 128, 128),
-  RGBColor (128, 0, 0),
-  RGBColor (128, 0, 128),
-  RGBColor (128, 128, 0),
-  RGBColor (80, 80, 80),
-  RGBColor (160, 160, 160),
-  RGBColor (0, 0, 255),
-  RGBColor (0, 255, 0),
-  RGBColor (0, 255, 255),
-  RGBColor (255, 0, 0),
-  RGBColor (255, 0, 255),
-  RGBColor (255, 255, 0),
-  RGBColor (255, 255, 255),
+SGP_RGBColor SGP::s_aRGBColor[] =
+{
+  SGP_RGBColor (0, 0, 0),
+  SGP_RGBColor (0, 0, 128),
+  SGP_RGBColor (0, 128, 0),
+  SGP_RGBColor (0, 128, 128),
+  SGP_RGBColor (128, 0, 0),
+  SGP_RGBColor (128, 0, 128),
+  SGP_RGBColor (128, 128, 0),
+  SGP_RGBColor (80, 80, 80),
+  SGP_RGBColor (160, 160, 160),
+  SGP_RGBColor (0, 0, 255),
+  SGP_RGBColor (0, 255, 0),
+  SGP_RGBColor (0, 255, 255),
+  SGP_RGBColor (255, 0, 0),
+  SGP_RGBColor (255, 0, 255),
+  SGP_RGBColor (255, 255, 0),
+  SGP_RGBColor (255, 255, 255),
 };
 
-int SGP::s_iRGBColorCount = sizeof(s_aRGBColor) / sizeof(class RGBColor);
+int SGP::s_iRGBColorCount = sizeof(s_aRGBColor) / sizeof(class SGP_RGBColor);
 
 #ifdef HAVE_WXWINDOWS
 SGPDriver::SGPDriver (wxDC* pDC, int xsize, int ysize)
@@ -104,6 +104,7 @@ SGP::SGP (const SGPDriver& driver)
   setTextPointSize (12);
   setColor (C_BLACK);
   setLineStyle (LS_SOLID);
+  setMarker (MARKER_POINT);
 }
 
 
@@ -170,6 +171,22 @@ SGP::stylusNDC (double x, double y, bool beam)
 void
 SGP::markerNDC (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);
+      m_driver.idWX()->DrawPoint (xp-1, yp-1);
+      m_driver.idWX()->DrawPoint (xp+1, yp+1);
+      m_driver.idWX()->DrawPoint (xp+1, yp-1);
+      m_driver.idWX()->DrawPoint (xp-1, yp+1);
+  }
+#endif
+  m_iCurrentPhysicalX = xp;
+  m_iCurrentPhysicalY = yp;
 }
 
 void
@@ -406,8 +423,9 @@ SGP::setRasterOp (int ro)
 
 
 void
-SGP::setMarker (int idMarke, int iColor)
+SGP::setMarker (int idMarker)
 {
+  m_iMarker = idMarker;
 }
 
 //==============================================================
@@ -647,7 +665,6 @@ SGP::markerAbs (double x, double y)
   double yndc = y;
   mc_to_ndc.transformPoint (&xndc, &yndc);
   markerNDC (xndc, yndc); 
-  stylusNDC (xndc, yndc, false);            // move to location 
   m_dCurrentWorldX = x;
   m_dCurrentWorldY = y;
 }
@@ -767,7 +784,8 @@ SGP::drawArc (const double r, double start, double stop)
   double cosTheta = cos (thetaIncrement);
   double sinTheta = sin (thetaIncrement);
 
-  for (double angle = start; angle < stop; angle += thetaIncrement) {
+  double angle;
+  for (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);