MFC中简单图形的平移与简单旋转

 #include "stdafx.h"
 #include "hui.h"
 #include "HuiTu.h"//为自己建立的主程序头文件


hui::hui()
: m_ptOrigin(0)
, m_ptEnd(0)
, m_nDrawType(0)
, pbrush(0)
, m_left(0)
, m_right(0)
, pi(3.1415921253589793238412)
, rotateNum(0)
{
}

hui::hui(int m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd, COLORREF m_color, int m_index,int m_nlineWide, int m_nlineStyle, CString text)//用指针储存变量
{
this->m_nDrawType = m_nDrawType;
this->m_ptOrigin = m_ptOrigin;
this->m_ptEnd = m_ptEnd;
this->m_color = m_color;
this->m_index = m_index;
this->m_nlineWide = m_nlineWide;
this->m_nlineStyle = m_nlineStyle;
this->text=text;

CPoint center(getCenter());
m_left.x = m_ptOrigin.x;
m_left.y = 2 * center.y - m_ptOrigin.y;
m_right.x = m_ptEnd.x;
m_right.y = 2 * center.y - m_ptEnd.y;
 rotateNum = 0;
 }

hui::~hui()
{
}
CPoint hui::getCenter()//计算中心
{
return CPoint((m_ptOrigin.x + m_ptEnd.x)/2, (m_ptOrigin.y + m_ptEnd.y)/2);
}


void hui::rotateNi()//逆时针旋转
{
if (m_nDrawType == 2 || m_nDrawType == 3)
{
    CPoint center(getCenter());
    int x, y;
    x = static_cast((m_ptOrigin.x - center.x) * cos(pi / 12) - (m_ptOrigin.y - center.y) * sin(pi / 12)) + center.x;
    y = static_cast((m_ptOrigin.x - center.x) * sin(pi / 12) + (m_ptOrigin.y - center.y) * cos(pi / 12)) + center.y;
    m_ptOrigin.x = x;
    m_ptOrigin.y = y;
    x = static_cast((m_ptEnd.x - center.x) * cos(pi / 12) - (m_ptEnd.y - center.y) * sin(pi / 12)) + center.x;
    y = static_cast((m_ptEnd.x - center.x) * sin(pi / 12) + (m_ptEnd.y - center.y) * cos(pi / 12)) + center.y;
    m_ptEnd.x = x;
    m_ptEnd.y = y;
    x = static_cast((m_left.x - center.x) * cos(pi / 12) - (m_left.y - center.y) * sin(pi / 12)) + center.x;
    y = static_cast((m_left.x - center.x) * sin(pi / 12) + (m_left.y - center.y) * cos(pi / 12)) + center.y;
    m_left.x = x;
    m_left.y = y;
    x = static_cast((m_right.x - center.x) * cos(pi / 12) - (m_right.y - center.y) * sin(pi / 12)) + center.x;
    y = static_cast((m_right.x - center.x) * sin(pi / 12) + (m_right.y - center.y) * cos(pi / 12)) + center.y;
    m_right.x = x;
    m_right.y = y;
}
if (m_nDrawType == 4)
{
    CPoint center(getCenter());
    int x, y;
    x = static_cast(-(m_ptOrigin.y - center.y)) + center.x;
    y = static_cast(m_ptOrigin.x - center.x) + center.y;
    m_ptOrigin.x = x;
    m_ptOrigin.y = y;
    x = static_cast(-(m_ptEnd.y - center.y)) + center.x;
    y = static_cast(m_ptEnd.x - center.x) + center.y;
    m_ptEnd.x = x;
    m_ptEnd.y = y;
}
}

void hui::larger()//变大
{
CPoint pttemp(m_ptOrigin - getCenter());
m_ptOrigin.x = m_ptOrigin.x + pttemp.x / 5;
m_ptOrigin.y = m_ptOrigin.y + pttemp.y / 5;
m_ptEnd.x = m_ptEnd.x - pttemp.x / 5;
m_ptEnd.y = m_ptEnd.y - pttemp.y / 5;
pttemp = m_left - getCenter();
m_left.x = m_left.x + pttemp.x / 5;
m_left.y = m_left.y + pttemp.y / 5;
m_right.x = m_right.x - pttemp.x / 5;
m_right.y = m_right.y - pttemp.y / 5;
}


void hui::smaller()//变小
{
CPoint pttemp(m_ptOrigin - getCenter());
m_ptOrigin.x = m_ptOrigin.x - pttemp.x / 10;
m_ptOrigin.y = m_ptOrigin.y - pttemp.y / 10;
m_ptEnd.x = m_ptEnd.x + pttemp.x / 10;
m_ptEnd.y = m_ptEnd.y + pttemp.y / 10;
pttemp = m_left - getCenter();
m_left.x = m_left.x - pttemp.x / 10;
m_left.y = m_left.y - pttemp.y / 10;
m_right.x = m_right.x + pttemp.x / 10;
m_right.y = m_right.y + pttemp.y / 10;
}

void hui::moveup()//上移
{
int x, y;
x = static_cast(m_ptOrigin.x);
y = static_cast(m_ptOrigin.y -4);
m_ptOrigin.x = x;
m_ptOrigin.y = y;
x = static_cast(m_ptEnd.x);
y = static_cast(m_ptEnd.y - 4);
m_ptEnd.x = x;
m_ptEnd.y = y;
x = static_cast(m_left.x);
y = static_cast(m_left.y-4);
m_left.x = x;
m_left.y = y;
x = static_cast(m_right.x);
y = static_cast(m_right.y-4);
m_right.x = x;
m_right.y = y;
}


void hui::movedown()//下移
{
int x, y;
x = static_cast(m_ptOrigin.x);
y = static_cast(m_ptOrigin.y + 4);
m_ptOrigin.x = x;
m_ptOrigin.y = y;
x = static_cast(m_ptEnd.x);
y = static_cast(m_ptEnd.y +4);
m_ptEnd.x = x;
m_ptEnd.y = y;
x = static_cast(m_left.x);
y = static_cast(m_left.y +4);
m_left.x = x;
m_left.y = y;
x = static_cast(m_right.x);
y = static_cast(m_right.y +4);
m_right.x = x;
m_right.y = y;
}


void hui::moveleft()//左移
{
//m_ptOrigin.x -= 4;
//m_ptEnd.x -= 4;
int x, y;
x = static_cast(m_ptOrigin.x-4);
y = static_cast(m_ptOrigin.y);
m_ptOrigin.x = x;
m_ptOrigin.y = y;
x = static_cast(m_ptEnd.x-4);
y = static_cast(m_ptEnd.y);
m_ptEnd.x = x;
m_ptEnd.y = y;
x = static_cast(m_left.x-4);
y = static_cast(m_left.y);
m_left.x = x;
m_left.y = y;
x = static_cast(m_right.x-4);
y = static_cast(m_right.y);
m_right.x = x;
m_right.y = y;
}


 void hui::moveright()//右移
{
//m_ptOrigin.x += 4;
//m_ptEnd.x += 4;
int x, y;
x = static_cast(m_ptOrigin.x + 4);
y = static_cast(m_ptOrigin.y);
m_ptOrigin.x = x;
m_ptOrigin.y = y;
x = static_cast(m_ptEnd.x + 4);
y = static_cast(m_ptEnd.y);
m_ptEnd.x = x;
m_ptEnd.y = y;
x = static_cast(m_left.x + 4);
y = static_cast(m_left.y);
m_left.x = x;
m_left.y = y;
x = static_cast(m_right.x + 4);
y = static_cast(m_right.y);
m_right.x = x;
m_right.y = y;
}


void hui::rotateShun()//顺时针旋转
{
if (m_nDrawType == 2 || m_nDrawType == 3)
{
    CPoint center(getCenter());
    int x, y;
    //m_left.x = m_ptOrigin.x;
    //m_left.y = 2 * center.y - m_ptOrigin.y;

    //m_right.x = m_ptEnd.x;
    //m_right.y = 2 * center.y - m_ptEnd.y;
    x = static_cast((m_ptOrigin.x - center.x) * cos(-1 * pi / 12) - (m_ptOrigin.y - center.y) * sin(-1 * pi / 12)) + center.x;
    y = static_cast((m_ptOrigin.x - center.x) * sin(-1 * pi / 12) + (m_ptOrigin.y - center.y) * cos(-1 * pi / 12)) + center.y;
    m_ptOrigin.x = x;
    m_ptOrigin.y = y;
    x = static_cast((m_ptEnd.x - center.x) * cos(-1 * pi / 12) - (m_ptEnd.y - center.y) * sin(-1 * pi / 12)) + center.x;
    y = static_cast((m_ptEnd.x - center.x) * sin(-1 * pi / 12) + (m_ptEnd.y - center.y) * cos(-1 * pi / 12)) + center.y;
    m_ptEnd.x = x;
    m_ptEnd.y = y;
    x = static_cast((m_left.x - center.x) * cos(-1 * pi / 12) - (m_left.y - center.y) * sin(-1 * pi / 12)) + center.x;
    y = static_cast((m_left.x - center.x) * sin(-1 * pi / 12) + (m_left.y - center.y) * cos(-1 * pi / 12)) + center.y;
    m_left.x = x;
    m_left.y = y;
    x = static_cast((m_right.x - center.x) * cos(-1 * pi / 12) - (m_right.y - center.y) * sin(-1 * pi / 12)) + center.x;
    y = static_cast((m_right.x - center.x) * sin(-1 * pi / 12) + (m_right.y - center.y) * cos(-1 * pi / 12)) + center.y;
    m_right.x = x;
    m_right.y = y;
}
if (m_nDrawType == 4)
{
    CPoint center(getCenter());
    int x, y;
    x = static_cast( - (m_ptOrigin.y - center.y)) + center.x;
    y = static_cast(m_ptOrigin.x - center.x)  + center.y;
    m_ptOrigin.x = x;
    m_ptOrigin.y = y;
    x = static_cast( - (m_ptEnd.y - center.y)) + center.x;
    y = static_cast(m_ptEnd.x - center.x)   + center.y;
    m_ptEnd.x = x;
    m_ptEnd.y = y;
}

}

void hui::drawRec(CDC* pDC)//矩形的线段画法
{
CPoint pts[4];
CPoint center(getCenter());
if (m_nDrawType == 3)

{
    pts[0] = m_ptOrigin;
    pts[1] = m_left;
    pts[2] = m_ptEnd;
    pts[3] = m_right;
    pDC->MoveTo(pts[0]);
    pDC->LineTo(pts[1]);
    pDC->LineTo(pts[2]);
    pDC->LineTo(pts[3]);
    pDC->LineTo(pts[0]);
    pDC->Polygon(pts, 4);
}
}

在用此类之前要定义变量CPtrArray m_ptrArray;

在何时添加或储存则用以下
hui *pGraph = new hui(m_nDrawType,m_ptOrigin,point, m_color, index, m_nlineWide, m_nlineStyle,text);//申请空间(其中变量还可以添加但前面的声明也要加入要添加的新变量)
m_ptrArray.Add(pGraph);//将要储存的变量添加到指针

调用函数或变量
((hui*)m_ptrArray.GetAt(i))->drawRec(pDC);//调用函数
((hui*)m_ptrArray[m_ptrArray.GetSize() - 1])->moveup();//调用函数(数组方式的调用即只对最后一组变量的调用)
((hui*)m_ptrArray.GetAt(i))->m_ptOrigin;//调用变量(用for语句可以调用所有的储存的变量)

你可能感兴趣的:(MFC)