*** empty log message ***

This commit is contained in:
Mark Mine 2001-02-07 17:45:58 +00:00
parent 81873319f7
commit 8d3665d4e6

View File

@ -21,7 +21,7 @@ class MopathRecorder(AppShell, PandaObject):
# Override class variables here # Override class variables here
appname = 'Mopath Recorder Panel' appname = 'Mopath Recorder Panel'
frameWidth = 450 frameWidth = 450
frameHeight = 600 frameHeight = 510
usecommandarea = 0 usecommandarea = 0
usestatusarea = 0 usestatusarea = 0
count = 0 count = 0
@ -117,6 +117,8 @@ class MopathRecorder(AppShell, PandaObject):
self.controlStart = 0.0 self.controlStart = 0.0
self.controlStop = 0.0 self.controlStop = 0.0
self.refineStop = 0.0 self.refineStop = 0.0
self.cropFrom = 0.0
self.cropTo = 0.0
self.fAdjustingValues = 0 self.fAdjustingValues = 0
# Set up event hooks # Set up event hooks
self.undoEvents = [('undo', self.undoHook), self.undoEvents = [('undo', self.undoHook),
@ -286,9 +288,9 @@ class MopathRecorder(AppShell, PandaObject):
self.mainNotebook = Pmw.NoteBook(interior) self.mainNotebook = Pmw.NoteBook(interior)
self.mainNotebook.pack(fill = BOTH, expand = 1) self.mainNotebook.pack(fill = BOTH, expand = 1)
self.recordPage = self.mainNotebook.add('Record') self.recordPage = self.mainNotebook.add('Record')
self.resamplePage = self.mainNotebook.add('Resample')
self.refinePage = self.mainNotebook.add('Refine') self.refinePage = self.mainNotebook.add('Refine')
# Put this here so it isn't called right away self.cropPage = self.mainNotebook.add('Crop')
self.mainNotebook['raisecommand'] = self.updateInfo
## RECORD PAGE ## ## RECORD PAGE ##
recordFrame = Frame(self.recordPage, relief = SUNKEN, recordFrame = Frame(self.recordPage, relief = SUNKEN,
@ -385,21 +387,15 @@ class MopathRecorder(AppShell, PandaObject):
# This gets the widgets to spread out # This gets the widgets to spread out
self.gridFrame.grid_columnconfigure(1,weight = 1) self.gridFrame.grid_columnconfigure(1,weight = 1)
recordFrame.pack(fill = X, pady = 2) recordFrame.pack(fill = X, pady = 2)
# Desample
desampleFrame = Frame( ## RESAMPLE PAGE
self.recordPage, relief = SUNKEN, borderwidth = 2) label = Label(self.resamplePage, text = 'RESAMPLE CURVE',
Label(desampleFrame, text = 'DESAMPLE CURVE', font=('MSSansSerif', 12, 'bold'))
font=('MSSansSerif', 12, 'bold')).pack() label.pack(fill = X)
widget = self.createEntryScale(
desampleFrame, 'Resample', 'Points Between Samples',
'Recompute curve using every nth point',
resolution = 1, max = 100, command = self.setDesampleFrequency)
widget.component('hull')['relief'] = RIDGE
widget.onRelease = widget.onReturnRelease = self.desampleCurve
desampleFrame.pack(fill = X, expand = 0, pady = 2)
# Resample # Resample
resampleFrame = Frame( resampleFrame = Frame(
self.recordPage, relief = SUNKEN, borderwidth = 2) self.resamplePage, relief = SUNKEN, borderwidth = 2)
label = Label(resampleFrame, text = 'RESAMPLE CURVE', label = Label(resampleFrame, text = 'RESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold')).pack() font=('MSSansSerif', 12, 'bold')).pack()
widget = self.createEntryScale( widget = self.createEntryScale(
@ -414,6 +410,18 @@ class MopathRecorder(AppShell, PandaObject):
self.setEven, self.fEven, self.setEven, self.fEven,
side = LEFT, fill = BOTH, expand = 0) side = LEFT, fill = BOTH, expand = 0)
resampleFrame.pack(fill = X, expand = 0, pady = 2) resampleFrame.pack(fill = X, expand = 0, pady = 2)
# Desample
desampleFrame = Frame(
self.resamplePage, relief = SUNKEN, borderwidth = 2)
Label(desampleFrame, text = 'DESAMPLE CURVE',
font=('MSSansSerif', 12, 'bold')).pack()
widget = self.createEntryScale(
desampleFrame, 'Resample', 'Points Between Samples',
'Recompute curve using every nth point',
resolution = 1, max = 100, command = self.setDesampleFrequency)
widget.component('hull')['relief'] = RIDGE
widget.onRelease = widget.onReturnRelease = self.desampleCurve
desampleFrame.pack(fill = X, expand = 0, pady = 2)
## REFINE PAGE ## ## REFINE PAGE ##
refineFrame = Frame(self.refinePage, relief = SUNKEN, refineFrame = Frame(self.refinePage, relief = SUNKEN,
@ -421,6 +429,16 @@ class MopathRecorder(AppShell, PandaObject):
label = Label(refineFrame, text = 'REFINE CURVE', label = Label(refineFrame, text = 'REFINE CURVE',
font=('MSSansSerif', 12, 'bold')) font=('MSSansSerif', 12, 'bold'))
label.pack(fill = X) label.pack(fill = X)
frame = Frame(refineFrame)
widget = self.createCheckbutton(
frame, 'Refine Page', 'Refining Path',
('On: Next record session refines current path ' +
'Off: Next record session records a new path'),
self.toggleRefine, 0,
side = LEFT, expand = 0)
frame.pack(expand = 1, fill = X)
widget = self.createEntryScale(refineFrame, widget = self.createEntryScale(refineFrame,
'Refine Page', 'Refine From', 'Refine Page', 'Refine From',
'Begin time of refine pass', 'Begin time of refine pass',
@ -448,31 +466,35 @@ class MopathRecorder(AppShell, PandaObject):
widget.onRelease = widget.onReturnRelease = self.getPostPoints widget.onRelease = widget.onReturnRelease = self.getPostPoints
refineFrame.pack(fill = X) refineFrame.pack(fill = X)
frame = Frame(refineFrame)
widget = self.createCheckbutton( ## CROP PAGE ##
self.frame, 'Refine Page', 'Refining Path', cropFrame = Frame(self.cropPage, relief = SUNKEN,
('On: Next record session refines current path ' + borderwidth = 2)
'Off: Next record session records a new path'), label = Label(cropFrame, text = 'CROP CURVE',
self.toggleRefine, 0, font=('MSSansSerif', 12, 'bold'))
side = LEFT, fill = BOTH, expand = 1) label.pack(fill = X)
widget.pack_forget()
widget.grid(row=0, column=0, sticky = NSEW) widget = self.createEntryScale(
widget.configure(relief = RAISED, borderwidth = 2, cropFrame,
anchor = CENTER, width = 10) 'Crop Page', 'Crop From',
widget = self.createButton( 'Delete all curve points before this time',
frame, 'Refine Page', 'Start Refining', resolution = 0.01,
'Start refining path using current refining settings', command = self.setCropFrom)
self.startRefining,
side = LEFT, expand = 1) widget = self.createEntryScale(
widget.pack_forget() cropFrame,
widget.grid(row=0, column=1, sticky = NSEW) 'Crop Page', 'Crop To',
frame.pack(expand = 1, fill = x) 'Delete all curve points after this time',
resolution = 0.01,
command = self.setCropTo)
self.createButton(cropFrame, 'Crop Page', 'Crop Curve',
'Crop curve to specified from to times',
self.cropCurve, fill = NONE)
cropFrame.pack(fill = X)
self.mainNotebook.setnaturalsize() self.mainNotebook.setnaturalsize()
def updateInfo(self, page = 'System'):
pass
def pushUndo(self, fResetRedo = 1): def pushUndo(self, fResetRedo = 1):
direct.pushUndo([self['nodePath']]) direct.pushUndo([self['nodePath']])
@ -676,7 +698,7 @@ class MopathRecorder(AppShell, PandaObject):
self.prePoints = [] self.prePoints = []
self.postPoints = [] self.postPoints = []
# Reset flag # Reset flag
self.fRefine = 0 self.setRefineFlag(0)
# Compute curve # Compute curve
self.computeCurves() self.computeCurves()
# Now you can change record modes # Now you can change record modes
@ -765,6 +787,7 @@ class MopathRecorder(AppShell, PandaObject):
def updateCurveInfo(self): def updateCurveInfo(self):
if not self.xyzNurbsCurve: if not self.xyzNurbsCurve:
return return
self.fAdjustingValues = 1
# Widgets depending on max T # Widgets depending on max T
maxT = '%.2f' % self.xyzNurbsCurve.getMaxT() maxT = '%.2f' % self.xyzNurbsCurve.getMaxT()
self.getWidget('Playback', 'Time').configure(max = maxT) self.getWidget('Playback', 'Time').configure(max = maxT)
@ -781,12 +804,19 @@ class MopathRecorder(AppShell, PandaObject):
widget = self.getWidget('Refine Page', 'Refine To') widget = self.getWidget('Refine Page', 'Refine To')
widget.configure(max = maxT) widget.configure(max = maxT)
widget.set(float(maxT)) widget.set(float(maxT))
widget = self.getWidget('Crop Page', 'Crop From')
widget.configure(max = maxT)
widget.set(float(0.0))
widget = self.getWidget('Crop Page', 'Crop To')
widget.configure(max = maxT)
widget.set(float(maxT))
self.maxT = float(maxT) self.maxT = float(maxT)
# Widgets depending on number of samples # Widgets depending on number of samples
numSamples = self.xyzCurveFitter.getNumSamples() numSamples = self.xyzCurveFitter.getNumSamples()
self.getWidget('Resample', 'Points Between Samples')['max'] = ( self.getWidget('Resample', 'Points Between Samples')['max'] = (
numSamples) numSamples)
self.getWidget('Resample', 'Num. Samples')['max'] = 3 * numSamples self.getWidget('Resample', 'Num. Samples')['max'] = 3 * numSamples
self.fAdjustingValues = 0
def selectRecordNodePathNamed(self, name): def selectRecordNodePathNamed(self, name):
nodePath = None nodePath = None
@ -1038,8 +1068,12 @@ class MopathRecorder(AppShell, PandaObject):
# Update info # Update info
self.updateCurveInfo() self.updateCurveInfo()
def toggleRefine(self):
self.fRefine = self.getVariable('Refine Page', 'Refining Path').get()
def setRefineFlag(self, val = 1): def setRefineFlag(self, val = 1):
self.fRefine = val self.fRefine = val
self.getVariable('Refine Page', 'Refining Path').set(val)
def setRefineStart(self,value): def setRefineStart(self,value):
self.refineStart = value self.refineStart = value
@ -1055,6 +1089,8 @@ class MopathRecorder(AppShell, PandaObject):
self.refineStart) self.refineStart)
if self.refineStart > self.refineStop: if self.refineStart > self.refineStop:
self.getWidget('Refine Page', 'Refine To').set(self.refineStart) self.getWidget('Refine Page', 'Refine To').set(self.refineStart)
# Move playback node path to specified time
self.getWidget('Playback', 'Time').set(value)
self.fAdjustingValues = 0 self.fAdjustingValues = 0
def getPrePoints(self): def getPrePoints(self):
@ -1085,6 +1121,8 @@ class MopathRecorder(AppShell, PandaObject):
if self.controlStart > self.refineStop: if self.controlStart > self.refineStop:
self.getWidget('Refine Page', 'Refine To').set( self.getWidget('Refine Page', 'Refine To').set(
self.controlStart) self.controlStart)
# Move playback node path to specified time
self.getWidget('Playback', 'Time').set(value)
self.fAdjustingValues = 0 self.fAdjustingValues = 0
def setControlStop(self, value): def setControlStop(self, value):
@ -1102,6 +1140,8 @@ class MopathRecorder(AppShell, PandaObject):
if self.controlStop > self.refineStop: if self.controlStop > self.refineStop:
self.getWidget('Refine Page', 'Refine To').set( self.getWidget('Refine Page', 'Refine To').set(
self.controlStop) self.controlStop)
# Move playback node path to specified time
self.getWidget('Playback', 'Time').set(value)
self.fAdjustingValues = 0 self.fAdjustingValues = 0
def setRefineStop(self, value): def setRefineStop(self, value):
@ -1119,6 +1159,8 @@ class MopathRecorder(AppShell, PandaObject):
if self.refineStop < self.controlStop: if self.refineStop < self.controlStop:
self.getWidget('Refine Page', 'Control Stop').set( self.getWidget('Refine Page', 'Control Stop').set(
self.refineStop) self.refineStop)
# Move playback node path to specified time
self.getWidget('Playback', 'Time').set(value)
self.fAdjustingValues = 0 self.fAdjustingValues = 0
def getPostPoints(self): def getPostPoints(self):
@ -1152,6 +1194,57 @@ class MopathRecorder(AppShell, PandaObject):
self.xyzCurveFitter.addPoint(adjustedTime, pos) self.xyzCurveFitter.addPoint(adjustedTime, pos)
self.hprCurveFitter.addPoint(adjustedTime, hpr) self.hprCurveFitter.addPoint(adjustedTime, hpr)
def setCropFrom(self,value):
self.cropFrom = value
# Someone else is adjusting values, let them take care of it
if self.fAdjustingValues:
return
self.fAdjustingValues = 1
if self.cropFrom > self.cropTo:
self.getWidget('Crop Page', 'Crop To').set(
self.cropFrom)
# Move playback node path to specified time
self.getWidget('Playback', 'Time').set(value)
self.fAdjustingValues = 0
def setCropTo(self,value):
self.cropTo = value
# Someone else is adjusting values, let them take care of it
if self.fAdjustingValues:
return
self.fAdjustingValues = 1
if self.cropTo < self.cropFrom:
self.getWidget('Crop Page', 'Crop From').set(
self.cropTo)
# Move playback node path to specified time
self.getWidget('Playback', 'Time').set(value)
self.fAdjustingValues = 0
def cropCurve(self):
# Keep handle on old points
oldPoints = self.pointSet
# Create new point set
self.createNewPointSet()
# Copy over points between from/to
# Reset curve fitters
self.xyzCurveFitter.reset()
self.hprCurveFitter.reset()
# Set flag
self.fHasPoints = 0
for time, pos, hpr in oldPoints:
# Is it within the time?
if ((time > self.cropFrom) &
(time < self.cropTo)):
# Add it to the curve fitters
t = time - self.cropFrom
self.xyzCurveFitter.addPoint(t, pos )
self.hprCurveFitter.addPoint(t, hpr)
# And the point set
self.pointSet.append([t, pos, hpr])
self.fHasPoints = 1
# Compute curve
self.computeCurves()
## WIDGET UTILITY FUNCTIONS ## ## WIDGET UTILITY FUNCTIONS ##
def addWidget(self, widget, category, text): def addWidget(self, widget, category, text):
self.widgetDict[category + '-' + text] = widget self.widgetDict[category + '-' + text] = widget
@ -1183,11 +1276,11 @@ class MopathRecorder(AppShell, PandaObject):
return (frame, label, entry) return (frame, label, entry)
def createButton(self, parent, category, text, balloonHelp, command, def createButton(self, parent, category, text, balloonHelp, command,
side = 'top', expand = 0): side = 'top', expand = 0, fill = X):
widget = Button(parent, text = text) widget = Button(parent, text = text)
# 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(side = side, fill = X, expand = expand) widget.pack(side = side, fill = fill, expand = expand)
self.bind(widget, balloonHelp) self.bind(widget, balloonHelp)
self.widgetDict[category + '-' + text] = widget self.widgetDict[category + '-' + text] = widget
return widget return widget