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