void IntersectGrids::refresh(void) { GridSelection* selection = static_cast<GridSelection *>( getSceneManipulator()->_getSelection("GridSelection")); const GridSelection::GridMap &mGrids = selection->getGrids(); TerrainData *terrainData = getTerrainData(); if (!mGrids.empty()) { GridSelection::GridMap::const_iterator it = mGrids.begin(); while (it != mGrids.end()) { // 取得这个grid的四个角的坐标 int minx = it->second.x; int minz = it->second.z; int maxx = minx+1; int maxz = minz+1; // 判断是否翻转了,因为翻转了会改变顶点的高度 if ( terrainData->getGridInfo(minx, minz).flags & TerrainData::GridInfo::FlipDiagonal ) { // 第一个三角形 mPosArray.push_back(terrainData->_getPosition(minx,minz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(minx,maxz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(maxx,maxz)-mIntersectGridsNode->getPosition()); // 第二个三角形 mPosArray.push_back(terrainData->_getPosition(maxx,minz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(minx,minz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(maxx,maxz)-mIntersectGridsNode->getPosition()); } else { // 第一个三角形 mPosArray.push_back(terrainData->_getPosition(minx,minz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(minx,maxz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(maxx,minz)-mIntersectGridsNode->getPosition()); // 第二个三角形 mPosArray.push_back(terrainData->_getPosition(maxx,minz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(minx,maxz)-mIntersectGridsNode->getPosition()); mPosArray.push_back(terrainData->_getPosition(maxx,maxz)-mIntersectGridsNode->getPosition()); } ++it; } intersectGrids->fillPosition(mPosArray); mPosArray.clear(); } }
void TerrainSelectionGrids::refresh(void) { // 对当前所有的GridSelection进行重绘 GridSelections::const_iterator listIterator = mGridSelectionList.begin(); while ( listIterator != mGridSelectionList.end() ) { GridSelection* selection = *listIterator; const GridSelection::GridMap &mGrids = selection->getGrids(); TerrainData *terrainData = getTerrainData(); if (!mGrids.empty()) { GridSelection::GridMap::const_iterator it = mGrids.begin(); Ogre::Vector3 sceneNodePos = mIntersectGridsNode->getPosition(); while (it != mGrids.end()) { // 取得这个grid的四个角的坐标 int minx = it->second.x; int minz = it->second.z; int maxx = minx+1; int maxz = minz+1; // 判断是否翻转了,因为翻转了会改变顶点的高度 if ( terrainData->getGridInfo(minx, minz).flags & TerrainData::GridInfo::FlipDiagonal ) { // 第一个三角形 mPosArray.push_back(terrainData->_getPosition(minx,minz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(minx,maxz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(maxx,maxz)-sceneNodePos); // 第二个三角形 mPosArray.push_back(terrainData->_getPosition(maxx,minz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(minx,minz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(maxx,maxz)-sceneNodePos); } else { // 第一个三角形 mPosArray.push_back(terrainData->_getPosition(minx,minz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(minx,maxz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(maxx,minz)-sceneNodePos); // 第二个三角形 mPosArray.push_back(terrainData->_getPosition(maxx,minz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(minx,maxz)-sceneNodePos); mPosArray.push_back(terrainData->_getPosition(maxx,maxz)-sceneNodePos); } ++it; } } ++listIterator; } intersectGrids->fillPosition(mPosArray); mPosArray.clear(); }