www.pudn.com > TINcreatewithdelauney.rar > ssView.cpp
// ssView.cpp : implementation of the CSsView class
//
#include "stdafx.h"
#include "ss.h"
#include "ssDoc.h"
#include "ssView.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSsView
IMPLEMENT_DYNCREATE(CSsView, CView)
BEGIN_MESSAGE_MAP(CSsView, CView)
//{{AFX_MSG_MAP(CSsView)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_caozuo, Oncaozuo)
ON_COMMAND(ID_qingping, Onqingping)
ON_COMMAND(ID_baocun, Onbaocun)
ON_COMMAND(ID_daoru, Ondaoru)
ON_COMMAND(ID_fangda, Onfangda)
ON_COMMAND(ID_suoxiao, Onsuoxiao)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSsView construction/destruction
CSsView::CSsView()
{
// TODO: add construction code here
dian[1][1].x=600;dian[1][1].y=0;
dian[1][2].x=0; dian[1][2].y=0;
dian[1][3].x=600;dian[1][3].y=600;
dian[2][1].x=600;dian[2][1].y=600;
dian[2][2].x=0;dian[2][2].y=0;
dian[2][3].x=0;dian[2][3].y=600;
s=2;q=r=0;m_caozuo=FALSE;
}
CSsView::~CSsView()
{
}
BOOL CSsView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSsView drawing
void CSsView::OnDraw(CDC* pDC)
{
CSsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CClientDC dc(this);
CRect rect;
rect.SetRect(0,0,600,600);
//dc.Rectangle(rect.TopLeft->x,rect.TopLeft.y,rect.BottomRight.x,rect.BottomRight.x);
dc.MoveTo(0,0);dc.LineTo(600,0);
dc.MoveTo(600,0);dc.LineTo(600,600);
dc.MoveTo(600,600);dc.LineTo(0,600);
dc.MoveTo(0,600);dc.LineTo(0,0);
dc.MoveTo(0,0);dc.LineTo(600,600);
}
/////////////////////////////////////////////////////////////////////////////
// CSsView printing
BOOL CSsView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CSsView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CSsView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CSsView diagnostics
#ifdef _DEBUG
void CSsView::AssertValid() const
{
CView::AssertValid();
}
void CSsView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSsDoc* CSsView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSsDoc)));
return (CSsDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSsView message handlers
void CSsView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnLButtonDown(nFlags, point);
int a;//int s=1;
CClientDC dc(this);
if(m_caozuo){
for( m=1;m6.2831852&&
(angle[1]+angle[2]+angle[3])<6.2831854)
return 1;
else
return 0
;}
int CSsView::isincircle(int s,CPoint charu)
{CPoint wx;xishu d1,d2;
d1=PiFenXian(dian[s][2],dian[s][1]);
d2=PiFenXian(dian[s][2],dian[s][3]);
wx=chuixing(d1,d2);
double r1,r2;
r1=sqrt((charu.x-wx.x)*(charu.x-wx.x)+(charu.y-wx.y)*(charu.y-wx.y));
r2=sqrt((dian[s][2].x-wx.x)*(dian[s][2].x-wx.x)
+(dian[s][2].y-wx.y)*(dian[s][2].y-wx.y));
if(r10&&b==1)
{CClientDC dc(this);
for(int i=1;i<4;i++)
{dc.MoveTo(mc);
if(dian[m_which][1]!=dian[m_1][i]
&&dian[m_which][2]!=dian[m_1][i]
&&dian[m_which][3]!=dian[m_1][i])
{dc.LineTo(dian[m_1][i]);ss=dian[m_1][i];}
}
CPoint ka,kb;
if (dian[m_which][1]==mc)
{ka=dian[m_which][2];kb=dian[m_which][3];}
if (dian[m_which][2]==mc)
{ka=dian[m_which][1];kb=dian[m_which][3];}
if (dian[m_which][3]==mc)
{ka=dian[m_which][1];kb=dian[m_which][2];}
CPen *pOldPen;
CPen SolidPen(PS_SOLID,1,RGB(255,255,255));
pOldPen=dc.SelectObject(&SolidPen);
dc.MoveTo(ka);
dc.LineTo(kb);
dc.SelectObject(pOldPen);
dian[m_which][1]=mc;dian[m_which][2]=ss;dian[m_which][3]=ka;
dian[m_1][1]=mc;dian[m_1][2]=ss;dian[m_1][3]=kb;q=m_1;
}
}
void CSsView::on2()
{int m_1=find(s,s-1);CPoint ss;int b=isincircle(m_1,mc);
if(m_1!=0&&b==1)
{CClientDC dc(this);
for(int i=1;i<4;i++)
{dc.MoveTo(mc);
if(dian[s-1][1]!=dian[m_1][i]
&&dian[s-1][2]!=dian[m_1][i]
&&dian[s-1][3]!=dian[m_1][i])
{dc.LineTo(dian[m_1][i]);ss=dian[m_1][i];}
}
CPoint ka,kb;
if (dian[s-1][1]==mc)
{ka=dian[s-1][2];kb=dian[s-1][3];}
if (dian[s-1][2]==mc)
{ka=dian[s-1][1];kb=dian[s-1][3];}
if (dian[s-1][3]==mc)
{ka=dian[s-1][1];kb=dian[s-1][2];}
CPen *pOldPen;
CPen SolidPen(PS_SOLID,1,RGB(255,255,255));
pOldPen=dc.SelectObject(&SolidPen);
dc.MoveTo(ka);
dc.LineTo(kb);
dc.SelectObject(pOldPen);
dian[s-1][1]=mc;dian[s-1][2]=ss;dian[s-1][3]=ka;
dian[m_1][1]=mc;dian[m_1][2]=ss;dian[m_1][3]=kb;
r=m_1;
}
}
void CSsView::on3()
{int m_1=find(s,s);int b=isincircle(m_1,mc);CPoint ss;
if(m_1!=0&&b==1)
{CClientDC dc(this);
for(int i=1;i<4;i++)
{dc.MoveTo(mc);
if(dian[s][1]!=dian[m_1][i]
&&dian[s][2]!=dian[m_1][i]
&&dian[s][3]!=dian[m_1][i])
{dc.LineTo(dian[m_1][i]);ss=dian[m_1][i];}
}
CPoint ka,kb;
if (dian[s][1]==mc)
{ka=dian[s][2];kb=dian[s][3];}
if (dian[s][2]==mc)
{ka=dian[s][1];kb=dian[s][3];}
if (dian[s][3]==mc)
{ka=dian[s][1];kb=dian[s][2];}
CPen *pOldPen;
CPen SolidPen(PS_SOLID,1,RGB(255,255,255));
pOldPen=dc.SelectObject(&SolidPen);
dc.MoveTo(ka);
dc.LineTo(kb);
dc.SelectObject(pOldPen);
dian[s][1]=mc;dian[s][2]=ss;dian[s][3]=ka;
dian[m_1][1]=mc;dian[m_1][2]=ss;dian[m_1][3]=kb;
}
}
int CSsView::find(int s,int n)
{
for(int i=1;ix,rect.TopLeft.y,rect.BottomRight.x,rect.BottomRight.x);
dc.MoveTo(0,0);dc.LineTo(600,0);
dc.MoveTo(600,0);dc.LineTo(600,600);
dc.MoveTo(600,600);dc.LineTo(0,600);
dc.MoveTo(0,600);dc.LineTo(0,0);
dc.MoveTo(0,0);dc.LineTo(600,600);
dian[1][1].x=600;dian[1][1].y=0;
dian[1][2].x=0; dian[1][2].y=0;
dian[1][3].x=600;dian[1][3].y=600;
dian[2][1].x=600;dian[2][1].y=600;
dian[2][2].x=0;dian[2][2].y=0;
dian[2][3].x=0;dian[2][3].y=600;
for( i=3;i<=s;i++)
{dian[i][1].x=dian[i][2].x=dian[i][3].x=0;
dian[i][1].y=dian[i][2].y=dian[i][3].y=0;}
m_caozuo=FALSE;s=2;
}
void CSsView::Onbaocun()
{
// TODO: Add your command handler code here
CFileDialog dlg(FALSE,"*.data","data");
if(dlg.DoModal()==IDOK)
{
CString str;
str=dlg.GetPathName();
FILE *pf;
if((pf=fopen("data.my","w+"))==NULL)
{
AfxMessageBox("创建文件失败!");
return ;
}
fprintf(pf,"%d\n",s);
for(int i=1;i<=s;i++)
{fprintf(pf,"%d\n",i);
for(int j=1;j<=3;j++)
{
fprintf(pf,"%d %d \n",dian[i][j].x,
dian[i][j].y);
}
}
fclose(pf);
}
}
void CSsView::Ondaoru()
{
// TODO: Add your command handler code here
CClientDC dc(this);
for(int k=1;k<=s;k++)
{
CPen *pOldPen;
CPen SolidPen(PS_SOLID,1,RGB(255,255,255));
pOldPen=dc.SelectObject(&SolidPen);
dc.MoveTo(dian[k][1]);
dc.LineTo(dian[k][2]);
dc.MoveTo(dian[k][2]);
dc.LineTo(dian[k][3]);
dc.MoveTo(dian[k][1]);
dc.LineTo(dian[k][3]);
dc.SelectObject(pOldPen);}
CFileDialog dlg(TRUE,"*.data","data");
int trinum=0;
int num=0;
int a,b;
a=b=0;
if(dlg.DoModal()==IDOK)
{
CString str;
str=dlg.GetFileName();
FILE *pf;
if((pf=fopen(str,"r"))==NULL)
{
AfxMessageBox("打开文件失败!");
return ;
}
fscanf(pf,"%d\n",&trinum);
s=trinum;
for(int i=1;i<=trinum;i++)
{
fscanf(pf,"%d\n",&num);
for(int j=1;j<=3;j++)
{
fscanf(pf,"%d %d \n",&a, &b);
dian[i][j].x=a;
dian[i][j].y=b;
}
}
fclose(pf);
}
for(int i=1;i<=s;i++)
{
CPen *pOldPen;
CPen SolidPen(PS_SOLID,1,RGB(255,255,255));
pOldPen=dc.SelectObject(&SolidPen);
dc.MoveTo(0,0);
dc.LineTo(600,600);
dc.SelectObject(pOldPen);
dc.MoveTo(dian[i][1]);
dc.LineTo(dian[i][2]);
dc.MoveTo(dian[i][2]);
dc.LineTo(dian[i][3]);
dc.MoveTo(dian[i][1]);
dc.LineTo(dian[i][3]);
}m_caozuo=FALSE;
}
void CSsView::Onfangda()
{
// TODO: Add your command handler code here
CClientDC dc(this);CPen *pOldPen;m_xianshi=1.2;
CPen SolidPen(PS_SOLID,1,RGB(255,255,255));
pOldPen=dc.SelectObject(&SolidPen);
for(int k=1;k<=s;k++)
{dc.MoveTo(dian[k][1]);
dc.LineTo(dian[k][2]);
dc.MoveTo(dian[k][2]);
dc.LineTo(dian[k][3]);
dc.MoveTo(dian[k][1]);
dc.LineTo(dian[k][3]);
} dc.SelectObject(pOldPen);
for(int j=1;j<=s;j++)
for(int l=1;l<=3;l++)
{dian[j][l].x=(1.1*dian[j][l].x);dian[j][l].y=(1.1*dian[j][l].y);}
for(int k1=1;k1<=s;k1++)
{ dc.MoveTo(dian[k1][1]);
dc.LineTo(dian[k1][2]);
dc.MoveTo(dian[k1][2]);
dc.LineTo(dian[k1][3]);
dc.MoveTo(dian[k1][1]);
dc.LineTo(dian[k1][3]);}
}
void CSsView::Onsuoxiao()
{
// TODO: Add your command handler code here
CClientDC dc(this);CPen *pOldPen;m_xianshi=0.8;
CPen SolidPen(PS_SOLID,1,RGB(255,255,255));
pOldPen=dc.SelectObject(&SolidPen);
for(int k=1;k<=s;k++)
{dc.MoveTo(dian[k][1]);
dc.LineTo(dian[k][2]);
dc.MoveTo(dian[k][2]);
dc.LineTo(dian[k][3]);
dc.MoveTo(dian[k][1]);
dc.LineTo(dian[k][3]);
} dc.SelectObject(pOldPen);
for(int j=1;j<=s;j++)
for(int l=1;l<=3;l++)
{dian[j][l].x=(0.8*dian[j][l].x);dian[j][l].y=(0.8*dian[j][l].y);}
for(int k1=1;k1<=s;k1++)
{ dc.MoveTo(dian[k1][1]);
dc.LineTo(dian[k1][2]);
dc.MoveTo(dian[k1][2]);
dc.LineTo(dian[k1][3]);
dc.MoveTo(dian[k1][1]);
dc.LineTo(dian[k1][3]);}
}