Serious-Engine/Sources/Modeler/DlgInfoPgMip.cpp

220 lines
6.4 KiB
C++
Raw Normal View History

2016-03-12 01:20:51 +01:00
/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
2016-03-11 14:57:17 +01:00
// DlgInfoPgMip.cpp : implementation file
//
#include "stdafx.h"
#ifdef _DEBUG
#undef new
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgInfoPgMip property page
IMPLEMENT_DYNCREATE(CDlgInfoPgMip, CPropertyPage)
CDlgInfoPgMip::CDlgInfoPgMip() : CPropertyPage(CDlgInfoPgMip::IDD)
{
//{{AFX_DATA_INIT(CDlgInfoPgMip)
m_strCurrentMipModel = _T("");
m_strModelDistance = _T("");
m_strCurrentMipFactor = _T("");
m_strModelMipSwitchFactor = _T("");
m_strNoOfPolygons = _T("");
m_strNoOfVertices = _T("");
m_strNoOfTriangles = _T("");
m_bHasPatches = FALSE;
m_bHasAttachedModels = FALSE;
//}}AFX_DATA_INIT
theApp.m_pPgInfoMip = this;
}
void CDlgInfoPgMip::SetMipPageFromView(CModelerView* pModelerView)
{
CModelInfo miModelInfo;
char value[20];
ASSERT( pModelerView != NULL);
CModelerDoc *pDoc = pModelerView->GetDocument();
/* Get current model's info */
pModelerView->m_ModelObject.GetModelInfo( miModelInfo);
INDEX iMipModel = pModelerView->m_ModelObject.GetMipModel( pModelerView->m_fCurrentMipFactor);
if( !pModelerView->m_ModelObject.IsModelVisible(pModelerView->m_fCurrentMipFactor) )
{
m_strCurrentMipModel = "Not visible";
m_strNoOfTriangles = "0";
m_strNoOfVertices = "0";
m_strNoOfPolygons = "0";
}
else
{
sprintf( value, "%d/%d", iMipModel, miModelInfo.mi_MipCt);
m_strCurrentMipModel = value;
sprintf( value, "%d", miModelInfo.mi_MipInfos[ iMipModel].mi_TrianglesCt);
m_strNoOfTriangles = value;
sprintf( value, "%d", miModelInfo.mi_MipInfos[ iMipModel].mi_VerticesCt);
m_strNoOfVertices = value;
sprintf( value, "%d", miModelInfo.mi_MipInfos[ iMipModel].mi_PolygonsCt);
m_strNoOfPolygons = value;
}
sprintf( value, "%.1f m", pModelerView->GetModelToViewerDistance());
m_strModelDistance = value;
sprintf( value, "%.3f", pModelerView->m_fCurrentMipFactor);
m_strCurrentMipFactor = value;
sprintf( value, "%.3f", pDoc->m_emEditModel.edm_md.md_MipSwitchFactors[iMipModel]);
m_strModelMipSwitchFactor = value;
ModelMipInfo *pMMIFirst = &pDoc->m_emEditModel.edm_md.md_MipInfos[ iMipModel];
// if patches are visible for current mip model
if( pMMIFirst->mmpi_ulFlags & MM_PATCHES_VISIBLE)
{
m_bHasPatches = TRUE;
}
else
{
m_bHasPatches = FALSE;
}
// if patches are visible for current mip model
if( pMMIFirst->mmpi_ulFlags & MM_ATTACHED_MODELS_VISIBLE)
{
m_bHasAttachedModels = TRUE;
}
else
{
m_bHasAttachedModels = FALSE;
}
}
void CDlgInfoPgMip::SetViewFromMipPage(CModelerView* pModelerView)
{
}
CDlgInfoPgMip::~CDlgInfoPgMip()
{
}
void CDlgInfoPgMip::DoDataExchange(CDataExchange* pDX)
{
CModelerView *pModelerView = CModelerView::GetActiveMappingNormalView();
if(pModelerView == NULL) return;
if( !pDX->m_bSaveAndValidate) // if zero, model sets property sheet's data
{
SetMipPageFromView( pModelerView);
// mark that the values have been updated to reflect the state of the view
m_udAllValues.MarkUpdated();
}
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgInfoPgMip)
DDX_Text(pDX, IDC_CURRENT_MIP_MODEL, m_strCurrentMipModel);
DDX_Text(pDX, IDC_MODEL_DISTANCE, m_strModelDistance);
DDX_Text(pDX, IDC_CURRENT_FACTOR, m_strCurrentMipFactor);
DDX_Text(pDX, IDC_MODEL_SWITCH_FACTOR, m_strModelMipSwitchFactor);
DDX_Text(pDX, IDC_NO_OF_POLYGONS, m_strNoOfPolygons);
DDX_Text(pDX, IDC_NO_OF_VERTICES, m_strNoOfVertices);
DDX_Text(pDX, IDC_NO_OF_TRIANGLES, m_strNoOfTriangles);
DDX_Check(pDX, IDC_HAS_PATCHES, m_bHasPatches);
DDX_Check(pDX, IDC_HAS_ATTACHED_MODELS, m_bHasAttachedModels);
//}}AFX_DATA_MAP
if( pDX->m_bSaveAndValidate)
{
SetViewFromMipPage( pModelerView);
}
}
BEGIN_MESSAGE_MAP(CDlgInfoPgMip, CPropertyPage)
//{{AFX_MSG_MAP(CDlgInfoPgMip)
ON_BN_CLICKED(IDC_HAS_PATCHES, OnHasPatches)
ON_BN_CLICKED(IDC_HAS_ATTACHED_MODELS, OnHasAttachedModels)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgInfoPgMip message handlers
BOOL CDlgInfoPgMip::OnIdle(LONG lCount)
{
CModelerView *pModelerView = CModelerView::GetActiveMappingNormalView();
ASSERT(pModelerView != NULL);
if (!theApp.m_chGlobal.IsUpToDate(m_udAllValues) ||
!pModelerView->m_ModelObject.IsUpToDate(m_udAllValues) ||
!theApp.m_chPlacement.IsUpToDate(m_udAllValues)) {
UpdateData(FALSE);
}
// refresh info frame size
((CMainFrame *)( theApp.m_pMainWnd))->m_pInfoFrame->SetSizes();
return TRUE;
}
void CDlgInfoPgMip::ToggleMipFlag( ULONG ulFlag)
{
CModelerView *pModelerView = CModelerView::GetActiveMappingNormalView();
ASSERT(pModelerView != NULL);
CModelerDoc *pDoc = pModelerView->GetDocument();
ASSERT(pDoc != NULL);
ModelMipInfo *pMMIFirst = &pDoc->m_emEditModel.edm_md.md_MipInfos[ pDoc->m_iCurrentMip];
BOOL bSetting = (pMMIFirst->mmpi_ulFlags & ulFlag) == 0;
// if setting, set just for this mip model
if( bSetting)
{
pMMIFirst->mmpi_ulFlags |= ulFlag;
}
// if clearing, clear for all further mip models
else
{
for( INDEX iMip=pDoc->m_iCurrentMip; iMip<pDoc->m_emEditModel.edm_md.md_MipCt; iMip++)
{
// get requested mip model
ModelMipInfo *pMMI = &pDoc->m_emEditModel.edm_md.md_MipInfos[ iMip];
// if setting, set just for this mip model
pMMI->mmpi_ulFlags &= ~ulFlag;
}
}
// for patcehs
if( ulFlag == MM_PATCHES_VISIBLE)
{
// reaclculate patch-polygon connections
pDoc->m_emEditModel.CalculatePatchesPerPolygon();
}
pDoc->UpdateAllViews(NULL);
UpdateData( FALSE);
}
void CDlgInfoPgMip::OnHasPatches()
{
ToggleMipFlag( MM_PATCHES_VISIBLE);
}
void CDlgInfoPgMip::OnHasAttachedModels()
{
ToggleMipFlag( MM_ATTACHED_MODELS_VISIBLE);
}