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]);}	 
}