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();
}