Blame view

legacy/rts_glOBJ.h 2.41 KB
f1402849   dmayerich   renewed commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  #ifndef RTS_GLOBJ_H

  #define RTS_GLOBJ_H

  

  #include "objJedi.h"

  #include <windows.h>

  #include <gl/gl.h>

  #include <gl/glu.h>

  #include <list>

  

  using namespace std;

  

  #define BUFSIZE 20000

  

  #define OBJ_NOT_SELECTED		0x0000

  #define OBJ_SELECTED			0x0001

  #define OBJ_SELECTED_PRIMITIVES	0x0002

  

  #define RTS_GLOBJ_SINGLE_NEW_SELECTION	0

  #define RTS_GLOBJ_SINGLE_ADD_SELECTION	1

  #define RTS_GLOBJ_SINGLE_SUB_SELECTION  2

  

  #define RTS_GLOBJ_MULTI_NEW_SELECTION	3

  #define RTS_GLOBJ_MULTI_ADD_SELECTION	4

  #define RTS_GLOBJ_MULTI_SUB_SELECTION	5

  

  class rts_glOBJ : public rtsOBJ

  {

  private:

  	int is_selected;			//the object, or part of the object, is selected

  	list<unsigned int> selected_primitives;

  

  	//rendering variables

  	GLint dl;

  	bool dl_valid;				//true if the display list is valid

  	

  	OBJint f_CreateDisplayList();

  

  	void f_RenderPointList(unsigned int pointlist);

  	void f_RenderLineStrip(unsigned int line);

  	void f_RenderFace(unsigned int face);

  

  	OBJint f_RenderTexCoord(vertex_texture &texcoord);

  	OBJint f_RenderNormal(vertex_normal &normal);

  	OBJint f_RenderVertex(vertex_position &v);

  	OBJint f_RenderPrimitive(unsigned int id);

  

  	void SelectMultipleHits(GLuint* buffer, unsigned int num_hits);

  	void SelectClosestHit(GLuint* buffer, unsigned int num_hits);

  	void SelectPrimitive(unsigned int primitive);

  	void UnselectMultipleHits(GLuint* buffer, unsigned int num_hits);

  	void UnselectClosestHit(GLuint* buffer, unsigned int num_hits);

  	void UnselectPrimitive(unsigned int primitive);

  	

  public:

  	//constructors

  	//basic

  	rts_glOBJ()

  	{

  		is_selected = false;

  		dl_valid = false;

  		cout<<selected_primitives.size()<<endl;

  	}

  	//assignment

  	rts_glOBJ& operator=(const rtsOBJ& obj)

  	{

  		CopyOBJ(obj);

  		is_selected = false;

  		dl_valid = false;

  		return *this;

  	}

  	//copy

  	rts_glOBJ(const rtsOBJ& obj)

  	{

  		CopyOBJ(obj);

  		is_selected = false;

  		dl_valid = false;

  		//return *this;

  	}

  

  	OBJint glRender();

  	OBJint glRenderSelected();

  	void Invalidate(){dl_valid = false;}			//invalidate the display list

  

  	//return true of the object is currently selected

  	int selected(){return is_selected;};

  	//unsigned int getSelected(unsigned int i = 0){return selected_primitives[i];}

  	void Pick(unsigned int x, unsigned int y, unsigned int size_x, unsigned int size_y, unsigned int picktype = RTS_GLOBJ_SINGLE_NEW_SELECTION);

  	rts_glOBJ GetSelected();

  	void ExpandSelection();

  	

  };

  

  #endif