void BaseLimitCtrl::SetValue(TimeValue in_t, void *in_val, int in_commit, GetSetMethod in_method) { if(GetLocked()==false) { if (IsEnabled()) { if (in_method == CTRL_RELATIVE) GetTypedValueAbsolute(in_t, in_val); ClampTypedValue(in_t, in_val); } // Check if we have a controller assigned. If so, SetValue on it, if it's not locked! Control *limitedCtrl = GetLimitedControl(); if (limitedCtrl) { limitedCtrl->SetValue(in_t, in_val, in_commit, IsEnabled()? CTRL_ABSOLUTE: in_method); } else { // If in AutoKey or SetKey mode, ParamBlock::SetValue() and ParamBlock2::SetValue() // create a default controller (an fcurve) and then set key on that // controller. So if there is no limited controller, I'll do the same: // create one, and set key on it. if (GetSetKeyMode() || (Animating() && GetCOREInterface10()->GetAutoKeyDefaultKeyOn() && (in_t!=0) && (in_t!=GetCOREInterface10()->GetAutoKeyDefaultKeyTime()))) { // Create the proper default controller according to type Control *newLimitedCtrl = GetDefaultControlForDataType(); if (newLimitedCtrl) { void* ptrVal = CreateTempValue(); GetStaticValue(ptrVal, in_method); SetLimitedControl(newLimitedCtrl); if (GetSetKeyMode()) { ISetKey *skey = (ISetKey *)newLimitedCtrl->GetInterface(I_SETKEYCONTROL); if (skey) skey->SetCurrentValue(ptrVal); newLimitedCtrl->SetValue(in_t, in_val); } else { newLimitedCtrl->SetValue(TimeValue(GetCOREInterface10()->GetAutoKeyDefaultKeyTime()), ptrVal); newLimitedCtrl->SetValue(in_t, in_val); } DeleteTempValue(ptrVal); } } // Set the limit controller static value SetStaticValue(in_val, CTRL_ABSOLUTE); } } }
void UtilTest::Init(HWND hWnd) { CheckDlgButton(hWnd, IDC_SETKEY_MODE, GetSetKeyMode()); }