www.pudn.com > SurfWareNew06.3.5(LYW).rar > CurveSplitterDlg.cpp


// CurveSplitterDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "surfware.h" 
#include "CurveSplitterDlg.h" 
#include "SurfWareDoc.h" 
#include "Nurbs_Lib/NURBS_PointND.h" 
#include "Nurbs_Lib/NURBS_HPointND.h" 
#include "HPoint.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CCurveSplitterDlg dialog 
 
CCurveSplitterDlg::CCurveSplitterDlg(CSurfWareDoc *pDoc, CWnd* pParent /*=NULL*/) 
	: CDialog(CCurveSplitterDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CCurveSplitterDlg) 
	m_fPercent = 0.0f; 
	m_iPercent = 0; 
	m_pDoc=pDoc; 
	//}}AFX_DATA_INIT 
} 
 
 
void CCurveSplitterDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CCurveSplitterDlg) 
	DDX_Control(pDX, IDC_POS, m_edPtInfo); 
	DDX_Control(pDX, IDC_SLD, m_sldPercent); 
	DDX_Control(pDX, IDC_PERCENT, m_edPercent); 
	DDX_Text(pDX, IDC_PERCENT, m_fPercent); 
	DDV_MinMaxFloat(pDX, m_fPercent, 0.f, 100.f); 
	DDX_Slider(pDX, IDC_SLD, m_iPercent); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CCurveSplitterDlg, CDialog) 
	//{{AFX_MSG_MAP(CCurveSplitterDlg) 
	ON_EN_CHANGE(IDC_PERCENT, OnChangePercent) 
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLD, OnCustomdrawSld) 
	ON_WM_DESTROY() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CCurveSplitterDlg message handlers 
 
void CCurveSplitterDlg::UpdateViews() 
{ 
	HPoint pt1=m_pDoc->m_CurrentSelCurve.GetHead()->HPointAt(m_fPercent/100.); 
	pt.SetX(pt1.GetX()); 
	pt.SetY(pt1.GetY()); 
	pt.SetZ(pt1.GetZ()); 
	m_pDoc->m_FitPtContainer.Reset(); 
	m_pDoc->m_FitPtContainer.add(&pt); 
 
	m_pDoc->UpdateAllViews(NULL); 
} 
 
 
 
void CCurveSplitterDlg::OnChangePercent()  
{ 
	UpdateData(TRUE); 
	m_sldPercent.SetPos(m_fPercent*100); 
	UpdatePtInfo();  
	UpdateViews(); 
} 
 
void CCurveSplitterDlg::UpdatePtInfo() 
{ 
	CString ptInfo; 
	ptInfo.Format("(%.4f,%.4f,%.4f)",pt.GetX(),pt.GetY(),pt.GetZ()); 
	m_edPtInfo.SetWindowText(ptInfo); 
} 
 
BOOL CCurveSplitterDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	UpdateViews(); 
	UpdatePtInfo(); 
 
	m_sldPercent.SetRange(0,10000); 
 
	for(int i=999;i<9999;i+=1000) 
		m_sldPercent.SetTic(i); 
	 
	HPoint pt1=m_pDoc->m_CurrentSelCurve.GetHead()->GetCPT(0); 
 
	pt.SetX(pt1.GetX()); 
	pt.SetY(pt1.GetY()); 
	pt.SetZ(pt1.GetZ()); 
 
	m_pDoc->m_FitPtContainer.add(&pt); 
 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CCurveSplitterDlg::OnCustomdrawSld(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	m_fPercent=(float)m_sldPercent.GetPos()/100.; 
	CString str; 
	str.Format("%.2f",m_fPercent); 
	m_edPercent.SetWindowText(str); 
	UpdateViews(); 
	UpdatePtInfo();	 
	*pResult = 0; 
} 
 
void CCurveSplitterDlg::OnDestroy()  
{ 
	CDialog::OnDestroy(); 
	 
	m_pDoc->m_FitPtContainer.Reset(); 
	 
}