diff --git a/direct/src/configfiles/direct.pth b/direct/src/configfiles/direct.pth index 8be6d58c37..8cf558953b 100644 --- a/direct/src/configfiles/direct.pth +++ b/direct/src/configfiles/direct.pth @@ -4,6 +4,7 @@ src/actor src/directtools src/directdevices src/directnotify +src/directutil src/distributed src/ffi src/fsm diff --git a/direct/src/directutil/Mopath.py b/direct/src/directutil/Mopath.py new file mode 100644 index 0000000000..2ef8a8b4aa --- /dev/null +++ b/direct/src/directutil/Mopath.py @@ -0,0 +1,60 @@ +from PandaObject import * +from DirectGeometry import * + +import NodePath + +class Mopath(PandaObject): + + def __init__(self): + self.maxT = 0.0 + self.xyzNurbsCurve = None + self.hprNurbsCurve = None + self.tNurbsCurve = None + + def loadFile(self, filename): + nodePath = loader.loadModel(filename) + if nodePath: + self.__extractCurves(nodePath) + if (self.xyzNurbsCurve != None): + self.maxT = self.xyzNurbsCurve.getMaxT() + elif (self.hprNurbsCurve != None): + self.maxT = self.hprNurbsCurve.getMaxT() + elif (self.tNurbsCurve != None): + self.maxT = self.tNurbsCurve.getMaxT() + else: + print 'Mopath: no valid curves in file: %s' % filename + else: + print 'Mopath: no data in file: %s' % filename + + def __extractCurves(self, nodePath): + node = nodePath.node() + if isinstance(node, ParametricCurve): + if node.getCurveType() == PCTXYZ: + self.xyzNurbsCurve = node + elif node.getCurveType() == PCTHPR: + self.hprNurbsCurve = node + elif node.getCurveType() == PCTNONE: + if (self.xyzNurbsCurve == None): + self.xyzNurbsCurve = node + else: + print 'Mopath: got a PCT_NONE curve and an XYZ Curve!' + elif (node.getCurveType() == PCTT): + self.tNurbsCurve = node + else: + # Iterate over children if any + for child in nodePath.getChildrenAsList(): + self.__extractCurves(child) + + def goTo(self, node, time): + if (self.xyzNurbsCurve == None) & (self.hprNurbsCurve == None): + print 'Mopath: Mopath has no curves' + return + self.playbackTime = CLAMP(time, 0.0, self.maxT) + if (self.xyzNurbsCurve != None): + pos = Point3(0) + self.xyzNurbsCurve.getPoint(self.playbackTime, pos) + node.setPos(pos) + if (self.hprNurbsCurve != None): + hpr = Point3(0) + self.hprNurbsCurve.getPoint(self.playbackTime, hpr) + node.setHpr(hpr) diff --git a/direct/src/tkpanels/MopathRecorder.py b/direct/src/tkpanels/MopathRecorder.py index 8555fbd0f6..9c4e1d52b4 100644 --- a/direct/src/tkpanels/MopathRecorder.py +++ b/direct/src/tkpanels/MopathRecorder.py @@ -163,7 +163,7 @@ class MopathRecorder(AppShell, PandaObject): self.accept(event, method) def createInterface(self): - interior = self.interior() + interior = self.interior() # FILE MENU # Get a handle on the file menu so commands can be inserted # before quit item