| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985 |
- """
- NodePath-extensions module: contains methods to extend functionality
- of the NodePath class
- """
- def id(self):
- """Returns a unique id identifying the NodePath instance"""
- try:
- # Old style scene graph
- return self.arc()
- except:
- # New style scene graph
- return self.getKey()
- def getName(self):
- """Returns the name of the bottom node if it exists, or <noname>"""
- node = self.node()
- if hasattr(node, "getName"):
- return node.getName()
- return '<noname>'
- def setName(self, name = '<noname>'):
- """Sets the name of the bottom node if it can be set."""
- node = self.node()
- if hasattr(node, "setName"):
- node.setName(name)
- # For iterating over children
- def getChildrenAsList(self):
- """Converts a node path's child NodePathCollection into a list"""
- if self.isEmpty():
- return []
- else:
- children = self.getChildren()
- childrenList = []
- for childNum in range(self.getNumChildren()):
- childrenList.append(children[childNum])
- return childrenList
- def printChildren(self):
- """Prints out the children of the bottom node of a node path"""
- for child in self.getChildrenAsList():
- print child.getName()
- def toggleVis(self):
- """Toggles visibility of a nodePath"""
- if self.isHidden():
- self.show()
- return 1
- else:
- self.hide()
- return 0
-
- def showSiblings(self):
- """Show all the siblings of a node path"""
- for sib in self.getParent().getChildrenAsList():
- if sib.node() != self.node():
- sib.show()
- def hideSiblings(self):
- """Hide all the siblings of a node path"""
- for sib in self.getParent().getChildrenAsList():
- if sib.node() != self.node():
- sib.hide()
- def showAllDescendants(self):
- """Show the node path and all its children"""
- if self.hasArcs():
- self.show()
- for child in self.getChildrenAsList():
- child.showAllDescendants()
- def isolate(self):
- """Show the node path and hide its siblings"""
- self.showAllDescendants()
- self.hideSiblings()
- def remove(self):
- """Remove a node path from the scene graph"""
- # Send message in case anyone needs to do something
- # before node is deleted
- messenger.send('preRemoveNodePath', [self])
- # Remove nodePath
- self.removeNode()
- def reversels(self):
- """Walk up a tree and print out the path to the root"""
- ancestry = self.getAncestry()
- indentString = ""
- for nodePath in ancestry:
- type = nodePath.node().getType().getName()
- name = nodePath.getName()
- print indentString + type + " " + name
- indentString = indentString + " "
- def getAncestry(self):
- """Get a list of a node path's ancestors"""
- node = self.node()
- if (self.hasParent()):
- ancestry = self.getParent().getAncestry()
- ancestry.append(self)
- return ancestry
- else:
- return [self]
- def getTightBounds(self):
- import Point3
- v1 = Point3.Point3(0)
- v2 = Point3.Point3(0)
- self.calcTightBounds(v1,v2)
- return v1, v2
- def pprintPos(self, other = None, sd = 2):
- """ Pretty print a node path's pos """
- formatString = '%0.' + '%d' % sd + 'f'
- if other:
- pos = self.getPos(other)
- otherString = other.getName() + ', '
- else:
- pos = self.getPos()
- otherString = ''
- print (self.getName() + '.setPos(' + otherString +
- formatString % pos[0] + ', ' +
- formatString % pos[1] + ', ' +
- formatString % pos[2] +
- ')\n')
- def pprintHpr(self, other = None, sd = 2):
- """ Pretty print a node path's hpr """
- formatString = '%0.' + '%d' % sd + 'f'
- if other:
- hpr = self.getHpr(other)
- otherString = other.getName() + ', '
- else:
- hpr = self.getHpr()
- otherString = ''
- print (self.getName() + '.setHpr(' + otherString +
- formatString % hpr[0] + ', ' +
- formatString % hpr[1] + ', ' +
- formatString % hpr[2] +
- ')\n')
- def pprintScale(self, other = None, sd = 2):
- """ Pretty print a node path's scale """
- formatString = '%0.' + '%d' % sd + 'f'
- if other:
- scale = self.getScale(other)
- otherString = other.getName() + ', '
- else:
- scale = self.getScale()
- otherString = ''
- print (self.getName() + '.setScale(' + otherString +
- formatString % scale[0] + ', ' +
- formatString % scale[1] + ', ' +
- formatString % scale[2] +
- ')\n')
- def pprintPosHpr(self, other = None, sd = 2):
- """ Pretty print a node path's pos and, hpr """
- formatString = '%0.' + '%d' % sd + 'f'
- if other:
- pos = self.getPos(other)
- hpr = self.getHpr(other)
- otherString = other.getName() + ', '
- else:
- pos = self.getPos()
- hpr = self.getHpr()
- otherString = ''
- print (self.getName() + '.setPosHpr(' + otherString +
- formatString % pos[0] + ', ' +
- formatString % pos[1] + ', ' +
- formatString % pos[2] + ', ' +
- formatString % hpr[0] + ', ' +
- formatString % hpr[1] + ', ' +
- formatString % hpr[2] +
- ')\n')
- def pprintPosHprScale(self, other = None, sd = 2):
- """ Pretty print a node path's pos, hpr, and scale """
- formatString = '%0.' + '%d' % sd + 'f'
- if other:
- pos = self.getPos(other)
- hpr = self.getHpr(other)
- scale = self.getScale(other)
- otherString = other.getName() + ', '
- else:
- pos = self.getPos()
- hpr = self.getHpr()
- scale = self.getScale()
- otherString = ''
- print (self.getName() + '.setPosHprScale(' + otherString +
- formatString % pos[0] + ', ' +
- formatString % pos[1] + ', ' +
- formatString % pos[2] + ', ' +
- formatString % hpr[0] + ', ' +
- formatString % hpr[1] + ', ' +
- formatString % hpr[2] + ', ' +
- formatString % scale[0] + ', ' +
- formatString % scale[1] + ', ' +
- formatString % scale[2] +
- ')\n')
- def iPos(self, other = None):
- """ Set node path's pos to 0,0,0 """
- if other:
- self.setPos(other, 0,0,0)
- else:
- self.setPos(0,0,0)
- def iHpr(self, other = None):
- """ Set node path's hpr to 0,0,0 """
- if other:
- self.setHpr(other, 0,0,0)
- else:
- self.setHpr(0,0,0)
- def iScale(self, other = None):
- """ SEt node path's scale to 1,1,1 """
- if other:
- self.setScale(other, 1,1,1)
- else:
- self.setScale(1,1,1)
- def iPosHpr(self, other = None):
- """ Set node path's pos and hpr to 0,0,0 """
- if other:
- self.setPosHpr(other,0,0,0,0,0,0)
- else:
- self.setPosHpr(0,0,0,0,0,0)
- def iPosHprScale(self, other = None):
- """ Set node path's pos and hpr to 0,0,0 and scale to 1,1,1 """
- if other:
- self.setPosHprScale(other, 0,0,0,0,0,0,1,1,1)
- else:
- self.setPosHprScale(0,0,0,0,0,0,1,1,1)
- # private methods
-
- def __getBlend(self, blendType):
- """__getBlend(self, string)
- Return the C++ blend class corresponding to blendType string
- """
- import LerpBlendHelpers
- if (blendType == "easeIn"):
- return LerpBlendHelpers.easeIn
- elif (blendType == "easeOut"):
- return LerpBlendHelpers.easeOut
- elif (blendType == "easeInOut"):
- return LerpBlendHelpers.easeInOut
- elif (blendType == "noBlend"):
- return LerpBlendHelpers.noBlend
- else:
- raise Exception("Error: NodePath.__getBlend: Unknown blend type")
-
- def __lerp(self, functorFunc, duration, blendType, taskName=None):
- """
- __lerp(self, functorFunc, float, string, string)
- Basic lerp functionality used by other lerps.
- Fire off a lerp. Make it a task if taskName given.
- """
- # functorFunc is a function which can be called to create a functor.
- # functor creation is defered so initial state (sampled in functorFunc)
- # will be appropriate for the time the lerp is spawned
- import Task
- from TaskManagerGlobal import taskMgr
-
- # upon death remove the functorFunc
- def lerpUponDeath(task):
- # Try to break circular references
- try:
- del task.functorFunc
- except:
- pass
- try:
- del task.lerp
- except:
- pass
-
- # make the task function
- def lerpTaskFunc(task):
- from Lerp import Lerp
- from ClockObject import ClockObject
- from Task import Task, cont, done
- if task.init == 1:
- # make the lerp
- functor = task.functorFunc()
- task.lerp = Lerp(functor, task.duration, task.blendType)
- task.init = 0
- dt = globalClock.getDt()
- task.lerp.setStepSize(dt)
- task.lerp.step()
- if (task.lerp.isDone()):
- # Reset the init flag, in case the task gets re-used
- task.init = 1
- return(done)
- else:
- return(cont)
-
- # make the lerp task
- lerpTask = Task.Task(lerpTaskFunc)
- lerpTask.init = 1
- lerpTask.functorFunc = functorFunc
- lerpTask.duration = duration
- lerpTask.blendType = self.__getBlend(blendType)
- lerpTask.uponDeath = lerpUponDeath
-
- if (taskName == None):
- # don't spawn a task, return one instead
- return lerpTask
- else:
- # spawn the lerp task
- taskMgr.add(lerpTask, taskName)
- return lerpTask
- def __autoLerp(self, functorFunc, time, blendType, taskName):
- """_autoLerp(self, functor, float, string, string)
- This lerp uses C++ to handle the stepping. Bonus is
- its more efficient, trade-off is there is less control"""
- import AutonomousLerp
- # make a lerp that lives in C++ land
- functor = functorFunc()
- lerp = AutonomousLerp.AutonomousLerp(functor, time,
- self.__getBlend(blendType),
- base.eventHandler)
- lerp.start()
- return lerp
- # user callable lerp methods
- def lerpColor(self, *posArgs, **keyArgs):
- """lerpColor(self, *positionArgs, **keywordArgs)
- determine which lerpColor* to call based on arguments
- """
- if (len(posArgs) == 2):
- return apply(self.lerpColorVBase4, posArgs, keyArgs)
- elif (len(posArgs) == 3):
- return apply(self.lerpColorVBase4VBase4, posArgs, keyArgs)
- elif (len(posArgs) == 5):
- return apply(self.lerpColorRGBA, posArgs, keyArgs)
- elif (len(posArgs) == 9):
- return apply(self.lerpColorRGBARGBA, posArgs, keyArgs)
- else:
- # bad args
- raise Exception("Error: NodePath.lerpColor: bad number of args")
-
- def lerpColorRGBA(self, r, g, b, a, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorRGBA(self, float, float, float, float, float,
- string="noBlend", string=none, string=none)
- """
- def functorFunc(self = self, r = r, g = g, b = b, a = a):
- import ColorLerpFunctor
- # just end rgba values, use current color rgba values for start
- startColor = self.getColor()
- functor = ColorLerpFunctor.ColorLerpFunctor(
- self,
- startColor[0], startColor[1],
- startColor[2], startColor[3],
- r, g, b, a)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpColorRGBARGBA(self, sr, sg, sb, sa, er, eg, eb, ea, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorRGBARGBA(self, float, float, float, float, float,
- float, float, float, float, string="noBlend", string=none, string=none)
- """
- def functorFunc(self = self, sr = sr, sg = sg, sb = sb, sa = sa,
- er = er, eg = eg, eb = eb, ea = ea):
- import ColorLerpFunctor
- # start and end rgba values
- functor = ColorLerpFunctor.ColorLerpFunctor(self, sr, sg, sb, sa,
- er, eg, eb, ea)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpColorVBase4(self, endColor, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorVBase4(self, VBase4, float, string="noBlend", string=none,
- string=none)
- """
- def functorFunc(self = self, endColor = endColor):
- import ColorLerpFunctor
- # just end vec4, use current color for start
- startColor = self.getColor()
- functor = ColorLerpFunctor.ColorLerpFunctor(
- self, startColor, endColor)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpColorVBase4VBase4(self, startColor, endColor, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorVBase4VBase4(self, VBase4, VBase4, float, string="noBlend",
- string=none, string=none)
- """
- def functorFunc(self = self, startColor = startColor,
- endColor = endColor):
- import ColorLerpFunctor
- # start color and end vec
- functor = ColorLerpFunctor.ColorLerpFunctor(
- self, startColor, endColor)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- # user callable lerp methods
- def lerpColorScale(self, *posArgs, **keyArgs):
- """lerpColorScale(self, *positionArgs, **keywordArgs)
- determine which lerpColorScale* to call based on arguments
- """
- if (len(posArgs) == 2):
- return apply(self.lerpColorScaleVBase4, posArgs, keyArgs)
- elif (len(posArgs) == 3):
- return apply(self.lerpColorScaleVBase4VBase4, posArgs, keyArgs)
- elif (len(posArgs) == 5):
- return apply(self.lerpColorScaleRGBA, posArgs, keyArgs)
- elif (len(posArgs) == 9):
- return apply(self.lerpColorScaleRGBARGBA, posArgs, keyArgs)
- else:
- # bad args
- raise Exception("Error: NodePath.lerpColorScale: bad number of args")
-
- def lerpColorScaleRGBA(self, r, g, b, a, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorScaleRGBA(self, float, float, float, float, float,
- string="noBlend", string=none, string=none)
- """
- def functorFunc(self = self, r = r, g = g, b = b, a = a):
- import ColorScaleLerpFunctor
- # just end rgba values, use current color rgba values for start
- startColor = self.getColor()
- functor = ColorScaleLerpFunctor.ColorScaleLerpFunctor(
- self,
- startColor[0], startColor[1],
- startColor[2], startColor[3],
- r, g, b, a)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpColorScaleRGBARGBA(self, sr, sg, sb, sa, er, eg, eb, ea, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorScaleRGBARGBA(self, float, float, float, float, float,
- float, float, float, float, string="noBlend", string=none, string=none)
- """
- def functorFunc(self = self, sr = sr, sg = sg, sb = sb, sa = sa,
- er = er, eg = eg, eb = eb, ea = ea):
- import ColorScaleLerpFunctor
- # start and end rgba values
- functor = ColorScaleLerpFunctor.ColorScaleLerpFunctor(self, sr, sg, sb, sa,
- er, eg, eb, ea)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpColorScaleVBase4(self, endColor, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorScaleVBase4(self, VBase4, float, string="noBlend", string=none,
- string=none)
- """
- def functorFunc(self = self, endColor = endColor):
- import ColorScaleLerpFunctor
- # just end vec4, use current color for start
- startColor = self.getColor()
- functor = ColorScaleLerpFunctor.ColorScaleLerpFunctor(
- self, startColor, endColor)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpColorScaleVBase4VBase4(self, startColor, endColor, time,
- blendType="noBlend", auto=None, task=None):
- """lerpColorScaleVBase4VBase4(self, VBase4, VBase4, float, string="noBlend",
- string=none, string=none)
- """
- def functorFunc(self = self, startColor = startColor,
- endColor = endColor):
- import ColorScaleLerpFunctor
- # start color and end vec
- functor = ColorScaleLerpFunctor.ColorScaleLerpFunctor(
- self, startColor, endColor)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
-
- def lerpHpr(self, *posArgs, **keyArgs):
- """lerpHpr(self, *positionArgs, **keywordArgs)
- Determine whether to call lerpHprHPR or lerpHprVBase3
- based on first argument
- """
- # check to see if lerping with
- # three floats or a VBase3
- if (len(posArgs) == 4):
- return apply(self.lerpHprHPR, posArgs, keyArgs)
- elif(len(posArgs) == 2):
- return apply(self.lerpHprVBase3, posArgs, keyArgs)
- else:
- # bad args
- raise Exception("Error: NodePath.lerpHpr: bad number of args")
-
- def lerpHprHPR(self, h, p, r, time, other=None,
- blendType="noBlend", auto=None, task=None, shortest=1):
- """lerpHprHPR(self, float, float, float, float, string="noBlend",
- string=none, string=none, NodePath=none)
- Perform a hpr lerp with three floats as the end point
- """
- def functorFunc(self = self, h = h, p = p, r = r,
- other = other, shortest=shortest):
- import HprLerpFunctor
- # it's individual hpr components
- if (other != None):
- # lerp wrt other
- startHpr = self.getHpr(other)
- functor = HprLerpFunctor.HprLerpFunctor(
- self,
- startHpr[0], startHpr[1], startHpr[2],
- h, p, r, other)
- if shortest:
- functor.takeShortest()
- else:
- startHpr = self.getHpr()
- functor = HprLerpFunctor.HprLerpFunctor(
- self,
- startHpr[0], startHpr[1], startHpr[2],
- h, p, r)
- if shortest:
- functor.takeShortest()
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
-
- def lerpHprVBase3(self, hpr, time, other=None,
- blendType="noBlend", auto=None, task=None, shortest=1):
- """lerpHprVBase3(self, VBase3, float, string="noBlend", string=none,
- string=none, NodePath=None)
- Perform a hpr lerp with a VBase3 as the end point
- """
- def functorFunc(self = self, hpr = hpr,
- other = other, shortest=shortest):
- import HprLerpFunctor
- # it's a vbase3 hpr
- if (other != None):
- # lerp wrt other
- functor = HprLerpFunctor.HprLerpFunctor(
- self, (self.getHpr(other)), hpr, other)
- if shortest:
- functor.takeShortest()
- else:
- functor = HprLerpFunctor.HprLerpFunctor(
- self, (self.getHpr()), hpr)
- if shortest:
- functor.takeShortest()
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
-
- def lerpPos(self, *posArgs, **keyArgs):
- """lerpPos(self, *positionArgs, **keywordArgs)
- Determine whether to call lerpPosXYZ or lerpPosPoint3
- based on the first argument
- """
- # check to see if lerping with three
- # floats or a Point3
- if (len(posArgs) == 4):
- return apply(self.lerpPosXYZ, posArgs, keyArgs)
- elif(len(posArgs) == 2):
- return apply(self.lerpPosPoint3, posArgs, keyArgs)
- else:
- # bad number off args
- raise Exception("Error: NodePath.lerpPos: bad number of args")
- def lerpPosXYZ(self, x, y, z, time, other=None,
- blendType="noBlend", auto=None, task=None):
- """lerpPosXYZ(self, float, float, float, float, string="noBlend",
- string=None, NodePath=None)
- Perform a pos lerp with three floats as the end point
- """
- def functorFunc(self = self, x = x, y = y, z = z, other = other):
- import PosLerpFunctor
- if (other != None):
- # lerp wrt other
- startPos = self.getPos(other)
- functor = PosLerpFunctor.PosLerpFunctor(self,
- startPos[0], startPos[1], startPos[2],
- x, y, z, other)
- else:
- startPos = self.getPos()
- functor = PosLerpFunctor.PosLerpFunctor(self, startPos[0],
- startPos[1], startPos[2], x, y, z)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpPosPoint3(self, pos, time, other=None,
- blendType="noBlend", auto=None, task=None):
- """lerpPosPoint3(self, Point3, float, string="noBlend", string=None,
- string=None, NodePath=None)
- Perform a pos lerp with a Point3 as the end point
- """
- def functorFunc(self = self, pos = pos, other = other):
- import PosLerpFunctor
- if (other != None):
- #lerp wrt other
- functor = PosLerpFunctor.PosLerpFunctor(
- self, (self.getPos(other)), pos, other)
- else:
- functor = PosLerpFunctor.PosLerpFunctor(
- self, (self.getPos()), pos)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpPosHpr(self, *posArgs, **keyArgs):
- """lerpPosHpr(self, *positionArgs, **keywordArgs)
- Determine whether to call lerpPosHprXYZHPR or lerpHprPoint3VBase3
- based on first argument
- """
- # check to see if lerping with
- # six floats or a Point3 and a VBase3
- if (len(posArgs) == 7):
- return apply(self.lerpPosHprXYZHPR, posArgs, keyArgs)
- elif(len(posArgs) == 3):
- return apply(self.lerpPosHprPoint3VBase3, posArgs, keyArgs)
- else:
- # bad number off args
- raise Exception("Error: NodePath.lerpPosHpr: bad number of args")
- def lerpPosHprPoint3VBase3(self, pos, hpr, time, other=None,
- blendType="noBlend", auto=None, task=None, shortest=1):
- """lerpPosHprPoint3VBase3(self, Point3, VBase3, string="noBlend",
- string=none, string=none, NodePath=None)
- """
- def functorFunc(self = self, pos = pos, hpr = hpr,
- other = other, shortest=shortest):
- import PosHprLerpFunctor
- if (other != None):
- # lerp wrt other
- startPos = self.getPos(other)
- startHpr = self.getHpr(other)
- functor = PosHprLerpFunctor.PosHprLerpFunctor(
- self, startPos, pos,
- startHpr, hpr, other)
- if shortest:
- functor.takeShortest()
- else:
- startPos = self.getPos()
- startHpr = self.getHpr()
- functor = PosHprLerpFunctor.PosHprLerpFunctor(
- self, startPos, pos,
- startHpr, hpr)
- if shortest:
- functor.takeShortest()
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpPosHprXYZHPR(self, x, y, z, h, p, r, time, other=None,
- blendType="noBlend", auto=None, task=None, shortest=1):
- """lerpPosHpr(self, float, string="noBlend", string=none,
- string=none, NodePath=None)
- """
- def functorFunc(self = self, x = x, y = y, z = z,
- h = h, p = p, r = r, other = other, shortest=shortest):
- import PosHprLerpFunctor
- if (other != None):
- # lerp wrt other
- startPos = self.getPos(other)
- startHpr = self.getHpr(other)
- functor = PosHprLerpFunctor.PosHprLerpFunctor(self,
- startPos[0], startPos[1],
- startPos[2], x, y, z,
- startHpr[0], startHpr[1],
- startHpr[2], h, p, r,
- other)
- if shortest:
- functor.takeShortest()
- else:
- startPos = self.getPos()
- startHpr = self.getHpr()
- functor = PosHprLerpFunctor.PosHprLerpFunctor(self,
- startPos[0], startPos[1],
- startPos[2], x, y, z,
- startHpr[0], startHpr[1],
- startHpr[2], h, p, r)
- if shortest:
- functor.takeShortest()
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpPosHprScale(self, pos, hpr, scale, time, other=None,
- blendType="noBlend", auto=None, task=None, shortest=1):
- """lerpPosHpr(self, Point3, VBase3, float, float, string="noBlend",
- string=none, string=none, NodePath=None)
- Only one case, no need for extra args. Call the appropriate lerp
- (auto, spawned, or blocking) based on how(if) a task name is given
- """
- def functorFunc(self = self, pos = pos, hpr = hpr,
- scale = scale, other = other, shortest=shortest):
- import PosHprScaleLerpFunctor
- if (other != None):
- # lerp wrt other
- startPos = self.getPos(other)
- startHpr = self.getHpr(other)
- startScale = self.getScale(other)
- functor = PosHprScaleLerpFunctor.PosHprScaleLerpFunctor(self,
- startPos, pos,
- startHpr, hpr,
- startScale, scale, other)
- if shortest:
- functor.takeShortest()
- else:
- startPos = self.getPos()
- startHpr = self.getHpr()
- startScale = self.getScale()
- functor = PosHprScaleLerpFunctor.PosHprScaleLerpFunctor(self,
- startPos, pos,
- startHpr, hpr,
- startScale, scale)
- if shortest:
- functor.takeShortest()
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpScale(self, *posArgs, **keyArgs):
- """lerpSclae(self, *positionArgs, **keywordArgs)
- Determine whether to call lerpScaleXYZ or lerpScaleaseV3
- based on the first argument
- """
- # check to see if lerping with three
- # floats or a Point3
- if (len(posArgs) == 4):
- return apply(self.lerpScaleXYZ, posArgs, keyArgs)
- elif(len(posArgs) == 2):
- return apply(self.lerpScaleVBase3, posArgs, keyArgs)
- else:
- # bad number off args
- raise Exception("Error: NodePath.lerpScale: bad number of args")
- def lerpScaleVBase3(self, scale, time, other=None,
- blendType="noBlend", auto=None, task=None):
- """lerpPos(self, VBase3, float, string="noBlend", string=none,
- string=none, NodePath=None)
- """
- def functorFunc(self = self, scale = scale, other = other):
- import ScaleLerpFunctor
- if (other != None):
- # lerp wrt other
- functor = ScaleLerpFunctor.ScaleLerpFunctor(self,
- (self.getScale(other)),
- scale, other)
- else:
- functor = ScaleLerpFunctor.ScaleLerpFunctor(self,
- (self.getScale()), scale)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
- def lerpScaleXYZ(self, sx, sy, sz, time, other=None,
- blendType="noBlend", auto=None, task=None):
- """lerpPos(self, float, float, float, float, string="noBlend",
- string=none, string=none, NodePath=None)
- """
- def functorFunc(self = self, sx = sx, sy = sy, sz = sz, other = other):
- import ScaleLerpFunctor
- if (other != None):
- # lerp wrt other
- startScale = self.getScale(other)
- functor = ScaleLerpFunctor.ScaleLerpFunctor(self,
- startScale[0], startScale[1],
- startScale[2], sx, sy, sz, other)
- else:
- startScale = self.getScale()
- functor = ScaleLerpFunctor.ScaleLerpFunctor(self,
- startScale[0], startScale[1],
- startScale[2], sx, sy, sz)
- return functor
- #determine whether to use auto, spawned, or blocking lerp
- if (auto != None):
- return self.__autoLerp(functorFunc, time, blendType, auto)
- elif (task != None):
- return self.__lerp(functorFunc, time, blendType, task)
- else:
- return self.__lerp(functorFunc, time, blendType)
-
- def place(self):
- base.wantTk = 1
- base.wantDIRECT = 1
- import DirectSession
- direct.enable()
- import Placer
- return Placer.place(self)
- def explore(self):
- base.wantTk = 1
- base.wantDIRECT = 1
- import TkGlobal
- import SceneGraphExplorer
- return SceneGraphExplorer.explore(self)
- def rgbPanel(self, cb = None):
- base.wantTk = 1
- base.wantDIRECT = 1
- import TkGlobal
- import Slider
- return Slider.rgbPanel(self, cb)
- def select(self):
- base.wantTk = 1
- base.wantDIRECT = 1
- import DirectSession
- direct.select(self)
- def deselect(self):
- base.wantTk = 1
- base.wantDIRECT = 1
- import DirectSession
- direct.deselect(self)
- def setAlphaScale(self, alpha):
- self.setColorScale(1, 1, 1, alpha)
- def setAllColorScale(self, color):
- self.setColorScale(color, color, color, 1)
- def showCS(self, mask = None):
- """showCS(self, mask)
- Shows the collision solids at or below this node. If mask is
- not None, it is a BitMask32 object (e.g. WallBitmask,
- CameraBitmask) that indicates which particular collision
- solids should be made visible; otherwise, all of them will be.
- """
- npc = self.findAllMatches('**/+CollisionNode')
- for p in range(0, npc.getNumPaths()):
- np = npc[p]
- if (mask == None or (np.node().getIntoCollideMask() & mask).getWord()):
- np.show()
- def hideCS(self, mask = None):
- """hideCS(self, mask)
- Hides the collision solids at or below this node. If mask is
- not None, it is a BitMask32 object (e.g. WallBitmask,
- CameraBitmask) that indicates which particular collision
- solids should be hidden; otherwise, all of them will be.
- """
- npc = self.findAllMatches('**/+CollisionNode')
- for p in range(0, npc.getNumPaths()):
- np = npc[p]
- if (mask == None or (np.node().getIntoCollideMask() & mask).getWord()):
- np.hide()
- def posInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpPosInterval(self, *args, **kw)
-
- def hprInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpHprInterval(self, *args, **kw)
- def scaleInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpScaleInterval(self, *args, **kw)
- def posHprInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpPosHprInterval(self, *args, **kw)
- def hprScaleInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpHprScaleInterval(self, *args, **kw)
- def posHprScaleInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpPosHprScaleInterval(self, *args, **kw)
- def colorInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpColorInterval(self, *args, **kw)
- def colorScaleInterval(self, *args, **kw):
- import LerpInterval
- return LerpInterval.LerpColorScaleInterval(self, *args, **kw)
|