00001
00002
00003
00006
00008
00009 #define _DOUBLEDC
00010
00011 #ifdef __GNUG__
00012 #pragma interface
00013 #endif
00014
00015 #define MAX_POINTS_TODRAW 40000
00016 #define MININT -30000
00017 #define MAXINT 30000
00018
00019
00020
00021
00022
00023 #include <math.h>
00024
00025 #include "wxmatrix.h"
00026 #include "wx/image.h"
00027 #include "wx/geometry.h"
00028 #include "wx/wxprec.h"
00029
00030 #ifdef __BORLANDC__
00031 #pragma hdrstop
00032 #endif
00033
00034 #ifndef WX_PRECOMP
00035 #include "wx/wx.h"
00036 #endif
00037
00039
00063 class WXDLLEXPORT wxDoubleDCBase
00064 {
00065 public:
00066
00068 wxDoubleDCBase();
00069
00071 virtual ~wxDoubleDCBase();
00072
00074 wxDC* SetDC(wxDC* newdc);
00075
00077 wxDC* GetDC(){return m_dc;};
00078
00080 double GetScaleFactorX(){return m_scalefactor_x;};
00081
00083 double GetScaleFactorY(){return m_scalefactor_y;};
00084
00086 int GetClipCode(double,double);
00087
00089 bool Clipping(double&,double&);
00090
00092 bool Clipping(double&,double&,double&,double&);
00093
00095 wxTransformMatrix GetInverseMappingMatrix();
00096
00098 wxTransformMatrix GetMappingMatrix();
00099
00101
00108 void SetMapping(int dwxi, int dwyi,double vx1,double vy1,double vx2,double vy2,bool border);
00109
00110
00111
00112
00113
00114 void FloodFill(double x, double y, const wxColour& col,
00115 int style = wxFLOOD_SURFACE);
00116 void FloodFill(const wxPoint2DDouble& pt, const wxColour& col,
00117 int style = wxFLOOD_SURFACE);
00118 bool GetPixel(double x, double y, wxColour *col);
00119 bool GetPixel(const wxPoint2DDouble& pt, wxColour *col);
00120
00122 void DrawLine(double x1, double y1, double x2, double y2);
00123
00125 void DrawLine(const wxPoint2DDouble& pt1, const wxPoint2DDouble& pt2);
00126 void CrossHair(double x, double y);
00127 void CrossHair(const wxPoint2DDouble& pt);
00128 void DrawArc(double x1, double y1, double x2, double y2,
00129 double xc, double yc);
00130 void DrawArc(const wxPoint2DDouble& pt1, const wxPoint2DDouble& pt2, const wxPoint2DDouble& centre);
00131
00133 void DrawCheckMark(double x, double y,
00134 double width, double height);
00135 void DrawCheckMark(const wxRect2DDouble& rect);
00136
00137 void DrawEllipticArc(double x, double y, double w, double h,
00138 double sa, double ea);
00139 void DrawEllipticArc(const wxPoint2DDouble& pt, const wxSize& sz,
00140 double sa, double ea);
00141 void DrawPoint(double x, double y);
00142 void DrawPoint(const wxPoint2DDouble& pt);
00143
00146 void DrawLines(int n, wxPoint2DDouble points[],
00147 double xoffset = 0, double yoffset = 0);
00148
00150
00154 void DrawLines(const wxList *list,
00155 double xoffset = 0, double yoffset = 0);
00156
00158
00163 void DrawPolygon(int n, wxPoint2DDouble points[],
00164 double xoffset = 0, double yoffset = 0,
00165 int fillStyle = wxODDEVEN_RULE);
00166
00167 void DrawPolygon(const wxList *list,
00168 double xoffset = 0, double yoffset = 0,
00169 int fillStyle = wxODDEVEN_RULE);
00170
00173 void DrawRectangle(double x, double y, double width, double height);
00174 void DrawRectangle(const wxPoint2DDouble& pt, const wxSize& sz);
00175 void DrawRectangle(const wxRect2DDouble& rect);
00176
00178
00187 void DrawRoundedRectangle(double x, double y, double width, double height,
00188 double radius);
00189 void DrawRoundedRectangle(const wxPoint2DDouble& pt, const wxSize& sz,
00190 double radius);
00191 void DrawRoundedRectangle(const wxRect2DDouble& r, double radius);
00192
00194 void DrawCircle(double x, double y, double radius);
00196 void DrawEllipse(double x, double y, double width, double height);
00197 void DrawEllipse(const wxPoint2DDouble& pt, const wxSize& sz);
00198 void DrawEllipse(const wxRect2DDouble& rect);
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209 void DrawText(const wxString& text, double x, double y);
00210 void DrawText(const wxString& text, const wxPoint2DDouble& pt);
00211
00213 void DrawRotatedText(const wxString& text, double x, double y, double angle);
00214 void DrawRotatedText(const wxString& text, const wxPoint2DDouble& pt, double angle);
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 #if wxUSE_SPLINES
00225
00226 void DrawSpline(int n, wxPoint2DDouble points[]);
00227
00228
00229
00230 #endif // wxUSE_SPLINES
00231
00232
00233
00234
00235
00236
00237
00239 virtual void Clear();
00240
00241 virtual bool StartDoc(const wxString& WXUNUSED(message)) { return TRUE; }
00242 virtual void EndDoc() { }
00243
00244 virtual void StartPage() { }
00245 virtual void EndPage() { }
00246
00247
00248
00249
00250
00252 virtual void SetFont(const wxFont& font,double size);
00253 virtual void SetPen(const wxPen& pen) ;
00254 virtual void SetBrush(const wxBrush& brush) ;
00255 virtual void SetBackground(const wxBrush& brush);
00256 virtual void SetBackgroundMode(int mode);
00257 virtual void SetPalette(const wxPalette& palette);
00258
00259
00260
00261
00262
00264 void SetClippingRegionWin(wxCoord minx,wxCoord miny,wxCoord maxx,wxCoord maxy);
00265
00267 void SetClippingRegion(double minx,double miny,double maxx,double maxy);
00268
00270 void DestroyClippingRegion();
00271
00273 void ClearClippingRegion();
00274
00276 void ExtendClippingRegion(double x, double y);
00277
00279 virtual void GetClippingBox(double& x, double& y,
00280 double& w, double& h) const;
00282 virtual void GetVirtualSize(double& x, double& y,
00283 double& w, double& h) const;
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00315 double DeviceToLogicalX(double x) const;
00317 double DeviceToLogicalY(double y) const;
00319 double DeviceToLogicalXRel(double x) const;
00321 double DeviceToLogicalYRel(double y) const;
00323 double LogicalToDeviceX(double x) const;
00325 double LogicalToDeviceY(double y) const;
00327 double LogicalToDeviceXRel(double x) const;
00329 double LogicalToDeviceYRel(double y) const;
00330
00331
00332
00333
00334
00335
00336 virtual bool Ok() const { return m_ok; }
00337
00338
00339
00340
00341
00342
00343
00344
00345 int GetBackgroundMode() const { return m_backgroundMode; }
00346 const wxBrush& GetBackground() const { return m_backgroundBrush; }
00347 const wxBrush& GetBrush() const { return m_brush; }
00348 const wxFont& GetFont() const { return m_font; }
00349 const wxPen& GetPen() const { return m_pen; }
00350 const wxColour& GetTextBackground() const { return m_textBackgroundColour; }
00351 const wxColour& GetTextForeground() const { return m_textForegroundColour; }
00352
00353
00354 wxBrush& GetBackground() { return m_backgroundBrush; }
00355 wxBrush& GetBrush() { return m_brush; }
00356 wxFont& GetFont() { return m_font; }
00357 wxPen& GetPen() { return m_pen; }
00358 wxColour& GetTextBackground() { return m_textBackgroundColour; }
00359 wxColour& GetTextForeground() { return m_textForegroundColour; }
00360
00364 virtual void SetTextForeground(const wxColour& colour);
00365
00369 virtual void SetTextBackground(const wxColour& colour);
00370
00372
00400 int GetLogicalFunction() const { return m_logicalFunction; }
00401
00403 virtual void SetLogicalFunction(int function) ;
00404
00407 virtual void CalcBoundingBox(double x, double y)
00408 {
00409 if ( m_isBBoxValid )
00410 {
00411 if ( x < m_minX ) m_minX = x;
00412 if ( y < m_minY ) m_minY = y;
00413 if ( x > m_maxX ) m_maxX = x;
00414 if ( y > m_maxY ) m_maxY = y;
00415 }
00416 else
00417 {
00418 m_isBBoxValid = TRUE;
00419
00420 m_minX = x;
00421 m_minY = y;
00422 m_maxX = x;
00423 m_maxY = y;
00424 }
00425 }
00426
00429 void ResetBoundingBox()
00430 {
00431 m_isBBoxValid = FALSE;
00432
00433 m_minX = m_maxX = m_minY = m_maxY = 0;
00434 if (m_dc)
00435 m_dc->ResetBoundingBox();
00436 }
00437
00439 double MinX() const { return m_minX; }
00441 double MaxX() const { return m_maxX; }
00443 double MinY() const { return m_minY; }
00445 double MaxY() const { return m_maxY; }
00446
00448 void GetTextExtent(const wxString& string,
00449 long *x, long *y,
00450 long *descent = NULL,
00451 long *externalLeading = NULL,
00452 wxFont *theFont = NULL) const;
00453
00454
00456 double m_virt_minX, m_virt_minY, m_virt_maxX, m_virt_maxY;
00457
00458 protected:
00459
00461 bool m_colour:1;
00462
00464 bool m_ok:1;
00465
00467 bool m_clipping:1;
00468
00470 bool m_isInteractive:1;
00471
00473 bool m_isBBoxValid:1;
00474
00476 bool m_isVirtualValid:1;
00477
00479 double m_minX, m_minY, m_maxX, m_maxY;
00480
00482 double m_clipX1, m_clipY1, m_clipX2, m_clipY2;
00483
00485 int m_logicalFunction;
00487 int m_backgroundMode;
00489 int m_mappingMode;
00491 double m_fontsize;
00493 wxPen m_pen;
00495 wxBrush m_brush;
00497 wxBrush m_backgroundBrush;
00499 wxColour m_textForegroundColour;
00501 wxColour m_textBackgroundColour;
00503 wxFont m_font;
00505 wxPalette m_palette;
00506
00508 wxTransformMatrix m_mapping_matrix;
00509
00511 wxTransformMatrix m_inverse_mapping;
00512
00514 double m_scalefactor_x;
00516 double m_scalefactor_y;
00517
00519 wxDC* m_dc;
00520
00523 wxPoint* m_todraw;
00524
00525 private:
00526 };
00527
00528 #endif
00529
doubledc.h Source File -- Thu Nov 28 21:24:56 2002 -- 28 Nov 2002 -- 1.2.18 -- -- . --