/* 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. */ // DlgSnapVertex.cpp : implementation file // #include "stdafx.h" #include "WorldEditor.h" #include "DlgSnapVertex.h" #ifdef _DEBUG #undef new #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDlgSnapVertex dialog CDlgSnapVertex::CDlgSnapVertex(CWnd* pParent /*=NULL*/) : CDialog(CDlgSnapVertex::IDD, pParent) { //{{AFX_DATA_INIT(CDlgSnapVertex) m_fX = 0.0f; m_fY = 0.0f; m_fZ = 0.0f; //}}AFX_DATA_INIT } void CDlgSnapVertex::DoDataExchange(CDataExchange* pDX) { CWorldEditorDoc* pDoc = theApp.GetActiveDocument(); CDialog::DoDataExchange(pDX); if( pDX->m_bSaveAndValidate == FALSE) { CBrushVertex *pvtx=pDoc->m_selVertexSelection.GetFirstInSelection(); FLOAT3D vFirst=pvtx->bvx_vAbsolute; m_fX=vFirst(1); m_fY=vFirst(2); m_fZ=vFirst(3); } //{{AFX_DATA_MAP(CDlgSnapVertex) DDX_SkyFloat(pDX, IDC_VTX_SNAP_X, m_fX); DDX_SkyFloat(pDX, IDC_VTX_SNAP_Y, m_fY); DDX_SkyFloat(pDX, IDC_VTX_SNAP_Z, m_fZ); //}}AFX_DATA_MAP // if dialog is recieving data if( pDX->m_bSaveAndValidate == FALSE) { CBrushVertex *pvtx=pDoc->m_selVertexSelection.GetFirstInSelection(); FLOAT3D vFirst=pvtx->bvx_vAbsolute; BOOL bValidX, bValidY, bValidZ; bValidX=bValidY=bValidZ=TRUE; // for each of the dynamic container {FOREACHINDYNAMICCONTAINER( pDoc->m_selVertexSelection, CBrushVertex, itvtx) { if( itvtx->bvx_vAbsolute(1)!=vFirst(1)) bValidX=FALSE; if( itvtx->bvx_vAbsolute(2)!=vFirst(2)) bValidY=FALSE; if( itvtx->bvx_vAbsolute(3)!=vFirst(3)) bValidZ=FALSE; }} if( !bValidX) GetDlgItem(IDC_VTX_SNAP_X)->SetWindowText(L""); if( !bValidY) GetDlgItem(IDC_VTX_SNAP_Y)->SetWindowText(L""); if( !bValidZ) GetDlgItem(IDC_VTX_SNAP_Z)->SetWindowText(L""); } // if dialog is giving data if( pDX->m_bSaveAndValidate != FALSE) { CString strX, strY, strZ; BOOL bApplyX, bApplyY, bApplyZ; bApplyX=bApplyY=bApplyZ=FALSE; GetDlgItem(IDC_VTX_SNAP_X)->GetWindowText(strX); GetDlgItem(IDC_VTX_SNAP_Y)->GetWindowText(strY); GetDlgItem(IDC_VTX_SNAP_Z)->GetWindowText(strZ); if( strX!="") bApplyX=TRUE; if( strY!="") bApplyY=TRUE; if( strZ!="") bApplyZ=TRUE; if( bApplyX|bApplyY|bApplyZ) { pDoc->RememberUndo(); pDoc->m_woWorld.TriangularizeForVertices( pDoc->m_selVertexSelection); // for each of the dynamic container {FOREACHINDYNAMICCONTAINER( pDoc->m_selVertexSelection, CBrushVertex, itvtx) { DOUBLE3D vNew=FLOATtoDOUBLE(itvtx->bvx_vAbsolute); if( bApplyX) vNew(1)=m_fX; if( bApplyY) vNew(2)=m_fY; if( bApplyZ) vNew(3)=m_fZ; itvtx->SetAbsolutePosition(vNew); }} pDoc->m_woWorld.UpdateSectorsDuringVertexChange( pDoc->m_selVertexSelection); pDoc->m_woWorld.UpdateSectorsAfterVertexChange( pDoc->m_selVertexSelection); pDoc->UpdateAllViews( NULL); pDoc->SetModifiedFlag(); } } } BEGIN_MESSAGE_MAP(CDlgSnapVertex, CDialog) //{{AFX_MSG_MAP(CDlgSnapVertex) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDlgSnapVertex message handlers BOOL CDlgSnapVertex::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN) { if( pMsg->wParam==VK_ESCAPE) { EndDialog( IDCANCEL); return TRUE; } } return CDialog::PreTranslateMessage(pMsg); }