Panda3D
|
00001 // Filename: maxEggImport.cxx 00002 // Created by: jyelon (15Jul05) 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 // This is the wrapper code for the max importer plugin. 00016 // It includes: 00017 // 00018 // - user interface dialogs and popups 00019 // - plugin initialization/registration 00020 // 00021 // It does not include the actual code to traverse the EggData. 00022 // 00023 //////////////////////////////////////////////////////////////////// 00024 00025 // Include this before everything 00026 #include "pandatoolbase.h" 00027 00028 // MAX includes 00029 #include "maxEggLoader.h" 00030 #include "Max.h" 00031 #include "maxImportRes.h" 00032 #include "istdplug.h" 00033 00034 // panda includes. 00035 #include "notifyCategoryProxy.h" 00036 00037 #include <iostream> 00038 #include <sstream> 00039 00040 class MaxEggImporter : public SceneImport 00041 { 00042 public: 00043 // GUI-related methods 00044 MaxEggImporter(); 00045 ~MaxEggImporter(); 00046 int ExtCount(); // Number of extensions supported 00047 const TCHAR * Ext(int n); // Extension #n (i.e. "EGG") 00048 const TCHAR * LongDesc(); // Long ASCII description (i.e. "Egg Importer") 00049 const TCHAR * ShortDesc(); // Short ASCII description (i.e. "Egg") 00050 const TCHAR * AuthorName(); // ASCII Author name 00051 const TCHAR * CopyrightMessage();// ASCII Copyright message 00052 const TCHAR * OtherMessage1(); // Other message #1 00053 const TCHAR * OtherMessage2(); // Other message #2 00054 unsigned int Version(); // Version number * 100 (i.e. v3.01 = 301) 00055 void ShowAbout(HWND hWnd); // Show DLL's "About..." box 00056 int DoImport(const TCHAR *name,ImpInterface *ei,Interface *i, BOOL suppressPrompts); 00057 00058 public: 00059 // GUI-related fields 00060 static BOOL _merge; 00061 static BOOL _importmodel; 00062 static BOOL _importanim; 00063 }; 00064 00065 BOOL MaxEggImporter::_merge = TRUE; 00066 BOOL MaxEggImporter::_importmodel = TRUE; 00067 BOOL MaxEggImporter::_importanim = FALSE; 00068 00069 MaxEggImporter::MaxEggImporter() 00070 { 00071 } 00072 00073 MaxEggImporter::~MaxEggImporter() 00074 { 00075 } 00076 00077 int MaxEggImporter::ExtCount() 00078 { 00079 // Number of different extensions handled by this importer. 00080 return 1; 00081 } 00082 00083 const TCHAR * MaxEggImporter::Ext(int n) 00084 { 00085 // Fetch the extensions handled by this importer. 00086 switch(n) { 00087 case 0: return _T("egg"); 00088 default: return _T(""); 00089 } 00090 } 00091 00092 const TCHAR * MaxEggImporter::LongDesc() 00093 { 00094 return _T("Panda3D Egg Importer"); 00095 } 00096 00097 const TCHAR * MaxEggImporter::ShortDesc() 00098 { 00099 return _T("Panda3D Egg"); 00100 } 00101 00102 const TCHAR * MaxEggImporter::AuthorName() 00103 { 00104 return _T("Joshua Yelon"); 00105 } 00106 00107 const TCHAR * MaxEggImporter::CopyrightMessage() 00108 { 00109 return _T("Copyight (c) 2005 Josh Yelon"); 00110 } 00111 00112 const TCHAR * MaxEggImporter::OtherMessage1() 00113 { 00114 return _T(""); 00115 } 00116 00117 const TCHAR * MaxEggImporter::OtherMessage2() 00118 { 00119 return _T(""); 00120 } 00121 00122 unsigned int MaxEggImporter::Version() 00123 { 00124 return 100; 00125 } 00126 00127 static INT_PTR CALLBACK AboutBoxDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 00128 { 00129 switch (msg) { 00130 case WM_INITDIALOG: 00131 CenterWindow(hWnd, GetParent(hWnd)); 00132 break; 00133 case WM_COMMAND: 00134 switch (LOWORD(wParam)) { 00135 case IDOK: 00136 EndDialog(hWnd, 1); 00137 break; 00138 } 00139 break; 00140 default: 00141 return FALSE; 00142 } 00143 return TRUE; 00144 } 00145 00146 void MaxEggImporter::ShowAbout(HWND hWnd) 00147 { 00148 DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), 00149 hWnd, AboutBoxDlgProc, 0); 00150 } 00151 00152 00153 static INT_PTR CALLBACK ImportDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 00154 { 00155 MaxEggImporter *imp = (MaxEggImporter*) GetWindowLongPtr(hWnd, GWLP_USERDATA); 00156 switch (msg) { 00157 case WM_INITDIALOG: 00158 imp = (MaxEggImporter*)lParam; 00159 SetWindowLongPtr(hWnd, GWLP_USERDATA, lParam); 00160 CenterWindow(hWnd, GetParent(hWnd)); 00161 CheckDlgButton(hWnd, IDC_MERGE, imp->_merge); 00162 CheckDlgButton(hWnd, IDC_IMPORTMODEL, imp->_importmodel); 00163 CheckDlgButton(hWnd, IDC_IMPORTANIM, imp->_importanim); 00164 break; 00165 case WM_COMMAND: 00166 switch (LOWORD(wParam)) { 00167 case IDOK: 00168 imp->_merge = IsDlgButtonChecked(hWnd, IDC_MERGE); 00169 imp->_importmodel = IsDlgButtonChecked(hWnd, IDC_IMPORTMODEL); 00170 imp->_importanim = IsDlgButtonChecked(hWnd, IDC_IMPORTANIM); 00171 EndDialog(hWnd, 1); 00172 break; 00173 case IDCANCEL: 00174 EndDialog(hWnd, 0); 00175 break; 00176 } 00177 break; 00178 default: 00179 return FALSE; 00180 } 00181 return TRUE; 00182 } 00183 00184 int MaxEggImporter::DoImport(const TCHAR *name,ImpInterface *ii,Interface *i, BOOL suppressPrompts) 00185 { 00186 // Prompt the user with our dialogbox. 00187 if (!DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_IMPORT_DLG), 00188 i->GetMAXHWnd(), ImportDlgProc, (LPARAM)this)) { 00189 return 1; 00190 } 00191 00192 std::ostringstream log; 00193 Notify::ptr()->set_ostream_ptr(&log, false); 00194 bool ok = MaxLoadEggFile(name, _merge ? true:false, _importmodel ? true:false, _importanim ? true:false); 00195 string txt = log.str(); 00196 if (txt != "") MessageBox(NULL, txt.c_str(), "Panda3D Importer", MB_OK); 00197 else { 00198 if (!ok) MessageBox(NULL, "Import Failed, unknown reason\n", "Panda3D Importer", MB_OK); 00199 } 00200 Notify::ptr()->set_ostream_ptr(NULL, false); 00201 return 1; 00202 } 00203 00204 //////////////////////////////////////////////////////////////////////////////////////////////////// 00205 // 00206 // Plugin Initialization 00207 // 00208 // The following code enables Max to load this DLL, get a list 00209 // of the classes defined in this DLL, and provides a means for 00210 // Max to create instances of those classes. 00211 // 00212 //////////////////////////////////////////////////////////////////////////////////////////////////// 00213 00214 HINSTANCE hInstance; 00215 00216 BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) 00217 { 00218 static int controlsInit = FALSE; 00219 hInstance = hinstDLL; 00220 00221 if (!controlsInit) { 00222 controlsInit = TRUE; 00223 InitCustomControls(hInstance); 00224 InitCommonControls(); 00225 } 00226 00227 return (TRUE); 00228 } 00229 00230 #define PANDAEGGIMP_CLASS_ID1 0x377193ab 00231 #define PANDAEGGIMP_CLASS_ID2 0x897afe12 00232 00233 class MaxEggImporterClassDesc: public ClassDesc 00234 { 00235 public: 00236 int IsPublic() {return 1;} 00237 void *Create(BOOL loading = FALSE) {return new MaxEggImporter;} 00238 const TCHAR *ClassName() {return _T("MaxEggImporter");} 00239 SClass_ID SuperClassID() {return SCENE_IMPORT_CLASS_ID;} 00240 Class_ID ClassID() {return Class_ID(PANDAEGGIMP_CLASS_ID1,PANDAEGGIMP_CLASS_ID2);} 00241 const TCHAR *Category() {return _T("Chrutilities");} 00242 }; 00243 00244 static MaxEggImporterClassDesc MaxEggImporterDesc; 00245 00246 __declspec( dllexport ) const TCHAR* LibDescription() 00247 { 00248 return _T("Panda3D Egg Importer"); 00249 } 00250 00251 __declspec( dllexport ) int LibNumberClasses() 00252 { 00253 return 1; 00254 } 00255 00256 __declspec( dllexport ) ClassDesc* LibClassDesc(int i) 00257 { 00258 switch(i) { 00259 case 0: return &MaxEggImporterDesc; 00260 default: return 0; 00261 } 00262 } 00263 00264 __declspec( dllexport ) ULONG LibVersion() 00265 { 00266 return VERSION_3DSMAX; 00267 } 00268