1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
17 #pragma once
18 
19 /** \file
20  * \ingroup freestyle
21  * \brief Class to define a cell grid surrounding the projected image of a scene
22  */
23 
24 #include "GridDensityProvider.h"
25 
26 namespace Freestyle {
27 
28 class Pow23GridDensityProvider : public GridDensityProvider {
29   // Disallow copying and assignment
30   Pow23GridDensityProvider(const Pow23GridDensityProvider &other);
31   Pow23GridDensityProvider &operator=(const Pow23GridDensityProvider &other);
32 
33  public:
34   Pow23GridDensityProvider(OccluderSource &source, const real proscenium[4], unsigned numFaces);
35   Pow23GridDensityProvider(OccluderSource &source,
36                            const BBox<Vec3r> &bbox,
37                            const GridHelpers::Transform &transform,
38                            unsigned numFaces);
39   Pow23GridDensityProvider(OccluderSource &source, unsigned numFaces);
40   virtual ~Pow23GridDensityProvider();
41 
42  protected:
43   unsigned numFaces;
44 
45  private:
46   void initialize(const real proscenium[4]);
47 };
48 
49 class Pow23GridDensityProviderFactory : public GridDensityProviderFactory {
50  public:
51   Pow23GridDensityProviderFactory(unsigned numFaces);
52   ~Pow23GridDensityProviderFactory();
53 
54   AutoPtr<GridDensityProvider> newGridDensityProvider(OccluderSource &source,
55                                                       const real proscenium[4]);
56   AutoPtr<GridDensityProvider> newGridDensityProvider(OccluderSource &source,
57                                                       const BBox<Vec3r> &bbox,
58                                                       const GridHelpers::Transform &transform);
59   AutoPtr<GridDensityProvider> newGridDensityProvider(OccluderSource &source);
60 
61  protected:
62   unsigned numFaces;
63 };
64 
65 } /* namespace Freestyle */
66