more interface for egg-palettize

This commit is contained in:
David Rose 2003-08-20 02:53:05 +00:00
parent b11b16a896
commit 7620dff858
4 changed files with 53 additions and 6 deletions

View File

@ -86,21 +86,25 @@ resolve_egg_filename(Filename &egg_filename, const DSearchPath &searchpath) {
// messages.
////////////////////////////////////////////////////////////////////
bool EggData::
read(Filename filename) {
read(Filename filename, string display_name) {
filename.set_text();
set_egg_filename(filename);
if (display_name.empty()) {
display_name = filename;
}
if (use_vfs) {
VirtualFileSystem *vfs = VirtualFileSystem::get_global_ptr();
istream *file = vfs->open_read_file(filename);
if (file == (istream *)NULL) {
egg_cat.error() << "Unable to open " << filename << "\n";
egg_cat.error() << "Unable to open " << display_name << "\n";
return false;
}
egg_cat.info()
<< "Reading " << filename << "\n";
<< "Reading " << display_name << "\n";
bool read_ok = read(*file);
delete file;
@ -109,12 +113,12 @@ read(Filename filename) {
} else {
ifstream file;
if (!filename.open_read(file)) {
egg_cat.error() << "Unable to open " << filename << "\n";
egg_cat.error() << "Unable to open " << display_name << "\n";
return false;
}
egg_cat.info()
<< "Reading " << filename << "\n";
<< "Reading " << display_name << "\n";
return read(file);
}

View File

@ -52,7 +52,7 @@ public:
static bool resolve_egg_filename(Filename &egg_filename,
const DSearchPath &searchpath = DSearchPath());
bool read(Filename filename);
bool read(Filename filename, string display_name = string());
bool read(istream &in);
void merge(EggData &other);

View File

@ -348,6 +348,48 @@ resolve_filenames(const DSearchPath &searchpath) {
}
}
////////////////////////////////////////////////////////////////////
// Function: EggGroupNode::force_filenames
// Access: Public
// Description: Similar to resolve_filenames, but each non-absolute
// filename encountered is arbitrarily taken to be in
// the indicated directory, whether or not the so-named
// filename exists.
////////////////////////////////////////////////////////////////////
void EggGroupNode::
force_filenames(const Filename &directory) {
Children::iterator ci;
for (ci = _children.begin();
ci != _children.end();
++ci) {
EggNode *child = *ci;
if (child->is_of_type(EggTexture::get_class_type())) {
EggTexture *tex = DCAST(EggTexture, child);
Filename tex_filename = tex->get_filename();
if (tex_filename.is_local()) {
tex->set_filename(Filename(directory, tex_filename));
}
if (tex->has_alpha_filename()) {
Filename alpha_filename = tex->get_alpha_filename();
if (alpha_filename.is_local()) {
tex->set_alpha_filename(Filename(directory, alpha_filename));
}
}
} else if (child->is_of_type(EggFilenameNode::get_class_type())) {
EggFilenameNode *fnode = DCAST(EggFilenameNode, child);
Filename filename = fnode->get_filename();
if (filename.is_local()) {
fnode->set_filename(Filename(directory, filename));
}
} else if (child->is_of_type(EggGroupNode::get_class_type())) {
DCAST(EggGroupNode, child)->force_filenames(directory);
}
}
}
////////////////////////////////////////////////////////////////////
// Function: EggGroupNode::reverse_vertex_ordering
// Access: Public

View File

@ -112,6 +112,7 @@ public:
EggNode *find_child(const string &name) const;
void resolve_filenames(const DSearchPath &searchpath);
void force_filenames(const Filename &directory);
void reverse_vertex_ordering();
void recompute_vertex_normals(double threshold, CoordinateSystem cs = CS_default);