// PageDuengunLight.cpp : implementation file // #include "stdafx.h" #include "worldcreator.h" #include "PageDuengunLight.h" #include "SceneManager.h" #include "MainFrm.h" #include "WorldCreatorView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageDuengunLight property page IMPLEMENT_DYNCREATE(CPageDuengunLight, CPropertyPage) CPageDuengunLight::CPageDuengunLight() : CPropertyPage(CPageDuengunLight::IDD) { //{{AFX_DATA_INIT(CPageDuengunLight) m_bToggle = TRUE; m_bPick = FALSE; //}}AFX_DATA_INIT } CPageDuengunLight::~CPageDuengunLight() { } void CPageDuengunLight::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageDuengunLight) DDX_Control(pDX, IDC_LIST1, m_ctrlLightList); DDX_Check(pDX, IDC_CHECK1, m_bToggle); DDX_Check(pDX, IDC_PICK, m_bPick); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageDuengunLight, CPropertyPage) //{{AFX_MSG_MAP(CPageDuengunLight) ON_BN_CLICKED(IDC_CHECK1, OnCheck1) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_PICK, OnPick) ON_BN_CLICKED(IDC_LISTUPDATE, OnListupdate) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageDuengunLight message handlers void CPageDuengunLight::OnCheck1() { // TODO: Add your control notification handler code here m_bToggle = (m_bToggle == TRUE) ? FALSE : TRUE; CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_bVisLightBox = (m_bToggle == TRUE) ? true : false; UpdateData(FALSE); } void CPageDuengunLight::UpdateList() { if(CSceneManager::m_RBspSceneManager.m_pCurrentBspScene != NULL) { RBspScene *pScene = NULL; if(CSceneManager::m_RBspSceneManager.m_pCurrentBspScene != NULL) pScene = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene; else pScene = CSceneManager::m_RBspSceneManager.m_lstBspScene[CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex]; int iLeaf = pScene->m_iLeafsNum; int i,j; // List ÃʱâÈ­ m_ctrlLightList.DeleteAllItems(); for( i = 0; i < iLeaf; i++ ) { RBspScene::RBspLeafEx *pLeaf = &(pScene->m_pLeafExs[i]); for(j = 0; j < pLeaf->m_iLightNum; j++) { RBspScene::RBspLight LightNode = pLeaf->m_lstLight[j]; // Insert Item LV_ITEM item; item.iItem = m_ctrlLightList.GetItemCount(); item.mask = LVIF_TEXT; item.iSubItem = 0; CString Tmp; // Leaf Index Setting Tmp.Format("%d",i); item.pszText = Tmp.LockBuffer(); m_ctrlLightList.InsertItem(&item); // Red Tmp.Format("%d",(int)(LightNode.m_fRed * 255.0f)); m_ctrlLightList.SetItemText(item.iItem,1,Tmp); // Green Tmp.Format("%d",(int)(LightNode.m_fGreen * 255.0f)); m_ctrlLightList.SetItemText(item.iItem,2,Tmp); // Blue Tmp.Format("%d",(int)(LightNode.m_fBlue * 255.0f)); m_ctrlLightList.SetItemText(item.iItem,3,Tmp); // Range Tmp.Format("%f",LightNode.m_vecLightRange.x); m_ctrlLightList.SetItemText(item.iItem,4,Tmp); } } } else { MessageBox("Bsp ³»ºÎ°¡ ¾Æ´Ï°Å³ª Leaf ³ëµå°¡ À߸øµÇ¾ú½À´Ï´Ù."); } } void CPageDuengunLight::OnButton1() { // TODO: Add your control notification handler code here if((CSceneManager::m_RBspSceneManager.m_pCurrentBspScene != NULL) && (CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex != -1)) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); D3DXMATRIX matView; av->m_SceneManager->GetDevice()->GetTransform(D3DTS_VIEW,&matView); D3DXMatrixInverse(&matView,NULL,&matView); vector3 vecPos = vector3(matView._41,matView._42,matView._43); m_DlgLight.m_strPos.Format("X : %f Y : %f Z : %f",vecPos.x,vecPos.y,vecPos.z); m_DlgLight.m_iLeaf = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex; m_DlgLight.DoModal(); RBspScene *pScene = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene; int iLeaf = CSceneManager::m_RBspSceneManager.m_pCurrentBspScene->m_iRBspLeafIndex; D3DXVECTOR3 vecEffect = D3DXVECTOR3(vecPos.x,vecPos.y,vecPos.z); pScene->m_pLeafExs[iLeaf].InputLight(0,vecEffect,D3DXVECTOR3(m_DlgLight.m_fRange,m_DlgLight.m_fRange,m_DlgLight.m_fRange), m_DlgLight.m_uiRed,m_DlgLight.m_uiGreen,m_DlgLight.m_uiBlue,false,false); // Insert Item LV_ITEM item; item.iItem = m_ctrlLightList.GetItemCount(); item.mask = LVIF_TEXT; item.iSubItem = 0; CString Tmp; Tmp.Format("%d",iLeaf); item.pszText = Tmp.LockBuffer(); m_ctrlLightList.InsertItem(&item); Tmp.Format("%d",(int)m_DlgLight.m_uiRed); m_ctrlLightList.SetItemText(item.iItem,1,Tmp); Tmp.Format("%d",(int)m_DlgLight.m_uiGreen); m_ctrlLightList.SetItemText(item.iItem,2,Tmp); Tmp.Format("%d",(int)m_DlgLight.m_uiBlue); m_ctrlLightList.SetItemText(item.iItem,3,Tmp); Tmp.Format("%f",m_DlgLight.m_fRange); m_ctrlLightList.SetItemText(item.iItem,4,Tmp); } else { MessageBox("Bsp ³»ºÎ°¡ ¾Æ´Ï°Å³ª Leaf ³ëµå°¡ À߸øµÇ¾ú½À´Ï´Ù."); } } BOOL CPageDuengunLight::OnInitDialog() { CPropertyPage::OnInitDialog(); DWORD dwStyle; dwStyle = m_ctrlLightList.SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE, 0 ,0); dwStyle |= LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES ; m_ctrlLightList.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, 0,dwStyle ); m_ctrlLightList.InsertColumn(0,"±Í¼Ó Leaf",LVCFMT_LEFT,70); m_ctrlLightList.InsertColumn(1,"Red", LVCFMT_LEFT,50); m_ctrlLightList.InsertColumn(2,"Green", LVCFMT_LEFT,50); m_ctrlLightList.InsertColumn(3,"Blue", LVCFMT_LEFT,50); m_ctrlLightList.InsertColumn(4,"Range",LVCFMT_LEFT,70); // TODO: Add extra initialization here UpdateList(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageDuengunLight::OnPick() { // TODO: Add your control notification handler code here m_bPick = (m_bPick == TRUE) ? FALSE : TRUE; CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(m_bPick == TRUE) { mf->m_PickMode = 98; } else { mf->m_PickMode = -1; } } BOOL CPageDuengunLight::OnSetActive() { // TODO: Add your specialized code here and/or call the base class UpdateList(); return CPropertyPage::OnSetActive(); } void CPageDuengunLight::OnListupdate() { // TODO: Add your control notification handler code here UpdateList(); UpdateData(FALSE); }