451 lines
14 KiB
C++
451 lines
14 KiB
C++
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================//
|
|
|
|
#include <stdafx.h>
|
|
#include "materialdlg.h"
|
|
#include "FaceEditSheet.h"
|
|
#include "mapdoc.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include <tier0/memdbgon.h>
|
|
|
|
//=============================================================================
|
|
//
|
|
// Face Smoothing Dialog Functions
|
|
//
|
|
BEGIN_MESSAGE_MAP( CFaceSmoothingDlg, CDialog )
|
|
//{{AFX_MSG_MAP(CFaceSmoothingDlg)
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_1, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_2, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_3, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_4, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_5, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_6, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_7, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_8, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_9, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_10, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_11, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_12, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_13, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_14, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_15, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_16, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_17, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_18, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_19, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_20, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_21, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_22, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_23, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_24, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_25, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_26, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_27, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_28, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_29, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_30, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_31, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SMOOTHING_GROUP_32, OnButtonGroup )
|
|
|
|
ON_WM_CLOSE()
|
|
ON_WM_DESTROY()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Constructor
|
|
//-----------------------------------------------------------------------------
|
|
CFaceSmoothingDlg::CFaceSmoothingDlg( CWnd *pParent ) : CDialog( CFaceSmoothingDlg::IDD, pParent )
|
|
{
|
|
InitButtonIDs();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Deconstructor
|
|
//-----------------------------------------------------------------------------
|
|
CFaceSmoothingDlg::~CFaceSmoothingDlg()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CFaceSmoothingDlg::OnInitDialog( void )
|
|
{
|
|
static bool bInit = false;
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
if ( bInit )
|
|
{
|
|
SetWindowPos( &wndTop, m_DialogPosRect.left, m_DialogPosRect.top,
|
|
m_DialogPosRect.Width(), m_DialogPosRect.Height(), SWP_NOZORDER );
|
|
}
|
|
|
|
// Update the controls.
|
|
UpdateControls();
|
|
|
|
// Initialized.
|
|
bInit = true;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CFaceSmoothingDlg::OnClose( void )
|
|
{
|
|
// Get the parent and set the material tool as the current tool.
|
|
CFaceEditSheet *pSheet = static_cast<CFaceEditSheet*>( GetParent() );
|
|
if ( pSheet )
|
|
{
|
|
pSheet->m_MaterialPage.SetMaterialPageTool( CFaceEditMaterialPage::MATERIALPAGETOOL_MATERIAL );
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CFaceSmoothingDlg::OnDestroy( void )
|
|
{
|
|
// Save the current window position.
|
|
GetWindowRect( &m_DialogPosRect );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CFaceSmoothingDlg::InitButtonIDs( void )
|
|
{
|
|
m_ButtonIDs[0] = 0; // Default - no button!
|
|
m_ButtonIDs[1] = ID_SMOOTHING_GROUP_1;
|
|
m_ButtonIDs[2] = ID_SMOOTHING_GROUP_2;
|
|
m_ButtonIDs[3] = ID_SMOOTHING_GROUP_3;
|
|
m_ButtonIDs[4] = ID_SMOOTHING_GROUP_4;
|
|
m_ButtonIDs[5] = ID_SMOOTHING_GROUP_5;
|
|
m_ButtonIDs[6] = ID_SMOOTHING_GROUP_6;
|
|
m_ButtonIDs[7] = ID_SMOOTHING_GROUP_7;
|
|
m_ButtonIDs[8] = ID_SMOOTHING_GROUP_8;
|
|
m_ButtonIDs[9] = ID_SMOOTHING_GROUP_9;
|
|
m_ButtonIDs[10] = ID_SMOOTHING_GROUP_10;
|
|
m_ButtonIDs[11] = ID_SMOOTHING_GROUP_11;
|
|
m_ButtonIDs[12] = ID_SMOOTHING_GROUP_12;
|
|
m_ButtonIDs[13] = ID_SMOOTHING_GROUP_13;
|
|
m_ButtonIDs[14] = ID_SMOOTHING_GROUP_14;
|
|
m_ButtonIDs[15] = ID_SMOOTHING_GROUP_15;
|
|
m_ButtonIDs[16] = ID_SMOOTHING_GROUP_16;
|
|
m_ButtonIDs[17] = ID_SMOOTHING_GROUP_17;
|
|
m_ButtonIDs[18] = ID_SMOOTHING_GROUP_18;
|
|
m_ButtonIDs[19] = ID_SMOOTHING_GROUP_19;
|
|
m_ButtonIDs[20] = ID_SMOOTHING_GROUP_20;
|
|
m_ButtonIDs[21] = ID_SMOOTHING_GROUP_21;
|
|
m_ButtonIDs[22] = ID_SMOOTHING_GROUP_22;
|
|
m_ButtonIDs[23] = ID_SMOOTHING_GROUP_23;
|
|
m_ButtonIDs[24] = ID_SMOOTHING_GROUP_24;
|
|
m_ButtonIDs[25] = ID_SMOOTHING_GROUP_25;
|
|
m_ButtonIDs[26] = ID_SMOOTHING_GROUP_26;
|
|
m_ButtonIDs[27] = ID_SMOOTHING_GROUP_27;
|
|
m_ButtonIDs[28] = ID_SMOOTHING_GROUP_28;
|
|
m_ButtonIDs[29] = ID_SMOOTHING_GROUP_29;
|
|
m_ButtonIDs[30] = ID_SMOOTHING_GROUP_30;
|
|
m_ButtonIDs[31] = ID_SMOOTHING_GROUP_31;
|
|
m_ButtonIDs[32] = ID_SMOOTHING_GROUP_32;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CFaceSmoothingDlg::OnButtonGroup( UINT uCmd )
|
|
{
|
|
int iGroup = GetSmoothingGroup( uCmd );
|
|
if ( iGroup == -1 )
|
|
return FALSE;
|
|
|
|
// Add or remove.
|
|
CButton *pGroupButton = ( CButton* )GetDlgItem( uCmd );
|
|
if ( !pGroupButton )
|
|
return FALSE;
|
|
|
|
bool bAdd = ( pGroupButton->GetCheck() != 0 );
|
|
|
|
// Get the selected faces and add them to the appropriate group.
|
|
CFaceEditSheet *pSheet = ( CFaceEditSheet* )GetParent();
|
|
if ( pSheet )
|
|
{
|
|
int nFaceCount = pSheet->GetFaceListCount();
|
|
for ( int iFace = 0; iFace < nFaceCount; ++iFace )
|
|
{
|
|
CMapFace *pFace = pSheet->GetFaceListDataFace( iFace );
|
|
if ( pFace )
|
|
{
|
|
if ( bAdd )
|
|
{
|
|
pFace->AddSmoothingGroup( iGroup );
|
|
}
|
|
else
|
|
{
|
|
pFace->RemoveSmoothingGroup( iGroup );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
UpdateControls();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
UINT CFaceSmoothingDlg::GetSmoothingGroup( UINT uCmd )
|
|
{
|
|
for ( int iGroup = 1; iGroup <= SMOOTHING_GROUP_MAX_COUNT; ++iGroup )
|
|
{
|
|
if ( m_ButtonIDs[iGroup] == uCmd )
|
|
return iGroup;
|
|
}
|
|
|
|
return 0xFFFFFFFF;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
int CFaceSmoothingDlg::GetActiveSmoothingGroup( void )
|
|
{
|
|
for ( int iButton = 1; iButton <= SMOOTHING_GROUP_MAX_COUNT; ++iButton )
|
|
{
|
|
CButton *pGroupButton = ( CButton* )GetDlgItem( m_ButtonIDs[iButton] );
|
|
if ( !pGroupButton )
|
|
continue;
|
|
|
|
if ( pGroupButton->GetCheck() != 0 )
|
|
return iButton;
|
|
}
|
|
|
|
return 0xFFFFFFFF;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CFaceSmoothingDlg::UpdateControls( void )
|
|
{
|
|
// Get the selected faces and add them to the appropriate group.
|
|
CFaceEditSheet *pSheet = ( CFaceEditSheet* )GetParent();
|
|
if ( !pSheet )
|
|
return;
|
|
|
|
// Check for a face count.
|
|
int nFaceCount = pSheet->GetFaceListCount();
|
|
if ( nFaceCount == 0 )
|
|
return;
|
|
|
|
// Keep a list of used groups.
|
|
int nGroupCounts[SMOOTHING_GROUP_MAX_COUNT+1];
|
|
for ( int iGroup = 0; iGroup <= SMOOTHING_GROUP_MAX_COUNT; ++iGroup )
|
|
{
|
|
nGroupCounts[iGroup] = 0;
|
|
}
|
|
|
|
for ( int iFace = 0; iFace < nFaceCount; ++iFace )
|
|
{
|
|
CMapFace *pFace = pSheet->GetFaceListDataFace( iFace );
|
|
if ( pFace )
|
|
{
|
|
for ( int iGroup = 1; iGroup <= SMOOTHING_GROUP_MAX_COUNT; ++iGroup )
|
|
{
|
|
if ( pFace->InSmoothingGroup( iGroup ) )
|
|
{
|
|
nGroupCounts[iGroup]++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
CheckGroupButtons( nGroupCounts, nFaceCount );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CFaceSmoothingDlg::CheckGroupButtons( int *pGroupCounts, int nFaceCount )
|
|
{
|
|
m_bColorOverride = true;
|
|
|
|
for ( int iButton = 1; iButton <= SMOOTHING_GROUP_MAX_COUNT; ++iButton )
|
|
{
|
|
CButton *pGroupButton = ( CButton* )GetDlgItem( m_ButtonIDs[iButton] );
|
|
if ( !pGroupButton )
|
|
continue;
|
|
|
|
pGroupButton->SetCheck( FALSE );
|
|
|
|
if ( pGroupCounts[iButton] == 0 )
|
|
continue;
|
|
|
|
if ( pGroupCounts[iButton] == nFaceCount )
|
|
{
|
|
pGroupButton->SetCheck( TRUE );
|
|
}
|
|
else
|
|
{
|
|
// Todo: Come up with a better effect here!
|
|
CDC *pDC = pGroupButton->GetDC();
|
|
m_Brush.CreateSolidBrush( pDC->GetTextColor() );
|
|
CRect buttonRect;
|
|
pGroupButton->GetClientRect( buttonRect );
|
|
pDC->FillRect( buttonRect, &m_Brush );
|
|
m_Brush.DeleteObject();
|
|
pGroupButton->ReleaseDC( pDC );
|
|
}
|
|
}
|
|
|
|
m_bColorOverride = false;
|
|
}
|
|
|
|
//=============================================================================
|
|
|
|
BEGIN_MESSAGE_MAP( CFaceSmoothingVisualDlg, CDialog )
|
|
//{{AFX_MSG_MAP(CFaceSmoothingVisualDlg)
|
|
ON_COMMAND_EX( ID_SG_VISUAL_1, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_2, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_3, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_4, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_5, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_6, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_7, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_8, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_9, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_10, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_11, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_12, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_13, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_14, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_15, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_16, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_17, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_18, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_19, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_20, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_21, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_22, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_23, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_24, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_25, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_26, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_27, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_28, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_29, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_30, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_31, OnButtonGroup )
|
|
ON_COMMAND_EX( ID_SG_VISUAL_32, OnButtonGroup )
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Constructor
|
|
//-----------------------------------------------------------------------------
|
|
CFaceSmoothingVisualDlg::CFaceSmoothingVisualDlg( CWnd *pParent ) : CDialog( CFaceSmoothingDlg::IDD, pParent )
|
|
{
|
|
InitButtonIDs();
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Deconstructor
|
|
//-----------------------------------------------------------------------------
|
|
CFaceSmoothingVisualDlg::~CFaceSmoothingVisualDlg()
|
|
{
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CFaceSmoothingVisualDlg::OnInitDialog( void )
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// SetWindowPos( &wndTop, m_DialogPosRect.left, m_DialogPosRect.top,
|
|
// m_DialogPosRect.Width(), m_DialogPosRect.Height(), SWP_NOZORDER );
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
BOOL CFaceSmoothingVisualDlg::OnButtonGroup( UINT uCmd )
|
|
{
|
|
int iGroup = GetSmoothingGroup( uCmd );
|
|
if ( iGroup == -1 )
|
|
return FALSE;
|
|
|
|
CMapDoc *pDoc = CMapDoc::GetActiveMapDoc();
|
|
if ( pDoc )
|
|
{
|
|
pDoc->SetSmoothingGroupVisual( iGroup );
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
void CFaceSmoothingVisualDlg::InitButtonIDs( void )
|
|
{
|
|
m_ButtonIDs[0] = 0; // Default - no button!
|
|
m_ButtonIDs[1] = ID_SG_VISUAL_1;
|
|
m_ButtonIDs[2] = ID_SG_VISUAL_2;
|
|
m_ButtonIDs[3] = ID_SG_VISUAL_3;
|
|
m_ButtonIDs[4] = ID_SG_VISUAL_4;
|
|
m_ButtonIDs[5] = ID_SG_VISUAL_5;
|
|
m_ButtonIDs[6] = ID_SG_VISUAL_6;
|
|
m_ButtonIDs[7] = ID_SG_VISUAL_7;
|
|
m_ButtonIDs[8] = ID_SG_VISUAL_8;
|
|
m_ButtonIDs[9] = ID_SG_VISUAL_9;
|
|
m_ButtonIDs[10] = ID_SG_VISUAL_10;
|
|
m_ButtonIDs[11] = ID_SG_VISUAL_11;
|
|
m_ButtonIDs[12] = ID_SG_VISUAL_12;
|
|
m_ButtonIDs[13] = ID_SG_VISUAL_13;
|
|
m_ButtonIDs[14] = ID_SG_VISUAL_14;
|
|
m_ButtonIDs[15] = ID_SG_VISUAL_15;
|
|
m_ButtonIDs[16] = ID_SG_VISUAL_16;
|
|
m_ButtonIDs[17] = ID_SG_VISUAL_17;
|
|
m_ButtonIDs[18] = ID_SG_VISUAL_18;
|
|
m_ButtonIDs[19] = ID_SG_VISUAL_19;
|
|
m_ButtonIDs[20] = ID_SG_VISUAL_20;
|
|
m_ButtonIDs[21] = ID_SG_VISUAL_21;
|
|
m_ButtonIDs[22] = ID_SG_VISUAL_22;
|
|
m_ButtonIDs[23] = ID_SG_VISUAL_23;
|
|
m_ButtonIDs[24] = ID_SG_VISUAL_24;
|
|
m_ButtonIDs[25] = ID_SG_VISUAL_25;
|
|
m_ButtonIDs[26] = ID_SG_VISUAL_26;
|
|
m_ButtonIDs[27] = ID_SG_VISUAL_27;
|
|
m_ButtonIDs[28] = ID_SG_VISUAL_28;
|
|
m_ButtonIDs[29] = ID_SG_VISUAL_29;
|
|
m_ButtonIDs[30] = ID_SG_VISUAL_30;
|
|
m_ButtonIDs[31] = ID_SG_VISUAL_31;
|
|
m_ButtonIDs[32] = ID_SG_VISUAL_32;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
UINT CFaceSmoothingVisualDlg::GetSmoothingGroup( UINT uCmd )
|
|
{
|
|
for ( int iGroup = 1; iGroup <= SMOOTHING_GROUP_MAX_COUNT; ++iGroup )
|
|
{
|
|
if ( m_ButtonIDs[iGroup] == uCmd )
|
|
return iGroup;
|
|
}
|
|
|
|
return 0xFFFFFFFF;
|
|
}
|