|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include "HTracker.h"
|
|
|
|
|
|
#include "SigmaDoc.h"
|
|
|
|
|
|
#include "ScaleMotionGraphDrawer.h"
|
|
|
|
|
|
#include "PanMotionGraphDrawer.h"
|
|
|
|
|
|
#include "RotationMotionGraphDrawer.h"
|
|
|
|
|
|
#include "ShearMotionGraphDrawer.h"
|
|
|
|
|
|
#include "SelectedItemMotionGraphDrawer.h"
|
|
|
|
|
|
|
|
|
|
|
|
bool GraphItemTransform(Gdiplus::Matrix * pMat, CPositionList & selectionSet, CSigmaDoc * pDoc);
|
|
|
|
|
|
|
|
|
|
|
|
//Tracker<65><72>״̬
|
|
|
|
|
|
//δ<><CEB4>ק״̬
|
|
|
|
|
|
//<2F><>ק״̬
|
|
|
|
|
|
|
|
|
|
|
|
//δ<><CEB4>ק״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>û<EFBFBD><C3BB><EFBFBD>ѡ<EFBFBD><D1A1>ͼԪ
|
|
|
|
|
|
//<2F><>ק״̬:
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<5D><>[ѡ<><EFBFBD><F1BCAFB2><EFBFBD>]<5D><>[<5B><><EFBFBD><EFBFBD>Handle]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<5D><>[<5B><><EFBFBD><EFBFBD>Handle]
|
|
|
|
|
|
//<2F>˳<EFBFBD><CBB3><EFBFBD>ק״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>]/[<5B><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>]<5D><>[δ<><CEB4><EFBFBD><EFBFBD>Handle]
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD><C2B0><EFBFBD>̧<EFBFBD><CCA7>]<5D><>[δ<><CEB4><EFBFBD><EFBFBD>Handle]
|
|
|
|
|
|
|
|
|
|
|
|
HTracker::HTracker()
|
|
|
|
|
|
:m_status(HTRACKER_STATUS_HIDE),
|
|
|
|
|
|
m_HandleSize(12),
|
|
|
|
|
|
m_pDoc(NULL),
|
|
|
|
|
|
m_motionCount(0),
|
|
|
|
|
|
m_transformKind(HTRACKER_TRANSFORM_KIND_SCALE)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_pScaleMotionGraphDrawer = new ScaleMotionGraphDrawer();
|
|
|
|
|
|
m_pPanMotionGraphDrawer = new PanMotionGraphDrawer();
|
|
|
|
|
|
m_pRotationMotionGraphDrawer = new RotationMotionGraphDrawer() ;
|
|
|
|
|
|
m_pShearMotionGraphDrawer = new ShearMotionGraphDrawer();
|
|
|
|
|
|
m_pTMGDrawer = m_pScaleMotionGraphDrawer;
|
|
|
|
|
|
|
|
|
|
|
|
m_pSIMGDrawer = new SelectedItemMotionGraphDrawer();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
HTracker::~HTracker()
|
|
|
|
|
|
{
|
|
|
|
|
|
delete m_pSIMGDrawer;
|
|
|
|
|
|
m_pSIMGDrawer = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
delete m_pScaleMotionGraphDrawer;
|
|
|
|
|
|
m_pScaleMotionGraphDrawer = NULL;
|
|
|
|
|
|
delete m_pPanMotionGraphDrawer;
|
|
|
|
|
|
m_pPanMotionGraphDrawer = NULL;
|
|
|
|
|
|
delete m_pRotationMotionGraphDrawer;
|
|
|
|
|
|
m_pRotationMotionGraphDrawer = NULL;
|
|
|
|
|
|
delete m_pShearMotionGraphDrawer;
|
|
|
|
|
|
m_pShearMotionGraphDrawer = NULL;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool HTracker::Create(CSigmaDoc * pDoc, CPositionList & selectionSet)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (selectionSet.IsEmpty() || pDoc == NULL)
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
m_boundRect.SetRectEmpty();
|
|
|
|
|
|
m_pDoc = pDoc;
|
|
|
|
|
|
m_motionCount = 0;
|
|
|
|
|
|
m_switch.Reset();
|
|
|
|
|
|
m_drawer.Reset();
|
|
|
|
|
|
m_transformKind = HTRACKER_TRANSFORM_KIND_SCALE;
|
|
|
|
|
|
|
|
|
|
|
|
CopySelectionSet(selectionSet);
|
|
|
|
|
|
|
|
|
|
|
|
m_pSIMGDrawer->Init(pDoc, &selectionSet);
|
|
|
|
|
|
m_pTMGDrawer = m_pScaleMotionGraphDrawer;
|
|
|
|
|
|
m_pTMGDrawer->SetSIMGDrawer(m_pSIMGDrawer);
|
|
|
|
|
|
m_pTMGDrawer->CopyMatrix(m_trackerTransform.GetMatrix());
|
|
|
|
|
|
|
|
|
|
|
|
if (m_bound.CreateBoundRect(pDoc, selectionSet, m_boundRect) == false)
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
m_handleCalctor.Calculate(m_boundRect);
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::LButtonDown(int mouseX, int mouseY)
|
|
|
|
|
|
{
|
|
|
|
|
|
HTRACKER_HANDLE_KIND handleKind = HitTest(mouseX, mouseY);
|
|
|
|
|
|
m_motionCount = 0;
|
|
|
|
|
|
if (handleKind == HTRACKER_HANDLE_KIND_INVALID)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_status = HTRACKER_STATUS_HIDE;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_pTMGDrawer->LButtonDown(mouseX, mouseY);
|
|
|
|
|
|
m_switch.HitHandle();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Handle,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק״̬
|
|
|
|
|
|
m_status = HTRACKER_STATUS_DRAGING;
|
|
|
|
|
|
|
|
|
|
|
|
CPoint mousePt(mouseX, mouseY);
|
|
|
|
|
|
|
|
|
|
|
|
m_trackerTransform.Init((int)handleKind, m_boundRect, mousePt); //<2F><><EFBFBD>Ż<EFBFBD>ƽ<EFBFBD>Ʊ任
|
|
|
|
|
|
m_transformKind = JudgeTransformKind(handleKind);
|
|
|
|
|
|
ChangeGraphDrawer();
|
|
|
|
|
|
ChangeHtrackerDrawerState();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::MouseMove(CDC * pDC, int mouseX, int mouseY)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_status == HTRACKER_STATUS_HIDE)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
if (m_status == HTRACKER_STATUS_NOT_DRAG)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
CPoint mousePt(mouseX, mouseY);
|
|
|
|
|
|
m_switch.MouseMove();
|
|
|
|
|
|
m_trackerTransform.SetKind(this->m_transformKind);
|
|
|
|
|
|
m_trackerTransform.Draging(mousePt);
|
|
|
|
|
|
|
|
|
|
|
|
//֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק״̬
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6>˳<EFBFBD><CBB3><EFBFBD>ק״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>״̬
|
|
|
|
|
|
//2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㲻<EFBFBD><E3B2BB>Handle<6C><65>
|
|
|
|
|
|
//һ<><D2BB><EFBFBD>жϳ<D0B6><CFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק״̬<D7B4><CCAC><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>ק״̬
|
|
|
|
|
|
|
|
|
|
|
|
HTRACKER_HANDLE_KIND handleKind = HitTest(mouseX, mouseY);
|
|
|
|
|
|
|
|
|
|
|
|
SHORT lbttonStatus = ::GetAsyncKeyState(VK_LBUTTON);
|
|
|
|
|
|
if (handleKind == HTRACKER_HANDLE_KIND_INVALID && lbttonStatus == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_status = HTRACKER_STATUS_NOT_DRAG; //<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ק״̬<D7B4><CCAC>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>tracker.
|
|
|
|
|
|
GraphItemTransform(m_trackerTransform.GetMatrix(), m_selectionSet, m_pDoc);
|
|
|
|
|
|
m_trackerTransform.EndDrag();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_motionCount++;
|
|
|
|
|
|
if (m_motionCount == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_drawer.Draw(pDC, m_boundRect); //<2F><><EFBFBD><EFBFBD>tracker
|
|
|
|
|
|
m_pTMGDrawer->FirstDraw(pDC, m_trackerTransform.GetMatrix(), mouseX, mouseY);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
m_pTMGDrawer->Draw(pDC, m_trackerTransform.GetMatrix(), mouseX, mouseY);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::LButtonUp(int mouseX, int mouseY)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>д<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|
|
|
|
|
//<2F><>Handle<6C><65><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ƶ<EFBFBD>.
|
|
|
|
|
|
HTRACKER_HANDLE_KIND handleKind = HitTest(mouseX, mouseY);
|
|
|
|
|
|
if (m_motionCount == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_switch.ButtonUp(handleKind);
|
|
|
|
|
|
m_transformKind = JudgeTransformKind(handleKind);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ChangeGraphDrawer();
|
|
|
|
|
|
ChangeHtrackerDrawerState();
|
|
|
|
|
|
|
|
|
|
|
|
m_status = HTRACKER_STATUS_NOT_DRAG;
|
|
|
|
|
|
m_motionCount = 0;
|
|
|
|
|
|
GraphItemTransform(m_trackerTransform.GetMatrix(), m_selectionSet, m_pDoc);
|
|
|
|
|
|
m_pSIMGDrawer->Init(m_pDoc, &m_selectionSet);
|
|
|
|
|
|
|
|
|
|
|
|
m_bound.CreateBoundRect(m_pDoc, m_selectionSet, m_boundRect);
|
|
|
|
|
|
m_trackerTransform.EndDrag();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::Draw(CDC * pDC)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_boundRect.IsRectEmpty())
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
CRect boundRect;
|
|
|
|
|
|
TranslateBoundRect(boundRect);
|
|
|
|
|
|
|
|
|
|
|
|
m_drawer.Draw(pDC, boundRect);
|
|
|
|
|
|
m_handleCalctor.Calculate(boundRect);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool HTracker::IsDraging()
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_status == HTRACKER_STATUS_DRAGING;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::Reset()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_status = HTRACKER_STATUS_HIDE;
|
|
|
|
|
|
m_selectionSet.RemoveAll();
|
|
|
|
|
|
m_boundRect.SetRectEmpty();
|
|
|
|
|
|
m_handleCalctor.Reset();
|
|
|
|
|
|
m_trackerTransform.EndDrag();
|
|
|
|
|
|
m_motionCount = 0;
|
|
|
|
|
|
m_switch.Reset();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
HTRACKER_HANDLE_KIND HTracker::HitTest(int mouseX, int mouseY)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_selectionSet.IsEmpty())
|
|
|
|
|
|
return HTRACKER_HANDLE_KIND_INVALID;
|
|
|
|
|
|
|
|
|
|
|
|
CPoint point(mouseX, mouseY);
|
|
|
|
|
|
int i = -1;
|
|
|
|
|
|
for (i = 0; i < 9; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_handleCalctor.GetHandleRect(i).PtInRect(point))
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (i == -1)
|
|
|
|
|
|
return HTRACKER_HANDLE_KIND_INVALID;
|
|
|
|
|
|
|
|
|
|
|
|
//i<><69>ȡֵ<C8A1><D6B5>Χ:[0,8]
|
|
|
|
|
|
return HTRACKER_HANDLE_KIND(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool HTracker::IsRotateAndShearState()
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_switch.IsRotationAndShear();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::CopySelectionSet(CPositionList & selectionSet)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_selectionSet.RemoveAll();
|
|
|
|
|
|
m_selectionSet.AddTail(&selectionSet);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::TranslateBoundRect(CRect & boundRectOut)
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>Ӧ<EFBFBD><D3A6>ϵ
|
|
|
|
|
|
// 0----------1
|
|
|
|
|
|
// | |
|
|
|
|
|
|
// | |
|
|
|
|
|
|
// 3----------2
|
|
|
|
|
|
Gdiplus::Point cornerPts[4];
|
|
|
|
|
|
cornerPts[0].X = cornerPts[3].X = m_boundRect.left;
|
|
|
|
|
|
cornerPts[0].Y = cornerPts[1].Y = m_boundRect.top;
|
|
|
|
|
|
cornerPts[1].X = cornerPts[2].X = m_boundRect.right;
|
|
|
|
|
|
cornerPts[2].Y = cornerPts[3].Y = m_boundRect.bottom;
|
|
|
|
|
|
|
|
|
|
|
|
Gdiplus::Matrix * matrix = m_trackerTransform.GetMatrix();
|
|
|
|
|
|
matrix->TransformPoints(cornerPts, 4);
|
|
|
|
|
|
|
|
|
|
|
|
boundRectOut.SetRect(cornerPts[0].X, cornerPts[0].Y, cornerPts[2].X, cornerPts[2].Y);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//ֻ<><D6BB><EFBFBD><EFBFBD>LButtonDown<77><6E>LButtonUp<55><70><EFBFBD><EFBFBD>Ч
|
|
|
|
|
|
HTRACKER_TRANSFORM_KIND HTracker::JudgeTransformKind(HTRACKER_HANDLE_KIND kind)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (kind == HTRACKER_HANDLE_KIND_INVALID)
|
|
|
|
|
|
return HTRACKER_TRANSFORM_KIND_SCALE;
|
|
|
|
|
|
|
|
|
|
|
|
if (kind == HTRACKER_HANDLE_KIND_CENTER)
|
|
|
|
|
|
return HTRACKER_TRANSFORM_KIND_MOVE;
|
|
|
|
|
|
|
|
|
|
|
|
if (m_switch.IsRotationAndShear())
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (kind)
|
|
|
|
|
|
{
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_TOP_LEFT:
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_TOP_RIGHT:
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_BOTTOM_RIGHT:
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_BOTTOM_LEFT:
|
|
|
|
|
|
return HTRACKER_TRANSFORM_KIND_ROTATION;
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_TOP:
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_RIGTH:
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_BOTTOM:
|
|
|
|
|
|
case HTRACKER_HANDLE_KIND_LEFT:
|
|
|
|
|
|
return HTRACKER_TRANSFORM_KIND_SHEAR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return HTRACKER_TRANSFORM_KIND_SHEAR;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return HTRACKER_TRANSFORM_KIND_SCALE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::ChangeGraphDrawer()
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (m_transformKind)
|
|
|
|
|
|
{
|
|
|
|
|
|
case HTRACKER_TRANSFORM_KIND_SCALE:
|
|
|
|
|
|
m_pTMGDrawer = m_pScaleMotionGraphDrawer;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case HTRACKER_TRANSFORM_KIND_MOVE:
|
|
|
|
|
|
m_pTMGDrawer = m_pPanMotionGraphDrawer;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case HTRACKER_TRANSFORM_KIND_ROTATION:
|
|
|
|
|
|
m_pTMGDrawer = m_pRotationMotionGraphDrawer;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case HTRACKER_TRANSFORM_KIND_SHEAR:
|
|
|
|
|
|
m_pTMGDrawer = m_pShearMotionGraphDrawer;
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
m_pTMGDrawer = m_pScaleMotionGraphDrawer;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
m_pTMGDrawer->SetSIMGDrawer(m_pSIMGDrawer);
|
|
|
|
|
|
m_pTMGDrawer->CopyMatrix(m_trackerTransform.GetMatrix());
|
|
|
|
|
|
m_pTMGDrawer->SetBoundRect(m_boundRect);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HTracker::ChangeHtrackerDrawerState()
|
|
|
|
|
|
{
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>״̬<D7B4><CCAC><EFBFBD>ı<F2B2BBB8>drawer<65><72><EFBFBD><EFBFBD>ת״̬<D7B4><CCAC>
|
|
|
|
|
|
//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ת<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ת״̬<D7B4>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ͼԪ<CDBC><D4AA>
|
|
|
|
|
|
//<2F><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bug:Trackerͼ<72><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>д<EFBFBD>״̬<D7B4>У<EFBFBD>ִ<EFBFBD><D6B4>ƽ<EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//֮<><D6AE><EFBFBD><EFBFBD>trackerͼ<72>α<EFBFBD><CEB1><EFBFBD>ƽ<EFBFBD><C6BD>ͼ<EFBFBD>Ρ<EFBFBD>
|
|
|
|
|
|
if (m_transformKind == HTRACKER_TRANSFORM_KIND_SCALE)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_drawer.SetRotateAndShearState(false);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (m_transformKind == HTRACKER_TRANSFORM_KIND_ROTATION
|
|
|
|
|
|
|| m_transformKind == HTRACKER_TRANSFORM_KIND_SHEAR)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_drawer.SetRotateAndShearState(true);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|