⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calsizereset.cpp

📁 这是一个特殊的非球面光学透镜设计程序,可以进行VC++编程!
💻 CPP
字号:
// CalSizeReset.cpp : implementation file
//

#include "stdafx.h"
#include "Lens_Design.h"
#include "CalSizeReset.h"
//#include "Lens_DesignView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCalSizeReset dialog


CCalSizeReset::CCalSizeReset(CWnd* pParent /*=NULL*/,int Quadrant)
	: CDialog(CCalSizeReset::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCalSizeReset)

	m_CpNx = 80;
	m_CpNy = 60;
	m_CsDx = 20.0;
	m_CsDy = 15.0;
	m_CsX = 512.0;//512.0;
	m_CsY = 384.0;//384.0;
	m_RdX=0.40;
	m_RdY=0.60;
	//}}AFX_DATA_INIT
		i_Quadrant=Quadrant;	
}


void CCalSizeReset::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCalSizeReset)
	DDX_Text(pDX, IDC_CalPointNumX, m_CpNx);
	DDV_MinMaxInt(pDX, m_CpNx, 0, 200);
	DDX_Text(pDX, IDC_CalPointNumY, m_CpNy);
	DDV_MinMaxInt(pDX, m_CpNy, 0, 180);
	DDX_Text(pDX, IDC_CalSizeDx, m_CsDx);
	DDV_MinMaxDouble(pDX, m_CsDx, 0., 30.);
	DDX_Text(pDX, IDC_CalSizeDy, m_CsDy);
	DDV_MinMaxDouble(pDX, m_CsDy, 0., 30.);
	DDX_Text(pDX, IDC_CalSizeX, m_CsX);
	DDV_MinMaxDouble(pDX, m_CsX, 0., 800.);
	DDX_Text(pDX, IDC_CalSizeY, m_CsY);
	DDV_MinMaxDouble(pDX, m_CsY, 0., 600.);
	DDX_Text(pDX, IDC_RATIONUMBERX, m_RdX);
	DDV_MinMaxDouble(pDX, m_RdX, 0., 1.);
	DDX_Text(pDX, IDC_RATIONUMBERY, m_RdY);
	DDV_MinMaxDouble(pDX, m_RdY, 0., 1.);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCalSizeReset, CDialog)
	//{{AFX_MSG_MAP(CCalSizeReset)
	ON_BN_CLICKED(IDC_TODRAW, OnTodraw)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCalSizeReset message handlers
void CCalSizeReset::OnTodraw() 
{
  	int Col0,Row0;
	int DCol,DRow;
	double Drtx,Drty;
	double Ratex,Ratey;
	int Col1,Col2,Row1,Row2;
	int N1,N2;
	int m_Draw;
	N1=i_Quadrant;
	i_Quadrant=0;
	Col0=300,Row0=200,DCol=290,DRow=190,Ratex=2.0/3.0;Ratey=0.5;
	// TODO: Add your control notification handler code here
	int  ret=AfxMessageBox("Are you sure to Update data",MB_YESNO   );
	if(ret!=IDYES)
	{
		return;
	}
	UpdateData();
	CPaintDC dc(this); // device context for painting
	CWnd* pWnd = GetDlgItem(IDC_DRAWWINDOW);
	CDC* pCDC=pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	m_Draw=1;
    //坐标,X轴,Y轴
	CPen  newPen1(PS_DASHDOT,0,RGB(128,0,0));
      	  pCDC->SelectObject(&newPen1);
    pCDC->MoveTo(Col0,Row0),pCDC->LineTo(Col0-DCol,Row0);
   	pCDC->MoveTo(Col0,Row0),pCDC->LineTo(Col0,Row0-DRow);        
   	pCDC->MoveTo(Col0,Row0),pCDC->LineTo(Col0+DCol,Row0);
   	pCDC->MoveTo(Col0,Row0),pCDC->LineTo(Col0,Row0+DRow);
    //计算面的框;有效面的框。
	CPen  newPen2(PS_SOLID,0,RGB(0,255,255));
      	  pCDC->SelectObject(&newPen2);
	Col1=int(m_CsX*Ratex/2),Row1=int(m_CsY*Ratey/2);
	Col2=int(m_CsDx*Ratex),Row2=int(m_CsDy*Ratey);
	Drtx=(Col1*1.0+Col2*1.0)/m_CpNx,Drty=(Row1*1.0+Row2*1.0)/m_CpNy;
	for(N1=(1-m_CpNx)/2;N1<=(m_CpNx-1)/2;N1++)
	{
		pCDC->MoveTo(int(Col0+Drtx*N1*2),Row0-Row1-Row2);
		pCDC->LineTo(int(Col0+Drtx*N1*2),Row0+Row1+Row2);
	}
	for(N2=(1-m_CpNy)/2;N2<=(m_CpNy-1)/2;N2++)
	{
		pCDC->MoveTo(Col0-Col1-Col2,Row0-int(Drty*N2*2));
		pCDC->LineTo(Col0+Col1+Col2,Row0-int(Drty*N2*2));
	}
	CPen  newPen3(PS_SOLID,0,RGB(0,128,0));
      	  pCDC->SelectObject(&newPen3);
	pCDC->MoveTo(Col0-Col1,Row0-Row1);
	pCDC->LineTo(Col0-Col1,Row0+Row1);
	pCDC->LineTo(Col0+Col1,Row0+Row1);
	pCDC->LineTo(Col0+Col1,Row0-Row1);
	pCDC->LineTo(Col0-Col1,Row0-Row1);
	pCDC->MoveTo(Col0-Col1-Col2,Row0-Row1-Row2);
	pCDC->LineTo(Col0-Col1-Col2,Row0+Row1+Row2);
	pCDC->LineTo(Col0+Col1+Col2,Row0+Row1+Row2);
	pCDC->LineTo(Col0+Col1+Col2,Row0-Row1-Row2);
	pCDC->LineTo(Col0-Col1-Col2,Row0-Row1-Row2);
	////增加的计算点的范围。第一象限
	pCDC->MoveTo(Col0+int((Col1+Col2)*(1-m_RdX)),Row0-int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0+int((Col1+Col2)*(1-m_RdX)),Row0-Row1-Row2-10);
	pCDC->MoveTo(Col0+int((Col1+Col2)*(1-m_RdX)),Row0-int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0+Col1+Col2+10,Row0-int((Row1+Row2)*(1-m_RdY)));
	///第二象限
	pCDC->MoveTo(Col0-int((Col1+Col2)*(1-m_RdX)),Row0-int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0-int((Col1+Col2)*(1-m_RdX)),Row0-Row1-Row2-10);
	pCDC->MoveTo(Col0-int((Col1+Col2)*(1-m_RdX)),Row0-int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0-Col1-Col2-10,Row0-int((Row1+Row2)*(1-m_RdY)));
	///第三象限
	pCDC->MoveTo(Col0-int((Col1+Col2)*(1-m_RdX)),Row0+int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0-int((Col1+Col2)*(1-m_RdX)),Row0+Row1+Row2+10);
	pCDC->MoveTo(Col0-int((Col1+Col2)*(1-m_RdX)),Row0+int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0-Col1-Col2-10,Row0+int((Row1+Row2)*(1-m_RdY)));
	////第四象限
	pCDC->MoveTo(Col0+int((Col1+Col2)*(1-m_RdX)),Row0+int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0+int((Col1+Col2)*(1-m_RdX)),Row0+Row1+Row2+10);
	pCDC->MoveTo(Col0+int((Col1+Col2)*(1-m_RdX)),Row0+int((Row1+Row2)*(1-m_RdY)));
	pCDC->LineTo(Col0+Col1+Col2+10,Row0+int((Row1+Row2)*(1-m_RdY)));
	///文字说明。
	CPen  newPen4(PS_SOLID,0,RGB(0,0,128));
      	  pCDC->SelectObject(&newPen4);
	pCDC->TextOut(Col0-Col1+Col2/2-60,Row0-Row1+Row2/2-60,"计算面");
	pCDC->MoveTo(Col0-Col1+Col2/2-30,Row0-Row1+Row2/2-45);
	pCDC->LineTo(Col0-Col1-Col2/2,Row0-Row1-Row2/2);
	pCDC->TextOut(Col0-Col1+Col2/2+60,Row0-Row1+Row2/2-60,"有效面");
	pCDC->MoveTo(Col0-Col1+Col2/2+90,Row0-Row1+Row2/2-45);
	pCDC->LineTo(Col0-Col1+Col2+110,Row0-Row1+Row2);
	pCDC->TextOut(Col0+int((Col1+Col2)*(1-m_RdX))+40,Row0-Row1+Row2/2-60,"增加点");
	pCDC->MoveTo(Col0+int((Col1+Col2)*(1-m_RdX))+20,Row0-int((Row1+Row2)*(1-m_RdY))-40);
	pCDC->LineTo(Col0+int((Col1+Col2)*(1-m_RdX))+40,Row0-Row1+Row2/2-60);
	
}





////////////


void CCalSizeReset::EnableButtonAllSn(BOOL bEnable)
{
	GetDlgItem(IDC_TODRAW)->EnableWindow(bEnable);
}

void CCalSizeReset::EnableSaveButtonSn()
{
	GetDlgItem(IDC_TODRAW)->EnableWindow(false);

}

BOOL CCalSizeReset::OnInitDialog() 
{
	CDialog::OnInitDialog();
	if (i_Quadrant==0)
	{
	m_CpNx = 23;
	m_CpNy = 19;
	m_CsDx = 25.0;
	m_CsDy = 25.0;
	m_CsX = 512.0;//512.0;
	m_CsY = 384.0;//384.0;
	m_RdX=0.4;
	m_RdY=0.6;

	}
	// TODO: Add extra initialization here
	UpdateData(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -