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