open_toontown_panda3d/pandatool/src/eggbase/eggToSomething.cxx

165 lines
6.3 KiB
C++

// Filename: eggToSomething.cxx
// Created by: drose (15Feb00)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001 - 2004, 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://etc.cmu.edu/panda3d/docs/license/ .
//
// To contact the maintainers of this program write to
// panda3d-general@lists.sourceforge.net .
//
////////////////////////////////////////////////////////////////////
#include "eggToSomething.h"
////////////////////////////////////////////////////////////////////
// Function: EggToSomething::Constructor
// Access: Public
// Description: The first parameter to the constructor should be the
// one-word name of the file format that is to be read,
// for instance "OpenFlight" or "Alias". It's just used
// in printing error messages and such.
////////////////////////////////////////////////////////////////////
EggToSomething::
EggToSomething(const string &format_name,
const string &preferred_extension,
bool allow_last_param, bool allow_stdout) :
EggConverter(format_name, preferred_extension, allow_last_param,
allow_stdout)
{
clear_runlines();
if (_allow_last_param) {
add_runline("[opts] input.egg output" + _preferred_extension);
}
add_runline("[opts] -o output" + _preferred_extension + " input.egg");
if (_allow_stdout) {
add_runline("[opts] input.egg >output" + _preferred_extension);
}
string o_description;
if (_allow_stdout) {
if (_allow_last_param) {
o_description =
"Specify the filename to which the resulting " + format_name +
" file will be written. "
"If this option is omitted, the last parameter name is taken to be the "
"name of the output file, or standard output is used if there are no "
"other parameters.";
} else {
o_description =
"Specify the filename to which the resulting " + format_name +
" file will be written. "
"If this option is omitted, the " + format_name +
" file is written to standard output.";
}
} else {
if (_allow_last_param) {
o_description =
"Specify the filename to which the resulting " + format_name +
" file will be written. "
"If this option is omitted, the last parameter name is taken to be the "
"name of the output file.";
} else {
o_description =
"Specify the filename to which the resulting " + format_name +
" file will be written.";
}
}
redescribe_option("o", o_description);
redescribe_option
("cs",
"Specify the coordinate system of the resulting " + _format_name +
" file. This may be "
"one of 'y-up', 'z-up', 'y-up-left', or 'z-up-left'. The default "
"is the same coordinate system as the input egg file. If this is "
"different from the input egg file, a conversion will be performed.");
_input_units = DU_invalid;
_output_units = DU_invalid;
}
////////////////////////////////////////////////////////////////////
// Function: EggToSomething::add_units_options
// Access: Public
// Description: Adds -ui and -uo as valid options for this program.
// If the user specifies -uo and -ui, or just -uo and
// the program specifies -ui by setting _input_units,
// the indicated units conversion will be automatically
// applied before writing out the egg file.
////////////////////////////////////////////////////////////////////
void EggToSomething::
add_units_options() {
add_option
("ui", "units", 40,
"Specify the units of the input egg file. If this is "
"specified, the vertices in the egg file will be scaled as "
"necessary to make the appropriate units conversion; otherwise, "
"the vertices will be left as they are.",
&EggToSomething::dispatch_units, NULL, &_input_units);
add_option
("uo", "units", 40,
"Specify the units of the resulting " + _format_name +
" file. Normally, the default units for the format are used.",
&EggToSomething::dispatch_units, NULL, &_output_units);
}
////////////////////////////////////////////////////////////////////
// Function: EggToSomething::apply_units_scale
// Access: Protected
// Description: Applies the scale indicated by the input and output
// units to the indicated egg file. This is normally
// done automatically when the file is read in.
////////////////////////////////////////////////////////////////////
void EggToSomething::
apply_units_scale(EggData *data) {
if (_output_units != DU_invalid && _input_units != DU_invalid &&
_input_units != _output_units) {
nout << "Converting from " << format_long_unit(_input_units)
<< " to " << format_long_unit(_output_units) << "\n";
double scale = convert_units(_input_units, _output_units);
data->transform(LMatrix4d::scale_mat(scale));
}
}
////////////////////////////////////////////////////////////////////
// Function: EggToSomething::pre_process_egg_file
// Access: Protected, Virtual
// Description: Performs any processing of the egg file that is
// appropriate after reading it in.
//
// Normally, you should not need to call this function
// directly; it is called automatically at startup.
////////////////////////////////////////////////////////////////////
void EggToSomething::
pre_process_egg_file() {
apply_units_scale(_data);
EggConverter::pre_process_egg_file();
}
////////////////////////////////////////////////////////////////////
// Function: EggToSomething::handle_args
// Access: Protected, Virtual
// Description: Does something with the additional arguments on the
// command line (after all the -options have been
// parsed). Returns true if the arguments are good,
// false otherwise.
////////////////////////////////////////////////////////////////////
bool EggToSomething::
handle_args(ProgramBase::Args &args) {
if (!check_last_arg(args, 1)) {
return false;
}
return EggConverter::handle_args(args);
}