Improvements to generated API docs, especially in direct tree.

Also add an entry point for pfreeze.
This commit is contained in:
rdb
2017-05-24 13:29:40 +02:00
parent c52bab1805
commit d576c6b638
86 changed files with 490 additions and 285 deletions

View File

@@ -0,0 +1,7 @@
"""
This package contains the :class:`.Actor` class as well as a
distributed variant thereof. Actor is a high-level interface around
the lower-level :class:`panda3d.core.Character` implementation.
It loads and controls an animated character and manages the animations
playing on it.
"""

View File

@@ -0,0 +1,4 @@
"""
This package contains various types of character controllers, handling basic
control mechanics and setting up collisions for them.
"""

View File

@@ -1,4 +1,19 @@
""" This is a deprecated module that creates a global instance of ShowBase. """
"""
This is a shortcut that instantiates ShowBase automatically on import,
opening a graphical window and setting up the scene graph.
This example demonstrates its use:
import direct.directbase.DirectStart
run()
While it may be considered useful for quick prototyping in the interactive
Python shell, using it in applications is not considered good style.
As such, it has been deprecated starting with Panda3D 1.9. It is equivalent
to and may be replaced by the following code:
from direct.showbase.ShowBase import ShowBase
base = ShowBase()
"""
__all__ = []

View File

@@ -0,0 +1,12 @@
"""
This package contains modules to quickly set up a Panda environment for
quick prototyping in the interactive Python shell. Merely importing
one of these modules will create a :class:`.ShowBase` instance, opening
a graphical window and setting up the scene graph.
The most commonly used module from this package is :mod:`.DirectStart`,
importing which executes the following code::
from direct.showbase.ShowBase import ShowBase
base = ShowBase()
"""

View File

@@ -9,10 +9,6 @@ ANALOG_MAX = 0.95
ANALOG_DEADBAND = 0.125
ANALOG_CENTER = 0.0
try:
myBase = base
except:
myBase = simbase
class DirectDeviceManager(VrpnClient, DirectObject):
def __init__(self, server = None):
@@ -52,8 +48,13 @@ class DirectButtons(ButtonNode, DirectObject):
ButtonNode.__init__(self, vrpnClient, device)
# Create a unique name for this button object
self.name = 'DirectButtons-' + repr(DirectButtons.buttonCount)
# Attach node to data graph
self.nodePath = myBase.dataRoot.attachNewNode(self)
try:
self._base = base
except:
self._base = simbase
self.nodePath = self._base.dataRoot.attachNewNode(self)
def __getitem__(self, index):
if (index < 0) or (index >= self.getNumButtons()):
@@ -64,10 +65,10 @@ class DirectButtons(ButtonNode, DirectObject):
return self.getNumButtons()
def enable(self):
self.nodePath.reparentTo(myBase.dataRoot)
self.nodePath.reparentTo(self._base.dataRoot)
def disable(self):
self.nodePath.reparentTo(myBase.dataUnused)
self.nodePath.reparentTo(self._base.dataUnused)
def getName(self):
return self.name
@@ -83,6 +84,12 @@ class DirectButtons(ButtonNode, DirectObject):
class DirectAnalogs(AnalogNode, DirectObject):
analogCount = 0
_analogDeadband = ConfigVariableDouble('vrpn-analog-deadband', ANALOG_DEADBAND)
_analogMin = ConfigVariableDouble('vrpn-analog-min', ANALOG_MIN)
_analogMax = ConfigVariableDouble('vrpn-analog-max', ANALOG_MAX)
_analogCenter = ConfigVariableDouble('vrpn-analog-center', ANALOG_CENTER)
def __init__(self, vrpnClient, device):
# Keep track of number of analogs created
DirectAnalogs.analogCount += 1
@@ -90,19 +97,20 @@ class DirectAnalogs(AnalogNode, DirectObject):
AnalogNode.__init__(self, vrpnClient, device)
# Create a unique name for this analog object
self.name = 'DirectAnalogs-' + repr(DirectAnalogs.analogCount)
# Attach node to data graph
self.nodePath = myBase.dataRoot.attachNewNode(self)
# See if any of the general analog parameters are dconfig'd
self.analogDeadband = myBase.config.GetFloat('vrpn-analog-deadband',
ANALOG_DEADBAND)
self.analogMin = myBase.config.GetFloat('vrpn-analog-min',
ANALOG_MIN)
self.analogMax = myBase.config.GetFloat('vrpn-analog-max',
ANALOG_MAX)
self.analogCenter = myBase.config.GetFloat('vrpn-analog-center',
ANALOG_CENTER)
self.analogRange = self.analogMax - self.analogMin
# Attach node to data graph
try:
self._base = base
except:
self._base = simbase
self.nodePath = self._base.dataRoot.attachNewNode(self)
# See if any of the general analog parameters are dconfig'd
self.analogDeadband = self._analogDeadband.getValue()
self.analogMin = self._analogMin.getValue()
self.analogMax = self._analogMax.getValue()
self.analogCenter = self._analogCenter.getValue()
self.analogRange = self.analogMax - self.analogMin
def __getitem__(self, index):
if (index < 0) or (index >= self.getNumControls()):
@@ -113,10 +121,10 @@ class DirectAnalogs(AnalogNode, DirectObject):
return self.getNumControls()
def enable(self):
self.nodePath.reparentTo(myBase.dataRoot)
self.nodePath.reparentTo(self._base.dataRoot)
def disable(self):
self.nodePath.reparentTo(myBase.dataUnused)
self.nodePath.reparentTo(self._base.dataUnused)
def normalizeWithoutCentering(self, val, minVal = -1, maxVal = 1):
#
@@ -186,14 +194,19 @@ class DirectTracker(TrackerNode, DirectObject):
TrackerNode.__init__(self, vrpnClient, device)
# Create a unique name for this tracker object
self.name = 'DirectTracker-' + repr(DirectTracker.trackerCount)
# Attach node to data graph
self.nodePath = myBase.dataRoot.attachNewNode(self)
try:
self._base = base
except:
self._base = simbase
self.nodePath = self._base.dataRoot.attachNewNode(self)
def enable(self):
self.nodePath.reparentTo(myBase.dataRoot)
self.nodePath.reparentTo(self._base.dataRoot)
def disable(self):
self.nodePath.reparentTo(myBase.dataUnused)
self.nodePath.reparentTo(self._base.dataUnused)
def getName(self):
return self.name
@@ -213,8 +226,13 @@ class DirectDials(DialNode, DirectObject):
DialNode.__init__(self, vrpnClient, device)
# Create a unique name for this dial object
self.name = 'DirectDials-' + repr(DirectDials.dialCount)
# Attach node to data graph
self.nodePath = myBase.dataRoot.attachNewNode(self)
try:
self._base = base
except:
self._base = simbase
self.nodePath = self._base.dataRoot.attachNewNode(self)
def __getitem__(self, index):
"""
@@ -227,10 +245,10 @@ class DirectDials(DialNode, DirectObject):
return self.getNumDials()
def enable(self):
self.nodePath.reparentTo(myBase.dataRoot)
self.nodePath.reparentTo(self._base.dataRoot)
def disable(self):
self.nodePath.reparentTo(myBase.dataUnused)
self.nodePath.reparentTo(self._base.dataUnused)
def getName(self):
return self.name
@@ -259,14 +277,19 @@ class DirectTimecodeReader(AnalogNode, DirectObject):
self.seconds = 0
self.minutes = 0
self.hours = 0
# Attach node to data graph
self.nodePath = myBase.dataRoot.attachNewNode(self)
try:
self._base = base
except:
self._base = simbase
self.nodePath = self._base.dataRoot.attachNewNode(self)
def enable(self):
self.nodePath.reparentTo(myBase.dataRoot)
self.nodePath.reparentTo(self._base.dataRoot)
def disable(self):
self.nodePath.reparentTo(myBase.dataUnused)
self.nodePath.reparentTo(self._base.dataUnused)
def getName(self):
return self.name

View File

@@ -21,7 +21,7 @@ class DirectRadamec(DirectObject):
radamecCount = 0
notify = DirectNotifyGlobal.directNotify.newCategory('DirectRadamec')
def __init__(self, device = 'Analog0', nodePath = base.direct.camera):
def __init__(self, device = 'Analog0', nodePath = None):
# See if device manager has been initialized
if base.direct.deviceManager == None:
base.direct.deviceManager = DirectDeviceManager()

View File

@@ -0,0 +1,5 @@
"""
This package contains a high-level interface for VRPN devices.
Also see the :mod:`panda3d.vprn` module.
"""

View File

@@ -0,0 +1,3 @@
"""
This package contains notification and logging utilities for Python code.
"""

View File

@@ -0,0 +1,8 @@
"""
This package contains the DIRECT tools, a set of tkinter tools for exploring
and manipulating the Panda3D scene graph. By default, these are disabled,
but they can be explicitly enabled using the following PRC configuration::
want-directtools true
want-tk true
"""

View File

@@ -0,0 +1,3 @@
"""
This package contains assorted utility classes.
"""

View File

@@ -7,19 +7,21 @@ from . import DistributedNode
from . import DistributedSmoothNodeBase
from direct.task.Task import cont
config = get_config_showbase()
# This number defines our tolerance for out-of-sync telemetry packets.
# If a packet appears to have originated from more than MaxFuture
# seconds in the future, assume we're out of sync with the other
# avatar and suggest a resync for both.
MaxFuture = base.config.GetFloat("smooth-max-future", 0.2)
MaxFuture = config.GetFloat("smooth-max-future", 0.2)
# How frequently can we suggest a resynchronize with another client?
MinSuggestResync = base.config.GetFloat("smooth-min-suggest-resync", 15)
MinSuggestResync = config.GetFloat("smooth-min-suggest-resync", 15)
# These flags indicate whether global smoothing and/or prediction is
# allowed or disallowed.
EnableSmoothing = base.config.GetBool("smooth-enable-smoothing", 1)
EnablePrediction = base.config.GetBool("smooth-enable-prediction", 1)
EnableSmoothing = config.GetBool("smooth-enable-smoothing", 1)
EnablePrediction = config.GetBool("smooth-enable-prediction", 1)
# These values represent the amount of time, in seconds, to delay the
# apparent position of other avatars, when non-predictive and
@@ -27,8 +29,8 @@ EnablePrediction = base.config.GetBool("smooth-enable-prediction", 1)
# addition to the automatic delay of the observed average latency from
# each avatar, which is intended to compensate for relative clock
# skew.
Lag = base.config.GetDouble("smooth-lag", 0.2)
PredictionLag = base.config.GetDouble("smooth-prediction-lag", 0.0)
Lag = config.GetDouble("smooth-lag", 0.2)
PredictionLag = config.GetDouble("smooth-prediction-lag", 0.0)
GlobalSmoothing = 0

View File

@@ -0,0 +1,5 @@
"""
This package contains an implementation of the Distributed Networking
API, a high-level networking system that automatically propagates
changes made on distributed objects to interested clients.
"""

View File

@@ -1 +1,4 @@
"""
This package contains various Python methods that extend some of Panda's
underlying C++ classes.
"""

View File

@@ -0,0 +1,11 @@
"""
This package contains functionality for applying post-processing
filters to the result of rendering a 3-D scene. This is done by
rendering the scene to an off-screen buffer, and then applying this to
a full-screen card that has a shader applied which manipulates the
texture values as desired.
The :class:`.CommonFilters` class contains various filters that are
provided out of the box, whereas the :class:`.FilterManager` class
is a lower-level class that allows you to set up your own filters.
"""

View File

@@ -1,13 +1,13 @@
"""Undocumented Module"""
__all__ = ['ClassicFSM']
"""Finite State Machine module: contains the ClassicFSM class.
This module and class exist only for backward compatibility with
existing code. New code should use the FSM module instead.
.. note::
This module and class exist only for backward compatibility with
existing code. New code should use the :mod:`.FSM` module instead.
"""
__all__ = ['ClassicFSM']
from direct.directnotify.DirectNotifyGlobal import directNotify
from direct.showbase.DirectObject import DirectObject
import weakref

View File

@@ -1,5 +1,5 @@
"""The new Finite State Machine module. This replaces the module
previously called FSM.py (now called ClassicFSM.py).
previously called FSM (now called :mod:`.ClassicFSM`).
"""
__all__ = ['FSMException', 'FSM']

View File

@@ -1,9 +1,7 @@
"""Undocumented Module"""
"""Contains the FourState class."""
__all__ = ['FourState']
from direct.directnotify import DirectNotifyGlobal
#import DistributedObject
from . import ClassicFSM
@@ -20,7 +18,7 @@ class FourState:
Inherit from FourStateFSM and pass in your states. Two of
the states should be oposites of each other and the other
two should be the transition states between the first two.
E.g.
E.g::
+--------+
-->| closed | --

View File

@@ -1,9 +1,7 @@
"""Undocumented Module"""
"""Contains the FourStateAI class. See also :mod:`.FourState`."""
__all__ = ['FourStateAI']
from direct.directnotify import DirectNotifyGlobal
#import DistributedObjectAI
from . import ClassicFSM
@@ -21,7 +19,7 @@ class FourStateAI:
Inherit from FourStateFSM and pass in your states. Two of
the states should be oposites of each other and the other
two should be the transition states between the first two.
E.g.
E.g::
+--------+
-->| closed | --

View File

@@ -0,0 +1,6 @@
"""
This package contains implementations of a Finite State Machine, an
abstract construct that holds a particular state and can transition
between several defined states. These are useful for a range of logic
programming tasks.
"""

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""This module contains the DirectButton class."""
__all__ = ['DirectButton']

View File

@@ -1,4 +1,6 @@
"""Undocumented Module"""
"""A DirectCheckButton is a type of button that toggles between two states
when clicked. It also has a separate indicator that can be modified
separately."""
__all__ = ['DirectCheckButton']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""This module defines various dialog windows for the DirectGUI system."""
__all__ = ['findDialog', 'cleanupDialog', 'DirectDialog', 'OkDialog', 'OkCancelDialog', 'YesNoDialog', 'YesNoCancelDialog', 'RetryCancelDialog']

View File

@@ -1,4 +1,5 @@
"""Undocumented Module"""
"""Contains the DirectEntry class, a type of DirectGUI widget that accepts
text entered using the keyboard."""
__all__ = ['DirectEntry']

View File

@@ -1,4 +1,17 @@
"""Undocumented Module"""
"""A DirectFrame is a basic DirectGUI component that acts as the base
class for various other components, and can also serve as a basic
container to hold other DirectGUI components.
A DirectFrame can have:
* A background texture (pass in path to image, or Texture Card)
* A midground geometry item (pass in geometry)
* A foreground text Node (pass in text string or OnscreenText)
Each of these has 1 or more states. The same object can be used for
all states or each state can have a different text/geom/image (for
radio button and check button indicators, for example).
"""
__all__ = ['DirectFrame']
@@ -19,14 +32,6 @@ class DirectFrame(DirectGuiWidget):
DefDynGroups = ('text', 'geom', 'image')
def __init__(self, parent = None, **kw):
# Inherits from DirectGuiWidget
# A Direct Frame can have:
# - A background texture (pass in path to image, or Texture Card)
# - A midground geometry item (pass in geometry)
# - A foreground text Node (pass in text string or Onscreen Text)
# Each of these has 1 or more states
# The same object can be used for all states or each
# state can have a different text/geom/image (for radio button
# and check button indicators, for example).
optiondefs = (
# Define type of DirectGuiWidget
('pgFunc', PGItem, None),

View File

@@ -1,32 +1,7 @@
"""Undocumented Module"""
__all__ = ['DirectGuiBase', 'DirectGuiWidget']
from panda3d.core import *
from panda3d.direct import get_config_showbase
from . import DirectGuiGlobals as DGG
from .OnscreenText import *
from .OnscreenGeom import *
from .OnscreenImage import *
from direct.directtools.DirectUtil import ROUND_TO
from direct.showbase import DirectObject
from direct.task import Task
import sys
if sys.version_info >= (3, 0):
stringType = str
else:
stringType = basestring
guiObjectCollector = PStatCollector("Client::GuiObjects")
"""
Base class for all Direct Gui items. Handles composite widgets and
command line argument parsing.
"""
"""
Code Overview:
1 Each widget defines a set of options (optiondefs) as a list of tuples
@@ -101,7 +76,31 @@ Code Overview:
are left unused. If so, an error is raised.
"""
__all__ = ['DirectGuiBase', 'DirectGuiWidget']
from panda3d.core import *
from panda3d.direct import get_config_showbase
from . import DirectGuiGlobals as DGG
from .OnscreenText import *
from .OnscreenGeom import *
from .OnscreenImage import *
from direct.directtools.DirectUtil import ROUND_TO
from direct.showbase import DirectObject
from direct.task import Task
import sys
if sys.version_info >= (3, 0):
stringType = str
else:
stringType = basestring
guiObjectCollector = PStatCollector("Client::GuiObjects")
class DirectGuiBase(DirectObject.DirectObject):
"""Base class of all DirectGUI widgets."""
def __init__(self):
# Default id of all gui object, subclasses should override this
self.guiId = 'guiObject'

View File

@@ -1,12 +1,10 @@
"""Undocumented Module"""
__all__ = []
"""
Global definitions used by Direct Gui Classes and handy constants
that can be used during widget construction
"""
__all__ = []
from panda3d.core import *
defaultFont = None

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the DirectLabel class."""
__all__ = ['DirectLabel']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Implements a pop-up menu containing multiple clickable options."""
__all__ = ['DirectOptionMenu']

View File

@@ -1,4 +1,7 @@
"""Undocumented Module"""
"""A DirectRadioButton is a type of button that, similar to a
DirectCheckButton, has a separate indicator and can be toggled between
two states. However, only one DirectRadioButton in a group can be enabled
at a particular time."""
__all__ = ['DirectRadioButton']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Defines the DirectScrollBar class."""
__all__ = ['DirectScrollBar']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the DirectScrolledFrame class."""
__all__ = ['DirectScrolledFrame']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the DirectScrolledList class."""
__all__ = ['DirectScrolledListItem', 'DirectScrolledList']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Defines the DirectSlider class."""
__all__ = ['DirectSlider']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the DirectWaitBar class, a progress bar widget."""
__all__ = ['DirectWaitBar']

View File

@@ -0,0 +1,12 @@
"""
This package contains the DirectGui system, a set of classes
responsible for drawing graphical widgets to the 2-D scene graph.
It is based on the lower-level PGui system, which is implemented in
C++.
For convenience, all of the DirectGui widgets may be imported from a
single module as follows::
from direct.gui.DirectGui import *
"""

View File

@@ -1,4 +1,7 @@
"""IntervalGlobal module"""
"""
This module imports all of the other interval modules, to provide a
single convenient module from which all interval types can be imported.
"""
# In this unusual case, I'm not going to declare __all__,
# since the purpose of this module is to add up the contributions

View File

@@ -1,4 +1,5 @@
"""Undocumented Module"""
"""Defines the IntervalManager class as well as the global instance of
this class, ivalMgr."""
__all__ = ['IntervalManager', 'ivalMgr']
@@ -136,6 +137,5 @@ class IntervalManager(CIntervalManager):
assert self.ivals[index] == None or self.ivals[index] == interval
self.ivals[index] = interval
# The global IntervalManager object.
#: The global IntervalManager object.
ivalMgr = IntervalManager(1)

View File

@@ -1,4 +1,7 @@
"""Undocumented Module"""
"""
This module defines the various "meta intervals", which execute other
intervals either in parallel or in a specified sequential order.
"""
__all__ = ['MetaInterval', 'Sequence', 'Parallel', 'ParallelEndTogether', 'Track']

View File

@@ -1,11 +1,9 @@
"""Undocumented Module"""
__all__ = ['ParticleInterval']
"""
Contains the ParticleInterval class
"""
__all__ = ['ParticleInterval']
from panda3d.core import *
from panda3d.direct import *
from direct.directnotify.DirectNotifyGlobal import directNotify

View File

@@ -1,11 +1,9 @@
"""Undocumented Module"""
"""
Contains the TestInterval class
"""
__all__ = ['TestInterval']
"""
Contains the ParticleInterval class
"""
from panda3d.core import *
from panda3d.direct import *
from direct.directnotify.DirectNotifyGlobal import directNotify

View File

@@ -0,0 +1,12 @@
"""
This package contains the Python implementation of the interval system,
which is a mechanism for playing back scripted actions. A range of
interval types has been defined to automate motion, animation, sounds,
color, function calls, as well as other intervals and arbitrary
properties.
All interval types can be conveniently imported from the
:mod:`.IntervalGlobal` module::
from direct.interval.IntervalGlobal import *
"""

View File

@@ -0,0 +1,3 @@
"""
This package contains only the :class:`.MotionTrail` class.
"""

View File

@@ -1,12 +1,15 @@
"""
This module is intended to be compiled into the Panda3D runtime
distributable, to execute a packaged p3d application, but it can also
be run directly via the Python interpreter (if the current Panda3D and
Python versions match the version expected by the application). See
runp3d.py for a command-line tool to invoke this module.
The global AppRunner instance may be imported as follows::
from direct.showbase.AppRunnerGlobal import appRunner
This will be None if Panda was not run from the runtime environment.
"""
__all__ = ["AppRunner", "dummyAppRunner", "ArgumentError"]

View File

@@ -0,0 +1,4 @@
"""
This package provides the Python interface to functionality relating to
the Panda3D Runtime environment.
"""

View File

@@ -0,0 +1,7 @@
"""
This package contains the high-level Python interface to the particle
system.
Also see the :mod:`panda3d.physics` module, which contains the C++
implementation of the particle system.
"""

View File

@@ -6,4 +6,6 @@ This is needed for apps that start themselves by importing
DirectStart; it provides a place for these apps to look for
the AppRunner at startup. """
#: Contains the global AppRunner instance, or None if this application
#: was not run from the runtime environment.
appRunner = None

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the Audio3DManager class."""
__all__ = ['Audio3DManager']

View File

@@ -1,4 +1,6 @@
"""Undocumented Module"""
"""Contains the BufferViewer class, which is used as a debugging aid
when debugging render-to-texture effects. It shows different views at
the bottom of the screen showing the various render targets."""
__all__ = ['BufferViewer']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the BulletinBoard class."""
__all__ = ['BulletinBoard']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the BulletinBoardWatcher class."""
__all__ = ['BulletinBoardWatcher']

View File

@@ -1,4 +1,5 @@
"""Undocumented Module"""
"""Defines the DirectObject class, a convenient class to inherit from if the
object needs to be able to respond to events."""
__all__ = ['DirectObject']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""This module defines the EventGroup class."""
__all__ = ['EventGroup']

View File

@@ -1,4 +1,5 @@
"""Undocumented Module"""
"""Contains the EventManager class. See :mod:`.EventManagerGlobal` for the
global eventMgr instance."""
__all__ = ['EventManager']

View File

@@ -1,7 +1,8 @@
"""Undocumented Module"""
"""Contains the global :class:`.EventManager` instance."""
__all__ = ['eventMgr']
from . import EventManager
#: The global event manager.
eventMgr = EventManager.EventManager()

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the Factory class."""
__all__ = ['Factory']

View File

@@ -1,7 +1,3 @@
"""Undocumented Module"""
__all__ = ['deCygwinify', 'getPaths']
"""This module is used only by the VR Studio programmers who are using
the ctattach tools. It is imported before any other package, and its
job is to figure out the correct paths to each of the packages.
@@ -10,6 +6,8 @@ This module is not needed if you are not using ctattach; in this case
all of the Panda packages will be collected under a common directory,
which you will presumably have already on your PYTHONPATH. """
__all__ = ['deCygwinify', 'getPaths']
import os
import sys

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains various utility functions."""
__all__ = ['findClass', 'rebindClass', 'copyFuncs', 'replaceMessengerFunc', 'replaceTaskMgrFunc', 'replaceStateFunc', 'replaceCRFunc', 'replaceAIRFunc', 'replaceIvalFunc']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains utility classes for debugging memory leaks."""
__all__ = ['FakeObject', '_createGarbage', 'GarbageReport', 'GarbageLogger']

View File

@@ -1,4 +1,5 @@
"""Undocumented Module"""
"""This defines the Messenger class, which is responsible for most of the
event handling that happens on the Python side."""
__all__ = ['Messenger']

View File

@@ -1,7 +1,3 @@
"""Undocumented Module"""
__all__ = ['setupMirror', 'showFrustum']
"""This file demonstrates one way to create a mirror effect in Panda.
Call setupMirror() to create a mirror in the world that reflects
everything in front of it.
@@ -23,6 +19,8 @@ surface are possible, like a funhouse mirror. However, the reflection
itself is always basically planar; for more accurate convex
reflections, you will need to use a sphere map or a cube map."""
__all__ = ['setupMirror', 'showFrustum']
from panda3d.core import *
from direct.task import Task

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the ObjectPool utility class."""
__all__ = ['Diff', 'ObjectPool']

View File

@@ -1,4 +1,13 @@
"""Undocumented Module"""
"""
>>> from direct.showbase import ObjectReport
>>> o=ObjectReport.ObjectReport('baseline')
>>> run()
...
>>> o2=ObjectReport.ObjectReport('')
>>> o.diff(o2)
"""
__all__ = ['ExclusiveObjectPool', 'ObjectReport']
@@ -13,17 +22,6 @@ if sys.version_info >= (3, 0):
else:
import __builtin__ as builtins
"""
>>> from direct.showbase import ObjectReport
>>> o=ObjectReport.ObjectReport('baseline')
>>> run()
...
>>> o2=ObjectReport.ObjectReport('')
>>> o.diff(o2)
"""
class ExclusiveObjectPool(DirectObject.DirectObject):
# ObjectPool specialization that excludes particular objects
# IDs of objects to globally exclude from reporting

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the OnScreenDebug class."""
__all__ = ['OnScreenDebug']

View File

@@ -1,9 +1,4 @@
"""Undocumented Module"""
__all__ = ['Pool']
"""
Pool is a collection of python objects that you can checkin and
checkout. This is useful for a cache of objects that are expensive to load
and can be reused over and over, like splashes on cannonballs, or
@@ -12,12 +7,16 @@ or be the same type.
Internally the pool is implemented with 2 lists, free items and used items.
p = Pool([1, 2, 3, 4, 5])
x = p.checkout()
p.checkin(x)
Example::
p = Pool([1, 2, 3, 4, 5])
x = p.checkout()
p.checkin(x)
"""
__all__ = ['Pool']
from direct.directnotify import DirectNotifyGlobal
@@ -116,5 +115,3 @@ class Pool:
def __repr__(self):
return "free = %s\nused = %s" % (self.__free, self.__used)

View File

@@ -1,4 +1,5 @@
"""Undocumented Module"""
"""Contains the SfxPlayer class, a thin utility class for playing sounds at
a particular location."""
__all__ = ['SfxPlayer']
@@ -95,6 +96,3 @@ class SfxPlayer:
if node is not None:
finalVolume *= node.getNetAudioVolume()
sfx.setVolume(finalVolume)

View File

@@ -1,8 +1,3 @@
"""Undocumented Module"""
__all__ = ['ShadowCaster', 'avatarShadow', 'piratesAvatarShadow', 'arbitraryShadow']
"""Create a cheesy shadow effect by rendering the view of an
object (e.g. the local avatar) from a special camera as seen from
above (as if from the sun), using a solid gray foreground and a
@@ -14,6 +9,8 @@ multitexture rendering techniques. It's not a particularly great
way to do shadows.
"""
__all__ = ['ShadowCaster', 'avatarShadow', 'piratesAvatarShadow', 'arbitraryShadow']
from panda3d.core import *
from direct.task import Task

View File

@@ -1,7 +1,3 @@
"""Undocumented Module"""
__all__ = ['ShadowPlacer']
"""
ShadowPlacer.py places a shadow.
@@ -10,6 +6,8 @@ Or it may do that later, right now it puts a node on the surface under
the its parent node.
"""
__all__ = ['ShadowPlacer']
from direct.controls.ControlManager import CollisionHandlerRayStart
from direct.directnotify import DirectNotifyGlobal
from panda3d.core import *

View File

@@ -1,10 +1,13 @@
"""Undocumented Module"""
"""Contains the TaskThreaded and TaskThread classes."""
__all__ = ['TaskThreaded', 'TaskThread']
from direct.directnotify.DirectNotifyGlobal import directNotify
from direct.task import Task
from .PythonUtil import SerialNumGen
class TaskThreaded:
""" derive from this if you need to do a bunch of CPU-intensive
processing and you don't want to hang up the show. Lets you break

View File

@@ -1,4 +1,5 @@
"""Undocumented Module"""
"""ThreeUpShow is a variant of ShowBase that defines three cameras covering
different parts of the window."""
__all__ = ['ThreeUpShow']

View File

@@ -1,4 +1,6 @@
"""Undocumented Module"""
"""This module defines various transition effects that can be used to
graphically transition between two scenes, such as by fading the screen to
a particular color."""
__all__ = ['Transitions']

View File

@@ -1,4 +1,7 @@
"""Undocumented Module"""
"""
This module hooks into Python's import mechanism to print out all imports to
the standard output as they happen.
"""
__all__ = []

View File

@@ -13,11 +13,11 @@ Python code into a standalone executable. It also uses Python's
built-in modulefinder module, which it uses to find all of the modules
imported directly or indirectly by the original startfile.py.
Usage:
Usage::
pfreeze.py [opts] [startfile]
Options:
Options::
-o output
Specifies the name of the resulting executable file to produce.
@@ -67,88 +67,95 @@ def usage(code, msg = ''):
sys.stderr.write(str(msg) + '\n')
sys.exit(code)
# We're not protecting the next part under a __name__ == __main__
# check, just so we can import this file directly in ppython.cxx.
freezer = FreezeTool.Freezer()
def main(args=None):
if args is None:
args = sys.argv[1:]
basename = None
addStartupModules = False
freezer = FreezeTool.Freezer()
try:
opts, args = getopt.getopt(sys.argv[1:], 'o:i:x:p:P:slkh')
except getopt.error as msg:
usage(1, msg)
basename = None
addStartupModules = False
for opt, arg in opts:
if opt == '-o':
basename = arg
elif opt == '-i':
for module in arg.split(','):
freezer.addModule(module)
elif opt == '-x':
for module in arg.split(','):
freezer.excludeModule(module)
elif opt == '-p':
for module in arg.split(','):
freezer.handleCustomPath(module)
elif opt == '-P':
sys.path.append(arg)
elif opt == '-s':
addStartupModules = True
elif opt == '-l':
freezer.linkExtensionModules = True
elif opt == '-k':
freezer.keepTemporaryFiles = True
elif opt == '-h':
usage(0)
try:
opts, args = getopt.getopt(args, 'o:i:x:p:P:slkh')
except getopt.error as msg:
usage(1, msg)
for opt, arg in opts:
if opt == '-o':
basename = arg
elif opt == '-i':
for module in arg.split(','):
freezer.addModule(module)
elif opt == '-x':
for module in arg.split(','):
freezer.excludeModule(module)
elif opt == '-p':
for module in arg.split(','):
freezer.handleCustomPath(module)
elif opt == '-P':
sys.path.append(arg)
elif opt == '-s':
addStartupModules = True
elif opt == '-l':
freezer.linkExtensionModules = True
elif opt == '-k':
freezer.keepTemporaryFiles = True
elif opt == '-h':
usage(0)
else:
print('illegal option: ' + flag)
sys.exit(1)
if not basename:
usage(1, 'You did not specify an output file.')
if len(args) > 1:
usage(1, 'Only one main file may be specified.')
outputType = 'exe'
bl = basename.lower()
if bl.endswith('.mf'):
outputType = 'mf'
elif bl.endswith('.c'):
outputType = 'c'
elif bl.endswith('.dll') or bl.endswith('.pyd') or bl.endswith('.so'):
basename = os.path.splitext(basename)[0]
outputType = 'dll'
elif bl.endswith('.exe'):
basename = os.path.splitext(basename)[0]
compileToExe = False
if args:
startfile = args[0]
startmod = startfile
if startfile.endswith('.py') or startfile.endswith('.pyw') or \
startfile.endswith('.pyc') or startfile.endswith('.pyo'):
startmod = os.path.splitext(startfile)[0]
if outputType == 'dll' or outputType == 'c':
freezer.addModule(startmod, filename = startfile)
else:
freezer.addModule('__main__', filename = startfile)
compileToExe = True
addStartupModules = True
elif outputType == 'exe':
# We must have a main module when making an executable.
usage(1, 'A main file needs to be specified when creating an executable.')
freezer.done(addStartupModules = addStartupModules)
if outputType == 'mf':
freezer.writeMultifile(basename)
elif outputType == 'c':
freezer.writeCode(basename)
else:
print('illegal option: ' + flag)
sys.exit(1)
freezer.generateCode(basename, compileToExe = compileToExe)
if not basename:
usage(1, 'You did not specify an output file.')
return 0
if len(args) > 1:
usage(1, 'Only one main file may be specified.')
outputType = 'exe'
bl = basename.lower()
if bl.endswith('.mf'):
outputType = 'mf'
elif bl.endswith('.c'):
outputType = 'c'
elif bl.endswith('.dll') or bl.endswith('.pyd') or bl.endswith('.so'):
basename = os.path.splitext(basename)[0]
outputType = 'dll'
elif bl.endswith('.exe'):
basename = os.path.splitext(basename)[0]
compileToExe = False
if args:
startfile = args[0]
startmod = startfile
if startfile.endswith('.py') or startfile.endswith('.pyw') or \
startfile.endswith('.pyc') or startfile.endswith('.pyo'):
startmod = os.path.splitext(startfile)[0]
if outputType == 'dll' or outputType == 'c':
freezer.addModule(startmod, filename = startfile)
else:
freezer.addModule('__main__', filename = startfile)
compileToExe = True
addStartupModules = True
elif outputType == 'exe':
# We must have a main module when making an executable.
usage(1, 'A main file needs to be specified when creating an executable.')
freezer.done(addStartupModules = addStartupModules)
if outputType == 'mf':
freezer.writeMultifile(basename)
elif outputType == 'c':
freezer.writeCode(basename)
else:
freezer.generateCode(basename, compileToExe = compileToExe)
if __name__ == '__main__':
sys.exit(main())

View File

@@ -0,0 +1,5 @@
"""
This package contains various modules that provide a drop-in substitute
for some of the built-in Python modules. These substitutes make better
use of Panda3D's virtual file system and threading system.
"""

View File

@@ -4,4 +4,5 @@ __all__ = ['taskMgr']
from . import Task
#: The global task manager.
taskMgr = Task.TaskManager()

View File

@@ -24,7 +24,8 @@ def taskCallback(task):
spawnNewTask()
return Task.done
taskMgr.removeTasksMatching("taskTester*")
if __name__ == '__main__':
taskMgr.removeTasksMatching("taskTester*")
for i in range(numTasks):
spawnNewTask()
for i in range(numTasks):
spawnNewTask()

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the Timer class."""
__all__ = ['Timer']

View File

@@ -0,0 +1,8 @@
"""
This package contains the Python interface to the task system, which
manages scheduled functions that are executed at designated intervals.
The global task manager object can be imported as a singleton::
from direct.task.TaskManagerGlobal import taskMgr
"""

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the NotifyPanel class."""
__all__ = ['NotifyPanel']

View File

@@ -1,4 +1,7 @@
"""Undocumented Module"""
"""This module defines a widget used to display a graphical overview of the
scene graph using the tkinter GUI system.
Requires Pmw."""
__all__ = ['SceneGraphExplorer', 'SceneGraphExplorerItem', 'explore']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Defines tree widgets for the tkinter GUI system."""
__all__ = ['TreeNode', 'TreeItem']

View File

@@ -1,4 +1,4 @@
"""Undocumented Module"""
"""Contains the WidgetPropertiesDialog class."""
__all__ = ['WidgetPropertiesDialog']

View File

@@ -97,6 +97,8 @@ PUBLISHED:
// Derived classes should override this function to return get_class_type().
virtual TypeHandle get_type() const=0;
// Returns the TypeHandle representing this object's type.
MAKE_PROPERTY(type, get_type);
INLINE int get_type_index() const;

View File

@@ -1966,6 +1966,10 @@ get_make_property(CPPMakeProperty *make_property, CPPStructType *struct_type, CP
// See if there happens to be a comment before the MAKE_PROPERTY macro.
if (make_property->_leading_comment != (CPPCommentBlock *)NULL) {
iproperty._comment = trim_blanks(make_property->_leading_comment->_comment);
} else if (getter->_leading_comment != (CPPCommentBlock *)NULL) {
// Take the comment from the getter.
iproperty._comment = trim_blanks(getter->_leading_comment->_comment);
}
// Now look for setters.

View File

@@ -551,6 +551,7 @@ def makewheel(version, output_dir, platform=default_platform):
# Add a panda3d-tools directory containing the executables.
entry_points = '[console_scripts]\n'
entry_points += 'eggcacher = direct.directscripts.eggcacher:main\n'
entry_points += 'pfreeze = direct.showutil.pfreeze:main\n'
tools_init = ''
for file in os.listdir(bin_dir):
basename = os.path.splitext(file)[0]

View File

@@ -51,8 +51,14 @@ make_identity() {
/**
* Constructs a new LightRampAttrib object. This causes the luminance of the
* diffuse lighting contribution to be quantized using a single threshold:
* @code if (original_luminance > threshold0) { luminance = level0; } else {
* luminance = 0.0; } @endcode
*
* @code
* if (original_luminance > threshold0) {
* luminance = level0;
* } else {
* luminance = 0.0;
* }
* @endcode
*/
CPT(RenderAttrib) LightRampAttrib::
make_single_threshold(PN_stdfloat thresh0, PN_stdfloat val0) {
@@ -65,10 +71,17 @@ make_single_threshold(PN_stdfloat thresh0, PN_stdfloat val0) {
/**
* Constructs a new LightRampAttrib object. This causes the luminance of the
* diffuse lighting contribution to be quantized using two thresholds: @code
* if (original_luminance > threshold1) { luminance = level1; } else if
* (original_luminance > threshold0) { luminance = level0; } else { luminance
* = 0.0; } @endcode
* diffuse lighting contribution to be quantized using two thresholds:
*
* @code
* if (original_luminance > threshold1) {
* luminance = level1;
* } else if (original_luminance > threshold0) {
* luminance = level0;
* } else {
* luminance = 0.0;
* }
* @endcode
*/
CPT(RenderAttrib) LightRampAttrib::
make_double_threshold(PN_stdfloat thresh0, PN_stdfloat val0, PN_stdfloat thresh1, PN_stdfloat val1) {
@@ -94,8 +107,11 @@ make_double_threshold(PN_stdfloat thresh0, PN_stdfloat val0, PN_stdfloat thresh1
* However, the monitor has finite contrast. Normally, all of that contrast
* is used to represent brightnesses in the range 0-1. The HDR0 tone mapping
* operator 'steals' one quarter of that contrast to represent brightnesses in
* the range 1-infinity. @code FINAL_RGB = (RGB^3 + RGB^2 + RGB) / (RGB^3 +
* RGB^2 + RGB + 1) @endcode
* the range 1-infinity.
*
* @code
* FINAL_RGB = (RGB^3 + RGB^2 + RGB) / (RGB^3 + RGB^2 + RGB + 1)
* @endcode
*/
CPT(RenderAttrib) LightRampAttrib::
make_hdr0() {
@@ -117,7 +133,10 @@ make_hdr0() {
* However, the monitor has finite contrast. Normally, all of that contrast
* is used to represent brightnesses in the range 0-1. The HDR1 tone mapping
* operator 'steals' one third of that contrast to represent brightnesses in
* the range 1-infinity. @code FINAL_RGB = (RGB^2 + RGB) / (RGB^2 + RGB + 1)
* the range 1-infinity.
*
* @code
* FINAL_RGB = (RGB^2 + RGB) / (RGB^2 + RGB + 1)
* @endcode
*/
CPT(RenderAttrib) LightRampAttrib::
@@ -140,7 +159,11 @@ make_hdr1() {
* However, the monitor has finite contrast. Normally, all of that contrast
* is used to represent brightnesses in the range 0-1. The HDR2 tone mapping
* operator 'steals' one half of that contrast to represent brightnesses in
* the range 1-infinity. @code FINAL_RGB = (RGB) / (RGB + 1) @endcode
* the range 1-infinity.
*
* @code
* FINAL_RGB = (RGB) / (RGB + 1)
* @endcode
*/
CPT(RenderAttrib) LightRampAttrib::
make_hdr2() {

View File

@@ -17,12 +17,7 @@
#include "linearForce.h"
/**
* a programmable force that takes an evaluator fn.
*
* NOTE : AS OF Interrogate => Squeak, this class does NOT get FFI'd due to
* the function pointer bug, and is currently NOT getting interrogated.
* Change this in the makefile when the time is right or this class becomes
* needed...
* A programmable force that takes an evaluator function.
*/
class EXPCL_PANDAPHYSICS LinearUserDefinedForce : public LinearForce {
PUBLISHED: