식(2-34)
1) Dialog
#include "stdafx.h"
#include "TakeCj.h"
#include "ControlDlg2.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "TakeCjDoc.h"
#include "TakeCjView.h"
#include "FFTDlg.h"
#include "PhaseDlg.h"
#include "LSDlg.h"
#include "PhsaDlg.h"
#include "Complexclass.h"
#include "ImageClass.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CControlDlg2 dialog
CControlDlg2::CControlDlg2(CWnd* pParent /*=NULL*/) : CDialog(CControlDlg2::IDD, pParent) {
//{{AFX_DATA_INIT(CControlDlg2) m_interference_method = 1;
m_angle = 45.0f;
m_factor = 1.0f;
m_wavelength = 632.8f;
m_specimen = 0;
m_specimen_visible = FALSE;
m_uw_specimen_visible = FALSE;
m_uw_specimen = 0;
//}}AFX_DATA_INIT m_comport=1;
m_baudrate=9600;
}
void CControlDlg2::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CControlDlg2)
DDX_Control(pDX, IDC_BUTTON_PS_NEXT, m_ps_Next);
DDX_Control(pDX, IDC_BUTTON_PS_START, m_ps_Start);
DDX_Control(pDX, IDC_COMBO_CONFIG_COMPORT, m_ComPort);
DDX_Control(pDX, IDC_COMBO_CONFIG_BOUDRATE, m_BaudRate);
DDX_Control(pDX, IDC_BUTTON_HALT, m_Halt);
DDX_Control(pDX, IDC_BUTTON_LIVE, m_Live);
DDX_Control(pDX, IDC_BUTTON_REF, m_Ref);
DDX_Control(pDX, IDC_TAB1, m_Tab1);
DDX_Radio(pDX, IDC_RADIO_CONFIG_ADDITION, m_interference_method);
DDX_Text(pDX, IDC_EDIT_ANGLE, m_angle);
DDX_Text(pDX, IDC_EDIT_FACTOR, m_factor);
DDX_Text(pDX, IDC_EDIT_WAVELENGTH, m_wavelength);
DDX_Radio(pDX, IDC_RADIO_SPECIMEN1, m_specimen);
DDX_Check(pDX, IDC_CHECK_SPECIMEN_VISIBLE, m_specimen_visible);
DDX_Check(pDX, IDC_CHECK_UNWRAP_SPECIMEN_VISIBLE, m_uw_specimen_visible);
DDX_Radio(pDX, IDC_RADIO_UNWRAP_SPECIMEN1, m_uw_specimen);
//}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CControlDlg2, CDialog) //{{AFX_MSG_MAP(CControlDlg2) ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON_LIVE, OnButtonLive) ON_BN_CLICKED(IDC_BUTTON_REF, OnButtonRef) ON_BN_CLICKED(IDC_BUTTON_HALT, OnButtonHalt) ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
ON_BN_CLICKED(IDC_BUTTON_CONFIG_CONNECT, OnButtonConfigConnect) ON_BN_CLICKED(IDC_BUTTON_CONFIG_DISCONNECT, OnButtonConfigDisconnect) ON_CBN_SELCHANGE(IDC_COMBO_CONFIG_BOUDRATE, OnSelchangeComboConfigBoudrate) ON_CBN_SELCHANGE(IDC_COMBO_CONFIG_COMPORT, OnSelchangeComboConfigComport) ON_WM_PAINT()
ON_BN_CLICKED(IDC_RADIO_CONFIG_ADDITION, OnRadioConfigAddition) ON_BN_CLICKED(IDC_RADIO_CONFIG_SUBTRACTION, OnRadioConfigSubtraction) ON_BN_CLICKED(IDC_BUTTON_2BUCKET, OnButton2bucket)
ON_BN_CLICKED(IDC_BUTTON_FFT_TOFILE, OnButtonFftTofile) ON_BN_CLICKED(IDC_BUTTON_LS_TOFILE, OnButtonLsTofile)
ON_BN_CLICKED(IDC_BUTTON_PHASE_FFT, OnButtonPhaseFft) ON_BN_CLICKED(IDC_BUTTON_PHASE_LS, OnButtonPhaseLs)
ON_BN_CLICKED(IDC_BUTTON_PHASE_UNWRAP, OnButtonPhaseUnwrap) ON_BN_CLICKED(IDC_BUTTON_PS_NEXT, OnButtonPsNext)
ON_BN_CLICKED(IDC_BUTTON_PS_START, OnButtonPsStart) ON_BN_CLICKED(IDC_BUTTON_UNWRAP_3D, OnButtonUnwrap3d) ON_BN_CLICKED(IDC_RADIO_SPECIMEN1, OnRadioSpecimen1) ON_BN_CLICKED(IDC_RADIO_SPECIMEN2, OnRadioSpecimen2) ON_BN_CLICKED(IDC_RADIO_SPECIMEN3, OnRadioSpecimen3)
ON_BN_CLICKED(IDC_CHECK_SPECIMEN_VISIBLE, OnCheckSpecimenVisible) ON_BN_CLICKED(IDC_BUTTON_SPECIMEN_MOVE_UP, OnButtonSpecimenMoveUp) ON_BN_CLICKED(IDC_BUTTON_SPECIMEN_MOVE_DOWN, OnButtonSpecimenMoveDown) ON_BN_CLICKED(IDC_RADIO_UNWRAP_SPECIMEN1, OnRadioUnwrapSpecimen1) ON_BN_CLICKED(IDC_RADIO_UNWRAP_SPECIMEN2, OnRadioUnwrapSpecimen2) ON_BN_CLICKED(IDC_RADIO_UNWRAP_SPECIMEN3, OnRadioUnwrapSpecimen3)
ON_BN_CLICKED(IDC_CHECK_UNWRAP_SPECIMEN_VISIBLE, OnCheckUnwrapSpecimenVisible) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CControlDlg2::OnInitDialog() {
CDialog::OnInitDialog();
TC_ITEM item;
char* tabname[3] = {"Config", "ESPI", "ImageProcess"};
for(int i=0; i<3; i++) {
item.mask = TCIF_TEXT | TCIF_IMAGE;
item.pszText = tabname[i];
m_Tab1.InsertItem(i, &item);
}
m_BaudRate.AddString("2400");
m_BaudRate.AddString("4800");
m_BaudRate.AddString("9600");
m_BaudRate.AddString("14400");
m_BaudRate.AddString("19200");
m_ComPort.AddString("COM1");
m_ComPort.AddString("COM2");
m_ComPort.AddString("COM3");
m_ComPort.AddString("COM4");
m_ComPort.SetCurSel(0);
m_BaudRate.SetCurSel(2);
ShowWindow(0);
GetPhase();
m_Live.EnableWindow(true);
m_Ref.EnableWindow(false);
m_Halt.EnableWindow(false);
m_ps_Start.EnableWindow(true);
m_ps_Next.EnableWindow(false);
return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CControlDlg2::OnClose() {
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->m_ctlbox=false;
CDialog::OnClose();
}
void CControlDlg2::OnButtonLive() {
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->Live();
m_Live.EnableWindow(false);
m_Ref.EnableWindow(true);
m_Halt.EnableWindow(true);
}
void CControlDlg2::OnButtonRef() {
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->Reference();
m_Live.EnableWindow(false);
m_Ref.EnableWindow(true);
m_Halt.EnableWindow(true);
}
void CControlDlg2::OnButtonHalt() {
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->Halt();
m_Live.EnableWindow(true);
m_Ref.EnableWindow(false);
m_Halt.EnableWindow(false);
}
void CControlDlg2::EnableButton(int a, int b, int c) {
if(a ==1)
m_Live.EnableWindow(true);
else
m_Live.EnableWindow(false);
if(b ==1)
m_Ref.EnableWindow(true);
else
m_Ref.EnableWindow(false);
if(c ==1)
m_Halt.EnableWindow(true);
else
m_Halt.EnableWindow(false);
}
void CControlDlg2::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) {
ShowWindow(m_Tab1.GetCurSel());
*pResult = 0;
}
void CControlDlg2::ShowWindow(int num) {
switch(num) {
case 0:
{
GetDlgItem(IDC_STATIC_CONFIG_RS232)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_CONFIG_COMPORT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_CONFIG_BOUDRATE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_COMBO_CONFIG_COMPORT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_COMBO_CONFIG_BOUDRATE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_CONFIG_CONNECT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_CONFIG_DISCONNECT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_CONFIG_INTERFERENCE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_CONFIG_ADDITION)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_CONFIG_SUBTRACTION)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_CONFIG_INTERFERENCE2)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_2BUCKET)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_CONFIG_PARAMETER)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_LAMBDA)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_ANGLE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_FACTOR)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_WAVELENGTH)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_ANGLE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_FACTOR)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_PARAM_WAVEUNIT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_PARAM_ANGLEUNIT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_PARAM_SCALEUNIT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_CONFIG_SPECIMEN2)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_SPECIMEN1)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_SPECIMEN2)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_SPECIMEN3)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_SPECIMEN_MOVE_UP)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_SPECIMEN_MOVE_DOWN)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_CHECK_SPECIMEN_VISIBLE)->ShowWindow(SW_SHOW);
//Experiment
GetDlgItem(IDC_STATIC_CLASSIC_ESPI)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_LIVE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_HALT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_REF)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PS_START)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PS_NEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PHASE_LS)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PHASE_FFT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_LS_TOFILE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_FFT_TOFILE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PHASE_UNWRAP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_UNWRAP_3D)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PHASESHIFTING_ESPI)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PHASEMAP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_UNWRAPPING)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_UNWRAP_SPECIMEN_VISIBLE)->ShowWindow(SW_HIDE);
} break;
case 1:
{ //Config
GetDlgItem(IDC_STATIC_CONFIG_RS232)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_COMPORT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_BOUDRATE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_CONFIG_COMPORT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_CONFIG_BOUDRATE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_CONFIG_CONNECT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_CONFIG_DISCONNECT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_INTERFERENCE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_CONFIG_ADDITION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_CONFIG_SUBTRACTION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_INTERFERENCE2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_2BUCKET)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_PARAMETER)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_LAMBDA)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_ANGLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_FACTOR)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_WAVELENGTH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_ANGLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_FACTOR)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PARAM_WAVEUNIT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PARAM_ANGLEUNIT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PARAM_SCALEUNIT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_SPECIMEN2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_SPECIMEN1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_SPECIMEN2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_SPECIMEN3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_SPECIMEN_MOVE_UP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_SPECIMEN_MOVE_DOWN)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_SPECIMEN_VISIBLE)->ShowWindow(SW_HIDE);
//Experiment
GetDlgItem(IDC_STATIC_CLASSIC_ESPI)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_LIVE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_HALT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_REF)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_PS_START)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_PS_NEXT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_PHASE_LS)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_PHASE_FFT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_LS_TOFILE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_FFT_TOFILE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_PHASE_UNWRAP)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_UNWRAP_3D)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_PHASESHIFTING_ESPI)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_PHASEMAP)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_UNWRAPPING)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN1)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN2)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN3)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_CHECK_UNWRAP_SPECIMEN_VISIBLE)->ShowWindow(SW_SHOW);
} break;
case 2:
{ //Config
GetDlgItem(IDC_STATIC_CONFIG_RS232)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_COMPORT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_BOUDRATE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_CONFIG_COMPORT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_COMBO_CONFIG_BOUDRATE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_CONFIG_CONNECT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_CONFIG_DISCONNECT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_INTERFERENCE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_CONFIG_ADDITION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_CONFIG_SUBTRACTION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_INTERFERENCE2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_2BUCKET)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_PARAMETER)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_LAMBDA)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_ANGLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_FACTOR)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_WAVELENGTH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_ANGLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_FACTOR)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PARAM_WAVEUNIT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PARAM_ANGLEUNIT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PARAM_SCALEUNIT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_CONFIG_SPECIMEN2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_SPECIMEN1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_SPECIMEN2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_SPECIMEN3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_SPECIMEN_MOVE_UP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_SPECIMEN_MOVE_DOWN)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_SPECIMEN_VISIBLE)->ShowWindow(SW_HIDE);
//Experiment
GetDlgItem(IDC_STATIC_CLASSIC_ESPI)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_LIVE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_HALT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_REF)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PS_START)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PS_NEXT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PHASE_LS)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PHASE_FFT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_LS_TOFILE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_FFT_TOFILE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_PHASE_UNWRAP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_UNWRAP_3D)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PHASESHIFTING_ESPI)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PHASEMAP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_UNWRAPPING)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN2)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN3)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_UNWRAP_SPECIMEN_VISIBLE)->ShowWindow(SW_HIDE);
} break;
} }
void CControlDlg2::OnSelchangeComboConfigBoudrate() {
CString str;
int sel = m_BaudRate.GetCurSel();
m_BaudRate.GetLBText(sel, str);
m_baudrate = atoi(str);
}
void CControlDlg2::OnSelchangeComboConfigComport() {
int sel = m_ComPort.GetCurSel();
m_comport = sel+1;
}
void CControlDlg2::OnButtonConfigConnect() {
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->OpenSerial(m_comport, m_baudrate);
Invalidate();
}
void CControlDlg2::OnButtonConfigDisconnect() {
CTakeCjApp* pApp = (CTakeCjApp*)AfxGetApp();
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->m_CommFlags = false;
pMain->pPZTClass->SetServo(false); //서버 On pApp->CloseSerial();
Invalidate();
}
void CControlDlg2::OnPaint() {
CPaintDC dc(this); // device context for painting
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
if(pMain->m_CommFlags) {
GetDlgItem(IDC_BUTTON_CONFIG_CONNECT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_CONFIG_DISCONNECT)->EnableWindow(true);
} else {
GetDlgItem(IDC_BUTTON_CONFIG_CONNECT)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_CONFIG_DISCONNECT)->EnableWindow(false);
}
GetDlgItem(IDC_BUTTON_PHASE_UNWRAP)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_UNWRAP_3D)->EnableWindow(false);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN1)->EnableWindow(false);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN2)->EnableWindow(false);
GetDlgItem(IDC_RADIO_UNWRAP_SPECIMEN3)->EnableWindow(false);
GetDlgItem(IDC_CHECK_UNWRAP_SPECIMEN_VISIBLE)->EnableWindow(false);
}
if(GetbeView2()) {
GetDlgItem(IDC_RADIO_SPECIMEN1)->EnableWindow(true);
GetDlgItem(IDC_RADIO_SPECIMEN2)->EnableWindow(true);
GetDlgItem(IDC_RADIO_SPECIMEN3)->EnableWindow(true);
GetDlgItem(IDC_CHECK_SPECIMEN_VISIBLE)->EnableWindow(true);
} else {
GetDlgItem(IDC_RADIO_SPECIMEN1)->EnableWindow(false);
GetDlgItem(IDC_RADIO_SPECIMEN2)->EnableWindow(false);
GetDlgItem(IDC_RADIO_SPECIMEN3)->EnableWindow(false);
GetDlgItem(IDC_CHECK_SPECIMEN_VISIBLE)->EnableWindow(false);
}
// Do not call CDialog::OnPaint() for painting messages }
감산처리 2)
void CControlDlg2::OnRadioConfigAddition() {
m_interference_method = 0;
}
void CControlDlg2::OnRadioConfigSubtraction() {
m_interference_method = 1;
}
void CControlDlg2::OnButton2bucket() {
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->SetLogData("Launch Set Phase value");
GetPhaseInDlg(0);
}
void CControlDlg2::GetPhaseInDlg(int num) {
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
DWORD len;
CString gstr;
FILE* fp;
float a, b, c, s1, s2, s3, s4, s5, s6, s7, s8;
float p1, p2, p3, p4, p5, p6, p7, p8, p9, p10;
if((fp = fopen(pMain->m_phasefilepath, "rt"))==NULL) {
AfxMessageBox("Cannot load Phase.dat file.");
return ; }
fscanf(fp, "%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f,
%f, %f, %f, %f", &a, &b, &c , &s1, &s2, &s3, &s4, &s5, &s6, &s7, &s8, &p1, &p2, &p3, &p4,
&p5, &p6, &p7, &p8, &p9, &p10);
fclose(fp);
CPhaseDlg dlg;
dlg.m_Phase1 = a;
dlg.m_Phase3 = dlg.m_Phase2 = b;
dlg.m_Phase4 = c;
dlg.m_step8_phase1 = s1;
dlg.m_step8_phase2 = s2;
dlg.m_step8_phase3 = s3;
dlg.m_step8_phase4 = s4;
dlg.m_step8_phase5 = s5;
dlg.m_step8_phase6 = s6;
dlg.m_step8_phase7 = s7;
dlg.m_step8_phase8 = s8;
dlg.m_step10_phase1 = p1;
dlg.m_step10_phase2 = p2;
dlg.m_step10_phase3 = p3;
dlg.m_step10_phase4 =p4;
dlg.m_step10_phase5 = p5;
dlg.m_step10_phase6 = p6;
dlg.m_step10_phase7 = p7;
dlg.m_step10_phase8 = p8;
dlg.m_step10_phase9 = p9;
dlg.m_step10_phase10 = p10;
if(dlg.DoModal()==IDOK) {
저장 //Phase
phase1 = dlg.m_Phase1;
phase2 = dlg.m_Phase2;
phase3 = dlg.m_Phase3;
phase4 = dlg.m_Phase4;
step8_phase1 = dlg.m_step8_phase1;
step8_phase2 = dlg.m_step8_phase2;
step8_phase3 = dlg.m_step8_phase3;
step8_phase4 = dlg.m_step8_phase4;
step8_phase5 = dlg.m_step8_phase5;
step8_phase6 = dlg.m_step8_phase6;
step8_phase7 = dlg.m_step8_phase7;
step8_phase8 = dlg.m_step8_phase8;
step10_phase1 = dlg.m_step10_phase1;
step10_phase2 = dlg.m_step10_phase2;
step10_phase3 = dlg.m_step10_phase3;
step10_phase4 = dlg.m_step10_phase4;
step10_phase5 = dlg.m_step10_phase5;
step10_phase6 = dlg.m_step10_phase6;
step10_phase7 = dlg.m_step10_phase7;
step10_phase8 = dlg.m_step10_phase8;
step10_phase9 = dlg.m_step10_phase9;
step10_phase10 = dlg.m_step10_phase10;
HANDLE fd = CreateFile(pMain->m_phasefilepath, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(fd<0) {
파일 저장 실패 AfxMessageBox(" !!");
} else {
CString str;
UpdateData(true);
str.Format("%.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f,
%.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f", dlg.m_Phase1,
dlg.m_Phase2, dlg.m_Phase4, dlg.m_step8_phase1, dlg.m_step8_phase2, dlg.m_step8_phase3, dlg.m_step8_phase4, dlg.m_step8_phase5, dlg.m_step8_phase6, dlg.m_step8_phase7, dlg.m_step8_phase8, dlg.m_step10_phase1, dlg.m_step10_phase2, dlg.m_step10_phase3, dlg.m_step10_phase4, dlg.m_step10_phase5, dlg.m_step10_phase6,
dlg.m_step10_phase7, dlg.m_step10_phase8, dlg.m_step10_phase9, dlg.m_step10_phase10);
WriteFile(fd, str, str.GetLength(), &len, NULL);
CloseHandle(fd);
} }
}
void CControlDlg2::OnButtonFftTofile() {
CTakeCjApp* pApp = (CTakeCjApp*)AfxGetApp();
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->SetLogData("Launch FFT fitting from files");
CComplexClass pComplex;
CPhsaDlg dlg;
if(dlg.DoModal()==IDOK) {
if(dlg.m_FileName1 =="") return;
if(dlg.m_FileName2 =="") return;
if(dlg.m_FileName3 =="") return;
if(dlg.m_FileName4 =="") return;
if(dlg.m_FileName5 =="") return;
if(dlg.m_FileName6 =="") return;
if(dlg.m_FileName7 =="") return;
if(dlg.m_FileName8 =="") return;
파일을 전부 열어서 //
pApp->FileNew1();
CChildFrame* pChild=(CChildFrame*)pMain->GetActiveFrame();
CTakeCjDoc* pDoc=(CTakeCjDoc*)pChild->GetActiveDocument();
SIZE size = {640, 480};
pDoc->ImageSize = size;
CImageClass pImgClass;
BYTE* pImage1, *pImage2, *pImage3, *pImage4;
BYTE* pImage5, *pImage6, *pImage7, *pImage8;
BYTE* cImage;
COMPLEX* data = new COMPLEX[size.cx*size.cy*sizeof(COMPLEX)];
COMPLEX*Intensity= new COMPLEX[size.cx*size.cy*sizeof(COMPLEX)];
COMPLEX* u = new COMPLEX[size.cx*size.cy*sizeof(COMPLEX)];
COMPLEX* v = new COMPLEX[size.cx*size.cy*sizeof(COMPLEX)];
COMPLEX* z = new COMPLEX[size.cx*size.cy*sizeof(COMPLEX)];
float* out= new float[size.cx*size.cy*sizeof(float)];
BYTE* ims= new BYTE[size.cx*size.cy];
pImage1 = new BYTE[size.cx*size.cy];
memset(pImage1, 0, size.cx*size.cy);
pImage2 = new BYTE[size.cx*size.cy];
memset(pImage2, 0, size.cx*size.cy);
pImage3 = new BYTE[size.cx*size.cy];
memset(pImage3, 0, size.cx*size.cy);
pImage4 = new BYTE[size.cx*size.cy];
memset(pImage4, 0, size.cx*size.cy);
pImage5 = new BYTE[size.cx*size.cy];
memset(pImage5, 0, size.cx*size.cy);
pImage6 = new BYTE[size.cx*size.cy];
memset(pImage6, 0, size.cx*size.cy);
pImage7 = new BYTE[size.cx*size.cy];
memset(pImage7, 0, size.cx*size.cy);
pImage8 = new BYTE[size.cx*size.cy];
memset(pImage8, 0, size.cx*size.cy);
cImage = new BYTE[size.cx*size.cy];
memset(cImage, 0, size.cx*size.cy);
CIPSGImgCls m_pImage1, m_pImage2, m_pImage3, m_pImage4, m_pImage5, m_pImage6, m_pImage7, m_pImage8;
m_pImage1.LoadBmpImage(dlg.m_FileName1);
m_pImage2.LoadBmpImage(dlg.m_FileName2);
m_pImage3.LoadBmpImage(dlg.m_FileName3);
m_pImage4.LoadBmpImage(dlg.m_FileName4);
m_pImage5.LoadBmpImage(dlg.m_FileName5);
m_pImage6.LoadBmpImage(dlg.m_FileName6);
m_pImage7.LoadBmpImage(dlg.m_FileName7);
m_pImage8.LoadBmpImage(dlg.m_FileName8);
m_pImage1.GetBuffer(pImage1);
m_pImage2.GetBuffer(pImage2);
m_pImage3.GetBuffer(pImage3);
m_pImage4.GetBuffer(pImage4);
m_pImage5.GetBuffer(pImage5);
m_pImage6.GetBuffer(pImage6);
m_pImage7.GetBuffer(pImage7);
m_pImage8.GetBuffer(pImage8);
for(int j=0; j<size.cy; j++)
for(int i=0; i<size.cx;i++) {
u[j*size.cx+i].im = u[j*size.cx+i].re = 0;
v[j*size.cx+i].im = v[j*size.cx+i].re = 0;
} //Data Load COMPLEX exp={1,0};
pImgClass.DataLoadSum(pImage1, u, exp, size);
exp.re = 0; exp.im = -1;
pImgClass.DataLoadSum(pImage2, u, exp, size);
exp.re = -1; exp.im = 0;
pImgClass.DataLoadSum(pImage3, u, exp, size);
exp.re = 0; exp.im = 1;
pImgClass.DataLoadSum(pImage4, u, exp, size);
exp.re = 1; exp.im = 0;
pImgClass.DataLoadSum(pImage5, v, exp, size);
exp.re = 0; exp.im = -1;
pImgClass.DataLoadSum(pImage6, v, exp, size);
exp.re = -1; exp.im = 0;
pImgClass.DataLoadSum(pImage7, v, exp, size);
exp.re = 0; exp.im = 1;
pImgClass.DataLoadSum(pImage8, v, exp, size);
for(j=0; j<size.cy; j++)
for(int i=0; i<size.cx; i++)
z[j*size.cx+i] =
pComplex.CMul(pComplex.Conjg(u[j*size.cx+i]), v[j*size.cx+i]);
//filtering
if(dlg.m_phsa) //with phsa
pImgClass.Phsa(z, out, size, dlg.m_masksize); //크기 변 경 가능하게..
else //without phsa
for(int j=0; j<size.cy; j++)
for(int i=0; i<size.cx; i++)
out[j*size.cx+i] =(float)
atan2(z[j*size.cx+i].im, z[j*size.cx+i].re);
for(j=0; j<size.cy; j++) //convert complex to 256image for(int i=0; i<size.cx; i++)
{
double value = out[j*size.cx+i];
ims[j*size.cx+i] = cImage[j*size.cx+i]=(BYTE)(
(value+3.141592) / (3.141592*2)*255);
} if(dlg.m_median)
pImgClass.MedianFilter(ims, cImage, size, 3);
SIZE csize;
pDoc->m_FFT->CalSquareSize(size, &csize);
이미지에 컴플렉스 변수를 생성해준다 나중에 인버스를 위해서
// .
pDoc->m_pComplex = new COMPLEX [csize.cx * csize.cy];
pDoc->oImageSize = size;
p D o c - > m _ p I m a g e . C o p y H e a d e r s ( m _ p I m a g e 1 . C l o n B m p F i l e H e a d e r , m_pImage1.tcDib, m_pImage1.pClonBitMapInfoHeader, cImage, size, 8);
strcpy(pDoc->m_pImage.m_strFileName, "FFT");
CTakeCjView* pView = (CTakeCjView*)pChild->GetActiveView();
pView->SetScrollSizes(MM_TEXT, pDoc->ImageSize);
pView->GetParentFrame()->RecalcLayout();
pView->ResizeParentToFit(false);
delete [] Intensity;
delete [] data;
delete [] u;
delete [] v;
delete [] z;
delete [] out;
delete [] ims;
delete [] pImage1;
delete [] pImage2;
delete [] pImage3;
delete [] pImage4;
delete [] pImage5;
delete [] pImage6;
delete [] pImage7;
delete [] pImage8;
delete [] cImage;
} }
void CControlDlg2::OnButtonLsTofile() {
CTakeCjApp* pApp = (CTakeCjApp*)AfxGetApp();
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->SetLogData("Launch Least square fitting from files");
CLSDlg dlg;
if(dlg.DoModal()==IDOK) {
파일을 전부 열어서 //
pApp->FileNew1();
CChildFrame* pChild=(CChildFrame*)pMain->GetActiveFrame();
CTakeCjDoc* pDoc=(CTakeCjDoc*)pChild->GetActiveDocument();
//pDoc->SetTitle(FileName);
SIZE size = {640, 480};
CIPSGImgCls m_pImage1, m_pImage2, m_pImage3, m_pImage4;
BYTE* pImage1, *pImage2, *pImage3, *pImage4, *cImage;
float* oImage, *xImage, *yImage, *fImage1, *fImage2, *fImage3,
*fImage4;
pImage1 = new BYTE[size.cx * size.cy];
pImage2 = new BYTE[size.cx * size.cy];
pImage3 = new BYTE[size.cx * size.cy];
pImage4 = new BYTE[size.cx * size.cy];
cImage = new BYTE[size.cx * size.cy];
oImage = new float[size.cx * size.cy];
fImage1 = new float[size.cx * size.cy];
fImage2 = new float[size.cx * size.cy];
fImage3 = new float[size.cx * size.cy];
fImage4 = new float[size.cx * size.cy];
xImage = new float[size.cx * size.cy];
yImage = new float[size.cx * size.cy];
m_pImage1.LoadBmpImage(dlg.m_FileName1);
m_pImage2.LoadBmpImage(dlg.m_FileName2);
m_pImage3.LoadBmpImage(dlg.m_FileName3);
m_pImage4.LoadBmpImage(dlg.m_FileName4);
m_pImage1.GetBuffer(pImage1);
m_pImage2.GetBuffer(pImage2);
m_pImage3.GetBuffer(pImage3);
m_pImage4.GetBuffer(pImage4);
이미지의 크기를 얻어온다
// .
pDoc->ImageSize = size;
for(int j=0; j<size.cy; j++) {
for(int i=0; i<size.cx; i++) {
fImage1[j*size.cx +i]
=(float)((float)pImage1[j*size.cx + i]/(float)255*M_PI*2-M_PI);
fImage2[j*size.cx +i]
=(float)((float)pImage2[j*size.cx + i]/(float)255*M_PI*2-M_PI);
fImage3[j*size.cx +i]
=(float)((float)pImage3[j*size.cx + i]/(float)255*M_PI*2-M_PI);
fImage4[j*size.cx +i]
=(float)((float)pImage4[j*size.cx + i]/(float)255*M_PI*2-M_PI);
} }
for(j=0; j<size.cy; j++)
for(int i=0; i<size.cx; i++) {
xImage[j*size.cx+i] =
(float)(fImage1[j*size.cx+i]-fImage4[j*size.cx+i]);
yImage[j*size.cx+i] =
(float)(fImage2[j*size.cx+i]-fImage3[j*size.cx+i]);
}
pMain->pLs->LeastSquareFit(xImage, yImage, oImage, size, 11);
float max, min;
max = min = oImage[0];
for(j=0; j<size.cy; j++)
for(int i=0; i<size.cx; i++) {
if(max < oImage[j*size.cx+i])
max = oImage[j*size.cx + i];
if(min > oImage[j*size.cx + i]) min = oImage[j*size.cx + i];
}
for(j=0; j<size.cy; j++)
for(int i=0; i<size.cx; i++) {
BYTE Boundary = (BYTE)((double)(oImage[j*size.cx + i]
- min)/(double)(max-min) * 255);
if(Boundary>255)
cImage[j*size.cx+i] = 255;
else
cImage[j*size.cx +i] =Boundary;
}
p D o c - > m _ p I m a g e . C o p y H e a d e r s ( m _ p I m a g e 1 . C l o n B m p F i l e H e a d e r , m_pImage1.tcDib, m_pImage1.pClonBitMapInfoHeader, cImage, size, 8);
delete [] cImage;
delete [] xImage;
delete [] yImage;
delete [] oImage;
delete [] pImage1;
delete [] pImage2;
delete [] pImage3;
delete [] pImage4;
delete [] fImage1;
delete [] fImage2;
delete [] fImage3;
delete [] fImage4;
SIZE csize;
pDoc->m_FFT->CalSquareSize(size, &csize);
이미지에 컴플렉스 변수를 생성해준다 나중에 인버스를 위해서
// .
pDoc->m_pComplex = new COMPLEX [csize.cx * csize.cy];
pDoc->oImageSize = size;
CTakeCjView* pView = (CTakeCjView*)pChild->GetActiveView();
pView->SetScrollSizes(MM_TEXT, pDoc->ImageSize);
pView->GetParentFrame()->RecalcLayout();
pView->ResizeParentToFit(false);
}
}