📄 dataview.hpp
字号:
/* Context : Graphic Display Utility Functions Author : Frank Hoeppner, see also AUTHORS file Description : header of class DataView History : see source file Comment : This file was generated automatically. DO NOT EDIT. Copyright : Copyright (C) 1999-2000 Frank Hoeppner 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*/#ifndef DataView_HEADER#define DataView_HEADER/* configuration include */#ifdef HAVE_CONFIG_H/*//FILETREE_IFDEF HAVE_CONFIG_H*/#include "config.h"/*//FILETREE_ENDIF*/#endif// necessary includes#include <map.h>#ifdef __BORLANDC__#include <strstrea.h>#else#include <strstream.h>#endif#include <iomanip.h>#include "display.hpp"#include "Box.hpp"#include "Tuple.hpp"//#define INLINE inline// global types, constants, definitionsenum ButtonState { ButtonOn,ButtonOff,ButtonPassive };#define DATAVIEW_MENUSPACE 2#define DATAVIEW_TEXTSPACE 2#define DATAVIEW_MENUFRAME 4#define LEFT lowerBound(0)#define TOP lowerBound(1)#define RIGHT upperBound(0)#define BOTTOM upperBound(1)#define DATAVIEW_AXIS_X 0#define DATAVIEW_AXIS_Y 1#define DATAVIEW_AXIS_Z 2#define DATAVIEW_AXIS_T 3#define DATAVIEW_AXIS_AZIMUTH 0#define DATAVIEW_AXIS_ELEVATION 1#define DATAVIEW_AXIS_TWIST 2#define DATAVIEW_AXIS_DISTANCE 3// class definitiontemplate <class DATA>class DataView { public: typedef Tuple<2,int> MenuCoord; typedef Tuple<4,float> DispCoord; typedef Box< MenuCoord > Rectangle; typedef Box< DispCoord > BBox4D; DataView(); virtual ~DataView(); void registrate_button(int,int,int,int,const char*,ButtonState,int); void registrate_button_handler(void (*)(int)); ButtonState& application_button_state(int); void registrate_display_func(void (*f)()); void registrate_time_handler(void (*f)(float)); void registrate_exit_handler(void (*f)()); void display_point(const DATA& d,float r); void display_disc(const DATA& d,float r); void display_ball(const DATA& d,float r); void display_line(const DATA& s,const DATA& f,float r); void display_cylinder(const DATA& s,const DATA& f,float r); void display(int,int,char*); void notify_size(const DATA&); void set_focus(const DATA&); void set_red(const DATA&); void set_green(const DATA&); void set_blue(const DATA&); void reset_bbox(); protected: void statistics(); void mouse_move(int,int); void mouse_click(int,int,int,int); void evaluate_display_menu_click(int b); void display(); static void display_call() { p_DV->display(); } static void mouse_click_call(int b,int s,int x,int y) { p_DV->mouse_click(b,s,x,y); } static void mouse_move_call(int x,int y) { p_DV->mouse_move(x,y); } struct Button { Button() { MenuCoord C; C(0)=C(1)=0; area.include(C); } Button(int x,int y,int dx, int dy, const char* t,ButtonState s,int id) : area( MenuCoord(x,y), MenuCoord(x+dx,y+dy)), title(t), state(s), idno(id) {} Button(const Button& B) : area(B.area), title(B.title), state(B.state), idno(B.idno) {} Rectangle area; const char* title; ButtonState state; int idno; }; typedef map<int, Button, less<int> > ButtonMap; class Menu { public: Menu() {} ~Menu() {} void add(const Button&); int evaluate_click(int, int); void display(int&,int&); ButtonMap m_buttons; Rectangle m_bbox; }; int data_size; bool displayAppMenu; bool displayDispMenu; bool perspectiveView; bool statisticsView; bool estimateBoundBox; int controlMode; int x_mouse_move; int y_mouse_move; int x_mouse_click_down; int y_mouse_click_down; int mouse_button; DispCoord view_coord; DispCoord focus_coord; DispCoord red_coord; DispCoord blue_coord; DispCoord green_coord; DispCoord* cart_coord; DispCoord scalefac; #define DISPLAY_SCALE_OUTPUT_LENGTH 5 char scaletext[4][DISPLAY_SCALE_OUTPUT_LENGTH+1]; int axis[4]; // display indices int cartesian[4]; // cartesian control int rotate[4]; // rotating control int xDispMenu; int yDispMenu; int xAppMenu; int yAppMenu; Menu appMenu; Menu dispMenu; BBox4D boundBox; int sensitivityGrade; float sensitivity; void (*appButtonHandler)(int); void (*appTimeHandler)(float); void (*appDisplayFunc)(); void (*appExitHandler)(); static DataView *p_DV; private: inline void convert_coord(const DATA& ar_DataVector, DispCoord& ar_Coord) { int a; for (a=0;a<3;++a) { if (axis[a]>=0) { ar_Coord(a) = ar_DataVector.operator()(axis[a]); } } } inline void display_point_intern(const DispCoord& arc,float r) { ::display_point ( arc(DATAVIEW_AXIS_X), arc(DATAVIEW_AXIS_Y), arc(DATAVIEW_AXIS_Z), r ); } inline void display_line_intern(const DispCoord& arc1,const DispCoord& arc2,float r) { ::display_line ( arc1(DATAVIEW_AXIS_X), arc1(DATAVIEW_AXIS_Y), arc1(DATAVIEW_AXIS_Z), arc2(DATAVIEW_AXIS_X), arc2(DATAVIEW_AXIS_Y), arc2(DATAVIEW_AXIS_Z), r ); } };// class related functions and definitions/* inline implementation */#endif // DataView_HEADER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -