void ConvexApproximationObject::InitUI(HWND hWnd) { m_UI_initalizationCompleted = false; HWND maxConcavityUI = GetDlgItem(hWnd, IDC_MAX_CONCAVITY); HWND maxConcavitySpinnerUI = GetDlgItem(hWnd, IDC_MAX_CONCAVITY_SPINNER); m_maxConcavity = GetICustEdit(maxConcavityUI); m_maxConcavitySpinner = GetISpinner (maxConcavitySpinnerUI); m_maxConcavitySpinner->LinkToEdit (maxConcavityUI, EDITTYPE_POS_FLOAT); m_maxConcavitySpinner->SetScale (0.01f); m_maxConcavitySpinner->SetLimits(0.01f, 100.0f); m_maxConcavitySpinner->SetValue(m_currentConcavity, TRUE); HWND maxSegmentsUI = GetDlgItem(hWnd, IDC_MAX_SEGMENTS); HWND maxSegmentsSpinnerUI = GetDlgItem(hWnd, IDC_MAX_SEGMENTS_SPINNER); m_maxSegments = GetICustEdit(maxSegmentsUI); m_maxSegmentsSpinner = GetISpinner (maxSegmentsSpinnerUI); m_maxSegmentsSpinner->LinkToEdit (maxSegmentsUI, EDITTYPE_POS_INT); m_maxSegmentsSpinner->SetScale (1.0f); m_maxSegmentsSpinner->SetLimits(1, 256); m_maxSegmentsSpinner->SetValue(m_currentMaxCount, TRUE); m_UI_initalizationCompleted = true; }
void RigidBodyWorld::InitUI(HWND hWnd) { RigidBodyWorldDesc* const desc = (RigidBodyWorldDesc*) RigidBodyWorldDesc::GetDescriptor(); HWND minFps = GetDlgItem(hWnd, IDC_MINUMIN_SIMULATION_RATE); HWND gravity_x = GetDlgItem(hWnd, IDC_GRAVITY_X); HWND gravity_y = GetDlgItem(hWnd, IDC_GRAVITY_Y); HWND gravity_z = GetDlgItem(hWnd, IDC_GRAVITY_Z); m_minFps = GetICustEdit(minFps); m_gravity[0] = GetICustEdit(gravity_x); m_gravity[1] = GetICustEdit(gravity_y); m_gravity[2] = GetICustEdit(gravity_z); float scale = 1.0f / float (GetMasterScale(UNITS_METERS)); dVector gravity = desc->m_systemMatrixInv.RotateVector(desc->m_gravity.Scale (scale)); m_minFps->SetText(desc->m_minFps); m_gravity[0]->SetText(gravity.m_x, 1); m_gravity[1]->SetText(gravity.m_y, 1); m_gravity[2]->SetText(gravity.m_z, 1); RegisterNotification(OnUndoRedo, this, NOTIFY_SCENE_UNDO); RegisterNotification (OnUndoRedo, this, NOTIFY_SCENE_REDO); }
void MorphObject::SetupTargetList() { if (!morphCont) return; SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST),LB_RESETCONTENT,0,0); for (int i=0; i<morphCont->NumMorphTargs(); i++) { SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST), LB_ADDSTRING,0,(LPARAM)(const TCHAR*)SubAnimName(i)); } if (sel>=0) { SendMessage(GetDlgItem(hParams2,IDC_MORPHTARG_LIST), LB_SETCURSEL,sel,0); EnableWindow(GetDlgItem(hParams2,IDC_CREATE_MORPHKEY),TRUE); EnableWindow(GetDlgItem(hParams2,IDC_DELETE_MORPHTARG),TRUE); ICustEdit *edit = GetICustEdit(GetDlgItem(hParams2,IDC_MORPHTARG_NAME)); edit->Enable(); edit->SetText(SubAnimName(sel)); ReleaseICustEdit(edit); } else { EnableWindow(GetDlgItem(hParams2,IDC_CREATE_MORPHKEY),FALSE); EnableWindow(GetDlgItem(hParams2,IDC_DELETE_MORPHTARG),FALSE); ICustEdit *edit = GetICustEdit(GetDlgItem(hParams2,IDC_MORPHTARG_NAME)); edit->Disable(); edit->SetText(_T("")); ReleaseICustEdit(edit); } }
void EllipseObject::UpdateUI(HWND hwnd) { Interval valid; BOOL build_outine = FALSE; TimeValue t = ip? ip->GetTime() : 0; myParamBlock->GetValue(PB_OUTLINE, t, build_outine, valid); ICustEdit *thickness_edit = GetICustEdit(GetDlgItem(hwnd, IDC_THICKNESSEDIT)); ISpinnerControl *thickness_spin = GetISpinner(GetDlgItem(hwnd, IDC_THICKSPINNER)); if(!thickness_edit || !thickness_spin) return; if(build_outine) { EnableWindow(GetDlgItem(hwnd,IDC_THICKNESS_TEXT),TRUE); thickness_edit->Enable(); thickness_spin->Enable(); } else { EnableWindow(GetDlgItem(hwnd,IDC_THICKNESS_TEXT),FALSE); thickness_edit->Disable(); thickness_spin->Disable(); } ReleaseICustEdit(thickness_edit); ReleaseISpinner(thickness_spin); }
int Fixed32::make_dialog_gadgets( HWND hPanel ) { int x; int width; assert( _td ); assert( hPanel ); assert( hInstance ); assert( _td->name ); int wLabel = uiDialog::make_dialog_gadgets( hPanel ); x = 5 + wLabel; width = min( LAST_BUTTON_WIDTH( x + 12 + 1 ), 55 ); hwndEdit = theAttributes.CreateWindowEx( 0, "CustEdit", _td->name, 0 | WS_TABSTOP, x, theAttributes.y, width, 16, hPanel, NULL, hInstance, NULL ); assert( hwndEdit ); _edit = GetICustEdit( hwndEdit ); assert( _edit ); hwndSpinner = theAttributes.CreateWindowEx( 0, "SpinnerControl", "", 0x50000000, x + width + 1, theAttributes.y, 7, 10, hPanel, NULL, hInstance, NULL ); assert( hwndSpinner ); _spinner = GetISpinner( hwndSpinner ); assert( _spinner ); reset(); _spinner->LinkToEdit( hwndEdit, EDITTYPE_FLOAT ); _spinner->SetAutoScale(); return x + width + 1 + 7; }
void SceneViewer::IEnableSetupControls(bool enable) { ICustEdit *edit = GetICustEdit(GetDlgItem(fhDlg, IDC_CLIENT_PATH)); edit->Enable(enable); EnableWindow(GetDlgItem(fhDlg, IDC_DIR), enable); EnableWindow(GetDlgItem(fhDlg, IDC_EXE), enable); EnableWindow(GetDlgItem(fhDlg, IDC_REUSE_DATA), enable); SetWindowText(GetDlgItem(fhDlg, IDC_START), enable ? "Start" : "Stop"); }
void FooControl::set_enable() { if (parent_rollout != NULL && parent_rollout->page != NULL) { // set spinner enable ISpinnerControl *spin = GetISpinner(GetDlgItem(parent_rollout->page, control_ID)); if (enabled) spin->Enable(); else spin->Disable(); ReleaseISpinner(spin); // set editbox enable ICustEdit *edit = GetICustEdit(GetDlgItem(parent_rollout->page, control_ID+2)); if (enabled) edit->Enable(); else edit->Disable(); ReleaseICustEdit(edit); // set caption enable HWND ctrl = GetDlgItem(parent_rollout->page, control_ID+1); if (ctrl) EnableWindow(ctrl, enabled); } }
void RigidBodyUIPane::InitUI(HWND hWnd) { HWND massControlHandle = GetDlgItem(hWnd, IDC_RIGID_BODY_MASS); HWND massSpinControlHandle = GetDlgItem(hWnd, IDC_RIGID_BODY_MASS_PINNER); HWND collisionShapeHandle = GetDlgItem(hWnd, IDC_RIGID_BODY_COLLISION); m_massEdit = GetICustEdit(massControlHandle); m_massSpinner = GetISpinner (massSpinControlHandle); m_massSpinner->LinkToEdit (massControlHandle, EDITTYPE_POS_FLOAT); m_massSpinner->SetScale (0.1f); m_massSpinner->SetLimits(0.0f, 1000.0f); /* SetCollisionData (collisionShapeHandle, m_box, "box"); SetCollisionData (collisionShapeHandle, m_sphere, "sphere"); SetCollisionData (collisionShapeHandle, m_cylinder, "cylinder"); SetCollisionData (collisionShapeHandle, m_convexHull, "convex hull"); SetCollisionData (collisionShapeHandle, m_collisionTree, "collision tree"); //SendMessage (collisionShapeHandle, CB_SELECTSTRING, 0, LPARAM ("convex hull")); SendMessage (collisionShapeHandle, CB_SELECTSTRING, 0, LPARAM ("box")); m_curCollsionShape = m_box; PhysicsPluginObject& me = *(PhysicsPluginObject*)this; dList<INode*> nodeList; me.GetNodeList (nodeList); for (dList<INode*>::dListNode* ptr = nodeList.GetFirst(); ptr; ptr = ptr->GetNext()) { INode* const node = ptr->GetInfo(); AppDataChunk* const rigidBodyChunk = node->GetAppDataChunk(GetRigidBodyID(), node->SuperClassID(), 0); if (rigidBodyChunk) { RidBodyData* const bodyData = (RidBodyData*) rigidBodyChunk->data; bodyData->m_body = NULL; AddNodeToWorld (node); } } */ }
BOOL SceneViewer::DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { fhDlg = hDlg; // Set the exe to use HWND hExeCombo = GetDlgItem(hDlg, IDC_EXE); ComboBox_AddString(hExeCombo, "Release"); ComboBox_AddString(hExeCombo, "Debug"); ComboBox_SetCurSel(hExeCombo, fReleaseExe ? 0 : 1); // Set the client path const char *path = plMaxConfig::GetClientPath(false, true); ICustEdit *edit = GetICustEdit(GetDlgItem(hDlg, IDC_CLIENT_PATH)); edit->SetText((char*)path); // Set the "Load old data" checkbox HWND hLoadOld = GetDlgItem(hDlg, IDC_REUSE_DATA); Button_SetCheck(hLoadOld, fLoadOld ? BST_CHECKED : BST_UNCHECKED); Button_Enable(hLoadOld, SceneSync::Instance().CanLoadOldResMgr()); // Set the update controls float val = float(fUpdateFreq) / 1000.f; ISpinnerControl *spin = SetupFloatSpinner(hDlg, IDC_SPINNER, IDC_EDIT, 0.1, 1.f, val); spin->Enable(fUpdate); CheckDlgButton(hDlg, IDC_UPDATE, fUpdate ? BST_CHECKED : BST_UNCHECKED); IEnableSetupControls(!SceneSync::Instance().IsClientRunning()); } return TRUE; case WM_COMMAND: // Start/Stop SceneViewer if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_START) { IToggleRunning(); IEnableSetupControls(!SceneSync::Instance().IsClientRunning()); return TRUE; } // Close dialog else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDCANCEL) { DestroyWindow(hDlg); fhDlg = NULL; return TRUE; } // Browse for directory else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_DIR) { const char *path = plMaxConfig::GetClientPath(true); if (path) { ICustEdit *edit = GetICustEdit(GetDlgItem(hDlg, IDC_CLIENT_PATH)); edit->SetText((char*)path); } return TRUE; } // "Load old data" selection changed else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_REUSE_DATA) { fLoadOld = (Button_GetCheck((HWND)lParam) == BST_CHECKED); return TRUE; } // Release/Debug exe selection changed else if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_EXE) { int sel = ComboBox_GetCurSel((HWND)lParam); fReleaseExe = (sel == 0); return TRUE; } else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_UPDATE) { fUpdate = (SendMessage((HWND)lParam, BM_GETCHECK, 0, 0) == BST_CHECKED); ISpinnerControl *spin = GetISpinner(GetDlgItem(hDlg, IDC_SPINNER)); spin->Enable(fUpdate); ReleaseISpinner(spin); // If update was turned on, send out an update message so any dirty objects // will be reconverted right away if (fUpdate) SceneSync::Instance().SetUpdateFreq(fUpdateFreq); return TRUE; } break; // Update frequency changed case CC_SPINNER_CHANGE: if (LOWORD(wParam) == IDC_SPINNER) { ISpinnerControl *spin = (ISpinnerControl*)lParam; float val = spin->GetFVal(); fUpdateFreq = int(val*1000.f); SceneSync::Instance().SetUpdateFreq(fUpdateFreq); } return TRUE; // Type in directory case WM_CUSTEDIT_ENTER: if (wParam == IDC_CLIENT_PATH) { ICustEdit *edit = GetICustEdit((HWND)lParam); char path[MAX_PATH]; edit->GetText(path, sizeof(path)); plMaxConfig::SetClientPath(path); } return TRUE; } return FALSE; }
int ObjectReference::make_dialog_gadgets( HWND hPanel ) { int x; int width; assert( _td ); assert( hPanel ); assert( hInstance ); assert( _td->name ); int wLabel = uiDialog::make_dialog_gadgets( hPanel ); x = 5 + wLabel; width = LAST_BUTTON_WIDTH( x + 16+1 + 16+1 ); //theAttributes.y += 18; hwndEdit = theAttributes.CreateWindowEx( 0, "CustEdit", _td->name, 0 | WS_TABSTOP, x, theAttributes.y, width, 16, hPanel ); assert( hwndEdit ); _edit = GetICustEdit( hwndEdit ); assert( _edit ); hwndBrowseButton = theAttributes.CreateWindowEx( 0, "BUTTON", "8", 0, x + width + 1, theAttributes.y, 16, 16, hPanel ); assert( hwndBrowseButton ); SetWindowLong( hwndBrowseButton, GWL_USERDATA, (LONG)this ); SetWindowFont( hwndBrowseButton, theAttributes._fontWingdings, true ); char szButton[ 2 ]; szButton[ 0 ] = 240; szButton[ 1 ] = '\0'; hwndGoToObjectButton = theAttributes.CreateWindowEx( 0, "BUTTON", szButton, 0, x + width + 16+1 + 1, theAttributes.y, 16, 16, hPanel ); assert( hwndGoToObjectButton ); SetWindowLong( hwndGoToObjectButton, GWL_USERDATA, (LONG)this ); SetWindowFont( hwndGoToObjectButton, theAttributes._fontWingdings, true ); reset(); return x + width + 1 + 16 + 16; }
static INT_PTR CALLBACK MorphParamDlgProc2( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { MorphObject *mo = DLGetWindowLongPtr<MorphObject*>(hWnd); if (!mo && message!=WM_INITDIALOG) return FALSE; switch (message) { case WM_INITDIALOG: { mo = (MorphObject*)lParam; DLSetWindowLongPtr(hWnd, lParam); mo->hParams2 = hWnd; mo->SetupTargetList(); break; } case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_CREATE_MORPHKEY: { TSTR name; Matrix3 tm = mo->morphCont->GetMorphTargTM(mo->sel); SetMorphTargetPacket pckt( mo->morphCont->GetMorphTarg(mo->sel),name, tm,TRUE); theHold.Begin(); mo->morphCont->SetValue(mo->ip->GetTime(),&pckt); theHold.Accept(GetString(IDS_RB_CREATEMORPHKEY)); mo->ip->RedrawViews(mo->ip->GetTime()); break; } case IDC_MORPHTARG_LIST: if (HIWORD(wParam)==LBN_SELCHANGE) { mo->sel = SendMessage( GetDlgItem(mo->hParams2,IDC_MORPHTARG_LIST), LB_GETCURSEL,0,0); if (mo->sel < 0) { EnableWindow(GetDlgItem(hWnd,IDC_CREATE_MORPHKEY),FALSE); EnableWindow(GetDlgItem(hWnd,IDC_DELETE_MORPHTARG),FALSE); ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME)); edit->Disable(); edit->SetText(_T("")); ReleaseICustEdit(edit); } else { EnableWindow(GetDlgItem(hWnd,IDC_CREATE_MORPHKEY),TRUE); EnableWindow(GetDlgItem(hWnd,IDC_DELETE_MORPHTARG),TRUE); ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME)); edit->Enable(); edit->SetText(mo->SubAnimName(mo->sel)); ReleaseICustEdit(edit); } mo->NotifyDependents(FOREVER,(PartID) mo,REFMSG_BRANCHED_HISTORY_CHANGED); } break; case IDC_DELETE_MORPHTARG: if (mo->sel>=0) { theHold.Begin(); mo->morphCont->DeleteMorphTarg(mo->sel); theHold.Accept(GetString(IDS_RB_DELETEMORPHTARG)); mo->sel = -1; mo->SetupTargetList(); mo->ip->RedrawViews(mo->ip->GetTime()); //GetSystemSetting(SYSSET_CLEAR_UNDO); } break; } break; case WM_CUSTEDIT_ENTER: if (LOWORD(wParam)==IDC_MORPHTARG_NAME && mo->sel >= 0) { ICustEdit *edit = GetICustEdit(GetDlgItem(hWnd,IDC_MORPHTARG_NAME)); TCHAR buf[256]; edit->GetText(buf,256); mo->morphCont->SetMorphTargName(mo->sel,TSTR(buf)); mo->SetupTargetList(); mo->NotifyDependents(FOREVER,0,REFMSG_SUBANIM_STRUCTURE_CHANGED); ReleaseICustEdit(edit); } break; case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MOUSEMOVE: mo->ip->RollupMouseMessage(hWnd,message,wParam,lParam); return FALSE; default: return FALSE; } return TRUE; }
void plResponderWaitProc::LoadPoint(bool force) { int who = fWaitPB->GetInt(kWaitWho); const char *point = fWaitPB->GetStr(kWaitPoint); if (point && *point == '\0') point = nil; CheckRadioButton(fhDlg, IDC_RADIO_FINISH, IDC_RADIO_POINT, point || force ? IDC_RADIO_POINT : IDC_RADIO_FINISH); BOOL enableAll = (who != -1); EnableWindow(GetDlgItem(fhDlg, IDC_RADIO_FINISH), enableAll); EnableWindow(GetDlgItem(fhDlg, IDC_RADIO_POINT), enableAll); BOOL enablePoint = ((point != nil) || force) && enableAll; EnableWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), enablePoint); ComboBox_ResetContent(GetDlgItem(fhDlg, IDC_WAIT_POINT)); if (enableAll) { IParamBlock2 *pb = (IParamBlock2*)fStatePB->GetReferenceTarget(kStateCmdParams, 0, who); plResponderCmd *cmd = plResponderCmd::Find(pb); // KLUDGE - stupid one-shot needs editable box if (cmd == &(plResponderCmdOneShot::Instance())) { ShowWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), SW_HIDE); HWND hEdit = GetDlgItem(fhDlg, IDC_MARKER_EDIT); ShowWindow(hEdit, SW_SHOW); ICustEdit *custEdit = GetICustEdit(hEdit); custEdit->SetText(point ? (char*)point : ""); } else { ShowWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), SW_SHOW); HWND hEdit = GetDlgItem(fhDlg, IDC_MARKER_EDIT); ShowWindow(hEdit, SW_HIDE); plResponderCmd::WaitPoints waitPoints; cmd->GetWaitPoints(pb, waitPoints); HWND hCombo = GetDlgItem(fhDlg, IDC_WAIT_POINT); ComboBox_ResetContent(hCombo); if (waitPoints.size() == 0) { EnableWindow(GetDlgItem(fhDlg, IDC_RADIO_POINT), FALSE); EnableWindow(GetDlgItem(fhDlg, IDC_WAIT_POINT), FALSE); } else { for (int i = 0; i < waitPoints.size(); i++) { const char *marker = waitPoints[i].c_str(); int idx = ComboBox_AddString(hCombo, marker); if (point && !strcmp(point, marker)) ComboBox_SetCurSel(hCombo, idx); } } } } }
BOOL plResponderWaitProc::DlgProc(TimeValue t, IParamMap2 *pm, HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { fhDlg = hDlg; fWaitPB = pm->GetParamBlock(); ResponderWait::FixupWaitBlock(fWaitPB); IParamBlock2 *pb = GetCmdParams(fCurCmd); plResponderCmd *cmd = plResponderCmd::Find(pb); pm->Enable(kWaitMe, cmd->IsWaitable(pb)); LoadWho(); LoadPoint(); return TRUE; } case WM_CUSTEDIT_ENTER: if (wParam == IDC_MARKER_EDIT) { ICustEdit *edit = GetICustEdit((HWND)lParam); char buf[256]; edit->GetText(buf, sizeof(buf)); fWaitPB->SetValue(kWaitPoint, 0, buf); return TRUE; } break; case WM_COMMAND: { int code = HIWORD(wParam); int id = LOWORD(wParam); if (id == IDC_CHECK_WAIT && code == BN_CLICKED) { BOOL checked = (IsDlgButtonChecked(hDlg, IDC_CHECK_WAIT) == BST_CHECKED); if (!checked) { fWaitPB->SetValue(kWaitWho, 0, -1); fWaitPB->SetValue(kWaitPoint, 0, ""); LoadPoint(); HWND hWho = GetDlgItem(hDlg, IDC_WAIT_WHO); EnableWindow(hWho, FALSE); ComboBox_ResetContent(hWho); } else { LoadWho(true); LoadPoint(); } return TRUE; } else if (id == IDC_WAIT_WHO && code == CBN_SELCHANGE) { HWND hWho = (HWND)lParam; int who = ComboBox_GetCurSel(hWho); int idx = ComboBox_GetItemData(hWho, who); fWaitPB->SetValue(kWaitWho, 0, idx); LoadPoint(); return TRUE; } else if (id == IDC_RADIO_FINISH && code == BN_CLICKED) { fWaitPB->SetValue(kWaitPoint, 0, ""); LoadPoint(); return TRUE; } else if (id == IDC_RADIO_POINT && code == BN_CLICKED) { LoadPoint(true); return TRUE; } else if (id == IDC_WAIT_POINT && code == CBN_SELCHANGE) { HWND hPoint = (HWND)lParam; if (ComboBox_GetCurSel(hPoint) != CB_ERR) { char buf[256]; ComboBox_GetText(hPoint, buf, sizeof(buf)); fWaitPB->SetValue(kWaitPoint, 0, buf); } return TRUE; } break; } } return FALSE; }
// --[ Method ]--------------------------------------------------------------- // // - Class : CStravaganzaMaxTools // // - prototype : void ReadConfig(bool bLoadDefaults = false) // // - Purpose : Initializes the tool parameters, reading the previous // configuration from a cfg file or creating default values. // If bLoadDefaults is true, the config file won't be read and // default values will be assigned. // // ----------------------------------------------------------------------------- void CStravaganzaMaxTools::ReadConfig(bool bLoadDefaults) { if(!m_hPanel) return; ISpinnerControl* pMaxSpin; ICustEdit* pMaxEdit; CInputFile cfgFile; m_bPreprocessMesh = true; m_bUseLights = true; m_eAnimType = ANIMATION_SAMPLING; m_nAnimCheckStep = 20; m_nNumPosSamplesPerSec = 30; m_nNumSclSamplesPerSec = 30; m_nNumRotSamplesPerSec = 30; m_nNumCamSettingsPerSec = 15; m_nNumLightSettingsPerSec = 15; m_strFile = ""; m_bCopyTextures = true; m_strTexturePath = ""; m_ePreviewType = CRenderVisitor::MODE_SOLID; m_bFullscreen = false; m_bLoop = true; m_nPreviewResX = 800; m_nPreviewResY = 600; m_fViewportHeight = 1.0f; m_bShowStats = true; m_bRenderToAvi = false; m_strAviFile = ""; m_strPreviewCamera = ""; if(cfgFile.Open(m_strCfgFile, false) && !bLoadDefaults) { int nValue; // Common options cfgFile.ReadInt(&nValue); m_bPreprocessMesh = nValue ? true : false; cfgFile.ReadInt(&nValue); m_bUseLights = nValue ? true : false; m_fStartTime = TICKS_TO_SECONDS(m_pMaxInterface->GetAnimRange().Start()); m_fEndTime = TICKS_TO_SECONDS(m_pMaxInterface->GetAnimRange().End()); cfgFile.ReadInt(&m_nAnimCheckStep); cfgFile.ReadInt(&m_nNumPosSamplesPerSec); cfgFile.ReadInt(&m_nNumSclSamplesPerSec); cfgFile.ReadInt(&m_nNumRotSamplesPerSec); cfgFile.ReadInt(&m_nNumCamSettingsPerSec); cfgFile.ReadInt(&m_nNumLightSettingsPerSec); cfgFile.ReadInt(&nValue); switch(nValue) { case ANIMATION_SAMPLING: m_eAnimType = ANIMATION_SAMPLING; break; case ANIMATION_MAXKEYS: m_eAnimType = ANIMATION_MAXKEYS; break; } // Export options cfgFile.ReadStringZero(&m_strFile); cfgFile.ReadInt(&nValue); m_bCopyTextures = nValue ? true : false; cfgFile.ReadStringZero(&m_strTexturePath); // Preview options cfgFile.ReadStringZero(&m_strPreviewCamera); FillCameraCombobox(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), m_pMaxInterface->GetRootNode()); cfgFile.ReadInt(&nValue); switch(nValue) { case CRenderVisitor::MODE_WIREFRAME: m_ePreviewType = CRenderVisitor::MODE_WIREFRAME; break; case CRenderVisitor::MODE_SOLID: m_ePreviewType = CRenderVisitor::MODE_SOLID; break; case CRenderVisitor::MODE_FULLDETAIL: m_ePreviewType = CRenderVisitor::MODE_FULLDETAIL; break; } cfgFile.ReadInt(&nValue); m_bFullscreen = nValue ? true : false; cfgFile.ReadInt(&nValue); m_bLoop = nValue ? true : false; cfgFile.ReadInt (&m_nPreviewResX); cfgFile.ReadInt (&m_nPreviewResY); cfgFile.ReadFloat(&m_fViewportHeight); cfgFile.ReadInt (&nValue); m_bShowStats = nValue ? true : false; cfgFile.ReadInt (&nValue); m_bRenderToAvi = nValue ? true : false; cfgFile.ReadStringZero(&m_strAviFile); } cfgFile.Close(); // Common CheckDlgButton(m_hPanel, IDC_CHECK_PREPROCESSMESHES, m_bPreprocessMesh ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(m_hPanel, IDC_CHECK_USELIGHTS, m_bUseLights ? BST_CHECKED : BST_UNCHECKED); EnableWindow(GetDlgItem(m_hPanel, IDC_RADIO_USEMAXKEYS), FALSE); switch(m_eAnimType) { case ANIMATION_SAMPLING: CheckRadioButton(m_hPanel, IDC_RADIO_USESAMPLING, IDC_RADIO_USEMAXKEYS, IDC_RADIO_USESAMPLING); break; case ANIMATION_MAXKEYS: CheckRadioButton(m_hPanel, IDC_RADIO_USESAMPLING, IDC_RADIO_USEMAXKEYS, IDC_RADIO_USEMAXKEYS); break; } pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_STARTTIME)); pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_STARTTIME), EDITTYPE_FLOAT); pMaxSpin->SetLimits(m_fStartTime, m_fEndTime, TRUE); pMaxSpin->SetScale(0.01f); pMaxSpin->SetValue(m_fStartTime, FALSE); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ENDTIME)); pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ENDTIME), EDITTYPE_FLOAT); pMaxSpin->SetLimits(m_fStartTime, m_fEndTime, TRUE); pMaxSpin->SetScale(0.01f); pMaxSpin->SetValue(m_fEndTime, FALSE); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ANIMCHECKSTEP)); pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ANIMCHECKSTEP), EDITTYPE_INT); pMaxSpin->SetLimits(0, 100, TRUE); pMaxSpin->SetScale(1); pMaxSpin->SetValue(m_nAnimCheckStep, FALSE); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_POSSAMPLINGFREQ)); pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_POSSAMPLINGFREQ), EDITTYPE_INT); pMaxSpin->SetLimits(0, 100, TRUE); pMaxSpin->SetScale(1); pMaxSpin->SetValue(m_nNumPosSamplesPerSec, FALSE); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_SCLSAMPLINGFREQ)); pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_SCLSAMPLINGFREQ), EDITTYPE_INT); pMaxSpin->SetLimits(0, 100, TRUE); pMaxSpin->SetScale(1); pMaxSpin->SetValue(m_nNumSclSamplesPerSec, FALSE); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ROTSAMPLINGFREQ)); pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_ROTSAMPLINGFREQ), EDITTYPE_INT); pMaxSpin->SetLimits(0, 100, TRUE); pMaxSpin->SetScale(1); pMaxSpin->SetValue(m_nNumRotSamplesPerSec, FALSE); ReleaseISpinner(pMaxSpin); // Export pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_DESTINATIONFILE)); pMaxEdit->SetText((char*)m_strFile.data()); pMaxEdit->SetLeading(2); ReleaseICustEdit(pMaxEdit); CheckDlgButton(m_hPanel, IDC_CHECK_COPYTEXTURES, m_bCopyTextures ? BST_CHECKED : BST_UNCHECKED); pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER)); pMaxEdit->SetText((char*)m_strTexturePath.data()); pMaxEdit->SetLeading(2); ReleaseICustEdit(pMaxEdit); EnableWindow(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER), m_bCopyTextures ? TRUE : FALSE); EnableWindow(GetDlgItem(m_hPanel, IDC_BUTTON_TEXTUREFOLDER), m_bCopyTextures ? TRUE : FALSE); // Preview switch(m_ePreviewType) { case CRenderVisitor::MODE_WIREFRAME: CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_WIREFRAME); break; case CRenderVisitor::MODE_SOLID: CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_SOLID); break; case CRenderVisitor::MODE_FULLDETAIL: CheckRadioButton(m_hPanel, IDC_RADIO_WIREFRAME, IDC_RADIO_FULLDETAIL, IDC_RADIO_FULLDETAIL); break; } CheckDlgButton(m_hPanel, IDC_CHECK_FULLSCREEN, m_bFullscreen ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(m_hPanel, IDC_CHECK_LOOP, m_bLoop ? BST_CHECKED : BST_UNCHECKED); pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESW)); pMaxEdit->SetText(m_nPreviewResX); ReleaseICustEdit(pMaxEdit); pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESH)); pMaxEdit->SetText(m_nPreviewResY); ReleaseICustEdit(pMaxEdit); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_VIEWPORTHEIGHT)); pMaxSpin->LinkToEdit(GetDlgItem(m_hPanel, IDC_EDIT_VIEWPORTHEIGHT), EDITTYPE_FLOAT); pMaxSpin->SetLimits(0.0f, 1.0f, TRUE); pMaxSpin->SetScale(0.01f); pMaxSpin->SetValue(m_fViewportHeight, FALSE); ReleaseISpinner(pMaxSpin); CheckDlgButton(m_hPanel, IDC_CHECK_SHOWSTATS, m_bShowStats ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(m_hPanel, IDC_CHECK_RENDERTOAVI, m_bRenderToAvi ? BST_CHECKED : BST_UNCHECKED); pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE)); pMaxEdit->SetText((char*)m_strAviFile.data()); pMaxEdit->SetLeading(2); ReleaseICustEdit(pMaxEdit); EnableWindow(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE), m_bRenderToAvi ? TRUE : FALSE); EnableWindow(GetDlgItem(m_hPanel, IDC_BUTTON_AVIFILE), m_bRenderToAvi ? TRUE : FALSE); }
// --[ Method ]--------------------------------------------------------------- // // - Class : CStravaganzaMaxTools // // - prototype : void SaveConfig() // // - Purpose : Saves the panel parameters to a file. // // ----------------------------------------------------------------------------- void CStravaganzaMaxTools::SaveConfig() { if(!m_hPanel) return; ISpinnerControl* pMaxSpin; ICustEdit* pMaxEdit; int nSelectedItem; char szAuxBuffer[MAX_PATH]; COutputFile cfgFile; // GET SETTINGS FROM PANEL // Common m_bPreprocessMesh = IsDlgButtonChecked(m_hPanel, IDC_CHECK_PREPROCESSMESHES) == BST_CHECKED ? true : false; m_bUseLights = IsDlgButtonChecked(m_hPanel, IDC_CHECK_USELIGHTS) == BST_CHECKED ? true : false; pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_STARTTIME)); m_fStartTime = pMaxSpin->GetFVal(); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ENDTIME)); m_fEndTime = pMaxSpin->GetFVal(); ReleaseISpinner(pMaxSpin); if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_USESAMPLING) == BST_CHECKED) { m_eAnimType = ANIMATION_SAMPLING; } else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_USEMAXKEYS) == BST_CHECKED) { m_eAnimType = ANIMATION_MAXKEYS; } pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ANIMCHECKSTEP)); m_nAnimCheckStep = pMaxSpin->GetIVal(); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_POSSAMPLINGFREQ)); m_nNumPosSamplesPerSec = pMaxSpin->GetIVal(); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_SCLSAMPLINGFREQ)); m_nNumSclSamplesPerSec = pMaxSpin->GetIVal(); ReleaseISpinner(pMaxSpin); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_ROTSAMPLINGFREQ)); m_nNumRotSamplesPerSec = pMaxSpin->GetIVal(); ReleaseISpinner(pMaxSpin); // Export pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_DESTINATIONFILE)); pMaxEdit->GetText(szAuxBuffer, MAX_PATH); ReleaseICustEdit(pMaxEdit); m_strFile = szAuxBuffer; m_bCopyTextures = IsDlgButtonChecked(m_hPanel, IDC_CHECK_COPYTEXTURES) == BST_CHECKED ? true : false; pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_TEXTUREFOLDER)); pMaxEdit->GetText(szAuxBuffer, MAX_PATH); ReleaseICustEdit(pMaxEdit); m_strTexturePath = szAuxBuffer; // Preview // Get selected combo box camera nSelectedItem = SendMessage(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), CB_GETCURSEL, 0, 0); if(nSelectedItem == CB_ERR) // Items? { m_strPreviewCamera = ""; } else { // Get selected item memset(szAuxBuffer, 0, MAX_PATH); if(SendMessage(GetDlgItem(m_hPanel, IDC_COMBO_CAMERA), CB_GETLBTEXT, (WPARAM)nSelectedItem, (LPARAM)(LPCSTR)szAuxBuffer) == CB_ERR) { CLogger::ErrorWindow("Error getting camera selection"); } else { m_strPreviewCamera = szAuxBuffer; } } if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_SOLID) == BST_CHECKED) { m_ePreviewType = CRenderVisitor::MODE_SOLID; } else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_WIREFRAME) == BST_CHECKED) { m_ePreviewType = CRenderVisitor::MODE_WIREFRAME; } else if(IsDlgButtonChecked(m_hPanel, IDC_RADIO_FULLDETAIL) == BST_CHECKED) { m_ePreviewType = CRenderVisitor::MODE_FULLDETAIL; } m_bFullscreen = IsDlgButtonChecked(m_hPanel, IDC_CHECK_FULLSCREEN) == BST_CHECKED ? true : false; m_bLoop = IsDlgButtonChecked(m_hPanel, IDC_CHECK_LOOP) == BST_CHECKED ? true : false; int nAux; BOOL valid; pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESW)); nAux = pMaxEdit->GetInt(&valid); if(valid) m_nPreviewResX = nAux; else pMaxEdit->SetText(m_nPreviewResX); ReleaseICustEdit(pMaxEdit); pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_RESH)); nAux = pMaxEdit->GetInt(&valid); if(valid) m_nPreviewResY = nAux; else pMaxEdit->SetText(m_nPreviewResY); ReleaseICustEdit(pMaxEdit); pMaxSpin = GetISpinner(GetDlgItem(m_hPanel, IDC_SPIN_VIEWPORTHEIGHT)); m_fViewportHeight = pMaxSpin->GetFVal(); ReleaseISpinner(pMaxSpin); m_bShowStats = IsDlgButtonChecked(m_hPanel, IDC_CHECK_SHOWSTATS) == BST_CHECKED ? true : false; m_bRenderToAvi = IsDlgButtonChecked(m_hPanel, IDC_CHECK_RENDERTOAVI) == BST_CHECKED ? true : false; pMaxEdit = GetICustEdit(GetDlgItem(m_hPanel, IDC_EDIT_AVIFILE)); pMaxEdit->GetText(szAuxBuffer, MAX_PATH); ReleaseICustEdit(pMaxEdit); m_strAviFile = szAuxBuffer; // SAVE SETTINGS if(cfgFile.Open(m_strCfgFile, false, false) == false) { return; } cfgFile.WriteInt(m_bPreprocessMesh ? 1 : 0); cfgFile.WriteInt(m_bUseLights ? 1 : 0); cfgFile.WriteInt(m_nAnimCheckStep); cfgFile.WriteInt(m_nNumPosSamplesPerSec); cfgFile.WriteInt(m_nNumSclSamplesPerSec); cfgFile.WriteInt(m_nNumRotSamplesPerSec); cfgFile.WriteInt(m_nNumCamSettingsPerSec); cfgFile.WriteInt(m_nNumLightSettingsPerSec); cfgFile.WriteInt(m_eAnimType); // Export options cfgFile.WriteStringZero(m_strFile); cfgFile.WriteInt(m_bCopyTextures ? 1 : 0); cfgFile.WriteStringZero(m_strTexturePath); // Preview options cfgFile.WriteStringZero(m_strPreviewCamera); cfgFile.WriteInt(m_ePreviewType); cfgFile.WriteInt(m_bFullscreen ? 1 : 0); cfgFile.WriteInt(m_bLoop ? 1 : 0); cfgFile.WriteInt(m_nPreviewResX); cfgFile.WriteInt(m_nPreviewResY); cfgFile.WriteFloat(m_fViewportHeight); cfgFile.WriteInt(m_bShowStats ? 1 : 0); cfgFile.WriteInt(m_bRenderToAvi ? 1 : 0); cfgFile.WriteStringZero(m_strAviFile); cfgFile.Close(); }
INT_PTR MorphByBoneParamsMapDlgProcProp::DlgProc(TimeValue t,IParamMap2 *map,HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { mod->iEditButton = GetICustButton(GetDlgItem(hWnd, IDC_EDITMORPH)); mod->iEditButton->SetType(CBT_CHECK); mod->iEditButton->SetHighlightColor(GREEN_WASH); mod->iNodeButton = GetICustButton(GetDlgItem(hWnd, IDC_EXTERNALNODE)); mod->iNodeButton->SetType(CBT_CHECK); mod->iNodeButton->SetHighlightColor(GREEN_WASH); mod->iDeleteMorphButton = GetICustButton(GetDlgItem(hWnd, IDC_DELETEMORPH_BUTTON)); mod->iCreateMorphButton = GetICustButton(GetDlgItem(hWnd, IDC_CREATEMORPH_BUTTON)); mod->iResetMorphButton = GetICustButton(GetDlgItem(hWnd, IDC_RESET_BUTTON)); mod->iClearVertsButton = GetICustButton(GetDlgItem(hWnd, IDC_CLEARVERTICES)); mod->iRemoveVertsButton = GetICustButton(GetDlgItem(hWnd, IDC_REMOVEVERTICES)); mod->iReloadButton = GetICustButton(GetDlgItem(hWnd, IDC_RELOAD_BUTTON)); mod->iGraphButton = GetICustButton(GetDlgItem(hWnd, IDC_EDITGRAPH)); mod->iNameField = GetICustEdit(GetDlgItem(hWnd, IDC_NAME)); mod->iInfluenceAngleSpinner = GetISpinner(GetDlgItem(hWnd, IDC_ANGLE_SPIN)); mod->hwndFalloffDropList = GetDlgItem(hWnd, IDC_FALLOFF_COMBO); mod->hwndJointTypeDropList = GetDlgItem(hWnd, IDC_JOINTTYPE_COMBO); mod->hwndSelectedVertexCheckBox = GetDlgItem(hWnd, IDC_RELOADSELECTED_CHECK); mod->hwndEnabledCheckBox = GetDlgItem(hWnd, IDC_ENABLED_CHECK); mod->UpdateLocalUI(); mod->rollupPropHWND = hWnd; break; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_CLEARVERTICES: { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.clearSelectedVertices"), 0, 0); mod->ClearSelectedVertices(FALSE); mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime()); break; } case IDC_REMOVEVERTICES: { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.deleteSelectedVertices"), 0, 0); mod->ClearSelectedVertices(TRUE); mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime()); break; } case IDC_CREATEMORPH_BUTTON: { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.createMorph"), 1, 0,mr_reftarg,mod->GetNode(mod->currentBone)); mod->CreateMorph(mod->GetNode(mod->currentBone),TRUE); break; } case IDC_DELETEMORPH_BUTTON: { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.removeMorph"), 2, 0, mr_reftarg,mod->GetNode(mod->currentBone), mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph) ); mod->DeleteMorph(mod->currentBone, mod->currentMorph); mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime()); break; } case IDC_EDITMORPH: { if (mod->iEditButton->IsChecked()) { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.editMorph"), 1, 0, mr_bool,TRUE); mod->editMorph = TRUE; GetCOREInterface()->SetSubObjectLevel(1); mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime()); } else { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.editMorph"), 1, 0, mr_bool,FALSE); mod->editMorph = FALSE; mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime()); } break; } case IDC_EXTERNALNODE: { thePickMode.mod = mod; thePickMode.pickExternalNode = TRUE; GetCOREInterface()->SetPickMode(&thePickMode); break; } case IDC_RELOAD_BUTTON: { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.reloadTarget"), 2, 0, mr_reftarg,mod->GetNode(mod->currentBone), mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph) ); mod->ReloadMorph(mod->currentBone, mod->currentMorph); mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime()); break; } case IDC_EDITGRAPH: { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.editFalloffGraph"), 2, 0, mr_reftarg,mod->GetNode(mod->currentBone), mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph) ); mod->BringUpGraph(mod->currentBone, mod->currentMorph); break; } case IDC_RESET_BUTTON: { macroRecorder->FunctionCall(_T("$.modifiers[#Skin_Morph].skinMorphOps.resetOrientation"), 2, 0, mr_reftarg,mod->GetNode(mod->currentBone), mr_string,mod->GetMorphName(mod->GetNode(mod->currentBone),mod->currentMorph) ); mod->ResetMorph(mod->currentBone, mod->currentMorph); mod->NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime()); break; } } break; } } return FALSE; }