src/core/datastructures/volume/bricking/brickingregionmanager.cpp
00001 /********************************************************************** 00002 * * 00003 * Voreen - The Volume Rendering Engine * 00004 * * 00005 * Copyright (C) 2005-2010 The Voreen Team. <http://www.voreen.org> * 00006 * * 00007 * This file is part of the Voreen software package. Voreen is free * 00008 * software: you can redistribute it and/or modify it under the terms * 00009 * of the GNU General Public License version 2 as published by the * 00010 * Free Software Foundation. * 00011 * * 00012 * Voreen is distributed in the hope that it will be useful, * 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00015 * GNU General Public License for more details. * 00016 * * 00017 * You should have received a copy of the GNU General Public License * 00018 * in the file "LICENSE.txt" along with this program. * 00019 * If not, see <http://www.gnu.org/licenses/>. * 00020 * * 00021 * The authors reserve all rights not expressly granted herein. For * 00022 * non-commercial academic use see the license exception specified in * 00023 * the file "LICENSE-academic.txt". To get information about * 00024 * commercial licensing please contact the authors. * 00025 * * 00026 **********************************************************************/ 00027 00028 #include "voreen/core/datastructures/volume/bricking/brickingregionmanager.h" 00029 00030 namespace voreen { 00031 00032 BrickingRegionManager::BrickingRegionManager(BrickingInformation& brickingInformation) 00033 : brickingInformation_(brickingInformation) { 00034 00035 std::vector<Brick*> volumeBricks = brickingInformation_.volumeBricks; 00036 00037 for (size_t i=0; i<volumeBricks.size(); i++) { 00038 bricksWithoutRegion_.push_back(volumeBricks.at(i)); 00039 } 00040 00041 brickingRegions_ = std::vector<BrickingRegion*>(); 00042 } 00043 00044 void BrickingRegionManager::addRegion(BrickingRegion* region) { 00045 00046 int priority = region->getPriority(); 00047 00048 removeBricksFromVector(region); 00049 00050 if (brickingRegions_.size() == 0) { 00051 brickingRegions_.push_back(region); 00052 } else { 00053 for (size_t i=0; i<brickingRegions_.size(); i++) { 00054 if (priority > brickingRegions_.at(i)->getPriority()) { 00055 brickingRegions_.insert(brickingRegions_.begin() + i, region); 00056 break; 00057 } 00058 } 00059 } 00060 } 00061 00062 void BrickingRegionManager::deleteRegion(BrickingRegion* region) { 00063 for (size_t i=0; i<brickingRegions_.size(); i++) { 00064 if (brickingRegions_.at(i) == region) { 00065 delete brickingRegions_.at(i); 00066 brickingRegions_.erase(brickingRegions_.begin() + i); 00067 break; 00068 } 00069 } 00070 } 00071 00072 void BrickingRegionManager::deleteRegions(int priority) { 00073 00074 size_t i=0; 00075 while (i < brickingRegions_.size() ) { 00076 if (brickingRegions_.at(i)->getPriority() == priority) { 00077 delete brickingRegions_.at(i); 00078 brickingRegions_.erase(brickingRegions_.begin() + i); 00079 i--; 00080 } 00081 i++; 00082 } 00083 } 00084 00085 std::vector<BrickingRegion*> BrickingRegionManager::getBrickingRegions() { 00086 return brickingRegions_; 00087 } 00088 00089 BrickingRegionManager::~BrickingRegionManager() { 00090 for (size_t i=0; i < brickingRegions_.size(); i++) { 00091 delete brickingRegions_.at(i); 00092 } 00093 } 00094 00095 void BrickingRegionManager::removeBricksFromVector(BrickingRegion* region) { 00096 std::vector<Brick*> bricks = region->getBricks(); 00097 00098 for (size_t i=0; i<bricks.size(); i++) { 00099 Brick* currentBrick = bricks.at(i); 00100 00101 std::vector<Brick*>::iterator finder = find(bricksWithoutRegion_.begin(), 00102 bricksWithoutRegion_.end(), currentBrick); 00103 00104 if (finder != bricksWithoutRegion_.end() ) { 00105 bricksWithoutRegion_.erase(finder); 00106 } 00107 } 00108 } 00109 00110 std::vector<Brick*> BrickingRegionManager::getBricksWithoutRegion() { 00111 return bricksWithoutRegion_; 00112 } 00113 00114 00115 00116 } 00117