📄 drawpicture.cpp
字号:
// DrawPicture.cpp: implementation of the DrawPicture class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Designer.h"
#include "DrawPicture.h"
#include "DesignerView.h"
#include "DIBAPI.h"
#include "math.h"
#include "MainFrm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define LINELENTH 50
extern int global_STEP;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DrawPicture::DrawPicture()
{
PaneNum =0;
}
DrawPicture::~DrawPicture()
{
}
void DrawPicture::Line(CPoint pFrom, CPoint pEnd, CDC *dc,COLORREF rgb,int steplen,float m_jwm,CPoint scroll,bool Saveornot)
{
}
#define PI 3.1415926
void DrawPicture::Circle(CDC *pDC, CPoint MousePosition, COLORREF rgb,float m_jwm, bool saveornot,CPoint scroll,RECTSINFO* PCircle)
{
CBrush cbr;
cbr.CreateSolidBrush(rgb);
int templen = (int)(global_STEP*m_jwm);
CPoint temp ;
temp.x = PCircle->LeftTop.x + scroll.x;
temp.y = PCircle->LeftTop.y + scroll.y;
int radius =(int) (sqrt((MousePosition.x -PCircle->LeftTop.x )*(MousePosition.x - PCircle->LeftTop.x )+(MousePosition.y - PCircle->LeftTop.y)*(MousePosition.y - PCircle->LeftTop.y)));
CPoint wglocation ;
double step = 2*PI/180;
for(int i =0;i<4*LINENUM;i++)
PCircle->RectsInfo[i].location.x = PCircle->RectsInfo[i].location.y = -1;
CPoint currentPoint;
PCircle->RectLen=1;
for(double theta=0.0;theta<=2*PI;theta+=step)
{
int xoffset = (int)(radius*cos(theta));
int yoffset = (int)(radius*sin(theta));
currentPoint.x = PCircle->LeftTop.x + xoffset+scroll.x;
currentPoint.y = PCircle->LeftTop.y + yoffset+scroll.y;
CPoint kkk(0,0);
wglocation = gLocatePoint(currentPoint,m_jwm,kkk);
if(PCircle->RectsInfo[PCircle->RectLen-1].location.x != wglocation.x ||
PCircle->RectsInfo[PCircle->RectLen-1].location.y != wglocation.y)
{
PCircle->RectsInfo[PCircle->RectLen].location = wglocation;
PCircle->RectLen++;
}
}
CMainFrame * pFrame = static_cast <CMainFrame *>(AfxGetMainWnd());
CDesignerView *m_pShowPhotoView = pFrame->GetMainView();
for( i=1;i<(int)PCircle->RectLen;i++)
{
if(PCircle->RectsInfo[i].location.x <0)
PCircle->RectsInfo[i].location.x =0;
if(PCircle->RectsInfo[i].location.y <0)
PCircle->RectsInfo[i].location.y =0;
if(PCircle->RectsInfo[i].location.x >m_pShowPhotoView->m_LineNum.x-1)
PCircle->RectsInfo[i].location.x = m_pShowPhotoView->m_LineNum.x-1;
if(PCircle->RectsInfo[i].location.y >m_pShowPhotoView->m_LineNum.y-1)
PCircle->RectsInfo[i].location.y = m_pShowPhotoView->m_LineNum.y-1;
}
for(i =1;i<(int)PCircle->RectLen;i++)
{
if((PCircle->RectsInfo[i-1].location.y == PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i-1].location.x > PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i].location.y > PCircle->RectsInfo[i+1].location.y &&
PCircle->RectsInfo[i].location.x == PCircle->RectsInfo[i+1].location.x )||
(PCircle->RectsInfo[i-1].location.x == PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i-1].location.y < PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i].location.x > PCircle->RectsInfo[i+1].location.x &&
PCircle->RectsInfo[i].location.y == PCircle->RectsInfo[i+1].location.y )||
(PCircle->RectsInfo[i-1].location.x < PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i-1].location.y == PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i].location.x == PCircle->RectsInfo[i+1].location.x &&
PCircle->RectsInfo[i].location.y < PCircle->RectsInfo[i+1].location.y )||
(PCircle->RectsInfo[i-1].location.x == PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i-1].location.y > PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i].location.x < PCircle->RectsInfo[i+1].location.x &&
PCircle->RectsInfo[i].location.y == PCircle->RectsInfo[i+1].location.y))
PCircle->RectsInfo[i].location = PCircle->RectsInfo[i-1].location;
}
if(PCircle->RectsInfo[2].location.x < PCircle->RectsInfo[1].location.x &&
PCircle->RectsInfo[2].location.y == PCircle->RectsInfo[1].location.y)
PCircle->RectsInfo[2].location = PCircle->RectsInfo[1].location;
if(PCircle->RectsInfo[PCircle->RectLen-1].location.x < PCircle->RectsInfo[1].location.x &&
PCircle->RectsInfo[PCircle->RectLen-1].location.y == PCircle->RectsInfo[1].location.y )
PCircle->RectsInfo[PCircle->RectLen-1].location = PCircle->RectsInfo[1].location;
for(i =1;i<PCircle->RectLen;i++)
{
PCircle->RectsInfo[i].pc = m_pShowPhotoView->m_picture_color[PCircle->RectsInfo[i].location.y][PCircle->RectsInfo[i].location.x];
}
for(i =1;i<(int)PCircle->RectLen;i++)
{
pDC->FillRect(CRect(PCircle->RectsInfo[i].location.x*global_STEP+OFFSET+1-scroll.x,
PCircle->RectsInfo[i].location.y *templen+OFFSET+1-scroll.y,
PCircle->RectsInfo[i].location.x *global_STEP+OFFSET+global_STEP-scroll.x,
PCircle->RectsInfo[i].location.y *templen+OFFSET-scroll.y + templen),&cbr);
if(saveornot == true)
{
m_pShowPhotoView->m_picture_edge[PCircle->RectsInfo[i].location.x][PCircle->RectsInfo[i].location.y] =TRUE;
}
}
PCircle->RightBottom = MousePosition;
cbr.DeleteObject();
}
void DrawPicture::Rectang(CDC *pDC,CPoint LeftTop,CPoint RightBottom,COLORREF rgb,int steplen,float m_jwm,bool Saveornot,CPoint Scroll)
{
CPoint lt = gLocatePoint(LeftTop,m_jwm,Scroll);
CPoint rb = gLocatePoint(RightBottom,m_jwm,Scroll);
int x = lt.x *steplen +OFFSET - Scroll.x ;
int y = lt.y *(int)(steplen *m_jwm) +OFFSET- Scroll.y;
int xx =rb.x *steplen +OFFSET-Scroll.x;
int yy = rb.y *(int)(steplen*m_jwm)+OFFSET-Scroll.y;
CBrush cbr;
cbr.CreateSolidBrush(rgb);
CMainFrame * pFrame = static_cast <CMainFrame *>(AfxGetMainWnd());
CDesignerView *m_pShowPhotoView = pFrame->GetMainView();
CPoint maxline = m_pShowPhotoView->m_LineNum;
for(int i=0;i<=rb.x-lt.x;i++)
{
if(lt.y < 0 || lt.y >maxline.y-1)
continue;
else if(lt.x+i<0 || lt.x +i > maxline.x-1 )
continue;
pDC->FillRect(CRect(x+i*steplen+1,y+1,x+(i+1)*steplen,y+(int)(steplen*m_jwm)),&cbr);
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.x = lt.x + i;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.y = lt.y;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].pc = m_pShowPhotoView->m_picture_color[lt.y][lt.x+i];
m_pShowPhotoView->m_RectsInfo.RectLen++;
}
for(i =0;i<=rb.x-lt.x;i++)
{
if(rb.y < 0 || rb.y >maxline.y-1)
continue;
else if(lt.x+i<0 || lt.x +i > maxline.x-1 )
continue;
pDC->FillRect(CRect(x+i*steplen+1,yy+1,x+(i+1)*steplen,yy+(int)(steplen*m_jwm)),&cbr);
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.x = lt.x + i;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.y = rb.y;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].pc = m_pShowPhotoView->m_picture_color[rb.y][lt.x+i];
m_pShowPhotoView->m_RectsInfo.RectLen++;
}
for(i =0;i<=rb.y-lt.y;i++)
{
if(lt.x < 0 || lt.x >maxline.x-1)
continue;
else if(lt.y+i<0 || lt.y +i > maxline.y-1 )
continue;
pDC->FillRect(CRect(x+1,y+i*(int)(steplen*m_jwm)+1,x+steplen,y+(i+1)*(int)(steplen*m_jwm)),&cbr);
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.x = lt.x ;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.y = lt.y+i;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].pc = m_pShowPhotoView->m_picture_color[lt.y+i][lt.x];
m_pShowPhotoView->m_RectsInfo.RectLen++;
}
for(i =0;i<=rb.y -lt.y ;i++)
{
if(rb.x < 0 || rb.x >maxline.x-1)
continue;
else if(lt.y+i<0 || lt.y +i > maxline.y-1 )
continue;
pDC->FillRect(CRect(xx+1,y+i*(int)(steplen*m_jwm)+1,xx+steplen,y+(i+1)*(int)(steplen*m_jwm)),&cbr);
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.x = rb.x ;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].location.y = lt.y+i;
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectLen].pc = m_pShowPhotoView->m_picture_color[lt.y+i][rb.x];
m_pShowPhotoView->m_RectsInfo.RectLen++;
}
//if(m_pShowPhotoView->m_RectsInfo.RectLen>=2*LINENUM)
// AfxMessageBox("ftaft");
cbr.DeleteObject();
if(Saveornot)
{
for( i =lt.x ;i<=rb.x ;i++)
m_pShowPhotoView->m_picture_edge[i][lt.y] = true;
for(i = lt.x ;i<=rb.x ;i++)
m_pShowPhotoView->m_picture_edge[i][rb.y] = true;
for(i=lt.y;i<=rb.y;i++)
m_pShowPhotoView->m_picture_edge[lt.x][i] = true;
for(i=lt.y;i<=rb.y;i++)
m_pShowPhotoView->m_picture_edge[rb.x][i] = true;
}
}
void DrawPicture::Polygon(CDC *pDC, COLORREF rgb,float m_jwm, bool Saveornot, CPoint Scroll)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -