Пример #1
0
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;
}
Пример #2
0
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 );
                }
    }
}
Пример #3
0
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);           	
                }
            }
    }
}