]> git.treefish.org Git - phys/latlib.git/blob - culooks.cpp
...
[phys/latlib.git] / culooks.cpp
1 #include "culooks.h"
2
3 #include <vector>
4
5 #include <iostream>
6 #include <math.h>
7
8 vector< pair<int,culooks::window*> > culooks::Windows;
9 pthread_t culooks::glThreadId;
10 culooks::comarg culooks::comArg;
11
12 int culooks::windowid = 0;
13
14 using namespace std;
15
16 culooks::culooks (const char* name, const int& xcubes, const int& ycubes, const int& l, int *argc, char **argv)
17 {
18   window *Win = new window;
19   int winsize[2];
20
21   Win->layout[0] = xcubes;
22   Win->layout[1] = ycubes;
23   Win->aspect = (double)xcubes/ycubes;
24   for (int icube=0; icube<xcubes*ycubes; icube++) {
25     cube newCube(l);
26     Win->cubes.push_back(newCube);
27   }
28
29   if( Win->layout[0] >= Win->layout[1] ) {
30     winsize[0] = 640;
31     winsize[1] = (640.0/Win->layout[0])*Win->layout[1];
32   }
33   else {
34     winsize[1] = 640;
35     winsize[0] = (640.0/Win->layout[1])*Win->layout[0];
36   }
37
38   Win->w = winsize[0];
39   Win->h = winsize[1];
40
41   Win->name = name;
42
43   Win->initialized = false;
44
45   //Win->linewidth = 1;
46
47   Windows.push_back( pair<int,culooks::window*>(0, Win) );
48
49   if (windowid == 0) {
50     comArg.argc = argc;
51     comArg.argv = argv;
52     pthread_create(&glThreadId, 0, &drawing::glutThread, &comArg);
53   }
54   mywid = windowid;
55   windowid++;
56 }
57
58 void culooks::setLink (const int& cubeid, const int& posdir,
59                        const float& red, const float& green, const float& blue, const float& alpha)
60 {
61   Windows[mywid].second->cubes[cubeid].setLink(posdir, red, green, blue, alpha);
62 }
63
64 void culooks::setPlaq (const int& cubeid, const int& posdir,
65                        const float& red, const float& green, const float& blue, const float& alpha)
66 {
67   Windows[mywid].second->cubes[cubeid].setPlaq(posdir, red, green, blue, alpha);
68 }
69
70 void culooks::swapBuffers () {
71   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++) {
72     Windows[mywid].second->cubes[icube].swapLinkBuffer();
73     Windows[mywid].second->cubes[icube].swapPlaqBuffer();
74   }
75   Windows[mywid].second->redisplay = true;
76 }
77
78 void culooks::hidePlaqs (const int& cubeid) {
79   Windows[mywid].second->cubes[cubeid].hidePlaqs();
80 }
81
82 void culooks::hidePlaqs () {
83   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
84     Windows[mywid].second->cubes[icube].hidePlaqs();
85 }
86
87 void culooks::hideLinks (const int& cubeid) {
88   Windows[mywid].second->cubes[cubeid].hideLinks();
89 }
90
91 void culooks::hideLinks () {
92   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
93     Windows[mywid].second->cubes[icube].hideLinks();
94 }
95
96 void culooks::setBgColor(const float& red, const float& green, const float& blue, const float& alpha)
97 {
98   Windows[mywid].second->bgcolor[0] = red;
99   Windows[mywid].second->bgcolor[1] = green;
100   Windows[mywid].second->bgcolor[2] = blue;
101   Windows[mywid].second->bgcolor[3] = alpha;
102 }
103
104 void culooks::setWireColor(const float& r, const float& g, const float& b, const float& a)
105 {
106   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
107     Windows[mywid].second->cubes[icube].setWireColor(r, g, b, a);
108 }
109
110 void culooks::setFrameWidth(float width)
111 {
112   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
113     Windows[mywid].second->cubes[icube].setFrameWidth(width);
114 }
115
116 void culooks::setLinkWidth(float width)
117 {
118   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
119     Windows[mywid].second->cubes[icube].setLinkWidth(width);
120 }