void CCmdMoveObject::_Execute() { COpearationLog::GetInst()->WriteOperationLog("DO LShift Or C move object"); CTerrainMesh * pTerrainMesh = CMapEditApp::GetInst()->GetEditingMesh(); COperator * pOperator = CMapEditApp::GetInst()->GetOperator(); CMapEditObject * pModel = m_diff.pObject->GetModelGroup()->GetSelfPresentation(0); pModel->SetGroupOffset(m_diff.vGroupOffset); // erase center image info int nCenterGridIndex = pModel->GetUserOffsetAdjustedGridIndex(m_diff.nCenterGridIndex); SGrid & gridCenter = pTerrainMesh->GetGrid(nCenterGridIndex); gridCenter.vecCenterObjects.erase( remove(gridCenter.vecCenterObjects.begin(), gridCenter.vecCenterObjects.end(), m_diff.pObject), gridCenter.vecCenterObjects.end() ); CToolSetModel::GetInst()->AddActiveObject(m_diff.pObject); m_diff.pObject->SetCenterGridIndex(INVALID); m_diff.pObject->GetModelGroup()->SetEditState(sqr::EES_MOVING); // update hot CTObject * p = NULL; CVector3f v; DWORD dwGridIndexHot = CPicker::GetInst()->GetPickPos(&p,&v); pOperator->SetGridIndexHot(dwGridIndexHot); pOperator->SetHitPoint(*((CVector3f*)&v)); pOperator->SetObjectHot(p); }
void CCmdPlaceObject::_UnExecute() { CTerrainMesh * pTerrainMesh = CMapEditApp::GetInst()->GetEditingMesh(); COperator * pOperator = CMapEditApp::GetInst()->GetOperator(); CMapEditObject * pModel = m_diff.pObject->GetModelGroup()->GetSelfPresentation(0); pModel->SetGroupOffset(m_diff.vGroupOffset); pModel->SetVisible(false); int nHotGridIndex = pModel->GetUserOffsetAdjustedGridIndex(m_diff.nHotGridIndex); if ( m_diff.pObject->GetModelGroup()->m_SL.m_bIAmbScenePointLight || m_diff.pObject->GetModelGroup()->m_SpotLight.m_bIAmbSceneSpotLight ) { if ( pTerrainMesh->m_DynamicLightGrids.find(nHotGridIndex) != pTerrainMesh->m_DynamicLightGrids.end() ) pTerrainMesh->m_DynamicLightGrids.erase(pTerrainMesh->m_DynamicLightGrids.find(nHotGridIndex)); if ( pTerrainMesh->m_VisibleDynamicLightGrids.find(nHotGridIndex) != pTerrainMesh->m_VisibleDynamicLightGrids.end() ) pTerrainMesh->m_VisibleDynamicLightGrids.erase(pTerrainMesh->m_VisibleDynamicLightGrids.find(nHotGridIndex)); m_diff.pObject->GetModelGroup()->SetIsLightEffect(false); } // erase center image info SGrid & gridCenter = pTerrainMesh->GetGrid(nHotGridIndex); int nDeleteGridIndex = 0; size_t nModelGroupCnt = gridCenter.vecCenterObjects.size(); for ( size_t m = 0; m < nModelGroupCnt; ++m ) { if( gridCenter.vecCenterObjects[m] == m_diff.pObject ) { nDeleteGridIndex = m; m = nModelGroupCnt; } } gridCenter.vecCenterObjects.erase( remove(gridCenter.vecCenterObjects.begin(), gridCenter.vecCenterObjects.end(), m_diff.pObject), gridCenter.vecCenterObjects.end() ); OfflineRender::GetInst()->UpdateGridLights(nHotGridIndex); ////////////////////////////////////////////////////////////////////////// pModel = m_diff.pObject->GetModelGroup()->GetSelfPresentation(0); ////////////////////////////////////////////////////////////////////////// CToolSetModel::GetInst()->AddActiveObject(m_diff.pObject); m_diff.pObject->GetModelGroup()->SetEditState(sqr::EES_MOVING); m_diff.pObject->SetCenterGridIndex(INVALID); ////////////////////////////////////////////////////////////////////////// // update hot CTObject * p = NULL; CVector3f v; nHotGridIndex = CPicker::GetInst()->GetPickPos(&p,&v); pOperator->SetGridIndexHot(nHotGridIndex); pOperator->SetHitPoint(*((CVector3f*)&v)); pOperator->SetObjectHot(p); ///删除模型名记录 string modelname = ""; modelname = pModel->GetName(); set<string>::iterator iter = pTerrainMesh->m_SceneModelList.find(modelname); if ( iter != pTerrainMesh->m_SceneModelList.end() ) pTerrainMesh->m_SceneModelList.erase(iter); size_t npos = modelname.rfind("\\"); modelname = modelname.substr(npos+1, modelname.length()); char szObjectBuf[1024]; sprintf(szObjectBuf, "UNDO 放置 %s", modelname.c_str()); COpearationLog::GetInst()->WriteOperationLog(szObjectBuf); }