# =================================================================================
# image.py
#
# A generic image base class. Defines a variety of global parameters and
# other stuff related to framebuffers.
# ================================================================================
from gifplot import *
# --------------------------------------------------------------------------------
# Default values (in case the user doesn't supply them
# --------------------------------------------------------------------------------
GRAPHICS_SIZE = 500
GRAPHICS_COLORMAP = "cmap"
# --------------------------------------------------------------------------
# Image base class
#
# All displays are consider to be "images" derived from this base class.
# The following member data and operations are available.
#
# self.frame : Framebuffer being used by this image
# self.colormap : Colormap being used with the image
# self.vxmin : Plotting region for this image
# self.vymin "
# self.vxmax "
# self.vymax "
# self.bgcolor : Default background color
# self.fgcolor : Default foreground color
#
# All images must support the following methods (images may of course use the
# definitions in the base class).
#
# self.show() : Show the current image
# self.draw() : Method for drawing the entire image on the frame buffer
# self.output() : Dump the current framebuffer out regardless of what state its in
# self.setview() : Method for setting the viewing region of this image
#
# The following methods are also encouraged for all images
#
# self.zoom() : Zoom in on the image
# self.left() : translate left
# self.right() : translate right
# self.up() : translate up
# self.down() : translate down
# self.rotr() : rotate right (3D only)
# self.rotl() : rotate left (3D only)
# self.rotd() : rotate down (3D only)
# self.rotu() : rotate up (3D only)
# self.rotc() : rotate around the center point (3D only)
# self.rotx() : rotate around the x axis (3D only)
# self.roty() : rotate around the y axis (3D only)
# self.rotz() : rotate around the z axis (3D only)
# self.center() : Set center point
#
# --------------------------------------------------------------------------
class Image:
Current = None # The currently active image
Default_framebuffer = None # Default framebuffer
Default_colormap = None # Default colormap
ImageNo = 0 # Current Image Number
bgcolor = BLACK
fgcolor = WHITE
def __init__(self):
init_framebuffer()
if Image.Default_colormap == None:
colormap(GRAPHICS_COLORMAP)
self.frame = Image.Default_framebuffer
self.filename = "img"+str(Image.ImageNo)+".gif"
self.imageno = 0
Image.ImageNo = Image.ImageNo + 1
self.colormap = Image.Default_colormap
self.stamp = ""
self.fgcolor = Image.fgcolor
self.bgcolor = Image.bgcolor
self.vxmin = 0
self.vymin = 0
self.vxmax = self.frame.width
self.vymax = self.frame.height
# Generate the image and dump it to the current output device
def show(self):
if self.frame == None:
print "Error. No frame buffer assigned to this image"
return
self.frame.noclip()
self.frame.clear(self.bgcolor)
self.frame.setclip(self.vxmin,self.vymin,self.vxmax,self.vymax)
self.draw()
self.output()
# Dump this image out over a socket or to a file
def output(self):
global Graphics_current, Graphics_buffer, Graphics_buffer_size
# Put a stamp on the image
self.frame.noclip()
self.frame.drawstring(1,1,self.fgcolor,self.bgcolor,self.stamp,HORIZONTAL)
# Make a GIF image
print "Writing " + self.filename
self.frame.writeGIF(self.colormap,self.filename)
Image.Current = self
def draw(self):
print "No drawing method specified for image " + self.filename
# Set the viewport for this image
def viewport(self,vx,vy,wx,wy):
self.vxmin = vx
self.vymin = vy
self.vxmax = wx
self.vymax = wy
self.frame.setclip(vx,vy,wx,wy)
# Image manipulation methods
def zoom(self,s):
print("zoom() unavailable in current image")
def left(self,s):
print("left() unavailable in current image")
def right(self,s):
print("right() unavailable in current image")
def up(self,s):
print("up() unavailable in current image")
def down(self,s):
print("down() unavailable in current image")
def rotr(self,s):
print("rotr() unavailable in current image")
def rotl(self,s):
print("rotl() unavailable in current image")
def rotu(self,s):
print("rotu() unavailable in current image")
def rotd(self,s):
print("rotd() unavailable in current image")
def rotc(self,s):
print("rotc() unavailable in current image")
def rotx(self,s):
print("rotx() unavailable in current image")
def roty(self,s):
print("roty() unavailable in current image")
def rotz(self,s):
print("rotz() unavailable in current image")
def center(self,x,y):
print("center() unavailable in current image")
# ---------------------------------------------------------------------------
# Image manipulation shortcuts
#
# Whenever an image is created or manipulated, 'image' gets set to
# that image. These commands operate on the last image used.
# ---------------------------------------------------------------------------
def show(*args):
if len(args) == 0:
Image.Current.show()
else :
for img in args:
img.show()
def zoom(s):
Image.Current.zoom(s)
Image.Current.show()
def left(s):
Image.Current.left(s)
Image.Current.show()
def right(s):
Image.Current.right(s)
Image.Current.show()
def up(s):
Image.Current.up(s)
Image.Current.show()
def center(x,y):
Image.Current.center(x,y)
Image.Current.show()
def down(s):
Image.Current.down(s)
Image.Current.show()
def rotr(deg):
Image.Current.rotr(deg)
Image.Current.show()
def rotl(deg):
Image.Current.rotl(deg)
Image.Current.show()
def rotd(deg):
Image.Current.rotd(deg)
Image.Current.show()
def rotu(deg):
Image.Current.rotu(deg)
Image.Current.show()
def rotc(deg):
Image.Current.rotc(deg)
Image.Current.show()
def rotx(deg):
Image.Current.rotx(deg)
Image.Current.show()
def roty(deg):
Image.Current.roty(deg)
Image.Current.show()
def rotz(deg):
Image.Current.rotz(deg)
Image.Current.show()
# ---------------------------------------------------------------------------
# These functions should be used to change the default values for new images
#
# ---------------------------------------------------------------------------
def set_default_framebuffer(f):
Image.Default_framebuffer = f
def colormap(filename):
c = ColorMap(filename)
Image.Default_colormap = c
def init_framebuffer():
if Image.Default_framebuffer == None:
Image.Default_framebuffer = FrameBuffer(GRAPHICS_SIZE,GRAPHICS_SIZE)
syntax highlighted by Code2HTML, v. 0.9.1