void CCmdSetVertexAlpha::Execute() { CCmd::Execute(); COperator * pOperator = CXFile::GetInstance()->GetOperator(); CTerrainMesh * pTerrainMesh = CXFile::GetInstance()->GetTerrainMesh(); // for the first time if ( 0 == m_processParams.dwBrushSize ) { memcpy(&m_processParams,pOperator->GetProcessParams(),sizeof(COperator::SProcessParams)); m_processParams.pObjectHot.grab(); } CTerrainMesh::SGrid & grid = pTerrainMesh->GetGrid(m_processParams.dwGridIndexHot); int nVertexIndexHot = grid.dwVertexIndex[0]; for ( std::vector<SVertex>::iterator iter = m_vecDiffs.begin(); iter != m_vecDiffs.end(); ++iter ) { if ( m_processParams.eSetWayType == COperator::ESWT_CUT ) { pTerrainMesh->CutVertexAlpha(iter->dwVertexIndex); continue; } switch ( m_processParams.eSetAxisType ) { case COperator::EAT_X: { switch ( m_processParams.eSetAlphaType ) { case COperator::ESAT_LINEAR: { switch ( m_processParams.eSetWayType ) { case COperator::ESWT_INC: { pTerrainMesh->IncLinearVertexAlphaX(iter->dwVertexIndex); } break; case COperator::ESWT_DEC: { pTerrainMesh->DecLinearVertexAlphaX(iter->dwVertexIndex); } break; } } break; } } break; case COperator::EAT_Z: { switch ( m_processParams.eSetAlphaType ) { case COperator::ESAT_LINEAR: { switch ( m_processParams.eSetWayType ) { case COperator::ESWT_INC: { pTerrainMesh->IncLinearVertexAlphaZ(iter->dwVertexIndex); } break; case COperator::ESWT_DEC: { pTerrainMesh->DecLinearVertexAlphaZ(iter->dwVertexIndex); } break; } } break; } } break; case COperator::EAT_BOTH: { switch ( m_processParams.eSetAlphaType ) { case COperator::ESAT_LINEAR: { switch ( m_processParams.eSetWayType ) { case COperator::ESWT_INC: { pTerrainMesh->IncLinearVertexAlphaB(iter->dwVertexIndex, nVertexIndexHot); } break; case COperator::ESWT_DEC: { pTerrainMesh->DecLinearVertexAlphaB(iter->dwVertexIndex); } break; } } break; } } break; } } }