A few attempts to reduce the amount of memory consumption in Freestyle.
[blender-staging.git] / source / blender / freestyle / intern / application / Controller.h
1 //
2 //  Filename         : Controller.h
3 //  Author           : Stephane Grabli
4 //  Purpose          : The spinal tap of the system
5 //  Date of creation : 01/07/2002
6 //
7 ///////////////////////////////////////////////////////////////////////////////
8
9
10 //
11 //  Copyright (C) : Please refer to the COPYRIGHT file distributed 
12 //   with this source distribution. 
13 //
14 //  This program is free software; you can redistribute it and/or
15 //  modify it under the terms of the GNU General Public License
16 //  as published by the Free Software Foundation; either version 2
17 //  of the License, or (at your option) any later version.
18 //
19 //  This program is distributed in the hope that it will be useful,
20 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
21 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 //  GNU General Public License for more details.
23 //
24 //  You should have received a copy of the GNU General Public License
25 //  along with this program; if not, write to the Free Software
26 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
27 //
28 ///////////////////////////////////////////////////////////////////////////////
29
30 #ifndef  CONTROLLER_H
31 # define CONTROLLER_H
32
33 # include "../view_map/ViewMapBuilder.h"
34 # include <string>
35 //# include "ConfigIO.h"
36 # include "../geometry/FastGrid.h"
37 # include "../geometry/HashGrid.h"
38 # include "../system/TimeUtils.h"
39 # include "../system/ProgressBar.h"
40 # include "../system/Precision.h"
41 # include "../system/Interpreter.h"
42 # include "../view_map/FEdgeXDetector.h"
43
44 class AppView;
45 class NodeGroup;
46 class WShape;
47 class SShape;
48 class ViewMap;
49 class ViewEdge;
50 class AppCanvas;
51 class InteractiveShader;
52 class Shader;
53 class StrokeRenderer;
54
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58
59         #include "render_types.h"
60         #include "DNA_scene_types.h"
61
62 #ifdef __cplusplus
63 }
64 #endif
65
66 class Controller
67 {
68 public:
69   Controller() ;
70   ~Controller() ;
71   
72   void setView(AppView *iView);
73   void setPassDiffuse(float *buf, int width, int height);
74   void setPassZ(float *buf, int width, int height);
75   void setContext(bContext *C);
76
77   //soc
78         void init_options();
79
80   int  LoadMesh( Render *re, SceneRenderLayer* srl );
81   int  Load3DSFile(const char *iFileName);
82   void CloseFile();
83   void ComputeViewMap();
84   void ComputeSteerableViewMap();
85   void saveSteerableViewMapImages();
86   void toggleEdgeTesselationNature(Nature::EdgeNature iNature);
87   void DrawStrokes();
88   void ResetRenderCount();
89   Render* RenderStrokes(Render *re);
90   void SwapStyleModules(unsigned i1, unsigned i2);
91   void InsertStyleModule(unsigned index, const char *iFileName);
92   void InsertStyleModule(unsigned index, const char *iName, struct Text *iText);
93   void AddStyleModule(const char *iFileName);
94   void RemoveStyleModule(unsigned index);
95   void ReloadStyleModule(unsigned index, const char * iFileName);
96   void Clear();
97   void ClearRootNode();
98   void DeleteWingedEdge();
99   void DeleteViewMap();
100   void toggleLayer(unsigned index, bool iDisplay);
101   void setModified(unsigned index, bool iMod);
102   void resetModified(bool iMod=false);
103   void updateCausalStyleModules(unsigned index);
104   void displayDensityCurves(int x, int y);
105  
106   
107   ViewEdge * SelectViewEdge(real x, real y);
108   FEdge * SelectFEdge(real x, real y);
109   NodeGroup* BuildRep(vector<ViewEdge*>::iterator vedges_begin, 
110                       vector<ViewEdge*>::iterator vedges_end) ;
111   
112   //NodeGroup* debugNode() {return _DebugNode;}
113   //AppView * view() {return _pView;}
114   //NodeGroup* debugScene() {return _DebugNode;}
115   //Grid& grid() {return _Grid;}
116   
117   void toggleVisibilityAlgo();
118
119   void setQuantitativeInvisibility(bool iBool); // if true, we compute quantitativeInvisibility
120   bool getQuantitativeInvisibility() const;
121
122   void setComputeRidgesAndValleysFlag(bool b);
123   bool getComputeRidgesAndValleysFlag() const ;
124   void setComputeSuggestiveContoursFlag(bool b);
125   bool getComputeSuggestiveContoursFlag() const ;
126   void setComputeMaterialBoundariesFlag(bool b);
127   bool getComputeMaterialBoundariesFlag() const ;
128
129   void setComputeSteerableViewMapFlag(bool iBool);
130   bool getComputeSteerableViewMapFlag() const;
131   void setCreaseAngle(real angle){_creaseAngle=angle;}
132   real getCreaseAngle() const {return _creaseAngle;}
133   void setSphereRadius(real s){_sphereRadius=s;}
134   real getSphereRadius() const {return _sphereRadius;}
135   void setSuggestiveContourKrDerivativeEpsilon(real dkr){_suggestiveContourKrDerivativeEpsilon=dkr;}
136   real getSuggestiveContourKrDerivativeEpsilon() const {return _suggestiveContourKrDerivativeEpsilon;}
137
138   void          setModelsDir(const string& dir);
139   string        getModelsDir() const;
140   void          setModulesDir(const string& dir);
141   string        getModulesDir() const;
142   void          setHelpIndex(const string& dir);
143   string        getHelpIndex() const;
144   void          setBrowserCmd(const string& cmd);
145   string        getBrowserCmd() const;
146
147   void resetInterpreter();
148
149 public:
150         // Viewmap data structure
151         ViewMap * _ViewMap;
152
153         // Canvas
154   AppCanvas *_Canvas;
155
156 private:
157
158   // Main Window:
159   //AppMainWindow *_pMainWindow;
160
161   // List of models currently loaded
162   vector<string> _ListOfModels;
163
164   // Current directories
165   //ConfigIO* _current_dirs;
166
167
168
169   //View
170   // 3D
171   AppView *_pView;
172   
173   // 2D
174   //Viewer2DWindow *_pView2DWindow;
175   //Viewer2D *_pView2D;
176   
177   //Model
178   // Drawing Structure
179   NodeGroup *_RootNode;
180
181   // Winged-Edge structure
182   WingedEdge* _winged_edge;
183
184   // Silhouette structure:
185   //std::vector<SShape*> _SShapes;
186   //NodeGroup *_SRoot;
187   
188   // Silhouette
189   NodeGroup *_SilhouetteNode;
190   NodeGroup *_ProjectedSilhouette;
191   NodeGroup *_VisibleProjectedSilhouette;
192   
193   // more Debug info
194   NodeGroup *_DebugNode;
195
196   // debug
197   //  NodeUser<ViewMap> *_ViewMapNode; // FIXME
198
199   // Chronometer:
200   Chronometer _Chrono;
201
202         // Progress Bar
203   ProgressBar *_ProgressBar;
204
205   // edges tesselation nature
206   int _edgeTesselationNature;
207
208   FastGrid _Grid;
209   //HashGrid _Grid;
210   
211   unsigned int _SceneNumFaces;
212   real _minEdgeSize;
213   real _EPSILON;
214   real _bboxDiag;
215
216   int _render_count;
217
218   //AppStyleWindow *_pStyleWindow;
219   //AppOptionsWindow *_pOptionsWindow;
220   //AppDensityCurvesWindow *_pDensityCurvesWindow;
221
222   ViewMapBuilder::visibility_algo       _VisibilityAlgo;
223   
224   // Script Interpreter
225   Interpreter* _inter;
226
227   string        _help_index;
228   string        _browser_cmd;
229
230   bool _EnableQI;
231   bool _ComputeRidges;
232   bool _ComputeSuggestive;
233   bool _ComputeMaterialBoundaries;
234   real _creaseAngle;
235   real _sphereRadius;
236   real _suggestiveContourKrDerivativeEpsilon;
237
238   bool _ComputeSteerableViewMap;
239
240   FEdgeXDetector edgeDetector;
241 };
242
243 extern Controller       *g_pController;
244
245 #endif // CONTROLLER_H