// meshpage.cpp : implementation file // #include "stdafx.h" #include "effecteditor.h" #include "meshpage.h" #include "MainFrm.h" #include "EffectEditorDoc.h" #include "EffectEditorView.h" #include "Z3DMath.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMeshPage property page IMPLEMENT_DYNCREATE(CMeshPage, CPropertyPage) CMeshPage::CMeshPage() : CPropertyPage(CMeshPage::IDD) { //{{AFX_DATA_INIT(CMeshPage) m_strMesh = _T(""); m_dwEndFrame = 0; m_dwStartFrame = 0; m_dwObjectMax = 0; m_dwObjectNum = 0; m_fTexFrame = 0.0f; m_fStartTexFrame = 0.0f; //}}AFX_DATA_INIT } CMeshPage::~CMeshPage() { } void CMeshPage::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMeshPage) DDX_Control(pDX, IDC_COLR, m_edtColR); DDX_Control(pDX, IDC_COLG, m_edtColG); DDX_Control(pDX, IDC_COLB, m_edtColB); DDX_Control(pDX, IDC_ALPHA, m_edtAlpha); DDX_Control(pDX, IDC_CBSRC, m_cbSrc); DDX_Control(pDX, IDC_CBDEST, m_cbDest); DDX_Text(pDX, IDC_MESH, m_strMesh); DDX_Text(pDX, IDC_ENDFRAME, m_dwEndFrame); DDX_Text(pDX, IDC_STARTFRAME, m_dwStartFrame); DDX_Text(pDX, IDC_OBECJTMAX, m_dwObjectMax); DDX_Text(pDX, IDC_OBJECTNUM, m_dwObjectNum); DDX_Text(pDX, IDC_TEXFRAME, m_fTexFrame); DDX_Text(pDX, IDC_STARTTEXFRAME, m_fStartTexFrame); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMeshPage, CPropertyPage) //{{AFX_MSG_MAP(CMeshPage) ON_BN_CLICKED(IDC_CREATE, OnCreate) ON_BN_CLICKED(IDC_DELETE, OnDelete) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_CBN_SELCHANGE(IDC_CBSRC, OnSelchangeCbsrc) ON_CBN_SELCHANGE(IDC_CBDEST, OnSelchangeCbdest) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMeshPage message handlers void CMeshPage::Redo(CCommand *RedoCommand) { } void CMeshPage::InitValue(void) { m_strMesh = _T(""); m_dwEndFrame = 30; m_dwStartFrame = 1; m_dwObjectMax = 0; m_dwObjectNum = 0; m_fTexFrame = 1.0f; m_fStartTexFrame = 0.0f; m_edtAlpha.SetValue((unsigned char)255); m_edtAlpha.DisableBkColor(); m_edtColB.SetValue((unsigned char)255); m_edtColB.DisableBkColor(); m_edtColG.SetValue((unsigned char)255); m_edtColG.DisableBkColor(); m_edtColR.SetValue((unsigned char)255); m_edtColR.DisableBkColor(); } void CMeshPage::Undo(CCommand *UndoCommand) { } void CMeshPage::SetKeyInfo(void) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditMesh *pMesh = (CX3DEffectEditMesh *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(EFFECT_MESH, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; if(pMesh) { pMesh->Interpolation(dwFrame); // m_strTexture = pMesh->GetTextureFileName(); m_dwObjectMax = pMesh->m_dwObjectNum; m_dwEndFrame = pMesh->GetEndFrame(); m_dwStartFrame = pMesh->GetStartFrame(); if(m_dwObjectNum < m_dwObjectMax) { m_fTexFrame = pMesh->GetTexFrame(m_dwObjectNum); m_fStartTexFrame = pMesh->GetStartTexFrame(m_dwObjectNum); m_edtAlpha = pMesh->GetObjectAlpha(dwFrame, m_dwObjectNum); m_edtColB = pMesh->GetObjectBColor(dwFrame, m_dwObjectNum); m_edtColG = pMesh->GetObjectGColor(dwFrame, m_dwObjectNum); m_edtColR = pMesh->GetObjectRColor(dwFrame, m_dwObjectNum); if(pMesh->m_moMesh[m_dwObjectNum].m_lstColor.Find(dwFrame)) { m_edtAlpha.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColB.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColG.SetBkColor(0x000000FF, 0x00FFFFFF); m_edtColR.SetBkColor(0x000000FF, 0x00FFFFFF); } else { m_edtAlpha.DisableBkColor(); m_edtColB.DisableBkColor(); m_edtColG.DisableBkColor(); m_edtColR.DisableBkColor(); } } else { /* m_fTexFrame = 0.0f; m_fStartTexFrame = 0.0f; m_edtAlpha = (char)0; m_edtColB = (char)0; m_edtColG = (char)0; m_edtColR = (char)0; m_edtAlpha.DisableBkColor(); m_edtColB.DisableBkColor(); m_edtColG.DisableBkColor(); m_edtColR.DisableBkColor();*/ } CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; mf->m_KeyBar.m_lpKeySheet->m_Page1.ClearMarker(); for(int i = 0; i < mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwTotalFrame; i++) { if(m_dwObjectNum < m_dwObjectMax) { if(pMesh->m_moMesh[m_dwObjectNum].m_lstColor.Find(i)) { if(!mf->m_KeyBar.m_lpKeySheet->m_Page1.m_sldPoint.FindMarker(i)) { mf->m_KeyBar.m_lpKeySheet->m_Page1.SetMarker(i); } } } } m_cbSrc.SetCurSel(pMesh->GetSrcBlending() - D3DBLEND_ZERO); m_cbDest.SetCurSel(pMesh->GetDestBlending() - D3DBLEND_ZERO); UpdateData(FALSE); Invalidate(FALSE); } } BOOL CMeshPage::OnInitDialog() { CPropertyPage::OnInitDialog(); // TODO: Add extra initialization here m_cbSrc.AddString("ZERO"); m_cbSrc.AddString("ONE"); m_cbSrc.AddString("SRCCOLOR"); m_cbSrc.AddString("INVSRCCOLOR"); m_cbSrc.AddString("SRCALPHA"); m_cbSrc.AddString("INVSRCALPHA"); m_cbSrc.AddString("DESTALPHA"); m_cbSrc.AddString("INVDESTALPHA"); m_cbSrc.AddString("DESTCOLOR"); m_cbSrc.AddString("INVDESTCOLOR"); m_cbSrc.AddString("SRCALPHASAT"); m_cbSrc.AddString("BOTHSRCALPHA"); m_cbSrc.AddString("BOTHINVSRCALPHA"); m_cbSrc.SetCurSel(4); m_cbDest.AddString("ZERO"); m_cbDest.AddString("ONE"); m_cbDest.AddString("SRCCOLOR"); m_cbDest.AddString("INVSRCCOLOR"); m_cbDest.AddString("SRCALPHA"); m_cbDest.AddString("INVSRCALPHA"); m_cbDest.AddString("DESTALPHA"); m_cbDest.AddString("INVDESTALPHA"); m_cbDest.AddString("DESTCOLOR"); m_cbDest.AddString("INVDESTCOLOR"); m_cbDest.AddString("SRCALPHASAT"); m_cbDest.AddString("BOTHSRCALPHA"); m_cbDest.AddString("BOTHINVSRCALPHA"); m_cbDest.SetCurSel(1); InitValue(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CMeshPage::OnCreate() { // TODO: Add your control notification handler code here UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame > m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_dwPreFrame; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwStartFrame) { m_dwStartFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } if(((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() < m_dwEndFrame) { m_dwEndFrame = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetMaxFrame() + 1; } CX3DEffectEditMesh *pMesh; pMesh = new CX3DEffectEditMesh; unsigned long dwStartFrame = m_dwStartFrame - 1; unsigned long dwEndFrame = m_dwEndFrame - 1; pMesh->Create(dwStartFrame, dwEndFrame); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEffect(pMesh); ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->AddEditObject(pMesh); { pMesh->LoadFile(m_strMesh.GetBuffer(m_strMesh.GetLength())); for(long i = 0; i < pMesh->m_dwObjectNum; i++) { SetKey(dwStartFrame, pMesh->m_moMesh[i].m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); pMesh->SetTexFrame(i, 1.0f); pMesh->SetStartTexFrame(i, 0.0f); } pMesh->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); pMesh->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); pMesh->SetEffectKind(EFFECT_MESH); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->SetMaxFrame(pMesh->GetMaxFrame()); mf->m_KeyBar.m_lpKeySheet->m_Page1.SetMaxFrame(pMesh->GetMaxFrame()); mf->m_KeyBar.m_lpKeySheet->m_Page1.m_sldKeyFrame.SetRange(0, pMesh->GetMaxFrame() - 1); SetKeyInfo(); } } void CMeshPage::OnDelete() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; if(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect != 0xFFFFFFFF) { ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEffect(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); ((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->DeleteEditObject(((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); } ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect = 0xFFFFFFFF; InitValue(); UpdateData(FALSE); } void CMeshPage::OnBrowse() { // TODO: Add your control notification handler code here char strFilter[50] = "GEM ÆÄÀÏ(*.gem)|*.gem||"; CFileDialog dlg(TRUE, "*.gem", "", OFN_HIDEREADONLY | OFN_LONGNAMES, strFilter); if(dlg.DoModal() == IDOK) { m_strMesh = dlg.GetPathName(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditMesh *pMesh = (CX3DEffectEditMesh *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(EFFECT_MESH, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pMesh) { pMesh->LoadFile(m_strMesh.GetBuffer(m_strMesh.GetLength())); mf->m_KeyBar.m_lpKeySheet->m_Page1.SetMaxFrame(pMesh->GetMaxFrame()); } UpdateData(FALSE); } } void CMeshPage::OnSelchangeCbsrc() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditMesh *pMesh = (CX3DEffectEditMesh *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(EFFECT_MESH, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pMesh) { pMesh->SetSrcBlending(D3DBLEND_ZERO + m_cbSrc.GetCurSel()); } } void CMeshPage::OnSelchangeCbdest() { // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditMesh *pMesh = (CX3DEffectEditMesh *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(EFFECT_MESH, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); if(pMesh) { pMesh->SetDestBlending(D3DBLEND_ZERO + m_cbDest.GetCurSel()); } } BOOL CMeshPage::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { UpdateData(); CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CX3DEffectEditMesh *pMesh = (CX3DEffectEditMesh *)((CEffectEditorView*)mf->GetActiveView())->m_lpEffect->GetEffect(EFFECT_MESH, ((CEffectEditorView*)mf->GetActiveView())->m_dwPickEffect); unsigned long dwFrame = mf->m_KeyBar.m_lpKeySheet->m_Page1.m_dwPreFrame - 1; switch(::GetDlgCtrlID(pMsg->hwnd)) { /* case IDC_TEXTURE: if(pMesh) { pMesh->LoadTexture(m_strTexture); } break; */ case IDC_ALPHA: case IDC_COLR: case IDC_COLG: case IDC_COLB: if(pMesh) { color lData; if(m_dwObjectNum >= m_dwObjectMax) { for(int i = 0; i < m_dwObjectMax; i++) { if(!strcmp(m_edtColR, "") || !strcmp(m_edtColG, "") || !strcmp(m_edtColB, "") || !strcmp(m_edtAlpha, "")) { if(pMesh->m_moMesh[i].m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_DELKEY, 2, lData); pMesh->m_moMesh[i].m_lstColor.Erase(dwFrame); break; } } if(pMesh->m_moMesh[i].m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_OLDDATA, 2, lData); SetKey(dwFrame, pMesh->m_moMesh[i].m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_NEWDATA, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } else { SetKey(dwFrame, pMesh->m_moMesh[i].m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_INSERT, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } } break; } if(!strcmp(m_edtColR, "") || !strcmp(m_edtColG, "") || !strcmp(m_edtColB, "") || !strcmp(m_edtAlpha, "")) { if(pMesh->m_moMesh[m_dwObjectNum].m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_DELKEY, 2, lData); pMesh->m_moMesh[m_dwObjectNum].m_lstColor.Erase(dwFrame); break; } } if(pMesh->m_moMesh[m_dwObjectNum].m_lstColor.Find(dwFrame, lData)) { g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_OLDDATA, 2, lData); SetKey(dwFrame, pMesh->m_moMesh[m_dwObjectNum].m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_NEWDATA, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } else { SetKey(dwFrame, pMesh->m_moMesh[m_dwObjectNum].m_lstColor, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); g_CommandManager.AddCommand(EFFECT_MESH, pMesh->GetUID(), dwFrame, COMMAND_INSERT, 2, color(m_edtColR, m_edtColG, m_edtColB, m_edtAlpha)); } } break; case IDC_OBJECTNUM: if(pMesh) { if(m_dwObjectNum >= m_dwObjectMax) { break; } pMesh->SetObjectColor(m_dwObjectNum); } break; case IDC_TEXFRAME: if(pMesh) { if(m_dwObjectNum >= m_dwObjectMax) { if(m_fTexFrame < 1.0f) { MessageBox("1.0 ¹ØÀ¸·Î´Â ¸ø ³»·Á°¨."); break; } for(int i = 0; i < m_dwObjectMax; i++) { pMesh->SetTexFrame(i, m_fTexFrame); } break; } if(m_fTexFrame < 1.0f) { MessageBox("1.0 ¹ØÀ¸·Î´Â ¸ø ³»·Á°¨."); break; } pMesh->SetTexFrame(m_dwObjectNum, m_fTexFrame); } break; case IDC_STARTTEXFRAME: if(pMesh) { if(m_dwObjectNum >= m_dwObjectMax) { for(int i = 0; i < m_dwObjectMax; i++) { pMesh->SetStartTexFrame(i, m_fStartTexFrame); } break; } pMesh->SetStartTexFrame(m_dwObjectNum, m_fStartTexFrame); } break; /* case IDC_STARTFRAME: if(pParticle) { // pParticle->EditFrame(pParticle->GetStartFrame(), m_dwStartFrame); pParticle->SetStartFrame(m_dwStartFrame); if(pParticle->GetEndFrame() < m_dwStartFrame) { pParticle->SetEndFrame(m_dwStartFrame); m_dwEndFrame = m_dwStartFrame; UpdateData(FALSE); } } break; case IDC_ENDFRAME: if(pParticle) { if(pParticle->GetStartFrame() > m_dwEndFrame) { m_dwEndFrame = pParticle->GetStartFrame(); UpdateData(FALSE); } pParticle->SetEndFrame(m_dwEndFrame); } break;*/ } SetKeyInfo(); } return CPropertyPage::PreTranslateMessage(pMsg); }