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

📄 setdlg.cpp

📁 运用扫描法求设计一个最佳比例的聚光腔
💻 CPP
字号:
// SetDlg.cpp : implementation file
//

#include "stdafx.h"
#include "simulate.h"
#include "SetDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSetDlg dialog


CSetDlg::CSetDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSetDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetDlg)
	m_fLAxisAdd = 1.00000f;
	m_fObjRadius = 2.0f;
	m_fSAxisAdd = 1.00000f;
	m_nReflectCount = 100;
	m_fShineIntensity = 50.0f;
	m_fSAxisFrom = 15.0f;
	m_nAllPhoton = 0;
	m_fLAxisFrom = 50.0f;
	m_nRandomSimulateNum = 10;
	m_fError = 0.001f;
	//}}AFX_DATA_INIT
	m_hIcon=::AfxGetApp()->LoadIcon(IDI_SET);
	m_nObjSort=1;
	m_nAllPhoton=(int)(4*3.14*m_fObjRadius*m_fObjRadius*this->m_fShineIntensity);

	//加载位图
	m_bitOk.LoadBitmap(IDB_OK);
	m_bitCancel.LoadBitmap(IDB_CANCEL);

	//------------------------------------------------
	m_SetParam.fLAxisAdd=this->m_fLAxisAdd;
	m_SetParam.fLAxisFrom=this->m_fLAxisFrom;

	m_SetParam.fObjRadius=this->m_fObjRadius;

	m_SetParam.fSAxisAdd=this->m_fSAxisAdd;
	m_SetParam.fSAxisFrom=this->m_fSAxisFrom;

	m_SetParam.fShineIntensity=this->m_fShineIntensity;
	m_SetParam.nAllPhoton=this->m_nAllPhoton;
	m_SetParam.nObjSort=this->m_nObjSort;
	m_SetParam.nReflectCount=this->m_nReflectCount;
	m_SetParam.nRandomSimulateNum=this->m_nRandomSimulateNum;

	m_SetParam.fError=this->m_fError;
	//------------------------------------------------
}


void CSetDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetDlg)
	DDX_Control(pDX, IDC_COMBO_OBJSORT, m_comboObjSort);
	DDX_Text(pDX, IDC_EDIT_LAXISADD, m_fLAxisAdd);
	DDV_MinMaxFloat(pDX, m_fLAxisAdd, 0.f, 30.f);
	DDX_Text(pDX, IDC_EDIT_OBJR, m_fObjRadius);
	DDX_Text(pDX, IDC_EDIT_SAXISADD, m_fSAxisAdd);
	DDX_Text(pDX, IDC_EDIT_REFLECTCOUNT, m_nReflectCount);
	DDX_Text(pDX, IDC_EDIT_SHINEINTENSITY, m_fShineIntensity);
	DDX_Text(pDX, IDC_EDIT_SAXISFORM, m_fSAxisFrom);
	DDX_Text(pDX, IDC_EDIT_ALLPHOTON, m_nAllPhoton);
	DDX_Text(pDX, IDC_EDIT_LAXISFORM, m_fLAxisFrom);
	DDX_Text(pDX, IDC_EDIT_RANDOMSIMULATENUM, m_nRandomSimulateNum);
	DDX_Text(pDX, IDC_EDIT_ERROR, m_fError);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetDlg, CDialog)
	//{{AFX_MSG_MAP(CSetDlg)
	ON_EN_CHANGE(IDC_EDIT_OBJR, OnChangeEditObjr)
	ON_EN_CHANGE(IDC_EDIT_SHINEINTENSITY, OnChangeEditShineintensity)
	ON_BN_CLICKED(IDC_BTN_DEFAULT, OnBtnDefault)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetDlg message handlers

BOOL CSetDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	this->SetIcon(m_hIcon,true);

	this->UpdateData(true);
	this->m_comboObjSort.SetCurSel(m_nObjSort);

	((CButton*)GetDlgItem(IDOK))->SetBitmap(m_bitOk);
	((CButton*)GetDlgItem(IDCANCEL))->SetBitmap(m_bitCancel);

	// CG: The following block was added by the ToolTips component.	{		// Create the ToolTip control.		m_tooltip.Create(this);		m_tooltip.Activate(TRUE);		// TODO: Use one of the following forms to add controls:
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_ERROR),"数据分析时要用到");
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_RANDOMSIMULATENUM), "只能填整数,不要填小数哦");
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_LAXISADD),"随机模拟时要用到");
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_SAXISADD),"随机模拟时要用到");
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_LAXISFORM),"随机模拟时要用到");
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_SAXISFORM),"随机模拟时要用到");
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_REFLECTCOUNT),"随机模拟时要用到");
		m_tooltip.AddTool(GetDlgItem(IDC_EDIT_SHINEINTENSITY),"随机模拟时要用到");	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSetDlg::OnOK() 
{
	// TODO: Add extra validation here
	this->UpdateData(true);

	if(this->m_fLAxisAdd<=0||this->m_fLAxisAdd>30)
	{
		MessageBox("长半轴增量必须大于0且小于30","设置错误",MB_ICONINFORMATION);
		GetDlgItem(IDC_EDIT_LAXISADD)->SetFocus();
		return;
	}

	if(this->m_fObjRadius<0)
	{
		MessageBox("物体的半径必须小于或者等于1.41cm且大于0","设置错误",MB_ICONINFORMATION);
		GetDlgItem(IDC_EDIT_OBJR)->SetFocus();
		return;
	}

	this->m_nObjSort=this->m_comboObjSort.GetCurSel();

	this->UpdateData(false);
	if(this->m_comboObjSort.GetCurSel()==1)//球体
		m_nAllPhoton=(int)(4*m_fObjRadius*m_fObjRadius*3.14*this->m_fShineIntensity);
	else
		m_nAllPhoton=(int)(m_fObjRadius*m_fObjRadius*3.14*this->m_fShineIntensity);

	m_SetParam.fLAxisAdd=this->m_fLAxisAdd;
	m_SetParam.fLAxisFrom=this->m_fLAxisFrom;
	m_SetParam.fObjRadius=this->m_fObjRadius;
	m_SetParam.fSAxisAdd=this->m_fSAxisAdd;
	m_SetParam.fSAxisFrom=this->m_fSAxisFrom;
	m_SetParam.fShineIntensity=this->m_fShineIntensity;
	m_SetParam.nAllPhoton=this->m_nAllPhoton;
	m_SetParam.nObjSort=this->m_nObjSort;
	m_SetParam.nReflectCount=this->m_nReflectCount;
	m_SetParam.nRandomSimulateNum=this->m_nRandomSimulateNum;

	CDialog::OnOK();
}

void CSetDlg::ApplySet(SetParam& sp)
{
	sp.fLAxisAdd=m_SetParam.fLAxisAdd;
	sp.fLAxisFrom=m_SetParam.fLAxisFrom;

	sp.fObjRadius=m_SetParam.fObjRadius;

	sp.fSAxisAdd=m_SetParam.fSAxisAdd;
	sp.fSAxisFrom=m_SetParam.fSAxisFrom;

	sp.fShineIntensity=m_SetParam.fShineIntensity;
	sp.nAllPhoton=m_SetParam.nAllPhoton;
	sp.nReflectCount=m_SetParam.nReflectCount;
	sp.nObjSort=m_SetParam.nObjSort;
	sp.nRandomSimulateNum=m_SetParam.nRandomSimulateNum;

	sp.fError=m_SetParam.fError;
}

void CSetDlg::OnChangeEditObjr() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	this->UpdateData(true);
	if(this->m_comboObjSort.GetCurSel()==1)//球体
		m_nAllPhoton=(int)(4*m_fObjRadius*m_fObjRadius*3.14*this->m_fShineIntensity);
	else
		m_nAllPhoton=(int)(m_fObjRadius*m_fObjRadius*3.14*this->m_fShineIntensity);
	this->UpdateData(false);
}

void CSetDlg::OnChangeEditShineintensity() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	this->UpdateData(true);
	if(this->m_comboObjSort.GetCurSel()==1)//球体
		m_nAllPhoton=(int)(4*m_fObjRadius*m_fObjRadius*3.14*this->m_fShineIntensity);
	else
		m_nAllPhoton=(int)(m_fObjRadius*m_fObjRadius*3.14*this->m_fShineIntensity);

	this->UpdateData(false);
}

void CSetDlg::ChangeSet(SetParam sp)
{
	//--------------------------------------------
	m_SetParam.fLAxisAdd=sp.fLAxisAdd;
	m_SetParam.fLAxisFrom=sp.fLAxisFrom;

	m_SetParam.fObjRadius=sp.fObjRadius;

	m_SetParam.fSAxisAdd=sp.fSAxisAdd;
	m_SetParam.fSAxisFrom=sp.fSAxisFrom;

	m_SetParam.fShineIntensity=sp.fShineIntensity;
	m_SetParam.nAllPhoton=sp.nAllPhoton;
	m_SetParam.nObjSort=sp.nObjSort;
	m_SetParam.nReflectCount=sp.nReflectCount;

	m_SetParam.fError=sp.fError;
	//--------------------------------------------
	

	//--------------------------------------------
	m_fLAxisAdd=sp.fLAxisAdd;
	m_fLAxisFrom=sp.fLAxisFrom;

	m_fObjRadius=sp.fObjRadius;

	m_fSAxisAdd=sp.fSAxisAdd;
	m_fSAxisFrom=sp.fSAxisFrom;

	m_fShineIntensity=sp.fShineIntensity;
	m_nAllPhoton=sp.nAllPhoton;
	m_nObjSort=sp.nObjSort;
	m_nReflectCount=sp.nReflectCount;

	m_fError=sp.fError;
	//--------------------------------------------
}

void CSetDlg::OnBtnDefault() 
{
	// TODO: Add your control notification handler code here
	m_fLAxisAdd = 0.100000f;
	m_fObjRadius = 2.0f;
	m_fSAxisAdd = 0.100000f;
	m_nReflectCount = 100;
	m_fShineIntensity = 50.0f;
	m_fSAxisFrom = 15.0f;
	m_nAllPhoton = 0;
	m_fLAxisFrom = 50.0f;
	m_nObjSort=1;
	m_nAllPhoton=(int)(4*3.14*m_fObjRadius*m_fObjRadius*this->m_fShineIntensity);
	m_nRandomSimulateNum=10;

	//------------------------------------------------
	m_SetParam.fLAxisAdd=this->m_fLAxisAdd;
	m_SetParam.fLAxisFrom=this->m_fLAxisFrom;
	m_SetParam.fObjRadius=this->m_fObjRadius;
	m_SetParam.fSAxisAdd=this->m_fSAxisAdd;
	m_SetParam.fSAxisFrom=this->m_fSAxisFrom;
	m_SetParam.fShineIntensity=this->m_fShineIntensity;
	m_SetParam.nAllPhoton=this->m_nAllPhoton;
	m_SetParam.nObjSort=this->m_nObjSort;
	m_SetParam.nReflectCount=this->m_nReflectCount;
	m_SetParam.nRandomSimulateNum=this->m_nRandomSimulateNum;
	//------------------------------------------------

	this->UpdateData(false);
}

BOOL CSetDlg::PreTranslateMessage(MSG* pMsg)
{
	// CG: The following block was added by the ToolTips component.	{		// Let the ToolTip process this message.		m_tooltip.RelayEvent(pMsg);	}	return CDialog::PreTranslateMessage(pMsg);	// CG: This was added by the ToolTips component.
}

⌨️ 快捷键说明

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