sceneeditor: get it to run with Python 3

This commit is contained in:
rdb 2018-08-10 23:53:33 +02:00
parent e99f8a7bcc
commit 3d383a3d9c
26 changed files with 665 additions and 591 deletions

View File

@ -36,7 +36,7 @@ class MetadataPanel(AppShell,Pmw.MegaWidget):
def appInit(self):
print "Metadata Panel"
print("Metadata Panel")
def createInterface(self):
interior = self.interior()

View File

@ -6,8 +6,16 @@ from direct.tkwidgets.AppShell import AppShell
from direct.tkwidgets.VectorWidgets import ColorEntry
from direct.showbase.TkGlobal import spawnTkLoop
import seSceneGraphExplorer
from Tkinter import Frame, IntVar, Checkbutton, Toplevel
import Pmw, Tkinter
import Pmw, sys
if sys.version_info >= (3, 0):
from tkinter import Frame, IntVar, Checkbutton, Toplevel
import tkinter
else:
from Tkinter import Frame, IntVar, Checkbutton, Toplevel
import Tkinter as tkinter
class sideWindow(AppShell):
#################################################################
@ -65,7 +73,7 @@ class sideWindow(AppShell):
self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
def appInit(self):
print '----SideWindow is Initialized!!'
print('----SideWindow is Initialized!!')
def createInterface(self):
# The interior of the toplevel panel
@ -73,7 +81,7 @@ class sideWindow(AppShell):
mainFrame = Frame(interior)
## Creat NoteBook
self.notebookFrame = Pmw.NoteBook(mainFrame)
self.notebookFrame.pack(fill=Tkinter.BOTH,expand=1)
self.notebookFrame.pack(fill=tkinter.BOTH,expand=1)
sgePage = self.notebookFrame.add('Tree Graph')
envPage = self.notebookFrame.add('World Setting')
self.notebookFrame['raisecommand'] = self.updateInfo
@ -83,7 +91,7 @@ class sideWindow(AppShell):
sgePage, nodePath = render,
scrolledCanvas_hull_width = 270,
scrolledCanvas_hull_height = 570)
self.SGE.pack(fill = Tkinter.BOTH, expand = 0)
self.SGE.pack(fill = tkinter.BOTH, expand = 0)
## World Setting Page
envPage = Frame(envPage)
@ -95,8 +103,8 @@ class sideWindow(AppShell):
text = 'Enable Lighting',
variable = self.LightingVar,
command = self.toggleLights)
self.LightingButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.LightingButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.CollisionVar = IntVar()
@ -106,8 +114,8 @@ class sideWindow(AppShell):
text = 'Show Collision Object',
variable = self.CollisionVar,
command = self.showCollision)
self.CollisionButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.CollisionButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.ParticleVar = IntVar()
@ -117,8 +125,8 @@ class sideWindow(AppShell):
text = 'Show Particle Dummy',
variable = self.ParticleVar,
command = self.enableParticle)
self.ParticleButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.ParticleButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.baseUseDriveVar = IntVar()
@ -128,8 +136,8 @@ class sideWindow(AppShell):
text = 'Enable base.usedrive',
variable = self.baseUseDriveVar,
command = self.enablebaseUseDrive)
self.baseUseDriveButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.baseUseDriveButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.backfaceVar = IntVar()
@ -139,8 +147,8 @@ class sideWindow(AppShell):
text = 'Enable BackFace',
variable = self.backfaceVar,
command = self.toggleBackface)
self.backfaceButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.backfaceButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.textureVar = IntVar()
@ -150,8 +158,8 @@ class sideWindow(AppShell):
text = 'Enable Texture',
variable = self.textureVar,
command = self.toggleTexture)
self.textureButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.textureButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.wireframeVar = IntVar()
@ -161,8 +169,8 @@ class sideWindow(AppShell):
text = 'Enable Wireframe',
variable = self.wireframeVar,
command = self.toggleWireframe)
self.wireframeButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.wireframeButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.gridVar = IntVar()
@ -172,8 +180,8 @@ class sideWindow(AppShell):
text = 'Enable Grid',
variable = self.gridVar,
command = self.toggleGrid)
self.gridButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.gridButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.widgetVisVar = IntVar()
@ -183,8 +191,8 @@ class sideWindow(AppShell):
text = 'Enable WidgetVisible',
variable = self.widgetVisVar,
command = self.togglewidgetVis)
self.widgetVisButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.widgetVisButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.enableAutoCameraVar = IntVar()
@ -194,17 +202,17 @@ class sideWindow(AppShell):
text = 'Enable Auto Camera Movement for Loading Objects',
variable = self.enableAutoCameraVar,
command = self.toggleAutoCamera)
self.enableAutoCameraButton.pack(side=Tkinter.LEFT, expand=False)
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
self.enableAutoCameraButton.pack(side=tkinter.LEFT, expand=False)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
pageFrame = Frame(envPage)
self.backgroundColor = ColorEntry(
pageFrame, text = 'BG Color', value=self.worldColor)
self.backgroundColor['command'] = self.setBackgroundColorVec
self.backgroundColor['resetValue'] = [0,0,0,0]
self.backgroundColor.pack(side=Tkinter.LEFT, expand=False)
self.backgroundColor.pack(side=tkinter.LEFT, expand=False)
self.bind(self.backgroundColor, 'Set background color')
pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True)
pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True)
envPage.pack(expand=False)
@ -320,11 +328,11 @@ class sideWindow(AppShell):
#
#################################################################
if self.enableBaseUseDrive==0:
print 'Enabled'
print('Enabled')
base.useDrive()
self.enableBaseUseDrive = 1
else:
print 'disabled'
print('disabled')
#base.useTrackball()
base.disableMouse()
self.enableBaseUseDrive = 0

View File

@ -9,7 +9,6 @@ from seColorEntry import *
from direct.tkwidgets import VectorWidgets
from direct.tkwidgets import Floater
from direct.tkwidgets import Slider
from Tkinter import *
import string, math, types
from panda3d.core import *
@ -195,7 +194,7 @@ class collisionWindow(AppShell):
# put the object into a CollisionNode and attach it to the target nodePath
#################################################################
collisionObject = None
print self.objType
print(self.objType)
if self.objType=='collisionPolygon':
pointA = Point3(float(self.widgetDict['PolygonPoint A'][0]._entry.get()),
float(self.widgetDict['PolygonPoint A'][1]._entry.get()),
@ -236,7 +235,7 @@ class collisionWindow(AppShell):
float(self.widgetDict['RayDirection'][1]._entry.get()),
float(self.widgetDict['RayDirection'][2]._entry.get()))
print vector, point
print(vector, point)
collisionObject = CollisionRay()
collisionObject.setOrigin(point)

View File

@ -4,8 +4,14 @@
#################################################################
from direct.tkwidgets.AppShell import AppShell
from Tkinter import Frame, Label, Button
import string, Pmw, Tkinter
import sys, Pmw
if sys.version_info >= (3, 0):
from tkinter import Frame, Label, Button
import tkinter
else:
from Tkinter import Frame, Label, Button
import Tkinter as tkinter
# Define the Category
KEYBOARD = 'Keyboard-'
@ -75,11 +81,11 @@ class controllerWindow(AppShell):
self.cotrollerTypeEntry = self.createcomponent(
'Controller Type', (), None,
Pmw.ComboBox, (frame,),
labelpos = Tkinter.W, label_text='Controller Type:', entry_width = 20,entry_state = Tkinter.DISABLED,
labelpos = tkinter.W, label_text='Controller Type:', entry_width = 20,entry_state = tkinter.DISABLED,
selectioncommand = self.setControllerType,
scrolledlist_items = self.controllerList)
self.cotrollerTypeEntry.pack(side=Tkinter.LEFT)
frame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=False, pady = 3)
self.cotrollerTypeEntry.pack(side=tkinter.LEFT)
frame.pack(side=tkinter.TOP, fill=tkinter.X, expand=False, pady = 3)
self.cotrollerTypeEntry.selectitem('Keyboard', setentry=True)
self.inputZone = Pmw.Group(mainFrame, tag_pyclass = None)
@ -102,7 +108,7 @@ class controllerWindow(AppShell):
keyboardPage = self.objNotebook.add('Keyboard')
tarckerPage = self.objNotebook.add('Tracker')
self.objNotebook.selectpage('Keyboard')
self.objNotebook.pack(side = Tkinter.TOP, fill='both',expand=False)
self.objNotebook.pack(side = tkinter.TOP, fill='both',expand=False)
# Put this here so it isn't called right away
self.objNotebook['raisecommand'] = self.updateControlInfo
@ -113,11 +119,11 @@ class controllerWindow(AppShell):
widget = self.createcomponent(
'Target Type', (), None,
Pmw.ComboBox, (Interior,),
labelpos = Tkinter.W, label_text='Target Object:', entry_width = 20, entry_state = Tkinter.DISABLED,
labelpos = tkinter.W, label_text='Target Object:', entry_width = 20, entry_state = tkinter.DISABLED,
selectioncommand = self.setTargetObj,
scrolledlist_items = self.listOfObj)
widget.pack(side=Tkinter.LEFT, padx=3)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 5)
widget.pack(side=tkinter.LEFT, padx=3)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 5)
widget.selectitem(self.nameOfNode, setentry=True)
self.widgetsDict[KEYBOARD+'ObjList'] = widget
@ -126,411 +132,411 @@ class controllerWindow(AppShell):
settingFrame = inputZone.interior()
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Assign a Key For:').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True,pady = 6 )
widget = Label(Interior, text = 'Assign a Key For:').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True,pady = 6 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Forward :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Forward :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Forward key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyForward'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyForward'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Forward Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedForward'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedForward'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Backward :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Backward :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Backward key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyBackward'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyBackward'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Backward Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedBackward'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedBackward'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Right :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Right :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Right key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyRight'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyRight'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Right Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedRight'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedRight'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Left key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyLeft'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyLeft'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Left Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedLeft'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedLeft'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Up :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Up :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Up key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Up Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Down :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Down :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Down Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Right key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnRight'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnRight'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Right Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnRight'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnRight'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Left key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnLeft'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnLeft'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Left Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnLeft'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnLeft'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyTurnDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyTurnDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Turn Down Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedTurnDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedTurnDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Right key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyRollRight'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyRollRight'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Right Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedRollRight'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedRollRight'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Left key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyRollLeft'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyRollLeft'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Roll Left Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedRollLeft'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedRollLeft'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale X UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleXUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleXUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale X UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleXUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleXUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale X Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleXDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleXDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down X Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleXDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleXDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Y UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleYUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleYUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Y UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleYUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleYUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Y Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleYDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleYDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down XY Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleYDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleYDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Z UP key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleZUp'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleZUp'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Z UP Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleZUp'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleZUp'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
Interior = Frame(settingFrame)
widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Z Down key', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardMapDict['KeyScaleZDown'],
labelpos = Tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Key :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'KeyScaleZDown'] = widget
widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False)
widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False)
widget = self.createcomponent(
'Scale Down Z Speed', (), None,
Pmw.EntryField, (Interior,),
value = self.keyboardSpeedDict['SpeedScaleZDown'],
labelpos = Tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=Tkinter.LEFT, expand = False)
labelpos = tkinter.W, label_text='Speed :', entry_width = 10)
widget.pack(side=tkinter.LEFT, expand = False)
self.widgetsDict[KEYBOARD+'SpeedScaleZDown'] = widget
widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False)
Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 )
widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False)
Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 )
assignFrame.pack(side=Tkinter.TOP, expand=True, fill = Tkinter.X)
keyboardPage.pack(side=Tkinter.TOP, expand=True, fill = Tkinter.X)
assignFrame.pack(side=tkinter.TOP, expand=True, fill = tkinter.X)
keyboardPage.pack(side=tkinter.TOP, expand=True, fill = tkinter.X)
####################################################################
####################################################################
@ -539,12 +545,12 @@ class controllerWindow(AppShell):
####################################################################
# Pack the mainFrame
frame = Frame(mainFrame)
widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=Tkinter.RIGHT)
widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=Tkinter.LEFT)
widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=Tkinter.LEFT)
widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=Tkinter.LEFT)
frame.pack(side = Tkinter.BOTTOM, expand=1, fill = Tkinter.X)
mainFrame.pack(expand=1, fill = Tkinter.BOTH)
widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=tkinter.RIGHT)
widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=tkinter.LEFT)
widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=tkinter.LEFT)
widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=tkinter.LEFT)
frame.pack(side = tkinter.BOTTOM, expand=1, fill = tkinter.X)
mainFrame.pack(expand=1, fill = tkinter.BOTH)
def onDestroy(self, event):
# Check if user wish to keep the control after the window closed.
@ -688,7 +694,7 @@ class controllerWindow(AppShell):
self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
for index in self.keyboardSpeedDict:
self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
print self.nodePath
print(self.nodePath)
messenger.send('ControlW_saveSetting', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
return

View File

@ -2,13 +2,15 @@
# TK and PMW INTERFACE MODULES#
###############################
from direct.showbase.TkGlobal import*
from tkFileDialog import *
import Pmw
import tkFileDialog
import tkMessageBox
from direct.tkwidgets import Dial
from direct.tkwidgets import Floater
if sys.version_info >= (3, 0):
from tkinter.filedialog import askopenfilename
else:
from tkFileDialog import askopenfilename
#############################
# Scene Editor Python Files #
@ -154,7 +156,7 @@ class dataHolder:
self.ActorNum=0
self.theScene=None
messenger.send('SGE_Update Explorer',[render])
print 'Scene should be cleaned up!'
print('Scene should be cleaned up!')
def removeObj(self, nodePath):
#################################################################
@ -169,7 +171,7 @@ class dataHolder:
childrenList = nodePath.getChildren()
if self.ModelDic.has_key(name):
if name in self.ModelDic:
del self.ModelDic[name]
del self.ModelRefDic[name]
if len(childrenList) != 0:
@ -178,7 +180,7 @@ class dataHolder:
nodePath.removeNode()
self.ModelNum -= 1
pass
elif self.ActorDic.has_key(name):
elif name in self.ActorDic:
del self.ActorDic[name]
del self.ActorRefDic[name]
if len(childrenList) != 0:
@ -187,14 +189,14 @@ class dataHolder:
nodePath.removeNode()
self.ActorNum -= 1
pass
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
del self.collisionDict[name]
if len(childrenList) != 0:
for node in childrenList:
self.removeObj(node)
nodePath.removeNode()
pass
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
del self.dummyDict[name]
if len(childrenList) != 0:
for node in childrenList:
@ -207,12 +209,12 @@ class dataHolder:
self.removeObj(node)
list = self.lightManager.delete(name)
return list
elif self.particleNodes.has_key(name):
elif name in self.particleNodes:
self.particleNodes[name].removeNode()
del self.particleNodes[name]
del self.particleDict[name]
else:
print 'You cannot remove this NodePath'
print('You cannot remove this NodePath')
return
messenger.send('SGE_Update Explorer',[render])
@ -237,15 +239,15 @@ class dataHolder:
cHpr = hpr
cScale = scale
parent = nodePath.getParent()
if self.ActorDic.has_key(name):
if name in self.ActorDic:
holder = self.ActorDic
holderRef = self.ActorRefDic
isModel = False
elif self.ModelDic.has_key(name):
elif name in self.ModelDic:
holder = self.ModelDic
holderRef = self.ModelRefDic
else:
print '---- DataHolder: Target Obj is not a legal object could be duplicate!'
print('---- DataHolder: Target Obj is not a legal object could be duplicate!')
return
FilePath = holderRef[name]
@ -356,7 +358,7 @@ class dataHolder:
# This funciton will return True if there is an Actor in the scene named "name"
# and will return False if not.
###########################################################################
return self.ActorDic.has_key(name)
return name in self.ActorDic
def getActor(self, name):
###########################################################################
@ -366,7 +368,7 @@ class dataHolder:
if self.isActor(name):
return self.ActorDic[name]
else:
print '----No Actor named: ', name
print('----No Actor named: ', name)
return None
def getModel(self, name):
@ -377,7 +379,7 @@ class dataHolder:
if self.isModel(name):
return self.ModelDic[name]
else:
print '----No Model named: ', name
print('----No Model named: ', name)
return None
def isModel(self, name):
@ -386,7 +388,7 @@ class dataHolder:
# This funciton will return True if there is a Model in the scene named "name"
# and will return False if not.
###########################################################################
return self.ModelDic.has_key(name)
return name in self.ModelDic
def loadAnimation(self,name, Dic):
###########################################################################
@ -406,7 +408,7 @@ class dataHolder:
messenger.send('DataH_loadFinish'+name)
return
else:
print '------ Error when loading animation for Actor: ', name
print('------ Error when loading animation for Actor: ', name)
def removeAnimation(self, name, anim):
###########################################################################
@ -527,7 +529,7 @@ class dataHolder:
self.ActorDic[nName]= self.ActorDic[oName]
self.ActorRefDic[nName]= self.ActorRefDic[oName]
self.ActorDic[nName].setName(nName)
if self.blendAnimDict.has_key(oName):
if oName in self.blendAnimDict:
self.blendAnimDict[nName] = self.blendAnimDict[oName]
del self.blendAnimDict[oName]
del self.ActorDic[oName]
@ -540,16 +542,16 @@ class dataHolder:
del self.ModelRefDic[oName]
elif self.lightManager.isLight(oName):
list, lightNode = self.lightManager.rename(oName, nName)
elif self.dummyDict.has_key(oName):
elif oName in self.dummyDict:
self.dummyDict[nName]= self.dummyDict[oName]
self.dummyDict[nName].setName(nName)
del self.dummyDict[oName]
elif self.collisionDict.has_key(oName):
elif oName in self.collisionDict:
self.collisionDict[nName]= self.collisionDict[oName]
self.collisionDict[nName].setName(nName)
del self.collisionDict[oName]
elif self.particleNodes.has_key(oName):
elif oName in self.particleNodes:
self.particleNodes[nName]= self.particleNodes[oName]
self.particleDict[nName]= self.particleDict[oName]
self.particleDict[nName].setName(nName)
@ -557,9 +559,9 @@ class dataHolder:
del self.particleNodes[oName]
del self.particleDict[oName]
else:
print '----Error: This Object is not allowed to this function!'
print('----Error: This Object is not allowed to this function!')
if self.curveDict.has_key(oName):
if oName in self.curveDict:
self.curveDict[nName] = self.curveDict[oName]
del self.curveDict[oName]
@ -578,11 +580,11 @@ class dataHolder:
return True
elif self.lightManager.isLight(name):
return True
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
return True
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
return True
elif self.particleNodes.has_key(name):
elif name in self.particleNodes:
return True
elif (name == 'render')or(name == 'SEditor')or(name == 'Lights')or(name == 'camera'):
return True
@ -596,7 +598,7 @@ class dataHolder:
# using the node name as a reference to assosiate a list which contains all curves related to that node.
###########################################################################
name = node.getName()
if self.curveDict.has_key(name):
if name in self.curveDict:
self.curveDict[name].append(curveCollection)
return
else:
@ -612,7 +614,7 @@ class dataHolder:
# If the input node has not been bindedwith any curve, it will return None.
###########################################################################
name = nodePath.getName()
if self.curveDict.has_key(name):
if name in self.curveDict:
return self.curveDict[name]
else:
return None
@ -626,7 +628,7 @@ class dataHolder:
# This message will be caught by Property Window for this node.
###########################################################################
name =nodePath.getName()
if self.curveDict.has_key(name):
if name in self.curveDict:
index = None
for curve in self.curveDict[name]:
if curve.getCurve(0).getName() == curveName:
@ -677,12 +679,12 @@ class dataHolder:
elif self.isLight(name):
type = 'Light'
info['lightNode'] = self.lightManager.getLightNode(name)
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
type = 'dummy'
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
type = 'collisionNode'
info['collisionNode'] = self.collisionDict[name]
if self.curveDict.has_key(name):
if name in self.curveDict:
info['curveList'] = self.getCurveList(nodePath)
return type, info
@ -794,7 +796,7 @@ class dataHolder:
# The formate of thsi dictionary is
# {"name of Blend Animation" : ["Animation A, Animation B, Effect(Float, 0~1)"]}
###########################################################################
if self.blendAnimDict.has_key(name):
if name in self.blendAnimDict:
return self.blendAnimDict[name]
else:
return {}
@ -808,8 +810,8 @@ class dataHolder:
# Also, if this blend is the first blend animation that the target actor has,
# this function will add a "Blending" tag on this actor which is "True".
###########################################################################
if self.blendAnimDict.has_key(actorName):
if self.blendAnimDict[actorName].has_key(blendName):
if actorName in self.blendAnimDict:
if blendName in self.blendAnimDict[actorName]:
### replace the original setting
self.blendAnimDict[actorName][blendName][0] = animNameA
self.blendAnimDict[actorName][blendName][1] = animNameB
@ -832,7 +834,7 @@ class dataHolder:
# it will also rewrite the data to the newest one.
###########################################################################
self.removeBlendAnim(actorName,oName)
print self.blendAnimDict
print(self.blendAnimDict)
return self.saveBlendAnim(actorName, nName, animNameA, animNameB, effect)
def removeBlendAnim(self, actorName, blendName):
@ -844,8 +846,8 @@ class dataHolder:
# Also, it will check that there is any blended animation remained for this actor,
# If none, this function will clear the "Blending" tag of this object.
###########################################################################
if self.blendAnimDict.has_key(actorName):
if self.blendAnimDict[actorName].has_key(blendName):
if actorName in self.blendAnimDict:
if blendName in self.blendAnimDict[actorName]:
### replace the original setting
del self.blendAnimDict[actorName][blendName]
if len(self.blendAnimDict[actorName])==0:
@ -876,15 +878,15 @@ class dataHolder:
###########################################################################
if name == 'camera':
return camera
elif self.ModelDic.has_key(name):
elif name in self.ModelDic:
return self.ModelDic[name]
elif self.ActorDic.has_key(name):
elif name in self.ActorDic:
return self.ActorDic[name]
elif self.collisionDict.has_key(name):
elif name in self.collisionDict:
return self.collisionDict[name]
elif self.dummyDict.has_key(name):
elif name in self.dummyDict:
return self.dummyDict[name]
elif self.particleNodes.has_key(name):
elif name in self.particleNodes:
return self.particleNodes[name]
elif self.lightManager.isLight(name):
return self.lightManager.getLightNode(name)
@ -935,13 +937,13 @@ class dataHolder:
###########################################################################
### Ask for a filename
OpenFilename = tkFileDialog.askopenfilename(filetypes = [("PY","py")],title = "Load Scene")
OpenFilename = askopenfilename(filetypes = [("PY","py")],title = "Load Scene")
if(not OpenFilename):
return None
f=Filename.fromOsSpecific(OpenFilename)
fileName=f.getBasenameWoExtension()
dirName=f.getFullpathWoExtension()
print "DATAHOLDER::" + dirName
print("DATAHOLDER::" + dirName)
############################################################################
# Append the path to this file to our sys path where python looks for modules
# We do this so that we can use "import" on our saved scene code and execute it
@ -976,7 +978,7 @@ class dataHolder:
self.ActorDic[actor]=self.Scene.ActorDic[actor]
#self.ActorRefDic[actor]=self.Scene.ActorRefDic[actor] # Old way of doing absolute paths
self.ActorRefDic[actor]=Filename(dirName + "/" + self.Scene.ActorRefDic[actor]) # Relative Paths
if(self.Scene.blendAnimDict.has_key(str(actor))):
if(str(actor) in self.Scene.blendAnimDict):
self.blendAnimDict[actor]=self.Scene.blendAnimDict[actor]
self.ActorNum=self.ActorNum+1
@ -1006,7 +1008,7 @@ class dataHolder:
atten=alight.getAttenuation()
self.lightManager.create('spot',alight.getColor(),alight.getSpecularColor(),thenode.getPos(),thenode.getHpr(),atten.getX(),atten.getY(),atten.getZ(),alight.getExponent(),name=alight.getName(),tag=thenode.getTag("Metadata"))
else:
print 'Invalid light type'
print('Invalid light type')
############################################################################
# Populate Dummy related Dictionaries

View File

@ -45,7 +45,7 @@ class duplicateWindow(AppShell):
self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
def appInit(self):
print '----SideWindow is Initialized!!'
print('----SideWindow is Initialized!!')
def createInterface(self):
# The interior of the toplevel panel
@ -122,7 +122,7 @@ class duplicateWindow(AppShell):
# This message will be caught by sceneEditor.
#################################################################
if not self.allEntryValid():
print '---- Duplication Window: Invalid value!!'
print('---- Duplication Window: Invalid value!!')
return
x = self.move_x.getvalue()
y = self.move_y.getvalue()

View File

@ -7,10 +7,17 @@ from direct.tkwidgets.AppShell import AppShell
from seColorEntry import *
from direct.tkwidgets.VectorWidgets import Vector3Entry
from direct.tkwidgets.Slider import Slider
from Tkinter import Frame, Button, Menubutton, Menu
import string, math, types, Pmw, Tkinter
import sys, math, types, Pmw
from panda3d.core import *
if sys.version_info >= (3, 0):
from tkinter import Frame, Button, Menubutton, Menu
import tkinter
else:
from Tkinter import Frame, Button, Menubutton, Menu
import Tkinter as tkinter
class lightingPanel(AppShell):
#################################################################
# lightingPanel(AppShell)
@ -51,25 +58,25 @@ class lightingPanel(AppShell):
mainFrame = Frame(interior)
self.listZone = Pmw.Group(mainFrame,tag_pyclass = None)
self.listZone.pack(expand=0, fill=Tkinter.X,padx=3,pady=3)
self.listZone.pack(expand=0, fill=tkinter.X,padx=3,pady=3)
listFrame = self.listZone.interior()
self.lightEntry = self.createcomponent(
'Lights List', (), None,
Pmw.ComboBox, (listFrame,),label_text='Light :',
labelpos = Tkinter.W, entry_width = 25, selectioncommand = self.selectLight,
labelpos = tkinter.W, entry_width = 25, selectioncommand = self.selectLight,
scrolledlist_items = self.lightList)
self.lightEntry.pack(side=Tkinter.LEFT)
self.lightEntry.pack(side=tkinter.LEFT)
self.renameButton = self.createcomponent(
'Rename Light', (), None,
Button, (listFrame,),
text = ' Rename ',
command = self.renameLight)
self.renameButton.pack(side=Tkinter.LEFT)
self.renameButton.pack(side=tkinter.LEFT)
self.addLighZone = Pmw.Group(listFrame,tag_pyclass = None)
self.addLighZone.pack(side=Tkinter.LEFT)
self.addLighZone.pack(side=tkinter.LEFT)
insideFrame = self.addLighZone.interior()
self.lightsButton = Menubutton(insideFrame, text = 'Add light',borderwidth = 3,
activebackground = '#909090')
@ -91,13 +98,13 @@ class lightingPanel(AppShell):
Button, (listFrame,),
text = ' Delete ',
command = self.deleteLight)
self.deleteButton.pack(side=Tkinter.LEFT)
self.deleteButton.pack(side=tkinter.LEFT)
self.lightColor = seColorEntry(
mainFrame, text = 'Light Color', value=self.lightColor)
self.lightColor['command'] = self.setLightingColorVec
self.lightColor['resetValue'] = [0.3*255,0.3*255,0.3*255,0]
self.lightColor.pack(fill=Tkinter.X,expand=0)
self.lightColor.pack(fill=tkinter.X,expand=0)
self.bind(self.lightColor, 'Set light color')
# Notebook pages for light specific controls
@ -114,27 +121,27 @@ class lightingPanel(AppShell):
self.dSpecularColor = seColorEntry(
directionalPage, text = 'Specular Color')
self.dSpecularColor['command'] = self.setSpecularColor
self.dSpecularColor.pack(fill = Tkinter.X, expand = 0)
self.dSpecularColor.pack(fill = tkinter.X, expand = 0)
self.bind(self.dSpecularColor,
'Set directional light specular color')
self.dPosition = Vector3Entry(
directionalPage, text = 'Position')
self.dPosition['command'] = self.setPosition
self.dPosition['resetValue'] = [0,0,0,0]
self.dPosition.pack(fill = Tkinter.X, expand = 0)
self.dPosition.pack(fill = tkinter.X, expand = 0)
self.bind(self.dPosition, 'Set directional light position')
self.dOrientation = Vector3Entry(
directionalPage, text = 'Orientation')
self.dOrientation['command'] = self.setOrientation
self.dOrientation['resetValue'] = [0,0,0,0]
self.dOrientation.pack(fill = Tkinter.X, expand = 0)
self.dOrientation.pack(fill = tkinter.X, expand = 0)
self.bind(self.dOrientation, 'Set directional light orientation')
# Point light controls
self.pSpecularColor = seColorEntry(
pointPage, text = 'Specular Color')
self.pSpecularColor['command'] = self.setSpecularColor
self.pSpecularColor.pack(fill = Tkinter.X, expand = 0)
self.pSpecularColor.pack(fill = tkinter.X, expand = 0)
self.bind(self.pSpecularColor,
'Set point light specular color')
@ -142,7 +149,7 @@ class lightingPanel(AppShell):
pointPage, text = 'Position')
self.pPosition['command'] = self.setPosition
self.pPosition['resetValue'] = [0,0,0,0]
self.pPosition.pack(fill = Tkinter.X, expand = 0)
self.pPosition.pack(fill = tkinter.X, expand = 0)
self.bind(self.pPosition, 'Set point light position')
self.pConstantAttenuation = Slider(
@ -152,7 +159,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 1.0)
self.pConstantAttenuation['command'] = self.setConstantAttenuation
self.pConstantAttenuation.pack(fill = Tkinter.X, expand = 0)
self.pConstantAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.pConstantAttenuation,
'Set point light constant attenuation')
@ -163,7 +170,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.pLinearAttenuation['command'] = self.setLinearAttenuation
self.pLinearAttenuation.pack(fill = Tkinter.X, expand = 0)
self.pLinearAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.pLinearAttenuation,
'Set point light linear attenuation')
@ -174,7 +181,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.pQuadraticAttenuation['command'] = self.setQuadraticAttenuation
self.pQuadraticAttenuation.pack(fill = Tkinter.X, expand = 0)
self.pQuadraticAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.pQuadraticAttenuation,
'Set point light quadratic attenuation')
@ -182,7 +189,7 @@ class lightingPanel(AppShell):
self.sSpecularColor = seColorEntry(
spotPage, text = 'Specular Color')
self.sSpecularColor['command'] = self.setSpecularColor
self.sSpecularColor.pack(fill = Tkinter.X, expand = 0)
self.sSpecularColor.pack(fill = tkinter.X, expand = 0)
self.bind(self.sSpecularColor,
'Set spot light specular color')
@ -193,7 +200,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 1.0)
self.sConstantAttenuation['command'] = self.setConstantAttenuation
self.sConstantAttenuation.pack(fill = Tkinter.X, expand = 0)
self.sConstantAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.sConstantAttenuation,
'Set spot light constant attenuation')
@ -204,7 +211,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.sLinearAttenuation['command'] = self.setLinearAttenuation
self.sLinearAttenuation.pack(fill = Tkinter.X, expand = 0)
self.sLinearAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.sLinearAttenuation,
'Set spot light linear attenuation')
@ -215,7 +222,7 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.sQuadraticAttenuation['command'] = self.setQuadraticAttenuation
self.sQuadraticAttenuation.pack(fill = Tkinter.X, expand = 0)
self.sQuadraticAttenuation.pack(fill = tkinter.X, expand = 0)
self.bind(self.sQuadraticAttenuation,
'Set spot light quadratic attenuation')
@ -226,16 +233,16 @@ class lightingPanel(AppShell):
resolution = 0.01,
value = 0.0)
self.sExponent['command'] = self.setExponent
self.sExponent.pack(fill = Tkinter.X, expand = 0)
self.sExponent.pack(fill = tkinter.X, expand = 0)
self.bind(self.sExponent,
'Set spot light exponent')
# MRM: Add frustum controls
self.lightNotebook.setnaturalsize()
self.lightNotebook.pack(expand = 1, fill = Tkinter.BOTH)
self.lightNotebook.pack(expand = 1, fill = tkinter.BOTH)
mainFrame.pack(expand=1, fill = Tkinter.BOTH)
mainFrame.pack(expand=1, fill = tkinter.BOTH)
def onDestroy(self, event):
messenger.send('LP_close')

View File

@ -12,7 +12,6 @@ from direct.tkwidgets import Dial
from direct.tkwidgets import Slider
from direct.tkwidgets import VectorWidgets
from panda3d.core import *
from Tkinter import *
import Pmw
class propertyWindow(AppShell,Pmw.MegaWidget):
@ -108,7 +107,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget):
self.curveFrame = None
#### If nodePath has been binded with any curves
if self.info.has_key('curveList'):
if 'curveList' in self.info:
self.createCurveFrame(self.contentFrame)
## Set all stuff done
@ -271,7 +270,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget):
# And, it will set the call back function to setNodeColorVec()
#################################################################
color = self.nodePath.getColor()
print color
print(color)
self.nodeColor = VectorWidgets.ColorEntry(
contentFrame, text = 'Node Color', value=[color.getX()*255,
color.getY()*255,
@ -725,7 +724,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget):
# But, not directly removed be this function.
# This function will send out a message to notice dataHolder to remove this animation
#################################################################
print anim
print(anim)
widget = self.widgetsDict[anim]
self.accept('animRemovedFromNode',self.redrawAnimProperty)
messenger.send('PW_removeAnimFromNode',[self.name, anim])

View File

@ -504,7 +504,7 @@ class QuadView(DirectObject):
ansY=-1.0+y2
self.xy=[ansX,ansY]
print "Sent X:%f Sent Y:%f"%(ansX,ansY)
print("Sent X:%f Sent Y:%f"%(ansX,ansY))
#SEditor.iRay.pick(render,self.xy)
SEditor.manipulationControl.manipulationStop(self.xy)
#print "MouseX " + str(base.mouseWatcherNode.getMouseX()) + "MouseY " + str(base.mouseWatcherNode.getMouseY()) + "\n"
@ -548,28 +548,28 @@ class QuadView(DirectObject):
dr.setDimensions(0.5,1,0,0.5)
def setLeft(self):
print "LEFT"
print("LEFT")
self.CurrentQuad=3
self.ChangeBaseDR()
self.Left.setCam()
#self.Left.setDR(self.mouseWatcherNode)
def setTop(self):
print "TOP"
print("TOP")
self.CurrentQuad=2
self.ChangeBaseDR()
self.Top.setCam()
#self.Top.setDR(self.mouseWatcherNode)
def setPerspective(self):
print "PERSPECTIVE"
print("PERSPECTIVE")
self.CurrentQuad=4
self.ChangeBaseDR()
self.Perspective.setCam()
#self.Perspective.setDR(self.mouseWatcherNode)
def setFront(self):
print "FRONT"
print("FRONT")
self.CurrentQuad=1
self.ChangeBaseDR()
self.Front.setCam()

View File

@ -8,8 +8,14 @@ from direct.showbase.ShowBase import ShowBase
ShowBase()
from direct.showbase.TkGlobal import spawnTkLoop
from Tkinter import *
from tkFileDialog import *
if sys.version_info >= (3, 0):
from tkinter import *
from tkinter.filedialog import *
else:
from Tkinter import *
from tkFileDialog import *
from direct.directtools.DirectGlobals import *
from direct.tkwidgets.AppShell import*
@ -391,31 +397,31 @@ class myLevelEditor(AppShell):
self.showAbout()
return
elif buttonIndex==12:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==13:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==14:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==15:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==16:
print "Your scene will be eliminated within five seconds, Save your world!!!, Number %d."%buttonIndex
print("Your scene will be eliminated within five seconds, Save your world!!!, Number %d."%buttonIndex)
return
elif buttonIndex==17:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==18:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==19:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
elif buttonIndex==20:
print "You haven't defined the function for this Button, Number %d."%buttonIndex
print("You haven't defined the function for this Button, Number %d."%buttonIndex)
return
return
@ -671,17 +677,17 @@ class myLevelEditor(AppShell):
#################################################################
type, info = AllScene.getInfoOfThisNode(nodePath)
name = nodePath.getName()
if not self.propertyWindow.has_key(name):
if name not in self.propertyWindow:
self.propertyWindow[name] = propertyWindow(nodePath, type,info )
pass
def closePropertyWindow(self, name):
if self.propertyWindow.has_key(name):
if name in self.propertyWindow:
del self.propertyWindow[name]
return
def openMetadataPanel(self,nodePath=None):
print nodePath
print(nodePath)
self.MetadataPanel=MetadataPanel(nodePath)
pass
@ -690,7 +696,7 @@ class myLevelEditor(AppShell):
# duplicate(self, nodePath = None)
# This function will be called when user try to open the duplication window
#################################################################
print '----Duplication!!'
print('----Duplication!!')
if nodePath != None:
self.duplicateWindow = duplicateWindow(nodePath = nodePath)
pass
@ -796,8 +802,8 @@ class myLevelEditor(AppShell):
#################################################################
name = nodePath.getName()
if AllScene.isActor(name):
if self.animPanel.has_key(name):
print '---- You already have an animation panel for this Actor!'
if name in self.animPanel:
print('---- You already have an animation panel for this Actor!')
return
else:
Actor = AllScene.getActor(name)
@ -847,9 +853,9 @@ class myLevelEditor(AppShell):
# Let us actually remove the scene from sys modules... this is done because every scene is loaded as a module
# And if we reload a scene python wont reload since its already in sys.modules... and hence we delete it
# If there is ever a garbage colleciton bug..this might be a point to look at
if sys.modules.has_key(currentModName):
if currentModName in sys.modules:
del sys.modules[currentModName]
print sys.getrefcount(AllScene.theScene)
print(sys.getrefcount(AllScene.theScene))
del AllScene.theScene
else:
AllScene.resetAll()
@ -877,9 +883,9 @@ class myLevelEditor(AppShell):
# Let us actually remove the scene from sys modules... this is done because every scene is loaded as a module
# And if we reload a scene python wont reload since its already in sys.modules... and hence we delete it
# If there is ever a garbage colleciton bug..this might be a point to look at
if sys.modules.has_key(currentModName):
if currentModName in sys.modules:
del sys.modules[currentModName]
print sys.getrefcount(AllScene.theScene)
print(sys.getrefcount(AllScene.theScene))
del AllScene.theScene
else:
AllScene.resetAll()
@ -891,7 +897,7 @@ class myLevelEditor(AppShell):
thefile=Filename(self.CurrentFileName)
thedir=thefile.getFullpathWoExtension()
print "SCENE EDITOR::" + thedir
print("SCENE EDITOR::" + thedir)
self.CurrentDirName=thedir
if self.CurrentFileName != None:
self.parent.title('Scene Editor - '+ Filename.fromOsSpecific(self.CurrentFileName).getBasenameWoExtension())
@ -939,7 +945,7 @@ class myLevelEditor(AppShell):
theScene.writeBamFile(fileName)
else:
render.writeBamFile(fileName+".bad")
print " Scenegraph saved as :" +str(fileName)
print(" Scenegraph saved as :" +str(fileName))
def loadFromBam(self):
fileName = tkFileDialog.askopenfilename(filetypes = [("BAM",".bam")],title = "Load Scenegraph from Bam file")
@ -964,7 +970,7 @@ class myLevelEditor(AppShell):
###############################################################################
# !!!!! See if a module exists by this name... if it does you cannot use this filename !!!!!
###############################################################################
if(sys.modules.has_key(fCheck.getBasenameWoExtension())):
if(fCheck.getBasenameWoExtension() in sys.modules):
tkMessageBox.showwarning(
"Save file",
"Cannot save with this name because there is a system module with the same name. Please resave as something else."
@ -998,7 +1004,7 @@ class myLevelEditor(AppShell):
if modelFilename:
self.makeDirty()
if not AllScene.loadModel(modelFilename, Filename.fromOsSpecific(modelFilename)):
print '----Error! No Such Model File!'
print('----Error! No Such Model File!')
pass
def loadActor(self):
@ -1021,12 +1027,12 @@ class myLevelEditor(AppShell):
if ActorFilename:
self.makeDirty()
if not AllScene.loadActor(ActorFilename, Filename.fromOsSpecific(ActorFilename)):
print '----Error! No Such Model File!'
print('----Error! No Such Model File!')
pass
def importScene(self):
self.makeDirty()
print '----God bless you Please Import!'
print('----God bless you Please Import!')
pass
@ -1500,7 +1506,7 @@ class myLevelEditor(AppShell):
return
def animPanelClose(self, name):
if self.animPanel.has_key(name):
if name in self.animPanel:
del self.animPanel[name]
return
@ -1513,8 +1519,8 @@ class myLevelEditor(AppShell):
################################################################
name = nodePath.getName()
if AllScene.isActor(name):
if self.animBlendPanel.has_key(name):
print '---- You already have an Blend Animation Panel for this Actor!'
if name in self.animBlendPanel:
print('---- You already have an Blend Animation Panel for this Actor!')
return
else:
Actor = AllScene.getActor(name)
@ -1559,7 +1565,7 @@ class myLevelEditor(AppShell):
# This function will be called when Blend panel has been closed.
# Here we will reset the reference dictionary so it can be open again.
################################################################
if self.animBlendPanel.has_key(name):
if name in self.animBlendPanel:
del self.animBlendPanel[name]
return
@ -1618,7 +1624,7 @@ class myLevelEditor(AppShell):
def openAlignPanel(self, nodePath=None):
name = nodePath.getName()
if not self.alignPanelDict.has_key(name):
if name not in self.alignPanelDict:
list = AllScene.getAllObjNameAsList()
if name in list:
list.remove(name)
@ -1628,7 +1634,7 @@ class myLevelEditor(AppShell):
return
def closeAlignPanel(self, name=None):
if self.alignPanelDict.has_key(name):
if name in self.alignPanelDict:
del self.alignPanelDict[name]
def alignObject(self, nodePath, name, list):

View File

@ -5,12 +5,16 @@
# Import Tkinter, Pmw, and the floater code from this directory tree.
from direct.tkwidgets.AppShell import *
from direct.showbase.TkGlobal import *
from tkSimpleDialog import askfloat
import string
import math
import types
from direct.task import Task
if sys.version_info >= (3, 0):
from tkinter.simpledialog import askfloat
else:
from tkSimpleDialog import askfloat
FRAMES = 0
SECONDS = 1
@ -112,7 +116,7 @@ class AnimPanel(AppShell):
self.playRateEntry.selectitem('1.0')
### Loop checkbox
Label(actorFrame, text= "Loop:", font=('MSSansSerif', 12)).place(x=420,y=05,anchor=NW)
Label(actorFrame, text= "Loop:", font=('MSSansSerif', 12)).place(x=420,y=5,anchor=NW)
self.loopVar = IntVar()
self.loopVar.set(0)
@ -250,7 +254,7 @@ class AnimPanel(AppShell):
self['animList'] = self['actor'].getAnimNames()
animL = self['actor'].getAnimNames()
self.AnimEntry.setlist(animL)
print '-----',animL
print('-----',animL)
return
def loadAnimation(self):
@ -278,7 +282,7 @@ class AnimPanel(AppShell):
taskMgr.add(self.playTask, self.id + '_UpdateTask')
self.stopButton.config(state=NORMAL)
else:
print '----Illegal Animaion name!!', self.animName
print('----Illegal Animaion name!!', self.animName)
return
def playTask(self, task):
@ -591,7 +595,7 @@ class LoadAnimPanel(AppShell):
else:
self.animList.append(name)
self.AnimName_1.setlist(self.animList)
print self.animDic
print(self.animDic)
return
def ok_press(self):

View File

@ -5,12 +5,16 @@
# Import Tkinter, Pmw, and the floater code from this directory tree.
from direct.tkwidgets.AppShell import *
from direct.showbase.TkGlobal import *
from tkSimpleDialog import askfloat
import string
import math
import types
from direct.task import Task
if sys.version_info >= (3, 0):
from tkinter.simpledialog import askfloat
else:
from tkSimpleDialog import askfloat
FRAMES = 0
SECONDS = 1
@ -304,7 +308,7 @@ class BlendAnimPanel(AppShell):
taskMgr.add(self.playTask, self.id + '_UpdateTask')
self.stopButton.config(state=NORMAL)
else:
print '----Illegal Animaion name!!', self.animNameA + ', '+ self.animNameB
print('----Illegal Animaion name!!', self.animNameA + ', '+ self.animNameB)
return
def playTask(self, task):
@ -348,7 +352,7 @@ class BlendAnimPanel(AppShell):
# setAnimation(self, animation, AB = 'a')
# see play(self)
#################################################################
print 'OK!!!'
print('OK!!!')
if AB == 'a':
if self.animNameA != None:
self['actor'].setControlEffect(self.animNameA, 1.0, 'modelRoot','lodRoot')
@ -519,7 +523,7 @@ class BlendAnimPanel(AppShell):
# then this function will set Animation A to "a" and animation B
# to "b" and set the ratio slider to "c" position.
#################################################################
if self.blendDict.has_key(name):
if name in self.blendDict:
self.currentBlendName = name
animA = self.blendDict[name][0]
animB = self.blendDict[name][1]
@ -544,7 +548,7 @@ class BlendAnimPanel(AppShell):
self.blendDict.clear()
del self.blendDict
self.blendDict = dict.copy()
print self.blendDict
print(self.blendDict)
if len(self.blendDict)>0:
self.blendList = self.blendDict.keys()
else:

View File

@ -55,14 +55,14 @@ class DirectCameraControl(DirectObject):
['n', self.pickNextCOA],
['u', self.orbitUprightCam],
['shift-u', self.uprightCam],
[`1`, self.spawnMoveToView, 1],
[`2`, self.spawnMoveToView, 2],
[`3`, self.spawnMoveToView, 3],
[`4`, self.spawnMoveToView, 4],
[`5`, self.spawnMoveToView, 5],
[`6`, self.spawnMoveToView, 6],
[`7`, self.spawnMoveToView, 7],
[`8`, self.spawnMoveToView, 8],
['1', self.spawnMoveToView, 1],
['2', self.spawnMoveToView, 2],
['3', self.spawnMoveToView, 3],
['4', self.spawnMoveToView, 4],
['5', self.spawnMoveToView, 5],
['6', self.spawnMoveToView, 6],
['7', self.spawnMoveToView, 7],
['8', self.spawnMoveToView, 8],
['9', self.swingCamAboutWidget, -90.0, t],
['0', self.swingCamAboutWidget, 90.0, t],
['`', self.removeManipulateCameraTask],
@ -351,7 +351,7 @@ class DirectCameraControl(DirectObject):
# MRM: Would be nice to be able to control this
# At least display it
dist = pow(10.0, self.nullHitPointCount)
SEditor.message('COA Distance: ' + `dist`)
SEditor.message('COA Distance: ' + repr(dist))
coa.set(0,dist,0)
# Compute COA Dist
coaDist = Vec3(coa - ZERO_POINT).length()

View File

@ -12,9 +12,15 @@
from direct.tkwidgets import Valuator
from direct.tkwidgets import Floater
from direct.tkwidgets import Slider
import string, Pmw, Tkinter, tkColorChooser
import sys, Pmw
from direct.tkwidgets.VectorWidgets import VectorEntry
if sys.version_info >= (3, 0):
from tkinter.colorchooser import askcolor
else:
from tkColorChooser import askcolor
class seColorEntry(VectorEntry):
def __init__(self, parent = None, **kw):
# Initialize options for the class (overriding some superclass options)
@ -41,7 +47,7 @@ class seColorEntry(VectorEntry):
def popupColorPicker(self):
# Can pass in current color with: color = (255, 0, 0)
color = tkColorChooser.askcolor(
color = askcolor(
parent = self.interior(),
# Initialize it to current color
initialcolor = tuple(self.get()[:3]))[0]

View File

@ -42,7 +42,7 @@ class FileSaver:
i1=" " # indentation
i2=i1+i1 # double indentation
out_file = open(filename,"w")
print "dirname:" + dirname
print("dirname:" + dirname)
if( not os.path.isdir(dirname)):
os.mkdir(dirname)
savepathname=Filename(filename)
@ -176,7 +176,7 @@ class FileSaver:
newtexpathF=Filename(newtexpath)
newtexpathSpecific=newtexpathF.toOsSpecific()
print "TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific
print("TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific)
if(oldtexpath != newtexpathSpecific):
shutil.copyfile(oldtexpath,newtexpathSpecific)
@ -187,7 +187,7 @@ class FileSaver:
# Copy the file over to the relative directory
oldModelpath=AllScene.ModelRefDic[model].toOsSpecific()
print "FILESAVER:: copying from " + AllScene.ModelRefDic[model].toOsSpecific() + "to" + newpathSpecific
print("FILESAVER:: copying from " + AllScene.ModelRefDic[model].toOsSpecific() + "to" + newpathSpecific)
if(oldModelpath!=newpathSpecific):
shutil.copyfile(oldModelpath,newpathSpecific)
@ -197,7 +197,7 @@ class FileSaver:
etc=EggTextureCollection()
etc.extractTextures(e)
for index in range(len(fnamelist)):
print fnamelist[index]
print(fnamelist[index])
tex=etc.findFilename(Filename(fnamelist[index]))
fn=Filename(tex.getFilename())
fn.setDirname("")
@ -305,14 +305,14 @@ class FileSaver:
newtexpath=dirname + "/" + texfilename.getBasename()
newtexpathF=Filename(newtexpath)
newtexpathSpecific=newtexpathF.toOsSpecific()
print "TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific
print("TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific)
if(oldtexpath != newtexpathSpecific):
shutil.copyfile(oldtexpath,newtexpathSpecific)
# Copy the file over to the relative directory
oldActorpath=AllScene.ActorRefDic[actor].toOsSpecific()
print "FILESAVER:: copying from " + AllScene.ActorRefDic[actor].toOsSpecific() + "to" + newpathSpecific
print("FILESAVER:: copying from " + AllScene.ActorRefDic[actor].toOsSpecific() + "to" + newpathSpecific)
if(oldActorpath!=newpathSpecific):
shutil.copyfile(oldActorpath,newpathSpecific)
@ -322,7 +322,7 @@ class FileSaver:
etc=EggTextureCollection()
etc.extractTextures(e)
for index in range(len(actorfnamelist)):
print actorfnamelist[index]
print(actorfnamelist[index])
tex=etc.findFilename(Filename(actorfnamelist[index]))
fn=Filename(tex.getFilename())
fn.setDirname("")
@ -362,12 +362,12 @@ class FileSaver:
#out_file.write(i2+ "self."+ actorS + ".loadAnims(" + str(ActorAnimations) +")\n") # Old way with absolute paths
#Manakel 2/12/2004: solve the not empty but not defined animation case
if not animation is None:
print "ACTOR ANIMATIONS:" + ActorAnimations[animation]
print("ACTOR ANIMATIONS:" + ActorAnimations[animation])
oldAnimPath=Filename(ActorAnimations[animation])
oldAnim=oldAnimPath.toOsSpecific()
dirOS=Filename(dirname)
newAnim=dirOS.toOsSpecific() + "\\" + oldAnimPath.getBasename()
print "ACTOR ANIM SAVER:: Comparing" + oldAnim +"and" + newAnim
print("ACTOR ANIM SAVER:: Comparing" + oldAnim +"and" + newAnim)
if(oldAnim!=newAnim):
shutil.copyfile(oldAnim,newAnim)
newAnimF=Filename.fromOsSpecific(newAnim)
@ -379,16 +379,16 @@ class FileSaver:
out_file.write(i2+ i1+"self."+ actorS + ".loadAnims(" + str(ActorAnimations) +")\n") # Now with new relative paths
out_file.write(i2+"else:\n")
theloadAnimString=str(ActorAnimationsInvoke)# We hack the "self.executionpath" part into the dictionary as a variable using string replace
print "LOAD ANIM STRING BEFORE" + theloadAnimString
print("LOAD ANIM STRING BEFORE" + theloadAnimString)
theloadAnimString=theloadAnimString.replace('\'self.executionpath +','self.executionpath + \'')
print "LOAD ANIM STRING AFTER" + theloadAnimString
print("LOAD ANIM STRING AFTER" + theloadAnimString)
out_file.write(i2+ i1+"self."+ actorS + ".loadAnims(" + theloadAnimString +")\n") # Now with new relative paths based on editor invocation
out_file.write(i2+ "self.ActorDic[\'" + actorS + "\']=self." + AllScene.ActorDic[actor].getName()+"\n")
#out_file.write(i2+ "self.ActorRefDic[\'" + actorS + "\']=Filename(\'"+AllScene.ActorRefDic[actor].getFullpath() +"\')\n") # Old way with absolute paths
out_file.write(i2+ "self.ActorRefDic[\'" + actorS + "\']=\'"+ AllScene.ActorRefDic[actor].getBasename() +"\'\n")# Relative paths
out_file.write(i2+ "self.ActorDic[\'"+ actorS + "\'].setName(\'"+ actorS +"\')\n")
if(AllScene.blendAnimDict.has_key(actor)): # Check if a dictionary of blended animations exists
if(actor in AllScene.blendAnimDict): # Check if a dictionary of blended animations exists
out_file.write(i2+ "self.blendAnimDict[\"" + actorS +"\"]=" + str(AllScene.blendAnimDict[actor]) + "\n")
@ -458,7 +458,7 @@ class FileSaver:
pass
else:
print "Invalid Collision Node: " + nodetype
print("Invalid Collision Node: " + nodetype)
out_file.write("\n")
@ -653,7 +653,7 @@ class FileSaver:
if(parent=="render" or parent=="camera"):
out_file.write(i2+ "self."+ modelS + ".reparentTo(" + parent + ")\n")
else:
if(AllScene.particleDict.has_key(parent)):
if(parent in AllScene.particleDict):
out_file.write(i2+ "self."+ modelS + ".reparentTo(self." + parent + ".getEffect())\n")
else:
out_file.write(i2+ "self."+ modelS + ".reparentTo(self." + parent + ")\n")
@ -666,7 +666,7 @@ class FileSaver:
if(parent=="render" or parent=="camera"):
out_file.write(i2+ "self."+ dummyS + ".reparentTo(" + parent + ")\n")
else:
if(AllScene.particleDict.has_key(parent)):
if(parent in AllScene.particleDict):
out_file.write(i2+ "self."+ dummyS + ".reparentTo(self." + parent + ".getEffect())\n")
else:
out_file.write(i2+ "self."+ dummyS + ".reparentTo(self." + parent + ")\n")
@ -680,7 +680,7 @@ class FileSaver:
if(parent=="render" or parent=="camera"):
out_file.write(i2+ "self."+ actorS + ".reparentTo(" + parent + ")\n")
else:
if(AllScene.particleDict.has_key(parent)):
if(parent in AllScene.particleDict):
out_file.write(i2+ "self."+ actorS + ".reparentTo(self." + parent + ".getEffect())\n")
else:
out_file.write(i2+ "self."+ actorS + ".reparentTo(self." + parent + ")\n")
@ -698,7 +698,7 @@ class FileSaver:
out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]="+ parentname + ".attachNewNode(self." + collnodeS + "_Node)\n")
else:
#Manakel 2/12/2005: parent replaced by parent Name but why Parent name in partice and parent for other objects?
if(AllScene.particleDict.has_key(parentname)):
if(parentname in AllScene.particleDict):
out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]=self."+ parentname + "getEffect().attachNewNode(self." + collnodeS + "_Node)\n")
else:
out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]=self."+ parentname + ".attachNewNode(self." + collnodeS + "_Node)\n")

View File

@ -41,10 +41,10 @@ class LineNodePath(NodePath):
ls.setColor(colorVec)
def moveTo( self, *_args ):
apply( self.lineSegs.moveTo, _args )
self.lineSegs.moveTo(*_args)
def drawTo( self, *_args ):
apply( self.lineSegs.drawTo, _args )
self.lineSegs.drawTo(*_args)
def create( self, frameAccurate = 0 ):
self.lineSegs.create( self.lineNode, frameAccurate )
@ -60,13 +60,13 @@ class LineNodePath(NodePath):
self.lineSegs.setThickness( thickness )
def setColor( self, *_args ):
apply( self.lineSegs.setColor, _args )
self.lineSegs.setColor(*_args)
def setVertex( self, *_args):
apply( self.lineSegs.setVertex, _args )
self.lineSegs.setVertex(*_args)
def setVertexColor( self, vertex, *_args ):
apply( self.lineSegs.setVertexColor, (vertex,) + _args )
self.lineSegs.setVertexColor(*(vertex,) + _args)
def getCurrentPosition( self ):
return self.lineSegs.getCurrentPosition()
@ -132,9 +132,9 @@ class LineNodePath(NodePath):
Given a list of lists of points, draw a separate line for each list
"""
for pointList in lineList:
apply(self.moveTo, pointList[0])
self.moveTo(*pointList[0])
for point in pointList[1:]:
apply(self.drawTo, point)
self.drawTo(*point)
##
## Given a point in space, and a direction, find the point of intersection

View File

@ -3,7 +3,6 @@
# Written by Yi-Hong Lin, yihhongl@andrew.cmu.edu, 2004
#################################################################
from direct.showbase.DirectObject import *
from string import lower
from direct.directtools import DirectUtil
from panda3d.core import *
import string
@ -341,7 +340,7 @@ class seLightManager(NodePath):
if type == 'ambient':
self.ambientCount += 1
if(name=='DEFAULT_NAME'):
light = AmbientLight('ambient_' + `self.ambientCount`)
light = AmbientLight('ambient_' + repr(self.ambientCount))
else:
light = AmbientLight(name)
@ -350,7 +349,7 @@ class seLightManager(NodePath):
elif type == 'directional':
self.directionalCount += 1
if(name=='DEFAULT_NAME'):
light = DirectionalLight('directional_' + `self.directionalCount`)
light = DirectionalLight('directional_' + repr(self.directionalCount))
else:
light = DirectionalLight(name)
@ -360,7 +359,7 @@ class seLightManager(NodePath):
elif type == 'point':
self.pointCount += 1
if(name=='DEFAULT_NAME'):
light = PointLight('point_' + `self.pointCount`)
light = PointLight('point_' + repr(self.pointCount))
else:
light = PointLight(name)
@ -371,7 +370,7 @@ class seLightManager(NodePath):
elif type == 'spot':
self.spotCount += 1
if(name=='DEFAULT_NAME'):
light = Spotlight('spot_' + `self.spotCount`)
light = Spotlight('spot_' + repr(self.spotCount))
else:
light = Spotlight(name)
@ -382,7 +381,7 @@ class seLightManager(NodePath):
light.setAttenuation(Vec3(constant, linear, quadratic))
light.setExponent(exponent)
else:
print 'Invalid light type'
print('Invalid light type')
return None
# Create the seLight objects and put the light object we just created into it.
@ -411,7 +410,7 @@ class seLightManager(NodePath):
# Attention!!
# only Spotlight obj nneds to be specified a lens node first. i.e. setLens() first!
#################################################################
type = lower(light.getType().getName())
type = light.getType().getName().lower()
specularColor = VBase4(1)
position = Point3(0,0,0)
@ -451,7 +450,7 @@ class seLightManager(NodePath):
quadratic = Attenuation.getZ()
exponent = light.getExponent()
else:
print 'Invalid light type'
print('Invalid light type')
return None
lightNode = seLight(light,self,type,
@ -508,7 +507,7 @@ class seLightManager(NodePath):
# isLight(self.name)
# Use a string as a index to check if there existing a light named "name"
#################################################################
return self.lightDict.has_key(name)
return name in self.lightDict
def rename(self,oName,nName):
#################################################################
@ -523,7 +522,7 @@ class seLightManager(NodePath):
del self.lightDict[oName]
return self.lightDict.keys(),lightNode
else:
print '----Light Mnager: No such Light!'
print('----Light Mnager: No such Light!')
def getLightNodeList(self):
#################################################################

View File

@ -25,10 +25,17 @@ from direct.tkwidgets.Slider import Slider
from direct.tkwidgets.EntryScale import EntryScale
from direct.tkwidgets.VectorWidgets import Vector2Entry, Vector3Entry
from direct.tkwidgets.VectorWidgets import ColorEntry
from Tkinter import Button, Frame, Radiobutton, Checkbutton, Label
from Tkinter import StringVar, BooleanVar, Entry, Scale
import os, string, Tkinter, Pmw
import __builtin__
import os, string, sys, Pmw
if sys.version_info >= (3, 0):
from tkinter import Button, Frame, Radiobutton, Checkbutton, Label
from tkinter import StringVar, BooleanVar, Entry, Scale
import tkinter
else:
from Tkinter import Button, Frame, Radiobutton, Checkbutton, Label
from Tkinter import StringVar, BooleanVar, Entry, Scale
import Tkinter as tkinter
PRF_UTILITIES = [
'lambda: camera.lookAt(render)',
@ -123,7 +130,7 @@ class MopathRecorder(AppShell, DirectObject):
self.postPoints = []
self.pointSetDict = {}
self.pointSetCount = 0
self.pointSetName = self.name + '-ps-' + `self.pointSetCount`
self.pointSetName = self.name + '-ps-' + repr(self.pointSetCount)
# User callback to call before recording point
self.samplingMode = 'Continuous'
self.preRecordFunc = None
@ -233,7 +240,7 @@ class MopathRecorder(AppShell, DirectObject):
self.undoButton['state'] = 'normal'
else:
self.undoButton['state'] = 'disabled'
self.undoButton.pack(side = Tkinter.LEFT, expand = 0)
self.undoButton.pack(side = tkinter.LEFT, expand = 0)
self.bind(self.undoButton, 'Undo last operation')
self.redoButton = Button(self.menuFrame, text = 'Redo',
@ -242,19 +249,19 @@ class MopathRecorder(AppShell, DirectObject):
self.redoButton['state'] = 'normal'
else:
self.redoButton['state'] = 'disabled'
self.redoButton.pack(side = Tkinter.LEFT, expand = 0)
self.redoButton.pack(side = tkinter.LEFT, expand = 0)
self.bind(self.redoButton, 'Redo last operation')
# Record button
mainFrame = Frame(interior, relief = Tkinter.SUNKEN, borderwidth = 2)
mainFrame = Frame(interior, relief = tkinter.SUNKEN, borderwidth = 2)
frame = Frame(mainFrame)
# Active node path
# Button to select active node path
widget = self.createButton(frame, 'Recording', 'Node Path:',
'Select Active Mopath Node Path',
lambda s = self: SEditor.select(s.nodePath),
side = Tkinter.LEFT, expand = 0)
widget['relief'] = Tkinter.FLAT
side = tkinter.LEFT, expand = 0)
widget['relief'] = tkinter.FLAT
self.nodePathMenu = Pmw.ComboBox(
frame, entry_width = 20,
selectioncommand = self.selectNodePathNamed,
@ -264,7 +271,7 @@ class MopathRecorder(AppShell, DirectObject):
self.nodePathMenu.component('entryfield_entry'))
self.nodePathMenuBG = (
self.nodePathMenuEntry.configure('background')[3])
self.nodePathMenu.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
self.nodePathMenu.pack(side = tkinter.LEFT, fill = tkinter.X, expand = 1)
self.bind(self.nodePathMenu,
'Select active node path used for recording and playback')
# Recording type
@ -285,81 +292,81 @@ class MopathRecorder(AppShell, DirectObject):
'Recording', 'Extend',
('Next record session extends existing path'),
self.recordingType, 'Extend', expand = 0)
frame.pack(fill = Tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 1)
frame = Frame(mainFrame)
widget = self.createCheckbutton(
frame, 'Recording', 'Record',
'On: path is being recorded', self.toggleRecord, 0,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 1)
widget.configure(foreground = 'Red', relief = Tkinter.RAISED, borderwidth = 2,
anchor = Tkinter.CENTER, width = 16)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 1)
widget.configure(foreground = 'Red', relief = tkinter.RAISED, borderwidth = 2,
anchor = tkinter.CENTER, width = 16)
widget = self.createButton(frame, 'Recording', 'Add Keyframe',
'Add Keyframe To Current Path',
self.addKeyframe,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
widget = self.createButton(frame, 'Recording', 'Bind Path to Node',
'Bind Motion Path to selected Object',
self.bindMotionPathToNode,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
frame.pack(fill = Tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 1)
mainFrame.pack(expand = 1, fill = Tkinter.X, pady = 3)
mainFrame.pack(expand = 1, fill = tkinter.X, pady = 3)
# Playback controls
playbackFrame = Frame(interior, relief = Tkinter.SUNKEN,
playbackFrame = Frame(interior, relief = tkinter.SUNKEN,
borderwidth = 2)
Label(playbackFrame, text = 'PLAYBACK CONTROLS',
font=('MSSansSerif', 12, 'bold')).pack(fill = Tkinter.X)
font=('MSSansSerif', 12, 'bold')).pack(fill = tkinter.X)
# Main playback control slider
widget = self.createEntryScale(
playbackFrame, 'Playback', 'Time', 'Set current playback time',
resolution = 0.01, command = self.playbackGoTo, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
resolution = 0.01, command = self.playbackGoTo, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
# Kill playback task if drag slider
widget['preCallback'] = self.stopPlayback
# Jam duration entry into entry scale
self.createLabeledEntry(widget.labelFrame, 'Resample', 'Path Duration',
'Set total curve duration',
command = self.setPathDuration,
side = Tkinter.LEFT, expand = 0)
side = tkinter.LEFT, expand = 0)
# Start stop buttons
frame = Frame(playbackFrame)
widget = self.createButton(frame, 'Playback', '<<',
'Jump to start of playback',
self.jumpToStartOfPlayback,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
widget['font'] = (('MSSansSerif', 12, 'bold'))
widget = self.createCheckbutton(frame, 'Playback', 'Play',
'Start/Stop playback',
self.startStopPlayback, 0,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 1)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 1)
widget.configure(anchor = 'center', justify = 'center',
relief = Tkinter.RAISED, font = ('MSSansSerif', 12, 'bold'))
relief = tkinter.RAISED, font = ('MSSansSerif', 12, 'bold'))
widget = self.createButton(frame, 'Playback', '>>',
'Jump to end of playback',
self.jumpToEndOfPlayback,
side = Tkinter.LEFT, expand = 1)
side = tkinter.LEFT, expand = 1)
widget['font'] = (('MSSansSerif', 12, 'bold'))
self.createCheckbutton(frame, 'Playback', 'Loop',
'On: loop playback',
self.setLoopPlayback, self.loopPlayback,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 0)
frame.pack(fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 0)
frame.pack(fill = tkinter.X, expand = 1)
# Speed control
frame = Frame(playbackFrame)
widget = Button(frame, text = 'PB Speed Vernier', relief = Tkinter.FLAT,
widget = Button(frame, text = 'PB Speed Vernier', relief = tkinter.FLAT,
command = lambda s = self: s.setSpeedScale(1.0))
widget.pack(side = Tkinter.LEFT, expand = 0)
widget.pack(side = tkinter.LEFT, expand = 0)
self.speedScale = Scale(frame, from_ = -1, to = 1,
resolution = 0.01, showvalue = 0,
width = 10, orient = 'horizontal',
command = self.setPlaybackSF)
self.speedScale.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
self.speedScale.pack(side = tkinter.LEFT, fill = tkinter.X, expand = 1)
self.speedVar = StringVar()
self.speedVar.set("0.00")
self.speedEntry = Entry(frame, textvariable = self.speedVar,
@ -368,14 +375,14 @@ class MopathRecorder(AppShell, DirectObject):
'<Return>',
lambda e = None, s = self: s.setSpeedScale(
string.atof(s.speedVar.get())))
self.speedEntry.pack(side = Tkinter.LEFT, expand = 0)
frame.pack(fill = Tkinter.X, expand = 1)
self.speedEntry.pack(side = tkinter.LEFT, expand = 0)
frame.pack(fill = tkinter.X, expand = 1)
playbackFrame.pack(fill = Tkinter.X, pady = 2)
playbackFrame.pack(fill = tkinter.X, pady = 2)
# Create notebook pages
self.mainNotebook = Pmw.NoteBook(interior)
self.mainNotebook.pack(fill = Tkinter.BOTH, expand = 1)
self.mainNotebook.pack(fill = tkinter.BOTH, expand = 1)
self.resamplePage = self.mainNotebook.add('Resample')
self.refinePage = self.mainNotebook.add('Refine')
self.extendPage = self.mainNotebook.add('Extend')
@ -386,35 +393,35 @@ class MopathRecorder(AppShell, DirectObject):
## RESAMPLE PAGE
label = Label(self.resamplePage, text = 'RESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
# Resample
resampleFrame = Frame(
self.resamplePage, relief = Tkinter.SUNKEN, borderwidth = 2)
self.resamplePage, relief = tkinter.SUNKEN, borderwidth = 2)
label = Label(resampleFrame, text = 'RESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold')).pack()
widget = self.createSlider(
resampleFrame, 'Resample', 'Num. Samples',
'Number of samples in resampled curve',
resolution = 1, min = 2, max = 1000, command = self.setNumSamples)
widget.component('hull')['relief'] = Tkinter.RIDGE
widget.component('hull')['relief'] = tkinter.RIDGE
widget['postCallback'] = self.sampleCurve
frame = Frame(resampleFrame)
self.createButton(
frame, 'Resample', 'Make Even',
'Apply timewarp so resulting path has constant velocity',
self.makeEven, side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
self.makeEven, side = tkinter.LEFT, fill = tkinter.X, expand = 1)
self.createButton(
frame, 'Resample', 'Face Forward',
'Compute HPR so resulting hpr curve faces along xyz tangent',
self.faceForward, side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
frame.pack(fill = Tkinter.X, expand = 0)
resampleFrame.pack(fill = Tkinter.X, expand = 0, pady = 2)
self.faceForward, side = tkinter.LEFT, fill = tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 0)
resampleFrame.pack(fill = tkinter.X, expand = 0, pady = 2)
# Desample
desampleFrame = Frame(
self.resamplePage, relief = Tkinter.SUNKEN, borderwidth = 2)
self.resamplePage, relief = tkinter.SUNKEN, borderwidth = 2)
Label(desampleFrame, text = 'DESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold')).pack()
widget = self.createSlider(
@ -422,16 +429,16 @@ class MopathRecorder(AppShell, DirectObject):
'Specify number of points to skip between samples',
min = 1, max = 100, resolution = 1,
command = self.setDesampleFrequency)
widget.component('hull')['relief'] = Tkinter.RIDGE
widget.component('hull')['relief'] = tkinter.RIDGE
widget['postCallback'] = self.desampleCurve
desampleFrame.pack(fill = Tkinter.X, expand = 0, pady = 2)
desampleFrame.pack(fill = tkinter.X, expand = 0, pady = 2)
## REFINE PAGE ##
refineFrame = Frame(self.refinePage, relief = Tkinter.SUNKEN,
refineFrame = Frame(self.refinePage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(refineFrame, text = 'REFINE CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
widget = self.createSlider(refineFrame,
'Refine Page', 'Refine From',
@ -460,14 +467,14 @@ class MopathRecorder(AppShell, DirectObject):
command = self.setRefineStop)
widget['preCallback'] = self.setRefineMode
widget['postCallback'] = self.getPostPoints
refineFrame.pack(fill = Tkinter.X)
refineFrame.pack(fill = tkinter.X)
## EXTEND PAGE ##
extendFrame = Frame(self.extendPage, relief = Tkinter.SUNKEN,
extendFrame = Frame(self.extendPage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(extendFrame, text = 'EXTEND CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
widget = self.createSlider(extendFrame,
'Extend Page', 'Extend From',
@ -483,14 +490,14 @@ class MopathRecorder(AppShell, DirectObject):
resolution = 0.01,
command = self.setControlStart)
widget['preCallback'] = self.setExtendMode
extendFrame.pack(fill = Tkinter.X)
extendFrame.pack(fill = tkinter.X)
## CROP PAGE ##
cropFrame = Frame(self.cropPage, relief = Tkinter.SUNKEN,
cropFrame = Frame(self.cropPage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(cropFrame, text = 'CROP CURVE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
widget = self.createSlider(
cropFrame,
@ -508,11 +515,11 @@ class MopathRecorder(AppShell, DirectObject):
self.createButton(cropFrame, 'Crop Page', 'Crop Curve',
'Crop curve to specified from to times',
self.cropCurve, fill = Tkinter.NONE)
cropFrame.pack(fill = Tkinter.X)
self.cropCurve, fill = tkinter.NONE)
cropFrame.pack(fill = tkinter.X)
## DRAW PAGE ##
drawFrame = Frame(self.drawPage, relief = Tkinter.SUNKEN,
drawFrame = Frame(self.drawPage, relief = tkinter.SUNKEN,
borderwidth = 2)
self.sf = Pmw.ScrolledFrame(self.drawPage, horizflex = 'elastic')
@ -521,57 +528,57 @@ class MopathRecorder(AppShell, DirectObject):
label = Label(sfFrame, text = 'CURVE RENDERING STYLE',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
frame = Frame(sfFrame)
Label(frame, text = 'SHOW:').pack(side = Tkinter.LEFT, expand = 0)
Label(frame, text = 'SHOW:').pack(side = tkinter.LEFT, expand = 0)
widget = self.createCheckbutton(
frame, 'Style', 'Path',
'On: path is visible', self.setPathVis, 1,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Knots',
'On: path knots are visible', self.setKnotVis, 1,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'CVs',
'On: path CVs are visible', self.setCvVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Hull',
'On: path hull is visible', self.setHullVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Trace',
'On: record is visible', self.setTraceVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
widget = self.createCheckbutton(
frame, 'Style', 'Marker',
'On: playback marker is visible', self.setMarkerVis, 0,
side = Tkinter.LEFT, fill = Tkinter.X, expand = 1)
frame.pack(fill = Tkinter.X, expand = 1)
side = tkinter.LEFT, fill = tkinter.X, expand = 1)
frame.pack(fill = tkinter.X, expand = 1)
# Sliders
widget = self.createSlider(
sfFrame, 'Style', 'Num Segs',
'Set number of segments used to approximate each parametric unit',
min = 1.0, max = 400, resolution = 1.0,
value = 40,
command = self.setNumSegs, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
command = self.setNumSegs, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
widget = self.createSlider(
sfFrame, 'Style', 'Num Ticks',
'Set number of tick marks drawn for each unit of time',
min = 0.0, max = 10.0, resolution = 1.0,
value = 0.0,
command = self.setNumTicks, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
command = self.setNumTicks, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
widget = self.createSlider(
sfFrame, 'Style', 'Tick Scale',
'Set visible size of time tick marks',
min = 0.01, max = 100.0, resolution = 0.01,
value = 5.0,
command = self.setTickScale, side = Tkinter.TOP)
widget.component('hull')['relief'] = Tkinter.RIDGE
command = self.setTickScale, side = tkinter.TOP)
widget.component('hull')['relief'] = tkinter.RIDGE
self.createColorEntry(
sfFrame, 'Style', 'Path Color',
'Color of curve',
@ -598,14 +605,14 @@ class MopathRecorder(AppShell, DirectObject):
command = self.setHullColor,
value = [255.0,128.0,128.0,255.0])
#drawFrame.pack(fill = Tkinter.X)
#drawFrame.pack(fill = tkinter.X)
## OPTIONS PAGE ##
optionsFrame = Frame(self.optionsPage, relief = Tkinter.SUNKEN,
optionsFrame = Frame(self.optionsPage, relief = tkinter.SUNKEN,
borderwidth = 2)
label = Label(optionsFrame, text = 'RECORDING OPTIONS',
font=('MSSansSerif', 12, 'bold'))
label.pack(fill = Tkinter.X)
label.pack(fill = tkinter.X)
# Hooks
frame = Frame(optionsFrame)
widget = self.createLabeledEntry(
@ -614,7 +621,7 @@ class MopathRecorder(AppShell, DirectObject):
value = self.startStopHook,
command = self.setStartStopHook)[0]
label = self.getWidget('Recording', 'Record Hook-Label')
label.configure(width = 16, anchor = Tkinter.W)
label.configure(width = 16, anchor = tkinter.W)
self.setStartStopHook()
widget = self.createLabeledEntry(
frame, 'Recording', 'Keyframe Hook',
@ -622,9 +629,9 @@ class MopathRecorder(AppShell, DirectObject):
value = self.keyframeHook,
command = self.setKeyframeHook)[0]
label = self.getWidget('Recording', 'Keyframe Hook-Label')
label.configure(width = 16, anchor = Tkinter.W)
label.configure(width = 16, anchor = tkinter.W)
self.setKeyframeHook()
frame.pack(expand = 1, fill = Tkinter.X)
frame.pack(expand = 1, fill = tkinter.X)
# PreRecordFunc
frame = Frame(optionsFrame)
widget = self.createComboBox(
@ -632,17 +639,17 @@ class MopathRecorder(AppShell, DirectObject):
'Function called before sampling each point',
PRF_UTILITIES, self.setPreRecordFunc,
history = 1, expand = 1)
widget.configure(label_width = 16, label_anchor = Tkinter.W)
widget.configure(label_width = 16, label_anchor = tkinter.W)
widget.configure(entryfield_entry_state = 'normal')
# Initialize preRecordFunc
self.preRecordFunc = eval(PRF_UTILITIES[0])
self.createCheckbutton(frame, 'Recording', 'PRF Active',
'On: Pre Record Func enabled',
None, 0,
side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 0)
frame.pack(expand = 1, fill = Tkinter.X)
side = tkinter.LEFT, fill = tkinter.BOTH, expand = 0)
frame.pack(expand = 1, fill = tkinter.X)
# Pack record frame
optionsFrame.pack(fill = Tkinter.X, pady = 2)
optionsFrame.pack(fill = tkinter.X, pady = 2)
self.mainNotebook.setnaturalsize()
@ -682,7 +689,7 @@ class MopathRecorder(AppShell, DirectObject):
marker if subnode selected
"""
taskMgr.remove(self.name + '-curveEditTask')
print nodePath.get_key()
print(nodePath.get_key())
if nodePath.get_key() in self.playbackMarkerIds:
SEditor.select(self.playbackMarker)
elif nodePath.get_key() in self.tangentMarkerIds:
@ -799,7 +806,7 @@ class MopathRecorder(AppShell, DirectObject):
def createNewPointSet(self, curveName = None):
if curveName == None:
self.pointSetName = self.name + '-ps-' + `self.pointSetCount`
self.pointSetName = self.name + '-ps-' + repr(self.pointSetCount)
else:
self.pointSetName = curveName
# Update dictionary and record pointer to new point set
@ -1137,7 +1144,7 @@ class MopathRecorder(AppShell, DirectObject):
def computeCurves(self):
# Check to make sure curve fitters have points
if (self.curveFitter.getNumSamples() == 0):
print 'MopathRecorder.computeCurves: Must define curve first'
print('MopathRecorder.computeCurves: Must define curve first')
return
# Create curves
# XYZ
@ -1282,8 +1289,8 @@ class MopathRecorder(AppShell, DirectObject):
dictName = name
else:
# Generate a unique name for the dict
dictName = name # + '-' + `nodePath.get_key()`
if not dict.has_key(dictName):
dictName = name # + '-' + repr(nodePath.get_key())
if dictName not in dict:
# Update combo box to include new item
names.append(dictName)
listbox = menu.component('scrolledlist')
@ -1386,7 +1393,7 @@ class MopathRecorder(AppShell, DirectObject):
def desampleCurve(self):
if (self.curveFitter.getNumSamples() == 0):
print 'MopathRecorder.desampleCurve: Must define curve first'
print('MopathRecorder.desampleCurve: Must define curve first')
return
# NOTE: This is destructive, points will be deleted from curve fitter
self.curveFitter.desample(self.desampleFrequency)
@ -1400,7 +1407,7 @@ class MopathRecorder(AppShell, DirectObject):
def sampleCurve(self, fCompute = 1, curveName = None):
if self.curveCollection == None:
print 'MopathRecorder.sampleCurve: Must define curve first'
print('MopathRecorder.sampleCurve: Must define curve first')
return
# Reset curve fitters
self.curveFitter.reset()
@ -1617,7 +1624,7 @@ class MopathRecorder(AppShell, DirectObject):
def cropCurve(self):
if self.pointSet == None:
print 'Empty Point Set'
print('Empty Point Set')
return
# Keep handle on old points
oldPoints = self.pointSet
@ -1653,15 +1660,15 @@ class MopathRecorder(AppShell, DirectObject):
# Use first directory in model path
mPath = getModelPath()
if mPath.getNumDirectories() > 0:
if `mPath.getDirectory(0)` == '.':
if repr(mPath.getDirectory(0)) == '.':
path = '.'
else:
path = mPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'MopathRecorder Info: Empty Model Path!'
print 'Using current directory'
print('MopathRecorder Info: Empty Model Path!')
print('Using current directory')
path = '.'
mopathFilename = askopenfilename(
defaultextension = '.egg',
@ -1692,15 +1699,15 @@ class MopathRecorder(AppShell, DirectObject):
# Use first directory in model path
mPath = getModelPath()
if mPath.getNumDirectories() > 0:
if `mPath.getDirectory(0)` == '.':
if repr(mPath.getDirectory(0)) == '.':
path = '.'
else:
path = mPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'MopathRecorder Info: Empty Model Path!'
print 'Using current directory'
print('MopathRecorder Info: Empty Model Path!')
print('Using current directory')
path = '.'
mopathFilename = asksaveasfilename(
defaultextension = '.egg',
@ -1734,28 +1741,28 @@ class MopathRecorder(AppShell, DirectObject):
def createLabeledEntry(self, parent, category, text, balloonHelp,
value = '', command = None,
relief = 'sunken', side = Tkinter.LEFT,
relief = 'sunken', side = tkinter.LEFT,
expand = 1, width = 12):
frame = Frame(parent)
variable = StringVar()
variable.set(value)
label = Label(frame, text = text)
label.pack(side = Tkinter.LEFT, fill = Tkinter.X)
label.pack(side = tkinter.LEFT, fill = tkinter.X)
self.bind(label, balloonHelp)
self.widgetDict[category + '-' + text + '-Label'] = label
entry = Entry(frame, width = width, relief = relief,
textvariable = variable)
entry.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = expand)
entry.pack(side = tkinter.LEFT, fill = tkinter.X, expand = expand)
self.bind(entry, balloonHelp)
self.widgetDict[category + '-' + text] = entry
self.variableDict[category + '-' + text] = variable
if command:
entry.bind('<Return>', command)
frame.pack(side = side, fill = Tkinter.X, expand = expand)
frame.pack(side = side, fill = tkinter.X, expand = expand)
return (frame, label, entry)
def createButton(self, parent, category, text, balloonHelp, command,
side = 'top', expand = 0, fill = Tkinter.X):
side = 'top', expand = 0, fill = tkinter.X):
widget = Button(parent, text = text)
# Do this after the widget so command isn't called on creation
widget['command'] = command
@ -1766,10 +1773,10 @@ class MopathRecorder(AppShell, DirectObject):
def createCheckbutton(self, parent, category, text,
balloonHelp, command, initialState,
side = 'top', fill = Tkinter.X, expand = 0):
side = 'top', fill = tkinter.X, expand = 0):
bool = BooleanVar()
bool.set(initialState)
widget = Checkbutton(parent, text = text, anchor = Tkinter.W,
widget = Checkbutton(parent, text = text, anchor = tkinter.W,
variable = bool)
# Do this after the widget so command isn't called on creation
widget['command'] = command
@ -1781,8 +1788,8 @@ class MopathRecorder(AppShell, DirectObject):
def createRadiobutton(self, parent, side, category, text,
balloonHelp, variable, value,
command = None, fill = Tkinter.X, expand = 0):
widget = Radiobutton(parent, text = text, anchor = Tkinter.W,
command = None, fill = tkinter.X, expand = 0):
widget = Radiobutton(parent, text = text, anchor = tkinter.W,
variable = variable, value = value)
# Do this after the widget so command isn't called on creation
widget['command'] = command
@ -1798,10 +1805,10 @@ class MopathRecorder(AppShell, DirectObject):
kw['min'] = min
kw['maxVelocity'] = maxVelocity
kw['resolution'] = resolution
widget = apply(Floater, (parent,), kw)
widget = Floater(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1809,10 +1816,10 @@ class MopathRecorder(AppShell, DirectObject):
def createAngleDial(self, parent, category, text, balloonHelp,
command = None, **kw):
kw['text'] = text
widget = apply(AngleDial,(parent,), kw)
widget = AngleDial(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1820,13 +1827,13 @@ class MopathRecorder(AppShell, DirectObject):
def createSlider(self, parent, category, text, balloonHelp,
command = None, min = 0.0, max = 1.0,
resolution = None,
side = Tkinter.TOP, fill = Tkinter.X, expand = 1, **kw):
side = tkinter.TOP, fill = tkinter.X, expand = 1, **kw):
kw['text'] = text
kw['min'] = min
kw['max'] = max
kw['resolution'] = resolution
#widget = apply(EntryScale, (parent,), kw)
widget = apply(Slider, (parent,), kw)
widget = Slider(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(side = side, fill = fill, expand = expand)
@ -1837,12 +1844,12 @@ class MopathRecorder(AppShell, DirectObject):
def createEntryScale(self, parent, category, text, balloonHelp,
command = None, min = 0.0, max = 1.0,
resolution = None,
side = Tkinter.TOP, fill = Tkinter.X, expand = 1, **kw):
side = tkinter.TOP, fill = tkinter.X, expand = 1, **kw):
kw['text'] = text
kw['min'] = min
kw['max'] = max
kw['resolution'] = resolution
widget = apply(EntryScale, (parent,), kw)
widget = EntryScale(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(side = side, fill = fill, expand = expand)
@ -1854,10 +1861,10 @@ class MopathRecorder(AppShell, DirectObject):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector2Entry, (parent,), kw)
widget = Vector2Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1866,10 +1873,10 @@ class MopathRecorder(AppShell, DirectObject):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector3Entry, (parent,), kw)
widget = Vector3Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1878,10 +1885,10 @@ class MopathRecorder(AppShell, DirectObject):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(ColorEntry, (parent,) ,kw)
widget = ColorEntry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget
return widget
@ -1891,13 +1898,13 @@ class MopathRecorder(AppShell, DirectObject):
optionVar = StringVar()
if len(items) > 0:
optionVar.set(items[0])
widget = Pmw.OptionMenu(parent, labelpos = Tkinter.W, label_text = text,
widget = Pmw.OptionMenu(parent, labelpos = tkinter.W, label_text = text,
label_width = 12, menu_tearoff = 1,
menubutton_textvariable = optionVar,
items = items)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = Tkinter.X)
widget.pack(fill = tkinter.X)
self.bind(widget.component('menubutton'), balloonHelp)
self.widgetDict[category + '-' + text] = widget
self.variableDict[category + '-' + text] = optionVar
@ -1905,9 +1912,9 @@ class MopathRecorder(AppShell, DirectObject):
def createComboBox(self, parent, category, text, balloonHelp,
items, command, history = 0,
side = Tkinter.LEFT, expand = 0, fill = Tkinter.X):
side = tkinter.LEFT, expand = 0, fill = tkinter.X):
widget = Pmw.ComboBox(parent,
labelpos = Tkinter.W,
labelpos = tkinter.W,
label_text = text,
label_anchor = 'e',
label_width = 12,
@ -1959,14 +1966,14 @@ class MopathRecorder(AppShell, DirectObject):
def bindMotionPathToNode(self):
if self.curveCollection == None:
print '----Error: you need to select or create a curve first!'
print('----Error: you need to select or create a curve first!')
return
self.accept('MP_checkName', self.bindMotionPath)
self.askName = namePathPanel(MopathRecorder.count)
return
def bindMotionPath(self,name=None,test=None):
print test
print(test)
self.ignore('MP_checkName')
del self.askName
self.curveCollection.getCurve(0).setName(name)
@ -1993,7 +2000,7 @@ class MopathRecorder(AppShell, DirectObject):
If the list is not None, it will put the vurve back into the curve list.
else, do nothing.
'''
print curveList
print(curveList)
self.ignore('curveListFor'+self.name)
if curveList != None:
for collection in curveList:
@ -2037,8 +2044,8 @@ class namePathPanel(AppShell):
dataFrame = Frame(mainFrame)
label = Label(dataFrame, text='This name will be used as a reference for this Path.',font=('MSSansSerif', 10))
label.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X)
dataFrame.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X, padx=5, pady=10)
label.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X)
dataFrame.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X, padx=5, pady=10)
dataFrame = Frame(mainFrame)
self.inputZone = Pmw.EntryField(dataFrame, labelpos='w', label_text = 'Name Selected Path: ',
@ -2046,14 +2053,14 @@ class namePathPanel(AppShell):
label_font=('MSSansSerif', 10),
validate = None,
entry_width = 20)
self.inputZone.pack(side = Tkinter.LEFT, fill=Tkinter.X,expand=0)
self.inputZone.pack(side = tkinter.LEFT, fill=tkinter.X,expand=0)
self.button_ok = Button(dataFrame, text="OK", command=self.ok_press,width=10)
self.button_ok.pack(fill=Tkinter.X,expand=0,side=Tkinter.LEFT, padx = 3)
self.button_ok.pack(fill=tkinter.X,expand=0,side=tkinter.LEFT, padx = 3)
dataFrame.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X, padx=10, pady=10)
dataFrame.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X, padx=10, pady=10)
mainFrame.pack(expand = 1, fill = Tkinter.BOTH)
mainFrame.pack(expand = 1, fill = tkinter.BOTH)

View File

@ -209,9 +209,9 @@ class ParticleEffect(NodePath):
"""loadConfig(filename)"""
#try:
# if vfs:
print vfs.readFile(filename)
exec vfs.readFile(filename)
print "Particle Effect Reading using VFS"
print(vfs.readFile(filename))
exec(vfs.readFile(filename))
print("Particle Effect Reading using VFS")
# else:
# execfile(filename.toOsSpecific())
# print "Shouldnt be wrong"

View File

@ -2,9 +2,7 @@
# Import Tkinter, Pmw, and the floater code from this directory tree.
from direct.tkwidgets.AppShell import AppShell
from tkFileDialog import *
from tkSimpleDialog import askstring
import os, Pmw, Tkinter
import os, Pmw, sys
from direct.tkwidgets.Dial import AngleDial
from direct.tkwidgets.Floater import Floater
from direct.tkwidgets.Slider import Slider
@ -15,6 +13,15 @@ import seForceGroup
import seParticles
import seParticleEffect
if sys.version_info >= (3, 0):
from tkinter.filedialog import *
from tkinter.simpledialog import askstring
else:
from tkFileDialog import *
from tkSimpleDialog import askstring
class ParticlePanel(AppShell):
# Override class variables
appname = 'Particle Panel'
@ -774,7 +781,7 @@ class ParticlePanel(AppShell):
kw['min'] = min
kw['resolution'] = resolution
kw['numDigits'] = numDigits
widget = apply(Floater, (parent,), kw)
widget = Floater(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -786,7 +793,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
kw['text'] = text
kw['style'] = 'mini'
widget = apply(AngleDial,(parent,), kw)
widget = AngleDial(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -801,7 +808,7 @@ class ParticlePanel(AppShell):
kw['min'] = min
kw['max'] = max
kw['resolution'] = resolution
widget = apply(Slider, (parent,), kw)
widget = Slider(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -813,7 +820,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector2Entry, (parent,), kw)
widget = Vector2Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -825,7 +832,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(Vector3Entry, (parent,), kw)
widget = Vector3Entry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -837,7 +844,7 @@ class ParticlePanel(AppShell):
command = None, **kw):
# Set label's text
kw['text'] = text
widget = apply(ColorEntry, (parent,) ,kw)
widget = ColorEntry(parent, **kw)
# Do this after the widget so command isn't called on creation
widget['command'] = command
widget.pack(fill = X)
@ -992,7 +999,7 @@ class ParticlePanel(AppShell):
self.mainNotebook.selectpage('System')
self.updateInfo('System')
else:
print 'ParticlePanel: No effect named ' + name
print('ParticlePanel: No effect named ' + name)
def toggleEffect(self, effect, var):
if var.get():
@ -1041,15 +1048,15 @@ class ParticlePanel(AppShell):
# Find path to particle directory
pPath = getParticlePath()
if pPath.getNumDirectories() > 0:
if `pPath.getDirectory(0)` == '.':
if repr(pPath.getDirectory(0)) == '.':
path = '.'
else:
path = pPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'ParticlePanel Warning: Invalid default DNA directory!'
print 'Using current directory'
print('ParticlePanel Warning: Invalid default DNA directory!')
print('Using current directory')
path = '.'
particleFilename = askopenfilename(
defaultextension = '.ptf',
@ -1070,15 +1077,15 @@ class ParticlePanel(AppShell):
# Find path to particle directory
pPath = getParticlePath()
if pPath.getNumDirectories() > 0:
if `pPath.getDirectory(0)` == '.':
if repr(pPath.getDirectory(0)) == '.':
path = '.'
else:
path = pPath.getDirectory(0).toOsSpecific()
else:
path = '.'
if not os.path.isdir(path):
print 'ParticlePanel Warning: Invalid default DNA directory!'
print 'Using current directory'
print('ParticlePanel Warning: Invalid default DNA directory!')
print('Using current directory')
path = '.'
particleFilename = asksaveasfilename(
defaultextension = '.ptf',
@ -1654,7 +1661,7 @@ class ParticlePanel(AppShell):
def setRendererSpriteNonAnimatedTheta(self, theta):
self.particles.renderer.setNonanimatedTheta(theta)
def setRendererSpriteBlendMethod(self, blendMethod):
print blendMethod
print(blendMethod)
if blendMethod == 'PP_NO_BLEND':
bMethod = BaseParticleRenderer.PPNOBLEND
elif blendMethod == 'PP_BLEND_LINEAR':
@ -1863,7 +1870,7 @@ class ParticlePanel(AppShell):
count, force):
def setVec(vec, f = force):
f.setVector(vec[0], vec[1], vec[2])
forceName = 'Vector Force-' + `count`
forceName = 'Vector Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
vec = force.getLocalVector()
@ -1875,7 +1882,7 @@ class ParticlePanel(AppShell):
def createLinearRandomForceWidget(self, forcePage, pageName, count,
force, type):
forceName = type + ' Force-' + `count`
forceName = type + ' Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
self.createForceActiveWidget(frame, pageName, forceName, force)
@ -1884,7 +1891,7 @@ class ParticlePanel(AppShell):
count, force):
def setCoef(coef, f = force):
f.setCoef(coef)
forceName = 'Friction Force-' + `count`
forceName = 'Friction Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
self.createFloater(frame, pageName, forceName + ' Coef',
@ -1895,7 +1902,7 @@ class ParticlePanel(AppShell):
def createLinearCylinderVortexForceWidget(self, forcePage, pageName,
count, force):
forceName = 'Vortex Force-' + `count`
forceName = 'Vortex Force-' + repr(count)
def setCoef(coef, f = force):
f.setCoef(coef)
def setLength(length, f = force):
@ -1934,7 +1941,7 @@ class ParticlePanel(AppShell):
f.setForceCenter(Point3(vec[0], vec[1], vec[2]))
def setRadius(radius, f = force):
f.setRadius(radius)
forceName = type + ' Force-' + `count`
forceName = type + ' Force-' + repr(count)
frame = self.createForceFrame(forcePage, forceName, force)
self.createLinearForceWidgets(frame, pageName, forceName, force)
var = self.createOptionMenu(

View File

@ -93,7 +93,7 @@ class Particles(ParticleSystem):
elif (type == "OrientedParticleFactory"):
self.factory = OrientedParticleFactory.OrientedParticleFactory()
else:
print "unknown factory type: %s" % type
print("unknown factory type: %s" % type)
return None
self.factory.setLifespanBase(0.5)
ParticleSystem.ParticleSystem.setFactory(self, self.factory)
@ -132,7 +132,7 @@ class Particles(ParticleSystem):
# See sourceFileName and sourceNodeName in SpriteParticleRenderer-extensions.py
self.renderer.setTextureFromNode()
else:
print "unknown renderer type: %s" % type
print("unknown renderer type: %s" % type)
return None
ParticleSystem.ParticleSystem.setRenderer(self, self.renderer)
@ -163,7 +163,7 @@ class Particles(ParticleSystem):
elif (type == "TangentRingEmitter"):
self.emitter = TangentRingEmitter.TangentRingEmitter()
else:
print "unknown emitter type: %s" % type
print("unknown emitter type: %s" % type)
return None
ParticleSystem.ParticleSystem.setEmitter(self, self.emitter)

View File

@ -5,9 +5,16 @@ from direct.directtools.DirectGlobals import *
from direct.tkwidgets.AppShell import AppShell
from direct.tkwidgets.Dial import AngleDial
from direct.tkwidgets.Floater import Floater
from Tkinter import Button, Menubutton, Menu, StringVar
from panda3d.core import *
import Tkinter, Pmw
import sys, Pmw
if sys.version_info >= (3, 0):
from tkinter import Button, Menubutton, Menu, StringVar
import tkinter
else:
from Tkinter import Button, Menubutton, Menu, StringVar
import Tkinter as tkinter
"""
TODO:
Task to monitor pose
@ -84,7 +91,7 @@ class Placer(AppShell):
def createInterface(self):
# The interior of the toplevel panel
interior = self.interior()
interior['relief'] = Tkinter.FLAT
interior['relief'] = tkinter.FLAT
# Add placer commands to menubar
self.menuBar.addmenu('Placer', 'Placer Panel Operations')
self.menuBar.addmenuitem('Placer', 'command',
@ -113,7 +120,7 @@ class Placer(AppShell):
# Get a handle to the menu frame
menuFrame = self.menuFrame
self.nodePathMenu = Pmw.ComboBox(
menuFrame, labelpos = Tkinter.W, label_text = 'Node Path:',
menuFrame, labelpos = tkinter.W, label_text = 'Node Path:',
entry_width = 20,
selectioncommand = self.selectNodePathNamed,
scrolledlist_items = self.nodePathNames)
@ -168,7 +175,7 @@ class Placer(AppShell):
tag_text = 'Position',
tag_font=('MSSansSerif', 14),
tag_activebackground = '#909090',
ring_relief = Tkinter.RIDGE)
ring_relief = tkinter.RIDGE)
posMenubutton = posGroup.component('tag')
self.bind(posMenubutton, 'Position menu operations')
posMenu = Menu(posMenubutton, tearoff = 0)
@ -182,7 +189,7 @@ class Placer(AppShell):
# Create the dials
self.posX = self.createcomponent('posX', (), None,
Floater, (posInterior,),
text = 'X', relief = Tkinter.FLAT,
text = 'X', relief = tkinter.FLAT,
value = 0.0,
label_foreground = 'Red')
self.posX['commandData'] = ['x']
@ -193,7 +200,7 @@ class Placer(AppShell):
self.posY = self.createcomponent('posY', (), None,
Floater, (posInterior,),
text = 'Y', relief = Tkinter.FLAT,
text = 'Y', relief = tkinter.FLAT,
value = 0.0,
label_foreground = '#00A000')
self.posY['commandData'] = ['y']
@ -204,7 +211,7 @@ class Placer(AppShell):
self.posZ = self.createcomponent('posZ', (), None,
Floater, (posInterior,),
text = 'Z', relief = Tkinter.FLAT,
text = 'Z', relief = tkinter.FLAT,
value = 0.0,
label_foreground = 'Blue')
self.posZ['commandData'] = ['z']
@ -219,7 +226,7 @@ class Placer(AppShell):
tag_text = 'Orientation',
tag_font=('MSSansSerif', 14),
tag_activebackground = '#909090',
ring_relief = Tkinter.RIDGE)
ring_relief = tkinter.RIDGE)
hprMenubutton = hprGroup.component('tag')
self.bind(hprMenubutton, 'Orientation menu operations')
hprMenu = Menu(hprMenubutton, tearoff = 0)
@ -234,7 +241,7 @@ class Placer(AppShell):
AngleDial, (hprInterior,),
style = 'mini',
text = 'H', value = 0.0,
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
label_foreground = 'blue')
self.hprH['commandData'] = ['h']
self.hprH['preCallback'] = self.xformStart
@ -246,7 +253,7 @@ class Placer(AppShell):
AngleDial, (hprInterior,),
style = 'mini',
text = 'P', value = 0.0,
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
label_foreground = 'red')
self.hprP['commandData'] = ['p']
self.hprP['preCallback'] = self.xformStart
@ -258,7 +265,7 @@ class Placer(AppShell):
AngleDial, (hprInterior,),
style = 'mini',
text = 'R', value = 0.0,
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
label_foreground = '#00A000')
self.hprR['commandData'] = ['r']
self.hprR['preCallback'] = self.xformStart
@ -276,7 +283,7 @@ class Placer(AppShell):
tag_pyclass = Menubutton,
tag_font=('MSSansSerif', 14),
tag_activebackground = '#909090',
ring_relief = Tkinter.RIDGE)
ring_relief = tkinter.RIDGE)
self.scaleMenubutton = scaleGroup.component('tag')
self.bind(self.scaleMenubutton, 'Scale menu operations')
self.scaleMenubutton['textvariable'] = self.scalingMode
@ -302,7 +309,7 @@ class Placer(AppShell):
self.scaleX = self.createcomponent('scaleX', (), None,
Floater, (scaleInterior,),
text = 'X Scale',
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
min = 0.0001, value = 1.0,
resetValue = 1.0,
label_foreground = 'Red')
@ -315,7 +322,7 @@ class Placer(AppShell):
self.scaleY = self.createcomponent('scaleY', (), None,
Floater, (scaleInterior,),
text = 'Y Scale',
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
min = 0.0001, value = 1.0,
resetValue = 1.0,
label_foreground = '#00A000')
@ -328,7 +335,7 @@ class Placer(AppShell):
self.scaleZ = self.createcomponent('scaleZ', (), None,
Floater, (scaleInterior,),
text = 'Z Scale',
relief = Tkinter.FLAT,
relief = tkinter.FLAT,
min = 0.0001, value = 1.0,
resetValue = 1.0,
label_foreground = 'Blue')
@ -508,8 +515,8 @@ class Placer(AppShell):
dictName = name
else:
# Generate a unique name for the dict
dictName = name + '-' + `nodePath.get_key()`
if not dict.has_key(dictName):
dictName = name + '-' + repr(nodePath.get_key())
if dictName not in dict:
# Update combo box to include new item
names.append(dictName)
listbox = menu.component('scrolledlist')
@ -769,12 +776,12 @@ class Placer(AppShell):
posString = '%.2f, %.2f, %.2f' % (pos[0], pos[1], pos[2])
hprString = '%.2f, %.2f, %.2f' % (hpr[0], hpr[1], hpr[2])
scaleString = '%.2f, %.2f, %.2f' % (scale[0], scale[1], scale[2])
print 'NodePath: %s' % name
print 'Pos: %s' % posString
print 'Hpr: %s' % hprString
print 'Scale: %s' % scaleString
print ('%s.setPosHprScale(%s, %s, %s)' %
(name, posString, hprString, scaleString))
print('NodePath: %s' % name)
print('Pos: %s' % posString)
print('Hpr: %s' % hprString)
print('Scale: %s' % scaleString)
print(('%s.setPosHprScale(%s, %s, %s)' %
(name, posString, hprString, scaleString)))
def onDestroy(self, event):
# Remove hooks

View File

@ -9,9 +9,16 @@
#
#################################################################
from direct.showbase.DirectObject import DirectObject
from Tkinter import IntVar, Frame, Label
from seTree import TreeNode, TreeItem
import Pmw, Tkinter
import Pmw, sys
if sys.version_info >= (3, 0):
from tkinter import IntVar, Frame, Label
import tkinter
else:
from Tkinter import IntVar, Frame, Label
import Tkinter as tkinter
# changing these strings requires changing sceneEditor.py SGE_ strs too!
# This list of items will be showed on the pop out window when user right click on
@ -57,7 +64,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
# Setup up container
interior = self.interior()
interior.configure(relief = Tkinter.GROOVE, borderwidth = 2)
interior.configure(relief = tkinter.GROOVE, borderwidth = 2)
# Create a label and an entry
self._scrolledCanvas = self.createcomponent(
@ -69,7 +76,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
self._canvas = self._scrolledCanvas.component('canvas')
self._canvas['scrollregion'] = ('0i', '0i', '2i', '4i')
self._scrolledCanvas.resizescrollregion()
self._scrolledCanvas.pack(padx = 3, pady = 3, expand=1, fill = Tkinter.BOTH)
self._scrolledCanvas.pack(padx = 3, pady = 3, expand=1, fill = tkinter.BOTH)
self._canvas.bind('<ButtonPress-2>', self.mouse2Down)
self._canvas.bind('<B2-Motion>', self.mouse2Motion)
@ -91,8 +98,8 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
(), None,
Label, (interior,),
text = 'Active Reparent Target: ',
anchor = Tkinter.W, justify = Tkinter.LEFT)
self._label.pack(fill = Tkinter.X)
anchor = tkinter.W, justify = tkinter.LEFT)
self._label.pack(fill = tkinter.X)
# Add update parent label
def updateLabel(nodePath = None, s = self):
@ -145,7 +152,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject):
if item!= None:
item.select(callBack)
else:
print '----SGE: Error Selection'
print('----SGE: Error Selection')
class SceneGraphExplorerItem(TreeItem):

View File

@ -70,7 +70,7 @@ class SelectedNodePaths(DirectObject):
""" Select the specified node path. Multiselect as required """
# Do nothing if nothing selected
if not nodePath:
print 'Nothing selected!!'
print('Nothing selected!!')
return None
# Reset selected objects and highlight if multiSelect is false
@ -124,7 +124,7 @@ class SelectedNodePaths(DirectObject):
Return a list of all selected node paths. No verification of
connectivity is performed on the members of the list
"""
return self.selectedDict.values()[:]
return list(self.selectedDict.values())
def __getitem__(self,index):
return self.getSelectedAsList()[index]
@ -141,7 +141,7 @@ class SelectedNodePaths(DirectObject):
return None
def getDeselectedAsList(self):
return self.deselectedDict.values()[:]
return list(self.deselectedDict.values())
def getDeselectedDict(self, id):
"""
@ -385,7 +385,7 @@ class DirectBoundingBox:
return '%.2f %.2f %.2f' % (vec[0], vec[1], vec[2])
def __repr__(self):
return (`self.__class__` +
return (repr(self.__class__) +
'\nNodePath:\t%s\n' % self.nodePath.getName() +
'Min:\t\t%s\n' % self.vecAsString(self.min) +
'Max:\t\t%s\n' % self.vecAsString(self.max) +

View File

@ -480,7 +480,7 @@ class SeSession(DirectObject): ### Customized DirectSession
def isNotCycle(self, nodePath, parent):
if nodePath.get_key() == parent.get_key():
print 'DIRECT.reparent: Invalid parent'
print('DIRECT.reparent: Invalid parent')
return 0
elif parent.hasParent():
return self.isNotCycle(nodePath, parent.getParent())
@ -735,8 +735,8 @@ class SeSession(DirectObject): ### Customized DirectSession
hprB = base.camera.getHpr()
posE = Point3((radius*-1.41)+center.getX(), (radius*-1.41)+center.getY(), (radius*1.41)+center.getZ())
hprE = Point3(-45, -38, 0)
print posB, hprB
print posE, hprE
print(posB, hprB)
print(posE, hprE)
posInterval1 = base.camera.posInterval(time, posE, bakeInStart = 1)
posInterval2 = base.camera.posInterval(time, posB, bakeInStart = 1)

View File

@ -12,15 +12,21 @@
#
#################################################################
import os, sys, string, Pmw, Tkinter
import os, sys, string, Pmw
from direct.showbase.DirectObject import DirectObject
from Tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry
from panda3d.core import *
if sys.version_info >= (3, 0):
import tkinter
from tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry
else:
import Tkinter as tkinter
from Tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry
# Initialize icon directory
ICONDIR = getModelPath().findFile(Filename('icons')).toOsSpecific()
if not os.path.isdir(ICONDIR):
raise RuntimeError, "can't find DIRECT icon directory (%s)" % `ICONDIR`
raise RuntimeError("can't find DIRECT icon directory (%r)" % ICONDIR)
class TreeNode:
@ -187,9 +193,9 @@ class TreeNode:
oldcursor = self.canvas['cursor']
self.canvas['cursor'] = "watch"
self.canvas.update()
self.canvas.delete(Tkinter.ALL) # XXX could be more subtle
self.canvas.delete(tkinter.ALL) # XXX could be more subtle
self.draw(7, 2)
x0, y0, x1, y1 = self.canvas.bbox(Tkinter.ALL)
x0, y0, x1, y1 = self.canvas.bbox(tkinter.ALL)
self.canvas.configure(scrollregion=(0, 0, x1, y1))
self.canvas['cursor'] = oldcursor
@ -208,7 +214,7 @@ class TreeNode:
self.kidKeys = []
for item in sublist:
key = item.GetKey()
if self.children.has_key(key):
if key in self.children:
child = self.children[key]
else:
child = TreeNode(self.canvas, self, item, self.menuList)
@ -309,7 +315,7 @@ class TreeNode:
def edit(self, event=None):
self.entry = Entry(self.label, bd=0, highlightthickness=1, width=0)
self.entry.insert(0, self.label['text'])
self.entry.selection_range(0, Tkinter.END)
self.entry.selection_range(0, tkinter.END)
self.entry.pack(ipadx=5)
self.entry.focus_set()
self.entry.bind("<Return>", self.edit_finish)
@ -344,7 +350,7 @@ class TreeNode:
for item in sublist:
key = item.GetKey()
# Use existing child or create new TreeNode if none exists
if self.children.has_key(key):
if key in self.children:
child = self.children[key]
else:
child = TreeNode(self.canvas, self, item, self.menuList)