]> 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
11 int culooks::windowid = 0;
12
13 using namespace std;
14
15 culooks::culooks (const char* name, const int& xcubes, const int& ycubes, const int& l, int *argc, char **argv)
16 {
17   window *Win = new window;
18   int winsize[2];
19
20   Win->layout[0] = xcubes;
21   Win->layout[1] = ycubes;
22   Win->aspect = (double)xcubes/ycubes;
23   for (int icube=0; icube<xcubes*ycubes; icube++) {
24     cube newCube(l);
25     Win->cubes.push_back(newCube);
26   }
27
28   if( Win->layout[0] >= Win->layout[1] ) {
29     winsize[0] = 640;
30     winsize[1] = (640.0/Win->layout[0])*Win->layout[1];
31   }
32   else {
33     winsize[1] = 640;
34     winsize[0] = (640.0/Win->layout[1])*Win->layout[0];
35   }
36
37   Win->w = winsize[0];
38   Win->h = winsize[1];
39
40   Win->name = name;
41
42   Win->initialized = false;
43
44   Windows.push_back( pair<int,culooks::window*>(0, Win) );
45   
46   if (windowid == 0) {
47     comarg comArg;
48     comArg.argc = argc;
49     comArg.argv = argv;
50     pthread_create(&glThreadId, 0, &drawing::glutThread, &comArg);
51   }
52
53   mywid = windowid;
54   windowid++;
55 }
56
57 void culooks::setLink (const int& cubeid, const int& posdir,
58                        const float& red, const float& green, const float& blue, const float& alpha)
59 {
60   Windows[mywid].second->cubes[cubeid].setLink(posdir, red, green, blue, alpha);
61 }
62
63 void culooks::setPlaq (const int& cubeid, const int& posdir,
64                        const float& red, const float& green, const float& blue, const float& alpha)
65 {
66   Windows[mywid].second->cubes[cubeid].setPlaq(posdir, red, green, blue, alpha);
67 }
68
69 void culooks::swapBuffers () {
70   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++) {
71     Windows[mywid].second->cubes[icube].swapLinkBuffer();
72     Windows[mywid].second->cubes[icube].swapPlaqBuffer();
73   }
74   Windows[mywid].second->redisplay = true;
75 }
76
77 void culooks::hidePlaqs (const int& cubeid) {
78   Windows[mywid].second->cubes[cubeid].hidePlaqs();
79 }
80
81 void culooks::hidePlaqs () {
82   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
83     Windows[mywid].second->cubes[icube].hidePlaqs();
84 }
85
86 void culooks::hideLinks (const int& cubeid) {
87   Windows[mywid].second->cubes[cubeid].hideLinks();
88 }
89
90 void culooks::hideLinks () {
91   for (int icube=0; icube<Windows[mywid].second->cubes.size(); icube++)
92     Windows[mywid].second->cubes[icube].hideLinks();
93 }
94
95 void culooks::setBgColor(const float& red, const float& green, const float& blue, const float& alpha)
96 {
97   Windows[mywid].second->bgcolor[0] = red;
98   Windows[mywid].second->bgcolor[1] = green;
99   Windows[mywid].second->bgcolor[2] = blue;
100   Windows[mywid].second->bgcolor[3] = alpha;
101 }