00001
00002
00003
00004
00005
00006 #ifndef SCENECONTROL_H
00007 #define SCENECONTROL_H
00008
00009 #include <iostream>
00010
00011 #include "gui/ViewPort.h"
00012 #include <vector>
00013
00014 namespace gui {
00015
00016 class Scene;
00017 class Draw2D;
00018
00019 class SubMenu;
00020
00021
00022
00023 class SceneControl
00024
00025
00026
00027
00028
00029
00030 {
00031 public:
00032
00033
00034 virtual ~SceneControl();
00035
00036 GraphicsVector & reference_point(){return m_reference_point;}
00037
00038
00039 void draw();
00040
00041
00042 virtual void redisplay(){draw();}
00043
00044
00045
00046 void redisplay(Draw2D* temp);
00047
00048
00049
00050 void displaycurrent(int hl);
00051
00052
00053 void select_view_number(int number);
00054
00055
00056 void set_origin(const GraphicsVector& neworig){m_origin = neworig;}
00057
00058
00059 void set_single(int value);
00060
00061
00062 void reset_view();
00063
00064
00065 ViewPort& view();
00066
00067
00068 Scene& scene()const;
00069
00070
00071 Scene& scene_2d()const;
00072
00073
00074
00075
00076
00077 void move_by(float,float);
00078 void move_left(float x=0.1);
00079 void move_right(float x=0.1);
00080 void move_up(float x=0.1);
00081 void move_down(float x=0.1);
00082
00083
00084 void zoom_in(float x = 0.25);
00085 void zoom_out(float x= 0.25);
00086 void set_zoom(float z = 1.);
00087
00088
00089 void move_in(float=0.1);
00090 void move_out(float=0.1);
00091 void set_view_distance(float=0);
00092
00093
00094 void set_detail(float d=0.);
00095
00096
00097 void setViewPort (float xmin, float ymin, float xmax, float ymax);
00098
00099
00100 void rotate_x(float);
00101 void rotate_y(float);
00102 void rotate_z(float);
00103 void rotate_euler(const float*);
00104 void rotate_euler(float,float,float);
00105
00106
00107 int do_command(const char *);
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 virtual void print_commands(std::ostream& );
00118
00119
00120 void set_menu(const SubMenu* m){m_menu = m;}
00121 const SubMenu* menu()const{return m_menu;}
00122
00123 protected:
00124 SceneControl(ViewPort*, float size=100 , int initial_view=1);
00125
00126
00127 void resize(int x, int y);
00128
00129
00130
00131 private:
00132
00133 Scene* m_scene;
00134 Scene* m_2d_scene;
00135
00136
00137 GraphicsVector m_origin;
00138 GraphicsVector m_reference_point;
00139
00140 int m_max_view;
00141 int m_single_view;
00142 int m_selected_view;
00143
00144
00145 std::vector<ViewPort*> m_views;
00146 ViewPort* m_current_view;
00147 ViewPort* m_2d_view;
00148
00149
00150 float m_detail;
00151 int m_axis;
00152 bool m_enabled;
00153
00154 const SubMenu* m_menu;
00155
00156
00157 };
00158
00159 inline ViewPort&
00160 SceneControl::view(){
00161 return *m_current_view;
00162 }
00163 inline Scene& SceneControl::scene()const{return *m_scene;}
00164 inline Scene& SceneControl::scene_2d()const{return *m_2d_scene;}
00165
00166 }
00167
00168 #endif
00169