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