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


// ExtractCurveDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "surfware.h" 
#include "ExtractCurveDlg.h" 
#include "SurfWareDoc.h" 
#include "SurfNurbsSurface.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CExtractCurveDlg dialog 
 
 
CExtractCurveDlg::CExtractCurveDlg(CString TitleText,CSurfWareDoc* pDoc ,int mode,CWnd* pParent) 
	: CDialog(CExtractCurveDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CExtractCurveDlg) 
	m_fPercent = 0.0f; 
	m_iDir = 0; 
	m_pDoc=pDoc; 
	m_TitleText=TitleText; 
	m_mode=mode; 
	//}}AFX_DATA_INIT 
} 
 
 
void CExtractCurveDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CExtractCurveDlg) 
	DDX_Control(pDX, IDC_DIR_V, m_btDirV); 
	DDX_Control(pDX, IDC_DIR_U, m_btDirU); 
	DDX_Control(pDX, IDC_SLD, m_sldPercent); 
	DDX_Control(pDX, IDC_PERCENT, m_edPercent); 
	DDX_Text(pDX, IDC_PERCENT, m_fPercent); 
	DDX_Radio(pDX, IDC_DIR_U, m_iDir); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CExtractCurveDlg, CDialog) 
	//{{AFX_MSG_MAP(CExtractCurveDlg) 
	ON_WM_DESTROY() 
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLD, OnCustomdrawSld) 
	ON_EN_CHANGE(IDC_PERCENT, OnChangePercent) 
	ON_BN_CLICKED(IDC_DIR_U, OnDirU) 
	ON_BN_CLICKED(IDC_DIR_V, OnDirV) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CExtractCurveDlg message handlers 
 
BOOL CExtractCurveDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	m_sldPercent.SetRange(0,10000); 
 
	for(int i=999;i<9999;i+=1000) 
		m_sldPercent.SetTic(i); 
	if(m_mode==0) 
	{	CSurfNurbsCurve* tempCV=new CSurfNurbsCurve; 
		tempCV->SetColor(RGB(255,0,0)); 
		m_pDoc->m_TempCurve.AddTail(tempCV); 
		this->SetWindowText(m_TitleText); 
	} 
	else if(m_mode==1)	 
	{ 
		CSurfNurbsCurve* tempCV1=new CSurfNurbsCurve; 
		CSurfNurbsCurve* tempCV2=new CSurfNurbsCurve; 
		CSurfNurbsCurve* tempCV3=new CSurfNurbsCurve; 
		CSurfNurbsCurve* tempCV4=new CSurfNurbsCurve; 
		CSurfNurbsCurve* tempCV5=new CSurfNurbsCurve; 
		CSurfNurbsCurve* tempCV6=new CSurfNurbsCurve; 
		tempCV1->SetColor(RGB(255,0,0)); 
		tempCV2->SetColor(RGB(255,0,0)); 
		tempCV3->SetColor(RGB(255,0,0)); 
		tempCV4->SetColor(RGB(255,0,0)); 
		tempCV5->SetColor(RGB(255,0,0)); 
		tempCV6->SetColor(RGB(255,0,0)); 
		m_pDoc->m_TempCurve.AddTail(tempCV1); 
		m_pDoc->m_TempCurve.AddTail(tempCV2); 
		m_pDoc->m_TempCurve.AddTail(tempCV3); 
		m_pDoc->m_TempCurve.AddTail(tempCV4); 
		m_pDoc->m_TempCurve.AddTail(tempCV5); 
		m_pDoc->m_TempCurve.AddTail(tempCV6); 
		this->SetWindowText(m_TitleText); 
	 
	} 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CExtractCurveDlg::OnDestroy()  
{ 
	CDialog::OnDestroy(); 
	if(m_mode==0) 
	{ 
		m_pDoc->m_TempCurve.DelAllObject(); 
	} 
	else if(m_mode==1) 
	{ 
		m_pDoc->m_TempCurve.DelAllObject(); 
		//m_pDoc->m_TempSurface.DelAllObject(); 
	} 
	 
	 
} 
 
void CExtractCurveDlg::OnCustomdrawSld(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	m_fPercent=(float)m_sldPercent.GetPos()/100.; 
	CString str; 
	str.Format("%.2f",m_fPercent); 
	m_edPercent.SetWindowText(str); 
	UpdateViews(); 
	*pResult = 0; 
} 
 
void CExtractCurveDlg::OnChangePercent()  
{ 
	UpdateData(TRUE); 
	m_sldPercent.SetPos(m_fPercent*100); 
} 
 
void CExtractCurveDlg::UpdateViews() 
{ 
	if(m_mode==0) 
	{ 
		CSurfNurbsSurface* sf=m_pDoc->m_CurrentSelSurface.GetHead(); 
		m_pDoc->m_TempCurve.GetHead()->NURBS_ExtractCurve(*sf,m_fPercent/100.,((m_iDir)?1:2)); 
		m_pDoc->UpdateAllViews(NULL); 
	} 
	else if(m_mode==1) 
	{ 
		CSurfNurbsVolume* tempvol=m_pDoc->m_CurrentSelVolume.GetHead(); 
		CSurfNurbsSurface *tempSurface1=new CSurfNurbsSurface; 
		CSurfNurbsSurface *tempSurface2=new CSurfNurbsSurface; 
		CSurfNurbsSurface *tempSurface3=new CSurfNurbsSurface; 
		CSurfNurbsSurface *tempSurface4=new CSurfNurbsSurface; 
		CSurfNurbsSurface *tempSurface5=new CSurfNurbsSurface; 
		CSurfNurbsSurface *tempSurface6=new CSurfNurbsSurface; 
 
		tempvol->GetSurfFromVolume(*tempSurface1,1,0); 
		tempvol->GetSurfFromVolume(*tempSurface2,1,1); 
		tempvol->GetSurfFromVolume(*tempSurface3,2,0); 
		tempvol->GetSurfFromVolume(*tempSurface4,2,1); 
		tempvol->GetSurfFromVolume(*tempSurface5,3,0); 
		tempvol->GetSurfFromVolume(*tempSurface6,3,1); 
         
		POSITION pos=m_pDoc->m_TempCurve.GetHeadPosition(); 
	 
		m_pDoc->m_TempCurve.GetNext(pos)->NURBS_ExtractCurve(*tempSurface1,m_fPercent/100.,((m_iDir)?1:2)); 
		m_pDoc->m_TempCurve.GetNext(pos)->NURBS_ExtractCurve(*tempSurface2,m_fPercent/100.,((m_iDir)?1:2)); 
		m_pDoc->m_TempCurve.GetNext(pos)->NURBS_ExtractCurve(*tempSurface3,m_fPercent/100.,((m_iDir)?1:2)); 
		m_pDoc->m_TempCurve.GetNext(pos)->NURBS_ExtractCurve(*tempSurface4,m_fPercent/100.,((m_iDir)?1:2)); 
		m_pDoc->m_TempCurve.GetNext(pos)->NURBS_ExtractCurve(*tempSurface5,m_fPercent/100.,((m_iDir)?1:2)); 
		m_pDoc->m_TempCurve.GetNext(pos)->NURBS_ExtractCurve(*tempSurface6,m_fPercent/100.,((m_iDir)?1:2)); 
	 
		m_pDoc->UpdateAllViews(NULL); 
	} 
} 
 
void CExtractCurveDlg::OnDirU()  
{ 
	m_iDir=0; 
	UpdateViews();	 
} 
 
void CExtractCurveDlg::OnDirV()  
{ 
	m_iDir=1; 
	UpdateViews();	 
}