mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
*** empty log message ***
This commit is contained in:
parent
9cece6c617
commit
b7d004f278
@ -8,6 +8,7 @@ from DirectGeometry import *
|
|||||||
import Pmw
|
import Pmw
|
||||||
import Dial
|
import Dial
|
||||||
import Floater
|
import Floater
|
||||||
|
import EntryScale
|
||||||
|
|
||||||
class MopathRecorder(AppShell):
|
class MopathRecorder(AppShell):
|
||||||
# Override class variables here
|
# Override class variables here
|
||||||
@ -143,17 +144,121 @@ class MopathRecorder(AppShell):
|
|||||||
self.mainNotebook['raisecommand'] = self.updateInfo
|
self.mainNotebook['raisecommand'] = self.updateInfo
|
||||||
|
|
||||||
## RECORD PAGE ##
|
## RECORD PAGE ##
|
||||||
label = Label(self.recordPage, text = 'RECORD PATH',
|
recordFrame = Frame(self.recordPage, relief = SUNKEN,
|
||||||
|
borderwidth = 2)
|
||||||
|
label = Label(recordFrame, text = 'RECORD PATH',
|
||||||
font=('MSSansSerif', 12, 'bold'))
|
font=('MSSansSerif', 12, 'bold'))
|
||||||
label.pack(fill = 'x')
|
label.pack(fill = 'x')
|
||||||
frame = Frame(self.recordPage)
|
# Recording Buttons
|
||||||
# Recording Button
|
frame = Frame(recordFrame)
|
||||||
self.createCheckbutton(frame, 'Recording', 'Record Path',
|
self.createCheckbutton(frame, 'Recording', 'Recording Path',
|
||||||
'On: path is being recorded',
|
'On: path is being recorded',
|
||||||
self.toggleRecord, 0)
|
self.toggleRecord, 0,
|
||||||
Label(frame, text = 'Start/Stop Hook').pack(side = 'left', fill = 'x')
|
side = 'left')
|
||||||
entry = Entry(frame)
|
self.getWidget('Recording', 'Recording Path').configure(
|
||||||
entry.pack(side = 'left', fill = 'x', expand = 1)
|
foreground = 'Red', relief = RAISED, borderwidth = 2,
|
||||||
|
anchor = CENTER)
|
||||||
|
self.getWidget('Recording', 'Recording Path').pack(
|
||||||
|
fill = 'x', expand = 1)
|
||||||
|
self.createLabeledEntry(frame, 'Recording', 'Start/Stop Hook',
|
||||||
|
'Hook used to start/stop recording',
|
||||||
|
command = self.setStartStopHook)
|
||||||
|
frame.pack(fill = 'x', expand = 1)
|
||||||
|
recordFrame.pack(fill = 'x')
|
||||||
|
# Playback controls
|
||||||
|
playbackFrame = Frame(self.recordPage, relief = SUNKEN,
|
||||||
|
borderwidth = 2)
|
||||||
|
Label(playbackFrame, text = 'PLAYBACK CONTROLS',
|
||||||
|
font=('MSSansSerif', 12, 'bold')).pack(fill = 'x')
|
||||||
|
self.createEntryScale(playbackFrame, 'Playback', 'Time',
|
||||||
|
'Set current playback time',
|
||||||
|
resolution = 0.01,
|
||||||
|
command = self.setPlaybackTime)
|
||||||
|
frame = Frame(playbackFrame)
|
||||||
|
self.createButton(frame, 'Playback', 'Stop', 'Stop playback',
|
||||||
|
self.stopPlayback, side = 'left', expand = 1)
|
||||||
|
self.createButton(frame, 'Playback', 'Play', 'Start playback',
|
||||||
|
self.startPlayback, side = 'left', expand = 1)
|
||||||
|
self.createButton(frame, 'Playback', 'Pause', 'Pause playback',
|
||||||
|
self.pausePlayback, side = 'left', expand = 1)
|
||||||
|
frame.pack(fill = 'x', expand = 1)
|
||||||
|
playbackFrame.pack(fill = 'x')
|
||||||
|
|
||||||
|
## CV PAGE ##
|
||||||
|
cvFrame = Frame(self.cvPage, relief = SUNKEN,
|
||||||
|
borderwidth = 2)
|
||||||
|
label = Label(cvFrame, text = 'CV CONTROLS',
|
||||||
|
font=('MSSansSerif', 12, 'bold'))
|
||||||
|
label.pack(fill = 'x')
|
||||||
|
self.createEntryScale(cvFrame, 'CV Controls', 'Delta Pos',
|
||||||
|
'Position threshold between selected points',
|
||||||
|
resolution = 0.01,
|
||||||
|
command = self.setDeltaPos)
|
||||||
|
self.createEntryScale(cvFrame, 'CV Controls', 'Delta Hpr',
|
||||||
|
'Orientation threshold between selected points',
|
||||||
|
resolution = 0.01,
|
||||||
|
command = self.setDeltaHpr)
|
||||||
|
self.createEntryScale(cvFrame, 'CV Controls', 'Delta Time',
|
||||||
|
'Time threshold between selected points',
|
||||||
|
resolution = 0.01,
|
||||||
|
command = self.setDeltaTime)
|
||||||
|
|
||||||
|
# Constant velocity frame
|
||||||
|
frame = Frame(cvFrame)
|
||||||
|
self.createCheckbutton(frame, 'CV Controls', 'Constant Velocity',
|
||||||
|
'On: Resulting path has constant velocity',
|
||||||
|
self.toggleConstantVelocity, 0,
|
||||||
|
side = 'left')
|
||||||
|
self.getWidget('CV Controls', 'Constant Velocity').configure(
|
||||||
|
relief = RAISED, borderwidth = 2, anchor = CENTER)
|
||||||
|
self.getWidget('CV Controls', 'Constant Velocity').pack(
|
||||||
|
fill = 'x', expand = 1)
|
||||||
|
self.createLabeledEntry(frame, 'CV Controls', 'Total Time',
|
||||||
|
'Set total curve duration',
|
||||||
|
command = self.setTotalTime)
|
||||||
|
frame.pack(fill = 'x', expand = 1)
|
||||||
|
cvFrame.pack(fill = 'x')
|
||||||
|
|
||||||
|
## REFINE PAGE ##
|
||||||
|
refineFrame = Frame(self.refinePage, relief = SUNKEN,
|
||||||
|
borderwidth = 2)
|
||||||
|
label = Label(refineFrame, text = 'REFINE CURVE',
|
||||||
|
font=('MSSansSerif', 12, 'bold'))
|
||||||
|
label.pack(fill = 'x')
|
||||||
|
self.createEntryScale(refineFrame, 'Refine Page', 'From',
|
||||||
|
'Begin time of refine pass',
|
||||||
|
resolution = 0.01,
|
||||||
|
command = self.setRefineStart)
|
||||||
|
self.createEntryScale(refineFrame, 'Refine Page', 'To',
|
||||||
|
'Stop time of refine pass',
|
||||||
|
resolution = 0.01,
|
||||||
|
command = self.setRefineStop)
|
||||||
|
refineFrame.pack(fill = 'x')
|
||||||
|
|
||||||
|
offsetFrame = Frame(self.refinePage)
|
||||||
|
self.createButton(offsetFrame, 'Refine Page', 'Offset',
|
||||||
|
'Zero refine curve offset',
|
||||||
|
self.resetOffset, side = 'left')
|
||||||
|
self.createLabeledEntry(offsetFrame, 'Refine Page', 'X',
|
||||||
|
'Refine pass X offset', expand = 1)
|
||||||
|
self.createLabeledEntry(offsetFrame, 'Refine Page', 'Y',
|
||||||
|
'Refine pass Y offset', expand = 1)
|
||||||
|
self.createLabeledEntry(offsetFrame, 'Refine Page', 'Z',
|
||||||
|
'Refine pass Z offset', expand = 1)
|
||||||
|
self.createLabeledEntry(offsetFrame, 'Refine Page', 'H',
|
||||||
|
'Refine pass H offset', expand = 1)
|
||||||
|
self.createLabeledEntry(offsetFrame, 'Refine Page', 'P',
|
||||||
|
'Refine pass P offset', expand = 1)
|
||||||
|
self.createLabeledEntry(offsetFrame, 'Refine Page', 'R',
|
||||||
|
'Refine pass R offset', expand = 1)
|
||||||
|
offsetFrame.pack(fill = 'x')
|
||||||
|
|
||||||
|
frame = Frame(self.refinePage)
|
||||||
|
self.createButton(frame, 'Refine Page', 'Speed',
|
||||||
|
'Reset refine speed',
|
||||||
|
self.resetRefineSpeed, side = 'left',)
|
||||||
|
|
||||||
|
self.mainNotebook.setnaturalsize()
|
||||||
|
|
||||||
def updateInfo(self, page = 'System'):
|
def updateInfo(self, page = 'System'):
|
||||||
pass
|
pass
|
||||||
@ -193,8 +298,6 @@ class MopathRecorder(AppShell):
|
|||||||
for event, method in self.undoEvents:
|
for event, method in self.undoEvents:
|
||||||
self.ignore(event)
|
self.ignore(event)
|
||||||
self.tempCS.removeNode()
|
self.tempCS.removeNode()
|
||||||
self.orbitFromCS.removeNode()
|
|
||||||
self.orbitToCS.removeNode()
|
|
||||||
|
|
||||||
def selectPointSetNamed(self, setName):
|
def selectPointSetNamed(self, setName):
|
||||||
print setName
|
print setName
|
||||||
@ -215,7 +318,49 @@ class MopathRecorder(AppShell):
|
|||||||
print self.tickVis.get()
|
print self.tickVis.get()
|
||||||
|
|
||||||
def toggleRecord(self):
|
def toggleRecord(self):
|
||||||
print self.getVariable('Recording', 'Record Path').get()
|
print self.getVariable('Recording', 'Recording Path').get()
|
||||||
|
|
||||||
|
def setStartStopHook(self):
|
||||||
|
print 'start stop'
|
||||||
|
|
||||||
|
def setPlaybackTime(self, time):
|
||||||
|
print time
|
||||||
|
|
||||||
|
def stopPlayback(self):
|
||||||
|
print 'stop'
|
||||||
|
|
||||||
|
def startPlayback(self):
|
||||||
|
print 'start'
|
||||||
|
|
||||||
|
def pausePlayback(self):
|
||||||
|
print 'pause'
|
||||||
|
|
||||||
|
def setDeltaPos(self, dPos):
|
||||||
|
print dPos
|
||||||
|
|
||||||
|
def setDeltaHpr(self, dHpr):
|
||||||
|
print dHpr
|
||||||
|
|
||||||
|
def setDeltaTime(self, dTime):
|
||||||
|
print dTime
|
||||||
|
|
||||||
|
def toggleConstantVelocity(self):
|
||||||
|
print self.getWidget('CV Controls', 'Constant Velocity').get()
|
||||||
|
|
||||||
|
def setTotalTime(self):
|
||||||
|
print 'total time'
|
||||||
|
|
||||||
|
def setRefineStart(self,value):
|
||||||
|
print 'refine start'
|
||||||
|
|
||||||
|
def setRefineStop(self, value):
|
||||||
|
print 'refine stop'
|
||||||
|
|
||||||
|
def resetOffset(self):
|
||||||
|
print 'reset offset'
|
||||||
|
|
||||||
|
def resetRefineSpeed(self):
|
||||||
|
pass
|
||||||
|
|
||||||
## WIDGET UTILITY FUNCTIONS ##
|
## WIDGET UTILITY FUNCTIONS ##
|
||||||
def addWidget(self, widget, category, text):
|
def addWidget(self, widget, category, text):
|
||||||
@ -226,16 +371,38 @@ class MopathRecorder(AppShell):
|
|||||||
|
|
||||||
def getVariable(self, category, text):
|
def getVariable(self, category, text):
|
||||||
return self.variableDict[category + '-' + text]
|
return self.variableDict[category + '-' + text]
|
||||||
|
|
||||||
|
def createLabeledEntry(self, parent, category, text, balloonHelp,
|
||||||
|
command = None, relief = 'sunken',
|
||||||
|
side = 'left', expand = 1, width = 12):
|
||||||
|
frame = Frame(parent)
|
||||||
|
Label(frame, text = text).pack(side = 'left', fill = 'x')
|
||||||
|
entry = Entry(frame, width = width, relief = relief)
|
||||||
|
entry.pack(side = 'left', fill = 'x', expand = expand)
|
||||||
|
if command:
|
||||||
|
entry.bind('<Return>', command)
|
||||||
|
frame.pack(side = side, expand = expand)
|
||||||
|
|
||||||
|
def createButton(self, parent, category, text, balloonHelp, command,
|
||||||
|
side = 'top', expand = 0):
|
||||||
|
widget = Button(parent, text = text)
|
||||||
|
# Do this after the widget so command isn't called on creation
|
||||||
|
widget['command'] = command
|
||||||
|
widget.pack(side = side, fill = X, expand = expand)
|
||||||
|
self.bind(widget, balloonHelp)
|
||||||
|
self.widgetDict[category + '-' + text] = widget
|
||||||
|
return widget
|
||||||
|
|
||||||
def createCheckbutton(self, parent, category, text,
|
def createCheckbutton(self, parent, category, text,
|
||||||
balloonHelp, command, initialState):
|
balloonHelp, command, initialState,
|
||||||
|
side = 'top'):
|
||||||
bool = BooleanVar()
|
bool = BooleanVar()
|
||||||
bool.set(initialState)
|
bool.set(initialState)
|
||||||
widget = Checkbutton(parent, text = text, anchor = W,
|
widget = Checkbutton(parent, text = text, anchor = W,
|
||||||
variable = bool)
|
variable = bool)
|
||||||
# Do this after the widget so command isn't called on creation
|
# Do this after the widget so command isn't called on creation
|
||||||
widget['command'] = command
|
widget['command'] = command
|
||||||
widget.pack(fill = X)
|
widget.pack(side = side, fill = X)
|
||||||
self.bind(widget, balloonHelp)
|
self.bind(widget, balloonHelp)
|
||||||
self.widgetDict[category + '-' + text] = widget
|
self.widgetDict[category + '-' + text] = widget
|
||||||
self.variableDict[category + '-' + text] = bool
|
self.variableDict[category + '-' + text] = bool
|
||||||
|
Loading…
x
Reference in New Issue
Block a user