bool __fastcall TUI_CustomControl::DefaultMovingProcess(TShiftState Shift, Fvector& amount){ if (Shift.Contains(ssLeft)||Shift.Contains(ssRight)){ amount.mul( m_MovingXVector, UI->m_MouseSM * UI->m_DeltaCpH.x ); amount.mad( amount, m_MovingYVector, -UI->m_MouseSM * UI->m_DeltaCpH.y ); if( Tools->GetSettings(etfMSnap) ){ CHECK_SNAP(m_MovingReminder.x,amount.x,Tools->m_MoveSnap); CHECK_SNAP(m_MovingReminder.y,amount.y,Tools->m_MoveSnap); CHECK_SNAP(m_MovingReminder.z,amount.z,Tools->m_MoveSnap); } if (!(etAxisX==Tools->GetAxis())&&!(etAxisZX==Tools->GetAxis())) amount.x = 0.f; if (!(etAxisZ==Tools->GetAxis())&&!(etAxisZX==Tools->GetAxis())) amount.z = 0.f; if (!(etAxisY==Tools->GetAxis())) amount.y = 0.f; return (amount.square_magnitude()>EPS_S); } return false; }
void __fastcall TUI_CustomControl::RotateProcess(TShiftState _Shift) { if (_Shift.Contains(ssLeft)){ float amount = -UI->m_DeltaCpH.x * UI->m_MouseSR; if( Tools->GetSettings(etfASnap) ) CHECK_SNAP(m_fRotateSnapAngle,amount,Tools->m_RotateSnapAngle); ObjectList lst; if (Scene->GetQueryObjects(lst,LTools->CurrentClassID(),1,1,0)) for(ObjectIt _F = lst.begin();_F!=lst.end();_F++) if( Tools->GetSettings(etfCSParent) ){ (*_F)->RotateParent( m_RotateVector, amount ); } else { (*_F)->RotateLocal( m_RotateVector, amount ); } } }
void __fastcall TUI_ControlAIMapNodeRotate::Move(TShiftState _Shift) { if (_Shift.Contains(ssLeft)){ float amount = -UI->m_DeltaCpH.x * UI->m_MouseSR; if( Tools->GetSettings(etfASnap) ) CHECK_SNAP(m_fRotateSnapAngle,amount,Tools->m_RotateSnapAngle); Fmatrix R; if (fis_zero(m_RotateVector.x)) R.rotateZ(amount); else R.rotateX(amount); AINodeVec& lst = ((ESceneAIMapTool*)parent_tool)->Nodes(); for(AINodeIt _F = lst.begin();_F!=lst.end();_F++) if((*_F)->flags.is(SAINode::flSelected)){ Fvector new_n; R.transform_dir(new_n,(*_F)->Plane.n); if (Fvector().set(0,1,0).dotproduct(new_n)>0.02f){ (*_F)->Plane.build((*_F)->Pos,new_n); } } } }