diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-01-02 05:55:30 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-01-02 05:55:30 +0400 |
commit | 699da2fb0d9012cef5e45cc1b547a01fd92dbc1c (patch) | |
tree | eb6e3de1f90387af1a2628bbc79d51327e3ac248 /source/blender/freestyle/intern/view_map/BoxGrid.cpp | |
parent | 520ab93465d8056bf6d4a4115743daaee4c2fd66 (diff) |
Yet another big style clean-up patch by Bastien Montagne, thanks a lot!
Now the code style is acceptable for the merge now, according to Bastien.
Thanks again Bastien for having this done! :)
Diffstat (limited to 'source/blender/freestyle/intern/view_map/BoxGrid.cpp')
-rw-r--r-- | source/blender/freestyle/intern/view_map/BoxGrid.cpp | 169 |
1 files changed, 93 insertions, 76 deletions
diff --git a/source/blender/freestyle/intern/view_map/BoxGrid.cpp b/source/blender/freestyle/intern/view_map/BoxGrid.cpp index 757cf7b6559..6b2804b17ce 100644 --- a/source/blender/freestyle/intern/view_map/BoxGrid.cpp +++ b/source/blender/freestyle/intern/view_map/BoxGrid.cpp @@ -1,36 +1,41 @@ -// -// Filename : BoxGrid.cpp -// Author(s) : Alexander Beels -// Purpose : Class to define a cell grid surrounding -// the projected image of a scene -// Date of creation : 2011-1-29 -// -/////////////////////////////////////////////////////////////////////////////// - -// -// Copyright (C) : Please refer to the COPYRIGHT file distributed -// with this source distribution. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -/////////////////////////////////////////////////////////////////////////////// +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2010 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/freestyle/intern/view_map/BoxGrid.cpp + * \ingroup freestyle + * \brief Class to define a cell grid surrounding the projected image of a scene + * \author Alexander Beels + * \date 2011-1-29 + */ -#include "BoxGrid.h" - -#include <stdexcept> #include <algorithm> +#include <stdexcept> + +#include "BoxGrid.h" using namespace std; @@ -42,11 +47,12 @@ using namespace std; // Cell ///////// -BoxGrid::Cell::Cell () {} +BoxGrid::Cell::Cell() {} -BoxGrid::Cell::~Cell () {} +BoxGrid::Cell::~Cell() {} -void BoxGrid::Cell::setDimensions(real x, real y, real sizeX, real sizeY) { +void BoxGrid::Cell::setDimensions(real x, real y, real sizeX, real sizeY) +{ const real epsilon = 1.0e-06; boundary[0] = x - epsilon; boundary[1] = x + sizeX + epsilon; @@ -54,11 +60,13 @@ void BoxGrid::Cell::setDimensions(real x, real y, real sizeX, real sizeY) { boundary[3] = y + sizeY + epsilon; } -bool BoxGrid::Cell::compareOccludersByShallowestPoint (const BoxGrid::OccluderData* a, const BoxGrid::OccluderData* b) { +bool BoxGrid::Cell::compareOccludersByShallowestPoint(const BoxGrid::OccluderData *a, const BoxGrid::OccluderData *b) +{ return a->shallowest < b->shallowest; } -void BoxGrid::Cell::indexPolygons() { +void BoxGrid::Cell::indexPolygons() +{ // Sort occluders by their shallowest points. sort(faces.begin(), faces.end(), compareOccludersByShallowestPoint); } @@ -66,47 +74,49 @@ void BoxGrid::Cell::indexPolygons() { // Iterator ////////////////// -BoxGrid::Iterator::Iterator (BoxGrid& grid, Vec3r& center, real epsilon) - : _target(grid.transform(center)), - _foundOccludee(false) +BoxGrid::Iterator::Iterator (BoxGrid& grid, Vec3r& center, real epsilon) +: _target(grid.transform(center)), _foundOccludee(false) { // Find target cell _cell = grid.findCell(_target); - #if boxgridlogging == 1 - cout << "Searching for occluders of edge centered at " << _target << " in cell [" - << _cell->boundary[0] << ", " << _cell->boundary[1] << ", " << _cell->boundary[2] - << ", " << _cell->boundary[3] << "] (" << _cell->faces.size() << " occluders)" << endl; + #if BOX_GRID_LOGGING + cout << "Searching for occluders of edge centered at " << _target << " in cell [" + << _cell->boundary[0] << ", " << _cell->boundary[1] << ", " << _cell->boundary[2] + << ", " << _cell->boundary[3] << "] (" << _cell->faces.size() << " occluders)" << endl; #endif // Set iterator _current = _cell->faces.begin(); } -BoxGrid::Iterator::~Iterator () {} +BoxGrid::Iterator::~Iterator() {} // BoxGrid ///////////////// -BoxGrid::BoxGrid(OccluderSource& source, GridDensityProvider& density, ViewMap *viewMap, Vec3r& viewpoint, bool enableQI) - : _viewpoint(viewpoint), - _enableQI(enableQI) +BoxGrid::BoxGrid(OccluderSource& source, GridDensityProvider& density, ViewMap *viewMap, Vec3r& viewpoint, + bool enableQI) +: _viewpoint(viewpoint), _enableQI(enableQI) { - cout << "Generate Cell structure" << endl; // Generate Cell structure + cout << "Generate Cell structure" << endl; assignCells(source, density, viewMap); - cout << "Distribute occluders" << endl; + // Fill Cells + cout << "Distribute occluders" << endl; distributePolygons(source); - cout << "Reorganize cells" << endl; + // Reorganize Cells + cout << "Reorganize cells" << endl; reorganizeCells(); + cout << "Ready to use BoxGrid" << endl; } -BoxGrid::~BoxGrid () { -} +BoxGrid::~BoxGrid() {} -void BoxGrid::assignCells (OccluderSource& source, GridDensityProvider& density, ViewMap *viewMap) { +void BoxGrid::assignCells (OccluderSource& source, GridDensityProvider& density, ViewMap *viewMap) +{ _cellSize = density.cellSize(); _cellsX = density.cellsX(); _cellsY = density.cellsY(); @@ -115,20 +125,19 @@ void BoxGrid::assignCells (OccluderSource& source, GridDensityProvider& density, // Now allocate the cell table and fill it with default (empty) cells _cells.resize(_cellsX * _cellsY); - for ( cellContainer::iterator i = _cells.begin(), end = _cells.end(); i != end; ++i ) { + for (cellContainer::iterator i = _cells.begin(), end = _cells.end(); i != end; ++i) { (*i) = NULL; } // Identify cells that will be used, and set the dimensions for each ViewMap::fedges_container& fedges = viewMap->FEdges(); - for (ViewMap::fedges_container::iterator f = fedges.begin(), fend = fedges.end(); f != fend; ++f ) { - if ( (*f)->isInImage() ) { + for (ViewMap::fedges_container::iterator f = fedges.begin(), fend = fedges.end(); f != fend; ++f) { + if ((*f)->isInImage()) { Vec3r point = transform((*f)->center3d()); - unsigned i, j; + unsigned int i, j; getCellCoordinates(point, i, j); - if ( _cells[i * _cellsY + j] == NULL ) { + if (_cells[i * _cellsY + j] == NULL) { // This is an uninitialized cell - real x, y, width, height; x = _cellOrigin[0] + _cellSize * i; @@ -145,19 +154,21 @@ void BoxGrid::assignCells (OccluderSource& source, GridDensityProvider& density, } } -void BoxGrid::distributePolygons (OccluderSource& source) { +void BoxGrid::distributePolygons(OccluderSource& source) +{ unsigned long nFaces = 0; unsigned long nKeptFaces = 0; - for ( source.begin(); source.isValid(); source.next() ) { - OccluderData* occluder = NULL; + for (source.begin(); source.isValid(); source.next()) { + OccluderData *occluder = NULL; try { - if ( insertOccluder(source, occluder) ) { + if (insertOccluder(source, occluder)) { _faces.push_back(occluder); ++nKeptFaces; } - } catch (...) { + } + catch (...) { // If an exception was thrown, _faces.push_back() cannot have succeeded. // occluder is not owned by anyone, and must be deleted. // If the exception was thrown before or during new OccluderData(), then @@ -170,41 +181,47 @@ void BoxGrid::distributePolygons (OccluderSource& source) { cout << "Distributed " << nFaces << " occluders. Retained " << nKeptFaces << "." << endl; } -void BoxGrid::reorganizeCells () { +void BoxGrid::reorganizeCells() +{ // Sort the occluders by shallowest point - for ( vector<Cell*>::iterator i = _cells.begin(), end = _cells.end(); i != end; ++i ) { - if ( *i != NULL ) { + for (vector<Cell*>::iterator i = _cells.begin(), end = _cells.end(); i != end; ++i) { + if (*i != NULL) { (*i)->indexPolygons(); } } } -void BoxGrid::getCellCoordinates(const Vec3r& point, unsigned& x, unsigned& y) { +void BoxGrid::getCellCoordinates(const Vec3r& point, unsigned& x, unsigned& y) +{ x = min(_cellsX - 1, (unsigned) floor (max((double) 0.0f, point[0] - _cellOrigin[0]) / _cellSize)); y = min(_cellsY - 1, (unsigned) floor (max((double) 0.0f, point[1] - _cellOrigin[1]) / _cellSize)); } -BoxGrid::Cell* BoxGrid::findCell(const Vec3r& point) { - unsigned x, y; +BoxGrid::Cell* BoxGrid::findCell(const Vec3r& point) +{ + unsigned int x, y; getCellCoordinates(point, x, y); return _cells[x * _cellsY + y]; } -bool BoxGrid::orthographicProjection () const { +bool BoxGrid::orthographicProjection() const +{ return true; } -const Vec3r& BoxGrid::viewpoint() const { +const Vec3r& BoxGrid::viewpoint() const +{ return _viewpoint; } -bool BoxGrid::enableQI() const { +bool BoxGrid::enableQI() const +{ return _enableQI; } -BoxGrid::Transform::Transform () : GridHelpers::Transform() {} +BoxGrid::Transform::Transform() : GridHelpers::Transform() {} -Vec3r BoxGrid::Transform::operator() (const Vec3r& point) const { +Vec3r BoxGrid::Transform::operator()(const Vec3r& point) const +{ return Vec3r(point[0], point[1], -point[2]); } - |