mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 06:36:54 +00:00
1881 lines
53 KiB
C++
1881 lines
53 KiB
C++
|
//========= 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();
|
||
|
}
|