Changeset - 49f72f9d4cc9
[Not reviewed]
default
0 0 4
volker - 10 years ago 2015-06-22 16:15:05
volker.jaenisch@inqbus.de
Initial version
4 files changed with 203 insertions and 0 deletions:
0 comments (0 inline, 0 general)
src/graph/__init__.py
Show inline comments
 
new file 100644
src/graph/app.py
Show inline comments
 
new file 100644
 
from zope.interface import Interface
 
from zope.interface import implements
 

	
 
from graph.components import BaseComponent, Image
 
from graph.interfaces import IAxis, IViewBox
 

	
 

	
 
class IPlotImage(Interface):
 
    """
 
    Componante to plot a 2d graph of a given image
 
    """
 

	
 

	
 
class PlotImage( BaseComponent):
 
    """
 
    Makes a 2D plot for an image
 
    """
 
    implements(IPlotImage)
 

	
 
    def __init__(self, parent, image):
 
        super(PlotImage, self).__init__(parent)
 
        self.image = image
 
        self.x_axis = IAxis(self)
 
        self.x_axis.orientation='bottom'
 
        self.x_axis.start=0
 
        self.x_axis.end=8
 

	
 
        self.y_axis = IAxis(self)
 
        self.y_axis.orientation='left'
 
        self.y_axis.start=-5
 
        self.y_axis.end=3
 

	
 
        self.vb = IViewBox(self)
 

	
 
        self.vb.addItem( self.x_axis )
 
        self.vb.addItem( self.y_axis )
 
        self.vb.addItem( self.image )
 

	
 
    def render(self):
 
        return self.vb.render()
 

	
 

	
 

	
 
image = Image(None, None)
 
plot =  PlotImage( None, image)
 
print( plot.render())
 

	
src/graph/components.py
Show inline comments
 
new file 100644
 

	
 
from zope.interface import implements, implementsOnly, Interface
 
from zope.component import adapts, getGlobalSiteManager
 

	
 
from graph.interfaces import ITickLabelAdapter
 
from graph.interfaces import IAxis
 
from graph.interfaces import IViewBox
 
from graph.interfaces import IImage
 
from graph.interfaces import IBaseAdapter
 

	
 

	
 
gsm = getGlobalSiteManager()
 

	
 

	
 
class BaseAdapter(object):
 
    """
 
    Base for all Adapters
 
    """
 
    implements(IBaseAdapter)
 

	
 
    def __init__(self, obj):
 
        """
 
        Gets an Object to be adapted
 
        """
 
        self.obj = obj
 

	
 

	
 
class BaseComponent(object):
 
    """
 
    """
 

	
 
    def __init__(self, parent):
 
        self.parent = parent
 

	
 

	
 
class TickLabelAdapter(BaseAdapter):
 
    """
 
    Generates Ticklabels for an axis
 
    """
 
    implementsOnly(ITickLabelAdapter)
 
    adapts(IAxis)
 

	
 
    def __init__(self, axis):
 
        """
 
        Gets an Object to be adapted
 
        """
 
        self.axis = axis
 

	
 
    def render(self):
 
        return map(str, range(self.axis.start, self.axis.end))
 

	
 
gsm.registerAdapter(TickLabelAdapter)
 

	
 

	
 
class Axis(BaseComponent):
 
    """
 
    Represents an axis
 
    """
 

	
 
    implements(IAxis)
 
    adapts(Interface)
 

	
 
    def __init__(self, parent, orientation=None, start=None, end=None):
 
        super(Axis, self).__init__(parent)
 
        self.orientation = orientation
 
        self.start = start
 
        self.end = end
 

	
 
    def get_tick_labels(self):
 
        return ITickLabelAdapter(self).render()
 

	
 
    def render(self):
 
        return 'axis: ' + self.orientation + ':' + ' '.join(self.get_tick_labels())
 

	
 
gsm.registerAdapter(Axis)
 

	
 

	
 
class ViewBox(BaseComponent):
 
    """
 
    Drawing area of a plot. THe drawing ares may have an unlimited number of axis
 
    """
 
    implements(IViewBox)
 
    adapts(Interface)
 

	
 

	
 
    def __init__(self, parent):
 
        super(ViewBox, self).__init__(parent)
 
        self.items = []
 

	
 
    def addItem(self, item):
 
        self.items.append(item)
 

	
 
    def render(self):
 
        result = []
 
        for item in self.items:
 
            result.append(item.render())
 

	
 
        return '\n'.join(result)
 

	
 
gsm.registerAdapter(ViewBox)
 

	
 

	
 
class Image(BaseComponent):
 
    """
 
    A image representing f(x,y) values
 
    """
 
    implements(IImage)
 
    adapts(Interface)
 

	
 

	
 
    def __init__(self, parent, data):
 
        super(Image, self).__init__(parent)
 
        self.data = data
 

	
 
    def render(self):
 
        return 'Image: Rendered image'
 

	
 
gsm.registerAdapter(Image)
src/graph/interfaces.py
Show inline comments
 
new file 100644
 

	
 
from zope.interface import Interface
 

	
 
# ADAPTER BASE CLASSES
 
class IBaseAdapter(Interface):
 
    """
 
    Base of all adapters
 
    """
 
    def __init__(self, obj):
 
        """
 
        Gets an Object to be adapted
 
        """
 

	
 

	
 
class IAxis(Interface):
 
    """
 
    Axis interface
 
    """
 
    def __init__(self, parent):
 
        """
 
        createed with knowledge of its parent component
 
        """
 

	
 
class ITickLabelAdapter(Interface):
 
    """
 
    An adapter that produces tick labels for an axis
 
    """
 

	
 
class IViewBox(Interface):
 
    """
 
    Container to display some components
 
    """
 

	
 
class IImage(Interface):
 
    """
 
    Some xy data
 
    """
 

	
0 comments (0 inline, 0 general)