www.pudn.com > SurfWareNew06.3.5(LYW).rar > ExtrudeCurveDlg.cpp
// ExtrudeCurveDlg.cpp : implementation file
//
#include "stdafx.h"
#include "surfware.h"
#include "ExtrudeCurveDlg.h"
#include "SurfNurbsCurve.h"
#include "Point.h"
#include "SurfWareDoc.h"
#include "SurfNurbsVolume.h"
#include "SurfNurbsSurface.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CExtrudeCurveDlg dialog
CExtrudeCurveDlg::CExtrudeCurveDlg(CSurfWareDoc* pDoc,int mode,CWnd* pParent /*=NULL*/)
: CDialog(CExtrudeCurveDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CExtrudeCurveDlg)
m_fX = 0.0f;
m_fY = 0.0f;
m_fZ = 0.0f;
m_fAmount = 0.0f;
m_pDoc=pDoc;
m_Mode=mode;
//}}AFX_DATA_INIT
}
void CExtrudeCurveDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CExtrudeCurveDlg)
DDX_Text(pDX, IDC_X, m_fX);
DDX_Text(pDX, IDC_Y, m_fY);
DDX_Text(pDX, IDC_Z, m_fZ);
DDX_Text(pDX, IDC_AMOUNT, m_fAmount);
DDV_MinMaxFloat(pDX, m_fAmount, 0.f, 1.e+007f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CExtrudeCurveDlg, CDialog)
//{{AFX_MSG_MAP(CExtrudeCurveDlg)
ON_BN_CLICKED(ID_PREVIEW, OnPreview)
ON_WM_DESTROY()
ON_EN_CHANGE(IDC_AMOUNT, OnChangeAmount)
ON_EN_CHANGE(IDC_X, OnChangeX)
ON_EN_CHANGE(IDC_Y, OnChangeY)
ON_EN_CHANGE(IDC_Z, OnChangeZ)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CExtrudeCurveDlg message handlers
void CExtrudeCurveDlg::OnPreview()
{
Point* pt=new Point(m_fX,m_fY,m_fZ);
CSurfNurbsCurve* cv;
CSurfNurbsSurface* sf;
if (m_Mode==0) {
cv=m_pDoc->m_CurrentSelCurve.GetElement(0);
m_pDoc->m_TempSurface.GetHead()->ExtrudeCurve(cv,pt,m_fAmount);
}else{
sf=m_pDoc->m_CurrentSelSurface.GetElement(0);
m_pDoc->m_TempVolume.GetHead()->ExtrudeSurface(sf,pt,m_fAmount);
}
m_pDoc->UpdateAllViews(NULL);
delete pt;
}
BOOL CExtrudeCurveDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CSurfNurbsSurface* tempSF;
CSurfNurbsVolume* tempVOL;
if (m_Mode==0) {
tempSF=new CSurfNurbsSurface;
tempSF->SetColor(RGB(255,0,0));
m_pDoc->m_TempSurface.AddTail(tempSF);
}else{
tempVOL=new CSurfNurbsVolume;
tempVOL->SetColor(RGB(255,0,0));
m_pDoc->m_TempVolume.AddTail(tempVOL);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CExtrudeCurveDlg::OnDestroy()
{
CDialog::OnDestroy();
if (m_Mode==0)
m_pDoc->m_TempSurface.DelAllObject();
else
m_pDoc->m_TempVolume.DelAllObject();
}
void CExtrudeCurveDlg::OnChangeAmount()
{
UpdateData();
}
void CExtrudeCurveDlg::OnChangeX()
{
UpdateData();
}
void CExtrudeCurveDlg::OnChangeY()
{
UpdateData();
}
void CExtrudeCurveDlg::OnChangeZ()
{
UpdateData();
}