void TerrainImpl::avgFlatten(const Selection& selection, float intensity) { // add by 王宏张 2007-7-25 // 计算平均高度 float avgHeiht = 0.0f; for(Selection::const_iterator iter = selection.begin() ; iter != selection.end() ; ++iter) { if(size_t(iter->first.getX() + selection.getPosition().getX()) >= mInfo->getWidth() || size_t(iter->first.getY() + selection.getPosition().getY()) >= mInfo->getHeight()) continue; float height = mInfo->at(size_t(iter->first.getX() + selection.getPosition().getX()) , size_t(iter->first.getY() + selection.getPosition().getY())); avgHeiht += height; } avgHeiht /= selection.size(); for(Selection::const_iterator iter = selection.begin() ; iter != selection.end() ; ++iter) { if(size_t(iter->first.getX() + selection.getPosition().getX()) >= mInfo->getWidth() || size_t(iter->first.getY() + selection.getPosition().getY()) >= mInfo->getHeight()) continue; float& height = mInfo->at(size_t(iter->first.getX() + selection.getPosition().getX()) , size_t(iter->first.getY() + selection.getPosition().getY())); height = avgHeiht; // avgFlatten算法 } updateTiles(selection.getMin().getX(), selection.getMin().getY(), selection.getMax().getX(), selection.getMax().getY()); }
void TerrainImpl::deform(const Selection& selection, float intensity) { for(Selection::const_iterator iter = selection.begin() ; iter != selection.end() ; iter ++) { if(size_t(iter->first.getX() + selection.getPosition().getX()) >= mInfo->getWidth() || size_t(iter->first.getY() + selection.getPosition().getY()) >= mInfo->getHeight()) continue; float& height = mInfo->at(size_t(iter->first.getX() + selection.getPosition().getX()) , size_t(iter->first.getY() + selection.getPosition().getY())); height += intensity * iter->second; } updateTiles(selection.getMin().getX(), selection.getMin().getY(), selection.getMax().getX(), selection.getMax().getY()); }
void TerrainImpl::moveSelection(const Selection& selection, float intensity) { // add by 王宏张 2007-7-30 // 更新选区 updateTiles(selection.getMin().getX(), selection.getMin().getY(), selection.getMax().getX(), selection.getMax().getY()); }