*** empty log message ***

This commit is contained in:
Mark Mine 2001-02-17 18:59:59 +00:00
parent 14a82e4f5c
commit d22e3a3b7e

View File

@ -37,7 +37,7 @@ class MopathRecorder(AppShell, PandaObject):
MopathRecorder.count += 1 MopathRecorder.count += 1
optiondefs = ( optiondefs = (
('title', self.appname, None), ('title', self.appname, None),
('nodePath', direct.camera, None), ('nodePath', None, None),
('name', name, None) ('name', name, None)
) )
self.defineoptions(kw, optiondefs) self.defineoptions(kw, optiondefs)
@ -47,8 +47,8 @@ class MopathRecorder(AppShell, PandaObject):
self.initialiseoptions(MopathRecorder) self.initialiseoptions(MopathRecorder)
self.selectRecordNodePathNamed('init') self.selectRecordNodePathNamed('marker')
self.selectPlaybackNodePathNamed('init') self.selectPlaybackNodePathNamed('marker')
def appInit(self): def appInit(self):
self.name = self['name'] self.name = self['name']
@ -64,6 +64,7 @@ class MopathRecorder(AppShell, PandaObject):
self.playbackMarker.reparentTo(self.recorderNodePath) self.playbackMarker.reparentTo(self.recorderNodePath)
self.playbackMarker.hide() self.playbackMarker.hide()
self.playbackMarker.setName('Playback Marker') self.playbackMarker.setName('Playback Marker')
# ID of selected object
self.manipulandumId = None self.manipulandumId = None
self.tangentGroup = self.playbackMarker.attachNewNode('Tangent Group') self.tangentGroup = self.playbackMarker.attachNewNode('Tangent Group')
self.tangentGroup.hide() self.tangentGroup.hide()
@ -134,6 +135,7 @@ class MopathRecorder(AppShell, PandaObject):
self.playbackSF = 1.0 self.playbackSF = 1.0
# Sample variables # Sample variables
self.fEven = 0 self.fEven = 0
self.fForward = 0
self.desampleFrequency = 1 self.desampleFrequency = 1
self.numSamples = 100 self.numSamples = 100
self.recordStart = 0.0 self.recordStart = 0.0
@ -262,7 +264,7 @@ class MopathRecorder(AppShell, PandaObject):
entry_width = 20, entry_width = 20,
selectioncommand = self.selectPlaybackNodePathNamed, selectioncommand = self.selectPlaybackNodePathNamed,
scrolledlist_items = self.pbNodePathNames) scrolledlist_items = self.pbNodePathNames)
self.pbNodePathMenu.selectitem('camera') self.pbNodePathMenu.selectitem('marker')
self.pbNodePathMenuEntry = ( self.pbNodePathMenuEntry = (
self.pbNodePathMenu.component('entryfield_entry')) self.pbNodePathMenu.component('entryfield_entry'))
self.pbNodePathMenuBG = ( self.pbNodePathMenuBG = (
@ -346,7 +348,7 @@ class MopathRecorder(AppShell, PandaObject):
label_width = 16, label_anchor = W, entry_width = 20, label_width = 16, label_anchor = W, entry_width = 20,
selectioncommand = self.selectRecordNodePathNamed, selectioncommand = self.selectRecordNodePathNamed,
scrolledlist_items = self.recNodePathNames) scrolledlist_items = self.recNodePathNames)
self.recNodePathMenu.selectitem('camera') self.recNodePathMenu.selectitem('marker')
self.recNodePathMenuEntry = ( self.recNodePathMenuEntry = (
self.recNodePathMenu.component('entryfield_entry')) self.recNodePathMenu.component('entryfield_entry'))
self.recNodePathMenuBG = ( self.recNodePathMenuBG = (
@ -354,6 +356,9 @@ class MopathRecorder(AppShell, PandaObject):
self.bind(self.recNodePathMenu, self.bind(self.recNodePathMenu,
'Select node path to track when recording a new curve') 'Select node path to track when recording a new curve')
self.recNodePathMenu.pack(side = LEFT, expand = 0) self.recNodePathMenu.pack(side = LEFT, expand = 0)
self.createButton(frame, 'Recording', 'Select',
'Select Current Record Node Path',
lambda s = self: direct.select(s['nodePath']))
frame.pack(expand = 1, fill = X) frame.pack(expand = 1, fill = X)
# Hooks # Hooks
@ -409,10 +414,17 @@ class MopathRecorder(AppShell, PandaObject):
side = LEFT) side = LEFT)
widget.component('hull')['relief'] = RIDGE widget.component('hull')['relief'] = RIDGE
widget.onRelease = widget.onReturnRelease = self.sampleCurve widget.onRelease = widget.onReturnRelease = self.sampleCurve
self.createCheckbutton(resampleFrame, 'Resample', 'Even', frame = Frame(resampleFrame)
self.createCheckbutton(frame, 'Resample', 'Even',
'On: Resulting path has constant velocity', 'On: Resulting path has constant velocity',
self.setEven, self.fEven, self.setEven, self.fEven,
side = LEFT, fill = BOTH, expand = 0) side = TOP, fill = BOTH, expand = 0)
self.createCheckbutton(
frame, 'Resample', 'Forward',
'On: Resulting hpr curve faces along xyz tangent',
self.setForward, self.fForward,
side = TOP, fill = BOTH, expand = 0)
frame.pack(fill = X, expand = 0)
resampleFrame.pack(fill = X, expand = 0, pady = 2) resampleFrame.pack(fill = X, expand = 0, pady = 2)
# Desample # Desample
desampleFrame = Frame( desampleFrame = Frame(
@ -683,13 +695,19 @@ class MopathRecorder(AppShell, PandaObject):
self.xyzNurbsCurveDrawer.draw() self.xyzNurbsCurveDrawer.draw()
# Update tangent # Update tangent
if self.manipulandumId == self.tangentMarker.id(): if self.manipulandumId == self.tangentMarker.id():
# If manipulating marker, update tangent
# Hide playback marker # Hide playback marker
self.playbackMarker.getChild(0).hide() self.playbackMarker.getChild(0).hide()
# If manipulating marker, update curve # Where is tangent marker relative to playback marker
tan = self.tangentMarker.getPos(self.nodePathParent) tan = self.tangentMarker.getPos()
# Transform this vector to curve space
tan2Curve = Vec3(
self.playbackMarker.getMat(
self.nodePathParent).xformVec(tan))
# Update nurbs curve
self.xyzNurbsCurve.adjustTangent( self.xyzNurbsCurve.adjustTangent(
self.playbackTime, self.playbackTime,
tan[0], tan[1], tan[2]) tan2Curve[0], tan2Curve[1], tan2Curve[2])
self.xyzNurbsCurveDrawer.draw() self.xyzNurbsCurveDrawer.draw()
else: else:
# Show playback marker # Show playback marker
@ -697,6 +715,10 @@ class MopathRecorder(AppShell, PandaObject):
# Update tangent marker line # Update tangent marker line
tan = Point3(0) tan = Point3(0)
self.xyzNurbsCurve.getTangent(self.playbackTime, tan) self.xyzNurbsCurve.getTangent(self.playbackTime, tan)
# Transform this point to playback marker space
tan.assign(
self.nodePathParent.getMat(
self.playbackMarker).xformVec(tan))
self.tangentMarker.setPos(tan) self.tangentMarker.setPos(tan)
# In either case update tangent line # In either case update tangent line
self.tangentLines.setVertex(1, tan[0], tan[1], tan[2]) self.tangentLines.setVertex(1, tan[0], tan[1], tan[2])
@ -1366,12 +1388,30 @@ class MopathRecorder(AppShell, PandaObject):
even = self.fEven even = self.fEven
self.xyzCurveFitter.sample( self.xyzCurveFitter.sample(
self.xyzNurbsCurve, self.numSamples, even) self.xyzNurbsCurve, self.numSamples, even)
if self.fForward:
# Use xyz curve tangent
tanPt = Point3(0)
lookAtCS = self.playbackMarker.attachNewNode('lookAt')
# Now sample the hprNurbsCurve using the same delta T # Now sample the hprNurbsCurve using the same delta T
for i in range(self.numSamples): for i in range(self.numSamples):
t = self.maxT * (i / float(self.numSamples)) t = self.maxT * (i / float(self.numSamples))
hpr = Point3(0) hpr = Point3(0)
if self.fForward:
# Use xyz curve tangent
self.xyzNurbsCurve.getTangent(t, tanPt)
# Transform this point to playback marker space
tanPt.assign(
self.nodePathParent.getMat(
self.playbackMarker).xformVec(tanPt))
lookAtCS.lookAt(tanPt, Z_AXIS)
hpr = lookAtCS.getHpr(self.nodePathParent)
else:
# Sample existing hpr curve
self.hprNurbsCurve.getPoint(t, hpr) self.hprNurbsCurve.getPoint(t, hpr)
self.hprCurveFitter.addPoint(t, hpr) self.hprCurveFitter.addPoint(t, hpr)
# Clean up
if self.fForward:
lookAtCS.removeNode()
# Now recompute curves # Now recompute curves
self.computeCurves() self.computeCurves()
# Get new point set based on newly created curve # Get new point set based on newly created curve
@ -1385,6 +1425,9 @@ class MopathRecorder(AppShell, PandaObject):
def setEven(self): def setEven(self):
self.fEven = self.getVariable('Resample', 'Even').get() self.fEven = self.getVariable('Resample', 'Even').get()
def setForward(self):
self.fForward = self.getVariable('Resample', 'Forward').get()
def setPathDuration(self, event): def setPathDuration(self, event):
newMaxT = float(self.getWidget('Resample', 'Path Duration').get()) newMaxT = float(self.getWidget('Resample', 'Path Duration').get())
self.setPathDurationTo(newMaxT) self.setPathDurationTo(newMaxT)