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];					 
					 
				} 
			} 
}