From b2d86b81813dd3244bd8a13b85d7a907ac6e8a0a Mon Sep 17 00:00:00 2001 From: Skyler Lehmkuhl Date: Wed, 11 Jan 2012 15:47:29 -0500 Subject: [PATCH] Can now switch between paint brush modes --- lightningbeam | 2 +- lightningbeam_windows.py | 25 +++++++++++++++++--- misc_funcs.py | 6 ++--- svlgui.py | 50 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 7 deletions(-) diff --git a/lightningbeam b/lightningbeam index 233da6e..51eb146 100755 --- a/lightningbeam +++ b/lightningbeam @@ -87,7 +87,7 @@ def onMouseUpGroup(self, x, y): self.cshape = None elif svlgui.MODE=="p": print len(self.cshape.shapedata) - self.cshape.shapedata = misc_funcs.simplify_shape(self.cshape.shapedata, "curve",1) + self.cshape.shapedata = misc_funcs.simplify_shape(self.cshape.shapedata, svlgui.PMODE.split()[-1],1) print len(self.cshape.shapedata) self.cshape = None MainWindow.stage.draw() diff --git a/lightningbeam_windows.py b/lightningbeam_windows.py index a0d6d5f..702d883 100644 --- a/lightningbeam_windows.py +++ b/lightningbeam_windows.py @@ -218,11 +218,27 @@ class MainWindowOSX: self.toolbox.buttons[4][0].onPress = pen self.toolbox.buttons[4][1].onPress = paint_bucket self.scriptwindow = svlgui.TextView() - self.frame.layout_self( [self.toolbox,0,None,0,0,"nws",""], + self.paintgroup = svlgui.RadioGroup("Draw straight", "Draw smooth", "Draw as inked") + def setmode(self): + svlgui.PMODE = self.value + self.paintgroup.action = setmode + self.paintbox = svlgui.Frame() + self.pboptions = svlgui.Label("Paintbrush Options") + self.paintbox.layout_self([self.pboptions,0,0,0,None,"news",""], + [self.paintgroup[0],0,0,self.pboptions._int(),None,"new",""], + [self.paintgroup[1],0,0,self.paintgroup[0]._int(),None,"new",""], + [self.paintgroup[2],0,0,self.paintgroup[1]._int(),None,"new",""]) + #) + self.frame.layout_self( [self.toolbox,0,None,0,None,"nw",""], + #[self.paintbox,0,245,0,0,"nws","v"], [self.timelinebox,self.toolbox._int()+148,-500,0,None,"new","hv"], + #[self.timelinebox,self.paintbox._int()+148,-500,0,None,"new","hv"], [self.layerbox,self.toolbox._int(),self.toolbox._int().width+150,0,None,"n","v"], + #[self.layerbox,self.paintbox._int(),self.toolbox._int().width+150,0,None,"n","v"], [self.scriptwindow,self.timelinebox._int(),0,0,0,"nse", "hv"], - [self.stage,self.toolbox._int(),self.scriptwindow._int(),self.timelinebox._int()+2,0,"nsew", "hv"] ) + [self.stage,self.toolbox._int(),self.scriptwindow._int(),self.timelinebox._int()+2,0,"nsew", "hv"], + [self.paintbox,0,self.stage._int(),self.toolbox._int(),0,"nws","v"] ) + #[self.stage,self.paintbox._int(),self.scriptwindow._int(),self.timelinebox._int()+2,0,"nsew", "hv"] ) self.window.add(self.frame) # use mainwindowosx, this is just to comment things out @@ -261,7 +277,10 @@ class MainWindowHTML: self.toolbox.buttons[4][0].onPress = pen self.toolbox.buttons[4][1].onPress = paint_bucket self.scriptwindow = svlgui.TextView() - self.frame.layout_self( [self.toolbox,0,None,0,0,"nws",""], + self.paintgroup = svlgui.RadioGroup("Draw straight", "Draw smooth", "Draw as inked") + self.paintbox = svlgui.VBox([[svlgui.Label("Paintbrush Options")._int()],[self.paintgroup]]) + self.frame.layout_self( [self.toolbox,0,None,0,None,"nw",""], + [self.paintbox,0,None,self.toolbox._int(),0,"nws","v"], [self.timelinebox,self.toolbox._int()+148,-500,0,None,"new","hv"], [self.layerbox,self.toolbox._int(),self.toolbox._int().width+150,0,None,"n","v"], [self.scriptwindow,self.timelinebox._int(),0,0,0,"nse", "hv"], diff --git a/misc_funcs.py b/misc_funcs.py index 0e81aa7..10773f5 100644 --- a/misc_funcs.py +++ b/misc_funcs.py @@ -105,7 +105,7 @@ def catmullRom2bezier( points ) : return d; def simplify_shape(shape,mode,iterations): - if mode in ("straight","curve"): + if mode in ("straight","smooth"): for i in xrange(iterations): for j in reversed(range(len(shape))): if j>0 and j(165-500/(ab+bc)): # at least 15 degrees away from straight angle del shape[j] - if mode=="curve": + if mode=="smooth": shape = catmullRom2bezier([shape[0]]*2+shape+[shape[-1]]) print shape - return shape#+nshape + return shape#+nshape # Timer module - not mine diff --git a/svlgui.py b/svlgui.py index c8a2f62..030630d 100644 --- a/svlgui.py +++ b/svlgui.py @@ -25,6 +25,10 @@ import re # "b": paint bucket tool ''' MODE="e" + +#Painbrush mode +PMODE = "Draw straight" + SITER=0 #Currentframe - the frame selected on the timeline. Not necessarily the frame being shown. @@ -139,6 +143,7 @@ if sys.platform=="linux2": import GUI # Using PyGUI. Experimental. from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage from GUI import Frame as OSXFrame, Color as OSXColor, Grid as OSXGrid + from GUI import Label as OSXLabel, RadioGroup as OSXRadioGroup, RadioButton as OSXRadioButton from GUI import Column, Row, ScrollableView, TextEditor, Colors from GUI import StdCursors, Alerts, FileDialogs, Font from GUI.StdMenus import basic_menus, file_cmds, print_cmds @@ -159,6 +164,7 @@ elif sys.platform=="win32": import GUI # Using PyGUI. Experimental. from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage from GUI import Frame as OSXFrame, Color as OSXColor, Grid as OSXGrid + from GUI import Label as OSXLabel, RadioGroup as OSXRadioGroup, RadioButton as OSXRadioButton from GUI import Column, Row, ScrollableView, TextEditor, Colors from GUI import StdCursors, Alerts, FileDialogs, Font from GUI.StdMenus import basic_menus, file_cmds, print_cmds @@ -180,6 +186,7 @@ elif sys.platform=="darwin": import GUI # Using PyGUI. Experimental. from GUI import Window as OSXWindow, Button as OSXButton, Image as OSXImage from GUI import Frame as OSXFrame, Color as OSXColor, Grid as OSXGrid + from GUI import Label as OSXLabel, RadioGroup as OSXRadioGroup, RadioButton as OSXRadioButton from GUI import Column, Row, ScrollableView, TextEditor, Colors from GUI import StdCursors, Alerts, FileDialogs, Font from GUI.StdMenus import basic_menus, file_cmds, print_cmds @@ -467,7 +474,50 @@ class HBox(Widget): td = htmlobj("td") td.add(objint) self.tr.add(td) +class Label(Widget): + def _gettext(self): + if SYSTEM=="osx": + return self.label.text + def _settext(self,text): + if SYSTEM=="osx": + self.label.text=text + text = property(_gettext,_settext) + def __init__(self, text=""): + if SYSTEM=="osx": + self.label = OSXLabel() + self.label.text = text + def _int(self): + if SYSTEM=="osx": + return self.label +class RadioGroup(Widget): + def __getitem__(self,num): + return self.buttons[num] + def __init__(self,*args): + self.buttons = [] + for i in args: + self.buttons.append(RadioButton(i)) + self.group = OSXRadioGroup([j._int() for j in self.buttons]) + self.group.value = args[0] + self.group.action = self._action + def _int(self): + return self.group + def _getvalue(self): + return self.group.value + def _setvalue(self,value): + self.group.value = value + value = property(_getvalue, _setvalue) + def _action(self): + self.action(self) + def action(self,self1=None): + pass +class RadioButton(Widget): + def __init__(self,title): + if SYSTEM=="osx": + self.button = OSXRadioButton(title=title,value=title) + def _int(self): + return self.button + class Grid(Widget): def __init__(self,*args): if SYSTEM=="osx":