Panda3D Manual: Panda Filename Syntax
  <<prev top next>>     

For easier portability, Panda3D uses Unix-style pathnames, even on Microsoft Windows. This means that the directory separator character is always a forward slash, not the Windows backslash character, and there is no leading drive letter prefix. (Instead of a leading drive letter, Panda uses an initial one-letter directory name to represent the drive.)

There is a fairly straightforward conversion from Windows filenames to panda filenames. Always be sure to use Panda filename syntax when using a Panda3D library function, or one of the panda utility programs:


# WRONG:
loader.loadModel("c:\\Program Files\\My Game\\Models\\Model1.egg")

# CORRECT:
loader.loadModel("/c/Program Files/My Game/Models/Model1.egg")

Panda uses the Filename class to store Panda-style filenames; many Panda functions expect a Filename object as a parameter. The Filename class also contains several useful methods for path manipulation and file access, as well as for converting between Windows-style filenames and Panda-style filenames; see the API reference for a more complete list.

To convert a Windows filename to a Panda pathname, use code similar to the following:

from pandac.PandaModules import Filename
winfile = "c:\\MyGame\\Model1.egg"
pandafile = Filename.fromOsSpecific(winfile)
print pandafile

To convert a Panda filename into a Windows filename, use code not unlike this:

from pandac.PandaModules import Filename
pandafile = Filename("/c/MyGame/Model1.egg")
winfile = pandafile.toOsSpecific()
print winfile

The Filename class can also be used in combination with python's built-in path manipulation mechanisms. Let's say, for instance, that you want to load a model, and the model is in the "model" directory that is in the same directory as the main program's "py" file. Here is how you would load the model:

import sys,os
from pandac.PandaModules import Filename

# get the location of the 'py' file I'm running:
mydir = os.path.abspath(sys.path[0])

# convert that to panda's unix-style notation
mydir = Filename.fromOsSpecific(mydir).getFullpath()

# now load the model
model = loader.loadModel(mydir + "/models/mymodel.egg")

Note: You need to keep in mind that the standard python functions (like os.remove()) work with OS specific paths. So do not forget to convert your OS Generic paths back to OS Specific paths when using Python's built-in functions.

  <<prev top next>>