📄 pmacctrldlg.cpp
字号:
// PmacCtrlDlg.cpp : implementation file
//
#include "stdafx.h"
#include "PmacCtrl.h"
#include "PmacCtrlDlg.h"
#include <math.h>
#include "process.h"
#define BUFFER MAX_PATH
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPmacCtrlDlg dialog
CPmacCtrlDlg::CPmacCtrlDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPmacCtrlDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPmacCtrlDlg)
m_TimeCheck = FALSE;
m_Structure = -1;
m_Info = _T("");
m_SzEdit = 0.0;
m_SyEdit = 0.0;
m_SxEdit = 0.0;
m_ExEdit = 0.0;
m_EyEdit = 0.0;
m_EzEdit = 0.0;
m_EaEdit = 0.0;
m_EbEdit = 0.0;
m_SaEdit = 0.0;
m_SbEdit = 0.0;
m_EangEdit = 0.0;
m_EcpxEdit = 0.0;
m_EcpyEdit = 0.0;
m_EcpzEdit = 0.0;
m_ErEdit = 0.0;
m_SangEdit = 0.0;
m_ScpxEdit = 0.0;
m_ScpyEdit = 0.0;
m_ScpzEdit = 0.0;
m_SrEdit = 0.0;
m_PaEdit = 0.0;
m_PbEdit = 0.0;
m_PcEdit = 0.0;
m_PxEdit = 0.0;
m_PyEdit = 0.0;
m_PzEdit = 0.0;
m_Axis1Edit = 0.0;
m_Axis2Edit = 0.0;
m_Axis3Edit = 0.0;
m_Axis4Edit = 0.0;
m_Axis5Edit = 0.0;
m_Axis6Edit = 0.0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CPmacCtrlDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPmacCtrlDlg)
DDX_Control(pDX, IDC_TIME_EDIT, m_TimeEdit);
DDX_Control(pDX, IDC_StructurePara_EDIT, m_StructureParaEdit);
DDX_Control(pDX, IDC_COMBO_CHOICE, m_cb);
DDX_Radio(pDX, IDC_Structure1_RADIO, m_Structure);
DDX_Text(pDX, IDC_INFO, m_Info);
DDX_Text(pDX, IDC_SZ_EDIT, m_SzEdit);
DDX_Text(pDX, IDC_SY_EDIT, m_SyEdit);
DDX_Text(pDX, IDC_SX_EDIT, m_SxEdit);
DDX_Text(pDX, IDC_EX_EDIT, m_ExEdit);
DDX_Text(pDX, IDC_EY_EDIT, m_EyEdit);
DDX_Text(pDX, IDC_EZ_EDIT, m_EzEdit);
DDX_Text(pDX, IDC_EA_EDIT, m_EaEdit);
DDX_Text(pDX, IDC_EB_EDIT, m_EbEdit);
DDX_Text(pDX, IDC_SA_EDIT, m_SaEdit);
DDX_Text(pDX, IDC_SB_EDIT, m_SbEdit);
DDX_Text(pDX, IDC_EANG_EDIT, m_EangEdit);
DDX_Text(pDX, IDC_ECPX_EDIT, m_EcpxEdit);
DDX_Text(pDX, IDC_ECPY_EDIT, m_EcpyEdit);
DDX_Text(pDX, IDC_ECPZ_EDIT, m_EcpzEdit);
DDX_Text(pDX, IDC_ER_EDIT, m_ErEdit);
DDX_Text(pDX, IDC_SANG_EDIT, m_SangEdit);
DDX_Text(pDX, IDC_SCPX_EDIT, m_ScpxEdit);
DDX_Text(pDX, IDC_SCPY_EDIT, m_ScpyEdit);
DDX_Text(pDX, IDC_SCPZ_EDIT, m_ScpzEdit);
DDX_Text(pDX, IDC_SR_EDIT, m_SrEdit);
DDX_Text(pDX, IDC_PA_EDIT, m_PaEdit);
DDX_Text(pDX, IDC_PB_EDIT, m_PbEdit);
DDX_Text(pDX, IDC_PC_EDIT, m_PcEdit);
DDX_Text(pDX, IDC_PX_EDIT, m_PxEdit);
DDX_Text(pDX, IDC_PY_EDIT, m_PyEdit);
DDX_Text(pDX, IDC_PZ_EDIT, m_PzEdit);
DDX_Text(pDX, IDC_AXIS1_EDIT, m_Axis1Edit);
DDX_Text(pDX, IDC_AXIS2_EDIT, m_Axis2Edit);
DDX_Text(pDX, IDC_AXIS3_EDIT, m_Axis3Edit);
DDX_Text(pDX, IDC_AXIS4_EDIT, m_Axis4Edit);
DDX_Text(pDX, IDC_AXIS5_EDIT, m_Axis5Edit);
DDX_Text(pDX, IDC_AXIS6_EDIT, m_Axis6Edit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPmacCtrlDlg, CDialog)
//{{AFX_MSG_MAP(CPmacCtrlDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_FILE_EXIT, OnFileExit)
ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
ON_COMMAND(ID_HELP_HELP, OnHelpHelp)
ON_COMMAND(ID_CTRL_LOADFILE, OnCtrlLoadfile)
ON_BN_CLICKED(IDC_LOADFILE, OnLoadfile)
ON_BN_CLICKED(IDC_EXIT, OnExit)
ON_BN_CLICKED(IDC_Show_BUTTON, OnShowBUTTON)
ON_BN_CLICKED(IDC_Structure1_RADIO, OnStructure1RADIO)
ON_BN_CLICKED(IDC_Structure2_RADIO, OnStructure2RADIO)
ON_BN_CLICKED(IDC_Structure3_RADIO, OnStructure3RADIO)
ON_BN_CLICKED(IDC_Structure4_RADIO, OnStructure4RADIO)
ON_BN_CLICKED(IDC_Structure5_RADIO, OnStructure5RADIO)
ON_CBN_SELCHANGE(IDC_COMBO_CHOICE, OnSelchangeComboChoice)
ON_BN_CLICKED(IDC_DEFAULT, OnDefault)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_BN_CLICKED(IDC_CONFIRM, OnConfirm)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_STRUCTURE_FIVE, OnStructureFive)
ON_COMMAND(ID_STRUCTURE_FOUR, OnStructureFour)
ON_COMMAND(ID_STRUCTURE_ONE, OnStructureOne)
ON_COMMAND(ID_STRUCTURE_THREE, OnStructureThree)
ON_COMMAND(ID_STRUCTURE_TWO, OnStructureTwo)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_EN_CHANGE(IDC_SR_EDIT, OnChangeSrEdit)
ON_EN_CHANGE(IDC_SCPX_EDIT, OnChangeScpxEdit)
ON_EN_CHANGE(IDC_SCPY_EDIT, OnChangeScpyEdit)
ON_EN_CHANGE(IDC_SCPZ_EDIT, OnChangeScpzEdit)
ON_COMMAND(ID_FILE_SAVEAS, OnFileSaveas)
ON_COMMAND(ID_FILE_DEFAULT, OnFileDefault)
ON_BN_CLICKED(IDC_OUTPUTPARA, OnOutputpara)
ON_COMMAND(ID_CTRL_OUTPUTPARA, OnCtrlOutputpara)
ON_COMMAND(ID_CTRL_ZERO, OnCtrlZero)
ON_COMMAND(ID_CTRL_EXCURSION, OnCtrlExcursion)
ON_COMMAND(ID_CTRL_EXECUTE, OnCtrlExecute)
ON_BN_CLICKED(IDC_ZERO, OnZero)
ON_BN_CLICKED(IDC_EXCURSION, OnExcursion)
ON_BN_CLICKED(IDC_EXECUTE, OnExecute)
ON_COMMAND(ID_CTRL_AUTOEXECUTE, OnCtrlAutoexecute)
ON_COMMAND(ID_CTRL_LOADNC, OnCtrlLoadnc)
ON_BN_CLICKED(IDC_LOADNC, OnLoadnc)
ON_BN_CLICKED(IDC_AUTOEXECUTE, OnAutoexecute)
ON_BN_CLICKED(IDC_VIEW_INTERPOLATION, OnViewInterpolation)
ON_BN_CLICKED(IDC_VIEW_INVKINE, OnViewInvkine)
ON_COMMAND(ID_CTRL_INITIAL, OnCtrlInitial)
ON_BN_CLICKED(IDC_INITIAL, OnInitial)
ON_COMMAND(ID_CTRL_INTERPOLATION, OnCtrlInterpolationL)
ON_COMMAND(ID_CTRL_INVKINE, OnCtrlInvkineA)
ON_COMMAND(ID_CTRL_PROCESS, OnCtrlProcess)
ON_COMMAND(ID_CTRL_VIEW_INTERPOLATION, OnCtrlViewInterpolation)
ON_COMMAND(ID_CTRL_VIEW_INVKINE, OnCtrlViewInvkine)
ON_COMMAND(ID_CTRL_OUTPUTPHOTO, OnCtrlOutputphoto)
ON_WM_TIMER()
ON_WM_TIMER()
ON_WM_KILLFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPmacCtrlDlg message handlers
BOOL CPmacCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
// *********************************************************************************
// ==========保存当前路径==========
// Save current dir
DWORD cchCurDir;
LPTSTR lpszCurDir;
TCHAR tchBuffer[BUFFER];
lpszCurDir = tchBuffer;
GetCurrentDirectory(cchCurDir, lpszCurDir);
BASEDIR = lpszCurDir;
// Create a new directory named Data.
CreateDirectory(BASEDIR + "\\Data", NULL);
// ==========初始化对话框数据==========
// Set timer for real-time time show
SetTimer(1001,1000,NULL);
// Initialize Information show
m_Info = "欢迎使用基于Windows平台的PMAC控制程序!";
// Initialize Structure Choice Radio Button
m_Structure = 0;
// Initialize Track Choice Combo Box
m_cb.AddString("直线_LINE");
m_cb.AddString("圆_CIRCLE");
m_cb.AddString("螺旋线_HELIX");
m_cb.SelectString(-1, "直线_LINE");
UpdateData(FALSE);
// Default: Line is chosen, enable line parameters inputs, disable other inputs
GetDlgItem(IDC_SR_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_SANG_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_SCPX_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_SCPY_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_SCPZ_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_ER_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_EANG_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_ECPX_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_ECPY_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_ECPZ_EDIT)->EnableWindow(FALSE);
// Initialize line parameter
m_SxEdit = 90; m_ExEdit = 0;
m_SyEdit = 90; m_EyEdit = 0;
m_SzEdit = -800; m_EzEdit = -800;
m_SaEdit = 0; m_EaEdit = 0;
m_SbEdit = 0; m_EbEdit = 0;
UpdateData(FALSE);
// Initialize Structure Parameter View Edit Box
char paraInitialEdit[10000];
strcpy(paraInitialEdit, "您选择的是:");
strcat(paraInitialEdit, "构型-1。\t\t\t");
strcat(paraInitialEdit, "---------------------------------");
strcat(paraInitialEdit, "静平台直径1485mm,距顶板底面84mm,6个铰链点的角度见图例;\t\t\t");
strcat(paraInitialEdit, " ");
strcat(paraInitialEdit, "动平台直径340mm,距动平台顶面61.5mm,6个铰链点的角度见图例。\t\t");
strcat(paraInitialEdit, " ");
strcat(paraInitialEdit, "各铰链点位置分布见图例。");
m_StructureParaEdit.SetSel(0,-1);
m_StructureParaEdit.ReplaceSel(paraInitialEdit);
// Initialize progress view in the middle
CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem (IDC_PROGRESS);
pProg->SetRange(0, 100);
pProg->SetPos(50);
// ==========LOAD DLL==========
hlib = LoadLibrary ("PComm32.dll");
// Test if PComm32.dll is loaded successfully
if ( !(hlib = LoadLibrary("PComm32.dll")) )
{
AfxMessageBox("Fail to load dll!");
return FALSE;
}
// Get function address
OpenPmacDevice = (OPENPMACDEVICE)GetProcAddress(hlib,"OpenPmacDevice");
// if (OpenPmacDevice == NULL) return;
ClosePmacDevice = (CLOSEPMACDEVICE)GetProcAddress(hlib,"ClosePmacDevice");
// if (ClosePmacDevice == NULL) return;
PmacDownload = (PMACDOWNLOADA)GetProcAddress(hlib,"PmacDownloadA");
// if (PmacDownload == NULL) return;
PmacFlush = (PMACFLUSH)GetProcAddress(hlib,"PmacFlush");
// if (PmacFlush == NULL) return;
PmacGetResponse = (PMACGETRESPONSEA)GetProcAddress(hlib,"PmacGetResponseA");
// if (PmacGetResponse == NULL) return;
// *********************************************************************************
return TRUE; // return TRUE unless you set the focus to a control
}
void CPmacCtrlDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -