1 /*****************************************************************************
5 ** Purpose: Header file for Simple Graphics Package
6 ** Author: Kevin Rosenberg
9 ** This is part of the CTSim program
10 ** Copyright (C) 1983-2000 Kevin Rosenberg
12 ** $Id: sgp.h,v 1.16 2000/08/31 08:38:58 kevin Exp $
14 ** This program is free software; you can redistribute it and/or modify
15 ** it under the terms of the GNU General Public License (version 2) as
16 ** published by the Free Software Foundation.
18 ** This program is distributed in the hope that it will be useful,
19 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ** GNU General Public License for more details.
23 ** You should have received a copy of the GNU General Public License
24 ** along with this program; if not, write to the Free Software
25 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 ******************************************************************************/
35 #include "transformmatrix.h"
55 string m_sWindowTitle;
65 SGPDRIVER_WXWINDOWS = 1,
71 SGPDriver (wxDC* pDC, int xsize = 640, int ysize = 480);
74 SGPDriver (const char* szWinTitle = "", int xsize = 640, int ysize = 480);
78 int getPhysicalXSize () const
79 { return m_iPhysicalXSize; }
81 int getPhysicalYSize () const
82 { return m_iPhysicalYSize; }
84 const string& getWindowTitle () const
85 { return m_sWindowTitle; }
88 { return (m_idDriver & SGPDRIVER_WXWINDOWS); }
91 { return (m_idDriver & SGPDRIVER_G2); }
100 void setDC (wxDC* dc)
109 int m_iPhysicalXSize; // Physical Window size
110 int m_iPhysicalYSize;
113 double xw_min; // Window extents
117 double xv_min; // Viewport extents
121 double viewNDC[4]; // Viewport array for clip_rect()
123 int m_iCurrentPhysicalX;
124 int m_iCurrentPhysicalY;
125 double m_dCurrentWorldX;
126 double m_dCurrentWorldY;
128 bool m_bRecalcTransform;
130 // Master coordinates are coordinates before CTM transformation
131 // World coordinates are coordinates defined by setWindow()
132 // Normalized device coordinates range from 0. to 1. in both axes
133 TransformationMatrix2D wc_to_ndc; // World coord to NDC matrix
134 TransformationMatrix2D mc_to_ndc; // Master to NDC
135 TransformationMatrix2D ndc_to_mc; // NDC to Master
136 TransformationMatrix2D m_ctm; // Current transfromation matrix
138 void calc_transform ();
140 static RGBColor s_aRGBColor[];
141 static int s_iRGBColorCount;
158 enum { // Codes for marker symbols
159 MARK_POINT = 0, // small dot
160 MARK_SQUARE = 1, // empty square
161 MARK_FSQUARE = 2, // filled square
162 MARK_DIAMOND = 3, // empty diamond
163 MARK_FDIAMOND = 4, // filled diamond
164 MARK_CROSS = 5, // cross
165 MARK_XCROSS = 6, // x
166 MARK_CIRCLE = 7, // open circle
167 MARK_FCIRCLE = 8, // filled circle
168 MARK_BSQUARE = 9, // big open square
169 MARK_BDIAMOND = 10, // big open diamond
171 static const int MARK_COUNT = 11;
172 static const unsigned char MARKER_BITMAP[MARK_COUNT][5];
174 SGP (const SGPDriver& driver);
176 void drawCircle (const double r);
177 void drawArc (const double r, double start, double stop);
178 void drawRect (double xmin, double ymin, double xmax, double ymax);
179 void lineAbs(double x, double y);
180 void moveAbs(double x, double y);
181 void lineRel(double x, double y);
182 void moveRel(double x, double y);
183 void drawText(const char *szMessage);
184 void drawText(const string& rsMessage);
185 void polylineAbs(double x[], double y[], int n);
186 void markerAbs (double x, double y);
187 void markerRel(double x, double y);
188 void pointAbs(double x, double y);
189 void pointRel(double x, double y);
192 void setWindow (double xmin, double ymin, double xmax, double ymax);
193 void setViewport (double xmin, double ymin, double xmax, double ymax);
194 void frameViewport();
196 void setColor (int icol);
197 void setLineStyle (int style);
198 void setTextSize (double height);
199 void setTextAngle (double angle);
200 void setTextColor (int iFGcolor, int iBGcolor);
201 void setPenWidth (int width);
202 void setMarker (int idMarker, int color);
203 void setRasterOp (int ro);
205 void getViewport (double &xmin, double &ymin, double& xmax, double& ymax);
206 void getTextExtent (const char *szText, double* x, double* y);
207 double getCharHeight ();
210 void ctmSet (const TransformationMatrix2D& m);
211 void preTranslate (double x, double y);
212 void postTranslate (double x, double y);
213 void preScale (double sx, double sy);
214 void postScale (double sx, double sy);
215 void preRotate (double theta);
216 void postRotate (double theta);
217 void preShear (double shrx, double shry);
218 void postShear (double shrx, double shry);
219 void transformNDCtoMC (double* x, double* y);
220 void transformMCtoNDC (double* x, double* y);
221 void transformMCtoNDC (double xIn, double yIn, double* xOut, double* yOut);
223 void stylusNDC (double x, double y, bool beam);
224 void pointNDC (double x, double y);
225 void markerNDC (double x, double y);
228 void setDC (wxDC* pDC);
234 C_BLACK = 0, // color codes
279 RGBColor (int r, int g, int b)
286 int getGreen () const