From c6a3f28530be38ecba04be06e4e1c425f9c070d9 Mon Sep 17 00:00:00 2001 From: Josh Yelon Date: Wed, 6 Aug 2008 02:37:17 +0000 Subject: [PATCH] Some data was lost in change to BSD license: repaired. --- pandatool/src/maxegg/maxToEggConverter.h | 193 +++++++++++++++++++++++ 1 file changed, 193 insertions(+) diff --git a/pandatool/src/maxegg/maxToEggConverter.h b/pandatool/src/maxegg/maxToEggConverter.h index f5f30abb3a..d3a5569ec5 100755 --- a/pandatool/src/maxegg/maxToEggConverter.h +++ b/pandatool/src/maxegg/maxToEggConverter.h @@ -4,3 +4,196 @@ // //////////////////////////////////////////////////////////////////// // +// PANDA 3D SOFTWARE +// Copyright (c) Carnegie Mellon University. All rights reserved. +// +// All use of this software is subject to the terms of the revised BSD +// license. You should have received a copy of this license along +// with this source code in a file named "LICENSE." +// +//////////////////////////////////////////////////////////////////// + +#ifndef __maxToEggConverter__H +#define __maxToEggConverter__H + +#pragma conform(forScope, off) + +#include "pandatoolbase.h" + +/* 3ds Max Includes, with bonus(!) memory protection + */ + +#ifdef MAX5 +//Disable the "Too many actual parameters in istdplug.h" warning in Max5 +#pragma warning(push) +#pragma warning(disable: 4002) +#include "max_pre_include.h" +#endif +#include "Max.h" +#include "iparamb2.h" +#include "iparamm2.h" +#include "istdplug.h" +#include "iskin.h" +#include "maxResource.h" +#include "stdmat.h" +#include "phyexp.h" +#include "surf_api.h" +#ifdef MAX5 +#include "max_post_include.h" +#pragma warning(pop) +#endif + + +/* Panda Includes + */ +#include "eggCoordinateSystem.h" +#include "eggGroup.h" +#include "eggPolygon.h" +#include "eggTextureCollection.h" +#include "eggTexture.h" +#include "eggVertex.h" +#include "eggVertexPool.h" +#include "eggNurbsCurve.h" +#include "pandatoolbase.h" +#include "somethingToEgg.h" +#include "somethingToEggConverter.h" +#include "eggXfmSAnim.h" + +/* Local Includes + */ +#include "maxNodeTree.h" + +/* Error-Reporting Includes + */ +#include "maxLogger.h" +#define MTEC Logger::ST_MAP_ME_TO_APP_SPECIFIC_SYSTEM4 + +/* Helpful Defintions and Casts + */ +#define null 0 +#define PHYSIQUE_CLASSID Class_ID(PHYSIQUE_CLASS_ID_A, PHYSIQUE_CLASS_ID_B) + +/* External Helper Functions for UI + */ +// *** Figure out why this is causing link errors +//DWORD WINAPI ProgressBarFunction(LPVOID arg); + +//////////////////////////////////////////////////////////////////// +// Class : MaxToEggConverter +// Description : This class supervises the construction of an EggData +// structure from a Max model +//////////////////////////////////////////////////////////////////// +class MaxToEggConverter : public SomethingToEggConverter { + public: + MaxToEggConverter(const string &program_name = ""); + MaxToEggConverter(const MaxToEggConverter ©); + virtual ~MaxToEggConverter(); + + virtual SomethingToEggConverter *make_copy(); + + virtual string get_name() const; + virtual string get_extension() const; + + virtual bool convert_file(const Filename &filename); + bool convert_max(bool from_selection); + + //Sets the interface to 3dsMax. + void setMaxInterface(Interface *pInterface); + + void set_selection_list(ULONG *list, int len) { + _selection_list = list; _selection_len = len; } + void set_double_sided(bool flag) {double_sided = flag;} + + private: + double _current_frame; + ULONG *_selection_list; int _selection_len; + + bool convert_flip(double start_frame, double end_frame, + double frame_inc, double output_frame_rate); + + bool convert_char_model(); + bool convert_char_chan(double start_frame, double end_frame, + double frame_inc, double output_frame_rate); + bool convert_hierarchy(EggGroupNode *egg_root); + bool process_model_node(MaxNodeDesc *node_desc); + + void get_transform(INode *max_node, EggGroup *egg_group); + LMatrix4d get_object_transform(INode *max_node); + void get_joint_transform(INode *max_node, EggGroup *egg_group); + void get_joint_transform(INode *max_node, INode *parent_node, + EggGroup *egg_group); + + // *** Leaving out these functions til there use/support in Max is determined + /* + void make_nurbs_surface(const MDagPath &dag_path, + MFnNurbsSurface &surface, + EggGroup *group); + EggNurbsCurve *make_trim_curve(const MFnNurbsCurve &curve, + const string &nurbs_name, + EggGroupNode *egg_group, + int trim_curve_index); + */ + bool make_nurbs_curve(NURBSCVCurve *curve, const string &name, + TimeValue time, EggGroup *egg_group); + void make_polyset(INode *max_node, + Mesh *mesh, + EggGroup *egg_group, + Shader *default_shader = NULL); + /* + void make_locator(const MDagPath &dag_path, const MFnDagNode &dag_node, + EggGroup *egg_group); + */ + + //Gets the vertex normal for a given face and vertex. Go figure. + Point3 get_max_vertex_normal(Mesh *mesh, int faceNo, int vertNo); + + void get_vertex_weights(INode *max_node, EggVertexPool *vpool); + /* + void set_shader_attributes(EggPrimitive &primitive, + const MayaShader &shader); + */ + void set_material_attributes(EggPrimitive &primitive, INode *max_node); + + void set_material_attributes(EggPrimitive &primitive, Mtl *maxMaterial, Face *face); + + void apply_texture_properties(EggTexture &tex, + StdMat *maxMaterial); + /* + bool compare_texture_properties(EggTexture &tex, + const MayaShaderColorDef &color_def); + */ + + bool reparent_decals(EggGroupNode *egg_parent); + + string _program_name; + bool _from_selection; + + MaxNodeTree _tree; + + int _cur_tref; + bool double_sided; + + public: + //MayaShaders _shaders; + EggTextureCollection _textures; + Interface *maxInterface; + + bool _polygon_output; + double _polygon_tolerance; + + enum TransformType { + TT_invalid, + TT_all, + TT_model, + TT_dcs, + TT_none, + }; + TransformType _transform_type; + + static TransformType string_transform_type(const string &arg); + + Modifier* FindSkinModifier (INode* node, const Class_ID &type); +}; + + +#endif