rllib  1
Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
rlSvgVdi Class Reference

#include <rlsvgvdi.h>

Collaboration diagram for rlSvgVdi:
Collaboration graph
[legend]

Public Member Functions

 rlSvgVdi ()
 
 ~rlSvgVdi ()
 
int setOutput (int *socket_out, int idForPvbrowser=0)
 
int setOutput (FILE *fout)
 
int setOutput (const char *outputfilename)
 
int setOutput (rlSpawn *pipe)
 
int endOutput ()
 
const char * svgHeader (int width=1280, int height=1024, int rbackground=255, int gbackground=255, int bbackground=255)
 
const char * svgTrailer ()
 
const char * drawEllipse (int x, int y, int rx, int ry)
 
const char * moveTo (int x, int y)
 
const char * lineTo (int x, int y)
 
const char * line (int x1, int y1, int x2, int y2)
 
const char * text (int x, int y, const char *text, int alignment=ALIGN_LEFT)
 
const char * textInAxis (float x, float y, const char *text, int alignment)
 
const char * box (int x, int y, int w, int h)
 
const char * boxWithText (int x, int y, int w, int h, int fontsize, const char *xlabel, const char *ylabel, const char *rylabel)
 
const char * rect (int x, int y, int w, int h)
 
const char * xAxis (float start, float delta, float end, int draw=1)
 
const char * yAxis (float start, float delta, float end, int draw=1)
 
const char * xGrid ()
 
const char * yGrid ()
 
const char * rightYAxis (float start, float delta, float end, int draw=1)
 
const char * drawSymbol (int x, int y, int type)
 
const char * line (float *x, float *y, int n, int linestayle=LINESTYLE_NONE)
 
const char * setColor (int r, int g, int b)
 
const char * setFont (const char *family, int size, int weight, int italic)
 
const char * setWidth (int w)
 
const char * setLinestyle (const char *dasharray)
 
const char * comment (const char *text)
 
const char * svg_put (const char *text)
 
const char * svg_printf (const char *format,...)
 
const char * svg_d (int *x, int *y, int count)
 
const char * svg_points (int *x, int *y, int count)
 
int getFontsize ()
 
int getBoxX ()
 
int getBoxY ()
 
int getBoxW ()
 
int getBoxH ()
 

Public Attributes

int outputState
 

Private Member Functions

int perhapsSend (const char *text)
 
int tx (float x)
 
int ty (float y)
 

Private Attributes

int * sout
 
FILE * fout
 
rlSpawnpipe
 
rlString filename
 
rlString outputfilename
 
int idForPvbrowser
 
rlString svg
 
rlString svg2
 
rlString svg3
 
rlString fontstring
 
char stroke [16]
 
int width
 
rlString dasharray
 
rlString lineoptions
 
rlString textoptions
 
int xold
 
int yold
 
float xmin
 
float dx
 
float xmax
 
float ymin
 
float dy
 
float ymax
 
int boxx
 
int boxy
 
int boxw
 
int boxh
 
int fontsize
 
int sr
 
char floatFormat [80]
 

Detailed Description

class for drawing xy-graphics and any svg graphics either on the client or on the server.
SVG (Tiny) is a flexible and powerfull graphics format.
  • It can be rendered on a pvbrowser DrawWidget on the client, where the user will also be able to interact with the SVG (example: clicking on named objects within the SVG)
  • It can be rendered into another format by SVG converters on the server and/or the client
  • It can be used to implement scalable user interfaces especially when using on mobile devices
rlSvgVdi brings some conveniance functions to draw xy-graphics with SVG and 
some general SVG interface functions, that produce SVG content directly.
The Output might be send to File/Socket/stdout or simply collected as a rlString with all the generated SVG.
See example within pvbaddon/demos/rlsvgvdi
HINT 1: Use rlSpawn and the rlsvgcat utility to read static SVG templates and insert the content generated by rlSvgVdi dynamically into the output stream.
        You might use comment strings within the SVG for controlling the filter pipeline.
HINT 2: Use this class for the purpose of generating reports in pdf
HINT 3: Use SVG converters with a commandline interface to convert SVG to png, jpg, pdf ...
        Examples: rsvg, imagemagick
        https://wiki.gnome.org/action/show/Projects/LibRsvg
        http://imagemagick.org/script/index.php
 

Definition at line 79 of file rlsvgvdi.h.

Constructor & Destructor Documentation

◆ rlSvgVdi()

rlSvgVdi::rlSvgVdi ( )

Definition at line 40 of file rlsvgvdi.cpp.

41 {
42  sout = NULL;
43  fout = NULL;
44  pipe = NULL;
45  idForPvbrowser = 0;
46  outputState = 0;
47  fontsize = 10;
48  fontstring.printf("font-family=\"%s\" font-weight=\"%s\" font-size=\"%d\"", "Times", "normal", fontsize);
49  strcpy(stroke,"#000000"); // black
50  lineoptions.printf("stroke=\"%s\"", stroke);
51  textoptions.printf("stroke=\"%s\" %s", stroke, fontstring.text());
52  strcpy(floatFormat,"%.2f");
53  dx = dy = 1.0f;
54  sr = 3;
55  boxx = boxy = boxw = boxh = 0;
56  xmin = 0.0f;
57  xmax = 100.0f;
58  ymin = 0.0f;
59  ymax = 100.0f;
60  width = 1;
61  xold = yold = 0;
62 }
int xold
Definition: rlsvgvdi.h:135
int outputState
Definition: rlsvgvdi.h:116
float ymin
Definition: rlsvgvdi.h:137
rlString fontstring
Definition: rlsvgvdi.h:129
rlString lineoptions
Definition: rlsvgvdi.h:133
float dy
Definition: rlsvgvdi.h:137
int idForPvbrowser
Definition: rlsvgvdi.h:128
rlSpawn * pipe
Definition: rlsvgvdi.h:126
float ymax
Definition: rlsvgvdi.h:137
int yold
Definition: rlsvgvdi.h:135
char * text()
Definition: rlstring.cpp:126
int * sout
Definition: rlsvgvdi.h:124
float xmin
Definition: rlsvgvdi.h:136
int boxy
Definition: rlsvgvdi.h:140
int sr
Definition: rlsvgvdi.h:142
int width
Definition: rlsvgvdi.h:131
FILE * fout
Definition: rlsvgvdi.h:125
int boxw
Definition: rlsvgvdi.h:140
int printf(const char *format,...)
Definition: rlstring.cpp:145
char floatFormat[80]
Definition: rlsvgvdi.h:143
int fontsize
Definition: rlsvgvdi.h:141
int boxh
Definition: rlsvgvdi.h:140
char stroke[16]
Definition: rlsvgvdi.h:130
float xmax
Definition: rlsvgvdi.h:136
rlString textoptions
Definition: rlsvgvdi.h:133
float dx
Definition: rlsvgvdi.h:136
int boxx
Definition: rlsvgvdi.h:140

◆ ~rlSvgVdi()

rlSvgVdi::~rlSvgVdi ( )

Definition at line 64 of file rlsvgvdi.cpp.

65 {
66  endOutput();
67 }
int endOutput()
Definition: rlsvgvdi.cpp:163

Member Function Documentation

◆ box()

const char * rlSvgVdi::box ( int  x,
int  y,
int  w,
int  h 
)

Definition at line 354 of file rlsvgvdi.cpp.

355 {
356  boxx = x;
357  boxy = y;
358  boxw = w;
359  boxh = h;
360  svg2 = moveTo(x ,y );
361  svg2 += lineTo(x+w,y );
362  svg2 += lineTo(x+w,y+h);
363  svg2 += lineTo(x ,y+h);
364  svg2 += lineTo(x ,y );
365  return svg2.text();
366 }
const char * moveTo(int x, int y)
Definition: rlsvgvdi.cpp:280
const char * lineTo(int x, int y)
Definition: rlsvgvdi.cpp:287
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
int boxy
Definition: rlsvgvdi.h:140
int boxw
Definition: rlsvgvdi.h:140
int boxh
Definition: rlsvgvdi.h:140
int boxx
Definition: rlsvgvdi.h:140

◆ boxWithText()

const char * rlSvgVdi::boxWithText ( int  x,
int  y,
int  w,
int  h,
int  fontsize,
const char *  xlabel,
const char *  ylabel,
const char *  rylabel 
)

Definition at line 368 of file rlsvgvdi.cpp.

369 {
370  svg3 = box(x,y,w,h);
371  if(xlabel != NULL) svg3 += text(x+w/2,y+h+fontsize*3,xlabel,ALIGN_CENTER);
372  if(ylabel != NULL) svg3 += text(x-fontsize*5,y+h/2,ylabel,ALIGN_VERT_CENTER);
373  if(rylabel != NULL) svg3 += text(x+w+fontsize*5,y+h/2,rylabel,ALIGN_VERT_CENTER);
374  return svg3.text();
375 }
const char * box(int x, int y, int w, int h)
Definition: rlsvgvdi.cpp:354
char * text()
Definition: rlstring.cpp:126
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330
int fontsize
Definition: rlsvgvdi.h:141
rlString svg3
Definition: rlsvgvdi.h:129

◆ comment()

const char * rlSvgVdi::comment ( const char *  text)

Definition at line 677 of file rlsvgvdi.cpp.

678 {
679  svg.printf("<!-- %s -->\n", text);
680  perhapsSend(svg.text());
681  return svg.text();
682 }
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330
int printf(const char *format,...)
Definition: rlstring.cpp:145

◆ drawEllipse()

const char * rlSvgVdi::drawEllipse ( int  x,
int  y,
int  rx,
int  ry 
)

Definition at line 273 of file rlsvgvdi.cpp.

274 {
275  svg.printf("<ellipse cx=\"%d\" cy=\"%d\" rx=\"%d\" ry=\"%d\" %s />\n", x, y, rx, ry, lineoptions.text());
276  perhapsSend(svg.text());
277  return svg.text();
278 }
rlString lineoptions
Definition: rlsvgvdi.h:133
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129
int printf(const char *format,...)
Definition: rlstring.cpp:145

◆ drawSymbol()

const char * rlSvgVdi::drawSymbol ( int  x,
int  y,
int  type 
)

Definition at line 536 of file rlsvgvdi.cpp.

537 {
538  //const char *cptr;
539  int xnew, ynew;
540  svg2 = "";
541  switch(type)
542  {
543  case LINESTYLE_CIRCLE:
545  svg2 += drawEllipse(x-sr,y-sr,sr,sr);
546  break;
547  case LINESTYLE_CROSS:
549  xold = x+sr;
550  yold = y-sr;
551  svg2 += line(x-sr,y+sr,xold,yold);
552  xold = x+sr;
553  yold = y+sr;
554  svg2 += line(x-sr,y-sr,xold,yold);
555  break;
556  case LINESTYLE_RECT:
558  xold = x+sr;
559  yold = y-sr;
560  svg2 += line(x-sr,y-sr,xold,yold);
561  xnew = x+sr;
562  ynew = y+sr;
563  svg2 += line(xold,yold,xnew,ynew);
564  xold = xnew;
565  yold = ynew;
566  xnew = x-sr;
567  ynew = y+sr;
568  svg2 += line(xold,yold,xnew,ynew);
569  xold = xnew;
570  yold = ynew;
571  xnew = x-sr;
572  ynew = y-sr;
573  svg2 += line(xold,yold,xnew,ynew);
574  xold = xnew;
575  yold = ynew;
576  break;
577  default:
578  break;
579  }
580  return svg2.text();
581 }
int xold
Definition: rlsvgvdi.h:135
const char * line(int x1, int y1, int x2, int y2)
Definition: rlsvgvdi.cpp:299
int yold
Definition: rlsvgvdi.h:135
const char * drawEllipse(int x, int y, int rx, int ry)
Definition: rlsvgvdi.cpp:273
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
int sr
Definition: rlsvgvdi.h:142

◆ endOutput()

int rlSvgVdi::endOutput ( )

Definition at line 163 of file rlsvgvdi.cpp.

164 {
165  if(sout != NULL && idForPvbrowser > 0)
166  {
167  char buf[80];
168  sprintf(buf,"\n<svgend></svgend>\n");
169  perhapsSend(buf);
170  sprintf(buf,"gbeginDraw(%d)\n", idForPvbrowser);
171  perhapsSend(buf);
172  sprintf(buf,"gupdateSVG(%d)\n", idForPvbrowser);
173  perhapsSend(buf);
174  sprintf(buf,"gendDraw\n");
175  perhapsSend(buf);
176  }
177  if(strlen(outputfilename.text()) == 0)
178  {
179  }
180  else
181  {
182  if(fout != NULL) fclose(fout);
183  fout = NULL;
184  }
185  if(pipe != NULL)
186  {
187  char buf[4];
188  buf[0] = EOF;
189  buf[1] = '\0';
190  pipe->writeString(buf);
191  pipe = NULL;
192  }
193  svg = "";
194  svg2 = "";
195  svg3 = "";
196  if(outputState < 0) return -1;
197  outputState = 0;
198  return 0;
199 }
int outputState
Definition: rlsvgvdi.h:116
int idForPvbrowser
Definition: rlsvgvdi.h:128
int writeString(const char *buf)
Definition: rlspawn.cpp:415
rlSpawn * pipe
Definition: rlsvgvdi.h:126
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
int * sout
Definition: rlsvgvdi.h:124
rlString svg
Definition: rlsvgvdi.h:129
FILE * fout
Definition: rlsvgvdi.h:125
rlString outputfilename
Definition: rlsvgvdi.h:127
rlString svg3
Definition: rlsvgvdi.h:129

◆ getBoxH()

int rlSvgVdi::getBoxH ( )

Definition at line 764 of file rlsvgvdi.cpp.

765 {
766  return boxh;
767 }
int boxh
Definition: rlsvgvdi.h:140

◆ getBoxW()

int rlSvgVdi::getBoxW ( )

Definition at line 759 of file rlsvgvdi.cpp.

760 {
761  return boxw;
762 }
int boxw
Definition: rlsvgvdi.h:140

◆ getBoxX()

int rlSvgVdi::getBoxX ( )

Definition at line 749 of file rlsvgvdi.cpp.

750 {
751  return boxx;
752 }
int boxx
Definition: rlsvgvdi.h:140

◆ getBoxY()

int rlSvgVdi::getBoxY ( )

Definition at line 754 of file rlsvgvdi.cpp.

755 {
756  return boxy;
757 }
int boxy
Definition: rlsvgvdi.h:140

◆ getFontsize()

int rlSvgVdi::getFontsize ( )

Definition at line 744 of file rlsvgvdi.cpp.

745 {
746  return fontsize;
747 }
int fontsize
Definition: rlsvgvdi.h:141

◆ line() [1/2]

const char * rlSvgVdi::line ( int  x1,
int  y1,
int  x2,
int  y2 
)

Definition at line 299 of file rlsvgvdi.cpp.

300 {
301  int xnew, ynew;
302  xold = x2;
303  yold = y2;
304  xnew = x1;
305  ynew = y1;
306  svg.printf("<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" %s />\n", xold, yold, xnew, ynew, lineoptions.text());
307  perhapsSend(svg.text());
308  return svg.text();
309 }
int xold
Definition: rlsvgvdi.h:135
rlString lineoptions
Definition: rlsvgvdi.h:133
int yold
Definition: rlsvgvdi.h:135
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129
int printf(const char *format,...)
Definition: rlstring.cpp:145

◆ line() [2/2]

const char * rlSvgVdi::line ( float *  x,
float *  y,
int  n,
int  linestayle = LINESTYLE_NONE 
)

Definition at line 583 of file rlsvgvdi.cpp.

584 {
585  char buf[80];
586  svg3 = "";
587  if(linestyle != LINESTYLE_CROSS_NO_LINE && linestyle != LINESTYLE_CIRCLE_NO_LINE &&linestyle != LINESTYLE_RECT_NO_LINE )
588  {
589  //svg3 = moveTo(tx(x[0]),ty(y[0]));
590  //for(int i=1; i<n; i++) svg3 += lineTo(tx(x[i]),ty(y[i]));
591  svg3 = "<polyline points=\"";
592  for(int i=0; i<n; i++)
593  {
594  sprintf(buf," %d,%d", tx(x[i]), ty(y[i]));
595  svg3 += buf;
596  }
597  svg3 += "\"\n";
598  svg3 += lineoptions.text();
599  svg3 += " fill=\"none\"/>\n";
600  perhapsSend(svg3.text());
601  }
602  if(linestyle != LINESTYLE_NONE)
603  {
604  for(int i=1; i<n; i++) svg3 += drawSymbol(tx(x[i]),ty(y[i]),linestyle);
605  }
606  return svg3.text();
607 }
rlString lineoptions
Definition: rlsvgvdi.h:133
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
int ty(float y)
Definition: rlsvgvdi.cpp:737
const char * drawSymbol(int x, int y, int type)
Definition: rlsvgvdi.cpp:536
int tx(float x)
Definition: rlsvgvdi.cpp:732
rlString svg3
Definition: rlsvgvdi.h:129

◆ lineTo()

const char * rlSvgVdi::lineTo ( int  x,
int  y 
)

Definition at line 287 of file rlsvgvdi.cpp.

288 {
289  int xnew, ynew;
290  xnew = x;
291  ynew = y;
292  svg.printf("<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" %s />\n", xold, yold, xnew, ynew, lineoptions.text());
293  xold = xnew;
294  yold = ynew;
295  perhapsSend(svg.text());
296  return svg.text();
297 }
int xold
Definition: rlsvgvdi.h:135
rlString lineoptions
Definition: rlsvgvdi.h:133
int yold
Definition: rlsvgvdi.h:135
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129
int printf(const char *format,...)
Definition: rlstring.cpp:145

◆ moveTo()

const char * rlSvgVdi::moveTo ( int  x,
int  y 
)

Definition at line 280 of file rlsvgvdi.cpp.

281 {
282  xold = x;
283  yold = y;
284  return "";
285 }
int xold
Definition: rlsvgvdi.h:135
int yold
Definition: rlsvgvdi.h:135

◆ perhapsSend()

int rlSvgVdi::perhapsSend ( const char *  text)
private

Definition at line 201 of file rlsvgvdi.cpp.

202 {
203  if(outputState <= 0) return -1;
204  if(sout != NULL)
205  {
206  int ret,bytes_left,first_byte;
207  const char *cbuf;
208  if(sout == NULL) return -1;
209  if(*sout == -1) return -1;
210  cbuf = text;
211  bytes_left = strlen(text);
212  first_byte = 0;
213 
214  while(bytes_left > 0)
215  {
216  ret = send(*sout,&cbuf[first_byte],bytes_left,MSG_NOSIGNAL);
217  if(ret <= 0)
218  {
219  //disconnect();
220  if(*sout != -1)
221  {
222 #ifdef RLWIN32
223  closesocket(*sout);
224 #else
225  close(*sout);
226 #endif
227  }
228  *sout = -1;
229  outputState = -1;
230  return -1;
231  }
232  bytes_left -= ret;
233  first_byte += ret;
234  }
235  }
236  else if(fout != NULL)
237  {
238  if(fputs(text, fout) < 0)
239  {
240  outputState = -1;
241  }
242  }
243  else if(pipe != NULL)
244  {
245  if(pipe->writeString(text) < 0)
246  {
247  outputState = -1;
248  }
249  }
250  else
251  {
252  outputState = 0;
253  }
254  return 0;
255 }
int outputState
Definition: rlsvgvdi.h:116
#define MSG_NOSIGNAL
Definition: rlsvgvdi.cpp:26
int writeString(const char *buf)
Definition: rlspawn.cpp:415
rlSpawn * pipe
Definition: rlsvgvdi.h:126
int * sout
Definition: rlsvgvdi.h:124
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330
FILE * fout
Definition: rlsvgvdi.h:125

◆ rect()

const char * rlSvgVdi::rect ( int  x,
int  y,
int  w,
int  h 
)

Definition at line 377 of file rlsvgvdi.cpp.

378 {
379  svg2 = moveTo(x ,y );
380  svg2 += lineTo(x+w ,y );
381  svg2 += lineTo(x+w ,y+h);
382  svg2 += lineTo(x ,y+h);
383  svg2 += lineTo(x ,y );
384  return svg2.text();
385 }
const char * moveTo(int x, int y)
Definition: rlsvgvdi.cpp:280
const char * lineTo(int x, int y)
Definition: rlsvgvdi.cpp:287
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129

◆ rightYAxis()

const char * rlSvgVdi::rightYAxis ( float  start,
float  delta,
float  end,
int  draw = 1 
)

Definition at line 493 of file rlsvgvdi.cpp.

494 {
495 float y;
496 int x;
497 char txt[80];
498 
499  ymin = start;
500  dy = delta;
501  ymax = end;
502  if(draw==0) return "";
503  x = boxx+boxw;
504  y = start;
505 
506  svg2 = "";
507  while(y <= end)
508  {
509  xold = x;
510  yold = ty(y);
511  svg2 += moveTo(xold, yold);
512  svg2 += lineTo(xold+8,yold);
513  //p.drawLine(x,ty(y),xold,yold);
514  sprintf(txt,floatFormat,y);
515  beautyval(txt);
516  svg2 += text(xold+10,yold,txt,ALIGN_LEFT);
517  y += delta;
518  }
519 
520  if(start < 0.0f && end > 0.0f)
521  {
522  int xnew, ynew;
523  xold = boxx+boxw;
524  yold = ty(0.0f);
525  xnew = boxx+boxw;
526  ynew = ty(0.0f);
527  svg2 += moveTo(xold,yold);
528  svg2 += lineTo(xnew,ynew);
529  //p.drawLine(xold,yold,xnew,ynew);
530  xold = xnew;
531  yold = ynew;
532  }
533  return svg2.text();
534 }
int xold
Definition: rlsvgvdi.h:135
float ymin
Definition: rlsvgvdi.h:137
const char * moveTo(int x, int y)
Definition: rlsvgvdi.cpp:280
const char * lineTo(int x, int y)
Definition: rlsvgvdi.cpp:287
float dy
Definition: rlsvgvdi.h:137
static int beautyval(char *text)
Definition: rlsvgvdi.cpp:387
float ymax
Definition: rlsvgvdi.h:137
int yold
Definition: rlsvgvdi.h:135
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
int ty(float y)
Definition: rlsvgvdi.cpp:737
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330
int boxw
Definition: rlsvgvdi.h:140
char floatFormat[80]
Definition: rlsvgvdi.h:143
int boxx
Definition: rlsvgvdi.h:140

◆ setColor()

const char * rlSvgVdi::setColor ( int  r,
int  g,
int  b 
)

Definition at line 609 of file rlsvgvdi.cpp.

610 {
611  sprintf(stroke,"#%02x%02x%02x", r, g, b);
612  lineoptions.printf("stroke=\"%s\"", stroke);
613  if(strlen(dasharray.text()) > 0)
614  {
615  lineoptions += " stroke-dasharray=\"";
617  lineoptions += "\"";
618  }
619  if(width != 1)
620  {
621  rlString buf;
622  buf.printf(" stroke-width=\"%d\"", width);
623  lineoptions += buf.text();
624  }
625  textoptions.printf("stroke=\"%s\" %s", stroke, fontstring.text());
626  return "";
627 }
rlString fontstring
Definition: rlsvgvdi.h:129
rlString lineoptions
Definition: rlsvgvdi.h:133
char * text()
Definition: rlstring.cpp:126
int width
Definition: rlsvgvdi.h:131
rlString dasharray
Definition: rlsvgvdi.h:132
int printf(const char *format,...)
Definition: rlstring.cpp:145
char stroke[16]
Definition: rlsvgvdi.h:130
rlString textoptions
Definition: rlsvgvdi.h:133

◆ setFont()

const char * rlSvgVdi::setFont ( const char *  family,
int  size,
int  weight,
int  italic 
)

Definition at line 629 of file rlsvgvdi.cpp.

630 {
631  fontsize = size;
632  if(weight == 1) fontstring.printf("font-family=\"%s\" font-weight=\"%s\" font-size=\"%d\"", family, "normal", size);
633  else fontstring.printf("font-family=\"%s\" font-weight=\"%s\" font-size=\"%d\"", family, "bold", size);
634  if(italic == 1) fontstring += " font-style=\"italic\"";
635  textoptions.printf("stroke=\"%s\" %s", stroke, fontstring.text());
636  return "";
637 }
rlString fontstring
Definition: rlsvgvdi.h:129
char * text()
Definition: rlstring.cpp:126
int printf(const char *format,...)
Definition: rlstring.cpp:145
int fontsize
Definition: rlsvgvdi.h:141
char stroke[16]
Definition: rlsvgvdi.h:130
rlString textoptions
Definition: rlsvgvdi.h:133

◆ setLinestyle()

const char * rlSvgVdi::setLinestyle ( const char *  dasharray)

Definition at line 658 of file rlsvgvdi.cpp.

659 {
660  dasharray = _dasharray;
661  lineoptions.printf("stroke=\"%s\"", stroke);
662  if(strlen(dasharray.text()) > 0)
663  {
664  lineoptions += " stroke-dasharray=\"";
666  lineoptions += "\"";
667  }
668  if(width != 1)
669  {
670  rlString buf;
671  buf.printf(" stroke-width=\"%d\"", width);
672  lineoptions += buf.text();
673  }
674  return "";
675 }
rlString lineoptions
Definition: rlsvgvdi.h:133
char * text()
Definition: rlstring.cpp:126
int width
Definition: rlsvgvdi.h:131
rlString dasharray
Definition: rlsvgvdi.h:132
int printf(const char *format,...)
Definition: rlstring.cpp:145
char stroke[16]
Definition: rlsvgvdi.h:130

◆ setOutput() [1/4]

int rlSvgVdi::setOutput ( int *  socket_out,
int  idForPvbrowser = 0 
)

Definition at line 69 of file rlsvgvdi.cpp.

70 {
71  pipe = NULL;
72  sout = _socket_out;
73  if(*sout < 0)
74  {
75  outputState = -1;
76  return -1;
77  }
78  if(strlen(outputfilename.text()) == 0)
79  {
80  }
81  else
82  {
83  if(fout != NULL) fclose(fout);
84  }
85  fout = NULL;
86  outputfilename = "";
87  idForPvbrowser = _idForPvbrowser;
88  outputState = 1;
89  if(idForPvbrowser > 0)
90  {
91  char buf[80];
92  sprintf(buf,"gsvgRead(%d)\n", idForPvbrowser);
93  perhapsSend(buf);
94  }
95  return 0;
96 }
int outputState
Definition: rlsvgvdi.h:116
int idForPvbrowser
Definition: rlsvgvdi.h:128
rlSpawn * pipe
Definition: rlsvgvdi.h:126
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
int * sout
Definition: rlsvgvdi.h:124
FILE * fout
Definition: rlsvgvdi.h:125
rlString outputfilename
Definition: rlsvgvdi.h:127

◆ setOutput() [2/4]

int rlSvgVdi::setOutput ( FILE *  fout)

Definition at line 98 of file rlsvgvdi.cpp.

99 {
100  pipe = NULL;
101  sout = NULL;
102  if(strlen(outputfilename.text()) == 0)
103  {
104  }
105  else
106  {
107  if(fout != NULL) fclose(fout);
108  }
109  fout = _fout;
110  if(fout == NULL)
111  {
112  outputState = -1;
113  return -1;
114  }
115  outputfilename = "";
116  outputState = 1;
117  return 0;
118 }
int outputState
Definition: rlsvgvdi.h:116
rlSpawn * pipe
Definition: rlsvgvdi.h:126
char * text()
Definition: rlstring.cpp:126
int * sout
Definition: rlsvgvdi.h:124
FILE * fout
Definition: rlsvgvdi.h:125
rlString outputfilename
Definition: rlsvgvdi.h:127

◆ setOutput() [3/4]

int rlSvgVdi::setOutput ( const char *  outputfilename)

Definition at line 120 of file rlsvgvdi.cpp.

121 {
122  pipe = NULL;
123  sout = NULL;
124  if(strlen(outputfilename.text()) == 0)
125  {
126  }
127  else
128  {
129  if(fout != NULL) fclose(fout);
130  }
131  outputfilename = _outputfilename;
132  fout = fopen(_outputfilename,"w");
133  if(fout == NULL)
134  {
135  outputState = -1;
136  return -1;
137  }
138  outputState = 1;
139  return 0;
140 }
int outputState
Definition: rlsvgvdi.h:116
rlSpawn * pipe
Definition: rlsvgvdi.h:126
char * text()
Definition: rlstring.cpp:126
int * sout
Definition: rlsvgvdi.h:124
FILE * fout
Definition: rlsvgvdi.h:125
rlString outputfilename
Definition: rlsvgvdi.h:127

◆ setOutput() [4/4]

int rlSvgVdi::setOutput ( rlSpawn pipe)

Definition at line 142 of file rlsvgvdi.cpp.

143 {
144  pipe = _pipe;
145  sout = NULL;
146  if(strlen(outputfilename.text()) == 0)
147  {
148  }
149  else
150  {
151  if(fout != NULL) fclose(fout);
152  }
153  outputfilename = "";
154  if(pipe == NULL)
155  {
156  outputState = -1;
157  return -1;
158  }
159  outputState = 1;
160  return 0;
161 }
int outputState
Definition: rlsvgvdi.h:116
rlSpawn * pipe
Definition: rlsvgvdi.h:126
char * text()
Definition: rlstring.cpp:126
int * sout
Definition: rlsvgvdi.h:124
FILE * fout
Definition: rlsvgvdi.h:125
rlString outputfilename
Definition: rlsvgvdi.h:127

◆ setWidth()

const char * rlSvgVdi::setWidth ( int  w)

Definition at line 639 of file rlsvgvdi.cpp.

640 {
641  width = w;
642  lineoptions.printf("stroke=\"%s\"", stroke);
643  if(strlen(dasharray.text()) > 0)
644  {
645  lineoptions += " stroke-dasharray=\"";
647  lineoptions += "\"";
648  }
649  if(width != 1)
650  {
651  rlString buf;
652  buf.printf(" stroke-width=\"%d\"", width);
653  lineoptions += buf.text();
654  }
655  return "";
656 }
rlString lineoptions
Definition: rlsvgvdi.h:133
char * text()
Definition: rlstring.cpp:126
int width
Definition: rlsvgvdi.h:131
rlString dasharray
Definition: rlsvgvdi.h:132
int printf(const char *format,...)
Definition: rlstring.cpp:145
char stroke[16]
Definition: rlsvgvdi.h:130

◆ svg_d()

const char * rlSvgVdi::svg_d ( int *  x,
int *  y,
int  count 
)

Definition at line 702 of file rlsvgvdi.cpp.

703 {
704  char buf[80];
705  svg = "d=\"";
706  sprintf(buf,"M %d %d", x[0], y[0]);
707  svg += buf;
708  for(int i=1; i<count; i++)
709  {
710  sprintf(buf," L %d %d", x[i], y[i]);
711  svg += buf;
712  }
713  svg += "\"\n";
714  perhapsSend(svg.text());
715  return svg.text();
716 }
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129

◆ svg_points()

const char * rlSvgVdi::svg_points ( int *  x,
int *  y,
int  count 
)

Definition at line 718 of file rlsvgvdi.cpp.

719 {
720  char buf[80];
721  svg = "points=\"";
722  for(int i=0; i<count; i++)
723  {
724  sprintf(buf," %d,%d", x[i], y[i]);
725  svg += buf;
726  }
727  svg += "\"\n";
728  perhapsSend(svg.text());
729  return svg.text();
730 }
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129

◆ svg_printf()

const char * rlSvgVdi::svg_printf ( const char *  format,
  ... 
)

Definition at line 690 of file rlsvgvdi.cpp.

691 {
692  int ret;
693  char message[rl_PRINTF_LENGTH]; // should be big enough
694  va_list ap;
695  va_start(ap,format);
696  ret = rlvsnprintf(message, rl_PRINTF_LENGTH - 1, format, ap);
697  va_end(ap);
698  if(ret < 0) return "";
699  return svg_put(message);
700 }
#define rl_PRINTF_LENGTH
Definition: rldefine.h:71
int rlvsnprintf(char *text, int len, const char *format, va_list ap)
Definition: rlcutil.cpp:197
const char * svg_put(const char *text)
Definition: rlsvgvdi.cpp:684

◆ svg_put()

const char * rlSvgVdi::svg_put ( const char *  text)

Definition at line 684 of file rlsvgvdi.cpp.

685 {
686  perhapsSend(text);
687  return text;
688 }
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330

◆ svgHeader()

const char * rlSvgVdi::svgHeader ( int  width = 1280,
int  height = 1024,
int  rbackground = 255,
int  gbackground = 255,
int  bbackground = 255 
)

Definition at line 257 of file rlsvgvdi.cpp.

258 {
259  svg.printf("<svg width=\"%dpx\" height=\"%dpx\" viewBox=\"0 0 %d %d\" style=\"background: rgb(%d,%d,%d)\"\n", width, height, width, height, rbackground, gbackground, bbackground);
260  svg += " xmlns=\"http://www.w3.org/2000/svg\" version=\"1.2\" baseProfile=\"tiny\">\n";
261  svg += " <desc>svgvdi for smf files</desc>\n";
262  perhapsSend(svg.text());
263  return svg.text();
264 }
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129
int width
Definition: rlsvgvdi.h:131
int printf(const char *format,...)
Definition: rlstring.cpp:145

◆ svgTrailer()

const char * rlSvgVdi::svgTrailer ( )

Definition at line 266 of file rlsvgvdi.cpp.

267 {
268  svg = "</svg>\n";
269  perhapsSend(svg.text());
270  return svg.text();
271 }
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129

◆ text()

const char * rlSvgVdi::text ( int  x,
int  y,
const char *  text,
int  alignment = ALIGN_LEFT 
)

Definition at line 330 of file rlsvgvdi.cpp.

331 {
332  switch(alignment)
333  {
334  case ALIGN_LEFT: // |example
335  svg.printf("<text x=\"%d\" y=\"%d\" %s>%s</text>\n", x, y, textoptions.text(), txt);
336  break;
337  case ALIGN_CENTER: // exa|mple
338  svg.printf("<text x=\"%d\" y=\"%d\" text-anchor=\"middle\" %s>%s</text>\n", x, y, textoptions.text(), txt);
339  break;
340  case ALIGN_RIGHT: // example|
341  svg.printf("<text x=\"%d\" y=\"%d\" text-anchor=\"end\" %s>%s</text>\n", x, y, textoptions.text(), txt);
342  break;
343  case ALIGN_VERT_CENTER:
344  svg.printf("<g transform=\"translate(%d,%d)\" >\n <g transform=\"rotate(-90)\" >\n <text x=\"0\" y=\"0\" text-anchor=\"middle\" %s>%s</text>\n </g>\n</g>\n", x, y, textoptions.text(), txt);
345  break;
346  default:
347  svg.printf("<text x=\"%d\" y=\"%d\" %s>%s/text>\n", x, y, textoptions.text(), txt);
348  break;
349  }
350  perhapsSend(svg.text());
351  return svg.text();
352 }
int perhapsSend(const char *text)
Definition: rlsvgvdi.cpp:201
char * text()
Definition: rlstring.cpp:126
rlString svg
Definition: rlsvgvdi.h:129
int printf(const char *format,...)
Definition: rlstring.cpp:145
rlString textoptions
Definition: rlsvgvdi.h:133

◆ textInAxis()

const char * rlSvgVdi::textInAxis ( float  x,
float  y,
const char *  text,
int  alignment 
)

Definition at line 311 of file rlsvgvdi.cpp.

312 {
313  float dy;
314 /*
315  ymax-ymin dy
316  ----------- = ----------
317  boxh fontsize/2
318 */
319  if(alignment == ALIGN_CENTER)
320  {
321  dy = ((ymax-ymin) * (fontsize/2) ) / (boxh);
322  return text(tx(x), ty(y+dy), txt, alignment);
323  }
324  else
325  {
326  return text(tx(x), ty(y), txt, alignment);
327  }
328 }
float ymin
Definition: rlsvgvdi.h:137
float dy
Definition: rlsvgvdi.h:137
float ymax
Definition: rlsvgvdi.h:137
int ty(float y)
Definition: rlsvgvdi.cpp:737
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330
int fontsize
Definition: rlsvgvdi.h:141
int tx(float x)
Definition: rlsvgvdi.cpp:732
int boxh
Definition: rlsvgvdi.h:140

◆ tx()

int rlSvgVdi::tx ( float  x)
private

Definition at line 732 of file rlsvgvdi.cpp.

733 {
734  return (int)(boxx + (((x-xmin)*boxw)/(xmax-xmin))); // x i
735 } // xmax-xmin boxw
float xmin
Definition: rlsvgvdi.h:136
int boxw
Definition: rlsvgvdi.h:140
float xmax
Definition: rlsvgvdi.h:136
int boxx
Definition: rlsvgvdi.h:140

◆ ty()

int rlSvgVdi::ty ( float  y)
private

Definition at line 737 of file rlsvgvdi.cpp.

738 {
739  int i0;
740  i0 = (int)((ymin * boxh)/(ymax-ymin));
741  return i0 + (int)(boxy+boxh-((y*boxh)/(ymax-ymin))); // y i ymin i0
742 } // ymax-ymin boxh ymax-ymin boxh
float ymin
Definition: rlsvgvdi.h:137
float ymax
Definition: rlsvgvdi.h:137
int boxy
Definition: rlsvgvdi.h:140
int boxh
Definition: rlsvgvdi.h:140

◆ xAxis()

const char * rlSvgVdi::xAxis ( float  start,
float  delta,
float  end,
int  draw = 1 
)

Definition at line 427 of file rlsvgvdi.cpp.

428 {
429  float x;
430  int y;
431  char txt[80];
432 
433  svg2 = "";
434  xmin = start;
435  dx = delta;
436  xmax = end;
437  if(draw==0) return "";
438 
439  x = start;
440  y = boxy + boxh;
441 
442  while(x <= end)
443  {
444  svg2 += moveTo(tx(x),y);
445  svg2 += lineTo(tx(x),y+8);
446  sprintf(txt,floatFormat,x);
447  beautyval(txt);
448  svg2 += text(tx(x),y+((3*fontsize)/2),txt,ALIGN_CENTER);
449  x += delta;
450  }
451 
452  if(start < 0.0f && end > 0.0f)
453  {
454  svg2 += moveTo(tx(0.0f),boxy);
455  svg2 += lineTo(tx(0.0f),boxy+boxh);
456  }
457  return svg2.text();
458 }
const char * moveTo(int x, int y)
Definition: rlsvgvdi.cpp:280
const char * lineTo(int x, int y)
Definition: rlsvgvdi.cpp:287
static int beautyval(char *text)
Definition: rlsvgvdi.cpp:387
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
float xmin
Definition: rlsvgvdi.h:136
int boxy
Definition: rlsvgvdi.h:140
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330
char floatFormat[80]
Definition: rlsvgvdi.h:143
int fontsize
Definition: rlsvgvdi.h:141
int tx(float x)
Definition: rlsvgvdi.cpp:732
int boxh
Definition: rlsvgvdi.h:140
float xmax
Definition: rlsvgvdi.h:136
float dx
Definition: rlsvgvdi.h:136

◆ xGrid()

const char * rlSvgVdi::xGrid ( )

Definition at line 405 of file rlsvgvdi.cpp.

406 {
407  svg2 = "";
408  for(float x=(xmin+dx); x<xmax; x+=dx)
409  {
410  svg2 += moveTo(tx(x),boxy);
411  svg2 += lineTo(tx(x),boxy+boxh);
412  }
413  return svg2.text();
414 }
const char * moveTo(int x, int y)
Definition: rlsvgvdi.cpp:280
const char * lineTo(int x, int y)
Definition: rlsvgvdi.cpp:287
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
float xmin
Definition: rlsvgvdi.h:136
int boxy
Definition: rlsvgvdi.h:140
int tx(float x)
Definition: rlsvgvdi.cpp:732
int boxh
Definition: rlsvgvdi.h:140
float xmax
Definition: rlsvgvdi.h:136
float dx
Definition: rlsvgvdi.h:136

◆ yAxis()

const char * rlSvgVdi::yAxis ( float  start,
float  delta,
float  end,
int  draw = 1 
)

Definition at line 460 of file rlsvgvdi.cpp.

461 {
462 float y;
463 int x;
464 char txt[80];
465 
466  svg2 = "";
467  ymin = start;
468  dy = delta;
469  ymax = end;
470  if(draw==0) return "";
471  x = boxx;
472  y = start;
473 
474  while(y <= end)
475  {
476  svg2 += moveTo(x,ty(y));
477  svg2 += lineTo(x-8,ty(y));
478  sprintf(txt,floatFormat,y);
479  beautyval(txt);
480  svg2 += text(x-10,ty(y),txt,ALIGN_RIGHT);
481  y += delta;
482  }
483 
484 
485  if(start < 0.0f && end > 0.0f)
486  {
487  svg2 += moveTo(boxx,ty(0.0f));
488  svg2 += lineTo(boxx+boxw,ty(0.0f));
489  }
490  return svg2.text();
491 }
float ymin
Definition: rlsvgvdi.h:137
const char * moveTo(int x, int y)
Definition: rlsvgvdi.cpp:280
const char * lineTo(int x, int y)
Definition: rlsvgvdi.cpp:287
float dy
Definition: rlsvgvdi.h:137
static int beautyval(char *text)
Definition: rlsvgvdi.cpp:387
float ymax
Definition: rlsvgvdi.h:137
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
int ty(float y)
Definition: rlsvgvdi.cpp:737
const char * text(int x, int y, const char *text, int alignment=ALIGN_LEFT)
Definition: rlsvgvdi.cpp:330
int boxw
Definition: rlsvgvdi.h:140
char floatFormat[80]
Definition: rlsvgvdi.h:143
int boxx
Definition: rlsvgvdi.h:140

◆ yGrid()

const char * rlSvgVdi::yGrid ( )

Definition at line 416 of file rlsvgvdi.cpp.

417 {
418  svg2 = "";
419  for(float y=(ymin+dy); y<=(ymax-dy); y+=dy)
420  {
421  svg2 += moveTo(boxx,ty(y));
422  svg2 += lineTo(boxx+boxw, ty(y));
423  }
424  return svg2.text();
425 }
float ymin
Definition: rlsvgvdi.h:137
const char * moveTo(int x, int y)
Definition: rlsvgvdi.cpp:280
const char * lineTo(int x, int y)
Definition: rlsvgvdi.cpp:287
float dy
Definition: rlsvgvdi.h:137
float ymax
Definition: rlsvgvdi.h:137
char * text()
Definition: rlstring.cpp:126
rlString svg2
Definition: rlsvgvdi.h:129
int ty(float y)
Definition: rlsvgvdi.cpp:737
int boxw
Definition: rlsvgvdi.h:140
int boxx
Definition: rlsvgvdi.h:140

Member Data Documentation

◆ boxh

int rlSvgVdi::boxh
private

Definition at line 140 of file rlsvgvdi.h.

◆ boxw

int rlSvgVdi::boxw
private

Definition at line 140 of file rlsvgvdi.h.

◆ boxx

int rlSvgVdi::boxx
private

Definition at line 140 of file rlsvgvdi.h.

◆ boxy

int rlSvgVdi::boxy
private

Definition at line 140 of file rlsvgvdi.h.

◆ dasharray

rlString rlSvgVdi::dasharray
private

Definition at line 132 of file rlsvgvdi.h.

◆ dx

float rlSvgVdi::dx
private

Definition at line 136 of file rlsvgvdi.h.

◆ dy

float rlSvgVdi::dy
private

Definition at line 137 of file rlsvgvdi.h.

◆ filename

rlString rlSvgVdi::filename
private

Definition at line 127 of file rlsvgvdi.h.

◆ floatFormat

char rlSvgVdi::floatFormat[80]
private

Definition at line 143 of file rlsvgvdi.h.

◆ fontsize

int rlSvgVdi::fontsize
private

Definition at line 141 of file rlsvgvdi.h.

◆ fontstring

rlString rlSvgVdi::fontstring
private

Definition at line 129 of file rlsvgvdi.h.

◆ fout

FILE* rlSvgVdi::fout
private

Definition at line 125 of file rlsvgvdi.h.

◆ idForPvbrowser

int rlSvgVdi::idForPvbrowser
private

Definition at line 128 of file rlsvgvdi.h.

◆ lineoptions

rlString rlSvgVdi::lineoptions
private

Definition at line 133 of file rlsvgvdi.h.

◆ outputfilename

rlString rlSvgVdi::outputfilename
private

Definition at line 127 of file rlsvgvdi.h.

◆ outputState

int rlSvgVdi::outputState

Definition at line 116 of file rlsvgvdi.h.

◆ pipe

rlSpawn* rlSvgVdi::pipe
private

Definition at line 126 of file rlsvgvdi.h.

◆ sout

int* rlSvgVdi::sout
private

Definition at line 124 of file rlsvgvdi.h.

◆ sr

int rlSvgVdi::sr
private

Definition at line 142 of file rlsvgvdi.h.

◆ stroke

char rlSvgVdi::stroke[16]
private

Definition at line 130 of file rlsvgvdi.h.

◆ svg

rlString rlSvgVdi::svg
private

Definition at line 129 of file rlsvgvdi.h.

◆ svg2

rlString rlSvgVdi::svg2
private

Definition at line 129 of file rlsvgvdi.h.

◆ svg3

rlString rlSvgVdi::svg3
private

Definition at line 129 of file rlsvgvdi.h.

◆ textoptions

rlString rlSvgVdi::textoptions
private

Definition at line 133 of file rlsvgvdi.h.

◆ width

int rlSvgVdi::width
private

Definition at line 131 of file rlsvgvdi.h.

◆ xmax

float rlSvgVdi::xmax
private

Definition at line 136 of file rlsvgvdi.h.

◆ xmin

float rlSvgVdi::xmin
private

Definition at line 136 of file rlsvgvdi.h.

◆ xold

int rlSvgVdi::xold
private

Definition at line 135 of file rlsvgvdi.h.

◆ ymax

float rlSvgVdi::ymax
private

Definition at line 137 of file rlsvgvdi.h.

◆ ymin

float rlSvgVdi::ymin
private

Definition at line 137 of file rlsvgvdi.h.

◆ yold

int rlSvgVdi::yold
private

Definition at line 135 of file rlsvgvdi.h.


The documentation for this class was generated from the following files: