diff --git a/SWIG/Examples/GIFPlot/Guile/full/Makefile b/SWIG/Examples/GIFPlot/Guile/full/Makefile new file mode 100644 index 000000000..711938d02 --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/full/Makefile @@ -0,0 +1,20 @@ +TOP = ../../.. +SWIG = $(TOP)/../swig +SWIGOPT = -I../../Include +SRCS = +TARGET = gifplot +INTERFACE = gifplot.i +LIBS = -L../.. -lgifplot -lm +INCLUDE = -I../../Include + +all:: static + +static:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + INCLUDE='$(INCLUDE)' LIBS='$(LIBS)' SWIGOPT='$(SWIGOPT)' \ + TARGET='gifguile' INTERFACE='$(INTERFACE)' guile_static + +clean:: + rm -f *_wrap* *.o *~ *.so gifguile .~* core *.gif + + diff --git a/SWIG/Examples/GIFPlot/Guile/full/README b/SWIG/Examples/GIFPlot/Guile/full/README new file mode 100644 index 000000000..9780988d2 --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/full/README @@ -0,0 +1,8 @@ +This example runs the entire gifplot.h header file through SWIG without +any changes. The Scheme program 'runme.scm' does something a little more +interesting. You'll have to go look at the header file to get a complete +listing of the functions. + + + + diff --git a/SWIG/Examples/GIFPlot/Guile/full/cmap b/SWIG/Examples/GIFPlot/Guile/full/cmap new file mode 100644 index 000000000..a20c331a9 Binary files /dev/null and b/SWIG/Examples/GIFPlot/Guile/full/cmap differ diff --git a/SWIG/Examples/GIFPlot/Guile/full/gifplot.i b/SWIG/Examples/GIFPlot/Guile/full/gifplot.i new file mode 100644 index 000000000..78b2a286f --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/full/gifplot.i @@ -0,0 +1,17 @@ +/* Oh what the heck, let's just grab the whole darn header file + and see what happens. */ + +%module gifplot +%{ + +/* Note: You still need this part because the %include directive + merely causes SWIG to interpret the contents of a file. It doesn't + include the right include headers for the resulting C code */ + +#include "gifplot.h" + +%} + +typedef unsigned int Pixel; + +%include gifplot.h diff --git a/SWIG/Examples/GIFPlot/Guile/full/runme.scm b/SWIG/Examples/GIFPlot/Guile/full/runme.scm new file mode 100644 index 000000000..79a305ed6 --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/full/runme.scm @@ -0,0 +1,63 @@ +;;; Plot a 3D function + +;; Here is the function to plot +(define (func x y) + (* 5 + (cos (* 2 (sqrt (+ (* x x) (* y y))))) + (exp (* -0.3 (sqrt (+ (* x x) (* y y))))))) + +;; Here are some plotting parameters +(define xmin -5.0) +(define xmax 5.0) +(define ymin -5.0) +(define ymax 5.0) +(define zmin -5.0) +(define zmax 5.0) + +;; Grid resolution +(define nxpoints 60) +(define nypoints 60) + +(define cmap (new-ColorMap "cmap")) +(define frame (new-FrameBuffer 500 500)) +(FrameBuffer-clear frame (BLACK)) + +(define p3 (new-Plot3D frame xmin ymin zmin xmax ymax zmax)) +(Plot3D-lookat p3 (* 2 (- zmax zmin))) +(Plot3D-autoperspective p3 40) +(Plot3D-rotu p3 60) +(Plot3D-rotr p3 30) +(Plot3D-rotd p3 10) + +(define (drawsolid) + (Plot3D-clear p3 (BLACK)) + (Plot3D-start p3) + (let ((dx (/ (- xmax xmin) nxpoints)) + (dy (/ (- ymax ymin) nypoints)) + (cscale (/ 240 (- zmax zmin)))) + (let x-loop ((x xmin) (i 0)) + (cond + ((< i nxpoints) + (let y-loop ((y ymin) (j 0)) + (cond + ((< j nypoints) + (let* ((z1 (func x y)) + (z2 (func (+ x dx) y)) + (z3 (func (+ x dx) (+ y dy))) + (z4 (func x (+ y dy))) + (c1 (* cscale (- z1 zmin))) + (c2 (* cscale (- z2 zmin))) + (c3 (* cscale (- z3 zmin))) + (c4 (* cscale (- z4 zmin))) + (cc (/ (+ c1 c2 c3 c4) 4)) + (c (min (max cc 239) 0))) + (Plot3D-solidquad p3 x y z1 (+ x dx) y z2 (+ x dx) (+ y dy) + z3 x (+ y dy) z4 (+ c 16))) + (y-loop (+ y dy) (+ j 1))))) + (x-loop (+ x dx) (+ i 1))))))) + +(display "Making a nice 3D plot...\n") +(drawsolid) + +(FrameBuffer-writeGIF frame cmap "image.gif") +(display "Wrote image.gif\n") diff --git a/SWIG/Examples/GIFPlot/Guile/simple/Makefile b/SWIG/Examples/GIFPlot/Guile/simple/Makefile new file mode 100644 index 000000000..7c5722e7d --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/simple/Makefile @@ -0,0 +1,20 @@ +TOP = ../../.. +SWIG = $(TOP)/../swig +SWIGOPT = +SRCS = +TARGET = simple +INTERFACE = simple.i +LIBS = -L../.. -lgifplot +INCLUDE = -I../../Include + +all:: static + +static:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + INCLUDE='$(INCLUDE)' LIBS='$(LIBS)' SWIGOPT='$(SWIGOPT)' \ + TARGET='gifguile' INTERFACE='$(INTERFACE)' guile_static + +clean:: + rm -f *_wrap* *.o *~ *.so gifguile .~* core *.gif + + diff --git a/SWIG/Examples/GIFPlot/Guile/simple/README b/SWIG/Examples/GIFPlot/Guile/simple/README new file mode 100644 index 000000000..575e993cf --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/simple/README @@ -0,0 +1,3 @@ +This is a very minimalistic example in which just a few functions +and constants from library are wrapped and used to draw some simple +shapes. Run `gifguile -s runme.scm'. diff --git a/SWIG/Examples/GIFPlot/Guile/simple/runme.scm b/SWIG/Examples/GIFPlot/Guile/simple/runme.scm new file mode 100644 index 000000000..615974533 --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/simple/runme.scm @@ -0,0 +1,26 @@ +;; Draw some simple shapes +(display "Drawing some basic shapes\n") + +(define cmap (new-ColorMap)) +(define f (new-FrameBuffer 400 400)) + +;; Clear the picture +(FrameBuffer-clear f (BLACK)) + +;; Make a red box +(FrameBuffer-box f 40 40 200 200 (RED)) + +;; Make a blue circle +(FrameBuffer-circle f 200 200 40 (BLUE)) + +;; Make green line +(FrameBuffer-line f 10 390 390 200 (GREEN)) + +;; Write an image out to disk + +(FrameBuffer-writeGIF f cmap "image.gif") +(display "Wrote image.gif\n") + +(delete-FrameBuffer f) +(delete-ColorMap cmap) + diff --git a/SWIG/Examples/GIFPlot/Guile/simple/simple.i b/SWIG/Examples/GIFPlot/Guile/simple/simple.i new file mode 100644 index 000000000..86eaabdc0 --- /dev/null +++ b/SWIG/Examples/GIFPlot/Guile/simple/simple.i @@ -0,0 +1,34 @@ +/* This example shows a very simple interface wrapping a few + primitive declarations */ + +%module simple +%{ +#include "gifplot.h" +%} + +typedef unsigned int Pixel; + +/* Here are a few useful functions */ + +ColorMap *new_ColorMap(char *filename = 0); +void delete_ColorMap(ColorMap *cmap); + +FrameBuffer *new_FrameBuffer(unsigned int width, unsigned int height); +void delete_FrameBuffer(FrameBuffer *frame); +void FrameBuffer_clear(FrameBuffer *frame, Pixel color); +void FrameBuffer_line(FrameBuffer *frame, int x1, int y1, int x2, int y2, Pixel color); +void FrameBuffer_box(FrameBuffer *frame, int x1, int y1, int x2, int y2, Pixel color); +void FrameBuffer_circle(FrameBuffer *frame, int x1, int y1, int radius, Pixel color); +int FrameBuffer_writeGIF(FrameBuffer *f, ColorMap *c, char *filename); + +/* And some useful constants */ + +#define BLACK 0 +#define WHITE 1 +#define RED 2 +#define GREEN 3 +#define BLUE 4 +#define YELLOW 5 +#define CYAN 6 +#define MAGENTA 7 +