Beispiel #1
0
	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);
	}
Beispiel #2
0
	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);
	}