jdsgimac.sas
Java source, jar and examples can be found here
%macro jdsgimac; %* place this file in your sasautos path; %* or %include it prior to using the jDSGI macros; %mend; /* * Richard A. DeVenezia * June 1, 2004 * Copyright 2004 * * jDSGI macros */ /* * JavaObj array passing has a memory bug, thus until 9.2, * the auxiallary macros setArray and getArray should be * used to ensure the SAS session does not encounter a * Write Access Violation (WAV) */
%macro canvas (javaobj, width, height, color);
%global jdsgi;
%let jdsgi = &javaobj;
declare javaobj &jdsgi ('jdsgi/Graphics');
declare javaobj &jdsgi._x ('jdsgi/DoubleArray');
declare javaobj &jdsgi._y ('jdsgi/DoubleArray');
&jdsgi..exceptionDescribe(1);
&jdsgi..callVoidMethod ('setXData', &jdsgi._x);
&jdsgi..callVoidMethod ('setYData', &jdsgi._Y);
%createBuffer (&width, &height);
%setColor (&color);
%fillRect (0,0,&width,&height);
%setColor (0);
%mend;
%macro canvas_delete(); &jdsgi..delete(); &jdsgi._x.delete(); &jdsgi._y.delete(); %symdel jdsgi; %mend;
%macro setArray(sasArray, doubleArray);
&doubleArray..callVoidMethod ('setLength', dim(&sasArray));
do _&sysindex = 1 to dim(&sasArray);
&doubleArray..callVoidMethod('set', _&sysindex-1, &sasArray[_&sysindex]);
end;
%mend;
%macro getArray(sasArray, doubleArray);
&doubleArray..callIntMethod ('getLength', l_&sysindex);
drop l_&sysindex;
do _&sysindex = 1 to min (dim(&sasArray), l_&sysindex);
&doubleArray..callDoubleMethod('get', _&sysindex-1, &sasArray[_&sysindex]);
end;
%mend;
%macro createBuffer (width, height); &jdsgi..callVoidMethod ('createBuffer', &width, &height) %mend;
%macro setRenderingHint (key, value); &jdsgi..callVoidMethod ('setRenderingHint', &key, &value) %mend;
%macro setBackground (color); &jdsgi..callVoidMethod ('setBackground', &color) %mend;
%macro setBackgroundRGB (r,g,b); &jdsgi..callVoidMethod ('setBackground', &r,&g,&b) %mend;
%macro getBackground (argb); &jdsgi..callIntMethod ('getBackground', &argb) %mend;
%macro getColor (argb); &jdsgi..callIntMethod ('getColor', &argb) %mend;
%macro setColor (color); &jdsgi..callVoidMethod ('setColor', &color) %mend;
%macro setColorA (color); &jdsgi..callVoidMethod ('setColor', &color, 1) %mend;
%macro setColorRGB (r,g,b); &jdsgi..callVoidMethod ('setColor', &r,&g,&b) %mend;
%macro setColorHSB (h,s,b); &jdsgi..callVoidMethod ('setColorHSB', &h,&s,&b) %mend;
%macro setColorDarker (); &jdsgi..callVoidMethod ('setColorDarker') %mend;
%macro setColorBrighter (); &jdsgi..callVoidMethod ('setColorBrighter') %mend;
%macro translate (x,y); &jdsgi..callVoidMethod ('translate', &x, &y) %mend;
%macro resetFont (); &jdsgi..callVoidMethod ('resetFont') %mend;
%macro setFont (name,style,size); &jdsgi..callVoidMethod ('setFont', &name, &style, &size) %mend;
%macro setFontName (name); &jdsgi..callVoidMethod ('setFontName', &name) %mend;
%macro getFontName (name); &jdsgi..callStringMethod ('getFontName', &name) %mend;
%macro setFontSize (size); &jdsgi..callVoidMethod ('setFontSize', &size) %mend;
%macro getFontSize (size); &jdsgi..callIntMethod ('getFontSize', &size) %mend;
%macro setFontStyle (style); &jdsgi..callVoidMethod ('setFontStyle', &style) %mend;
%macro getFontStyle (style); &jdsgi..callIntMethod ('getFontStyle', &style) %mend;
%let FONT_PLAIN = 0;
%let FONT_BOLD = 1;
%let FONT_ITALIC = 2;
%macro drawString (string,x,y); &jdsgi..callVoidMethod ('drawString', &string, &x, &y) %mend;
%macro getStringWidth (text,width); &jdsgi..callIntMethod ('getStringWidth', &text, &width) %mend;
%macro drawLine (x1,y1,x2,y2); &jdsgi..callvoidMethod ('drawLine', &x1,&y1, &x2,&y2) %mend;
%macro draw3DRect (x,y,width,height,raised); &jdsgi..callVoidMethod ('draw3DRect', &x, &y, &width, &height,&raised) %mend;
%macro fill3DRect (x,y,width,height,raised); &jdsgi..callVoidMethod ('fill3DRect', &x, &y, &width, &height,&raised) %mend;
%macro drawRect (x,y,width,height); &jdsgi..callVoidMethod ('drawRect', &x, &y, &width, &height) %mend;
%macro clearRect (x,y,width,height); &jdsgi..callVoidMethod ('clearRect', &x, &y, &width, &height) %mend;
%macro fillRect (x,y,width,height); &jdsgi..callVoidMethod ('fillRect', &x, &y, &width, &height) %mend;
%macro drawRoundRect (x,y,width,height,arcWidth,arcHeight); &jdsgi..callVoidMethod ('drawRoundRect', &x, &y, &width, &height, &arcWidth, &arcHeight) %mend;
%macro fillRoundRect (x,y,width,height,arcWidth,arcHeight); &jdsgi..callVoidMethod ('fillRoundRect', &x, &y, &width, &height, &arcWidth, &arcHeight) %mend;
%macro drawArc (x,y,width,height,startAngle,arcAngle); &jdsgi..callVoidMethod ('drawArc', &x, &y, &width, &height, &startAngle, &arcAngle) %mend;
%macro fillArc (x,y,width,height,startAngle,arcAngle); &jdsgi..callVoidMethod ('fillArc', &x, &y, &width, &height, &startAngle, &arcAngle) %mend;
%macro drawOval (x,y,width,height); &jdsgi..callVoidMethod ('drawOval', &x, &y, &width, &height) %mend;
%macro fillOval (x,y,width,height); &jdsgi..callVoidMethod ('fillOval', &x, &y, &width, &height) %mend;
%macro tsetFillMode (mode); &jdsgi..callVoidMethod ('tsetFillMode', &mode) %mend;
%macro resetPen (); &jdsgi..callVoidMethod ('resetPen') %mend;
%macro resetPenDash (); &jdsgi..callVoidMethod ('resetPenDash') %mend;
%macro setPenWidth (w); &jdsgi..callVoidMethod ('setPenWidth',&w) %mend;
%macro setPenEndCap (p); &jdsgi..callVoidMethod ('setPenEndCap',&p) %mend;
%macro setPenLineJoin (p); &jdsgi..callVoidMethod ('setPenLineJoin',&p) %mend;
%macro setPenMiterLimit (p); &jdsgi..callVoidMethod ('setPenMiterLimit',&p) %mend;
%macro setPenDashPhase (p); &jdsgi..callVoidMethod ('setPenDashPhase',&p) %mend;
%macro setPenDash2 (p1,p2); &jdsgi..callVoidMethod ('setPenDash2',&p1,&p2) %mend;
%macro setPenDash (sasArray); %local javaArray;
%let javaArray = _&sysindex;
declare javaobj &javaArray ("jdsgi/DoubleArray");
%setArray (&sasArray, &javaArray);
&jdsgi..callVoidMethod ('setPenDash', &javaArray);
/* &jdsgi..callVoidMethod ('setPenDash', &xpoints, &ypoints) */
&javaArray..delete()
%mend;
%let CAP_BUTT = 0;
%let CAP_ROUND = 1;
%let CAP_SQUARE = 2;
%let JOIN_MITER = 0;
%let JOIN_ROUND = 1;
%let JOIN_BEVEL = 2;
%macro drawPolygon (xpoints, ypoints); %setArray (&xpoints, &jdsgi._x)
%setArray (&ypoints, &jdsgi._y)
&jdsgi..callVoidMethod ('drawPolygon')
/* &jdsgi..callVoidMethod ('drawPolygon', &xpoints, &ypoints) */
%mend;
%macro fillPolygon (xpoints, ypoints); %setArray (&xpoints, &jdsgi._x)
%setArray (&ypoints, &jdsgi._y)
&jdsgi..callVoidMethod ('fillPolygon')
/* &jdsgi..callVoidMethod ('fillPolygon', &xpoints, &ypoints) */
%mend;
%macro drawPolyline (xpoints, ypoints); %setArray (&xpoints, &jdsgi._x)
%setArray (&ypoints, &jdsgi._y)
&jdsgi..callVoidMethod ('drawPolyline')
/* &jdsgi..callVoidMethod ('drawPolyline', &xpoints, &ypoints) */
%mend;
%macro setClip (x,y,width,height); &jdsgi..callVoidMethod ('setClip', &x, &y, &width, &height) %mend;
%macro setClipPolygon (xpoints, ypoints); %setArray (&xpoints, &jdsgi._x)
%setArray (&ypoints, &jdsgi._y)
&jdsgi..callVoidMethod ('setClipPolygon')
/* &jdsgi..callVoidMethod ('setClipPolygon', &xpoints, &ypoints) */
%mend;
%macro getClipBounds (doubleArray); %setNData (&doubleArray);
&jdsgi..callVoidMethod ('getClipBounds')
%mend;
%macro getImageWidth (width); &jdsgi..callIntMethod ('getImageWidth', &width) %mend;
%macro getImageHeight (height); &jdsgi..callIntMethod ('getImageHeight', &height) %mend;
%macro drawImage (x,y,bgcolor); &jdsgi..callVoidMethod ('drawImage', &x,&y,&bgcolor) %mend;
%macro readImage (source); &jdsgi..callVoidMethod ('readImage', &source) %mend;
%macro canvas_saveAs (basename, type, savedAs); &savedAs = repeat(' ', 300);
&jdsgi..callStringMethod ('saveAs', trim(&type), catx('.',&basename,&type), &savedAs);
put &savedAs=
%mend;
%macro setNData(doubleArray); &jdsgi..callVoidMethod ('setNData', &doubleArray) %mend;
%macro tSetViewport (n,x1,y1,x2,y2); &jdsgi..callVoidMethod ('tsetViewport', &n,&x1,&y1,&x2,&y2) %mend;
%macro tSetWindow (n,x1,y1,x2,y2); &jdsgi..callVoidMethod ('tsetWindow', &n,&x1,&y1,&x2,&y2) %mend;
%macro tsetWindowAspectedForWidth (n,x1,y1,w); &jdsgi..callVoidMethod ('tsetWindowAspectedForWidth', &n,&x1,&y1,&w) %mend;
%macro tsetWindowAspectedForHeight (n,x1,y1,h); &jdsgi..callVoidMethod ('tsetWindowAspectedForHeight', &n,&x1,&y1,&h) %mend;
%macro tGetViewport (n,doubleArray); &jdsgi..callVoidMethod ('tgetViewport', &n,&doubleArray) %mend;
%macro tGetWindow (n,doubleArray); &jdsgi..callVoidMethod ('tgetWindow', &n,&doubleArray) %mend;
%macro tComputeAspectedViewport (n,x1,y1,x2,y2,doubleArray); &jdsgi..callVoidMethod ('tcomputeAspectedViewport', &n,&x1,&y1,&x2,&y2,&doubleArray) %mend;
%macro tString (text,x,y,function=trim); %local n;
%let n = %sysfunc(count(&function,:));
%let text = %sysfunc(translate(&function,%str(%(),:))(&text.%sysfunc(repeat(%str(%)),&n));
&jdsgi..callVoidMethod ('tstring', &text,&x,&y) %mend;
%macro tStringCenter(text,x,y,function=trim); %local n;
%let n = %sysfunc(count(&function,:));
%let text = %sysfunc(translate(&function,%str(%(),:))(&text.%sysfunc(repeat(%str(%)),&n));
&jdsgi..callVoidMethod ('tstringCenter', &text,&x,&y) %mend;
%macro tStringRight (text,x,y,function=trim); %local n;
%let n = %sysfunc(count(&function,:));
%let text = %sysfunc(translate(&function,%str(%(),:))(&text.%sysfunc(repeat(%str(%)),&n));
&jdsgi..callVoidMethod ('tstringRight', &text,&x,&y) %mend;
%macro tGetClipRect (n,doubleArray); &jdsgi..callVoidMethod ('tgetClipRect', &n,&doubleArray) %mend;
%macro tSetClip (onoff); &jdsgi..callVoidMethod ('tsetClip', &onoff) %mend;
%macro tGetClip (onoff); &jdsgi..callBooleanMethod ('tgetClip', &onoff) %mend;
%macro tSetTransno (t); &jdsgi..callVoidMethod ('tsetTransno', &t) %mend;
%macro tGetTransno (t); &jdsgi..callIntMethod ('tgetTransno', &t) %mend;
%macro tArc (x,y,r,start,end); &jdsgi..callVoidMethod ('tarc',&x,&y,&r,&start,&end,0) %mend;
%macro tArcChord (x,y,r,start,end); &jdsgi..callVoidMethod ('tarc',&x,&y,&r,&start,&end,1) %mend;
%macro tArcPieSlice (x,y,r,start,end); &jdsgi..callVoidMethod ('tarc',&x,&y,&r,&start,&end,2) %mend;
%macro tLine (x1,y1,x2,y2); &jdsgi..callVoidMethod ('tline',&x1,&y1,&x2,&y2) %mend;
%macro tBar (x1,y1,x2,y2); &jdsgi..callVoidMethod ('tbar',&x1,&y1,&x2,&y2) %mend;
%macro tRBar (x1,y1,x2,y2,w,h); &jdsgi..callVoidMethod ('trbar',&x1,&y1,&x2,&y2,&w,&h) %mend;
%macro tEllarc (x,y,major,minor,start,end,angle); &jdsgi..callVoidMethod ('tellarc',&x,&y,&major,&minor,&start,&end,&angle,0) %mend;
%macro tEllarcChord (x,y,major,minor,start,end,angle); &jdsgi..callVoidMethod ('tellarc',&x,&y,&major,&minor,&start,&end,&angle,1) %mend;
%macro tEllarcPieSlice (x,y,major,minor,start,end,angle); &jdsgi..callVoidMethod ('tellarc',&x,&y,&major,&minor,&start,&end,&angle,2) %mend;
%macro tPolyline (xpoints, ypoints,n=); %setArray (&xpoints, &jdsgi._x)
%setArray (&ypoints, &jdsgi._y)
%if %length(&n) = 0 %then %let n = dim(&xpoints);
&jdsgi..callVoidMethod ('tpolyline', &n)
/* &jdsgi..callVoidMethod ('tpolyline', &xpoints, &ypoints) */
%mend;
%macro tPolygon (xpoints, ypoints,n=); %setArray (&xpoints, &jdsgi._x)
%setArray (&ypoints, &jdsgi._y)
%if %length(&n) = 0 %then %let n = dim(&xpoints);
&jdsgi..callVoidMethod ('tpolygon', &n)
/* &jdsgi..callVoidMethod ('tpolygon', &xpoints, &ypoints) */
%mend;
%macro tsetRotation (angle); &jdsgi..callVoidMethod ('tsetRotation', &angle) %mend;
%macro reportFormats (); &jdsgi..callVoidMethod ('reportFormats') %mend;