ptloader-units

This commit is contained in:
David Rose 2005-10-10 16:54:29 +00:00
parent a06e9f2e01
commit d9b6585a78
5 changed files with 40 additions and 12 deletions

View File

@ -23,6 +23,8 @@
#include "config_util.h"
#include "textNode.h"
#include "multiplexStream.h"
#include "distanceUnit.h"
#include "configVariableEnum.h"
// We must define this to prevent Maya from doubly-declaring its
// MApiVersion string in this file as well as in libmayaegg.
@ -182,6 +184,19 @@ convert(const NodePath &parent, bool animate) {
// Now the converter has filled up our egg structure with data, so
// convert this egg data to Panda data for immediate viewing.
DistanceUnit input_units = converter.get_input_units();
ConfigVariableEnum<DistanceUnit> ptloader_units("ptloader-units", DU_invalid);
if (input_units != DU_invalid && ptloader_units != DU_invalid &&
input_units != ptloader_units) {
// Convert the file to the units specified by the ptloader-units
// Configrc variable.
nout
<< "Converting from " << format_long_unit(input_units)
<< " to " << format_long_unit(ptloader_units) << "\n";
double scale = convert_units(input_units, ptloader_units);
egg_data->transform(LMatrix4d::scale_mat(scale));
}
egg_data->set_coordinate_system(CS_default);
PT(PandaNode) result = load_egg_data(egg_data);

View File

@ -17,7 +17,7 @@
////////////////////////////////////////////////////////////////////
#include "distanceUnit.h"
#include "config_pandatoolbase.h"
#include "string_utils.h"
#include "notify.h"
@ -114,6 +114,22 @@ operator << (ostream &out, DistanceUnit unit) {
return out << format_abbrev_unit(unit);
}
////////////////////////////////////////////////////////////////////
// Function: DistanceUnit input operator
// Description:
////////////////////////////////////////////////////////////////////
istream &
operator >> (istream &in, DistanceUnit &unit) {
string word;
in >> word;
unit = string_distance_unit(word);
if (unit == DU_invalid) {
pandatoolbase_cat->error()
<< "Invalid distance unit: " << word << "\n";
}
return in;
}
////////////////////////////////////////////////////////////////////
// Function: string_distance_unit
// Description: Converts from a string, as might be input by the

View File

@ -44,6 +44,7 @@ string format_abbrev_unit(DistanceUnit unit);
string format_long_unit(DistanceUnit unit);
ostream &operator << (ostream &out, DistanceUnit unit);
istream &operator >> (istream &in, DistanceUnit &unit);
DistanceUnit string_distance_unit(const string &str);
double convert_units(DistanceUnit from, DistanceUnit to);

View File

@ -39,7 +39,11 @@ ConfigureFn(config_ptloader) {
init_libptloader();
}
DistanceUnit ptloader_units = DU_invalid;
ConfigVariableEnum<DistanceUnit> ptloader_units
("ptloader-units", DU_invalid,
PRC_DESC("Specifies the preferred units into which models will be converted "
"when using libptloader to automatically convert files to Panda "
"at load time, via e.g. \"pview myMayaFile.mb\"."));
////////////////////////////////////////////////////////////////////
// Function: init_libptloader
@ -57,15 +61,6 @@ init_libptloader() {
}
initialized = true;
string units = config_ptloader.GetString("ptloader-units", "feet");
if (!units.empty()) {
ptloader_units = string_distance_unit(units);
if (ptloader_units == DU_invalid) {
ptloader_cat->warning()
<< "Invalid ptloader-units: " << units << "\n";
}
}
LoaderFileTypePandatool::init_type();
LoaderFileTypeRegistry *reg = LoaderFileTypeRegistry::get_global_ptr();

View File

@ -23,11 +23,12 @@
#include "dconfig.h"
#include "distanceUnit.h"
#include "configVariableEnum.h"
ConfigureDecl(config_ptloader, EXPCL_PTLOADER, EXPTP_PTLOADER);
NotifyCategoryDecl(ptloader, EXPCL_PTLOADER, EXPTP_PTLOADER);
extern DistanceUnit ptloader_units;
extern ConfigVariableEnum<DistanceUnit> ptloader_units;
extern EXPCL_PTLOADER void init_libptloader();