Browse Source

*** empty log message ***

Mark Mine 25 years ago
parent
commit
9df4ea89b4
1 changed files with 34 additions and 22 deletions
  1. 34 22
      direct/src/tkpanels/MopathRecorder.py

+ 34 - 22
direct/src/tkpanels/MopathRecorder.py

@@ -59,6 +59,7 @@ class MopathRecorder(AppShell, PandaObject):
         self.recorderNodePath = direct.group.attachNewNode(self.name)
         self.recorderNodePath = direct.group.attachNewNode(self.name)
         self.tempCS = self.recorderNodePath.attachNewNode(
         self.tempCS = self.recorderNodePath.attachNewNode(
             'mopathRecorderTempCS')
             'mopathRecorderTempCS')
+        self.nodePathParent = render
         self.playbackMarker = loader.loadModel('models/directmodels/smiley')
         self.playbackMarker = loader.loadModel('models/directmodels/smiley')
         self.playbackMarker.reparentTo(self.recorderNodePath)
         self.playbackMarker.reparentTo(self.recorderNodePath)
         self.playbackMarker.hide()
         self.playbackMarker.hide()
@@ -105,7 +106,7 @@ class MopathRecorder(AppShell, PandaObject):
         self.preRecordFunc = None
         self.preRecordFunc = None
         # Hook to start/stop recording
         # Hook to start/stop recording
         self.startStopHook = 'f6'
         self.startStopHook = 'f6'
-        self.keyframeHook = 'f12'
+        self.keyframeHook = 'f10'
         # Curve fitter object
         # Curve fitter object
         self.startPos = Point3(0)
         self.startPos = Point3(0)
         self.xyzCurveFitter = CurveFitter()
         self.xyzCurveFitter = CurveFitter()
@@ -669,12 +670,12 @@ class MopathRecorder(AppShell, PandaObject):
                 # Show playback marker
                 # Show playback marker
                 self.playbackMarker.getChild(0).show()
                 self.playbackMarker.getChild(0).show()
                 pos = Point3(0)
                 pos = Point3(0)
-                pos = self.playbackMarker.getPos()
+                pos = self.playbackMarker.getPos(self.nodePathParent)
                 self.xyzNurbsCurve.adjustPoint(
                 self.xyzNurbsCurve.adjustPoint(
                     self.playbackTime,
                     self.playbackTime,
                     pos[0], pos[1], pos[2])
                     pos[0], pos[1], pos[2])
                 hpr = Point3(0)
                 hpr = Point3(0)
-                hpr = self.playbackMarker.getHpr()
+                hpr = self.playbackMarker.getHpr(self.nodePathParent)
                 self.hprNurbsCurve.adjustPoint(
                 self.hprNurbsCurve.adjustPoint(
                     self.playbackTime,
                     self.playbackTime,
                     hpr[0], hpr[1], hpr[2])
                     hpr[0], hpr[1], hpr[2])
@@ -685,7 +686,7 @@ class MopathRecorder(AppShell, PandaObject):
                 # Hide playback marker
                 # Hide playback marker
                 self.playbackMarker.getChild(0).hide()
                 self.playbackMarker.getChild(0).hide()
                 # If manipulating marker, update curve
                 # If manipulating marker, update curve
-                tan = self.tangentMarker.getPos()
+                tan = self.tangentMarker.getPos(self.nodePathParent)
                 self.xyzNurbsCurve.adjustTangent(
                 self.xyzNurbsCurve.adjustTangent(
                     self.playbackTime,
                     self.playbackTime,
                     tan[0], tan[1], tan[2])
                     tan[0], tan[1], tan[2])
@@ -794,9 +795,9 @@ class MopathRecorder(AppShell, PandaObject):
         
         
     def setTraceVis(self):
     def setTraceVis(self):
         if self.getVariable('Style', 'Show Trace').get():
         if self.getVariable('Style', 'Show Trace').get():
-            self.trace.reparentTo(self.recorderNodePath)
+            self.trace.show()
         else:
         else:
-            self.trace.reparentTo(hidden)
+            self.trace.hide()
 
 
     def setMarkerVis(self):
     def setMarkerVis(self):
         if self.getVariable('Style', 'Show Marker').get():
         if self.getVariable('Style', 'Show Marker').get():
@@ -846,19 +847,13 @@ class MopathRecorder(AppShell, PandaObject):
 
 
     def setKeyframeHook(self, event = None):
     def setKeyframeHook(self, event = None):
         # Clear out old hook
         # Clear out old hook
-        self.ignoreKeyframeHook()
+        self.ignore(self.keyframeHook)
         # Record new one
         # Record new one
         hook = self.getVariable('Recording', 'Keyframe Hook').get()
         hook = self.getVariable('Recording', 'Keyframe Hook').get()
         self.keyframeHook = hook
         self.keyframeHook = hook
-
-    def acceptKeyframeHook(self):
         # Add new one
         # Add new one
         self.accept(self.keyframeHook, self.addKeyframe)
         self.accept(self.keyframeHook, self.addKeyframe)
 
 
-    def ignoreKeyframeHook(self):
-        # Clear out old hook
-        self.ignore(self.keyframeHook)
-
     def reset(self):
     def reset(self):
         self.pointSet = []
         self.pointSet = []
         self.hasPoints = 0
         self.hasPoints = 0
@@ -898,8 +893,9 @@ class MopathRecorder(AppShell, PandaObject):
 
 
     def toggleRecord(self):
     def toggleRecord(self):
         if self.getVariable('Recording', 'Record').get():
         if self.getVariable('Recording', 'Record').get():
-            # Kill old task
+            # Kill old tasks
             taskMgr.removeTasksNamed(self.name + '-recordTask')
             taskMgr.removeTasksNamed(self.name + '-recordTask')
+            taskMgr.removeTasksNamed(self.name + '-curveEditTask')
             # Remove old curve
             # Remove old curve
             self.xyzNurbsCurveDrawer.hide()
             self.xyzNurbsCurveDrawer.hide()
             # Reset curve fitters
             # Reset curve fitters
@@ -912,10 +908,12 @@ class MopathRecorder(AppShell, PandaObject):
             self.createNewPointSet()
             self.createNewPointSet()
             # Record nopath's parent
             # Record nopath's parent
             self.nodePathParent = self['nodePath'].getParent()
             self.nodePathParent = self['nodePath'].getParent()
+            # Put curve drawer under record node path's parent
+            self.curveNodePath.reparentTo(self.nodePathParent)
+            # Clear out old trace, get ready to draw new
+            self.initTrace()
             # Keyframe mode?
             # Keyframe mode?
             if (self.samplingMode == 'Keyframe'):
             if (self.samplingMode == 'Keyframe'):
-                # Add hook
-                self.acceptKeyframeHook()
                 # Record first point
                 # Record first point
                 self.startPos = Point3(
                 self.startPos = Point3(
                     self['nodePath'].getPos(self.nodePathParent))
                     self['nodePath'].getPos(self.nodePathParent))
@@ -959,8 +957,6 @@ class MopathRecorder(AppShell, PandaObject):
             else:
             else:
                 # Add last point
                 # Add last point
                 self.addKeyframe(0)
                 self.addKeyframe(0)
-                # Ignore hook
-                self.ignoreKeyframeHook()
             # Reset sampling mode
             # Reset sampling mode
             self.setSamplingMode('Continuous')
             self.setSamplingMode('Continuous')
             self.enableKeyframeButton()
             self.enableKeyframeButton()
@@ -995,6 +991,11 @@ class MopathRecorder(AppShell, PandaObject):
             time = (self.recordStart +
             time = (self.recordStart +
                     (Vec3(self['nodePath'].getPos(self.nodePathParent) -
                     (Vec3(self['nodePath'].getPos(self.nodePathParent) -
                           self.startPos).length()))
                           self.startPos).length()))
+            # Did we move at all?
+            if len(self.pointSet) > 0:
+                if time == self.pointSet[-1][0]:
+                    print 'No delta'
+                    return
             self.recordPoint(time)
             self.recordPoint(time)
 
 
     def easeInOut(self, t):
     def easeInOut(self, t):
@@ -1043,6 +1044,12 @@ class MopathRecorder(AppShell, PandaObject):
         # Add it to the curve fitters
         # Add it to the curve fitters
         self.xyzCurveFitter.addPoint(time, pos )
         self.xyzCurveFitter.addPoint(time, pos )
         self.hprCurveFitter.addPoint(time, hpr)
         self.hprCurveFitter.addPoint(time, hpr)
+        # Update trace now if recording keyframes
+        if (self.samplingMode == 'Keyframe'):
+            self.trace.reset()
+            for t, p, h in self.pointSet:
+                self.trace.drawTo(p[0], p[1], p[2])
+            self.trace.create()
 
 
     def computeCurves(self):
     def computeCurves(self):
         # Check to make sure curve fitters have points
         # Check to make sure curve fitters have points
@@ -1067,6 +1074,13 @@ class MopathRecorder(AppShell, PandaObject):
         # Update widget based on new curve
         # Update widget based on new curve
         self.updateWidgets()
         self.updateWidgets()
 
 
+    def initTrace(self):
+        self.trace.reset()
+        # Put trace line segs under node path's parent
+        self.trace.reparentTo(self.nodePathParent)
+        # Show it
+        self.trace.show()
+
     def updateWidgets(self):
     def updateWidgets(self):
         if not self.xyzNurbsCurve:
         if not self.xyzNurbsCurve:
             return
             return
@@ -1156,8 +1170,6 @@ class MopathRecorder(AppShell, PandaObject):
         if self['nodePath']:
         if self['nodePath']:
             self.recNodePathMenuEntry.configure(
             self.recNodePathMenuEntry.configure(
                 background = self.recNodePathMenuBG)
                 background = self.recNodePathMenuBG)
-            # Put curve drawer under record node path's parent
-            self.curveNodePath.reparentTo(nodePath.getParent())
         else:
         else:
             # Flash entry
             # Flash entry
             self.recNodePathMenuEntry.configure(background = 'Pink')
             self.recNodePathMenuEntry.configure(background = 'Pink')
@@ -1251,11 +1263,11 @@ class MopathRecorder(AppShell, PandaObject):
         if self.xyzNurbsCurve != None:
         if self.xyzNurbsCurve != None:
             pos = Point3(0)
             pos = Point3(0)
             self.xyzNurbsCurve.getPoint(self.playbackTime, pos)
             self.xyzNurbsCurve.getPoint(self.playbackTime, pos)
-            self.playbackNodePath.setPos(pos)
+            self.playbackNodePath.setPos(self.nodePathParent, pos)
         if self.hprNurbsCurve != None:
         if self.hprNurbsCurve != None:
             hpr = Point3(0)
             hpr = Point3(0)
             self.hprNurbsCurve.getPoint(self.playbackTime, hpr)
             self.hprNurbsCurve.getPoint(self.playbackTime, hpr)
-            self.playbackNodePath.setHpr(hpr)
+            self.playbackNodePath.setHpr(self.nodePathParent, hpr)
 
 
     def startPlayback(self):
     def startPlayback(self):
         if (self.xyzNurbsCurve == None) & (self.hprNurbsCurve == None):
         if (self.xyzNurbsCurve == None) & (self.hprNurbsCurve == None):