mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-18 12:43:44 -04:00
refine mayaloader
This commit is contained in:
parent
25a599e3c9
commit
31c734468d
@ -102,6 +102,20 @@ get_additional_extensions() const {
|
|||||||
return string();
|
return string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: SomethingToEggConverter::get_input_units
|
||||||
|
// Access: Public, Virtual
|
||||||
|
// Description: This may be called after convert_file() has been
|
||||||
|
// called and returned true, indicating a successful
|
||||||
|
// conversion. It will return the distance units
|
||||||
|
// represented by the converted egg file, if known, or
|
||||||
|
// DU_invalid if not known.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
DistanceUnit SomethingToEggConverter::
|
||||||
|
get_input_units() {
|
||||||
|
return DU_invalid;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: SomethingToEggConverter::handle_external_reference
|
// Function: SomethingToEggConverter::handle_external_reference
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "animationConvert.h"
|
#include "animationConvert.h"
|
||||||
#include "pathReplace.h"
|
#include "pathReplace.h"
|
||||||
#include "pointerTo.h"
|
#include "pointerTo.h"
|
||||||
|
#include "distanceUnit.h"
|
||||||
|
|
||||||
class EggData;
|
class EggData;
|
||||||
class EggGroupNode;
|
class EggGroupNode;
|
||||||
@ -104,6 +105,7 @@ public:
|
|||||||
virtual string get_additional_extensions() const;
|
virtual string get_additional_extensions() const;
|
||||||
|
|
||||||
virtual bool convert_file(const Filename &filename)=0;
|
virtual bool convert_file(const Filename &filename)=0;
|
||||||
|
virtual DistanceUnit get_input_units();
|
||||||
|
|
||||||
bool handle_external_reference(EggGroupNode *egg_parent,
|
bool handle_external_reference(EggGroupNode *egg_parent,
|
||||||
const Filename &ref_filename);
|
const Filename &ref_filename);
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
FltToEggConverter::
|
FltToEggConverter::
|
||||||
FltToEggConverter() {
|
FltToEggConverter() {
|
||||||
_compose_transforms = false;
|
_compose_transforms = false;
|
||||||
|
_flt_units = DU_invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -130,9 +131,26 @@ convert_file(const Filename &filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
header->check_version();
|
header->check_version();
|
||||||
|
|
||||||
|
_flt_units = header->get_units();
|
||||||
|
|
||||||
return convert_flt(header);
|
return convert_flt(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: FltToEggConverter::get_input_units
|
||||||
|
// Access: Public, Virtual
|
||||||
|
// Description: This may be called after convert_file() has been
|
||||||
|
// called and returned true, indicating a successful
|
||||||
|
// conversion. It will return the distance units
|
||||||
|
// represented by the converted egg file, if known, or
|
||||||
|
// DU_invalid if not known.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
DistanceUnit FltToEggConverter::
|
||||||
|
get_input_units() {
|
||||||
|
return _flt_units;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: FltToEggConverter::convert_flt
|
// Function: FltToEggConverter::convert_flt
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "pt_EggTexture.h"
|
#include "pt_EggTexture.h"
|
||||||
#include "pt_EggVertex.h"
|
#include "pt_EggVertex.h"
|
||||||
#include "pointerTo.h"
|
#include "pointerTo.h"
|
||||||
|
#include "distanceUnit.h"
|
||||||
|
|
||||||
class FltRecord;
|
class FltRecord;
|
||||||
class FltLOD;
|
class FltLOD;
|
||||||
@ -64,6 +65,7 @@ public:
|
|||||||
virtual string get_extension() const;
|
virtual string get_extension() const;
|
||||||
|
|
||||||
virtual bool convert_file(const Filename &filename);
|
virtual bool convert_file(const Filename &filename);
|
||||||
|
virtual DistanceUnit get_input_units();
|
||||||
bool convert_flt(const FltHeader *flt_header);
|
bool convert_flt(const FltHeader *flt_header);
|
||||||
|
|
||||||
// Set this true to store transforms in egg files as the fully
|
// Set this true to store transforms in egg files as the fully
|
||||||
@ -102,6 +104,7 @@ private:
|
|||||||
PT_EggTexture make_egg_texture(const FltTexture *flt_texture);
|
PT_EggTexture make_egg_texture(const FltTexture *flt_texture);
|
||||||
|
|
||||||
CPT(FltHeader) _flt_header;
|
CPT(FltHeader) _flt_header;
|
||||||
|
DistanceUnit _flt_units;
|
||||||
|
|
||||||
PT(EggVertexPool) _main_egg_vpool;
|
PT(EggVertexPool) _main_egg_vpool;
|
||||||
|
|
||||||
|
@ -81,10 +81,6 @@ run() {
|
|||||||
|
|
||||||
_data.set_coordinate_system(_coordinate_system);
|
_data.set_coordinate_system(_coordinate_system);
|
||||||
|
|
||||||
if (_input_units == DU_invalid) {
|
|
||||||
_input_units = header->get_units();
|
|
||||||
}
|
|
||||||
|
|
||||||
FltToEggConverter converter;
|
FltToEggConverter converter;
|
||||||
converter.set_merge_externals(_merge_externals);
|
converter.set_merge_externals(_merge_externals);
|
||||||
converter.set_egg_data(&_data, false);
|
converter.set_egg_data(&_data, false);
|
||||||
@ -98,6 +94,10 @@ run() {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_input_units == DU_invalid) {
|
||||||
|
_input_units = converter.get_input_units();
|
||||||
|
}
|
||||||
|
|
||||||
write_egg_file();
|
write_egg_file();
|
||||||
nout << "\n";
|
nout << "\n";
|
||||||
}
|
}
|
||||||
|
@ -194,6 +194,20 @@ convert_file(const Filename &filename) {
|
|||||||
return convert_maya(false);
|
return convert_maya(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: MayaToEggConverter::get_input_units
|
||||||
|
// Access: Public, Virtual
|
||||||
|
// Description: This may be called after convert_file() has been
|
||||||
|
// called and returned true, indicating a successful
|
||||||
|
// conversion. It will return the distance units
|
||||||
|
// represented by the converted egg file, if known, or
|
||||||
|
// DU_invalid if not known.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
DistanceUnit MayaToEggConverter::
|
||||||
|
get_input_units() {
|
||||||
|
_maya->get_units();
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: MayaToEggConverter::convert_maya
|
// Function: MayaToEggConverter::convert_maya
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
@ -73,6 +73,7 @@ public:
|
|||||||
virtual string get_additional_extensions() const;
|
virtual string get_additional_extensions() const;
|
||||||
|
|
||||||
virtual bool convert_file(const Filename &filename);
|
virtual bool convert_file(const Filename &filename);
|
||||||
|
virtual DistanceUnit get_input_units();
|
||||||
bool convert_maya(bool from_selection);
|
bool convert_maya(bool from_selection);
|
||||||
|
|
||||||
bool open_api();
|
bool open_api();
|
||||||
|
@ -105,8 +105,7 @@
|
|||||||
egg2pg:c builder:c egg:c pandaegg:m \
|
egg2pg:c builder:c egg:c pandaegg:m \
|
||||||
mathutil:c linmath:c putil:c panda:m \
|
mathutil:c linmath:c putil:c panda:m \
|
||||||
express:c pandaexpress:m \
|
express:c pandaexpress:m \
|
||||||
dtoolconfig dtool \
|
dtoolconfig dtool
|
||||||
$[if $[UNIX_PLATFORM],OpenMayalib]
|
|
||||||
|
|
||||||
#define SOURCES \
|
#define SOURCES \
|
||||||
config_mayaloader.cxx
|
config_mayaloader.cxx
|
||||||
|
58
pandatool/src/mayaprogs/config_mayaloader.cxx
Normal file
58
pandatool/src/mayaprogs/config_mayaloader.cxx
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// Filename: config_mayaloader.cxx
|
||||||
|
// Created by: drose (09Oct03)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// PANDA 3D SOFTWARE
|
||||||
|
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
||||||
|
//
|
||||||
|
// All use of this software is subject to the terms of the Panda 3d
|
||||||
|
// Software license. You should have received a copy of this license
|
||||||
|
// along with this source code; you will also find a current copy of
|
||||||
|
// the license at http://www.panda3d.org/license.txt .
|
||||||
|
//
|
||||||
|
// To contact the maintainers of this program write to
|
||||||
|
// panda3d@yahoogroups.com .
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "pandatoolbase.h"
|
||||||
|
#include "loaderFileTypePandatool.h"
|
||||||
|
#include "config_mayaegg.h"
|
||||||
|
#include "mayaToEggConverter.h"
|
||||||
|
|
||||||
|
#include "dconfig.h"
|
||||||
|
#include "loaderFileTypeRegistry.h"
|
||||||
|
|
||||||
|
Configure(config_mayaloader);
|
||||||
|
|
||||||
|
void EXPCL_MISC init_libmayaloader();
|
||||||
|
|
||||||
|
ConfigureFn(config_mayaloader) {
|
||||||
|
init_libmayaloader();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: init_libmayaloader
|
||||||
|
// Description: Initializes the library. This must be called at
|
||||||
|
// least once before any of the functions or classes in
|
||||||
|
// this library can be used. Normally it will be
|
||||||
|
// called by the static initializers and need not be
|
||||||
|
// called explicitly, but special cases exist.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
init_libmayaloader() {
|
||||||
|
static bool initialized = false;
|
||||||
|
if (initialized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
initialized = true;
|
||||||
|
|
||||||
|
LoaderFileTypePandatool::init_type();
|
||||||
|
|
||||||
|
LoaderFileTypeRegistry *reg = LoaderFileTypeRegistry::get_ptr();
|
||||||
|
|
||||||
|
init_libmayaegg();
|
||||||
|
MayaToEggConverter *maya = new MayaToEggConverter;
|
||||||
|
reg->register_type(new LoaderFileTypePandatool(maya));
|
||||||
|
}
|
@ -131,14 +131,6 @@ run() {
|
|||||||
}
|
}
|
||||||
_data.set_coordinate_system(_coordinate_system);
|
_data.set_coordinate_system(_coordinate_system);
|
||||||
|
|
||||||
// Use the standard Maya units, if the user didn't specify
|
|
||||||
// otherwise. This always returns centimeters, which is the way all
|
|
||||||
// Maya files are stored internally (and is the units returned by
|
|
||||||
// all of the API functions called here).
|
|
||||||
if (_input_units == DU_invalid) {
|
|
||||||
_input_units = converter._maya->get_units();
|
|
||||||
}
|
|
||||||
|
|
||||||
converter.set_egg_data(&_data, false);
|
converter.set_egg_data(&_data, false);
|
||||||
apply_parameters(converter);
|
apply_parameters(converter);
|
||||||
|
|
||||||
@ -147,6 +139,14 @@ run() {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use the standard Maya units, if the user didn't specify
|
||||||
|
// otherwise. This always returns centimeters, which is the way all
|
||||||
|
// Maya files are stored internally (and is the units returned by
|
||||||
|
// all of the API functions called here).
|
||||||
|
if (_input_units == DU_invalid) {
|
||||||
|
_input_units = converter.get_input_units();
|
||||||
|
}
|
||||||
|
|
||||||
write_egg_file();
|
write_egg_file();
|
||||||
nout << "\n";
|
nout << "\n";
|
||||||
}
|
}
|
||||||
|
@ -31,23 +31,19 @@
|
|||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
#ifdef HAVE_MAYA
|
|
||||||
#include "config_mayaegg.h"
|
|
||||||
#include "mayaToEggConverter.h"
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "dconfig.h"
|
#include "dconfig.h"
|
||||||
#include "loaderFileTypeRegistry.h"
|
#include "loaderFileTypeRegistry.h"
|
||||||
#include "eggData.h"
|
#include "eggData.h"
|
||||||
|
|
||||||
ConfigureDef(config_ptloader);
|
ConfigureDef(config_ptloader);
|
||||||
|
NotifyCategoryDef(ptloader, "");
|
||||||
|
|
||||||
ConfigureFn(config_ptloader) {
|
ConfigureFn(config_ptloader) {
|
||||||
init_libptloader();
|
init_libptloader();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DistanceUnit ptloader_units = DU_invalid;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: init_libptloader
|
// Function: init_libptloader
|
||||||
// Description: Initializes the library. This must be called at
|
// Description: Initializes the library. This must be called at
|
||||||
@ -84,11 +80,12 @@ init_libptloader() {
|
|||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
string units = config_ptloader.GetString("ptloader-units", "feet");
|
||||||
#ifdef HAVE_MAYA
|
if (!units.empty()) {
|
||||||
init_libmayaegg();
|
ptloader_units = string_distance_unit(units);
|
||||||
MayaToEggConverter *maya = new MayaToEggConverter;
|
if (ptloader_units == DU_invalid) {
|
||||||
reg->register_type(new LoaderFileTypePandatool(maya));
|
ptloader_cat->warning()
|
||||||
#endif
|
<< "Invalid ptloader-units: " << units << "\n";
|
||||||
*/
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,12 @@
|
|||||||
#include "pandatoolbase.h"
|
#include "pandatoolbase.h"
|
||||||
|
|
||||||
#include "dconfig.h"
|
#include "dconfig.h"
|
||||||
|
#include "distanceUnit.h"
|
||||||
|
|
||||||
ConfigureDecl(config_ptloader, EXPCL_PTLOADER, EXPTP_PTLOADER);
|
ConfigureDecl(config_ptloader, EXPCL_PTLOADER, EXPTP_PTLOADER);
|
||||||
|
NotifyCategoryDecl(ptloader, EXPCL_PTLOADER, EXPTP_PTLOADER);
|
||||||
|
|
||||||
|
extern DistanceUnit ptloader_units;
|
||||||
|
|
||||||
extern EXPCL_PTLOADER void init_libptloader();
|
extern EXPCL_PTLOADER void init_libptloader();
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "loaderFileTypePandatool.h"
|
#include "loaderFileTypePandatool.h"
|
||||||
|
#include "config_ptloader.h"
|
||||||
#include "somethingToEggConverter.h"
|
#include "somethingToEggConverter.h"
|
||||||
#include "config_util.h"
|
#include "config_util.h"
|
||||||
#include "load_egg_file.h"
|
#include "load_egg_file.h"
|
||||||
@ -107,6 +107,18 @@ load_file(const Filename &path, bool) const {
|
|||||||
_converter->get_path_replace()->_path = file_path;
|
_converter->get_path_replace()->_path = file_path;
|
||||||
|
|
||||||
if (_converter->convert_file(path)) {
|
if (_converter->convert_file(path)) {
|
||||||
|
DistanceUnit input_units = _converter->get_input_units();
|
||||||
|
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.
|
||||||
|
ptloader_cat.info()
|
||||||
|
<< "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));
|
||||||
|
}
|
||||||
|
|
||||||
result = load_egg_data(egg_data);
|
result = load_egg_data(egg_data);
|
||||||
}
|
}
|
||||||
_converter->clear_egg_data();
|
_converter->clear_egg_data();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user