📄 cpcalsizedlg.cpp
字号:
// CPcalSizeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "afxwin.h"
#include "Lens_Design.h"
#include "CPcalSizeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCPcalSizeDlg dialog
CCPcalSizeDlg::CCPcalSizeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCPcalSizeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCPcalSizeDlg)
m_CalSizeDx = 30.0;
m_CalSizeDy = 20.0;
m_CalSizeX = 512.0;
m_CalSizeY = 384.0;
m_NiheNx = 8;
m_NiheNy = 6;
m_Dr = 50.0;
//}}AFX_DATA_INIT
}
void CCPcalSizeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCPcalSizeDlg)
DDX_Text(pDX, IDC_CalSizeDx, m_CalSizeDx);
DDV_MinMaxDouble(pDX, m_CalSizeDx, 10., 40.);
DDX_Text(pDX, IDC_CalSizeDy, m_CalSizeDy);
DDV_MinMaxDouble(pDX, m_CalSizeDy, 5., 20.);
DDX_Text(pDX, IDC_CalSizeX, m_CalSizeX);
DDV_MinMaxDouble(pDX, m_CalSizeX, 100., 800.);
DDX_Text(pDX, IDC_CalSizeY, m_CalSizeY);
DDV_MinMaxDouble(pDX, m_CalSizeY, 100., 600.);
DDX_Text(pDX, IDC_NiheNX, m_NiheNx);
DDV_MinMaxInt(pDX, m_NiheNx, 0, 15);
DDX_Text(pDX, IDC_NiheNY, m_NiheNy);
DDV_MinMaxInt(pDX, m_NiheNy, 0, 15);
DDX_Text(pDX, IDC_DR, m_Dr);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCPcalSizeDlg, CDialog)
//{{AFX_MSG_MAP(CCPcalSizeDlg)
ON_BN_CLICKED(IDC_TODRAW, OnTodraw)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCPcalSizeDlg message handlers
#include <math.h>
void CCPcalSizeDlg::OnTodraw()
{
// TODO: Add your control notification handler code here
int Col0,Row0;
int DCol,DRow;
int Col1,Col2,Row1,Row2;
int m_Draw;
double Ratex,Ratey;
double Axs[600],Yai[600];
int l,h,k,m,k1;
int MM[15];
double Kx0,Ky0,Kx,Ky,alpha,baita,dr;
Col0=300,Row0=200,DCol=290,DRow=190,Ratex=0.75;Ratey=9.0/16.0;
// 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;
CPen newPen1(PS_DASHDOT,0,RGB(128,0,0));
pCDC->SelectObject(&newPen1);
// pCDC->MoveTo(0,0),pCDC->LineTo(600,400);
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,0));
pCDC->SelectObject(&newPen2);
Col1=int(m_CalSizeX*Ratex/2),Row1=int(m_CalSizeY*Ratey/2);
Col2=int(m_CalSizeDx*Ratex),Row2=int(m_CalSizeDy*Ratey);
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);
CPen newPen3(PS_SOLID,0,RGB(0,0,255));
pCDC->SelectObject(&newPen3);
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);
CPen newPen(PS_SOLID,0,RGB(128,0,0));
//CBrush newBrush(RGB(255,0,255));//Brush with dignal pattern
//pCDC->SelectObject(&newBrush);
pCDC->SelectObject(&newPen);
pCDC->SelectStockObject(NULL_BRUSH);
//pCDC->Ellipse(100,100,300,300);
MM[0]=6,MM[1]=6,MM[2]=6,MM[3]=7,MM[4]=6,MM[5]=5,MM[6]=5,MM[7]=5;
MM[14]=6,MM[13]=6,MM[12]=6,MM[11]=7,MM[10]=6,MM[9]=5,MM[8]=5;
m=0;
Kx0=Col1*2.0;
Ky0=Row1*2.0;
dr=m_Dr*Ratex;
Kx=Kx0,Ky=Ky0;
for(l=0;l<2;l++)
{ if(l==0)
{Kx=Kx0/2.0,Ky=Ky0/2.0;}
else
{Kx=-Kx0/2.0,Ky=-Ky0/2.0;}
for(h=0;h<14;h++)
{ if(h<4)
{
alpha=Kx/sqrt((h*Ky/3)*(h*Ky/3)+Kx*Kx);
baita=(h*Ky/3)/sqrt((h*Ky/3)*(h*Ky/3)+Kx*Kx);
}
if(h>=4 && h<=7)
{
alpha=((7-h)*Kx/4)/sqrt(((7-h)*Kx/4)*((7-h)*Kx/4)+Ky*Ky);
baita=Ky/sqrt(((7-h)*Kx/4)*((7-h)*Kx/4)+Ky*Ky);
}
if(h>7 && h<11)
{
alpha=-((h-7)*Kx/4)/sqrt(((h-7)*Kx/4)*((h-7)*Kx/4)+Ky*Ky);
baita=Ky/sqrt(((h-7)*Kx/4)*((h-7)*Kx/4)+Ky*Ky);
}
if(h>=11)
{
alpha=-Kx/sqrt(((14-h)*Ky/3)*((14-h)*Ky/3)+Kx*Kx);
baita=((14-h)*Ky/3)/sqrt(((14-h)*Ky/3)*((14-h)*Ky/3)+Kx*Kx);
}
for(k=0;k<=MM[h];k++)
{ m=m+1;
if(k==MM[h])
{
if(h<4)
{
Axs[m]=Kx;
Yai[m]=Kx*baita/alpha;
pCDC->MoveTo(Col0,Row0);
pCDC->LineTo(int(Col0+Axs[m]),int(Row0+Yai[m]));
}
if(h>=4 && h<11)
{
Axs[m]=Ky*alpha/baita;
Yai[m]=Ky;
pCDC->MoveTo(Col0,Row0);
pCDC->LineTo(int(Col0+Axs[m]),int(Row0+Yai[m]));
}
if(h>=11)
{
Axs[m]=-Kx;
Yai[m]=-Kx*baita/alpha;
pCDC->MoveTo(Col0,Row0);
pCDC->LineTo(int(Col0+Axs[m]),int(Row0+Yai[m]));
}
}
else
{
Axs[m]=k*dr*alpha;
Yai[m]=k*dr*baita;
}
pCDC->Ellipse(int(Col0+Axs[m]-2.0),int(Row0+Yai[m]-2.0),int(Col0+Axs[m]+2.0),int(Row0+Yai[m]+2.0));
k1=0;
}
}
}
CPen newPen4(PS_SOLID,0,RGB(0,0,128));
pCDC->SelectObject(&newPen4);
pCDC->SelectStockObject(NULL_BRUSH);
for(l=0;l<7;l++)
{
pCDC->Ellipse(int(Col0-dr*l),int(Row0-dr*l),int(Col0+dr*l),int(Row0+dr*l));
}
}
BOOL CCPcalSizeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
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 + -