126 lines
4.0 KiB
C++
Executable File
126 lines
4.0 KiB
C++
Executable File
/*
|
|
MaxToEgg.cpp
|
|
Created by Ken Strickland 02/24/03
|
|
Modified and maintained by Corey Revilla, (05/22/03)-(Present)
|
|
Carnegie Mellon University, Entetainment Technology Center
|
|
*/
|
|
|
|
//Our headers, which in turn includes some Max headers.
|
|
#include "MaxToEgg.h"
|
|
|
|
//Member Function Definitions
|
|
/* ~MaxToEgg() - Uninteresting destructor.
|
|
*/
|
|
MaxToEgg::~MaxToEgg()
|
|
{
|
|
}
|
|
|
|
/* MaxToEgg() - Constructs a MaxToEgg "application." It sets the types of
|
|
options this converter can take and sets up a description of the program.
|
|
*/
|
|
MaxToEgg::MaxToEgg() : SomethingToEgg("3D Studio Max",".max")
|
|
{
|
|
add_path_replace_options();
|
|
add_path_store_options();
|
|
add_animation_options();
|
|
add_units_options();
|
|
add_normals_options();
|
|
add_transform_options();
|
|
|
|
set_program_description("This program converts 3D Studio Max model files to egg.");
|
|
/*add_option("p", "", 0,
|
|
"Generate polygon output only. Convert scene to triangle mesh "
|
|
"before converting.", &MaxToEgg::dispatch_none, &alertOnBegin);*/
|
|
add_option("bface", "", 0,
|
|
"Export all polygons as double-sided ",
|
|
&MaxToEgg::dispatch_none, &doubleSided);
|
|
//Fill in the member variables.
|
|
pMaxInterface = null;
|
|
successfulOutput = false;
|
|
confirmExport = true;
|
|
doubleSided = false;
|
|
}
|
|
|
|
/* IsSuccessful() - Indicates if conversion was successful.
|
|
*/
|
|
bool MaxToEgg::IsSuccessful()
|
|
{
|
|
return successfulOutput;
|
|
}
|
|
|
|
char *MaxToEgg::MyClassName()
|
|
{
|
|
return "MaxToEgg";
|
|
}
|
|
|
|
/* Run() - Runs the conversion. Creates a MaxToEggConverter, populates it
|
|
with the scene graph, and then writes out the egg file.
|
|
*/
|
|
void MaxToEgg::Run(ULONG *selection_list, int len)
|
|
{
|
|
MaxToEggConverter converter;
|
|
|
|
Logger::FunctionEntry( "MaxToEgg::Run" );
|
|
// Now, we fill out the necessary fields of the converter, which does all
|
|
// the necessary work.
|
|
Logger::Log( MTE, Logger::SAT_DEBUG_SPAM_LEVEL, "Setting Max Interface." );
|
|
converter.setMaxInterface( pMaxInterface );
|
|
Logger::Log( MTE, Logger::SAT_DEBUG_SPAM_LEVEL,
|
|
"Setting converter's egg data." );
|
|
converter.set_egg_data( _data );
|
|
// applies the parameters from the command line options
|
|
apply_parameters(converter);
|
|
converter.set_double_sided(doubleSided);
|
|
converter.set_selection_list(selection_list, len);
|
|
|
|
//Now, do the actual file conversion.
|
|
if (confirmExport && converter.convert_file(_input_filename)) {
|
|
successfulOutput=true;
|
|
write_egg_file();
|
|
Logger::Log( MTE, Logger::SAT_DEBUG_SPAM_LEVEL, "Egg file written!" );
|
|
}
|
|
|
|
Logger::FunctionExit();
|
|
}
|
|
|
|
|
|
/* SetMaxInterface(Interface *) - This is how we know how to traverse the Max
|
|
scene graph. For this to be a standalone application, we'd want to be able
|
|
to build one of these interfaces for the input file.
|
|
*/
|
|
void MaxToEgg::SetMaxInterface(Interface *pInterface)
|
|
{
|
|
pMaxInterface = pInterface;
|
|
}
|
|
|
|
bool MaxToEgg::handle_args(Args &args) {
|
|
char msg[3072];
|
|
|
|
//If "auto overwrite" was not checked, ask if the user wishes to overwrite the file
|
|
if (_allow_last_param && !_got_output_filename && args.size() > 1) {
|
|
_got_output_filename = true;
|
|
_output_filename = Filename::from_os_specific(args.back());
|
|
args.pop_back();
|
|
|
|
if (!verify_output_file_safe()) {
|
|
sprintf(msg, "Overwrite file \"%s\"?", _output_filename.to_os_specific().c_str());
|
|
confirmExport =
|
|
( MessageBox(pMaxInterface->GetMAXHWnd(), msg, "Panda3D Exporter", MB_YESNO | MB_ICONQUESTION)
|
|
== IDYES );
|
|
}
|
|
}
|
|
|
|
//Attempt to catch if the output file is read-only
|
|
if (confirmExport) {
|
|
_output_filename.make_dir();
|
|
if (access(Filename(_output_filename.get_dirname()).to_os_specific().c_str(), 2) ||
|
|
(access(_output_filename.to_os_specific().c_str(), 2) && errno != ENOENT)) {
|
|
sprintf(msg, "Error attempting to open \"%s\"\n\nDestination file is in use or read-only", _output_filename.to_os_specific().c_str());
|
|
MessageBox(pMaxInterface->GetMAXHWnd(), msg, "Panda3D Exporter", MB_OK | MB_ICONERROR);
|
|
confirmExport = false;
|
|
}
|
|
}
|
|
|
|
return SomethingToEgg::handle_args(args);
|
|
}
|