dfff7d7079c8a75a2398ce6d83f3e45f299fdce0
[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 toggleLayer(unsigned index, bool iDisplay);
98   void setModified(unsigned index, bool iMod);
99   void resetModified(bool iMod=false);
100   void updateCausalStyleModules(unsigned index);
101   void displayDensityCurves(int x, int y);
102  
103   
104   ViewEdge * SelectViewEdge(real x, real y);
105   FEdge * SelectFEdge(real x, real y);
106   NodeGroup* BuildRep(vector<ViewEdge*>::iterator vedges_begin, 
107                       vector<ViewEdge*>::iterator vedges_end) ;
108   
109   NodeGroup* debugNode() {return _DebugNode;}
110   AppView * view() {return _pView;}
111   NodeGroup* debugScene() {return _DebugNode;}
112   Grid& grid() {return _Grid;}
113   
114   void toggleVisibilityAlgo();
115
116   void setQuantitativeInvisibility(bool iBool); // if true, we compute quantitativeInvisibility
117   bool getQuantitativeInvisibility() const;
118
119   void setComputeRidgesAndValleysFlag(bool b);
120   bool getComputeRidgesAndValleysFlag() const ;
121   void setComputeSuggestiveContoursFlag(bool b);
122   bool getComputeSuggestiveContoursFlag() const ;
123   void setComputeMaterialBoundariesFlag(bool b);
124   bool getComputeMaterialBoundariesFlag() const ;
125
126   void setComputeSteerableViewMapFlag(bool iBool);
127   bool getComputeSteerableViewMapFlag() const;
128   void setCreaseAngle(real angle){_creaseAngle=angle;}
129   real getCreaseAngle() const {return _creaseAngle;}
130   void setSphereRadius(real s){_sphereRadius=s;}
131   real getSphereRadius() const {return _sphereRadius;}
132   void setSuggestiveContourKrDerivativeEpsilon(real dkr){_suggestiveContourKrDerivativeEpsilon=dkr;}
133   real getSuggestiveContourKrDerivativeEpsilon() const {return _suggestiveContourKrDerivativeEpsilon;}
134
135   void          setModelsDir(const string& dir);
136   string        getModelsDir() const;
137   void          setModulesDir(const string& dir);
138   string        getModulesDir() const;
139   void          setHelpIndex(const string& dir);
140   string        getHelpIndex() const;
141   void          setBrowserCmd(const string& cmd);
142   string        getBrowserCmd() const;
143
144   void resetInterpreter();
145
146 public:
147         // Viewmap data structure
148         ViewMap * _ViewMap;
149
150         // Canvas
151   AppCanvas *_Canvas;
152
153 private:
154
155   // Main Window:
156   //AppMainWindow *_pMainWindow;
157
158   // List of models currently loaded
159   vector<string> _ListOfModels;
160
161   // Current directories
162   //ConfigIO* _current_dirs;
163
164
165
166   //View
167   // 3D
168   AppView *_pView;
169   
170   // 2D
171   //Viewer2DWindow *_pView2DWindow;
172   //Viewer2D *_pView2D;
173   
174   //Model
175   // Drawing Structure
176   NodeGroup *_RootNode;
177
178   // Winged-Edge structure
179   WingedEdge* _winged_edge;
180
181   // Silhouette structure:
182   //std::vector<SShape*> _SShapes;
183   //NodeGroup *_SRoot;
184   
185   // Silhouette
186   NodeGroup *_SilhouetteNode;
187   NodeGroup *_ProjectedSilhouette;
188   NodeGroup *_VisibleProjectedSilhouette;
189   
190   // more Debug info
191   NodeGroup *_DebugNode;
192
193   // debug
194   //  NodeUser<ViewMap> *_ViewMapNode; // FIXME
195
196   // Chronometer:
197   Chronometer _Chrono;
198
199         // Progress Bar
200   ProgressBar *_ProgressBar;
201
202   // edges tesselation nature
203   int _edgeTesselationNature;
204
205   FastGrid _Grid;
206   //HashGrid _Grid;
207   
208   unsigned int _SceneNumFaces;
209   real _minEdgeSize;
210   real _EPSILON;
211   real _bboxDiag;
212
213   int _render_count;
214
215   //AppStyleWindow *_pStyleWindow;
216   //AppOptionsWindow *_pOptionsWindow;
217   //AppDensityCurvesWindow *_pDensityCurvesWindow;
218
219   ViewMapBuilder::visibility_algo       _VisibilityAlgo;
220   
221   // Script Interpreter
222   Interpreter* _inter;
223
224   string        _help_index;
225   string        _browser_cmd;
226
227   bool _EnableQI;
228   bool _ComputeRidges;
229   bool _ComputeSuggestive;
230   bool _ComputeMaterialBoundaries;
231   real _creaseAngle;
232   real _sphereRadius;
233   real _suggestiveContourKrDerivativeEpsilon;
234
235   bool _ComputeSteerableViewMap;
236
237   FEdgeXDetector edgeDetector;
238 };
239
240 extern Controller       *g_pController;
241
242 #endif // CONTROLLER_H