Panda3D

xFileToEgg.cxx

00001 // Filename: xFileToEgg.cxx
00002 // Created by:  drose (21Jun01)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #include "xFileToEgg.h"
00016 #include "xFileToEggConverter.h"
00017 #include "config_xfile.h"
00018 #include "pystub.h"
00019 
00020 ////////////////////////////////////////////////////////////////////
00021 //     Function: XFileToEgg::Constructor
00022 //       Access: Public
00023 //  Description:
00024 ////////////////////////////////////////////////////////////////////
00025 XFileToEgg::
00026 XFileToEgg() :
00027   SomethingToEgg("DirectX", ".x")
00028 {
00029   add_path_replace_options();
00030   add_path_store_options();
00031   add_units_options();
00032   add_normals_options();
00033   add_transform_options();
00034 
00035   set_program_description
00036     ("This program converts DirectX retained-mode (.x) files to egg.  "
00037      "Polygon meshes, materials, and textures, as well as skeleton "
00038      "animation and skinning data, are supported.  All animations "
00039      "found in the source .x file are written together into the same "
00040      "egg file.");
00041 
00042   add_option
00043     ("a", "name", 0,
00044      "Specify the name of the animated character to generate.  This option "
00045      "forces the model to be converted as an animatable character, even "
00046      "if animation channels are not found in the file.  Without this "
00047      "option, the model is converted as a static model (which "
00048      "is usually more efficient to load within Panda), unless animation "
00049      "channels are present in the .x file.",
00050      &XFileToEgg::dispatch_string, &_make_char, &_char_name);
00051 
00052   add_option
00053     ("fr", "fps", 0,
00054      "Specify the frame rate of the resulting animation.  If this is "
00055      "omitted or 0, the frame rate is inferred from the file itself; but "
00056      "note that the file must contain evenly-spaced keyframes.",
00057      &XFileToEgg::dispatch_double, NULL, &_frame_rate);
00058 
00059   add_option
00060     ("anim", "", 0,
00061      "Generate animation data only (all geometry will be discarded).",
00062      &XFileToEgg::dispatch_none, &_keep_animation);
00063 
00064   add_option
00065     ("model", "", 0,
00066      "Generate model data only (all animation data will be discarded).",
00067      &XFileToEgg::dispatch_none, &_keep_model);
00068 
00069   redescribe_option
00070     ("ui",
00071      "Specify the units of the input " + _format_name + " file.");
00072 
00073   redescribe_option
00074     ("uo",
00075      "Specify the units of the resulting egg file.  If both this and -ui are "
00076      "specified, the vertices in the egg file will be scaled as "
00077      "necessary to make the appropriate units conversion; otherwise, "
00078      "the vertices will be left as they are.");
00079 
00080   redescribe_option
00081     ("cs",
00082      "Specify the coordinate system of the input " + _format_name +
00083      " file.  Normally, this is y-up-left.");
00084 
00085   _frame_rate = 0.0;
00086   _coordinate_system = CS_yup_left;
00087 }
00088 
00089 ////////////////////////////////////////////////////////////////////
00090 //     Function: XFileToEgg::run
00091 //       Access: Public
00092 //  Description:
00093 ////////////////////////////////////////////////////////////////////
00094 void XFileToEgg::
00095 run() {
00096   _data->set_coordinate_system(_coordinate_system);
00097 
00098   XFileToEggConverter converter;
00099   converter.set_egg_data(_data);
00100 
00101   converter._frame_rate = _frame_rate;
00102   converter._make_char = _make_char;
00103   converter._char_name = _char_name;
00104   converter._keep_model = _keep_model;
00105   converter._keep_animation = _keep_animation;
00106   
00107   // Copy in the path and animation parameters.
00108   apply_parameters(converter);
00109 
00110   if (!converter.convert_file(_input_filename)) {
00111     nout << "Unable to read " << _input_filename << "\n";
00112     exit(1);
00113   }
00114 
00115   write_egg_file();
00116   nout << "\n";
00117 }
00118 
00119 
00120 int main(int argc, char *argv[]) {
00121   // A call to pystub() to force libpystub.so to be linked in.
00122   pystub();
00123 
00124   init_libxfile();
00125   XFileToEgg prog;
00126   prog.parse_command_line(argc, argv);
00127   prog.run();
00128   return 0;
00129 }
 All Classes Functions Variables Enumerations