char_draw.display_list module
module that implements a graphics package using block graphics on curses window
# Copyright 2017 James P Goodwin chardraw unicode curses based graphics package """ module that implements a graphics package using block graphics on curses window """ import sys import os from char_draw import canvas import curses class Bbox: """ Bounding box object """ def __init__(self, x0=0,y0=0,x1=0,y1=0): """ constructor, takex the bounding points of the bounding box """ self.x0 = x0 if x0 < x1 else x1 self.y0 = y0 if y0 < y1 else y1 self.x1 = x1 if x1 > x0 else x0 self.y1 = y1 if y1 > y0 else y0 def get_size(self): """ return the height and width of the bounding box """ return (self.x1-self.x0),(self.y1-self.y0) def get_location(self): """ return the location of the upper left corner of the bounding box """ return self.x0,self.y0 def union(self,bbox): """ constructs the bounding box that is the union of this bounding box and the input bbox """ ret = Bbox( self.x0, self.y0, self.x1, self.y1 ) ret.x0 = bbox.x0 if bbox.x0 < self.x0 else self.x0 ret.y0 = bbox.y0 if bbox.y0 < self.y0 else self.y0 ret.x1 = bbox.x1 if bbox.x1 > self.x1 else self.x1 ret.y1 = bbox.y1 if bbox.y1 > self.y1 else self.y1 return (ret) def __repr__(self): return "(%10.2f,%10.2f,%10.2f,%10.2f)"%(self.x0,self.y0,self.x1,self.y1) class DisplayList: """ Base object for all display list objects """ def __init__(self, parent = None, children = None, canvas=None): """ constructor, takes a parent object to be contained within and a list of children object to contain """ self.parent = parent if children: self.children = children else: self.children = [] # modified flag indicates if the object has been changed self.modified = True # initialize bbox self.bbox = None # set up canvas self.canvas = None self.xform = [1.0,1.0] self.focus = False if canvas: self.set_canvas(canvas) elif parent: self.set_canvas(parent.get_canvas()) def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True def is_focus( self ): """ return the current focus state """ return self.focus def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas()) def get_parent(self): """ get the parent of this object """ return(self.parent) def get_canvas(self): """ get the canvas for this display list """ return self.canvas def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas) def get_bbox(self): """ computes the bounding box of the display list object """ ret = self.bbox if self.modified: ret = self.bbox = None for c in self.children: if not ret: ret = c.get_bbox() else: ret = ret.union(c.get_bbox()) self.bbox = ret self.modified = False return (ret) def render(self): """ draw the object on the suppied canvas """ for c in self.children: c.render() def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1]) def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1]) def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate() def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate() def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None) def get_children(self): """ return the children of this object if any """ return self.children def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate() class Rect(DisplayList): """Display list object for a rectangle""" def __init__(self,x0,y0,x1,y1,color,fill=False,parent=None): """ x0,y0 upper left corner of box, x1,y1 lower right corner of box, color is color, fill=True to fill parent is parent object """ DisplayList.__init__(self,parent,None,None) self.x0 = x0 self.y0 = y0 self.x1 = x1 self.y1 = y1 self.color = color self.fill = fill self.bbox = None def get_points( self ): """ return the rectangle's raw points """ return ((self.x0,self.y0),(self.x1,self.y1)) def set_points( self, points ): """ set the rectangle's raw points """ self.x0,self.y0 = points[0] self.x1,self.y1 = points[1] self.invalidate() def get_color( self ): """ return the color of the rectangle """ return self.color def set_color( self, color): """ set the color of the rectangle """ self.color = color self.invalidate() def get_fill( self ): """ return the fill state of the rectangle """ return self.fill def set_fill( self, fill): """ set the filled state of the rectangle """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw the requested rectangle """ x0,y0 = self.transform( self.x0,self.y0 ) x1,y1 = self.transform( self.x1,self.y1 ) self.canvas.rect(self.x0,self.y0,self.x1,self.y1,self.color,self.fill) def get_bbox(self): """ get the bounding box for the rectangle """ ret = self.bbox if self.modified and self.canvas: x0,y0 = self.transform( self.x0,self.y0 ) x1,y1 = self.transform( self.x1,self.y1 ) self.bbox = ret = Bbox(x0,y0,x1,y1) self.modified = False return self.bbox class Circle(DisplayList): """Display list object for a circle""" def __init__(self, x,y,radius,color,fill=False, parent=None): """ x,y center of circle, radius is the radius,color is the color of the circle, fill is true to fill the circle """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.radius = radius self.color = color self.fill = fill self.bbox = None def get_center( self ): """ return the center of the circle """ return (self.x, self.y) def set_center( self, center ): """ set the center of the circle """ self.x, self.y = center self.invalidate() def get_radius( self ): """ return the center of the circle """ return self.radius def set_radius( self, radius ): """ set the center of the circle """ self.radius = radius self.invalidate() def get_color( self ): """ return the color of the circle """ return self.color def set_color( self, color): """ set the color of the circle """ self.color = color self.invalidate() def get_fill( self ): """ return the fill state of the circle """ return self.fill def set_fill( self, fill): """ set the filled state of the circle """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw the requested circle """ cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.circle(cx,cy,sr,self.color,self.fill) def get_bbox(self): """ compute the bbox of the circle """ ret = self.bbox if self.canvas and self.modified: cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.bbox = ret = Bbox(self.x-sr,self.y-sr,self.x+sr,self.y+sr) self.modified = False return ret class Arc(DisplayList): """Display list object for an arc""" def __init__(self, x,y,radius,a0,a1,color,fill=False, parent=None): """ x,y center of arc, angles are from a0 to a1, radius is the radius,color is the color of the arc, fill is true to fill the arc """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.radius = radius self.color = color self.fill = fill self.a0 = a0 self.a1 = a1 self.bbox = None def get_angles( self ): """ get the start and end angles for the arc """ return (self.a0,self.a1) def set_angles( self, angles ): """ set the start and end angles for the arc """ self.a0, self.a1 = angles def get_center( self ): """ return the center of the arc """ return (self.x, self.y) def set_center( self, center ): """ set the center of the arc """ self.x, self.y = center self.invalidate() def get_radius( self ): """ return the center of the arc """ return self.radius def set_radius( self, radius ): """ set the center of the arc """ self.radius = radius self.invalidate() def get_color( self ): """ return the color of the arc """ return self.color def set_color( self, color): """ set the color of the arc """ self.color = color self.invalidate() def get_fill( self ): """ return the fill state of the arc """ return self.fill def set_fill( self, fill): """ set the filled state of the arc """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw the requested arc """ cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.arc(cx,cy,sr,self.a0,self.a1,self.color,self.fill) def get_bbox(self): """ get the bounding box, compute it from the arc points """ ret = self.bbox if self.canvas and self.modified: b = Bbox(-1.0,-1.0,-1.0,-1.0) def update_bounds(x,y,color): if b.x0 < 0 or x < b.x0: b.x0 = x if b.y0 < 0 or y < b.y0: b.y0 = y if b.x1 < 0 or x > b.x1: b.x1 = x if b.y1 < 0 or y > b.y1: b.y1 = y cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.arc(cx,cy,sr,self.a0,self.a1,self.color,self.fill,update_bounds) self.bbox = ret = b self.modified = False return ret class Text(DisplayList): """Display list object for text""" def __init__(self, x,y,message,color,parent=None): """ x,y is the position of the first character, message is the text to display, color is the color """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.message = message self.color = color self.bbox = None def get_location(self): """ get the text location """ return (self.x,self.y) def set_location(self, location): """ set the text location """ self.x, self.y = location self.invalidate() def get_message(self): """ get the message """ return self.message def set_message(self, message): """ set the message """ self.message = message self.invalidate() def get_color( self ): """ return the color of the text """ return self.color def set_color( self, color): """ set the color of the text """ self.color = color self.invalidate() def render(self): """ override rendering to draw the requested text """ cx,cy = self.transform( self.x,self.y ) self.canvas.textat(cx,cy,self.color,self.message) def get_bbox(self): """compute bounding box of text""" ret = self.bbox if self.canvas and self.modified: cx,cy = self.transform(self.x,self.y) cx,cy = self.canvas.round_text_position(cx,cy) ty,tx = self.canvas.from_rowcol(1,len(self.message)) max_x,max_y = self.canvas.get_maxxy() cx1 = cx+tx cy1 = cy+ty if cx1 > max_x: cx1 = max_x if cy1 > max_y: cy1 = max_y self.bbox = ret = Bbox(cx,cy,cx+tx,cy+ty) self.modified = False return ret class PolyLine(DisplayList): """Display list object for polyline""" def __init__(self,points,color,parent=None): """ points is a list of (x,y) tuples in order to be drawn as a polyline in color """ self.points = points self.color = color self.bbox = None self.transformed_points = None DisplayList.__init__(self,parent,None,None) def get_color( self ): """ return the color of the polyline """ return self.color def set_color( self, color): """ set the color of the polyline """ self.color = color self.invalidate() def get_points(self): """ return a tuple of x,y tuples representing this PolyLine """ return tuple(self.points) def set_points(self,points): """ set the points of this polyline """ self.points = points self.invalidate() def transform_points( self ): """ get the transformed points """ if not self.transformed_points or self.modified: t_points = [] for x,y in self.points: t_points.append(self.transform(x,y)) self.transformed_points = t_points return self.transformed_points def get_bbox( self ): """ get the bounding box """ if (not self.transformed_points or self.modified) and self.canvas: if not self.bbox: self.bbox = Bbox() self.bbox.x0,self.bbox.y0,self.bbox.x1,self.bbox.y1 = self.canvas.get_bounds(self.transform_points()) self.modified = False return self.bbox def render(self): """ override rendering to draw requested polyline """ self.canvas.polyline(self.transform_points(),self.color) class Polygon(PolyLine): """Display list object for a polygon, filled or not filled""" def __init__(self,points,color,fill,parent=None): """ points is a list of (x,y) tuples in order to be drawn as a closed polygon in color and if fill is True filled with color """ PolyLine.__init__(self,points,color,parent) self.fill = fill def get_fill( self ): """ return the fill state of the arc """ return self.fill def set_fill( self, fill): """ set the filled state of the arc """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw requested polygon """ self.canvas.polygon(self.transform_points(),self.color,self.fill)
Classes
class Arc
Display list object for an arc
class Arc(DisplayList): """Display list object for an arc""" def __init__(self, x,y,radius,a0,a1,color,fill=False, parent=None): """ x,y center of arc, angles are from a0 to a1, radius is the radius,color is the color of the arc, fill is true to fill the arc """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.radius = radius self.color = color self.fill = fill self.a0 = a0 self.a1 = a1 self.bbox = None def get_angles( self ): """ get the start and end angles for the arc """ return (self.a0,self.a1) def set_angles( self, angles ): """ set the start and end angles for the arc """ self.a0, self.a1 = angles def get_center( self ): """ return the center of the arc """ return (self.x, self.y) def set_center( self, center ): """ set the center of the arc """ self.x, self.y = center self.invalidate() def get_radius( self ): """ return the center of the arc """ return self.radius def set_radius( self, radius ): """ set the center of the arc """ self.radius = radius self.invalidate() def get_color( self ): """ return the color of the arc """ return self.color def set_color( self, color): """ set the color of the arc """ self.color = color self.invalidate() def get_fill( self ): """ return the fill state of the arc """ return self.fill def set_fill( self, fill): """ set the filled state of the arc """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw the requested arc """ cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.arc(cx,cy,sr,self.a0,self.a1,self.color,self.fill) def get_bbox(self): """ get the bounding box, compute it from the arc points """ ret = self.bbox if self.canvas and self.modified: b = Bbox(-1.0,-1.0,-1.0,-1.0) def update_bounds(x,y,color): if b.x0 < 0 or x < b.x0: b.x0 = x if b.y0 < 0 or y < b.y0: b.y0 = y if b.x1 < 0 or x > b.x1: b.x1 = x if b.y1 < 0 or y > b.y1: b.y1 = y cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.arc(cx,cy,sr,self.a0,self.a1,self.color,self.fill,update_bounds) self.bbox = ret = b self.modified = False return ret
Ancestors (in MRO)
- Arc
- DisplayList
- builtins.object
Static methods
def __init__(
self, x, y, radius, a0, a1, color, fill=False, parent=None)
x,y center of arc, angles are from a0 to a1, radius is the radius,color is the color of the arc, fill is true to fill the arc
def __init__(self, x,y,radius,a0,a1,color,fill=False, parent=None): """ x,y center of arc, angles are from a0 to a1, radius is the radius,color is the color of the arc, fill is true to fill the arc """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.radius = radius self.color = color self.fill = fill self.a0 = a0 self.a1 = a1 self.bbox = None
def add_child(
self, child)
append a child to the list of children of this object
def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate()
def bounds(
self)
return the bounds of the current drawing surface
def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1])
def get_angles(
self)
get the start and end angles for the arc
def get_angles( self ): """ get the start and end angles for the arc """ return (self.a0,self.a1)
def get_bbox(
self)
get the bounding box, compute it from the arc points
def get_bbox(self): """ get the bounding box, compute it from the arc points """ ret = self.bbox if self.canvas and self.modified: b = Bbox(-1.0,-1.0,-1.0,-1.0) def update_bounds(x,y,color): if b.x0 < 0 or x < b.x0: b.x0 = x if b.y0 < 0 or y < b.y0: b.y0 = y if b.x1 < 0 or x > b.x1: b.x1 = x if b.y1 < 0 or y > b.y1: b.y1 = y cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.arc(cx,cy,sr,self.a0,self.a1,self.color,self.fill,update_bounds) self.bbox = ret = b self.modified = False return ret
def get_canvas(
self)
get the canvas for this display list
def get_canvas(self): """ get the canvas for this display list """ return self.canvas
def get_center(
self)
return the center of the arc
def get_center( self ): """ return the center of the arc """ return (self.x, self.y)
def get_children(
self)
return the children of this object if any
def get_children(self): """ return the children of this object if any """ return self.children
def get_color(
self)
return the color of the arc
def get_color( self ): """ return the color of the arc """ return self.color
def get_fill(
self)
return the fill state of the arc
def get_fill( self ): """ return the fill state of the arc """ return self.fill
def get_parent(
self)
get the parent of this object
def get_parent(self): """ get the parent of this object """ return(self.parent)
def get_radius(
self)
return the center of the arc
def get_radius( self ): """ return the center of the arc """ return self.radius
def handle(
self, event)
handle an input event, return None if handled, event if not
def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event
def invalidate(
self)
mark this object and it's parent as invalidated
def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate()
def is_focus(
self)
return the current focus state
def is_focus( self ): """ return the current focus state """ return self.focus
def is_modified(
self)
does this display list contain modified objects
def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified
def pick(
self, row, col)
return the topmost opject at row,col for mouse selection
def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None
def remove_child(
self, child)
remove this child from the list of children of this object
def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None)
def render(
self)
override rendering to draw the requested arc
def render(self): """ override rendering to draw the requested arc """ cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.arc(cx,cy,sr,self.a0,self.a1,self.color,self.fill)
def set_angles(
self, angles)
set the start and end angles for the arc
def set_angles( self, angles ): """ set the start and end angles for the arc """ self.a0, self.a1 = angles
def set_canvas(
self, canvas)
set the canvas and the scaling transformation
def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas)
def set_center(
self, center)
set the center of the arc
def set_center( self, center ): """ set the center of the arc """ self.x, self.y = center self.invalidate()
def set_children(
self, children)
set the children of this object to a new list of children
def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
def set_color(
self, color)
set the color of the arc
def set_color( self, color): """ set the color of the arc """ self.color = color self.invalidate()
def set_fill(
self, fill)
set the filled state of the arc
def set_fill( self, fill): """ set the filled state of the arc """ self.fill = fill self.invalidate()
def set_focus(
self, state)
set focus to True or False to tell graph to render in focus mode
def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True
def set_parent(
self, parent)
set the parent of this object
def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas())
def set_radius(
self, radius)
set the center of the arc
def set_radius( self, radius ): """ set the center of the arc """ self.radius = radius self.invalidate()
def transform(
self, x, y)
apply current transform to point
def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1])
Instance variables
var a0
var a1
var bbox
var color
var fill
var radius
var x
var y
class Bbox
Bounding box object
class Bbox: """ Bounding box object """ def __init__(self, x0=0,y0=0,x1=0,y1=0): """ constructor, takex the bounding points of the bounding box """ self.x0 = x0 if x0 < x1 else x1 self.y0 = y0 if y0 < y1 else y1 self.x1 = x1 if x1 > x0 else x0 self.y1 = y1 if y1 > y0 else y0 def get_size(self): """ return the height and width of the bounding box """ return (self.x1-self.x0),(self.y1-self.y0) def get_location(self): """ return the location of the upper left corner of the bounding box """ return self.x0,self.y0 def union(self,bbox): """ constructs the bounding box that is the union of this bounding box and the input bbox """ ret = Bbox( self.x0, self.y0, self.x1, self.y1 ) ret.x0 = bbox.x0 if bbox.x0 < self.x0 else self.x0 ret.y0 = bbox.y0 if bbox.y0 < self.y0 else self.y0 ret.x1 = bbox.x1 if bbox.x1 > self.x1 else self.x1 ret.y1 = bbox.y1 if bbox.y1 > self.y1 else self.y1 return (ret) def __repr__(self): return "(%10.2f,%10.2f,%10.2f,%10.2f)"%(self.x0,self.y0,self.x1,self.y1)
Ancestors (in MRO)
- Bbox
- builtins.object
Static methods
def __init__(
self, x0=0, y0=0, x1=0, y1=0)
constructor, takex the bounding points of the bounding box
def __init__(self, x0=0,y0=0,x1=0,y1=0): """ constructor, takex the bounding points of the bounding box """ self.x0 = x0 if x0 < x1 else x1 self.y0 = y0 if y0 < y1 else y1 self.x1 = x1 if x1 > x0 else x0 self.y1 = y1 if y1 > y0 else y0
def get_location(
self)
return the location of the upper left corner of the bounding box
def get_location(self): """ return the location of the upper left corner of the bounding box """ return self.x0,self.y0
def get_size(
self)
return the height and width of the bounding box
def get_size(self): """ return the height and width of the bounding box """ return (self.x1-self.x0),(self.y1-self.y0)
def union(
self, bbox)
constructs the bounding box that is the union of this bounding box and the input bbox
def union(self,bbox): """ constructs the bounding box that is the union of this bounding box and the input bbox """ ret = Bbox( self.x0, self.y0, self.x1, self.y1 ) ret.x0 = bbox.x0 if bbox.x0 < self.x0 else self.x0 ret.y0 = bbox.y0 if bbox.y0 < self.y0 else self.y0 ret.x1 = bbox.x1 if bbox.x1 > self.x1 else self.x1 ret.y1 = bbox.y1 if bbox.y1 > self.y1 else self.y1 return (ret)
Instance variables
var x0
var x1
var y0
var y1
class Circle
Display list object for a circle
class Circle(DisplayList): """Display list object for a circle""" def __init__(self, x,y,radius,color,fill=False, parent=None): """ x,y center of circle, radius is the radius,color is the color of the circle, fill is true to fill the circle """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.radius = radius self.color = color self.fill = fill self.bbox = None def get_center( self ): """ return the center of the circle """ return (self.x, self.y) def set_center( self, center ): """ set the center of the circle """ self.x, self.y = center self.invalidate() def get_radius( self ): """ return the center of the circle """ return self.radius def set_radius( self, radius ): """ set the center of the circle """ self.radius = radius self.invalidate() def get_color( self ): """ return the color of the circle """ return self.color def set_color( self, color): """ set the color of the circle """ self.color = color self.invalidate() def get_fill( self ): """ return the fill state of the circle """ return self.fill def set_fill( self, fill): """ set the filled state of the circle """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw the requested circle """ cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.circle(cx,cy,sr,self.color,self.fill) def get_bbox(self): """ compute the bbox of the circle """ ret = self.bbox if self.canvas and self.modified: cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.bbox = ret = Bbox(self.x-sr,self.y-sr,self.x+sr,self.y+sr) self.modified = False return ret
Ancestors (in MRO)
- Circle
- DisplayList
- builtins.object
Static methods
def __init__(
self, x, y, radius, color, fill=False, parent=None)
x,y center of circle, radius is the radius,color is the color of the circle, fill is true to fill the circle
def __init__(self, x,y,radius,color,fill=False, parent=None): """ x,y center of circle, radius is the radius,color is the color of the circle, fill is true to fill the circle """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.radius = radius self.color = color self.fill = fill self.bbox = None
def add_child(
self, child)
append a child to the list of children of this object
def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate()
def bounds(
self)
return the bounds of the current drawing surface
def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1])
def get_bbox(
self)
compute the bbox of the circle
def get_bbox(self): """ compute the bbox of the circle """ ret = self.bbox if self.canvas and self.modified: cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.bbox = ret = Bbox(self.x-sr,self.y-sr,self.x+sr,self.y+sr) self.modified = False return ret
def get_canvas(
self)
get the canvas for this display list
def get_canvas(self): """ get the canvas for this display list """ return self.canvas
def get_center(
self)
return the center of the circle
def get_center( self ): """ return the center of the circle """ return (self.x, self.y)
def get_children(
self)
return the children of this object if any
def get_children(self): """ return the children of this object if any """ return self.children
def get_color(
self)
return the color of the circle
def get_color( self ): """ return the color of the circle """ return self.color
def get_fill(
self)
return the fill state of the circle
def get_fill( self ): """ return the fill state of the circle """ return self.fill
def get_parent(
self)
get the parent of this object
def get_parent(self): """ get the parent of this object """ return(self.parent)
def get_radius(
self)
return the center of the circle
def get_radius( self ): """ return the center of the circle """ return self.radius
def handle(
self, event)
handle an input event, return None if handled, event if not
def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event
def invalidate(
self)
mark this object and it's parent as invalidated
def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate()
def is_focus(
self)
return the current focus state
def is_focus( self ): """ return the current focus state """ return self.focus
def is_modified(
self)
does this display list contain modified objects
def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified
def pick(
self, row, col)
return the topmost opject at row,col for mouse selection
def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None
def remove_child(
self, child)
remove this child from the list of children of this object
def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None)
def render(
self)
override rendering to draw the requested circle
def render(self): """ override rendering to draw the requested circle """ cx,cy = self.transform( self.x,self.y ) dx,dy = self.transform( self.x+self.radius, self.y ) sr = dx-cx self.canvas.circle(cx,cy,sr,self.color,self.fill)
def set_canvas(
self, canvas)
set the canvas and the scaling transformation
def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas)
def set_center(
self, center)
set the center of the circle
def set_center( self, center ): """ set the center of the circle """ self.x, self.y = center self.invalidate()
def set_children(
self, children)
set the children of this object to a new list of children
def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
def set_color(
self, color)
set the color of the circle
def set_color( self, color): """ set the color of the circle """ self.color = color self.invalidate()
def set_fill(
self, fill)
set the filled state of the circle
def set_fill( self, fill): """ set the filled state of the circle """ self.fill = fill self.invalidate()
def set_focus(
self, state)
set focus to True or False to tell graph to render in focus mode
def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True
def set_parent(
self, parent)
set the parent of this object
def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas())
def set_radius(
self, radius)
set the center of the circle
def set_radius( self, radius ): """ set the center of the circle """ self.radius = radius self.invalidate()
def transform(
self, x, y)
apply current transform to point
def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1])
Instance variables
var bbox
var color
var fill
var radius
var x
var y
class DisplayList
Base object for all display list objects
class DisplayList: """ Base object for all display list objects """ def __init__(self, parent = None, children = None, canvas=None): """ constructor, takes a parent object to be contained within and a list of children object to contain """ self.parent = parent if children: self.children = children else: self.children = [] # modified flag indicates if the object has been changed self.modified = True # initialize bbox self.bbox = None # set up canvas self.canvas = None self.xform = [1.0,1.0] self.focus = False if canvas: self.set_canvas(canvas) elif parent: self.set_canvas(parent.get_canvas()) def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True def is_focus( self ): """ return the current focus state """ return self.focus def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas()) def get_parent(self): """ get the parent of this object """ return(self.parent) def get_canvas(self): """ get the canvas for this display list """ return self.canvas def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas) def get_bbox(self): """ computes the bounding box of the display list object """ ret = self.bbox if self.modified: ret = self.bbox = None for c in self.children: if not ret: ret = c.get_bbox() else: ret = ret.union(c.get_bbox()) self.bbox = ret self.modified = False return (ret) def render(self): """ draw the object on the suppied canvas """ for c in self.children: c.render() def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1]) def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1]) def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate() def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate() def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None) def get_children(self): """ return the children of this object if any """ return self.children def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
Ancestors (in MRO)
- DisplayList
- builtins.object
Static methods
def __init__(
self, parent=None, children=None, canvas=None)
constructor, takes a parent object to be contained within and a list of children object to contain
def __init__(self, parent = None, children = None, canvas=None): """ constructor, takes a parent object to be contained within and a list of children object to contain """ self.parent = parent if children: self.children = children else: self.children = [] # modified flag indicates if the object has been changed self.modified = True # initialize bbox self.bbox = None # set up canvas self.canvas = None self.xform = [1.0,1.0] self.focus = False if canvas: self.set_canvas(canvas) elif parent: self.set_canvas(parent.get_canvas())
def add_child(
self, child)
append a child to the list of children of this object
def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate()
def bounds(
self)
return the bounds of the current drawing surface
def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1])
def get_bbox(
self)
computes the bounding box of the display list object
def get_bbox(self): """ computes the bounding box of the display list object """ ret = self.bbox if self.modified: ret = self.bbox = None for c in self.children: if not ret: ret = c.get_bbox() else: ret = ret.union(c.get_bbox()) self.bbox = ret self.modified = False return (ret)
def get_canvas(
self)
get the canvas for this display list
def get_canvas(self): """ get the canvas for this display list """ return self.canvas
def get_children(
self)
return the children of this object if any
def get_children(self): """ return the children of this object if any """ return self.children
def get_parent(
self)
get the parent of this object
def get_parent(self): """ get the parent of this object """ return(self.parent)
def handle(
self, event)
handle an input event, return None if handled, event if not
def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event
def invalidate(
self)
mark this object and it's parent as invalidated
def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate()
def is_focus(
self)
return the current focus state
def is_focus( self ): """ return the current focus state """ return self.focus
def is_modified(
self)
does this display list contain modified objects
def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified
def pick(
self, row, col)
return the topmost opject at row,col for mouse selection
def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None
def remove_child(
self, child)
remove this child from the list of children of this object
def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None)
def render(
self)
draw the object on the suppied canvas
def render(self): """ draw the object on the suppied canvas """ for c in self.children: c.render()
def set_canvas(
self, canvas)
set the canvas and the scaling transformation
def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas)
def set_children(
self, children)
set the children of this object to a new list of children
def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
def set_focus(
self, state)
set focus to True or False to tell graph to render in focus mode
def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True
def set_parent(
self, parent)
set the parent of this object
def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas())
def transform(
self, x, y)
apply current transform to point
def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1])
Instance variables
var bbox
var canvas
var focus
var modified
var parent
var xform
class PolyLine
Display list object for polyline
class PolyLine(DisplayList): """Display list object for polyline""" def __init__(self,points,color,parent=None): """ points is a list of (x,y) tuples in order to be drawn as a polyline in color """ self.points = points self.color = color self.bbox = None self.transformed_points = None DisplayList.__init__(self,parent,None,None) def get_color( self ): """ return the color of the polyline """ return self.color def set_color( self, color): """ set the color of the polyline """ self.color = color self.invalidate() def get_points(self): """ return a tuple of x,y tuples representing this PolyLine """ return tuple(self.points) def set_points(self,points): """ set the points of this polyline """ self.points = points self.invalidate() def transform_points( self ): """ get the transformed points """ if not self.transformed_points or self.modified: t_points = [] for x,y in self.points: t_points.append(self.transform(x,y)) self.transformed_points = t_points return self.transformed_points def get_bbox( self ): """ get the bounding box """ if (not self.transformed_points or self.modified) and self.canvas: if not self.bbox: self.bbox = Bbox() self.bbox.x0,self.bbox.y0,self.bbox.x1,self.bbox.y1 = self.canvas.get_bounds(self.transform_points()) self.modified = False return self.bbox def render(self): """ override rendering to draw requested polyline """ self.canvas.polyline(self.transform_points(),self.color)
Ancestors (in MRO)
- PolyLine
- DisplayList
- builtins.object
Static methods
def __init__(
self, points, color, parent=None)
points is a list of (x,y) tuples in order to be drawn as a polyline in color
def __init__(self,points,color,parent=None): """ points is a list of (x,y) tuples in order to be drawn as a polyline in color """ self.points = points self.color = color self.bbox = None self.transformed_points = None DisplayList.__init__(self,parent,None,None)
def add_child(
self, child)
append a child to the list of children of this object
def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate()
def bounds(
self)
return the bounds of the current drawing surface
def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1])
def get_bbox(
self)
get the bounding box
def get_bbox( self ): """ get the bounding box """ if (not self.transformed_points or self.modified) and self.canvas: if not self.bbox: self.bbox = Bbox() self.bbox.x0,self.bbox.y0,self.bbox.x1,self.bbox.y1 = self.canvas.get_bounds(self.transform_points()) self.modified = False return self.bbox
def get_canvas(
self)
get the canvas for this display list
def get_canvas(self): """ get the canvas for this display list """ return self.canvas
def get_children(
self)
return the children of this object if any
def get_children(self): """ return the children of this object if any """ return self.children
def get_color(
self)
return the color of the polyline
def get_color( self ): """ return the color of the polyline """ return self.color
def get_parent(
self)
get the parent of this object
def get_parent(self): """ get the parent of this object """ return(self.parent)
def get_points(
self)
return a tuple of x,y tuples representing this PolyLine
def get_points(self): """ return a tuple of x,y tuples representing this PolyLine """ return tuple(self.points)
def handle(
self, event)
handle an input event, return None if handled, event if not
def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event
def invalidate(
self)
mark this object and it's parent as invalidated
def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate()
def is_focus(
self)
return the current focus state
def is_focus( self ): """ return the current focus state """ return self.focus
def is_modified(
self)
does this display list contain modified objects
def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified
def pick(
self, row, col)
return the topmost opject at row,col for mouse selection
def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None
def remove_child(
self, child)
remove this child from the list of children of this object
def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None)
def render(
self)
override rendering to draw requested polyline
def render(self): """ override rendering to draw requested polyline """ self.canvas.polyline(self.transform_points(),self.color)
def set_canvas(
self, canvas)
set the canvas and the scaling transformation
def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas)
def set_children(
self, children)
set the children of this object to a new list of children
def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
def set_color(
self, color)
set the color of the polyline
def set_color( self, color): """ set the color of the polyline """ self.color = color self.invalidate()
def set_focus(
self, state)
set focus to True or False to tell graph to render in focus mode
def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True
def set_parent(
self, parent)
set the parent of this object
def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas())
def set_points(
self, points)
set the points of this polyline
def set_points(self,points): """ set the points of this polyline """ self.points = points self.invalidate()
def transform(
self, x, y)
apply current transform to point
def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1])
def transform_points(
self)
get the transformed points
def transform_points( self ): """ get the transformed points """ if not self.transformed_points or self.modified: t_points = [] for x,y in self.points: t_points.append(self.transform(x,y)) self.transformed_points = t_points return self.transformed_points
Instance variables
var bbox
var color
var points
var transformed_points
class Polygon
Display list object for a polygon, filled or not filled
class Polygon(PolyLine): """Display list object for a polygon, filled or not filled""" def __init__(self,points,color,fill,parent=None): """ points is a list of (x,y) tuples in order to be drawn as a closed polygon in color and if fill is True filled with color """ PolyLine.__init__(self,points,color,parent) self.fill = fill def get_fill( self ): """ return the fill state of the arc """ return self.fill def set_fill( self, fill): """ set the filled state of the arc """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw requested polygon """ self.canvas.polygon(self.transform_points(),self.color,self.fill)
Ancestors (in MRO)
- Polygon
- PolyLine
- DisplayList
- builtins.object
Static methods
def __init__(
self, points, color, fill, parent=None)
points is a list of (x,y) tuples in order to be drawn as a closed polygon in color and if fill is True filled with color
def __init__(self,points,color,fill,parent=None): """ points is a list of (x,y) tuples in order to be drawn as a closed polygon in color and if fill is True filled with color """ PolyLine.__init__(self,points,color,parent) self.fill = fill
def add_child(
self, child)
append a child to the list of children of this object
def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate()
def bounds(
self)
return the bounds of the current drawing surface
def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1])
def get_bbox(
self)
get the bounding box
def get_bbox( self ): """ get the bounding box """ if (not self.transformed_points or self.modified) and self.canvas: if not self.bbox: self.bbox = Bbox() self.bbox.x0,self.bbox.y0,self.bbox.x1,self.bbox.y1 = self.canvas.get_bounds(self.transform_points()) self.modified = False return self.bbox
def get_canvas(
self)
get the canvas for this display list
def get_canvas(self): """ get the canvas for this display list """ return self.canvas
def get_children(
self)
return the children of this object if any
def get_children(self): """ return the children of this object if any """ return self.children
def get_color(
self)
return the color of the polyline
def get_color( self ): """ return the color of the polyline """ return self.color
def get_fill(
self)
return the fill state of the arc
def get_fill( self ): """ return the fill state of the arc """ return self.fill
def get_parent(
self)
get the parent of this object
def get_parent(self): """ get the parent of this object """ return(self.parent)
def get_points(
self)
return a tuple of x,y tuples representing this PolyLine
def get_points(self): """ return a tuple of x,y tuples representing this PolyLine """ return tuple(self.points)
def handle(
self, event)
handle an input event, return None if handled, event if not
def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event
def invalidate(
self)
mark this object and it's parent as invalidated
def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate()
def is_focus(
self)
return the current focus state
def is_focus( self ): """ return the current focus state """ return self.focus
def is_modified(
self)
does this display list contain modified objects
def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified
def pick(
self, row, col)
return the topmost opject at row,col for mouse selection
def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None
def remove_child(
self, child)
remove this child from the list of children of this object
def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None)
def render(
self)
override rendering to draw requested polygon
def render(self): """ override rendering to draw requested polygon """ self.canvas.polygon(self.transform_points(),self.color,self.fill)
def set_canvas(
self, canvas)
set the canvas and the scaling transformation
def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas)
def set_children(
self, children)
set the children of this object to a new list of children
def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
def set_color(
self, color)
set the color of the polyline
def set_color( self, color): """ set the color of the polyline """ self.color = color self.invalidate()
def set_fill(
self, fill)
set the filled state of the arc
def set_fill( self, fill): """ set the filled state of the arc """ self.fill = fill self.invalidate()
def set_focus(
self, state)
set focus to True or False to tell graph to render in focus mode
def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True
def set_parent(
self, parent)
set the parent of this object
def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas())
def set_points(
self, points)
set the points of this polyline
def set_points(self,points): """ set the points of this polyline """ self.points = points self.invalidate()
def transform(
self, x, y)
apply current transform to point
def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1])
def transform_points(
self)
get the transformed points
def transform_points( self ): """ get the transformed points """ if not self.transformed_points or self.modified: t_points = [] for x,y in self.points: t_points.append(self.transform(x,y)) self.transformed_points = t_points return self.transformed_points
Instance variables
var fill
class Rect
Display list object for a rectangle
class Rect(DisplayList): """Display list object for a rectangle""" def __init__(self,x0,y0,x1,y1,color,fill=False,parent=None): """ x0,y0 upper left corner of box, x1,y1 lower right corner of box, color is color, fill=True to fill parent is parent object """ DisplayList.__init__(self,parent,None,None) self.x0 = x0 self.y0 = y0 self.x1 = x1 self.y1 = y1 self.color = color self.fill = fill self.bbox = None def get_points( self ): """ return the rectangle's raw points """ return ((self.x0,self.y0),(self.x1,self.y1)) def set_points( self, points ): """ set the rectangle's raw points """ self.x0,self.y0 = points[0] self.x1,self.y1 = points[1] self.invalidate() def get_color( self ): """ return the color of the rectangle """ return self.color def set_color( self, color): """ set the color of the rectangle """ self.color = color self.invalidate() def get_fill( self ): """ return the fill state of the rectangle """ return self.fill def set_fill( self, fill): """ set the filled state of the rectangle """ self.fill = fill self.invalidate() def render(self): """ override rendering to draw the requested rectangle """ x0,y0 = self.transform( self.x0,self.y0 ) x1,y1 = self.transform( self.x1,self.y1 ) self.canvas.rect(self.x0,self.y0,self.x1,self.y1,self.color,self.fill) def get_bbox(self): """ get the bounding box for the rectangle """ ret = self.bbox if self.modified and self.canvas: x0,y0 = self.transform( self.x0,self.y0 ) x1,y1 = self.transform( self.x1,self.y1 ) self.bbox = ret = Bbox(x0,y0,x1,y1) self.modified = False return self.bbox
Ancestors (in MRO)
- Rect
- DisplayList
- builtins.object
Static methods
def __init__(
self, x0, y0, x1, y1, color, fill=False, parent=None)
x0,y0 upper left corner of box, x1,y1 lower right corner of box, color is color, fill=True to fill parent is parent object
def __init__(self,x0,y0,x1,y1,color,fill=False,parent=None): """ x0,y0 upper left corner of box, x1,y1 lower right corner of box, color is color, fill=True to fill parent is parent object """ DisplayList.__init__(self,parent,None,None) self.x0 = x0 self.y0 = y0 self.x1 = x1 self.y1 = y1 self.color = color self.fill = fill self.bbox = None
def add_child(
self, child)
append a child to the list of children of this object
def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate()
def bounds(
self)
return the bounds of the current drawing surface
def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1])
def get_bbox(
self)
get the bounding box for the rectangle
def get_bbox(self): """ get the bounding box for the rectangle """ ret = self.bbox if self.modified and self.canvas: x0,y0 = self.transform( self.x0,self.y0 ) x1,y1 = self.transform( self.x1,self.y1 ) self.bbox = ret = Bbox(x0,y0,x1,y1) self.modified = False return self.bbox
def get_canvas(
self)
get the canvas for this display list
def get_canvas(self): """ get the canvas for this display list """ return self.canvas
def get_children(
self)
return the children of this object if any
def get_children(self): """ return the children of this object if any """ return self.children
def get_color(
self)
return the color of the rectangle
def get_color( self ): """ return the color of the rectangle """ return self.color
def get_fill(
self)
return the fill state of the rectangle
def get_fill( self ): """ return the fill state of the rectangle """ return self.fill
def get_parent(
self)
get the parent of this object
def get_parent(self): """ get the parent of this object """ return(self.parent)
def get_points(
self)
return the rectangle's raw points
def get_points( self ): """ return the rectangle's raw points """ return ((self.x0,self.y0),(self.x1,self.y1))
def handle(
self, event)
handle an input event, return None if handled, event if not
def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event
def invalidate(
self)
mark this object and it's parent as invalidated
def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate()
def is_focus(
self)
return the current focus state
def is_focus( self ): """ return the current focus state """ return self.focus
def is_modified(
self)
does this display list contain modified objects
def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified
def pick(
self, row, col)
return the topmost opject at row,col for mouse selection
def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None
def remove_child(
self, child)
remove this child from the list of children of this object
def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None)
def render(
self)
override rendering to draw the requested rectangle
def render(self): """ override rendering to draw the requested rectangle """ x0,y0 = self.transform( self.x0,self.y0 ) x1,y1 = self.transform( self.x1,self.y1 ) self.canvas.rect(self.x0,self.y0,self.x1,self.y1,self.color,self.fill)
def set_canvas(
self, canvas)
set the canvas and the scaling transformation
def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas)
def set_children(
self, children)
set the children of this object to a new list of children
def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
def set_color(
self, color)
set the color of the rectangle
def set_color( self, color): """ set the color of the rectangle """ self.color = color self.invalidate()
def set_fill(
self, fill)
set the filled state of the rectangle
def set_fill( self, fill): """ set the filled state of the rectangle """ self.fill = fill self.invalidate()
def set_focus(
self, state)
set focus to True or False to tell graph to render in focus mode
def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True
def set_parent(
self, parent)
set the parent of this object
def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas())
def set_points(
self, points)
set the rectangle's raw points
def set_points( self, points ): """ set the rectangle's raw points """ self.x0,self.y0 = points[0] self.x1,self.y1 = points[1] self.invalidate()
def transform(
self, x, y)
apply current transform to point
def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1])
Instance variables
var bbox
var color
var fill
var x0
var x1
var y0
var y1
class Text
Display list object for text
class Text(DisplayList): """Display list object for text""" def __init__(self, x,y,message,color,parent=None): """ x,y is the position of the first character, message is the text to display, color is the color """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.message = message self.color = color self.bbox = None def get_location(self): """ get the text location """ return (self.x,self.y) def set_location(self, location): """ set the text location """ self.x, self.y = location self.invalidate() def get_message(self): """ get the message """ return self.message def set_message(self, message): """ set the message """ self.message = message self.invalidate() def get_color( self ): """ return the color of the text """ return self.color def set_color( self, color): """ set the color of the text """ self.color = color self.invalidate() def render(self): """ override rendering to draw the requested text """ cx,cy = self.transform( self.x,self.y ) self.canvas.textat(cx,cy,self.color,self.message) def get_bbox(self): """compute bounding box of text""" ret = self.bbox if self.canvas and self.modified: cx,cy = self.transform(self.x,self.y) cx,cy = self.canvas.round_text_position(cx,cy) ty,tx = self.canvas.from_rowcol(1,len(self.message)) max_x,max_y = self.canvas.get_maxxy() cx1 = cx+tx cy1 = cy+ty if cx1 > max_x: cx1 = max_x if cy1 > max_y: cy1 = max_y self.bbox = ret = Bbox(cx,cy,cx+tx,cy+ty) self.modified = False return ret
Ancestors (in MRO)
- Text
- DisplayList
- builtins.object
Static methods
def __init__(
self, x, y, message, color, parent=None)
x,y is the position of the first character, message is the text to display, color is the color
def __init__(self, x,y,message,color,parent=None): """ x,y is the position of the first character, message is the text to display, color is the color """ DisplayList.__init__(self,parent,None,None) self.x = x self.y = y self.message = message self.color = color self.bbox = None
def add_child(
self, child)
append a child to the list of children of this object
def add_child(self, child ): """ append a child to the list of children of this object """ self.children.append(child) child.set_parent(self) child.set_canvas(self.get_canvas()) self.invalidate()
def bounds(
self)
return the bounds of the current drawing surface
def bounds(self): """ return the bounds of the current drawing surface """ max_x,max_y = self.canvas.get_maxxy() return (0.0,0.0,max_x/self.xform[0],max_y/self.xform[1])
def get_bbox(
self)
compute bounding box of text
def get_bbox(self): """compute bounding box of text""" ret = self.bbox if self.canvas and self.modified: cx,cy = self.transform(self.x,self.y) cx,cy = self.canvas.round_text_position(cx,cy) ty,tx = self.canvas.from_rowcol(1,len(self.message)) max_x,max_y = self.canvas.get_maxxy() cx1 = cx+tx cy1 = cy+ty if cx1 > max_x: cx1 = max_x if cy1 > max_y: cy1 = max_y self.bbox = ret = Bbox(cx,cy,cx+tx,cy+ty) self.modified = False return ret
def get_canvas(
self)
get the canvas for this display list
def get_canvas(self): """ get the canvas for this display list """ return self.canvas
def get_children(
self)
return the children of this object if any
def get_children(self): """ return the children of this object if any """ return self.children
def get_color(
self)
return the color of the text
def get_color( self ): """ return the color of the text """ return self.color
def get_location(
self)
get the text location
def get_location(self): """ get the text location """ return (self.x,self.y)
def get_message(
self)
get the message
def get_message(self): """ get the message """ return self.message
def get_parent(
self)
get the parent of this object
def get_parent(self): """ get the parent of this object """ return(self.parent)
def handle(
self, event)
handle an input event, return None if handled, event if not
def handle(self, event ): """ handle an input event, return None if handled, event if not """ return event
def invalidate(
self)
mark this object and it's parent as invalidated
def invalidate(self): """ mark this object and it's parent as invalidated """ self.modified = True if self.parent: self.parent.invalidate()
def is_focus(
self)
return the current focus state
def is_focus( self ): """ return the current focus state """ return self.focus
def is_modified(
self)
does this display list contain modified objects
def is_modified(self): """ does this display list contain modified objects """ modified = self.modified for c in self.children: modified = modified or c.is_modified() return modified
def pick(
self, row, col)
return the topmost opject at row,col for mouse selection
def pick(self, row, col): """ return the topmost opject at row,col for mouse selection """ for c in self.children: o = c.pick(row,col) if o: return o b = self.get_bbox() ulrow,ulcol = self.canvas.to_rowcol(*self.transform(b.x0,b.y0)) lrrow,lrcol = self.canvas.to_rowcol(*self.transform(b.x1,b.y1)) if row >= ulrow and row <= lrrow and col >= ulcol and col <= lrcol: return self else: return None
def remove_child(
self, child)
remove this child from the list of children of this object
def remove_child(self, child ): """ remove this child from the list of children of this object """ self.children.remove(child) child.set_parent(None)
def render(
self)
override rendering to draw the requested text
def render(self): """ override rendering to draw the requested text """ cx,cy = self.transform( self.x,self.y ) self.canvas.textat(cx,cy,self.color,self.message)
def set_canvas(
self, canvas)
set the canvas and the scaling transformation
def set_canvas(self,canvas): """ set the canvas and the scaling transformation """ self.xform = [1.0,1.0] self.canvas = canvas self.modified = True for c in self.children: c.set_canvas(canvas)
def set_children(
self, children)
set the children of this object to a new list of children
def set_children(self, children): """ set the children of this object to a new list of children """ self.children = children for c in children: c.set_parent(self) c.set_canvas(self.get_canvas()) self.invalidate()
def set_color(
self, color)
set the color of the text
def set_color( self, color): """ set the color of the text """ self.color = color self.invalidate()
def set_focus(
self, state)
set focus to True or False to tell graph to render in focus mode
def set_focus( self, state ): """ set focus to True or False to tell graph to render in focus mode """ self.focus = state self.modified = True
def set_location(
self, location)
set the text location
def set_location(self, location): """ set the text location """ self.x, self.y = location self.invalidate()
def set_message(
self, message)
set the message
def set_message(self, message): """ set the message """ self.message = message self.invalidate()
def set_parent(
self, parent)
set the parent of this object
def set_parent(self,parent): """ set the parent of this object """ self.parent = parent self.set_canvas(parent.get_canvas())
def transform(
self, x, y)
apply current transform to point
def transform(self, x, y ): """ apply current transform to point """ return (x*self.xform[0], y*self.xform[1])
Instance variables
var bbox
var color
var message
var x
var y