From d9b6585a78eda6a8a5ec856b2db55628d6f70bee Mon Sep 17 00:00:00 2001 From: David Rose Date: Mon, 10 Oct 2005 16:54:29 +0000 Subject: [PATCH] ptloader-units --- pandatool/src/mayaprogs/mayaPview.cxx | 15 +++++++++++++++ pandatool/src/pandatoolbase/distanceUnit.cxx | 18 +++++++++++++++++- pandatool/src/pandatoolbase/distanceUnit.h | 1 + pandatool/src/ptloader/config_ptloader.cxx | 15 +++++---------- pandatool/src/ptloader/config_ptloader.h | 3 ++- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/pandatool/src/mayaprogs/mayaPview.cxx b/pandatool/src/mayaprogs/mayaPview.cxx index 225162c42b..e4fb36bd9e 100755 --- a/pandatool/src/mayaprogs/mayaPview.cxx +++ b/pandatool/src/mayaprogs/mayaPview.cxx @@ -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 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); diff --git a/pandatool/src/pandatoolbase/distanceUnit.cxx b/pandatool/src/pandatoolbase/distanceUnit.cxx index ffe80e8f38..3445d2d6c2 100644 --- a/pandatool/src/pandatoolbase/distanceUnit.cxx +++ b/pandatool/src/pandatoolbase/distanceUnit.cxx @@ -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 diff --git a/pandatool/src/pandatoolbase/distanceUnit.h b/pandatool/src/pandatoolbase/distanceUnit.h index 461b2f7260..e1649606f8 100644 --- a/pandatool/src/pandatoolbase/distanceUnit.h +++ b/pandatool/src/pandatoolbase/distanceUnit.h @@ -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); diff --git a/pandatool/src/ptloader/config_ptloader.cxx b/pandatool/src/ptloader/config_ptloader.cxx index 00aac80407..4a32d00629 100644 --- a/pandatool/src/ptloader/config_ptloader.cxx +++ b/pandatool/src/ptloader/config_ptloader.cxx @@ -39,7 +39,11 @@ ConfigureFn(config_ptloader) { init_libptloader(); } -DistanceUnit ptloader_units = DU_invalid; +ConfigVariableEnum 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(); diff --git a/pandatool/src/ptloader/config_ptloader.h b/pandatool/src/ptloader/config_ptloader.h index b128928f38..3283b43958 100644 --- a/pandatool/src/ptloader/config_ptloader.h +++ b/pandatool/src/ptloader/config_ptloader.h @@ -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 ptloader_units; extern EXPCL_PTLOADER void init_libptloader();