X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fsgp.h;h=0f947c571712853fc5834608df5d2dff614f88db;hp=b2d31eec0fbf7818e2d1728a3ac1deba444337fc;hb=f13a8c004b8f182b42d9e4df2bcd7c7f030bf1ad;hpb=711cae0ee02e046370fdb4d6c6f440596ff71980 diff --git a/include/sgp.h b/include/sgp.h index b2d31ee..0f947c5 100644 --- a/include/sgp.h +++ b/include/sgp.h @@ -7,9 +7,7 @@ ** Date Started: 1984 ** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg -** -** $Id: sgp.h,v 1.11 2000/07/28 08:28:08 kevin Exp $ +** Copyright (c) 1983-2009 Kevin Rosenberg ** ** 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 @@ -36,6 +34,7 @@ #ifdef HAVE_WXWINDOWS #include +#include #endif #if HAVE_G2_H @@ -47,12 +46,11 @@ extern "C" { #include - class SGPDriver { private: int m_iPhysicalXSize; int m_iPhysicalYSize; - string m_sWindowTitle; + std::string m_sWindowTitle; int m_idDriver; #ifdef HAVE_WXWINDOWS @@ -68,7 +66,7 @@ public: }; #ifdef HAVE_WXWINDOWS - SGPDriver (wxDC* pDC, const char* szWinTitle = "", int xsize = 640, int ysize = 480); + SGPDriver (wxDC* pDC, int xsize = 640, int ysize = 480); #endif SGPDriver (const char* szWinTitle = "", int xsize = 640, int ysize = 480); @@ -81,14 +79,14 @@ public: int getPhysicalYSize () const { return m_iPhysicalYSize; } - const string& getWindowTitle () const + const std::string& getWindowTitle () const { return m_sWindowTitle; } bool isWX () const - { return (m_idDriver & SGPDRIVER_WXWINDOWS); } + { return (m_idDriver & SGPDRIVER_WXWINDOWS ? true : false); } bool isG2 () const - { return (m_idDriver & SGPDRIVER_G2); } + { return (m_idDriver & SGPDRIVER_G2 ? true : false); } int idG2 () const { return m_idG2; } @@ -96,45 +94,63 @@ public: #ifdef HAVE_WXWINDOWS wxDC* idWX () const { return m_pDC; } + + void setDC (wxDC* dc) + { m_pDC = dc; } #endif }; +class SGP_RGBColor; class SGP { private: - int m_iPhysicalXSize; // Physical Window size + int m_iPhysicalXSize; // Physical Window size int m_iPhysicalYSize; - const SGPDriver m_driver; + SGPDriver m_driver; - double xw_min; // Window extents + double xw_min; // Window extents double yw_min; double xw_max; double yw_max; - double xv_min; // Viewport extents + double xv_min; // Viewport extents double yv_min; double xv_max; double yv_max; - double viewNDC[4]; // Viewport array for clip_rect() + double viewNDC[4]; // Viewport array for clip_rect() int m_iCurrentPhysicalX; int m_iCurrentPhysicalY; double m_dCurrentWorldX; double m_dCurrentWorldY; double m_dTextAngle; + int m_iTextPointSize; bool m_bRecalcTransform; + double m_dPointsPerPixel; // points (72pt/in) per screen pixel; + int m_iLinestyle; + int m_iMarker; // Master coordinates are coordinates before CTM transformation // World coordinates are coordinates defined by setWindow() // Normalized device coordinates range from 0. to 1. in both axes - TransformationMatrix2D wc_to_ndc; // World coord to NDC matrix - TransformationMatrix2D mc_to_ndc; // Master to NDC + TransformationMatrix2D wc_to_ndc; // World coord to NDC matrix + TransformationMatrix2D mc_to_ndc; // Master to NDC TransformationMatrix2D ndc_to_mc; // NDC to Master - TransformationMatrix2D m_ctm; // Current transfromation matrix - + TransformationMatrix2D m_ctm; // Current transfromation matrix + void calc_transform (); + static SGP_RGBColor s_aRGBColor[]; + static int s_iRGBColorCount; + +#if HAVE_WXWINDOWS + wxPen m_pen; + wxFont* m_pFont; + + void initFromDC (wxDC* pDC); +#endif + public: - enum { // linestyles + enum { // linestyles LS_NOLINE = 0, LS_SOLID = 0xffff, LS_DASH1 = 0xff00, @@ -145,32 +161,33 @@ public: }; enum { // Codes for marker symbols - MARK_POINT = 0, // small dot - MARK_SQUARE = 1, // empty square - MARK_FSQUARE = 2, // filled square - MARK_DIAMOND = 3, // empty diamond - MARK_FDIAMOND = 4, // filled diamond - MARK_CROSS = 5, // cross - MARK_XCROSS = 6, // x - MARK_CIRCLE = 7, // open circle - MARK_FCIRCLE = 8, // filled circle - MARK_BSQUARE = 9, // big open square - MARK_BDIAMOND = 10, // big open diamond + MARKER_POINT = 0, // small dot + MARKER_SQUARE = 1, // empty square + MARKER_FSQUARE = 2, // filled square + MARKER_DIAMOND = 3, // empty diamond + MARKER_FDIAMOND = 4, // filled diamond + MARKER_CROSS = 5, // cross + MARKER_XCROSS = 6, // x + MARKER_CIRCLE = 7, // open circle + MARKER_FCIRCLE = 8, // filled circle + MARKER_BSQUARE = 9, // big open square + MARKER_BDIAMOND = 10, // big open diamond }; - static const int MARK_COUNT = 11; + enum { MARK_COUNT = 11, }; static const unsigned char MARKER_BITMAP[MARK_COUNT][5]; SGP (const SGPDriver& driver); + ~SGP(); void drawCircle (const double r); - void drawArc (double start, double stop, const double r); + void drawArc (const double r, double start, double stop); void drawRect (double xmin, double ymin, double xmax, double ymax); void lineAbs(double x, double y); void moveAbs(double x, double y); void lineRel(double x, double y); void moveRel(double x, double y); void drawText(const char *szMessage); - void drawText(const string& rsMessage); + void drawText(const std::string& rsMessage); void polylineAbs(double x[], double y[], int n); void markerAbs (double x, double y); void markerRel(double x, double y); @@ -185,9 +202,21 @@ public: void setColor (int icol); void setLineStyle (int style); void setTextSize (double height); + void setTextNDCSize (double height); + void setTextPointSize (double height); void setTextAngle (double angle); void setTextColor (int iFGcolor, int iBGcolor); - void setMarker (int idMarker, int color); + void setPenWidth (int width); + void setMarker (int idMarker); + void setRasterOp (int ro); + + void getWindow (double& xmin, double& ymin, double& xmax, double& ymax); + void getViewport (double& xmin, double& ymin, double& xmax, double& ymax); + void getTextExtent (const char *szText, double* x, double* y); + double getCharHeight (); + double getCharWidth (); + SGPDriver& getDriver() {return m_driver;} + const SGPDriver& getDriver() const {return m_driver;} void ctmClear (); void ctmSet (const TransformationMatrix2D& m); @@ -206,7 +235,72 @@ public: void stylusNDC (double x, double y, bool beam); void pointNDC (double x, double y); void markerNDC (double x, double y); + +#if HAVE_WXWINDOWS + void setDC (wxDC* pDC); +#endif +}; + + +enum { + C_BLACK = 0, // color codes + C_BLUE = 1, + C_GREEN = 2, + C_CYAN = 3, + C_RED = 4, + C_MAGENTA = 5, + C_BROWN = 6, + C_GRAY = 7, + C_LTGRAY = 8, + C_LTBLUE = 9, + C_LTGREEN = 10, + C_LTCYAN = 11, + C_LTRED = 12, + C_LTMAGENTA = 13, + C_YELLOW = 14, + C_WHITE = 15, +}; + +enum RasterOp { + RO_AND = 1, + RO_AND_INVERT, + RO_AND_REVERSE, + RO_CLEAR, + RO_COPY, + RO_EQUIV, + RO_INVERT, + RO_NAND, + RO_NOR, + RO_NO_OP, + RO_OR, + RO_OR_INVERT, + RO_OR_REVERSE, + RO_SET, + RO_SRC_INVERT, + RO_XOR, }; +class SGP_RGBColor { + private: + short int r; + short int g; + short int b; + + public: + SGP_RGBColor (int r, int g, int b) + : r(r), g(g), b(b) + {} + + int getRed () const + { return r; } + + int getGreen () const + { return g; } + + int getBlue () const + { return b; } + +}; + #endif