mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
work toward a unicode-compatible max converter
This commit is contained in:
parent
146f56e01e
commit
e1ff689adc
@ -468,29 +468,29 @@ void MaxEggPlugin::SaveCheckState() {
|
||||
void MaxEggPlugin::UpdateUI() {
|
||||
HWND lv = GetDlgItem(hMaxEggParams, IDC_LIST_EGGS);
|
||||
LV_COLUMN pCol;
|
||||
|
||||
|
||||
if (ListView_GetColumnWidth(lv, 1) <= 0 || ListView_GetColumnWidth(lv, 1) > 10000) {
|
||||
//Columns have not been setup, so initialize the control
|
||||
// Columns have not been setup, so initialize the control
|
||||
ListView_SetExtendedListViewStyleEx(lv, LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT,
|
||||
LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
|
||||
|
||||
|
||||
pCol.fmt = LVCFMT_LEFT;
|
||||
pCol.cx = 96;
|
||||
pCol.pszText = "Filename";
|
||||
pCol.pszText = _T("Filename");
|
||||
pCol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
||||
pCol.iSubItem = 0;
|
||||
ListView_InsertColumn(lv, 0, &pCol);
|
||||
|
||||
|
||||
pCol.cx = 44;
|
||||
pCol.pszText = "Type";
|
||||
pCol.pszText = _T("Type");
|
||||
ListView_InsertColumn(lv, 1, &pCol);
|
||||
}
|
||||
|
||||
//Add the eggs to the list
|
||||
|
||||
// Add the eggs to the list
|
||||
ListView_DeleteAllItems(lv);
|
||||
LV_ITEM Item;
|
||||
Item.mask = LVIF_TEXT;
|
||||
|
||||
|
||||
for (int i = 0; i < numEggs; i++) {
|
||||
Item.iItem = i;
|
||||
Item.iSubItem = 0;
|
||||
@ -498,16 +498,16 @@ void MaxEggPlugin::UpdateUI() {
|
||||
ListView_InsertItem(lv, &Item);
|
||||
Item.iSubItem = 1;
|
||||
switch(eggList[i]->_anim_type) {
|
||||
case MaxEggOptions::AT_chan: Item.pszText = "Animation"; break;
|
||||
case MaxEggOptions::AT_both: Item.pszText = "Both"; break;
|
||||
case MaxEggOptions::AT_pose: Item.pszText = "Static"; break;
|
||||
case MaxEggOptions::AT_model: Item.pszText = "Model"; break;
|
||||
default: Item.pszText = "Model"; break;
|
||||
case MaxEggOptions::AT_chan: Item.pszText = _T("Animation"); break;
|
||||
case MaxEggOptions::AT_both: Item.pszText = _T("Both"); break;
|
||||
case MaxEggOptions::AT_pose: Item.pszText = _T("Static"); break;
|
||||
case MaxEggOptions::AT_model: Item.pszText = _T("Model"); break;
|
||||
default: Item.pszText = _T("Model"); break;
|
||||
}
|
||||
ListView_SetItem(lv, &Item);
|
||||
ListView_SetCheckState(lv, i, eggList[i]->_checked);
|
||||
}
|
||||
|
||||
|
||||
// Set the "Overwrite Existing Files" and "Pview" checkboxes
|
||||
CheckDlgButton(hMaxEggParams, IDC_OVERWRITE_CHECK,
|
||||
autoOverwrite ? BST_CHECKED : BST_UNCHECKED);
|
||||
@ -519,48 +519,48 @@ void MaxEggPlugin::UpdateUI() {
|
||||
|
||||
void MaxEggPlugin::DoExport() {
|
||||
int good = 0, bad = 0;
|
||||
|
||||
std::stringstream status;
|
||||
|
||||
|
||||
std::basic_stringstream<TCHAR> status;
|
||||
|
||||
SaveCheckState();
|
||||
|
||||
|
||||
for (int i = 0; i < numEggs; i++) {
|
||||
if (eggList[i]->_checked) {
|
||||
// If "auto overwrite" was not checked and the file exists,
|
||||
// ask if the user wishes to overwrite the file
|
||||
bool do_write = true;
|
||||
if (!autoOverwrite && Filename::from_os_specific(eggList[i]->_file_name).exists()) {
|
||||
char msg[1024];
|
||||
sprintf(msg, "Overwrite file \"%s.egg\"?", eggList[i]->_short_name);
|
||||
do_write = (MessageBox(hMaxEggParams, msg, "Panda3D Exporter", MB_YESNO | MB_ICONQUESTION) == IDYES);
|
||||
TCHAR msg[1024];
|
||||
_stprintf(msg, "Overwrite file \"%s.egg\"?", eggList[i]->_short_name);
|
||||
do_write = (MessageBox(hMaxEggParams, msg, _T("Panda3D Exporter"), MB_YESNO | MB_ICONQUESTION) == IDYES);
|
||||
}
|
||||
if (do_write) {
|
||||
MaxToEggConverter converter;
|
||||
if (converter.convert((MaxEggOptions*)eggList[i])) {
|
||||
good += 1;
|
||||
status << "Successfully created " << eggList[i]->_short_name << ".egg\n";
|
||||
status << _T("Successfully created ") << eggList[i]->_short_name << _T(".egg\n");
|
||||
} else {
|
||||
bad += 1;
|
||||
status << "Could not export " << eggList[i]->_short_name << ".egg\n";
|
||||
status << _T("Could not export ") << eggList[i]->_short_name << _T(".egg\n");
|
||||
}
|
||||
} else {
|
||||
bad += 1;
|
||||
status << "Skipped file " << eggList[i]->_short_name << ".egg\n";
|
||||
status << _T("Skipped file ") << eggList[i]->_short_name << _T(".egg\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UINT mask = MB_OK;
|
||||
|
||||
|
||||
if (good == 0 && bad == 0) {
|
||||
mask |= MB_ICONEXCLAMATION;
|
||||
MessageBox(hMaxEggParams, "Nothing to export!", "Panda3D Export results", mask);
|
||||
MessageBox(hMaxEggParams, _T("Nothing to export!"), _T("Panda3D Export results"), mask);
|
||||
} else {
|
||||
if (bad > 0) mask |= MB_ICONEXCLAMATION;
|
||||
else mask |= MB_ICONINFORMATION;
|
||||
MessageBox(hMaxEggParams, status.str().c_str(), "Panda3D Export results", mask);
|
||||
else mask |= MB_ICONINFORMATION;
|
||||
MessageBox(hMaxEggParams, status.str().c_str(), _T("Panda3D Export results"), mask);
|
||||
}
|
||||
|
||||
|
||||
int pviewed = 0;
|
||||
if (pview && good > 0) {
|
||||
for (i = 0; i < numEggs; i++) {
|
||||
@ -568,18 +568,18 @@ void MaxEggPlugin::DoExport() {
|
||||
if (eggList[i]->_anim_type != MaxEggOptions::AT_chan) {
|
||||
PROCESS_INFORMATION pi;
|
||||
STARTUPINFO si;
|
||||
|
||||
memset(&si,0,sizeof(si));
|
||||
si.cb= sizeof(si);
|
||||
|
||||
char cmdLine[2048];
|
||||
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.cb = sizeof(si);
|
||||
|
||||
TCHAR cmdLine[2048];
|
||||
// If we have just one model and animation file, pview them both
|
||||
if (numEggs == 2 && eggList[i]->_anim_type == MaxEggOptions::AT_model &&
|
||||
eggList[1-i]->_checked && eggList[1-i]->_successful &&
|
||||
eggList[1-i]->_anim_type == MaxEggOptions::AT_chan) {
|
||||
sprintf(cmdLine, "pview \"%s\" \"%s\"", eggList[i]->_file_name, eggList[1-i]->_file_name);
|
||||
_stprintf(cmdLine, _T("pview \"%s\" \"%s\""), eggList[i]->_file_name, eggList[1-i]->_file_name);
|
||||
} else {
|
||||
sprintf(cmdLine, "pview \"%s\"", eggList[i]->_file_name);
|
||||
_stprintf(cmdLine, _T("pview \"%s\""), eggList[i]->_file_name);
|
||||
}
|
||||
CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, CREATE_NEW_CONSOLE,
|
||||
NULL, NULL, &si, &pi);
|
||||
@ -595,7 +595,7 @@ void MaxEggPlugin::BuildMesh()
|
||||
{
|
||||
int i;
|
||||
if(meshBuilt) return;
|
||||
|
||||
|
||||
mesh.setNumVerts(252);
|
||||
mesh.setNumFaces(84);
|
||||
mesh.setSmoothFlags(0);
|
||||
|
@ -15,8 +15,8 @@
|
||||
//Disable the forcing int to true or false performance warning
|
||||
#pragma warning(disable: 4800)
|
||||
|
||||
void SetICustEdit(HWND wnd, int nIDDlgItem, char *text)
|
||||
{
|
||||
void SetICustEdit(HWND wnd, int nIDDlgItem, const TCHAR *text)
|
||||
{
|
||||
ICustEdit *edit = GetICustEdit(GetDlgItem(wnd, nIDDlgItem));
|
||||
edit->SetText(text);
|
||||
ReleaseICustEdit(edit);
|
||||
@ -24,18 +24,18 @@ void SetICustEdit(HWND wnd, int nIDDlgItem, char *text)
|
||||
|
||||
void SetICustEdit(HWND wnd, int nIDDlgItem, int n)
|
||||
{
|
||||
char text[80];
|
||||
sprintf(text, "%d", n);
|
||||
TCHAR text[80];
|
||||
_stprintf(text, _T("%d"), n);
|
||||
ICustEdit *edit = GetICustEdit(GetDlgItem(wnd, nIDDlgItem));
|
||||
edit->SetText(text);
|
||||
ReleaseICustEdit(edit);
|
||||
}
|
||||
|
||||
char *GetICustEditT(HWND wnd)
|
||||
TCHAR *GetICustEditT(HWND wnd)
|
||||
{
|
||||
static char buffer[2084];
|
||||
static TCHAR buffer[2084];
|
||||
ICustEdit *edit = GetICustEdit(wnd);
|
||||
edit->GetText(buffer,2084);
|
||||
edit->GetText(buffer, 2084);
|
||||
ReleaseICustEdit(edit);
|
||||
return buffer;
|
||||
}
|
||||
@ -72,24 +72,24 @@ void ChunkSave(ISave *isave, int chunkid, bool value)
|
||||
isave->EndChunk();
|
||||
}
|
||||
|
||||
void ChunkSave(ISave *isave, int chunkid, char *value)
|
||||
void ChunkSave(ISave *isave, int chunkid, TCHAR *value)
|
||||
{
|
||||
ULONG nb;
|
||||
isave->BeginChunk(chunkid);
|
||||
int bytes = strlen(value) + 1;
|
||||
isave->Write(&bytes, sizeof(int), &nb);
|
||||
isave->Write(value, bytes, &nb);
|
||||
int length = _tcslen(value) + 1;
|
||||
isave->Write(&length, sizeof(int), &nb);
|
||||
isave->Write(value, length * sizeof(TCHAR), &nb);
|
||||
isave->EndChunk();
|
||||
}
|
||||
|
||||
char *ChunkLoadString(ILoad *iload, char *buffer, int maxBytes)
|
||||
TCHAR *ChunkLoadString(ILoad *iload, TCHAR *buffer, int maxLength)
|
||||
{
|
||||
ULONG nb;
|
||||
int bytes;
|
||||
int length;
|
||||
IOResult res;
|
||||
res = iload->Read(&bytes, sizeof(int), &nb);
|
||||
assert(res == IO_OK && bytes <= maxBytes);
|
||||
res = iload->Read(buffer, bytes, &nb);
|
||||
res = iload->Read(&length, sizeof(int), &nb);
|
||||
assert(res == IO_OK && length <= maxLength);
|
||||
res = iload->Read(buffer, length * sizeof(TCHAR), &nb);
|
||||
assert(res == IO_OK);
|
||||
return buffer;
|
||||
}
|
||||
@ -128,7 +128,7 @@ void showAnimControls(HWND hWnd, BOOL val) {
|
||||
ShowWindow(GetDlgItem(hWnd, IDC_EF), val);
|
||||
ShowWindow(GetDlgItem(hWnd, IDC_SF_LABEL), val);
|
||||
SetWindowText(GetDlgItem(hWnd, IDC_EXP_SEL_FRAMES),
|
||||
val ? "Use Range:" : "Use Frame:");
|
||||
val ? _T("Use Range:") : _T("Use Frame:"));
|
||||
}
|
||||
|
||||
void enableAnimControls(HWND hWnd, BOOL val) {
|
||||
@ -262,7 +262,7 @@ MaxEggOptions::MaxEggOptions() {
|
||||
|
||||
INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
|
||||
{
|
||||
char tempFilename[2048];
|
||||
TCHAR tempFilename[2048];
|
||||
//We pass in our plugin through the lParam variable. Let's convert it back.
|
||||
MaxOptionsDialog *imp = (MaxOptionsDialog*)GetWindowLongPtr(hWnd,GWLP_USERDATA);
|
||||
if ( !imp && message != WM_INITDIALOG ) return FALSE;
|
||||
@ -286,7 +286,7 @@ INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message, WPARAM wParam, L
|
||||
case IDC_MODEL:
|
||||
if (HIWORD(wParam) == BN_CLICKED) {
|
||||
SetWindowText(GetDlgItem(hWnd, IDC_EXPORT_SELECTED),
|
||||
"Export Meshes:");
|
||||
_T("Export Meshes:"));
|
||||
enableAnimRadios(hWnd, ANIM_RAD_NONE);
|
||||
showAnimControls(hWnd, TRUE);
|
||||
enableAnimControls(hWnd, FALSE);
|
||||
@ -300,7 +300,7 @@ INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message, WPARAM wParam, L
|
||||
case IDC_ANIMATION:
|
||||
if (HIWORD(wParam) == BN_CLICKED) {
|
||||
SetWindowText(GetDlgItem(hWnd, IDC_EXPORT_SELECTED),
|
||||
"Export Bones:");
|
||||
_T("Export Bones:"));
|
||||
enableAnimRadios(hWnd, ANIM_RAD_ALL);
|
||||
showAnimControls(hWnd, TRUE);
|
||||
enableAnimControls(hWnd, IsDlgButtonChecked(hWnd, IDC_EXP_SEL_FRAMES));
|
||||
@ -314,7 +314,7 @@ INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message, WPARAM wParam, L
|
||||
case IDC_BOTH:
|
||||
if (HIWORD(wParam) == BN_CLICKED) {
|
||||
SetWindowText(GetDlgItem(hWnd, IDC_EXPORT_SELECTED),
|
||||
"Export Models:");
|
||||
_T("Export Models:"));
|
||||
enableAnimRadios(hWnd, ANIM_RAD_ALL);
|
||||
showAnimControls(hWnd, TRUE);
|
||||
enableAnimControls(hWnd, IsDlgButtonChecked(hWnd, IDC_EXP_SEL_FRAMES));
|
||||
@ -328,7 +328,7 @@ INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message, WPARAM wParam, L
|
||||
case IDC_POSE:
|
||||
if (HIWORD(wParam) == BN_CLICKED) {
|
||||
SetWindowText(GetDlgItem(hWnd, IDC_EXPORT_SELECTED),
|
||||
"Export Meshes:");
|
||||
_T("Export Meshes:"));
|
||||
enableAnimRadios(hWnd, ANIM_RAD_EXPSEL);
|
||||
showAnimControls(hWnd, FALSE);
|
||||
enableAnimControls(hWnd, TRUE);
|
||||
@ -415,17 +415,17 @@ INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message, WPARAM wParam, L
|
||||
return TRUE; break;
|
||||
case IDC_BROWSE:
|
||||
OPENFILENAME ofn;
|
||||
strcpy(tempFilename, GetICustEditT(GetDlgItem(hWnd, IDC_FILENAME)));
|
||||
|
||||
_tcscpy(tempFilename, GetICustEditT(GetDlgItem(hWnd, IDC_FILENAME)));
|
||||
|
||||
memset(&ofn, 0, sizeof(ofn));
|
||||
ofn.nMaxFile = 2047;
|
||||
ofn.lpstrFile = tempFilename;
|
||||
ofn.lStructSize = sizeof(ofn);
|
||||
ofn.hwndOwner = hWnd;
|
||||
ofn.Flags = OFN_HIDEREADONLY | OFN_NOREADONLYRETURN | OFN_PATHMUSTEXIST;
|
||||
ofn.lpstrDefExt = "egg";
|
||||
ofn.lpstrFilter = "Panda3D Egg Files (*.egg)\0*.egg\0All Files (*.*)\0*.*\0";
|
||||
|
||||
ofn.lpstrDefExt = _T("egg");
|
||||
ofn.lpstrFilter = _T("Panda3D Egg Files (*.egg)\0*.egg\0All Files (*.*)\0*.*\0");
|
||||
|
||||
SetFocus(GetDlgItem(hWnd, IDC_FILENAME));
|
||||
if (GetSaveFileName(&ofn))
|
||||
SetICustEdit(hWnd, IDC_FILENAME, ofn.lpstrFile);
|
||||
@ -437,9 +437,9 @@ INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message, WPARAM wParam, L
|
||||
return TRUE; break;
|
||||
case IDC_CHECK1:
|
||||
if (IsDlgButtonChecked(hWnd, IDC_CHECK1))
|
||||
if (MessageBox(hWnd, "Warning: Exporting double-sided polygons can severely hurt "
|
||||
"performance in Panda3D.\n\nAre you sure you want to export them?",
|
||||
"Panda3D Exporter", MB_YESNO | MB_ICONQUESTION) != IDYES)
|
||||
if (MessageBox(hWnd, _T("Warning: Exporting double-sided polygons can severely hurt ")
|
||||
_T("performance in Panda3D.\n\nAre you sure you want to export them?"),
|
||||
_T("Panda3D Exporter"), MB_YESNO | MB_ICONQUESTION) != IDYES)
|
||||
CheckDlgButton(hWnd, IDC_CHECK1, BST_UNCHECKED);
|
||||
return TRUE; break;
|
||||
|
||||
@ -533,7 +533,7 @@ bool MaxOptionsDialog::UpdateFromUI(HWND hWnd) {
|
||||
BOOL valid;
|
||||
Anim_Type newAnimType;
|
||||
int newSF = INT_MIN, newEF = INT_MIN;
|
||||
char msg[1024];
|
||||
TCHAR msg[1024];
|
||||
|
||||
if (IsDlgButtonChecked(hWnd, IDC_MODEL)) newAnimType = MaxEggOptions::AT_model;
|
||||
else if (IsDlgButtonChecked(hWnd, IDC_ANIMATION)) newAnimType = MaxEggOptions::AT_chan;
|
||||
@ -543,56 +543,58 @@ bool MaxOptionsDialog::UpdateFromUI(HWND hWnd) {
|
||||
if (newAnimType != MaxEggOptions::AT_model && IsDlgButtonChecked(hWnd, IDC_EXP_SEL_FRAMES)) {
|
||||
newSF = GetICustEditI(GetDlgItem(hWnd, IDC_SF), &valid);
|
||||
if (!valid) {
|
||||
MessageBox(hWnd, "Start Frame must be an integer", "Invalid Value", MB_OK | MB_ICONEXCLAMATION);
|
||||
MessageBox(hWnd, _T("Start Frame must be an integer"), _T("Invalid Value"), MB_OK | MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
if (newSF < _min_frame) {
|
||||
sprintf(msg, "Start Frame must be at least %d", _min_frame);
|
||||
MessageBox(hWnd, msg, "Invalid Value", MB_OK | MB_ICONEXCLAMATION);
|
||||
_stprintf(msg, _T("Start Frame must be at least %d"), _min_frame);
|
||||
MessageBox(hWnd, msg, _T("Invalid Value"), MB_OK | MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
if (newSF > _max_frame) {
|
||||
sprintf(msg, "Start Frame must be at most %d", _max_frame);
|
||||
MessageBox(hWnd, msg, "Invalid Value", MB_OK | MB_ICONEXCLAMATION);
|
||||
_stprintf(msg, _T("Start Frame must be at most %d"), _max_frame);
|
||||
MessageBox(hWnd, msg, _T("Invalid Value"), MB_OK | MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
if (newAnimType != MaxEggOptions::AT_pose) {
|
||||
newEF = GetICustEditI(GetDlgItem(hWnd, IDC_EF), &valid);
|
||||
if (!valid) {
|
||||
MessageBox(hWnd, "End Frame must be an integer", "Invalid Value", MB_OK | MB_ICONEXCLAMATION);
|
||||
MessageBox(hWnd, _T("End Frame must be an integer"), _T("Invalid Value"), MB_OK | MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
if (newEF > _max_frame) {
|
||||
sprintf(msg, "End Frame must be at most %d", _max_frame);
|
||||
MessageBox(hWnd, msg, "Invalid Value", MB_OK | MB_ICONEXCLAMATION);
|
||||
_stprintf(msg, _T("End Frame must be at most %d"), _max_frame);
|
||||
MessageBox(hWnd, msg, _T("Invalid Value"), MB_OK | MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
if (newEF < newSF) {
|
||||
MessageBox(hWnd, "End Frame must be greater than the start frame", "Invalid Value", MB_OK | MB_ICONEXCLAMATION);
|
||||
MessageBox(hWnd, _T("End Frame must be greater than the start frame"), _T("Invalid Value"), MB_OK | MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char *temp = GetICustEditT(GetDlgItem(hWnd, IDC_FILENAME));
|
||||
if (!strlen(temp)) {
|
||||
MessageBox(hWnd, "The filename cannot be empty", "Invalid Value", MB_OK | MB_ICONEXCLAMATION);
|
||||
TCHAR *temp = GetICustEditT(GetDlgItem(hWnd, IDC_FILENAME));
|
||||
if (!_tcslen(temp)) {
|
||||
MessageBox(hWnd, _T("The filename cannot be empty"), _T("Invalid Value"), MB_OK | MB_ICONEXCLAMATION);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (strlen(temp) < 4 || strncmp(".egg", temp+(strlen(temp) - 4), 4))
|
||||
sprintf(_file_name, "%s.egg", temp);
|
||||
else strcpy(_file_name, temp);
|
||||
if (_tcslen(temp) < 4 || _tcsncmp(_T(".egg"), temp+(_tcslen(temp) - 4), 4)) {
|
||||
_stprintf(_file_name, _T("%s.egg"), temp);
|
||||
} else {
|
||||
_tcscpy(_file_name, temp);
|
||||
}
|
||||
|
||||
temp = strrchr(_file_name, '\\');
|
||||
temp = _tcsrchr(_file_name, '\\');
|
||||
if (!temp) temp = _file_name;
|
||||
else temp++;
|
||||
|
||||
if (strlen(temp) > sizeof(_short_name))
|
||||
sprintf(_short_name, "%.*s...", sizeof(_short_name)-4, temp);
|
||||
if (_tcslen(temp) > sizeof(_short_name))
|
||||
_stprintf(_short_name, _T("%.*s..."), sizeof(_short_name)-4, temp);
|
||||
else {
|
||||
strcpy(_short_name, temp);
|
||||
_short_name[strlen(_short_name) - 4] = NULL; //Cut off the .egg
|
||||
_tcscpy(_short_name, temp);
|
||||
_short_name[_tcslen(_short_name) - 4] = NULL; //Cut off the .egg
|
||||
}
|
||||
|
||||
_start_frame = newSF;
|
||||
|
@ -42,12 +42,12 @@ extern HINSTANCE hInstance;
|
||||
void ChunkSave(ISave *isave, int chunkid, int value);
|
||||
void ChunkSave(ISave *isave, int chunkid, bool value);
|
||||
void ChunkSave(ISave *isave, int chunkid, char *value);
|
||||
char *ChunkLoadString(ILoad *iload, char *buffer, int maxBytes);
|
||||
TCHAR *ChunkLoadString(ILoad *iload, TCHAR *buffer, int maxLength);
|
||||
int ChunkLoadInt(ILoad *iload);
|
||||
bool ChunkLoadBool(ILoad *iload);
|
||||
void SetICustEdit(HWND wnd, int nIDDlgItem, char *text);
|
||||
INT_PTR CALLBACK MaxOptionsDialogProc( HWND hWnd, UINT message,
|
||||
WPARAM wParam, LPARAM lParam );
|
||||
void SetICustEdit(HWND wnd, int nIDDlgItem, TCHAR *text);
|
||||
INT_PTR CALLBACK MaxOptionsDialogProc(HWND hWnd, UINT message,
|
||||
WPARAM wParam, LPARAM lParam );
|
||||
|
||||
struct MaxEggOptions
|
||||
{
|
||||
@ -71,16 +71,16 @@ struct MaxEggOptions
|
||||
bool _successful;
|
||||
bool _export_whole_scene;
|
||||
bool _export_all_frames;
|
||||
char _file_name[2048];
|
||||
char _short_name[256];
|
||||
TCHAR _file_name[2048];
|
||||
TCHAR _short_name[256];
|
||||
PT(PathReplace) _path_replace;
|
||||
std::vector<ULONG> _node_list;
|
||||
};
|
||||
|
||||
class MaxOptionsDialog : public MaxEggOptions
|
||||
{
|
||||
friend class MaxEggPlugin;
|
||||
|
||||
friend class MaxEggPlugin;
|
||||
|
||||
public:
|
||||
int _min_frame, _max_frame;
|
||||
bool _checked;
|
||||
@ -89,24 +89,24 @@ class MaxOptionsDialog : public MaxEggOptions
|
||||
|
||||
MaxOptionsDialog();
|
||||
~MaxOptionsDialog();
|
||||
|
||||
//All these List functions should probably take what list they need to operate on
|
||||
//rather than just operating on a global list
|
||||
|
||||
// All these List functions should probably take what list they need to operate on
|
||||
// rather than just operating on a global list
|
||||
void SetMaxInterface(IObjParam *iface) { _max_interface = iface; }
|
||||
void UpdateUI(HWND hWnd);
|
||||
bool UpdateFromUI(HWND hWnd);
|
||||
void RefreshNodeList(HWND hWnd);
|
||||
void SetAnimRange();
|
||||
|
||||
|
||||
bool FindNode(ULONG INodeHandle); //returns true if the node is already in the list
|
||||
void AddNode(ULONG INodeHandle);
|
||||
void RemoveNode(int i);
|
||||
void RemoveNodeByHandle(ULONG INodeHandle);
|
||||
void ClearNodeList(HWND hWnd);
|
||||
void CullBadNodes();
|
||||
|
||||
|
||||
ULONG GetNode(int i) { return (i >= 0 && i < _node_list.size()) ? _node_list[i] : ULONG_MAX; }
|
||||
|
||||
|
||||
IOResult Load(ILoad *iload);
|
||||
IOResult Save(ISave *isave);
|
||||
};
|
||||
|
@ -71,7 +71,13 @@ bool MaxToEggConverter::convert(MaxEggOptions *options) {
|
||||
|
||||
_options = options;
|
||||
|
||||
Filename fn = Filename::from_os_specific(_options->_file_name);
|
||||
Filename fn;
|
||||
#ifdef _UNICODE
|
||||
fn = Filename::from_os_specific_w(_options->_file_name);
|
||||
#else
|
||||
fn = Filename::from_os_specific(_options->_file_name);
|
||||
#endif
|
||||
|
||||
_options->_path_replace->_path_directory = fn.get_dirname();
|
||||
|
||||
_egg_data = new EggData;
|
||||
@ -163,7 +169,11 @@ bool MaxToEggConverter::convert(MaxEggOptions *options) {
|
||||
_options->_successful = all_ok;
|
||||
|
||||
if (all_ok) {
|
||||
#ifdef _UNICODE
|
||||
Filename fn = Filename::from_os_specific_w(_options->_file_name);
|
||||
#else
|
||||
Filename fn = Filename::from_os_specific(_options->_file_name);
|
||||
#endif
|
||||
return _egg_data->write_egg(fn);
|
||||
} else {
|
||||
return false;
|
||||
@ -1016,7 +1026,6 @@ get_panda_material(Mtl *mtl, MtlID matID) {
|
||||
pandaMat._color[2] = diffuseColor.z;
|
||||
}
|
||||
if (!pandaMat._any_opacity) {
|
||||
|
||||
pandaMat._color[3] = (maxMaterial->GetOpacity(_current_frame * GetTicksPerFrame()));
|
||||
}
|
||||
if (pandaMat._texture_list.size() < 1) {
|
||||
@ -1027,7 +1036,7 @@ get_panda_material(Mtl *mtl, MtlID matID) {
|
||||
}
|
||||
return pandaMat;
|
||||
}
|
||||
|
||||
|
||||
// Otherwise, it's unrecognizable. Leave result blank.
|
||||
return pandaMat;
|
||||
}
|
||||
@ -1038,7 +1047,7 @@ get_panda_material(Mtl *mtl, MtlID matID) {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void MaxToEggConverter::analyze_diffuse_maps(PandaMaterial &pandaMat, Texmap *mat) {
|
||||
if (mat == 0) return;
|
||||
|
||||
|
||||
if (mat->ClassID() == Class_ID(RGBMULT_CLASS_ID, 0)) {
|
||||
for (int i=0; i<mat->NumSubTexmaps(); i++) {
|
||||
analyze_diffuse_maps(pandaMat, mat->GetSubTexmap(i));
|
||||
@ -1053,7 +1062,11 @@ void MaxToEggConverter::analyze_diffuse_maps(PandaMaterial &pandaMat, Texmap *ma
|
||||
BitmapTex *diffuseTex = (BitmapTex *)mat;
|
||||
|
||||
Filename fullpath, outpath;
|
||||
#ifdef _UNICDOE
|
||||
Filename filename = Filename::from_os_specific_w(diffuseTex->GetMapName());
|
||||
#else
|
||||
Filename filename = Filename::from_os_specific(diffuseTex->GetMapName());
|
||||
#endif
|
||||
_options->_path_replace->full_convert_path(filename, get_model_path(),
|
||||
fullpath, outpath);
|
||||
tex->set_filename(outpath);
|
||||
@ -1061,7 +1074,7 @@ void MaxToEggConverter::analyze_diffuse_maps(PandaMaterial &pandaMat, Texmap *ma
|
||||
|
||||
apply_texture_properties(*tex, diffuseTex->GetMapChannel());
|
||||
add_map_channel(pandaMat, diffuseTex->GetMapChannel());
|
||||
|
||||
|
||||
Bitmap *diffuseBitmap = diffuseTex->GetBitmap(0);
|
||||
if ( diffuseBitmap && diffuseBitmap->HasAlpha()) {
|
||||
tex->set_format(EggTexture::F_rgba);
|
||||
@ -1069,7 +1082,7 @@ void MaxToEggConverter::analyze_diffuse_maps(PandaMaterial &pandaMat, Texmap *ma
|
||||
tex->set_format(EggTexture::F_rgb);
|
||||
}
|
||||
tex->set_env_type(EggTexture::ET_modulate);
|
||||
|
||||
|
||||
pandaMat._texture_list.push_back(tex);
|
||||
}
|
||||
}
|
||||
@ -1094,7 +1107,11 @@ void MaxToEggConverter::analyze_opacity_maps(PandaMaterial &pandaMat, Texmap *ma
|
||||
BitmapTex *transTex = (BitmapTex *)mat;
|
||||
|
||||
Filename fullpath, outpath;
|
||||
#ifdef _UNICODE
|
||||
Filename filename = Filename::from_os_specific_w(transTex->GetMapName());
|
||||
#else
|
||||
Filename filename = Filename::from_os_specific(transTex->GetMapName());
|
||||
#endif
|
||||
_options->_path_replace->full_convert_path(filename, get_model_path(),
|
||||
fullpath, outpath);
|
||||
|
||||
@ -1146,7 +1163,11 @@ void MaxToEggConverter::analyze_glow_maps(PandaMaterial &pandaMat, Texmap *mat)
|
||||
BitmapTex *gtex = (BitmapTex *)mat;
|
||||
|
||||
Filename fullpath, outpath;
|
||||
#ifdef _UNICODE
|
||||
Filename filename = Filename::from_os_specific_w(gtex->GetMapName());
|
||||
#else
|
||||
Filename filename = Filename::from_os_specific(gtex->GetMapName());
|
||||
#endif
|
||||
_options->_path_replace->full_convert_path(filename, get_model_path(),
|
||||
fullpath, outpath);
|
||||
|
||||
@ -1191,7 +1212,11 @@ void MaxToEggConverter::analyze_gloss_maps(PandaMaterial &pandaMat, Texmap *mat)
|
||||
BitmapTex *gtex = (BitmapTex *)mat;
|
||||
|
||||
Filename fullpath, outpath;
|
||||
#ifdef _UNICODE
|
||||
Filename filename = Filename::from_os_specific_w(gtex->GetMapName());
|
||||
#else
|
||||
Filename filename = Filename::from_os_specific(gtex->GetMapName());
|
||||
#endif
|
||||
_options->_path_replace->full_convert_path(filename, get_model_path(),
|
||||
fullpath, outpath);
|
||||
|
||||
@ -1236,7 +1261,11 @@ void MaxToEggConverter::analyze_normal_maps(PandaMaterial &pandaMat, Texmap *mat
|
||||
BitmapTex *ntex = (BitmapTex *)mat;
|
||||
|
||||
Filename fullpath, outpath;
|
||||
#ifdef _UNICODE
|
||||
Filename filename = Filename::from_os_specific_w(ntex->GetMapName());
|
||||
#else
|
||||
Filename filename = Filename::from_os_specific(ntex->GetMapName());
|
||||
#endif
|
||||
_options->_path_replace->full_convert_path(filename, get_model_path(),
|
||||
fullpath, outpath);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user