You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1880 lines
53 KiB
1880 lines
53 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include <stdafx.h> |
|
#include "hammer.h" |
|
#include "MainFrm.h" |
|
#include "FaceEditSheet.h" |
|
#include "GlobalFunctions.h" |
|
#include "DispDlg.h" |
|
#include "MapFace.h" |
|
#include "MapDisp.h" |
|
#include "ToolDisplace.h" |
|
#include "ToolManager.h" |
|
#include "SculptOptions.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include <tier0/memdbgon.h> |
|
|
|
|
|
#define DISPPAINT_DISTANCE_MIN 0 |
|
#define DISPPAINT_DISTANCE_MAX 60 |
|
#define DISPPAINT_SPATIALRADIUS_MIN 1 |
|
#define DISPPAINT_SPATIALRADIUS_MAX 1024 |
|
#define DISPPAINT_SPATIALRADIUS_STEP 16 |
|
|
|
//============================================================================= |
|
// |
|
// Displacement Create Dialog Functions |
|
// |
|
BEGIN_MESSAGE_MAP(CDispCreateDlg, CDialog) |
|
//{{AFX_MSG_MAP(CDispCreateDlg) |
|
ON_WM_VSCROLL() |
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
extern CToolDisplace* GetDisplacementTool(); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: constructor |
|
//----------------------------------------------------------------------------- |
|
CDispCreateDlg::CDispCreateDlg( CWnd *pParent ) : |
|
CDialog( CDispCreateDlg::IDD, pParent ) |
|
{ |
|
m_Power = 0; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
BOOL CDispCreateDlg::OnInitDialog(void) |
|
{ |
|
CDialog::OnInitDialog(); |
|
|
|
// set the initial power "3" |
|
SetDlgItemInt( ID_DISP_CREATE_POWER, 3 ); |
|
|
|
// setup the spinner - set range (range [2..4]) |
|
m_spinPower.SetBuddy( &m_editPower ); |
|
m_spinPower.SetRange( 2, 4 ); |
|
m_spinPower.SetPos( 3 ); |
|
|
|
return TRUE; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispCreateDlg::DoDataExchange( CDataExchange *pDX ) |
|
{ |
|
CDialog::DoDataExchange( pDX ); |
|
//{{AFX_DATA_MAP(CDispCreateDlg) |
|
DDX_Control( pDX, ID_DISP_CREATE_POWER_SPIN, m_spinPower ); |
|
DDX_Control( pDX, ID_DISP_CREATE_POWER, m_editPower ); |
|
DDX_Text( pDX, ID_DISP_CREATE_POWER, m_Power ); |
|
//}}AFX_DATA_MAP |
|
|
|
// clamp the power |
|
if( m_Power < 2 ) { m_Power = 2; } |
|
if( m_Power > 4 ) { m_Power = 4; } |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispCreateDlg::OnVScroll( UINT nSBCode, UINT nPos, CScrollBar *pScrollBar ) |
|
{ |
|
m_spinPower.SetPos( nPos ); |
|
SetDlgItemInt( ID_DISP_CREATE_POWER, nPos ); |
|
} |
|
|
|
|
|
//============================================================================= |
|
// |
|
// Displacement Noise Dialog Functions |
|
// |
|
BEGIN_MESSAGE_MAP(CDispNoiseDlg, CDialog) |
|
//{{AFX_MSG_MAP(CDispNoiseDlg) |
|
ON_NOTIFY( UDN_DELTAPOS, ID_DISP_NOISE_MIN_SPIN, OnSpinUpDown ) |
|
ON_NOTIFY( UDN_DELTAPOS, ID_DISP_NOISE_MAX_SPIN, OnSpinUpDown ) |
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: constructor |
|
//----------------------------------------------------------------------------- |
|
CDispNoiseDlg::CDispNoiseDlg( CWnd *pParent ) : |
|
CDialog( CDispNoiseDlg::IDD, pParent ) |
|
{ |
|
m_Min = m_Max = 0.0f; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
BOOL CDispNoiseDlg::OnInitDialog(void) |
|
{ |
|
CDialog::OnInitDialog(); |
|
|
|
// |
|
// set min, max initially to zero!! |
|
// |
|
CString strZero = "0.0"; |
|
SetDlgItemText( ID_DISP_NOISE_MIN, strZero ); |
|
SetDlgItemText( ID_DISP_NOISE_MAX, strZero ); |
|
|
|
// |
|
// setup spinners |
|
// |
|
m_spinMin.SetBuddy( &m_editMin ); |
|
m_spinMax.SetBuddy( &m_editMax ); |
|
|
|
return TRUE; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispNoiseDlg::DoDataExchange( CDataExchange *pDX ) |
|
{ |
|
CDialog::DoDataExchange( pDX ); |
|
//{{AFX_DATA_MAP(CDispNoiseDlg) |
|
DDX_Control( pDX, ID_DISP_NOISE_MIN_SPIN, m_spinMin ); |
|
DDX_Control( pDX, ID_DISP_NOISE_MAX_SPIN, m_spinMax ); |
|
DDX_Control( pDX, ID_DISP_NOISE_MIN, m_editMin ); |
|
DDX_Control( pDX, ID_DISP_NOISE_MAX, m_editMax ); |
|
DDX_Text( pDX, ID_DISP_NOISE_MIN, m_Min ); |
|
DDX_Text( pDX, ID_DISP_NOISE_MAX, m_Max ); |
|
//}}AFX_DATA_MAP |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispNoiseDlg::OnSpinUpDown( NMHDR *pNMHDR, LRESULT *pResult ) |
|
{ |
|
// |
|
// get scroll up down edit box |
|
// |
|
NM_UPDOWN *pNMUpDown = ( NM_UPDOWN* )pNMHDR; |
|
switch( pNMUpDown->hdr.idFrom ) |
|
{ |
|
case ID_DISP_NOISE_MIN_SPIN: |
|
{ |
|
CEdit *pEdit = ( CEdit* )GetDlgItem( ID_DISP_NOISE_MIN ); |
|
CString strMin; |
|
pEdit->GetWindowText( strMin ); |
|
m_Min = atof( strMin ); |
|
m_Min += 0.5f * ( -pNMUpDown->iDelta ); |
|
strMin.Format( "%4.2f", m_Min ); |
|
pEdit->SetWindowText( strMin ); |
|
*pResult = 0; |
|
break; |
|
} |
|
|
|
case ID_DISP_NOISE_MAX_SPIN: |
|
{ |
|
CEdit *pEdit = ( CEdit* )GetDlgItem( ID_DISP_NOISE_MAX ); |
|
CString strMax; |
|
pEdit->GetWindowText( strMax ); |
|
m_Max = atof( strMax ); |
|
m_Max += 0.5f * ( -pNMUpDown->iDelta ); |
|
strMax.Format( "%4.2f", m_Max ); |
|
pEdit->SetWindowText( strMax ); |
|
*pResult = 0; |
|
break; |
|
} |
|
} |
|
} |
|
|
|
|
|
//============================================================================= |
|
// |
|
// Displacement Paint Distance Dialog Functions |
|
// |
|
BEGIN_MESSAGE_MAP(CDispPaintDistDlg, CDialog) |
|
//{{AFX_MSG_MAP(CDispPaintDistDlg) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DIST_RAISELOWER, OnEffectRaiseLowerGeo ) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DIST_RAISETO, OnEffectRaiseToGeo ) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DIST_SMOOTH, OnEffectSmoothGeo ) |
|
|
|
ON_BN_CLICKED( ID_DISPPAINT_SOFTEDGE, OnBrushTypeSoftEdge ) |
|
ON_BN_CLICKED( ID_DISPPAINT_HARDEDGE, OnBrushTypeHardEdge ) |
|
|
|
ON_BN_CLICKED( ID_DISP_PAINT_DIST_SPATIAL, OnCheckSpatial ) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DIST_AUTOSEW, OnCheckAutoSew ) |
|
|
|
ON_CBN_SELCHANGE( ID_DISP_PAINT_DIST_BRUSH, OnComboBoxBrushGeo ) |
|
ON_CBN_SELCHANGE( ID_DISP_PAINT_DIST_AXIS, OnComboBoxAxis ) |
|
|
|
ON_WM_HSCROLL() |
|
ON_EN_CHANGE( ID_DISP_PAINT_DIST_EDIT_DISTANCE, OnEditDistance ) |
|
ON_EN_CHANGE( ID_DISP_PAINT_DIST_EDIT_RADIUS, OnEditRadius ) |
|
|
|
ON_WM_CLOSE() |
|
ON_WM_DESTROY() |
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: constructor |
|
//----------------------------------------------------------------------------- |
|
CDispPaintDistDlg::CDispPaintDistDlg( CWnd *pParent ) : |
|
CDialog( CDispPaintDistDlg::IDD, pParent ) |
|
{ |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CDispPaintDistDlg::~CDispPaintDistDlg() |
|
{ |
|
if ( m_comboboxBrush.m_hWnd ) |
|
{ |
|
m_comboboxBrush.Detach(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
BOOL CDispPaintDistDlg::OnInitDialog( void ) |
|
{ |
|
static bool bInit = false; |
|
|
|
CDialog::OnInitDialog(); |
|
|
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( !pTool ) |
|
return FALSE; |
|
|
|
// Set spatial tool flag. |
|
if ( !pTool->IsSpatialPainting() ) |
|
{ |
|
pTool->ToggleSpatialPainting(); |
|
} |
|
|
|
if ( !bInit ) |
|
{ |
|
m_flPrevDistance = 1.0f; |
|
m_flPrevRadius = 1.0f; |
|
m_nPrevBrush = 0; |
|
m_nPrevEffect = pTool->GetEffect(); |
|
pTool->GetPaintAxis( m_nPrevPaintAxis, m_vecPrevPaintAxis ); |
|
bInit = true; |
|
} |
|
else |
|
{ |
|
SetWindowPos( &wndTop, m_DialogPosRect.left, m_DialogPosRect.top, |
|
m_DialogPosRect.Width(), m_DialogPosRect.Height(), SWP_NOZORDER ); |
|
} |
|
|
|
// Initialize the combo boxes. |
|
InitComboBoxBrushGeo(); |
|
InitComboBoxAxis(); |
|
// Initialize the sliders. |
|
InitDistance(); |
|
InitRadius(); |
|
|
|
// Initialize the brush types. |
|
InitBrushType(); |
|
|
|
return TRUE; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::InitDistance( void ) |
|
{ |
|
// Set the slider range and initialize the "buddy." |
|
m_sliderDistance.SetBuddy( &m_editDistance, FALSE ); |
|
m_sliderDistance.SetRange( DISPPAINT_DISTANCE_MIN, DISPPAINT_DISTANCE_MAX ); |
|
|
|
// Get the displacement tool. |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
pTool->GetChannel( DISPPAINT_CHANNEL_POSITION, m_flPrevDistance ); |
|
|
|
// Initialize the distance slider and edit box. |
|
UpdateSliderDistance( m_flPrevDistance, true ); |
|
UpdateEditBoxDistance( m_flPrevDistance, true ); |
|
} |
|
else |
|
{ |
|
// Init distance slider and edit box. |
|
UpdateSliderDistance( 1.0f, true ); |
|
UpdateEditBoxDistance( 1.0f, true ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::InitRadius( void ) |
|
{ |
|
// Set the slider range and initialize the "buddy." |
|
m_sliderRadius.SetBuddy( &m_editRadius, FALSE ); |
|
m_sliderRadius.SetRange( DISPPAINT_SPATIALRADIUS_MIN, DISPPAINT_SPATIALRADIUS_MAX ); |
|
m_sliderRadius.SetTicFreq( DISPPAINT_SPATIALRADIUS_STEP ); |
|
// Get the displacement tool. |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
CButton *pcheckSpatial = ( CButton* )GetDlgItem( ID_DISP_PAINT_DIST_SPATIAL ); |
|
if ( pTool->IsSpatialPainting() ) |
|
{ |
|
pcheckSpatial->SetCheck( true ); |
|
EnableSliderRadius(); |
|
DisablePaintingComboBoxes(); |
|
} |
|
else |
|
{ |
|
pcheckSpatial->SetCheck( false ); |
|
DisableSliderRadius(); |
|
EnablePaintingComboBoxes(); |
|
} |
|
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::EnableSliderRadius( void ) |
|
{ |
|
// Enable the radius slider and edit box. |
|
m_sliderRadius.EnableWindow( TRUE ); |
|
m_editRadius.EnableWindow( TRUE ); |
|
|
|
// Get the displacement tool and restore the radius. |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
m_flPrevRadius = pTool->GetSpatialRadius(); |
|
|
|
// Update the radius slider and edit box. |
|
UpdateSliderRadius( m_flPrevRadius, true ); |
|
UpdateEditBoxRadius( m_flPrevRadius, true ); |
|
} |
|
else |
|
{ |
|
// Set the radius slider and edit box with default values. |
|
UpdateSliderRadius( 1.0f, true ); |
|
UpdateEditBoxRadius( 1.0f, true ); |
|
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::DisableSliderRadius( void ) |
|
{ |
|
// Disable the radius slider and edit box. |
|
m_sliderRadius.EnableWindow( FALSE ); |
|
m_editRadius.EnableWindow( FALSE ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::UpdateSpatialData( void ) |
|
{ |
|
// Get the displacement tool and restore the radius. |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
m_flPrevRadius = pTool->GetSpatialRadius(); |
|
|
|
// Update the radius slider and edit box. |
|
UpdateSliderRadius( m_flPrevRadius, true ); |
|
UpdateEditBoxRadius( m_flPrevRadius, true ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
bool CDispPaintDistDlg::InitComboBoxBrushGeo( void ) |
|
{ |
|
// |
|
// get the displacement paint brush icon combo box |
|
// |
|
m_comboboxBrush.Attach( GetDlgItem( ID_DISP_PAINT_DIST_BRUSH )->m_hWnd ); |
|
m_comboboxBrush.Init(); |
|
|
|
// reset the size of the combo box list item |
|
m_comboboxBrush.SetItemHeight( -1, m_comboboxBrush.m_IconSize.cy + 2 ); |
|
|
|
// initialize the radio button/brush combo box geometry data |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
pTool->SetEffect( m_nPrevEffect ); |
|
|
|
switch ( m_nPrevEffect ) |
|
{ |
|
case DISPPAINT_EFFECT_RAISELOWER: |
|
{ |
|
pTool->SetEffect( DISPPAINT_EFFECT_RAISELOWER ); |
|
SetEffectButtonGeo( DISPPAINT_EFFECT_RAISELOWER ); |
|
FilterComboBoxBrushGeo( DISPPAINT_EFFECT_RAISELOWER, true ); |
|
break; |
|
} |
|
case DISPPAINT_EFFECT_RAISETO: |
|
{ |
|
pTool->SetEffect( DISPPAINT_EFFECT_RAISETO ); |
|
SetEffectButtonGeo( DISPPAINT_EFFECT_RAISETO ); |
|
FilterComboBoxBrushGeo( DISPPAINT_EFFECT_RAISETO, true ); |
|
break; |
|
} |
|
case DISPPAINT_EFFECT_SMOOTH: |
|
{ |
|
pTool->SetEffect( DISPPAINT_EFFECT_SMOOTH ); |
|
SetEffectButtonGeo( DISPPAINT_EFFECT_SMOOTH ); |
|
FilterComboBoxBrushGeo( DISPPAINT_EFFECT_SMOOTH, true ); |
|
break; |
|
} |
|
default: |
|
{ |
|
return false; |
|
} |
|
} |
|
|
|
OnComboBoxBrushGeo(); |
|
} |
|
else |
|
{ |
|
OnEffectRaiseLowerGeo(); |
|
OnComboBoxBrushGeo(); |
|
} |
|
|
|
return true; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::InitBrushType( void ) |
|
{ |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
unsigned int uiBrushType = pTool->GetBrushType(); |
|
switch ( uiBrushType ) |
|
{ |
|
case DISPPAINT_BRUSHTYPE_SOFT: |
|
{ |
|
SetBrushTypeButtonGeo( DISPPAINT_BRUSHTYPE_SOFT ); |
|
break; |
|
} |
|
case DISPPAINT_BRUSHTYPE_HARD: |
|
{ |
|
SetBrushTypeButtonGeo( DISPPAINT_BRUSHTYPE_HARD ); |
|
break; |
|
} |
|
} |
|
|
|
if ( pTool->IsSpatialPainting() ) |
|
{ |
|
EnableBrushTypeButtons(); |
|
} |
|
else |
|
{ |
|
DisableBrushTypeButtons(); |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::FilterComboBoxBrushGeo( unsigned int nEffect, bool bInit ) |
|
{ |
|
// |
|
// remove all the old combo box data |
|
// |
|
int count = m_comboboxBrush.GetCount(); |
|
for ( int ndx = count - 1; ndx >= 0; ndx-- ) |
|
{ |
|
m_comboboxBrush.DeleteIcon( ndx ); |
|
} |
|
|
|
// |
|
// add the new combo box data based on the current paint "effect" |
|
// |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
CDispMapImageFilterManager *pFilterMgr; |
|
switch ( nEffect ) |
|
{ |
|
case DISPPAINT_EFFECT_RAISELOWER: { pFilterMgr = pTool->GetFilterRaiseLowerMgr(); break; } |
|
case DISPPAINT_EFFECT_RAISETO: { pFilterMgr = pTool->GetFilterRaiseToMgr(); break; } |
|
case DISPPAINT_EFFECT_SMOOTH: { pFilterMgr = pTool->GetFilterSmoothMgr(); break; } |
|
default: return; |
|
} |
|
|
|
if( pFilterMgr ) |
|
{ |
|
// |
|
// for each filter - add its icon to the icon combo box |
|
// |
|
for ( int iFilter = 0; iFilter < pFilterMgr->GetFilterCount(); iFilter++ ) |
|
{ |
|
// get the current filter |
|
CDispMapImageFilter *pFilter = pFilterMgr->GetFilter( iFilter ); |
|
|
|
// get the application directory |
|
char appDir[MAX_PATH]; |
|
APP()->GetDirectory( DIR_PROGRAM, appDir ); |
|
|
|
// append the filters directory name |
|
strcat( appDir, "filters\\" ); |
|
|
|
// append the directory prefix to the icon name |
|
CString iconFilename = appDir + pFilter->m_Name; |
|
|
|
// add the icon to the icon combo box |
|
m_comboboxBrush.AddIcon( iconFilename ); |
|
} |
|
|
|
// set initial paint brush |
|
if( bInit ) |
|
{ |
|
m_comboboxBrush.SetCurSel( m_nPrevBrush ); |
|
} |
|
else |
|
{ |
|
m_comboboxBrush.SetCurSel( 0 ); |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
bool CDispPaintDistDlg::InitComboBoxAxis( void ) |
|
{ |
|
// |
|
// add the paint types to the combo box -- keep them in their "defined" order |
|
// |
|
CString strPaintDir; |
|
|
|
// axial x direction |
|
strPaintDir = "X-Axis"; |
|
m_comboboxAxis.AddString( strPaintDir ); |
|
|
|
// axial y direction |
|
strPaintDir = "Y-Axis"; |
|
m_comboboxAxis.AddString( strPaintDir ); |
|
|
|
// axial z direction |
|
strPaintDir = "Z-Axis"; |
|
m_comboboxAxis.AddString( strPaintDir ); |
|
|
|
// subdivision direction |
|
strPaintDir = "Subdiv Normal"; |
|
m_comboboxAxis.AddString( strPaintDir ); |
|
|
|
// face normal direction |
|
strPaintDir = "Face Normal"; |
|
m_comboboxAxis.AddString( strPaintDir ); |
|
|
|
// set initial value |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
m_comboboxAxis.SetCurSel( m_nPrevPaintAxis ); |
|
pTool->SetPaintAxis( m_nPrevPaintAxis, m_vecPrevPaintAxis ); |
|
} |
|
else |
|
{ |
|
m_comboboxAxis.SetCurSel( 4 ); |
|
OnComboBoxAxis(); |
|
} |
|
|
|
return true; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::EnablePaintingComboBoxes( void ) |
|
{ |
|
m_comboboxBrush.EnableWindow( TRUE ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::DisablePaintingComboBoxes( void ) |
|
{ |
|
m_comboboxBrush.EnableWindow( FALSE ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::EnableBrushTypeButtons( void ) |
|
{ |
|
CButton *pRadioButton; |
|
pRadioButton = ( CButton* )GetDlgItem( ID_DISPPAINT_SOFTEDGE ); |
|
pRadioButton->EnableWindow( TRUE ); |
|
pRadioButton = ( CButton* )GetDlgItem( ID_DISPPAINT_HARDEDGE ); |
|
pRadioButton->EnableWindow( TRUE ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::DisableBrushTypeButtons( void ) |
|
{ |
|
CButton *pRadioButton; |
|
pRadioButton = ( CButton* )GetDlgItem( ID_DISPPAINT_SOFTEDGE ); |
|
pRadioButton->EnableWindow( FALSE ); |
|
pRadioButton = ( CButton* )GetDlgItem( ID_DISPPAINT_HARDEDGE ); |
|
pRadioButton->EnableWindow( FALSE ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::DoDataExchange( CDataExchange *pDX ) |
|
{ |
|
CDialog::DoDataExchange( pDX ); |
|
//{{AFX_DATA_MAP(CDispPaintDistDlg) |
|
DDX_Control( pDX, ID_DISP_PAINT_DIST_SLIDER_DISTANCE, m_sliderDistance ); |
|
DDX_Control( pDX, ID_DISP_PAINT_DIST_SLIDER_RADIUS, m_sliderRadius ); |
|
DDX_Control( pDX, ID_DISP_PAINT_DIST_EDIT_DISTANCE, m_editDistance ); |
|
DDX_Control( pDX, ID_DISP_PAINT_DIST_EDIT_RADIUS, m_editRadius ); |
|
DDX_Control( pDX, ID_DISP_PAINT_DIST_AXIS, m_comboboxAxis ); |
|
//}}AFX_DATA_MAP |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnComboBoxBrushGeo( void ) |
|
{ |
|
// get the displacement's filter manager |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
// get current selection |
|
int iSel = m_comboboxBrush.GetCurSel(); |
|
if ( iSel == LB_ERR ) |
|
return; |
|
|
|
unsigned int nEffect = pTool->GetEffect(); |
|
CDispMapImageFilterManager *pFilterMgr; |
|
switch ( nEffect ) |
|
{ |
|
case DISPPAINT_EFFECT_RAISELOWER: { pFilterMgr = pTool->GetFilterRaiseLowerMgr(); break; } |
|
case DISPPAINT_EFFECT_RAISETO: { pFilterMgr = pTool->GetFilterRaiseToMgr(); break; } |
|
case DISPPAINT_EFFECT_SMOOTH: { pFilterMgr = pTool->GetFilterSmoothMgr(); break; } |
|
default: return; |
|
} |
|
|
|
if ( pFilterMgr ) |
|
{ |
|
pFilterMgr->SetActiveFilter( iSel ); |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnComboBoxAxis( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
// |
|
// get the current paint type selection |
|
// |
|
int ndxSel = m_comboboxAxis.GetCurSel(); |
|
if ( ndxSel == LB_ERR ) |
|
return; |
|
|
|
// update the paint type |
|
UpdateAxis( ndxSel ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::UpdateAxis( int nAxis ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( !pTool ) |
|
return; |
|
|
|
// |
|
// update the paint type - direction |
|
// |
|
switch ( nAxis ) |
|
{ |
|
case DISPPAINT_AXIS_X: { pTool->SetPaintAxis( nAxis, Vector( 1.0f, 0.0f, 0.0f ) ); return; } |
|
case DISPPAINT_AXIS_Y: { pTool->SetPaintAxis( nAxis, Vector( 0.0f, 1.0f, 0.0f ) ); return; } |
|
case DISPPAINT_AXIS_Z: { pTool->SetPaintAxis( nAxis, Vector( 0.0f, 0.0f, 1.0f ) ); return; } |
|
case DISPPAINT_AXIS_SUBDIV: { pTool->SetPaintAxis( nAxis, Vector( 0.0f, 0.0f, 0.0f ) ); return; } |
|
case DISPPAINT_AXIS_FACE: { pTool->SetPaintAxis( nAxis, Vector( 0.0f, 0.0f, 1.0f ) ); return; } |
|
default: { return; } |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnCheckAutoSew( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
pTool->ToggleAutoSew(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnCheckSpatial( void ) |
|
{ |
|
// Get the displacement tool and toggle the spatial painting bit. |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
pTool->ToggleSpatialPainting(); |
|
if ( pTool->IsSpatialPainting() ) |
|
{ |
|
EnableSliderRadius(); |
|
DisablePaintingComboBoxes(); |
|
EnableBrushTypeButtons(); |
|
} |
|
else |
|
{ |
|
DisableSliderRadius(); |
|
EnablePaintingComboBoxes(); |
|
DisableBrushTypeButtons(); |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::SetEffectButtonGeo( unsigned int nEffect ) |
|
{ |
|
CButton *radiobutton; |
|
radiobutton = ( CButton* )GetDlgItem( ID_DISP_PAINT_DIST_RAISELOWER ); |
|
radiobutton->SetCheck( nEffect == DISPPAINT_EFFECT_RAISELOWER ); |
|
radiobutton = ( CButton* )GetDlgItem( ID_DISP_PAINT_DIST_RAISETO ); |
|
radiobutton->SetCheck( nEffect == DISPPAINT_EFFECT_RAISETO ); |
|
radiobutton = ( CButton* )GetDlgItem( ID_DISP_PAINT_DIST_SMOOTH ); |
|
radiobutton->SetCheck( nEffect == DISPPAINT_EFFECT_SMOOTH ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::SetBrushTypeButtonGeo( unsigned int uiBrushType ) |
|
{ |
|
CButton *pRadioButton; |
|
pRadioButton = ( CButton* )GetDlgItem( ID_DISPPAINT_SOFTEDGE ); |
|
pRadioButton->SetCheck( uiBrushType == DISPPAINT_BRUSHTYPE_SOFT ); |
|
pRadioButton = ( CButton* )GetDlgItem( ID_DISPPAINT_HARDEDGE ); |
|
pRadioButton->SetCheck( uiBrushType == DISPPAINT_BRUSHTYPE_HARD ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnEffectRaiseLowerGeo( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
pTool->SetEffect( DISPPAINT_EFFECT_RAISELOWER ); |
|
SetEffectButtonGeo( DISPPAINT_EFFECT_RAISELOWER ); |
|
FilterComboBoxBrushGeo( DISPPAINT_EFFECT_RAISELOWER, false ); |
|
OnComboBoxBrushGeo(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnEffectRaiseToGeo( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if( pTool ) |
|
{ |
|
pTool->SetEffect( DISPPAINT_EFFECT_RAISETO ); |
|
SetEffectButtonGeo( DISPPAINT_EFFECT_RAISETO ); |
|
FilterComboBoxBrushGeo( DISPPAINT_EFFECT_RAISETO, false ); |
|
OnComboBoxBrushGeo(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnEffectSmoothGeo( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if( pTool ) |
|
{ |
|
pTool->SetEffect( DISPPAINT_EFFECT_SMOOTH ); |
|
SetEffectButtonGeo( DISPPAINT_EFFECT_SMOOTH ); |
|
FilterComboBoxBrushGeo( DISPPAINT_EFFECT_SMOOTH, false ); |
|
OnComboBoxBrushGeo(); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnBrushTypeSoftEdge( void ) |
|
{ |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
pTool->SetBrushType( DISPPAINT_BRUSHTYPE_SOFT ); |
|
SetBrushTypeButtonGeo( DISPPAINT_BRUSHTYPE_SOFT ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnBrushTypeHardEdge( void ) |
|
{ |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
pTool->SetBrushType( DISPPAINT_BRUSHTYPE_HARD ); |
|
SetBrushTypeButtonGeo( DISPPAINT_BRUSHTYPE_HARD ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::UpdateSliderDistance( float flDistance, bool bForceInit ) |
|
{ |
|
if ( ( flDistance != m_flPrevDistance ) || bForceInit ) |
|
{ |
|
int nDistance = ( int )flDistance; |
|
|
|
// clamp |
|
if( nDistance < DISPPAINT_DISTANCE_MIN ) { nDistance = DISPPAINT_DISTANCE_MIN; } |
|
if( nDistance > DISPPAINT_DISTANCE_MAX ) { nDistance = DISPPAINT_DISTANCE_MAX; } |
|
|
|
m_sliderDistance.SetPos( nDistance ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::UpdateEditBoxDistance( float flDistance, bool bForceInit ) |
|
{ |
|
if ( ( flDistance != m_flPrevDistance ) || bForceInit ) |
|
{ |
|
CString strDistance; |
|
strDistance.Format( "%4.2f", flDistance ); |
|
m_editDistance.SetWindowText( strDistance ); |
|
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::UpdateSliderRadius( float flRadius, bool bForceInit ) |
|
{ |
|
if ( ( flRadius != m_flPrevRadius ) || bForceInit ) |
|
{ |
|
int nRadius = ( int )flRadius; |
|
|
|
// clamp |
|
if( nRadius < DISPPAINT_SPATIALRADIUS_MIN ) { nRadius = DISPPAINT_SPATIALRADIUS_MIN; } |
|
if( nRadius > DISPPAINT_SPATIALRADIUS_MAX ) { nRadius = DISPPAINT_SPATIALRADIUS_MAX; } |
|
|
|
m_sliderRadius.SetPos( nRadius ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::UpdateEditBoxRadius( float flRadius, bool bForceInit ) |
|
{ |
|
if ( ( flRadius != m_flPrevRadius ) || bForceInit ) |
|
{ |
|
CString strRadius; |
|
strRadius.Format( "%4.2f", flRadius ); |
|
m_editRadius.SetWindowText( strRadius ); |
|
} |
|
} |
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnHScroll( UINT nSBCode, UINT nPos, CScrollBar *pScrollBar ) |
|
{ |
|
// Get the displacement tool. |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
// Get the distance slider control. |
|
CSliderCtrl *pDistSlider = ( CSliderCtrl* )GetDlgItem( ID_DISP_PAINT_DIST_SLIDER_DISTANCE ); |
|
if ( pDistSlider ) |
|
{ |
|
// Get the slider position. |
|
int nDistPos = pDistSlider->GetPos(); |
|
if ( nDistPos != m_flPrevDistance ) |
|
{ |
|
// Update the displacement tool info. |
|
pTool->SetChannel( DISPPAINT_CHANNEL_POSITION, ( float )nDistPos ); |
|
|
|
// Update the "buddy" edit box. |
|
CString strDistance; |
|
strDistance.Format( "%4.2f", ( float )nDistPos ); |
|
m_editDistance.SetWindowText( strDistance ); |
|
} |
|
} |
|
|
|
// Get the radius slider control. |
|
CSliderCtrl *pRadiusSlider = ( CSliderCtrl* )GetDlgItem( ID_DISP_PAINT_DIST_SLIDER_RADIUS ); |
|
if ( pRadiusSlider ) |
|
{ |
|
// Get the slider position. |
|
int nRadiusPos = pRadiusSlider->GetPos(); |
|
if ( nRadiusPos != m_flPrevRadius ) |
|
{ |
|
// Update the displacement tool info. |
|
pTool->SetSpatialRadius( ( float )nRadiusPos ); |
|
|
|
// Update the "buddy" edit box. |
|
CString strRadius; |
|
strRadius.Format( "%4.2f", ( float )nRadiusPos ); |
|
m_editRadius.SetWindowText( strRadius ); |
|
} |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnEditDistance( void ) |
|
{ |
|
// |
|
// get the edit box distance data |
|
// |
|
CString strDistance; |
|
m_editDistance.GetWindowText( strDistance ); |
|
float flDistance = atof( strDistance ); |
|
|
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
UpdateSliderDistance( flDistance, false ); |
|
pTool->SetChannel( DISPPAINT_CHANNEL_POSITION, flDistance ); |
|
// Save the change in the distance. |
|
m_flPrevDistance = flDistance; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnEditRadius( void ) |
|
{ |
|
// |
|
// Get the edit box radius data. |
|
// |
|
CString strRadius; |
|
m_editRadius.GetWindowText( strRadius ); |
|
float flRadius = atof( strRadius ); |
|
|
|
// get the displacement tool |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
UpdateSliderRadius( flRadius, false ); |
|
pTool->SetSpatialRadius( flRadius ); |
|
|
|
// Save the change in the spatial radius. |
|
m_flPrevRadius = flRadius; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnClose( void ) |
|
{ |
|
// get the displacement tool and set selection tool active |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetTool( DISPTOOL_SELECT ); |
|
} |
|
|
|
// set "select" as the current tool - this should destroy this dialog!! |
|
CFaceEditSheet *pSheet = ( CFaceEditSheet* )GetParent(); |
|
if ( pSheet ) |
|
{ |
|
pSheet->m_DispPage.SetTool( CFaceEditDispPage::FACEEDITTOOL_SELECT ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDistDlg::OnDestroy( void ) |
|
{ |
|
// |
|
// save the current dialog data - window position, effect, etc... |
|
// |
|
GetWindowRect( &m_DialogPosRect ); |
|
|
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
m_nPrevEffect = pTool->GetEffect(); |
|
pTool->GetPaintAxis( m_nPrevPaintAxis, m_vecPrevPaintAxis ); |
|
|
|
// Reset spatial tool flag. |
|
if ( pTool->IsSpatialPainting() ) |
|
{ |
|
pTool->ToggleSpatialPainting(); |
|
} |
|
} |
|
|
|
m_nPrevBrush = m_comboboxBrush.GetCurSel(); |
|
|
|
// detach the brush combo box!! |
|
m_comboboxBrush.Detach(); |
|
} |
|
|
|
|
|
//============================================================================= |
|
// |
|
// Paint Scult Dialog Functions |
|
// |
|
BEGIN_MESSAGE_MAP(CPaintSculptDlg, CDialog) |
|
//{{AFX_MSG_MAP(CPaintSculptDlg) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DIST_AUTOSEW, OnCheckAutoSew ) |
|
ON_WM_CLOSE() |
|
ON_WM_DESTROY() |
|
ON_BN_CLICKED(IDC_SCULPT_PUSH, &CPaintSculptDlg::OnBnClickedSculptPush) |
|
ON_BN_CLICKED(IDC_SCULPT_CARVE, &CPaintSculptDlg::OnBnClickedSculptCarve) |
|
ON_BN_CLICKED(IDC_SCULPT_PROJECT, &CPaintSculptDlg::OnBnClickedSculptProject) |
|
ON_WM_LBUTTONUP() |
|
ON_WM_LBUTTONDOWN() |
|
ON_WM_MOUSEMOVE() |
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: constructor |
|
//----------------------------------------------------------------------------- |
|
CPaintSculptDlg::CPaintSculptDlg( CWnd *pParent ) : |
|
CDialog( CPaintSculptDlg::IDD, pParent ) |
|
{ |
|
m_bAutoSew = true; |
|
m_SculptMode = SCULPT_MODE_PUSH; |
|
|
|
m_PushOptions = new CSculptPushOptions(); |
|
m_CarveOptions = new CSculptCarveOptions(); |
|
// m_ProjectOptions = new CSculptProjectOptions(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: destructor |
|
//----------------------------------------------------------------------------- |
|
CPaintSculptDlg::~CPaintSculptDlg( ) |
|
{ |
|
delete m_PushOptions; |
|
delete m_CarveOptions; |
|
// delete m_ProjectOptions; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: intialized the dialog |
|
// Output : returns true if successful |
|
//----------------------------------------------------------------------------- |
|
BOOL CPaintSculptDlg::OnInitDialog( ) |
|
{ |
|
static bool bInit = false; |
|
|
|
CDialog::OnInitDialog(); |
|
|
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( !pTool ) |
|
{ |
|
return FALSE; |
|
} |
|
|
|
#if 0 |
|
// Set spatial tool flag. |
|
if ( !pTool->IsSpatialPainting() ) |
|
{ |
|
pTool->ToggleSpatialPainting(); |
|
} |
|
#endif |
|
|
|
if ( !bInit ) |
|
{ |
|
bInit = true; |
|
} |
|
else |
|
{ |
|
SetWindowPos( &wndTop, m_DialogPosRect.left, m_DialogPosRect.top, m_DialogPosRect.Width(), m_DialogPosRect.Height(), SWP_NOZORDER ); |
|
} |
|
|
|
m_AutoSew.SetCheck( m_bAutoSew ); |
|
|
|
m_PushOptions->SetPaintOwner( this ); |
|
m_CarveOptions->SetPaintOwner( this ); |
|
// m_ProjectOptions->SetPaintOwner( this ); |
|
|
|
if( !m_PushOptions->Create( IDD_DISP_SCULPT_PUSH_OPTIONS, this ) ) |
|
{ |
|
return FALSE; |
|
} |
|
|
|
if( !m_CarveOptions->Create( IDD_DISP_SCULPT_CARVE_OPTIONS, this ) ) |
|
{ |
|
return FALSE; |
|
} |
|
|
|
#if 0 |
|
if( !m_ProjectOptions->Create( IDD_DISP_SCULPT_PROJECT_OPTIONS, this ) ) |
|
{ |
|
return FALSE; |
|
} |
|
#endif |
|
|
|
RECT OptionsLoc, ThisLoc; |
|
|
|
m_SculptOptionsLoc.GetWindowRect( &OptionsLoc ); |
|
GetWindowRect( &ThisLoc ); |
|
|
|
m_PushOptions->SetWindowPos( NULL, 10, OptionsLoc.top - ThisLoc.top - 20, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW ); |
|
m_CarveOptions->SetWindowPos( NULL, 10, OptionsLoc.top - ThisLoc.top - 20, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW ); |
|
// m_ProjectOptions->SetWindowPos( NULL, 10, OptionsLoc.top - ThisLoc.top - 20, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW ); |
|
|
|
m_PushOptions->ShowWindow( SW_HIDE ); |
|
m_CarveOptions->ShowWindow( SW_HIDE ); |
|
// m_ProjectOptions->ShowWindow( SW_HIDE ); |
|
|
|
m_ProjectButton.EnableWindow( FALSE ); |
|
|
|
SetActiveMode( m_SculptMode ); |
|
|
|
return TRUE; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: set up the data exchange between the dialog and variables |
|
// Input : pDX - data exchange object |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::DoDataExchange( CDataExchange *pDX ) |
|
{ |
|
CDialog::DoDataExchange( pDX ); |
|
//{{AFX_DATA_MAP(CPaintSculptDlg) |
|
//}}AFX_DATA_MAP |
|
DDX_Control(pDX, IDC_SCULPT_OPTIONS_LOC, m_SculptOptionsLoc); |
|
DDX_Control(pDX, ID_DISP_PAINT_DIST_AUTOSEW, m_AutoSew); |
|
DDX_Control(pDX, IDC_SCULPT_PUSH, m_PushButton); |
|
DDX_Control(pDX, IDC_SCULPT_CARVE, m_CarveButton); |
|
DDX_Control(pDX, IDC_SCULPT_PROJECT, m_ProjectButton); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Sets the autosew option |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnCheckAutoSew( ) |
|
{ |
|
m_bAutoSew = ( m_AutoSew.GetCheck() != 0 ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: handles shutting down the dialog |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnClose( ) |
|
{ |
|
// get the displacement tool and set selection tool active |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetTool( DISPTOOL_SELECT ); |
|
} |
|
|
|
// set "select" as the current tool - this should destroy this dialog!! |
|
CFaceEditSheet *pSheet = ( CFaceEditSheet* )GetParent(); |
|
if ( pSheet ) |
|
{ |
|
pSheet->m_DispPage.SetTool( CFaceEditDispPage::FACEEDITTOOL_SELECT ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Handles the left button up |
|
// Input : nFlags - button flags |
|
// point - the location of the click |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnLButtonUp( UINT nFlags, CPoint point ) |
|
{ |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
CSculptPainter *painter = dynamic_cast< CSculptPainter * >( pDispTool->GetSculptPainter() ); |
|
|
|
if ( painter ) |
|
{ |
|
painter->OnLButtonUpDialog( nFlags, point ); |
|
} |
|
|
|
__super::OnLButtonUp(nFlags, point); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Handles the left button down |
|
// Input : nFlags - button flags |
|
// point - the location of the click |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnLButtonDown( UINT nFlags, CPoint point ) |
|
{ |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
CSculptPainter *painter = dynamic_cast< CSculptPainter * >( pDispTool->GetSculptPainter() ); |
|
|
|
if ( painter ) |
|
{ |
|
painter->OnLButtonDownDialog( nFlags, point ); |
|
} |
|
|
|
__super::OnLButtonDown(nFlags, point); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Handles mouse move |
|
// Input : nFlags - button flags |
|
// point - the location of the click |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnMouseMove( UINT nFlags, CPoint point ) |
|
{ |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
CSculptPainter *painter = dynamic_cast< CSculptPainter * >( pDispTool->GetSculptPainter() ); |
|
|
|
if ( painter ) |
|
{ |
|
painter->OnMouseMoveDialog( nFlags, point ); |
|
} |
|
|
|
__super::OnMouseMove(nFlags, point); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: handles the destruction of the window |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnDestroy( ) |
|
{ |
|
// |
|
// save the current dialog data - window position, effect, etc... |
|
// |
|
GetWindowRect( &m_DialogPosRect ); |
|
|
|
#if 0 |
|
CToolDisplace *pTool = GetDisplacementTool(); |
|
if ( pTool ) |
|
{ |
|
// Reset spatial tool flag. |
|
if ( pTool->IsSpatialPainting() ) |
|
{ |
|
pTool->ToggleSpatialPainting(); |
|
} |
|
} |
|
#endif |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: sets the active mode to push |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnBnClickedSculptPush( ) |
|
{ |
|
SetActiveMode( SCULPT_MODE_PUSH ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: sets the active mode to carve |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnBnClickedSculptCarve( ) |
|
{ |
|
SetActiveMode( SCULPT_MODE_CARVE ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: sets the active mode to sculpt |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::OnBnClickedSculptProject( ) |
|
{ |
|
// SetActiveMode( SCULPT_MODE_PROJECT ); |
|
} |
|
|
|
#if 0 |
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
// Input : |
|
// Output : |
|
//----------------------------------------------------------------------------- |
|
BOOL CPaintSculptDlg::PreTranslateMessage( MSG* pMsg ) |
|
{ |
|
return __super::PreTranslateMessage( pMsg ); |
|
} |
|
#endif |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: sets the active mode |
|
// Input : NewMode - the mode we are going to |
|
//----------------------------------------------------------------------------- |
|
void CPaintSculptDlg::SetActiveMode( SculptMode NewMode ) |
|
{ |
|
m_SculptMode = NewMode; |
|
|
|
m_PushButton.SetCheck( m_SculptMode == SCULPT_MODE_PUSH ); |
|
m_CarveButton.SetCheck( m_SculptMode == SCULPT_MODE_CARVE ); |
|
m_ProjectButton.SetCheck( m_SculptMode == SCULPT_MODE_PROJECT ); |
|
|
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
CDialog *painter = dynamic_cast< CDialog * >( pDispTool->GetSculptPainter() ); |
|
|
|
if ( painter ) |
|
{ |
|
painter->ShowWindow( SW_HIDE ); |
|
} |
|
|
|
switch( m_SculptMode ) |
|
{ |
|
case SCULPT_MODE_PUSH: |
|
m_PushOptions->ShowWindow( SW_SHOW ); |
|
pDispTool->SetSculptPainter( m_PushOptions ); |
|
break; |
|
|
|
case SCULPT_MODE_CARVE: |
|
m_CarveOptions->ShowWindow( SW_SHOW ); |
|
pDispTool->SetSculptPainter( m_CarveOptions ); |
|
break; |
|
|
|
#if 0 |
|
case SCULPT_MODE_PROJECT: |
|
m_ProjectOptions->ShowWindow( SW_SHOW ); |
|
pDispTool->SetSculptPainter( m_ProjectOptions ); |
|
break; |
|
#endif |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//============================================================================= |
|
// |
|
// Set Paint Distance Dialog Functions |
|
// |
|
BEGIN_MESSAGE_MAP(CDispPaintDataDlg, CDialog) |
|
//{{AFX_MSG_MAP(CDispPaintDataDlg) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DATA_RAISELOWER, OnEffectRaiseLowerData ) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DATA_RAISETO, OnEffectRaiseToData ) |
|
ON_BN_CLICKED( ID_DISP_PAINT_DATA_SMOOTH, OnEffectSmoothData ) |
|
|
|
ON_CBN_SELCHANGE( ID_DISP_PAINT_DATA_BRUSH, OnComboBoxBrushData ) |
|
ON_CBN_SELCHANGE( ID_DISP_PAINT_DATA_TYPE, OnComboBoxType ) |
|
|
|
ON_WM_HSCROLL() |
|
ON_EN_CHANGE( ID_DISP_PAINT_DATA_EDIT_VALUE, OnEditValue ) |
|
|
|
ON_WM_CLOSE() |
|
ON_WM_DESTROY() |
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: constructor |
|
//----------------------------------------------------------------------------- |
|
CDispPaintDataDlg::CDispPaintDataDlg( CWnd *pParent ) : |
|
CDialog( CDispPaintDataDlg::IDD, pParent ) |
|
{ |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CDispPaintDataDlg::~CDispPaintDataDlg() |
|
{ |
|
if( m_comboboxBrush.m_hWnd ) |
|
{ |
|
m_comboboxBrush.Detach(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
BOOL CDispPaintDataDlg::OnInitDialog(void) |
|
{ |
|
static bool bInit = false; |
|
|
|
CDialog::OnInitDialog(); |
|
|
|
if( !bInit ) |
|
{ |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
m_uiPrevEffect = pDispTool->GetEffect(); |
|
pDispTool->GetChannel( DISPPAINT_CHANNEL_ALPHA, m_fPrevPaintValue ); |
|
m_iPrevBrush = 0; |
|
|
|
bInit = true; |
|
} |
|
} |
|
else |
|
{ |
|
SetWindowPos( &wndTop, m_DialogPosRect.left, m_DialogPosRect.top, |
|
m_DialogPosRect.Width(), m_DialogPosRect.Height(), SWP_NOZORDER ); |
|
} |
|
|
|
// initialize the sliders |
|
InitValue(); |
|
|
|
// initialize the combo boxes |
|
InitComboBoxBrushData(); |
|
InitComboBoxType(); |
|
|
|
return TRUE; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::InitValue( void ) |
|
{ |
|
// init slider value |
|
m_sliderValue.SetBuddy( &m_editValue, FALSE ); |
|
m_sliderValue.SetRange( 1, 255 ); |
|
m_sliderValue.SetTicFreq( 25 ); |
|
|
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetChannel( DISPPAINT_CHANNEL_ALPHA, m_fPrevPaintValue ); |
|
|
|
// init slider value |
|
UpdateSliderValue( m_fPrevPaintValue ); |
|
|
|
// initialize the value edit box |
|
CString strValue; |
|
strValue.Format( "%4.2f", m_fPrevPaintValue ); |
|
m_editValue.SetWindowText( strValue ); |
|
} |
|
else |
|
{ |
|
UpdateSliderValue( 15.0f ); |
|
|
|
// initialize the value edit box |
|
m_editValue.SetWindowText( "15.00" ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
bool CDispPaintDataDlg::InitComboBoxBrushData( void ) |
|
{ |
|
// |
|
// get the displacement paint brush icon combo box |
|
// |
|
m_comboboxBrush.Attach( GetDlgItem( ID_DISP_PAINT_DATA_BRUSH )->m_hWnd ); |
|
m_comboboxBrush.Init(); |
|
|
|
// reset the size of the combo box list item |
|
m_comboboxBrush.SetItemHeight( -1, m_comboboxBrush.m_IconSize.cy + 2 ); |
|
|
|
// set initial radio button/brush combo box data |
|
// initialize the radio button/brush combo box geometry data |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetEffect( m_uiPrevEffect ); |
|
|
|
switch( m_uiPrevEffect ) |
|
{ |
|
case DISPPAINT_EFFECT_RAISELOWER: |
|
{ |
|
pDispTool->SetEffect( DISPPAINT_EFFECT_RAISELOWER ); |
|
SetEffectButtonData( DISPPAINT_EFFECT_RAISELOWER ); |
|
FilterComboBoxBrushData( DISPPAINT_EFFECT_RAISELOWER, true ); |
|
break; |
|
} |
|
case DISPPAINT_EFFECT_RAISETO: |
|
{ |
|
pDispTool->SetEffect( DISPPAINT_EFFECT_RAISETO ); |
|
SetEffectButtonData( DISPPAINT_EFFECT_RAISETO ); |
|
FilterComboBoxBrushData( DISPPAINT_EFFECT_RAISETO, true ); |
|
break; |
|
} |
|
case DISPPAINT_EFFECT_SMOOTH: |
|
{ |
|
pDispTool->SetEffect( DISPPAINT_EFFECT_SMOOTH ); |
|
SetEffectButtonData( DISPPAINT_EFFECT_SMOOTH ); |
|
FilterComboBoxBrushData( DISPPAINT_EFFECT_SMOOTH, true ); |
|
break; |
|
} |
|
default: |
|
{ |
|
return false; |
|
} |
|
} |
|
|
|
OnComboBoxBrushData(); |
|
} |
|
else |
|
{ |
|
OnEffectRaiseLowerData(); |
|
OnComboBoxBrushData(); |
|
} |
|
|
|
return true; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::FilterComboBoxBrushData( unsigned int uiEffect, bool bInit ) |
|
{ |
|
// |
|
// remove all the old combo box data |
|
// |
|
int count = m_comboboxBrush.GetCount(); |
|
for( int ndx = count - 1; ndx >= 0; ndx-- ) |
|
{ |
|
m_comboboxBrush.DeleteIcon( ndx ); |
|
} |
|
|
|
// |
|
// add the new combo box data based on the current paint "effect" |
|
// |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
CDispMapImageFilterManager *pFilterMgr; |
|
switch( uiEffect ) |
|
{ |
|
case DISPPAINT_EFFECT_RAISELOWER: { pFilterMgr = pDispTool->GetFilterRaiseLowerMgr(); break; } |
|
case DISPPAINT_EFFECT_RAISETO: { pFilterMgr = pDispTool->GetFilterRaiseToMgr(); break; } |
|
case DISPPAINT_EFFECT_SMOOTH: { pFilterMgr = pDispTool->GetFilterSmoothMgr(); break; } |
|
default: return; |
|
} |
|
|
|
if( pFilterMgr ) |
|
{ |
|
// |
|
// for each filter - add its icon to the icon combo box |
|
// |
|
for( int ndxFilter = 0; ndxFilter < pFilterMgr->GetFilterCount(); ndxFilter++ ) |
|
{ |
|
// get the current filter |
|
CDispMapImageFilter *pFilter = pFilterMgr->GetFilter( ndxFilter ); |
|
|
|
// get the application directory |
|
char appDir[MAX_PATH]; |
|
APP()->GetDirectory( DIR_PROGRAM, appDir ); |
|
|
|
// append the filters directory name |
|
strcat( appDir, "filters\\" ); |
|
|
|
// append the directory prefix to the icon name |
|
CString iconFilename = appDir + pFilter->m_Name; |
|
|
|
// add the icon to the icon combo box |
|
m_comboboxBrush.AddIcon( iconFilename ); |
|
} |
|
|
|
// set initial paint brush |
|
if( bInit ) |
|
{ |
|
m_comboboxBrush.SetCurSel( m_iPrevBrush ); |
|
} |
|
else |
|
{ |
|
m_comboboxBrush.SetCurSel( 0 ); |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
bool CDispPaintDataDlg::InitComboBoxType( void ) |
|
{ |
|
// alpha type |
|
CString strType = "Alpha"; |
|
m_comboboxType.AddString( strType ); |
|
m_comboboxType.SetCurSel( 0 ); |
|
|
|
// turn off for now |
|
m_comboboxType.EnableWindow( FALSE ); |
|
|
|
return true; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::DoDataExchange( CDataExchange *pDX ) |
|
{ |
|
CDialog::DoDataExchange( pDX ); |
|
//{{AFX_DATA_MAP(CDispPaintDistDlg) |
|
DDX_Control( pDX, ID_DISP_PAINT_DATA_SLIDER_VALUE, m_sliderValue ); |
|
DDX_Control( pDX, ID_DISP_PAINT_DATA_EDIT_VALUE, m_editValue ); |
|
DDX_Control( pDX, ID_DISP_PAINT_DATA_TYPE, m_comboboxType ); |
|
//}}AFX_DATA_MAP |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnComboBoxBrushData( void ) |
|
{ |
|
// get the displacement's filter manager |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
// get current selection |
|
int iSel = m_comboboxBrush.GetCurSel(); |
|
if( iSel == LB_ERR ) |
|
return; |
|
|
|
unsigned int uiEffect = pDispTool->GetEffect(); |
|
CDispMapImageFilterManager *pFilterMgr; |
|
switch( uiEffect ) |
|
{ |
|
case DISPPAINT_EFFECT_RAISELOWER: { pFilterMgr = pDispTool->GetFilterRaiseLowerMgr(); break; } |
|
case DISPPAINT_EFFECT_RAISETO: { pFilterMgr = pDispTool->GetFilterRaiseToMgr(); break; } |
|
case DISPPAINT_EFFECT_SMOOTH: { pFilterMgr = pDispTool->GetFilterSmoothMgr(); break; } |
|
default: return; |
|
} |
|
|
|
if( pFilterMgr ) |
|
{ |
|
pFilterMgr->SetActiveFilter( iSel ); |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnComboBoxType( void ) |
|
{ |
|
return; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::SetEffectButtonData( unsigned int effect ) |
|
{ |
|
CButton *radiobutton; |
|
radiobutton = ( CButton* )GetDlgItem( ID_DISP_PAINT_DATA_RAISELOWER ); |
|
radiobutton->SetCheck( effect == DISPPAINT_EFFECT_RAISELOWER ); |
|
radiobutton = ( CButton* )GetDlgItem( ID_DISP_PAINT_DATA_RAISETO ); |
|
radiobutton->SetCheck( effect == DISPPAINT_EFFECT_RAISETO ); |
|
radiobutton = ( CButton* )GetDlgItem( ID_DISP_PAINT_DATA_SMOOTH ); |
|
radiobutton->SetCheck( effect == DISPPAINT_EFFECT_SMOOTH ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnEffectRaiseLowerData( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetEffect( DISPPAINT_EFFECT_RAISELOWER ); |
|
SetEffectButtonData( DISPPAINT_EFFECT_RAISELOWER ); |
|
FilterComboBoxBrushData( DISPPAINT_EFFECT_RAISELOWER, false ); |
|
OnComboBoxBrushData(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnEffectRaiseToData( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetEffect( DISPPAINT_EFFECT_RAISETO ); |
|
SetEffectButtonData( DISPPAINT_EFFECT_RAISETO ); |
|
FilterComboBoxBrushData( DISPPAINT_EFFECT_RAISETO, false ); |
|
OnComboBoxBrushData(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnEffectSmoothData( void ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetEffect( DISPPAINT_EFFECT_SMOOTH ); |
|
SetEffectButtonData( DISPPAINT_EFFECT_SMOOTH ); |
|
FilterComboBoxBrushData( DISPPAINT_EFFECT_SMOOTH, false ); |
|
OnComboBoxBrushData(); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::UpdateSliderValue( float fValue ) |
|
{ |
|
int iValue = ( int )fValue; |
|
|
|
// clamp |
|
if( iValue < 1 ) { iValue = 1; } |
|
if( iValue > 255 ) { iValue = 255; } |
|
|
|
m_sliderValue.SetPos( iValue ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnHScroll( UINT nSBCode, UINT nPos, CScrollBar *pScrollBar ) |
|
{ |
|
// get the displacement tool |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
// get the slider control |
|
CSliderCtrl *pSlider = ( CSliderCtrl* )GetDlgItem( ID_DISP_PAINT_DATA_SLIDER_VALUE ); |
|
if( pSlider ) |
|
{ |
|
// get the slider position |
|
int pos = pSlider->GetPos(); |
|
|
|
pDispTool->SetChannel( DISPPAINT_CHANNEL_ALPHA, ( float )pos ); |
|
|
|
// |
|
// update "the buddy" the disp value cedit box |
|
// |
|
CString strValue; |
|
strValue.Format( "%4.2f", ( float )pos ); |
|
m_editValue.SetWindowText( strValue ); |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnEditValue( void ) |
|
{ |
|
// |
|
// get the edit box distance data |
|
// |
|
CString strValue; |
|
m_editValue.GetWindowText( strValue ); |
|
float fValue = atof( strValue ); |
|
|
|
// get the displacement tool |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
UpdateSliderValue( fValue ); |
|
pDispTool->SetChannel( DISPPAINT_CHANNEL_ALPHA, fValue ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnClose( void ) |
|
{ |
|
// get the displacement tool and set selection tool active |
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
pDispTool->SetTool( DISPTOOL_SELECT ); |
|
} |
|
|
|
// set "select" as the current tool - this should destroy this dialog!! |
|
CFaceEditSheet *pSheet = ( CFaceEditSheet* )GetParent(); |
|
if( pSheet ) |
|
{ |
|
pSheet->m_DispPage.SetTool( CFaceEditDispPage::FACEEDITTOOL_SELECT ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
//----------------------------------------------------------------------------- |
|
void CDispPaintDataDlg::OnDestroy( void ) |
|
{ |
|
// save the current window position |
|
GetWindowRect( &m_DialogPosRect ); |
|
|
|
CToolDisplace *pDispTool = GetDisplacementTool(); |
|
if( pDispTool ) |
|
{ |
|
m_uiPrevEffect = pDispTool->GetEffect(); |
|
pDispTool->GetChannel( DISPPAINT_CHANNEL_ALPHA, m_fPrevPaintValue ); |
|
} |
|
|
|
m_iPrevBrush = m_comboboxBrush.GetCurSel(); |
|
|
|
// detach the brush combo box!! |
|
m_comboboxBrush.Detach(); |
|
}
|
|
|