PLplot  5.11.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
wxPLplotstream.cpp
Go to the documentation of this file.
1 // Copyright (C) 2015 Phil Rosenberg
2 // Copyright (C) 2005 Werner Smekal
3 //
4 // This file is part of PLplot.
5 //
6 // PLplot is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU Library General Public License as published
8 // by the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
10 //
11 // PLplot is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU Library General Public License for more details.
15 //
16 // You should have received a copy of the GNU Library General Public License
17 // along with PLplot; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 //
20 
21 // wxwidgets headers
22 #include "wx/wx.h"
23 
24 // plplot headers
25 #include "plplotP.h"
26 
27 #include "wxPLplotstream.h"
28 
30 // Here we set the driver (wxwidgets :), and tell plplot in which dc to
31 // plot to and the size of the canvas. We also check and set several
32 // device style options.
33 //
34 wxPLplotstream::wxPLplotstream( wxDC *dc, int width, int height, int style ) : plstream()
35 {
36  m_created = false;
37  Create( dc, width, height, style );
38 }
39 
40 
42 {
43  m_created = false;
44 }
45 
47 // We set the driver to be wxwidgets, set the page size, set the driver options and initialize
48 // the plot.
49 void wxPLplotstream::Create( wxDC *dc, int width, int height, int style )
50 {
51  if ( m_created )
52  {
53  plabort( "wxPLplotstream::Create - Stream already created" );
54  return;
55  }
56  const size_t bufferSize = 256;
57 
58  m_width = width;
59  m_height = height;
60  m_style = style;
61 
62  sdev( "wxwidgets" );
63  spage( 90.0, 90.0, m_width, m_height, 0, 0 );
64 
65  char drvopt[bufferSize], buffer[bufferSize];
66  drvopt[0] = '\0';
67 
68  sprintf( buffer, "hrshsym=%d,text=%d",
70  m_style & wxPLPLOT_DRAW_TEXT ? 1 : 0 );
71  strncat( drvopt, buffer, bufferSize - strlen( drvopt ) );
72 
73  setopt( "-drvopt", drvopt );
74 
75  sdevdata( (void *) dc );
76 
77  init();
78 }
79 
81 // the device is NULL
82 void wxPLplotstream::SetDC( wxDC *dc )
83 {
84  set_stream();
85  cmd( PLESC_DEVINIT, (void *) dc );
86 }
87 
90 {
91 }
92 
93 
95 // code processed before every call of a plplot functions, since set_stream()
96 // is called before every plplot function. Not used in the moment.
97 //
99 {
101 }
102 
103 
105 // to set the new size. You need to call RenewPlot afterwards.
106 //
107 void wxPLplotstream::SetSize( int width, int height )
108 {
109  wxSize size( width, height );
110  cmd( PLESC_RESIZE, (void *) &size );
111  m_width = width;
112  m_height = height;
113 }
114 
115 
117 //
119 {
120  replot();
121 }
122 
123 void wxPLplotstream::ImportBuffer( void *buffer, size_t size )
124 {
125  plbuffer buf;
126  buf.buffer = buffer;
127  buf.size = size;
128  cmd( PLESC_IMPORT_BUFFER, &buf );
129  RenewPlot();
130 }
131 
132 void wxPLplotstream::AppendBuffer( void *buffer, size_t size )
133 {
134  plbuffer buf;
135  buf.buffer = buffer;
136  buf.size = size;
137  cmd( PLESC_APPEND_BUFFER, &buf );
139 }
140 
142 {
143  PLBOOL f = fixed ? 1 : 0;
144  cmd( PLESC_FIXASPECT, &f );
145 }
146 
148 {
149  return m_created;
150 }
#define PLESC_DEVINIT
Definition: plplot.h:235
void Create(wxDC *dc, int width, int height, int style)
Called from the constructor or can be called by the user if the default constructor is used...
void cmd(PLINT op, void *ptr)
Definition: plstream.cc:2718
void RenewPlot()
Redo plot and update dc.
~wxPLplotstream()
Destructor, although we have no resources to free.
void ImportBuffer(void *buffer, size_t size)
Import a buffer of plplot commands.
void sdevdata(void *data)
Definition: plstream.cc:1810
int m_height
Height of dc/plot area.
int m_width
Width of dc/plot area.
void width(PLFLT width)
Definition: plstream.cc:2458
PLINT PLBOOL
Definition: plplot.h:197
void set_stream()
Calls some code before every PLplot command.
void SetFixedAspectRatio(bool fixed)
Set Fixed aspect ratio of the plot.
void spage(PLFLT xp, PLFLT yp, PLINT xleng, PLINT yleng, PLINT xoff, PLINT yoff)
Definition: plstream.cc:2120
#define PLESC_FIXASPECT
Definition: plplot.h:247
#define PLESC_RESIZE
Definition: plplot.h:214
#define PLESC_FLUSH_REMAINING_BUFFER
Definition: plplot.h:250
static PLINT * buffer
Definition: plfill.c:74
size_t size
Definition: plplot.h:562
int m_style
style of this plot
void SetDC(wxDC *dc)
Set a new dc to write to.
#define PLESC_APPEND_BUFFER
Definition: plplot.h:249
void sdev(const char *devname)
Definition: plstream.cc:1689
static char buf[200]
Definition: tclAPI.c:861
void init(void)
Definition: plstream.cc:1002
void SetSize(int width, int height)
Set new size of plot area.
void AppendBuffer(void *buffer, size_t size)
Append a buffer of plplot commands.
void plabort(const char *errormsg)
Definition: plctrl.c:1884
void replot(void)
Definition: plstream.cc:1438
wxPLplotstream()
Constructor.
PLINT setopt(const char *opt, const char *optarg)
Definition: plstream.cc:2660
#define PLESC_IMPORT_BUFFER
Definition: plplot.h:248
virtual void set_stream(void)
Definition: plstream.h:129
void * buffer
Definition: plplot.h:563