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")

  <<prev top next>>