SOLVED Vanilla object and drawing in TinyDrawbot



  • Hi Frederik,

    I'd like to control the TinyDrawbot Canvas through a small interface built with Vanilla.

    I am trying to achieve something similar to these example:
    http://drawbot.readthedocs.org/en/latest/content/variables.html
    http://doc.robofont.com/api/mojo/mojo-canvas/ (at the bottom of the page)

    My plugin has a draw() method where I’ve put all the drawbot drawing commands, but nothing happens in the canvas.

    Here a short example of the code structure:

    from vanilla import *
    
    def drawRect(side):
        rect(0,0,side,side)
    
    class SliderDemo(object):
    
         def __init__(self):
             self.w = Window((200, 43))
             self.w.slider = Slider((10, 10, -10, 23),
                       tickMarkCount=10,
                       callback=self.sliderCallback)
             self.w.open()
    
         def sliderCallback(self, sender):
             drawRect(float(sender.get())*100)
    
    SliderDemo()
    

    Any suggestion about how to deal correctly with this?

    Thanks


  • admin

    oh, here is an example, it is required to install the drawBot extension, get it here: https://github.com/typemytype/drawBotRoboFontExtension

    import drawBot
    from drawBot.ui.drawView import DrawView
    
    from vanilla import *
    
    class Test(object):
        
        def __init__(self):
            
            self.w = Window((400, 400), minSize=(200, 200))
            self.w.s = Slider((10, 10, -10, 22), minValue=10, maxValue=100, value=50, callback=self.sliderCallback)
            self.w.c = DrawView((10, 40, -10, -10))
            
            self.w.open()
    
        def sliderCallback(self, sender):
            value = sender.get()
            # start a new drawing
            drawBot.newDrawing()
            # add a page
            drawBot.newPage(100, 100)
            # draw something
            drawBot.rect(10, 10, value, value)
            # get the pdf data
            pdf = drawBot.pdfImage()
            # set the pdf data in the canvas
            self.w.c.setPDFDocument(pdf)
    
    Test()
    

    good luck!



  • Thanks, I'll try!


  • admin

    oh, here is an example, it is required to install the drawBot extension, get it here: https://github.com/typemytype/drawBotRoboFontExtension

    import drawBot
    from drawBot.ui.drawView import DrawView
    
    from vanilla import *
    
    class Test(object):
        
        def __init__(self):
            
            self.w = Window((400, 400), minSize=(200, 200))
            self.w.s = Slider((10, 10, -10, 22), minValue=10, maxValue=100, value=50, callback=self.sliderCallback)
            self.w.c = DrawView((10, 40, -10, -10))
            
            self.w.open()
    
        def sliderCallback(self, sender):
            value = sender.get()
            # start a new drawing
            drawBot.newDrawing()
            # add a page
            drawBot.newPage(100, 100)
            # draw something
            drawBot.rect(10, 10, value, value)
            # get the pdf data
            pdf = drawBot.pdfImage()
            # set the pdf data in the canvas
            self.w.c.setPDFDocument(pdf)
    
    Test()
    

    good luck!



  • Hi Frederik,
    I've probably not explained correctly.
    I'd like to act on the TinyDrawbot canvas, not the mojo one (it is what I am doing now for testing).

    So, maybe I can rephrase the question in this way: is it possible to point to the TinyDrawbot/Drawbot canvas –like to the mojo one– from a vanilla object?

    I need this kind of behavior:
    http://drawbot.readthedocs.org/en/latest/content/variables.html
    but I can't use the Variable class because I need more freedom concerning UI.

    hope this is more clear
    thanks


  • admin

    Hi Roberto

    In your example you don't have a canvas object that is able to show drawing callbacks.

    Please see the example http://doc.robofont.com/api/mojo/mojo-canvas/

    The slider just tells the canvas object to redraw itself. While getting a draw callback some drawBot methods are called to draw something into the canvas

    hope this helps

    good luck!