www.pudn.com > mfcopentree.rar > ParaSetting.cpp
// ParaSetting.cpp : implementation file
//
#include "stdafx.h"
#include "mfcopen.h"
#include "ParaSetting.h"
#include "MainFrm.h"
#include "MfcopenView.h"
#include "TransParaDlg.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CParaSetting dialog
CParaSetting::CParaSetting(CWnd* pParent /*=NULL*/)
: CDialog(CParaSetting::IDD, pParent)
{
//{{AFX_DATA_INIT(CParaSetting)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CParaSetting::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CParaSetting)
DDX_Control(pDX, IDC_LIST1, m_ListPara);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CParaSetting, CDialog)
//{{AFX_MSG_MAP(CParaSetting)
ON_WM_SIZE()
ON_WM_PAINT()
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnclickList)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDoubleClickList)
ON_WM_CONTEXTMENU()
ON_COMMAND(IDM_ADDNEW, OnAddnew)
ON_COMMAND(IDM_DELETE, OnDelete)
ON_COMMAND(IDM_EDIT, OnEdit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CParaSetting message handlers
BOOL CParaSetting::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
which = 0;
HICON m_hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON6));
SetIcon(m_hIcon, TRUE);
CRect rect;
GetDlgItem(IDC_LIST1)->GetClientRect(&rect);
m_ListPara.SetBkColor(RGB(83,37,203));
m_ListPara.SetTextBkColor(RGB(111,158,10));
m_ListPara.SetTextColor(RGB(255,255,255));
m_ListPara.InsertColumn(0, "实体序列", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(1, "实体类型", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(2, "实体名", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(3, "设定次数", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(4, "X-平移", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(5, "Y-平移", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(6, "Z-平移", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(7, "起始时间", LVCFMT_CENTER, rect.Width()/9, -1);
m_ListPara.InsertColumn(8, "终止时间", LVCFMT_CENTER, rect.Width()/9, -1);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CParaSetting::Create()
{
return CDialog::Create(CParaSetting::IDD);
}
void CParaSetting::OnOK()
{
DestroyWindow();
}
void CParaSetting::OnCancel()
{
DestroyWindow();
}
void CParaSetting::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rc, rs;
GetClientRect(&rc);
rs.left = rc.left;
rs.right = rc.left+cx;
rs.top = rc.top;
rs.bottom = rs.top+cy;
if(m_ListPara.GetSafeHwnd() != NULL)
{
m_ListPara.MoveWindow(&rs, TRUE);
for(int i=0; i<9; i++)
m_ListPara.SetColumnWidth( i, cx/9);
}
}
void CParaSetting::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
m_ListPara.DeleteAllItems();
CMainFrame* pFrame;
pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMfcopenView *pview = (CMfcopenView *)(pFrame->GetActiveView());
CMfcopenDoc *pdoc = pview->GetDocument();
//Display the information!
CString str;
int index = 0;
for(int i=1; i<=pdoc->m_iDArrnumber; i++)
{
if(pview->m_itrannumber[i] == 0)
{
str.Format("%d", i);
m_ListPara.InsertItem( index, str);//原来是index = i-1
str.Format("%s", pdoc->m_savetype[i-1]);
m_ListPara.SetItemText( index, 1, str);
str.Format("%s", pdoc->m_savename[i-1]);
m_ListPara.SetItemText( index, 2, str);
str.Format("%d", 0);
m_ListPara.SetItemText( index, 3, str);
str.Format("%10.6f", pview->m_fInformation[i][0][0]);
m_ListPara.SetItemText( index, 4, str);
str.Format("%10.6f", pview->m_fInformation[i][0][1]);
m_ListPara.SetItemText( index, 5, str);
str.Format("%10.6f", pview->m_fInformation[i][0][2]);
m_ListPara.SetItemText( index, 6, str);
str.Format("%10.6f", pview->m_ftimemove[i][0][0]);
m_ListPara.SetItemText( index, 7, str);
str.Format("%10.6f", pview->m_ftimemove[i][0][1]);
m_ListPara.SetItemText( index, 8, str);
index++;
}
else
{
for(int j=0; jm_itrannumber[i]; j++)//
{
if(pview->m_ftimemove[i][j][0] == pview->m_ftimemove[i][j][1])
continue;
str.Format("%d", i);
m_ListPara.InsertItem( index, str);
str.Format("%s", pdoc->m_savetype[i-1]);
m_ListPara.SetItemText( index, 1, str);
str.Format("%s", pdoc->m_savename[i-1]);
m_ListPara.SetItemText( index, 2, str);
str.Format("%d", j+1);
m_ListPara.SetItemText( index, 3, str);
str.Format("%10.6f", pview->m_fInformation[i][j][0]);
m_ListPara.SetItemText( index, 4, str);
str.Format("%10.6f", pview->m_fInformation[i][j][1]);
m_ListPara.SetItemText( index, 5, str);
str.Format("%10.6f", pview->m_fInformation[i][j][2]);
m_ListPara.SetItemText( index, 6, str);
str.Format("%10.6f", pview->m_ftimemove[i][j][0]);
m_ListPara.SetItemText( index, 7, str);
str.Format("%10.6f", pview->m_ftimemove[i][j][1]);
m_ListPara.SetItemText( index, 8, str);
index++;
}
}
}
// Do not call CDialog::OnPaint() for painting messages
}
void CParaSetting::OnColumnclickList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CParaSetting::OnDoubleClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
DWORD dwPos = ::GetMessagePos();
CPoint point ((int)LOWORD(dwPos), (int)HIWORD(dwPos));
m_ListPara.ScreenToClient(&point);
int nIndex;
if((nIndex = m_ListPara.HitTest(point)) != -1)
{
CTransParaDlg dlg;
CString str_no = m_ListPara.GetItemText(nIndex, 0);
CString str_x = m_ListPara.GetItemText(nIndex, 4);
CString str_y = m_ListPara.GetItemText(nIndex, 5);
CString str_z = m_ListPara.GetItemText(nIndex, 6);
CString str_s = m_ListPara.GetItemText(nIndex, 7);
CString str_e = m_ListPara.GetItemText(nIndex, 8);
float x;
x = StrToFloat(str_x);
dlg.m_ftranx = x;
x = StrToFloat(str_y);
dlg.m_ftrany = x;
x = StrToFloat(str_z);
dlg.m_ftranz = x;
x = StrToFloat(str_s);
dlg.m_ftimestart = x;
x = StrToFloat(str_e);
dlg.m_ftimeend = x;
int tt = dlg.DoModal();
if(tt == IDOK)
{
CMainFrame* pFrame;
pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMfcopenView *pview = (CMfcopenView *)(pFrame->GetActiveView());
int m_itreeflag = StrToFloat(str_no);
if(pview->m_ftimemove[m_itreeflag][3][0] != pview->m_ftimemove[m_itreeflag][3][1])
{
MessageBox("测试版只能定义单个实体的四次运动!\n要想获得更多支持,请购买正式版!\n联系办法见帮助文件!", "注意", MB_OK | MB_ICONEXCLAMATION);
return;
}
//可能的多次运动检查,上限是4次
for(int k=0; k<4; k++)
{
//我们认为两次不同运动不会存在相交时间区间,端点除外,约定所有实体不从0开始运动
if(pview->m_ftimemove[m_itreeflag][k][0] == pview->m_ftimemove[m_itreeflag][k][1])
continue;
if((dlg.m_ftimeend <= pview->m_ftimemove[m_itreeflag][k][0] || dlg.m_ftimestart >= pview->m_ftimemove[m_itreeflag][k][1]) && pview->m_ftimemove[m_itreeflag][k][0]!=0)
continue;
else
{
MessageBox("这个时间区间已经定义了一个运动,您应该再选择别的区间!", "注意", MB_OK|MB_ICONEXCLAMATION);
return;
}
}
for(k=0; k<4; k++)
{
if(pview->m_ftimemove[m_itreeflag][k][0] == pview->m_ftimemove[m_itreeflag][k][1])
{
k++;
break;
}
}
pview->m_itrannumber[m_itreeflag] = k;
pview->m_fInformation[m_itreeflag][k-1][0] += (k-1 > 0 ? pview->m_fInformation[m_itreeflag][k-2][0] : 0);
pview->m_fInformation[m_itreeflag][k-1][1] += (k-1 > 0 ? pview->m_fInformation[m_itreeflag][k-2][1] : 0);
pview->m_fInformation[m_itreeflag][k-1][2] += (k-1 > 0 ? pview->m_fInformation[m_itreeflag][k-2][2] : 0);
//运动时间
pview->m_ftimemove[m_itreeflag][k-1][0] = dlg.m_ftimestart/pview->m_ftimes;
pview->m_ftimemove[m_itreeflag][k-1][1] = dlg.m_ftimeend/pview->m_ftimes;
//信息记录
pview->m_fInformation[m_itreeflag][k-1][0] += dlg.m_ftranx;
pview->m_fInformation[m_itreeflag][k-1][1] += dlg.m_ftrany;
pview->m_fInformation[m_itreeflag][k-1][2] += dlg.m_ftranz;
//运动长度,m_fmove[0、1、2]代表终止的位置
pview->m_fmove[m_itreeflag][k-1][0] = pview->m_fInformation[m_itreeflag][k-1][0]/pview->m_fBoxMax;
pview->m_fmove[m_itreeflag][k-1][1] = pview->m_fInformation[m_itreeflag][k-1][1]/pview->m_fBoxMax;
pview->m_fmove[m_itreeflag][k-1][2] = pview->m_fInformation[m_itreeflag][k-1][2]/pview->m_fBoxMax;
//速度控制
pview->m_ftimes = dlg.m_ftimes;
float tempstep = (pview->m_ftimemove[m_itreeflag][k-1][1]-pview->m_ftimemove[m_itreeflag][k-1][0])*50;
//首次减0
pview->m_fsteptranslate[m_itreeflag][k-1][0] = (pview->m_fmove[m_itreeflag][k-1][0]-(((k-1)>0)?pview->m_fmove[m_itreeflag][k-2][0]:0))/tempstep;
pview->m_fsteptranslate[m_itreeflag][k-1][1] = (pview->m_fmove[m_itreeflag][k-1][1]-(((k-1)>0)?pview->m_fmove[m_itreeflag][k-2][1]:0))/tempstep;
pview->m_fsteptranslate[m_itreeflag][k-1][2] = (pview->m_fmove[m_itreeflag][k-1][2]-(((k-1)>0)?pview->m_fmove[m_itreeflag][k-2][2]:0))/tempstep;
ReSort();
Invalidate(FALSE);
}
}
*pResult = 0;
}
float CParaSetting::StrToFloat(CString str)
{
int length = str.GetLength();
char *buffer = new char[length+1];
sprintf(buffer, "%s", str);
int pos = str.Find('.');
if(pos==-1)
{
pos = length;
}
int fuhao = str.Find('-');
if(fuhao == -1)
fuhao = 1;
else
{
if(fuhao < pos-1)
fuhao = -1;
else
fuhao = 1;
}
float x = 0;
for(int i=0; i 48+9)
continue;
if(i=0)
{
CMenu menuPopup;
menuPopup.LoadMenu(IDR_MENUPOPUP);
menuPopup.GetSubMenu(2)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
m_ListPara.ScreenToClient(&point);
which = m_ListPara.HitTest(point);
}
}
void CParaSetting::OnAddnew()
{
// TODO: Add your command handler code here
if(which != -1)
{
int nIndex = which;
which = 0;
CTransParaDlg dlg;
CString str_no = m_ListPara.GetItemText(nIndex, 0);
int tt = dlg.DoModal();
if(tt == IDOK)
{
if(dlg.m_ftimestart >= dlg.m_ftimeend)
{
MessageBox("时间区间设置错误:\n起始时间不小于终止时间!", "错误", MB_OK | MB_ICONSTOP);
return;
}
CMainFrame* pFrame;
pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMfcopenView *pview = (CMfcopenView *)(pFrame->GetActiveView());
int m_itreeflag = StrToFloat(str_no);
if(pview->m_ftimemove[m_itreeflag][3][0] != pview->m_ftimemove[m_itreeflag][3][1])
{
MessageBox("测试版只能定义单个实体的四次运动!\n要想获得更多支持,请购买正式版!\n联系办法见帮助文件!", "注意", MB_OK | MB_ICONEXCLAMATION);
return;
}
//可能的多次运动检查,上限是4次
for(int k=0; k<4; k++)
{
//我们认为两次不同运动不会存在相交时间区间,端点除外,约定所有实体不从0开始运动
if(pview->m_ftimemove[m_itreeflag][k][0] == pview->m_ftimemove[m_itreeflag][k][1])
continue;
if((dlg.m_ftimeend <= pview->m_ftimemove[m_itreeflag][k][0] || dlg.m_ftimestart >= pview->m_ftimemove[m_itreeflag][k][1]) && pview->m_ftimemove[m_itreeflag][k][0]!=0)
continue;
else
{
MessageBox("这个时间区间已经定义了一个运动,您应该再选择别的区间!", "注意", MB_OK|MB_ICONEXCLAMATION);
return;
}
}
for(k=0; k<4; k++)
{
if(pview->m_ftimemove[m_itreeflag][k][0] == pview->m_ftimemove[m_itreeflag][k][1])
{
k++;
break;
}
}
pview->m_itrannumber[m_itreeflag] = k;
//运动时间
pview->m_ftimemove[m_itreeflag][k-1][0] = dlg.m_ftimestart/pview->m_ftimes;
pview->m_ftimemove[m_itreeflag][k-1][1] = dlg.m_ftimeend/pview->m_ftimes;
//信息记录
pview->m_fInformation[m_itreeflag][k-1][0] = dlg.m_ftranx;
pview->m_fInformation[m_itreeflag][k-1][1] = dlg.m_ftrany;
pview->m_fInformation[m_itreeflag][k-1][2] = dlg.m_ftranz;
//运动长度,m_fmove[0、1、2]代表终止的位置
pview->m_fmove[m_itreeflag][k-1][0] = pview->m_fInformation[m_itreeflag][k-1][0]/pview->m_fBoxMax;
pview->m_fmove[m_itreeflag][k-1][1] = pview->m_fInformation[m_itreeflag][k-1][1]/pview->m_fBoxMax;
pview->m_fmove[m_itreeflag][k-1][2] = pview->m_fInformation[m_itreeflag][k-1][2]/pview->m_fBoxMax;
float tempstep = (pview->m_ftimemove[m_itreeflag][k-1][1]-pview->m_ftimemove[m_itreeflag][k-1][0])*50;
//首次减0
pview->m_fsteptranslate[m_itreeflag][k-1][0] = pview->m_fmove[m_itreeflag][k-1][0]/tempstep;
pview->m_fsteptranslate[m_itreeflag][k-1][1] = pview->m_fmove[m_itreeflag][k-1][1]/tempstep;
pview->m_fsteptranslate[m_itreeflag][k-1][2] = pview->m_fmove[m_itreeflag][k-1][2]/tempstep;
ReSort();
Invalidate(FALSE);
}
}
}
void CParaSetting::OnDelete()
{
// TODO: Add your command handler code here
if(which != -1)
{
int nIndex = which;
which = 0;
CString str_no = m_ListPara.GetItemText(nIndex, 0);
CMainFrame* pFrame;
pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMfcopenView *pview = (CMfcopenView *)(pFrame->GetActiveView());
int m_itreeflag = StrToFloat(str_no);
int no = StrToFloat(m_ListPara.GetItemText(nIndex, 3));
pview->m_itrannumber[m_itreeflag]--;
pview->m_fInformation[m_itreeflag][no-1][0] = 0;
pview->m_fInformation[m_itreeflag][no-1][1] = 0;
pview->m_fInformation[m_itreeflag][no-1][2] = 0;
//运动时间
pview->m_ftimemove[m_itreeflag][no-1][0] = 0;
pview->m_ftimemove[m_itreeflag][no-1][1] = 0;
//运动长度,m_fmove[0、1、2]代表终止的位置
pview->m_fmove[m_itreeflag][no-1][0] = 0;
pview->m_fmove[m_itreeflag][no-1][1] = 0;
pview->m_fmove[m_itreeflag][no-1][2] = 0;
//速度控制
pview->m_ftimes = 1.0f;
//首次减0
pview->m_fsteptranslate[m_itreeflag][no-1][0] = 0;
pview->m_fsteptranslate[m_itreeflag][no-1][1] = 0;
pview->m_fsteptranslate[m_itreeflag][no-1][2] = 0;
for(int i=0; i<3; i++)//四次
{
if(pview->m_ftimemove[m_itreeflag][i][0] == pview->m_ftimemove[m_itreeflag][i][1])
{
for(int j=i; j<3; j++)
{
pview->m_fInformation[m_itreeflag][j][0] = pview->m_fInformation[m_itreeflag][j+1][0];
pview->m_fInformation[m_itreeflag][j][1] = pview->m_fInformation[m_itreeflag][j+1][1];
pview->m_fInformation[m_itreeflag][j][2] = pview->m_fInformation[m_itreeflag][j+1][2];
//运动时间
pview->m_ftimemove[m_itreeflag][j][0] = pview->m_ftimemove[m_itreeflag][j+1][0];
pview->m_ftimemove[m_itreeflag][j][1] = pview->m_ftimemove[m_itreeflag][j+1][1];
//运动长度,m_fmove[0、1、2]代表终止的位置
pview->m_fmove[m_itreeflag][j][0] = pview->m_fmove[m_itreeflag][j+1][0];
pview->m_fmove[m_itreeflag][j][1] = pview->m_fmove[m_itreeflag][j+1][1];
pview->m_fmove[m_itreeflag][j][2] = pview->m_fmove[m_itreeflag][j+1][2];
//首次减0
pview->m_fsteptranslate[m_itreeflag][j][0] = pview->m_fsteptranslate[m_itreeflag][j+1][0];
pview->m_fsteptranslate[m_itreeflag][j][1] = pview->m_fsteptranslate[m_itreeflag][j+1][1];
pview->m_fsteptranslate[m_itreeflag][j][2] = pview->m_fsteptranslate[m_itreeflag][j+1][2];
}
}
}
ReSort();
Invalidate(FALSE);
}
}
void CParaSetting::OnEdit()
{
// TODO: Add your command handler code here
if(which != -1)
{
int nIndex = which;
which = 0;
CTransParaDlg dlg;
CString str_no = m_ListPara.GetItemText(nIndex, 0);
CString str_cishu = m_ListPara.GetItemText(nIndex, 3);
CString str_x = m_ListPara.GetItemText(nIndex, 4);
CString str_y = m_ListPara.GetItemText(nIndex, 5);
CString str_z = m_ListPara.GetItemText(nIndex, 6);
CString str_s = m_ListPara.GetItemText(nIndex, 7);
CString str_e = m_ListPara.GetItemText(nIndex, 8);
float x;
x = StrToFloat(str_x);
dlg.m_ftranx = x;
x = StrToFloat(str_y);
dlg.m_ftrany = x;
x = StrToFloat(str_z);
dlg.m_ftranz = x;
x = StrToFloat(str_s);
dlg.m_ftimestart = x;
x = StrToFloat(str_e);
dlg.m_ftimeend = x;
int tt = dlg.DoModal();
if(tt == IDOK)
{
CMainFrame* pFrame;
pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMfcopenView *pview = (CMfcopenView *)(pFrame->GetActiveView());
int m_itreeflag = StrToFloat(str_no);
int cishu = StrToFloat(str_cishu);
if(cishu == 0)//第一次赋值
cishu = 1;
if(dlg.m_ftimestart >= dlg.m_ftimeend)
{
MessageBox("时间区间设置错误:\n起始时间不小于终止时间!", "错误", MB_OK | MB_ICONSTOP);
return;
}
for(int i=0; i<4; i++)
{
if(i == cishu-1)
continue;
if(dlg.m_ftimestart >= pview->m_ftimemove[m_itreeflag][i][1] || dlg.m_ftimeend <= pview->m_ftimemove[m_itreeflag][i][0])
{
}
else
{
MessageBox("时间区间设置错误:\n不可以在存在相交时间区间设置两种运动!", "错误", MB_OK | MB_ICONSTOP);
return;
}
}
pview->m_itrannumber[m_itreeflag]++;
//运动时间
pview->m_ftimemove[m_itreeflag][cishu-1][0] = dlg.m_ftimestart/pview->m_ftimes;
pview->m_ftimemove[m_itreeflag][cishu-1][1] = dlg.m_ftimeend/pview->m_ftimes;
//信息记录
pview->m_fInformation[m_itreeflag][cishu-1][0] = dlg.m_ftranx;
pview->m_fInformation[m_itreeflag][cishu-1][1] = dlg.m_ftrany;
pview->m_fInformation[m_itreeflag][cishu-1][2] = dlg.m_ftranz;
//运动长度,m_fmove[0、1、2]代表终止的位置
pview->m_fmove[m_itreeflag][cishu-1][0] = pview->m_fInformation[m_itreeflag][cishu-1][0]/pview->m_fBoxMax;
pview->m_fmove[m_itreeflag][cishu-1][1] = pview->m_fInformation[m_itreeflag][cishu-1][1]/pview->m_fBoxMax;
pview->m_fmove[m_itreeflag][cishu-1][2] = pview->m_fInformation[m_itreeflag][cishu-1][2]/pview->m_fBoxMax;
float tempstep = (pview->m_ftimemove[m_itreeflag][cishu-1][1]-pview->m_ftimemove[m_itreeflag][cishu-1][0])*50;
//首次减0
pview->m_fsteptranslate[m_itreeflag][cishu-1][0] = pview->m_fmove[m_itreeflag][cishu-1][0]/tempstep;
pview->m_fsteptranslate[m_itreeflag][cishu-1][1] = pview->m_fmove[m_itreeflag][cishu-1][1]/tempstep;
pview->m_fsteptranslate[m_itreeflag][cishu-1][2] = pview->m_fmove[m_itreeflag][cishu-1][2]/tempstep;
ReSort();
Invalidate(FALSE);
}
}
}
void CParaSetting::ReSort()
{
CMainFrame* pFrame;
pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMfcopenView *pview = (CMfcopenView *)(pFrame->GetActiveView());
CMfcopenDoc *pdoc = pview->GetDocument();
float min[3] = {1000.0f};
for(int k=1; k<=pdoc->m_iDArrnumber; k++)
for(int i=0; i<4; i++)
for(int j=i+1; j<4; j++)
{
if(pview->m_ftimemove[k][j][0] < 0.1f)
break;
if(pview->m_ftimemove[k][i][0] > pview->m_ftimemove[k][j][0])
{
//运动时间
min[0] = pview->m_ftimemove[k][i][0];
min[1] = pview->m_ftimemove[k][i][1];
pview->m_ftimemove[k][i][0] = pview->m_ftimemove[k][j][0];
pview->m_ftimemove[k][i][1] = pview->m_ftimemove[k][j][1];
pview->m_ftimemove[k][j][0] = min[0];
pview->m_ftimemove[k][j][1] = min[1];
//信息记录
min[0] = pview->m_fInformation[k][i][0];
min[1] = pview->m_fInformation[k][i][1];
min[2] = pview->m_fInformation[k][i][2];
pview->m_fInformation[k][i][0] = pview->m_fInformation[k][j][0];
pview->m_fInformation[k][i][1] = pview->m_fInformation[k][j][1];
pview->m_fInformation[k][i][2] = pview->m_fInformation[k][j][2];
pview->m_fInformation[k][j][0] = min[0];
pview->m_fInformation[k][j][1] = min[1];
pview->m_fInformation[k][j][2] = min[2];
//运动长度,m_fmove[0、1、2]代表终止的位置
min[0] = pview->m_fmove[k][i][0];
min[1] = pview->m_fmove[k][i][1];
min[2] = pview->m_fmove[k][i][2];
pview->m_fmove[k][i][0] = pview->m_fmove[k][j][0];
pview->m_fmove[k][i][1] = pview->m_fmove[k][j][1];
pview->m_fmove[k][i][2] = pview->m_fmove[k][j][2];
pview->m_fmove[k][j][0] = min[0];
pview->m_fmove[k][j][1] = min[1];
pview->m_fmove[k][j][2] = min[2];
min[0] = pview->m_fsteptranslate[k][i][0];
min[1] = pview->m_fsteptranslate[k][i][1];
min[2] = pview->m_fsteptranslate[k][i][2];
pview->m_fsteptranslate[k][i][0] = pview->m_fsteptranslate[k][j][0];
pview->m_fsteptranslate[k][i][1] = pview->m_fsteptranslate[k][j][1];
pview->m_fsteptranslate[k][i][2] = pview->m_fsteptranslate[k][j][2];
pview->m_fsteptranslate[k][j][0] = min[0];
pview->m_fsteptranslate[k][j][1] = min[1];
pview->m_fsteptranslate[k][j][2] = min[2];
}
}
}