5 |
6 |
7 | ### BuildStatus:
8 | 
9 |
10 | Iris Web Viewer is an open source experimental online model viewer. It allows you to view 3D Exchange format files through a web browser with out the need for larger packages to be installed on a computer. It runs off of Javascript and WebGL is available at [Iris Web Viewer](https://VirtexEdgeDesign.github.io/Iris-Web-Viewer/) as well as through a Chrome Web Extension:
11 |
12 | [](https://chrome.google.com/webstore/detail/iris-3d-viewer/kfaocdjigbgfjbmbbodglgoomooblail)
13 |
14 |
15 | 
16 |
17 | ## License & Disclaimer
18 |
19 | Iris is released under the [MIT License](https://github.com/VirtexEdgeDesign/Iris-Web-Viewer/blob/master/License.md).
20 |
21 | Note though, that Iris is currently both experimental and in Beta, and therefore naturally has some bugs in it. It's not a perfect system and is therefore only useful for general views and for working out rough ideas. It comes with no warrenty what so ever (refer to license). Any models should be viewed and infomation verfied through a secondary programand before any designs are finalised. That said it's meant for informal viewing of 3D files in non-critical applciations as well as it's open source, so feel free to commit and add to it as you see fit!
22 |
23 | # Features
24 |
25 | ## Import
26 |
27 | Iris can import any of the following model formats. If there's one you don't see then feel free to request it in the 'Issues'.
28 |
29 | - stl (both ASCII and Binary)
30 | - obj (material files not supported yet)
31 |
32 | 
33 |
34 | ## Export
35 |
36 | Iris can can also export to stl files for use in 3D Printing. We currently only support ASCII stl files.
37 |
38 | 
39 |
40 | ## Tree View Breakdown
41 |
42 | The Iris Environment has a treeview overlayed on the screen, allowing you to view statistics of each imported models as well as be able to hide and show groups/sub meshes of each model. Other info, such as measurements, are added to the treeview, allowing you to see broken down information (such as the measured distance in each coordinate axis).
43 |
44 | 
45 |
46 | ## Multiple Shader Outputs
47 |
48 | Solid, Wireframe and Normal shader options are avaiable. Solid gives a basic grey view to the model, Wireframe shows an entire wireframe skelton of the edges of the models and surface triangles. and _Normal_ shows the angle at which the surface is relative to the Global X, Y and Z axis'.
49 |
50 | 
51 |
52 | ### Solid
53 |
54 | The Solid View of the 'Utah teapot'.
55 | 
56 |
57 | ### Wireframe
58 |
59 | The Wireframe View of the 'Utah teapot'.
60 | 
61 |
62 | ### Normal
63 |
64 | The Normal View of the 'Utah teapot'.
65 | 
66 |
67 | ## Surface Measurement
68 |
69 | Iris allows you to measure the distance between different triangular faces of the imported model. This allows you to get a rough idea of distances in your model. Note: that no exact units are defined in Iris (i.e. mm, inches, etc...) and the measurements given are in terms of Face center positions calcuated from Face Vertices.
70 | 
71 |
--------------------------------------------------------------------------------
/assets/arrow/texture_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/arrow/texture_arrow.png
--------------------------------------------------------------------------------
/assets/arrow/unit_arrow.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/arrow/unit_arrow.blend
--------------------------------------------------------------------------------
/assets/arrow/unit_arrow.blend1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/arrow/unit_arrow.blend1
--------------------------------------------------------------------------------
/assets/arrow/unit_arrow.mtl:
--------------------------------------------------------------------------------
1 | # Blender MTL File: 'unit_arrow.blend'
2 | # Material Count: 1
3 |
4 | newmtl None
5 | Ns 0
6 | Ka 0.000000 0.000000 0.000000
7 | Kd 0.8 0.8 0.8
8 | Ks 0.8 0.8 0.8
9 | d 1
10 | illum 2
11 | map_Kd texture_arrow.png
12 |
--------------------------------------------------------------------------------
/assets/arrow/unit_arrow.obj:
--------------------------------------------------------------------------------
1 | # Blender v2.77 (sub 0) OBJ File: 'unit_arrow.blend'
2 | # www.blender.org
3 | mtllib unit_arrow.mtl
4 | o Cylinder
5 | v -0.000000 0.002744 0.047140
6 | v -0.000000 0.795331 0.047140
7 | v -0.033333 0.002744 0.033333
8 | v -0.033333 0.795331 0.033333
9 | v -0.047140 0.002744 0.000001
10 | v -0.047140 0.795331 -0.000000
11 | v -0.033333 0.002744 -0.033332
12 | v -0.033333 0.795331 -0.033333
13 | v -0.000000 0.002744 -0.047139
14 | v -0.000000 0.795331 -0.047140
15 | v 0.033333 0.002744 -0.033332
16 | v 0.033333 0.795331 -0.033333
17 | v 0.047140 0.002744 0.000001
18 | v 0.047140 0.795331 -0.000000
19 | v 0.033333 0.002744 0.033333
20 | v 0.033333 0.795331 0.033333
21 | v -0.000000 0.795331 0.094279
22 | v -0.066666 0.795331 0.066665
23 | v -0.094279 0.795331 -0.000000
24 | v -0.066666 0.795331 -0.066666
25 | v -0.000000 0.795331 -0.094279
26 | v 0.066665 0.795331 -0.066666
27 | v 0.094279 0.795331 -0.000000
28 | v 0.066665 0.795331 0.066665
29 | v -0.000000 0.814187 0.094279
30 | v -0.066666 0.814187 0.066665
31 | v -0.094279 0.814187 -0.000000
32 | v -0.066666 0.814187 -0.066666
33 | v -0.000000 0.814187 -0.094279
34 | v 0.066665 0.814187 -0.066666
35 | v 0.094279 0.814187 -0.000000
36 | v 0.066665 0.814187 0.066665
37 | v -0.000000 1.002745 0.014142
38 | v -0.010000 1.002745 0.010000
39 | v -0.014142 1.002745 -0.000000
40 | v -0.010000 1.002745 -0.010000
41 | v -0.000000 1.002745 -0.014142
42 | v 0.010000 1.002745 -0.010000
43 | v 0.014142 1.002745 -0.000000
44 | v 0.010000 1.002745 0.009999
45 | vt 0.6933 0.7491
46 | vt 0.7292 0.0328
47 | vt 0.6883 0.0592
48 | vt 0.7478 0.7223
49 | vt 0.6605 0.0081
50 | vt 0.6561 0.6971
51 | vt 0.5212 0.0000
52 | vt 0.4696 0.6887
53 | vt 0.3949 0.0136
54 | vt 0.3012 0.7024
55 | vt 0.3569 0.0404
56 | vt 0.2518 0.7296
57 | vt 0.4274 0.0645
58 | vt 0.4390 0.6501
59 | vt 0.5638 0.0723
60 | vt 0.3465 0.7541
61 | vt 0.9974 0.7187
62 | vt 0.8184 0.6896
63 | vt 0.8172 0.6674
64 | vt 0.5279 0.7621
65 | vt 0.1977 0.7815
66 | vt 0.5557 0.7970
67 | vt 0.0053 0.7332
68 | vt 0.0991 0.6783
69 | vt 0.8833 0.7718
70 | vt 0.4729 0.9788
71 | vt 0.4370 0.6723
72 | vt 0.0944 0.7004
73 | vt 0.1940 0.8034
74 | vt 1.0000 0.7408
75 | vt 0.5548 0.8188
76 | vt 0.8850 0.7937
77 | vt 0.0000 0.7552
78 | vt 0.4321 0.9976
79 | vt 0.4180 0.9826
80 | vt 0.5469 0.9962
81 | vt 0.4012 0.9905
82 | vt 0.4923 1.0000
83 | vt 0.5642 0.9884
84 | vt 0.5337 0.9812
85 | vn -0.3827 0.0000 0.9239
86 | vn -0.9239 0.0000 0.3827
87 | vn -0.9239 -0.0000 -0.3827
88 | vn -0.3827 -0.0000 -0.9239
89 | vn 0.3827 -0.0000 -0.9239
90 | vn 0.9239 -0.0000 -0.3827
91 | vn -0.0000 -1.0000 0.0000
92 | vn 0.3827 0.0000 0.9239
93 | vn 0.9239 0.0000 0.3827
94 | vn -0.8600 0.3655 -0.3562
95 | vn 0.0000 1.0000 0.0000
96 | vn 0.3562 0.3655 -0.8600
97 | vn 0.8600 0.3655 0.3562
98 | vn -0.8600 0.3655 0.3562
99 | vn -0.3562 0.3655 -0.8600
100 | vn 0.8600 0.3655 -0.3562
101 | vn -0.3562 0.3655 0.8600
102 | vn 0.3562 0.3655 0.8600
103 | usemtl None
104 | s off
105 | f 2/1/1 3/2/1 1/3/1
106 | f 4/4/2 5/5/2 3/2/2
107 | f 6/6/3 7/7/3 5/5/3
108 | f 8/8/4 9/9/4 7/7/4
109 | f 10/10/5 11/11/5 9/9/5
110 | f 12/12/6 13/13/6 11/11/6
111 | f 6/6/7 20/14/7 8/8/7
112 | f 15/15/8 2/1/8 1/3/8
113 | f 14/16/9 15/15/9 13/13/9
114 | f 7/7/7 11/11/7 15/15/7
115 | f 18/17/2 27/18/2 19/19/2
116 | f 16/20/7 23/21/7 24/22/7
117 | f 6/6/7 18/17/7 19/19/7
118 | f 12/12/7 23/21/7 14/16/7
119 | f 10/10/7 22/23/7 12/12/7
120 | f 10/10/7 20/14/7 21/24/7
121 | f 16/20/7 17/25/7 2/1/7
122 | f 2/1/7 18/17/7 4/4/7
123 | f 27/18/10 36/26/10 28/27/10
124 | f 20/14/4 29/28/4 21/24/4
125 | f 22/23/6 31/29/6 23/21/6
126 | f 17/25/1 26/30/1 18/17/1
127 | f 17/25/8 32/31/8 25/32/8
128 | f 19/19/3 28/27/3 20/14/3
129 | f 21/24/5 30/33/5 22/23/5
130 | f 23/21/9 32/31/9 24/22/9
131 | f 39/34/11 37/35/11 33/36/11
132 | f 29/28/12 38/37/12 30/33/12
133 | f 32/31/13 39/34/13 40/38/13
134 | f 27/18/14 34/39/14 35/40/14
135 | f 29/28/15 36/26/15 37/35/15
136 | f 30/33/16 39/34/16 31/29/16
137 | f 25/32/17 34/39/17 26/30/17
138 | f 32/31/18 33/36/18 25/32/18
139 | f 2/1/1 4/4/1 3/2/1
140 | f 4/4/2 6/6/2 5/5/2
141 | f 6/6/3 8/8/3 7/7/3
142 | f 8/8/4 10/10/4 9/9/4
143 | f 10/10/5 12/12/5 11/11/5
144 | f 12/12/6 14/16/6 13/13/6
145 | f 6/6/7 19/19/7 20/14/7
146 | f 15/15/8 16/20/8 2/1/8
147 | f 14/16/9 16/20/9 15/15/9
148 | f 15/15/7 1/3/7 7/7/7
149 | f 3/2/7 5/5/7 7/7/7
150 | f 7/7/7 9/9/7 11/11/7
151 | f 11/11/7 13/13/7 15/15/7
152 | f 1/3/7 3/2/7 7/7/7
153 | f 18/17/2 26/30/2 27/18/2
154 | f 16/20/7 14/16/7 23/21/7
155 | f 6/6/7 4/4/7 18/17/7
156 | f 12/12/7 22/23/7 23/21/7
157 | f 10/10/7 21/24/7 22/23/7
158 | f 10/10/7 8/8/7 20/14/7
159 | f 16/20/7 24/22/7 17/25/7
160 | f 2/1/7 17/25/7 18/17/7
161 | f 27/18/10 35/40/10 36/26/10
162 | f 20/14/4 28/27/4 29/28/4
163 | f 22/23/6 30/33/6 31/29/6
164 | f 17/25/1 25/32/1 26/30/1
165 | f 17/25/8 24/22/8 32/31/8
166 | f 19/19/3 27/18/3 28/27/3
167 | f 21/24/5 29/28/5 30/33/5
168 | f 23/21/9 31/29/9 32/31/9
169 | f 35/40/11 34/39/11 33/36/11
170 | f 33/36/11 40/38/11 39/34/11
171 | f 39/34/11 38/37/11 37/35/11
172 | f 37/35/11 36/26/11 35/40/11
173 | f 35/40/11 33/36/11 37/35/11
174 | f 29/28/12 37/35/12 38/37/12
175 | f 32/31/13 31/29/13 39/34/13
176 | f 27/18/14 26/30/14 34/39/14
177 | f 29/28/15 28/27/15 36/26/15
178 | f 30/33/16 38/37/16 39/34/16
179 | f 25/32/17 33/36/17 34/39/17
180 | f 32/31/18 40/38/18 33/36/18
181 |
--------------------------------------------------------------------------------
/assets/icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_128.png
--------------------------------------------------------------------------------
/assets/icon_128_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_128_dark.png
--------------------------------------------------------------------------------
/assets/icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_16.png
--------------------------------------------------------------------------------
/assets/icon_16_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_16_dark.png
--------------------------------------------------------------------------------
/assets/icon_24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_24.png
--------------------------------------------------------------------------------
/assets/icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_256.png
--------------------------------------------------------------------------------
/assets/icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_32.png
--------------------------------------------------------------------------------
/assets/icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_512.png
--------------------------------------------------------------------------------
/assets/icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/assets/icon_64.png
--------------------------------------------------------------------------------
/css/ui-console.css:
--------------------------------------------------------------------------------
1 | .ui-cntrl-console {
2 | width: 500px;
3 | font-size: 12px;
4 | position: absolute;
5 | z-index: 1;
6 | background-color: rgba(34, 34, 34, 0.5);
7 | transition: 0.3s;
8 | opacity: 0.75;
9 | }
10 | .ui-cntrl-console:hover {
11 | opacity: 1;
12 | background-color: #222;
13 | }
14 | .ui-cntrl-console-insides {
15 | overflow: scroll;
16 | height: 48px;
17 | }
18 |
--------------------------------------------------------------------------------
/css/ui-contextmenu.css:
--------------------------------------------------------------------------------
1 | /* context menu */
2 |
3 | .context-menu {
4 | display: none;
5 | position: absolute;
6 | z-index: 10;
7 | /*padding: 2px 0;*/
8 | width: 200px;
9 | background-color: #222;
10 | border: solid 1px #111;
11 | box-shadow: 1px 1px 2px #000;
12 | }
13 |
14 | .context-menu--active {
15 | display: block;
16 | z-index: 10000;
17 | }
18 |
19 | .context-menu__items {
20 | list-style: none;
21 | margin: 0;
22 | padding: 0;
23 | }
24 |
25 | .context-menu__item {
26 | display: block;
27 | margin-bottom: 4px;
28 | }
29 |
30 | .context-menu__item#splitter {
31 | padding: 0px 10px 0px 10px;
32 | margin: 0px 5px 0px 5px;
33 | color: #888;
34 | background-color: #888;
35 | font-size: 1%;
36 | width: 100% - 10px;
37 | height: 1px;
38 | border: 0;
39 | }
40 | .context-menu__item#splitter:hover {
41 | color: #888;
42 | background-color: #888;
43 | }
44 |
45 | .context-menu__item > a {
46 | display: block;
47 | padding: 0 10px;
48 | color: #bbb;
49 | font-size: 11px;
50 | line-height: 20px;
51 | text-decoration: none;
52 | }
53 |
54 | .context-menu__item > a:before {
55 | vertical-align: center;
56 | /*content: url('../assets/icon_16.png');*/
57 | top: 4px;
58 | left: -10px;
59 | position: absolute;
60 | }
61 |
62 | .context-menu__item > a[data-icon='properties']::before {
63 | content: url('../img/tree/node_properties.png');
64 | }
65 |
66 | .context-menu__item:last-child {
67 | margin-bottom: 0;
68 | }
69 |
70 | .context-menu__link {
71 | display: block;
72 | padding: 0px 10px 5px 200px;
73 |
74 | position: relative;
75 | left: 20px;
76 |
77 | color: #bbb;
78 | font-size: 11px;
79 | /*line-height: 20px;*/
80 | text-decoration: none;
81 | /*
82 | display: block;
83 | padding: 4px 12px;
84 | color: #aaa;
85 | text-decoration: none;
86 | */
87 | }
88 |
89 | .context-menu__link:hover {
90 | color: #fff;
91 | }
92 |
93 | .context-menu__item:hover {
94 | background-color: #0094f7;
95 | }
96 |
--------------------------------------------------------------------------------
/css/ui-progressbar.css:
--------------------------------------------------------------------------------
1 | /* Progress Bar */
2 | /* -------------------------------------------------------------------- */
3 | .meter {
4 | height: 15px; /* Can be anything */
5 | position: relative;
6 | margin: 60px 0 20px 0; /* Just for demo spacing */
7 | background: #222; /* Border Background */
8 | -moz-border-radius: 25px;
9 | -webkit-border-radius: 25px;
10 | border-radius: 25px; /* Border Radius */
11 | padding: 4px; /* Padding Between Bar and Border*/
12 | -webkit-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
13 | -moz-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
14 | box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
15 | }
16 | .meter > span {
17 | display: block;
18 | height: 100%;
19 | -webkit-border-top-right-radius: 8px;
20 | -webkit-border-bottom-right-radius: 8px;
21 | -moz-border-radius-topright: 8px;
22 | -moz-border-radius-bottomright: 8px;
23 | border-top-right-radius: 8px;
24 | border-bottom-right-radius: 8px;
25 | -webkit-border-top-left-radius: 20px;
26 | -webkit-border-bottom-left-radius: 20px;
27 | -moz-border-radius-topleft: 20px;
28 | -moz-border-radius-bottomleft: 20px;
29 | border-top-left-radius: 20px;
30 | border-bottom-left-radius: 20px;
31 | background-color: rgb(0, 255, 0);
32 | background-image: -webkit-gradient(
33 | linear,
34 | left bottom,
35 | left top,
36 | color-stop(0, rgb(43, 194, 83)),
37 | color-stop(1, rgb(0, 240, 0))
38 | );
39 | background-image: -moz-linear-gradient(
40 | center bottom,
41 | rgb(43, 194, 83) 37%,
42 | rgb(84, 240, 84) 69%
43 | );
44 | -webkit-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3),
45 | inset 0 -2px 6px rgba(0, 0, 0, 0.4);
46 | -moz-box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3),
47 | inset 0 -2px 6px rgba(0, 0, 0, 0.4);
48 | box-shadow: inset 0 2px 9px rgba(255, 255, 255, 0.3),
49 | inset 0 -2px 6px rgba(0, 0, 0, 0.4);
50 | position: relative;
51 | overflow: hidden;
52 | }
53 | .meter > span:after,
54 | .animate > span > span {
55 | content: '';
56 | position: absolute;
57 | top: 0;
58 | left: 0;
59 | bottom: 0;
60 | right: 0;
61 | background-image: -webkit-gradient(
62 | linear,
63 | 0 0,
64 | 100% 100%,
65 | color-stop(0.25, rgba(255, 255, 255, 0.2)),
66 | color-stop(0.25, transparent),
67 | color-stop(0.5, transparent),
68 | color-stop(0.5, rgba(255, 255, 255, 0.2)),
69 | color-stop(0.75, rgba(255, 255, 255, 0.2)),
70 | color-stop(0.75, transparent),
71 | to(transparent)
72 | );
73 | background-image: -moz-linear-gradient(
74 | -45deg,
75 | rgba(255, 255, 255, 0.2) 25%,
76 | transparent 25%,
77 | transparent 50%,
78 | rgba(255, 255, 255, 0.2) 50%,
79 | rgba(255, 255, 255, 0.2) 75%,
80 | transparent 75%,
81 | transparent
82 | );
83 | z-index: 1;
84 | -webkit-background-size: 50px 50px;
85 | -moz-background-size: 50px 50px;
86 | -webkit-animation: move 2s linear infinite;
87 | -webkit-border-top-right-radius: 8px;
88 | -webkit-border-bottom-right-radius: 8px;
89 | -moz-border-radius-topright: 8px;
90 | -moz-border-radius-bottomright: 8px;
91 | border-top-right-radius: 8px;
92 | border-bottom-right-radius: 8px;
93 | -webkit-border-top-left-radius: 20px;
94 | -webkit-border-bottom-left-radius: 20px;
95 | -moz-border-radius-topleft: 20px;
96 | -moz-border-radius-bottomleft: 20px;
97 | border-top-left-radius: 20px;
98 | border-bottom-left-radius: 20px;
99 | overflow: hidden;
100 | }
101 |
102 | .animate > span:after {
103 | display: none;
104 | }
105 |
106 | @-webkit-keyframes move {
107 | 0% {
108 | background-position: 0 0;
109 | }
110 | 100% {
111 | background-position: 50px 50px;
112 | }
113 | }
114 |
115 | .orange > span {
116 | background-color: #f1a165;
117 | background-image: -moz-linear-gradient(top, #f1a165, #f36d0a);
118 | background-image: -webkit-gradient(
119 | linear,
120 | left top,
121 | left bottom,
122 | color-stop(0, #f1a165),
123 | color-stop(1, #f36d0a)
124 | );
125 | background-image: -webkit-linear-gradient(#f1a165, #f36d0a);
126 | }
127 |
128 | .red > span {
129 | background-color: #f0a3a3;
130 | background-image: -moz-linear-gradient(top, #f0a3a3, #f42323);
131 | background-image: -webkit-gradient(
132 | linear,
133 | left top,
134 | left bottom,
135 | color-stop(0, #f0a3a3),
136 | color-stop(1, #f42323)
137 | );
138 | background-image: -webkit-linear-gradient(#f0a3a3, #f42323);
139 | }
140 | /*4dd2ff*/
141 | .deepskyblue > span {
142 | background-color: #00bfff;
143 | background-image: -moz-linear-gradient(top, #00bfff, #4dd2ff);
144 | background-image: -webkit-gradient(
145 | linear,
146 | left top,
147 | left bottom,
148 | color-stop(0, #00bfff),
149 | color-stop(1, #4dd2ff)
150 | );
151 | background-image: -webkit-linear-gradient(#00bfff, #4dd2ff);
152 | }
153 |
154 | .nostripes > span > span,
155 | .nostripes > span:after {
156 | -webkit-animation: none;
157 | background-image: none;
158 | }
159 |
--------------------------------------------------------------------------------
/css/ui-propertiesbar.css:
--------------------------------------------------------------------------------
1 | /* Properties Control */
2 | /* -------------------------------------------------------------------- */ /*.ui-cntrl-properties body {
3 | font-family: "Lato", sans-serif;
4 | transition: background-color .5s;
5 | }*/
6 |
7 | .ui-cntrl-properties {
8 | /* height: 100%;*/
9 | width: 300px;
10 | position: fixed;
11 | z-index: 1;
12 | top: 116px;
13 | right: -300px;
14 | background-color: #222;
15 | /*overflow-x: hidden;*/
16 | transition: 0.3s;
17 | opacity: 0.75;
18 | }
19 |
20 | .ui-cntrl-properties-closebtn {
21 | position: absolute;
22 | top: -5px;
23 | right: 0px;
24 | font-size: 11px;
25 | margin-left: 50px;
26 | font-weight: bold;
27 | color: #000;
28 | }
29 |
30 | #prop_dat_gui {
31 | margin-right: 0px;
32 | }
33 |
34 | #prop_header {
35 | /*
36 | position: absolute;
37 | z-index: 0;
38 | top: -32px;
39 | right: 0px;
40 | */
41 | background-color: rgb(59, 59, 59);
42 | font-weight: bold;
43 | font-size: 12px;
44 | color: rgb(215, 215, 215);
45 | }
46 |
47 | .ui-cntrl-properties a {
48 | padding: 8px 8px 8px 32px;
49 | text-decoration: none;
50 | font-size: 11px;
51 | color: #818181;
52 | display: block;
53 | transition: 0.3s;
54 | }
55 |
56 | .ui-cntrl-properties a:hover,
57 | .offcanvas a:focus {
58 | color: #f1f1f1;
59 | }
60 |
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/favicon.ico
--------------------------------------------------------------------------------
/img/badges/badge.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/badges/badge.xcf
--------------------------------------------------------------------------------
/img/badges/build_status.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/img/badges/launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/badges/launcher.png
--------------------------------------------------------------------------------
/img/badges/launcher.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/badges/launcher.xcf
--------------------------------------------------------------------------------
/img/badges/path.txt:
--------------------------------------------------------------------------------
1 | https://img.shields.io/badge/build-beta%20[v0.3.2]-blue.svg
--------------------------------------------------------------------------------
/img/btns/cancel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/btns/cancel.png
--------------------------------------------------------------------------------
/img/btns/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/btns/delete.png
--------------------------------------------------------------------------------
/img/btns/document_export.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/btns/document_export.png
--------------------------------------------------------------------------------
/img/btns/warning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/btns/warning.png
--------------------------------------------------------------------------------
/img/gui/bug_go.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/bug_go.png
--------------------------------------------------------------------------------
/img/gui/bullet_arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/bullet_arrow_right.png
--------------------------------------------------------------------------------
/img/gui/burger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/burger.png
--------------------------------------------------------------------------------
/img/gui/burger.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/burger.xcf
--------------------------------------------------------------------------------
/img/gui/burger_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/burger_hover.png
--------------------------------------------------------------------------------
/img/gui/centroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/centroid.png
--------------------------------------------------------------------------------
/img/gui/check_box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/check_box.png
--------------------------------------------------------------------------------
/img/gui/check_box_mix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/check_box_mix.png
--------------------------------------------------------------------------------
/img/gui/check_box_uncheck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/check_box_uncheck.png
--------------------------------------------------------------------------------
/img/gui/information.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/information.png
--------------------------------------------------------------------------------
/img/gui/magnifier_zoom_in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/magnifier_zoom_in.png
--------------------------------------------------------------------------------
/img/gui/magnifier_zoom_out.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/gui/magnifier_zoom_out.png
--------------------------------------------------------------------------------
/img/icon/Icon_mipmap.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/Icon_mipmap.xcf
--------------------------------------------------------------------------------
/img/icon/badge.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/badge.xcf
--------------------------------------------------------------------------------
/img/icon/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/icon.png
--------------------------------------------------------------------------------
/img/icon/icon.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/icon.xcf
--------------------------------------------------------------------------------
/img/icon/icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/icon_128.png
--------------------------------------------------------------------------------
/img/icon/icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/icon_16.png
--------------------------------------------------------------------------------
/img/icon/icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/icon_256.png
--------------------------------------------------------------------------------
/img/icon/icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/icon_32.png
--------------------------------------------------------------------------------
/img/icon/icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/icon_64.png
--------------------------------------------------------------------------------
/img/icon/vrtx_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/vrtx_logo.png
--------------------------------------------------------------------------------
/img/icon/vrtx_logo.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/vrtx_logo.xcf
--------------------------------------------------------------------------------
/img/icon/vrtx_logo_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/icon/vrtx_logo_16.png
--------------------------------------------------------------------------------
/img/io/drive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/io/drive.png
--------------------------------------------------------------------------------
/img/io/drive_go.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/io/drive_go.png
--------------------------------------------------------------------------------
/img/io/folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/io/folder.png
--------------------------------------------------------------------------------
/img/io/open_gdrive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/io/open_gdrive.png
--------------------------------------------------------------------------------
/img/io/open_local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/io/open_local.png
--------------------------------------------------------------------------------
/img/io/open_onDisk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/io/open_onDisk.png
--------------------------------------------------------------------------------
/img/loading/Eclipse.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/loading/Eclipse.gif
--------------------------------------------------------------------------------
/img/loading/Eclipse.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/img/loading/anim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/loading/anim.gif
--------------------------------------------------------------------------------
/img/loading/balls.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/loading/balls.gif
--------------------------------------------------------------------------------
/img/loading/box.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/loading/box.gif
--------------------------------------------------------------------------------
/img/main/export.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/main/export.png
--------------------------------------------------------------------------------
/img/main/import.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/main/import.png
--------------------------------------------------------------------------------
/img/main/new_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/main/new_32.png
--------------------------------------------------------------------------------
/img/main/open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/main/open.png
--------------------------------------------------------------------------------
/img/main/open_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/main/open_32.png
--------------------------------------------------------------------------------
/img/main/save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/main/save.png
--------------------------------------------------------------------------------
/img/main/save_as.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/main/save_as.png
--------------------------------------------------------------------------------
/img/rbn/main/about/bug_go.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/rbn/main/about/bug_go.png
--------------------------------------------------------------------------------
/img/rbn/main/about/info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/rbn/main/about/info.png
--------------------------------------------------------------------------------
/img/social/Facebook-Icon-Hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Facebook-Icon-Hover.png
--------------------------------------------------------------------------------
/img/social/Facebook-Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Facebook-Icon.png
--------------------------------------------------------------------------------
/img/social/Fb.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Fb.xcf
--------------------------------------------------------------------------------
/img/social/Github-Icon-Hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Github-Icon-Hover.png
--------------------------------------------------------------------------------
/img/social/Github-Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Github-Icon.png
--------------------------------------------------------------------------------
/img/social/Github-Icon.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Github-Icon.xcf
--------------------------------------------------------------------------------
/img/social/Twitter-Icon-Hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Twitter-Icon-Hover.png
--------------------------------------------------------------------------------
/img/social/Twitter-Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Twitter-Icon.png
--------------------------------------------------------------------------------
/img/social/Twitter-Icon.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/social/Twitter-Icon.xcf
--------------------------------------------------------------------------------
/img/tlbr/file/exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/exit.png
--------------------------------------------------------------------------------
/img/tlbr/file/export.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/export.png
--------------------------------------------------------------------------------
/img/tlbr/file/import.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/import.png
--------------------------------------------------------------------------------
/img/tlbr/file/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/new.png
--------------------------------------------------------------------------------
/img/tlbr/file/new_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/new_32.png
--------------------------------------------------------------------------------
/img/tlbr/file/open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/open.png
--------------------------------------------------------------------------------
/img/tlbr/file/open_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/open_32.png
--------------------------------------------------------------------------------
/img/tlbr/file/save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/save.png
--------------------------------------------------------------------------------
/img/tlbr/file/save_as.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/save_as.png
--------------------------------------------------------------------------------
/img/tlbr/file/setting_tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/setting_tools.png
--------------------------------------------------------------------------------
/img/tlbr/file/toggle_console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/toggle_console.png
--------------------------------------------------------------------------------
/img/tlbr/file/toggle_properties.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/toggle_properties.png
--------------------------------------------------------------------------------
/img/tlbr/file/toggle_tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/file/toggle_tree.png
--------------------------------------------------------------------------------
/img/tlbr/tools/debug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/tools/debug.png
--------------------------------------------------------------------------------
/img/tlbr/tools/measure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/tools/measure.png
--------------------------------------------------------------------------------
/img/tlbr/view/render/Rander Icons.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/render/Rander Icons.xcf
--------------------------------------------------------------------------------
/img/tlbr/view/render/edge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/render/edge.png
--------------------------------------------------------------------------------
/img/tlbr/view/render/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/render/normal.png
--------------------------------------------------------------------------------
/img/tlbr/view/render/render_texture.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/render/render_texture.xcf
--------------------------------------------------------------------------------
/img/tlbr/view/render/shaded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/render/shaded.png
--------------------------------------------------------------------------------
/img/tlbr/view/render/texture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/render/texture.png
--------------------------------------------------------------------------------
/img/tlbr/view/render/wireframe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/render/wireframe.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/cube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/cube.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_back.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_bottom.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_cube.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_cube.xcf
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_cube_16.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_cube_16.xcf
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_front.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_iso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_iso.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_left.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_ortho.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_ortho.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_perspective.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_perspective.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_projection.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_projection.xcf
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_projection_16.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_projection_16.xcf
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_projection_16_2.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_projection_16_2.xcf
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_right.png
--------------------------------------------------------------------------------
/img/tlbr/view/set/view_top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/set/view_top.png
--------------------------------------------------------------------------------
/img/tlbr/view/zoom/zoom_fit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/zoom/zoom_fit.png
--------------------------------------------------------------------------------
/img/tlbr/view/zoom/zoom_in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/zoom/zoom_in.png
--------------------------------------------------------------------------------
/img/tlbr/view/zoom/zoom_out.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tlbr/view/zoom/zoom_out.png
--------------------------------------------------------------------------------
/img/tree/bullet_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/bullet_error.png
--------------------------------------------------------------------------------
/img/tree/bullet_success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/bullet_success.png
--------------------------------------------------------------------------------
/img/tree/bullet_warning.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/bullet_warning.png
--------------------------------------------------------------------------------
/img/tree/document_import.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/document_import.png
--------------------------------------------------------------------------------
/img/tree/document_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/document_info.png
--------------------------------------------------------------------------------
/img/tree/file_ascii.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/file_ascii.png
--------------------------------------------------------------------------------
/img/tree/file_bin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/file_bin.png
--------------------------------------------------------------------------------
/img/tree/file_extension_jpeg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/file_extension_jpeg.png
--------------------------------------------------------------------------------
/img/tree/file_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/file_info.png
--------------------------------------------------------------------------------
/img/tree/lightbulb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/lightbulb.png
--------------------------------------------------------------------------------
/img/tree/node_axis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_axis.png
--------------------------------------------------------------------------------
/img/tree/node_bullet_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_bullet_blue.png
--------------------------------------------------------------------------------
/img/tree/node_bullet_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_bullet_green.png
--------------------------------------------------------------------------------
/img/tree/node_bullet_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_bullet_red.png
--------------------------------------------------------------------------------
/img/tree/node_bullet_vector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_bullet_vector.png
--------------------------------------------------------------------------------
/img/tree/node_bullet_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_bullet_white.png
--------------------------------------------------------------------------------
/img/tree/node_centroid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_centroid.png
--------------------------------------------------------------------------------
/img/tree/node_color_info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_color_info.png
--------------------------------------------------------------------------------
/img/tree/node_colour_rgb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_colour_rgb.png
--------------------------------------------------------------------------------
/img/tree/node_colour_wheel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_colour_wheel.png
--------------------------------------------------------------------------------
/img/tree/node_colours.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_colours.png
--------------------------------------------------------------------------------
/img/tree/node_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_default.png
--------------------------------------------------------------------------------
/img/tree/node_envr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_envr.png
--------------------------------------------------------------------------------
/img/tree/node_folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_folder.png
--------------------------------------------------------------------------------
/img/tree/node_folder_picture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_folder_picture.png
--------------------------------------------------------------------------------
/img/tree/node_hash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_hash.png
--------------------------------------------------------------------------------
/img/tree/node_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_image.png
--------------------------------------------------------------------------------
/img/tree/node_material.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_material.png
--------------------------------------------------------------------------------
/img/tree/node_materials.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_materials.png
--------------------------------------------------------------------------------
/img/tree/node_measure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_measure.png
--------------------------------------------------------------------------------
/img/tree/node_measure_angle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_measure_angle.png
--------------------------------------------------------------------------------
/img/tree/node_mesh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_mesh.png
--------------------------------------------------------------------------------
/img/tree/node_plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_plane.png
--------------------------------------------------------------------------------
/img/tree/node_prop_physical.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_prop_physical.png
--------------------------------------------------------------------------------
/img/tree/node_properties.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_properties.png
--------------------------------------------------------------------------------
/img/tree/node_root.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/tree/node_root.png
--------------------------------------------------------------------------------
/img/txtrs/txtr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/txtrs/txtr.png
--------------------------------------------------------------------------------
/img/txtrs/txtr_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/txtrs/txtr_default.png
--------------------------------------------------------------------------------
/img/txtrs/txtr_default.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/txtrs/txtr_default.xcf
--------------------------------------------------------------------------------
/img/txtrs/txtr_missing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/img/txtrs/txtr_missing.png
--------------------------------------------------------------------------------
/js/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/js/.DS_Store
--------------------------------------------------------------------------------
/js/contextmenu.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | 'use strict';
3 |
4 | //////////////////////////////////////////////////////////////////////////////
5 | //////////////////////////////////////////////////////////////////////////////
6 | //
7 | // H E L P E R F U N C T I O N S
8 | //
9 | //////////////////////////////////////////////////////////////////////////////
10 | //////////////////////////////////////////////////////////////////////////////
11 |
12 | /**
13 | * Function to check if we clicked inside an element with a particular class
14 | * name.
15 | *
16 | * @param {Object} e The event
17 | * @param {String} className The class name to check against
18 | * @return {Boolean}
19 | */
20 | function clickInsideElement(e, className) {
21 | var el = e.srcElement || e.target;
22 |
23 | if (el.classList.contains(className)) {
24 | return el;
25 | } else {
26 | while ((el = el.parentNode)) {
27 | if (el.classList && el.classList.contains(className)) {
28 | return el;
29 | }
30 | }
31 | }
32 |
33 | return false;
34 | }
35 |
36 | /**
37 | * Get's exact position of event.
38 | *
39 | * @param {Object} e The event passed in
40 | * @return {Object} Returns the x and y position
41 | */
42 | function getPosition(e) {
43 | var posx = 0;
44 | var posy = 0;
45 |
46 | if (!e) var e = window.event;
47 |
48 | if (e.pageX || e.pageY) {
49 | posx = e.pageX;
50 | posy = e.pageY;
51 | } else if (e.clientX || e.clientY) {
52 | posx =
53 | e.clientX +
54 | document.body.scrollLeft +
55 | document.documentElement.scrollLeft;
56 | posy =
57 | e.clientY +
58 | document.body.scrollTop +
59 | document.documentElement.scrollTop;
60 | }
61 |
62 | return {
63 | x: posx,
64 | y: posy
65 | };
66 | }
67 |
68 | //////////////////////////////////////////////////////////////////////////////
69 | //////////////////////////////////////////////////////////////////////////////
70 | //
71 | // C O R E F U N C T I O N S
72 | //
73 | //////////////////////////////////////////////////////////////////////////////
74 | //////////////////////////////////////////////////////////////////////////////
75 |
76 | /**
77 | * Variables.
78 | */
79 | var contextMenuClassName = 'context-menu';
80 | var contextMenuItemClassName = 'context-menu__item';
81 | var contextMenuLinkClassName = 'context-menu__link';
82 | var contextMenuActive = 'context-menu--active';
83 |
84 | var taskItemClassName = 'glcanvas3D';
85 | var taskItemInContext;
86 |
87 | var clickCoords;
88 | var clickCoordsX;
89 | var clickCoordsY;
90 |
91 | var menu = document.querySelector('#context-menu');
92 | var menuItems = menu.querySelectorAll('.context-menu__item');
93 | var menuState = 0;
94 | var menuWidth;
95 | var menuHeight;
96 | var menuPosition;
97 | var menuPositionX;
98 | var menuPositionY;
99 |
100 | var windowWidth;
101 | var windowHeight;
102 |
103 | /**
104 | * Initialise our application's code.
105 | */
106 | function init() {
107 | contextListener();
108 | clickListener();
109 | keyupListener();
110 | resizeListener();
111 | }
112 |
113 | /**
114 | * Listens for contextmenu events.
115 | */
116 | function contextListener() {
117 | document.addEventListener('contextmenu', function(e) {
118 | taskItemInContext = clickInsideElement(e, taskItemClassName);
119 | //e.preventDefault();
120 | if (taskItemInContext) {
121 | e.preventDefault();
122 | toggleMenuOn();
123 | positionMenu(e);
124 | } else {
125 | taskItemInContext = null;
126 | toggleMenuOff();
127 | }
128 | });
129 | }
130 |
131 | /**
132 | * Listens for click events.
133 | */
134 | function clickListener() {
135 | document.addEventListener('click', function(e) {
136 | var clickeElIsLink = clickInsideElement(e, contextMenuLinkClassName);
137 |
138 | if (clickeElIsLink) {
139 | e.preventDefault();
140 | menuItemListener(clickeElIsLink);
141 | } else {
142 | var button = e.which || e.button;
143 | if (button === 1) {
144 | toggleMenuOff();
145 | }
146 | }
147 | });
148 | }
149 |
150 | /**
151 | * Listens for keyup events.
152 | */
153 | function keyupListener() {
154 | window.onkeyup = function(e) {
155 | if (e.keyCode === 27) {
156 | toggleMenuOff();
157 | }
158 | };
159 | }
160 |
161 | /**
162 | * Window resize event listener
163 | */
164 | function resizeListener() {
165 | window.onresize = function(e) {
166 | toggleMenuOff();
167 | };
168 | }
169 |
170 | /**
171 | * Turns the custom context menu on.
172 | */
173 | function toggleMenuOn() {
174 | if (menuState !== 1) {
175 | menuState = 1;
176 | menu.classList.add(contextMenuActive);
177 | }
178 | }
179 |
180 | /**
181 | * Turns the custom context menu off.
182 | */
183 | function toggleMenuOff() {
184 | if (menuState !== 0) {
185 | menuState = 0;
186 | menu.classList.remove(contextMenuActive);
187 | }
188 | }
189 |
190 | /**
191 | * Positions the menu properly.
192 | *
193 | * @param {Object} e The event
194 | */
195 | function positionMenu(e) {
196 | clickCoords = getPosition(e);
197 | clickCoordsX = clickCoords.x;
198 | clickCoordsY = clickCoords.y;
199 |
200 | menuWidth = menu.offsetWidth + 4;
201 | menuHeight = menu.offsetHeight + 4;
202 |
203 | windowWidth = window.innerWidth;
204 | windowHeight = window.innerHeight;
205 |
206 | if (windowWidth - clickCoordsX < menuWidth) {
207 | menu.style.left = windowWidth - menuWidth + 'px';
208 | } else {
209 | menu.style.left = clickCoordsX + 'px';
210 | }
211 |
212 | if (windowHeight - clickCoordsY < menuHeight) {
213 | menu.style.top = windowHeight - menuHeight + 'px';
214 | } else {
215 | menu.style.top = clickCoordsY + 'px';
216 | }
217 | }
218 |
219 | /**
220 | * Dummy action function that logs an action when a menu item link is clicked
221 | *
222 | * @param {HTMLElement} link The link that was clicked
223 | */
224 | function menuItemListener(link) {
225 | log(
226 | 'Task ID - ' +
227 | taskItemInContext.getAttribute('data-id') +
228 | ', Task action - ' +
229 | link.getAttribute('data-action')
230 | );
231 | toggleMenuOff();
232 | }
233 |
234 | /**
235 | * Run the app.
236 | */
237 | init();
238 | })();
239 |
--------------------------------------------------------------------------------
/js/google/gdrive.js:
--------------------------------------------------------------------------------
1 | // The Browser API key obtained from the Google API Console.
2 | // Replace with your own Browser API key, or your own key.
3 | var developerKey = 'AIzaSyCpY9meQR6AgjIYSko19crZpGr5jDjVsGA';
4 |
5 | // The Client ID obtained from the Google API Console. Replace with your own Client ID.
6 | var clientId =
7 | '629606533840-1j5m58o3krsdkno8hiamd763opce78ia.apps.googleusercontent.com';
8 |
9 | // Replace with your own project number from console.developers.google.com.
10 | // See "Project number" under "IAM & Admin" > "Settings"
11 | var appId = '629606533840';
12 |
13 | // Scope to use to access user's Drive items.
14 | var scope = ['https://www.googleapis.com/auth/drive.file'];
15 |
16 | var pickerApiLoaded = false;
17 | var oauthToken;
18 |
19 | // Use the Google API Loader script to load the google.picker script.
20 | function loadPicker() {
21 | gapi.load('auth', {
22 | callback: onAuthApiLoad
23 | });
24 | gapi.load('picker', {
25 | callback: onPickerApiLoad
26 | });
27 | }
28 |
29 | function onAuthApiLoad() {
30 | window.gapi.auth.authorize(
31 | {
32 | client_id: clientId,
33 | scope: scope,
34 | immediate: false
35 | },
36 | handleAuthResult
37 | );
38 | }
39 |
40 | function onPickerApiLoad() {
41 | pickerApiLoaded = true;
42 | createPicker();
43 | }
44 |
45 | function handleAuthResult(authResult) {
46 | if (authResult && !authResult.error) {
47 | oauthToken = authResult.access_token;
48 | console.log(authResult);
49 | createPicker();
50 | }
51 | }
52 |
53 | // Create and render a Picker object for searching images.
54 | function createPicker() {
55 | if (pickerApiLoaded && oauthToken) {
56 | //var view = new google.picker.View(google.picker.ViewId.DOCS);
57 | var view = new google.picker.DocsView()
58 | .setParent('root')
59 | .setIncludeFolders(true);
60 | //view.setMimeTypes("application/vnd.ms-pki.stl, application/octet-stream");
61 | var picker = new google.picker.PickerBuilder()
62 | //.enableFeature(google.picker.Feature.NAV_HIDDEN)
63 | .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
64 | .setAppId(appId)
65 | .setOAuthToken(oauthToken)
66 | .addView(view)
67 | .addView(new google.picker.DocsUploadView())
68 | .setDeveloperKey(developerKey)
69 | .setCallback(pickerCallback)
70 | .build();
71 | picker.setVisible(true);
72 | }
73 | }
74 |
75 | function downloadFiles(docs) {}
76 |
77 | // A simple callback implementation.
78 | function pickerCallback(data) {
79 | if (data.action == google.picker.Action.PICKED) {
80 | // first open & close the respective dialogs
81 | modalOpenFile.style.display = 'none';
82 | document.getElementById('modal_GDrivePicker').style.display = 'block';
83 | document.getElementById('modal_GDrivePicker-prgrsbar').style.width =
84 | 0 + '%';
85 |
86 | document.getElementById('modal_GDrivePicker-name').innerHTML =
87 | 'Requesting File: ' + data.docs[0].name;
88 |
89 | document.getElementById('modal_GDrivePicker-size').innerHTML =
90 | 'Please Wait...';
91 |
92 | var numOfFilesToGet = data.docs.length;
93 | var currentFileIndex = 1;
94 |
95 | var totalBytes = 1;
96 | var currentBytes = 0;
97 |
98 | var fileId = data.docs[0].id;
99 |
100 | var googleSelectedFiles = new Array();
101 | var docs = data[google.picker.Response.DOCUMENTS];
102 | docs.forEach(function(file) {
103 | var downloadUrl;
104 | totalBytes += file.sizeBytes;
105 |
106 | gapi.client.request({
107 | path: '/drive/v2/files/' + file.id,
108 | method: 'GET',
109 | callback: function(responsejs, responsetxt) {
110 | //console.log(responsejs);
111 |
112 | downloadUrl = responsejs.downloadUrl;
113 |
114 | // progress on transfers from the server to the client (downloads)
115 | function updateProgress(event) {
116 | if (event.lengthComputable) {
117 | // Add to the current bytes
118 | currentBytes = event.loaded;
119 |
120 | // Now calculate the percent finished
121 | var percentComplete = (currentBytes / totalBytes) * 100;
122 |
123 | //console.log("Downloaded: " + parseInt(percentComplete) + "%");
124 | document.getElementById(
125 | 'modal_GDrivePicker-prgrsbar'
126 | ).style.width =
127 | parseInt(percentComplete) + '%';
128 | //TODO: Add multiple download bars.
129 |
130 | document.getElementById('modal_GDrivePicker-size').innerHTML =
131 | 'Size: ' +
132 | parseInt(currentBytes / 10000) / 100 +
133 | ' of ' +
134 | parseInt(totalBytes / 10000) / 100 +
135 | ' Mb';
136 | document.getElementById('modal_GDrivePicker-name').innerHTML =
137 | 'Downloading Files '; // + file.name;
138 | } else {
139 | // Unable to compute progress information since the total size is unknown
140 | }
141 | }
142 |
143 | var gDoxBlob = null;
144 | var xhr = new XMLHttpRequest();
145 | xhr.addEventListener('progress', updateProgress, false);
146 | xhr.open('GET', downloadUrl); //file.url
147 |
148 | var accessToken = gapi.auth.getToken().access_token;
149 | xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
150 |
151 | xhr.responseType = 'blob';
152 | xhr.onload = function() {
153 | gDoxBlob = xhr.response;
154 | gDoxBlob.name = file.name;
155 | googleSelectedFiles.push(gDoxBlob);
156 | //googleSelectedFiles.push({ bytes: gDoxBlob, name: file.name });
157 | //console.log("File '" + file.name + "' Downloaded");
158 |
159 | if (currentFileIndex == numOfFilesToGet) {
160 | //Finished Downloading Files
161 | document.getElementById('modal_GDrivePicker').style.display =
162 | 'none';
163 | modalLoadFile.style.display = 'block';
164 | ProcessFiles(googleSelectedFiles);
165 | //console.log("Loading Files...");
166 | }
167 | currentFileIndex++;
168 | };
169 | xhr.send();
170 | }
171 | });
172 | });
173 | }
174 | }
175 |
--------------------------------------------------------------------------------
/js/google/login.js:
--------------------------------------------------------------------------------
1 | var GoogleProfile;
2 |
3 | function onSignIn(googleUser) {
4 | GoogleProfile = googleUser.getBasicProfile();
5 |
6 | /*
7 | console.log('ID: ' + GoogleProfile.getId()); // Do not send to your backend! Use an ID token instead.
8 | console.log('Name: ' + GoogleProfile.getName());
9 | console.log('Image URL: ' + GoogleProfile.getImageUrl());
10 | console.log('Email: ' + GoogleProfile.getEmail()); // This is null if the 'email' scope is not present.
11 | */
12 | User.LoggedIn = true;
13 | User.ID = GoogleProfile.getId();
14 | User.Name = GoogleProfile.getName();
15 | User.ImgUrl = GoogleProfile.getImageUrl();
16 | User.Email = GoogleProfile.getEmail();
17 |
18 | // hide the button
19 | var btn_googleSignIn = document.getElementById("btn_googleSignIn");
20 | btn_googleSignIn.style.display = 'none';
21 |
22 |
23 | // hide and show the proper divs
24 | var btn_googleSignIn = document.getElementById("btn_googleSignIn");
25 | btn_googleSignIn.style.display = 'none';
26 |
27 | var img_profile = document.getElementById("img_profile");
28 | img_profile.src = GoogleProfile.getImageUrl();
29 |
30 |
31 | var profile_name = document.getElementById("profile_name");
32 | profile_name.innerHTML = GoogleProfile.getName();
33 |
34 |
35 | var profile_img = document.getElementById("profile_img");
36 | profile_img.src = GoogleProfile.getImageUrl();
37 |
38 | var profile_email = document.getElementById("profile_email");
39 | profile_email.innerHTML = GoogleProfile.getEmail();
40 |
41 |
42 | var dev_signedIn = document.getElementById("dev_signedIn");
43 | dev_signedIn.style.display = 'block';
44 |
45 | /*
46 | Code to Request Google Drive Later On
47 | var options = new gapi.auth2.SigninOptionsBuilder(
48 | {'scope': 'email https://www.googleapis.com/auth/drive'});
49 |
50 | googleUser.grant(options).then(
51 | function(success){
52 | console.log(JSON.stringify({message: "success", value: success}));
53 | },
54 | function(fail){
55 | alert(JSON.stringify({message: "fail", value: fail}));
56 | });
57 | */
58 |
59 | }
60 | // Logout
61 | //******************************************************************
62 | function OnGoogleSignOut() {
63 | var auth2 = gapi.auth2.getAuthInstance();
64 | auth2.signOut().then(function () {
65 | gapi.auth2.getAuthInstance().disconnect();
66 | var dev_signedIn = document.getElementById("dev_signedIn");
67 | dev_signedIn.style.display = 'none';
68 |
69 |
70 | var btn_googleSignIn = document.getElementById("btn_googleSignIn");
71 | btn_googleSignIn.style.display = 'block';
72 |
73 | console.log('User signed out.');
74 | });
75 | };
--------------------------------------------------------------------------------
/js/io/io_img.js:
--------------------------------------------------------------------------------
1 | var ioImgs = {};
2 |
3 | function io_import_img(filename, base64)
4 | {
5 | var key = filename;
6 | ioImgs[key.toString().trim().valueOf()] = base64;
7 | }
--------------------------------------------------------------------------------
/js/vx/vxCamera.js:
--------------------------------------------------------------------------------
1 | // View Projection Type
2 | //**************************************************
3 | const vxProjectionType = {
4 | Perspective: 0,
5 | Ortho: 1
6 | };
7 |
8 |
9 | vec3.transformMat4 = function(out, a, m) {
10 | var x = a[0],
11 | y = a[1],
12 | z = a[2],
13 | w = m[3] * x + m[7] * y + m[11] * z + m[15];
14 | w = w || 1.0;
15 | out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
16 | out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
17 | out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
18 | return out;
19 | };
20 |
21 |
22 | vec3.cross = function(out, a, b) {
23 | var ax = a[0],
24 | ay = a[1],
25 | az = a[2],
26 | bx = b[0],
27 | by = b[1],
28 | bz = b[2];
29 |
30 | out[0] = ay * bz - az * by;
31 | out[1] = az * bx - ax * bz;
32 | out[2] = ax * by - ay * bx;
33 | return out;
34 | };
35 |
36 | vec3.normalize = function(out, a) {
37 | var x = a[0],
38 | y = a[1],
39 | z = a[2];
40 | var len = x * x + y * y + z * z;
41 | if (len > 0) {
42 | //TODO: evaluate use of glm_invsqrt here?
43 | len = 1 / Math.sqrt(len);
44 | out[0] = a[0] * len;
45 | out[1] = a[1] * len;
46 | out[2] = a[2] * len;
47 | }
48 | return out;
49 | };
50 |
51 | function vxCamera() {
52 |
53 | // View matrix
54 | this.view = mat4.create();
55 |
56 | // Projection Matrix
57 | this.projection = mat4.create();
58 |
59 | this.nearPlane = 1;
60 |
61 | this.farPlane = 100000;
62 |
63 | this.mvp = mat4.create();
64 |
65 | // Zoom Amount
66 | this.zoom = -100;
67 |
68 | this.projectionType = vxProjectionType.Perspective;
69 |
70 | this.targetCenter = [0, 0, 0];
71 |
72 | this.target = [0, 0, 0];
73 |
74 | this.center = [0, 0, 0];
75 | this.eye = [0, 0, 0];
76 |
77 | // Roatation about the Y-Axis
78 | // This must be between 0 < theta < 2*PI
79 | this.theta = 0;
80 |
81 | // Angle about the X-Axis
82 | // This must be between 0 < phi < PI
83 | this.phi = 0;
84 |
85 |
86 | this.rotX = -45;
87 | this.rotY = 30;
88 | this.panX = 0;
89 | this.panY = 0;
90 |
91 | this.curZoom = 0;
92 |
93 | // The foward vector
94 | this.fwd = [0, 0, 0];
95 |
96 | // The up vector
97 | this.up = [0, 1, 0];
98 |
99 | // The right vector
100 | this.right = [0, 0, 0];
101 | }
102 |
103 | vxCamera.prototype.update = function() {
104 |
105 |
106 | var resp = 8;
107 | // monitored code goes here
108 | this.theta = Smooth(this.theta, DegToRad(this.rotX), resp);
109 | this.phi = Smooth(this.phi, DegToRad(this.rotY), resp);
110 | this.curZoom = Smooth(this.curZoom, this.zoom, resp);
111 |
112 |
113 | this.up[0] = Math.sin(this.theta) * Math.sin(this.phi);
114 | this.up[1] = Math.cos(this.phi);
115 | this.up[2] = -Math.cos(this.theta) * Math.sin(this.phi);
116 | //console.log(up);
117 |
118 | //var center = [0,0,0];
119 |
120 | // now get the foward vector, the right vector will be the x-product of that
121 | // and the up vector.
122 |
123 | this.eye = [0, 0, this.curZoom];
124 | this.eye[0] = Math.sin(this.theta) * Math.cos(this.phi) * this.curZoom;
125 | this.eye[1] = -Math.sin(this.phi) * this.curZoom;
126 | this.eye[2] = -Math.cos(this.theta) * Math.cos(this.phi) * this.curZoom;
127 |
128 | this.fwd[0] = this.center[0] - this.eye[0];
129 | this.fwd[1] = this.center[1] - this.eye[1];
130 | this.fwd[2] = this.center[2] - this.eye[2];
131 |
132 | var fwdN = [0, 0, 0];
133 | vec3.normalize(fwdN, this.fwd);
134 | //this.right
135 | vec3.cross(this.right, this.up, fwdN);
136 |
137 | modelprop_Center[0] += this.panY * this.up[0] + this.panX * this.right[0];
138 | modelprop_Center[1] += this.panY * this.up[1] + this.panX * this.right[1];
139 | modelprop_Center[2] += this.panY * this.up[2] + this.panX * this.right[2];
140 |
141 |
142 | this.panX = 0;
143 | this.panY = 0;
144 |
145 | this.target[0] = Smooth(this.target[0], modelprop_Center[0], 8);
146 | this.target[1] = Smooth(this.target[1], modelprop_Center[1], 8);
147 | this.target[2] = Smooth(this.target[2], modelprop_Center[2], 8);
148 |
149 | var factor = -this.curZoom / 800;
150 | // Update Projection
151 | if (this.projectionType == vxProjectionType.Perspective) {
152 | mat4.perspective(45, canvas.width / canvas.height, this.nearPlane, this.farPlane, this.projection);
153 | } else if (this.projectionType == vxProjectionType.Ortho) {
154 | mat4.ortho(-factor * canvas.width / 2, factor * canvas.width / 2, -factor * canvas.height / 2, factor * canvas.height / 2, -this.farPlane, this.farPlane, this.projection);
155 | }
156 |
157 | // Set the drawing position to the "identity" point, which is
158 | // the center of the scene.
159 | mat4.identity(this.view);
160 |
161 | // Set Zoom
162 | mat4.translate(this.view, [0, 0, this.curZoom]);
163 |
164 | // set panning
165 | mat4.translate(this.view, [-2 * this.panX / 10, -2 * this.panY / 10, 0]);
166 |
167 | // rotate
168 | mat4.rotate(this.view, this.phi, [1, 0, 0]);
169 | mat4.rotate(this.view, this.theta, [0, 1, 0]);
170 |
171 | // translate to the target
172 | mat4.translate(this.view, this.target);
173 |
174 | mat4.multiply(this.projection, this.view, this.mvp);
175 | // Save the current matrix, then rotate before we draw.
176 | };
177 |
178 |
179 | vxCamera.prototype.pan = function(deltaX, deltaY) {
180 |
181 | Camera.panX = (deltaX) / 500 * Camera.zoom;
182 | Camera.panY = (deltaY) / 500 * Camera.zoom;
183 |
184 | };
185 |
186 | vxCamera.prototype.rotate = function(deltaTheta, deltaPhi) {
187 | Camera.rotX += deltaTheta;
188 | Camera.rotY += deltaPhi;
189 | };
190 |
--------------------------------------------------------------------------------
/js/vx/vxColour.js:
--------------------------------------------------------------------------------
1 | function hexToRgb(hex) {
2 | // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
3 | var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
4 | hex = hex.replace(shorthandRegex, function(m, r, g, b) {
5 | return r + r + g + g + b + b;
6 | });
7 |
8 | var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
9 | return result ? {
10 | r: parseInt(result[1], 16),
11 | g: parseInt(result[2], 16),
12 | b: parseInt(result[3], 16)
13 | } : null;
14 | }
15 |
16 | function rgbToHex(r, g, b) {
17 | return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
18 | }
19 |
20 |
21 |
22 | function vxColour () {
23 |
24 | this.R=0;
25 | this.G=0;
26 | this.B=0;
27 | this.A=0;
28 | }
29 |
30 | function vxColour (r, g, b, a) {
31 | this.R = r;
32 | this.G = g;
33 | this.B = b;
34 | this.A = a;
35 | }
36 |
37 | vxColour.prototype.Create = function(r, g, b, a) {
38 | this.R = r;
39 | this.G = g;
40 | this.B = b;
41 | this.A = a;
42 | };
43 |
44 | vxColour.prototype.toString = function() {
45 | return "rgba("+parseInt(this.R*255)+", "+parseInt(this.G*255)+", "+parseInt(this.B*255)+", "+parseInt(this.A*255)+")";
46 | };
47 |
48 | //Function to convert hex format to a rgb color
49 |
50 | vxColour.prototype.toHex = function(){
51 | var color = "rgb("+parseInt(this.R*255)+", "+parseInt(this.G*255)+", "+parseInt(this.B*255)+")";
52 | if (color.substr(0, 1) === '#') {
53 | return color;
54 | }
55 | var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
56 |
57 | var red = parseInt(digits[2]);
58 | var green = parseInt(digits[3]);
59 | var blue = parseInt(digits[4]);
60 |
61 | var rgb = blue | (green << 8) | (red << 16);
62 | return digits[1] + '#' + rgb.toString(16);
63 | };
64 |
65 | // Set's the RGB values based on a index value
66 | vxColour.prototype.EncodeColour = function(index) {
67 | this.R = index % 255;
68 | this.G = Math.floor((index/255) % (255));
69 | this.B = Math.floor((index/(255 * 255)) % (255));
70 | this.A = 1;
71 |
72 | //Now scale down the values from 0-255 to 0-1
73 | this.R = this.R / 255;
74 | this.G = this.G / 255;
75 | this.B = this.B / 255;
76 | //this.A = this.A / 255;
77 | };
78 |
79 | // Set's the RGB values based on a index value
80 | vxColour.prototype.DecodeColour = function(r, g, b, a) {
81 | var index = 0;
82 |
83 | index = r + g * 255 + b * 255 * 255;
84 | return index;
85 | };
--------------------------------------------------------------------------------
/js/vx/vxCommand.js:
--------------------------------------------------------------------------------
1 | class vxCommand {
2 | constructor() {
3 | }
4 |
5 | HandleMouseClick(mesh)
6 | {
7 |
8 | }
9 |
10 | get Draw() {
11 |
12 | }
13 |
14 | }
15 |
16 | var measureCounts = 1;
17 | class vxMeasureCMD extends vxCommand {
18 | Init()
19 | {
20 | log("-----------------------------------");
21 | log("Starting Measurement Command");
22 | this.CurrentClick=1;
23 |
24 | this.Point1=null;
25 | this.Point2=null;
26 |
27 | this.Normal1 = [0,0,0];
28 | this.Normal2 = [0,0,0];
29 |
30 | document.getElementById('footer_text').innerHTML = "Select the first face...";
31 | }
32 |
33 | HandleMouseClick(mesh) {
34 | //console.log(mesh);
35 | if(this.CurrentClick == 1)
36 | {
37 | this.CurrentClick++;
38 | this.Point1 = mesh.Center;
39 | this.Normal1[0] = parseFloat(mesh.vert_noramls[0]);
40 | this.Normal1[1] = parseFloat(mesh.vert_noramls[1]);
41 | this.Normal1[2] = parseFloat(mesh.vert_noramls[2]);
42 |
43 | document.getElementById('footer_text').innerHTML = "Select the second face...";
44 | }
45 |
46 | else if(this.CurrentClick == 2)
47 | {
48 | this.CurrentClick++;
49 | this.Point2 = mesh.Center;
50 |
51 | this.Normal2[0] = parseFloat(mesh.vert_noramls[0]);
52 | this.Normal2[1] = parseFloat(mesh.vert_noramls[1]);
53 | this.Normal2[2] = parseFloat(mesh.vert_noramls[2]);
54 |
55 | //Now output the distance
56 | var name = 'dist.'+measureCounts;
57 | var distanceMesh = new vxMeasure(name, this.Point1, this.Point2, this.Normal1, this.Normal2);
58 |
59 | document.getElementById('footer_text').innerHTML = "Distance '" + name + "' is: " + distanceMesh.Length;
60 |
61 | measureCounts++;
62 |
63 | MeasureCollection.push(distanceMesh);
64 | log("-----------------------------------");
65 | }
66 | }
67 | }
68 |
69 |
70 |
71 | class vxMeasureAngleCMD extends vxCommand {
72 | Init()
73 | {
74 | log("-----------------------------------");
75 | log("Starting Angle Command");
76 | this.CurrentClick=1;
77 |
78 | this.Point1=null;
79 | this.Point2=null;
80 |
81 | this.Normal1 = [0,0,0];
82 | this.Normal2 = [0,0,0];
83 |
84 | document.getElementById('footer_text').innerHTML = "Select the first face...";
85 | }
86 |
87 | HandleMouseClick(mesh) {
88 | //console.log(mesh);
89 | if(this.CurrentClick == 1)
90 | {
91 | this.CurrentClick++;
92 | this.Point1 = mesh.Center;
93 |
94 | //TODO: change to vertices to get geometric normals
95 |
96 | // the average normal must be taken
97 | var temp_normal = [0,0,0];
98 | var faceCount = 0;
99 | for(var i = 0; i < mesh.vert_noramls.length; i+=3)
100 | {
101 | faceCount++;
102 | temp_normal[0] += parseFloat(mesh.vert_noramls[i+0]);
103 | temp_normal[1] += parseFloat(mesh.vert_noramls[i+1]);
104 | temp_normal[2] += parseFloat(mesh.vert_noramls[i+2]);
105 | }
106 |
107 | temp_normal[0] /= faceCount;
108 | temp_normal[1] /= faceCount;
109 | temp_normal[2] /= faceCount;
110 |
111 | this.Normal1[0] = temp_normal[0];
112 | this.Normal1[1] = temp_normal[1];
113 | this.Normal1[2] = temp_normal[2];
114 |
115 | document.getElementById('footer_text').innerHTML = "Select the second face...";
116 | }
117 |
118 | else if(this.CurrentClick == 2)
119 | {
120 | this.CurrentClick++;
121 | this.Point2 = mesh.Center;
122 |
123 | // the average normal must be taken
124 | var temp_normal = [0,0,0];
125 | var faceCount = 0;
126 | for(var i = 0; i < mesh.vert_noramls.length; i+=3)
127 | {
128 | faceCount++;
129 | temp_normal[0] += parseFloat(mesh.vert_noramls[i+0]);
130 | temp_normal[1] += parseFloat(mesh.vert_noramls[i+1]);
131 | temp_normal[2] += parseFloat(mesh.vert_noramls[i+2]);
132 | }
133 |
134 | temp_normal[0] /= faceCount;
135 | temp_normal[1] /= faceCount;
136 | temp_normal[2] /= faceCount;
137 |
138 | this.Normal2[0] = temp_normal[0];
139 | this.Normal2[1] = temp_normal[1];
140 | this.Normal2[2] = temp_normal[2];
141 |
142 | //Now output the distance
143 | var name = 'angle.'+measureCounts;
144 | var angleMesh = new vxMeasureAngle(name, this.Point1, this.Point2, this.Normal1, this.Normal2);
145 |
146 | document.getElementById('footer_text').innerHTML = "Angle '" + name + "' is: " + angleMesh.Angle;
147 |
148 | measureCounts++;
149 |
150 | MeasureCollection.push(angleMesh);
151 | log("-----------------------------------");
152 | }
153 | }
154 | }
--------------------------------------------------------------------------------
/js/vx/vxGeometry.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | // vxVertex2D
4 | // --------------------------------------------------------------------
5 | // A 2D Vector class which allows for basic operations.
6 | function vxVertex2D () {
7 | this.X = 0;
8 | this.Y = 0;
9 | }
10 |
11 | function vxVertex2D (x, y) {
12 | this.X = x;
13 | this.Y = y;
14 | }
15 |
16 | vxVertex2D.prototype.Set = function(x, y) {
17 | this.X = x;
18 | this.Y = y;
19 | };
20 |
21 | // Returns the length of the Vector.
22 | //
23 | // L = (x^2 + y^2 + z^2)^0.5
24 | //
25 | vxVertex2D.prototype.Length = function() {
26 | return Math.sqrt(this.X * this.X + this.Y * this.Y);
27 | };
28 |
29 | // Normalises this Vector with respect to it's length.
30 | // X = X/L, Y = Y/L
31 | vxVertex2D.prototype.Normalise = function() {
32 | var length = this.Length();
33 | this.X = this.X/length;
34 | this.Y = this.Y/length;
35 | };
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | // vxVertex3D
45 | // --------------------------------------------------------------------
46 | // A 3D Vector class which allows for basic operations.
47 | function vxVertex3D () {
48 | this.X = 0;
49 | this.Y = 0;
50 | this.Z = 0;
51 | }
52 |
53 | function vxVertex3D (x, y, z) {
54 | this.X = x;
55 | this.Y = y;
56 | this.Z = z;
57 | }
58 |
59 | vxVertex3D.prototype.Set = function(x, y, z) {
60 | this.X = x;
61 | this.Y = y;
62 | this.Z = z;
63 | };
64 |
65 | // Returns the length of the Vector.
66 | //
67 | // L = (x^2 + y^2 + z^2)^0.5
68 | //
69 | vxVertex3D.prototype.Length = function() {
70 | return Math.sqrt(this.X * this.X + this.Y * this.Y + this.Z * this.Z);
71 | };
72 |
73 | // Normalises this Vector with respect to it's length.
74 | // X = X/L, Y = Y/L, Z = Z/L
75 | vxVertex3D.prototype.Normalise = function() {
76 | var length = this.Length();
77 | this.X = this.X/length;
78 | this.Y = this.Y/length;
79 | this.Z = this.Z/length;
80 | };
81 |
82 | // Returns the Cross product of two vectors
83 | vxVertex3D.prototype.Cross = function(v1, v2) {
84 | return 1;
85 | };
86 |
87 | function sigDigs(val, sigdig){
88 | var bigVal = parseInt(val * Math.pow(10, sigdig));
89 |
90 | return bigVal/(Math.pow(10, sigdig));
91 | };
92 |
93 | vxVertex3D.prototype.toShortString = function() {
94 | var fig = 3;
95 | return "(" + sigDigs(this.X, fig) + ", " + sigDigs(this.Y, fig) + ", " + sigDigs(this.Z, fig) + ")";
96 | };
97 |
--------------------------------------------------------------------------------
/js/vx/vxPropteries.js:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | class vxProperty {
5 | constructor(gui) {
6 | this.gui = gui
7 | this.Type = "base"
8 | }
9 |
10 | remove() {
11 | }
12 | }
13 |
14 | class ModelProp extends vxProperty{
15 |
16 | constructor(gui, Name) {
17 | super(gui);
18 |
19 |
20 | this.Name = Name;
21 | this.NameNode = this.gui.add(this, 'Name');
22 | }
23 |
24 | remove() {
25 | this.gui.remove(this.NameNode);
26 |
27 | }
28 |
29 | }
30 |
31 |
32 | class VectorProperty extends vxProperty{
33 | constructor(gui, text, x, y, z) {
34 | super(gui);
35 | this.x = parseFloat(x);
36 | this.y = parseFloat(y);
37 | this.z = parseFloat(z);
38 |
39 | this.nrmStrn = text + ' (' + this.x + ',' + this.y + ',' + this.z+')';
40 | //this.folder = this.gui.addFolder('Normal (' + this.x + ',' + this.y + ',' + this.z+')');
41 |
42 | this.folder = this.gui.addFolder(this.nrmStrn);
43 | this.folder.add(this, 'x');
44 | this.folder.add(this, 'y');
45 | this.folder.add(this, 'z');
46 | }
47 |
48 | remove() {
49 | //this.folder.remove(this.nodex);
50 | //this.folder.remove(this, 'y');
51 | //this.folder.remove(this, 'z');
52 | this.gui.removeFolder(this.nrmStrn);
53 |
54 | }
55 | }
56 |
57 | var x = 0;
58 | class FaceProperty extends vxProperty{
59 |
60 | constructor(gui, mesh) {
61 | super(gui);
62 |
63 |
64 | this.Type = "face"
65 |
66 | x++;
67 | this.Name = mesh.Name;
68 | this.Mesh = mesh;
69 | console.log(mesh);
70 | this.Model = mesh.Mesh.Model.Name;
71 | this.x = 1;
72 |
73 | this.NameNode = this.gui.add(this, 'Name');
74 | this.ModelNode = this.gui.add(this, 'Model');
75 |
76 | // Set the Normal
77 | this.Normal = new VectorProperty(gui, "Normal", mesh.vert_noramls[0], mesh.vert_noramls[1], mesh.vert_noramls[2]);
78 |
79 | // Set Vertices
80 | this.Vertices = this.gui.addFolder("Vertices");
81 | this.Vertices.open();
82 |
83 | this.Vert1 = new VectorProperty(this.Vertices, "Vert 1", mesh.mesh_vertices[0], mesh.mesh_vertices[1], mesh.mesh_vertices[2]);
84 | this.Vert2 = new VectorProperty(this.Vertices, "Vert 2", mesh.mesh_vertices[3], mesh.mesh_vertices[4], mesh.mesh_vertices[5]);
85 | this.Vert3 = new VectorProperty(this.Vertices, "Vert 3", mesh.mesh_vertices[6], mesh.mesh_vertices[7], mesh.mesh_vertices[8]);
86 |
87 | }
88 |
89 | remove() {
90 |
91 | this.Normal.remove();
92 |
93 | this.gui.removeFolder("Vertices");
94 | //this.Vert1.remove();
95 |
96 | this.gui.remove(this.NameNode);
97 | this.gui.remove(this.ModelNode);
98 | }
99 |
100 | }
--------------------------------------------------------------------------------
/js/vxConsole.js:
--------------------------------------------------------------------------------
1 | function vxConsole() {
2 | this.form = document.getElementById('cntrl_console');
3 | this.textControl = document.getElementById('ui_console');
4 | this.textControl.textContent = '';
5 | this.isVisible = true;
6 |
7 | $('.ui-cntrl-console').mouseenter(function() {
8 | LogHasFocus = 1;
9 | });
10 | $('.ui-cntrl-console').mouseleave(function() {
11 | LogHasFocus = 0;
12 | });
13 | }
14 |
15 | vxConsole.prototype.ToggleVisibility = function() {
16 | this.isVisible = !this.isVisible;
17 | if (this.isVisible == true) {
18 | this.form.style.display = 'block';
19 | } else {
20 | this.form.style.display = 'none';
21 | }
22 | };
23 |
24 | vxConsole.prototype.WriteLine = function(input) {
25 | this.textControl.textContent += '\n' + input;
26 | this.textControl.scrollTop = 300; // this.textControl.scrollHeight;
27 | var objDiv = document.getElementById('ui_console_pre');
28 | objDiv.scrollTop = objDiv.scrollHeight - 95;
29 | Prism.highlightElement(this.textControl);
30 | };
31 |
--------------------------------------------------------------------------------
/lib/glmat/.gitignore:
--------------------------------------------------------------------------------
1 | .rvmrc
2 | .DS_Store
3 | tmp
4 | node_modules
5 | npm-debug.log
6 |
--------------------------------------------------------------------------------
/lib/glmat/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | sudo: false
3 | node_js:
4 | - "4.2"
5 | script:
6 | - webpack
7 | - webpack --config webpack.config.min.js
8 | - jasmine-node spec
9 |
--------------------------------------------------------------------------------
/lib/glmat/BUILDING.md:
--------------------------------------------------------------------------------
1 | Building for the browser
2 | ========================
3 |
4 | To build `gl-matrix.js` and `gl-matrix-min.js` for use in the browser install
5 | the required NPM dependencies first by running
6 |
7 | npm install
8 |
9 | from the this directory, then run the following command:
10 |
11 | npm run build-all
12 |
13 | This will build the full and minified versions of glMatrix as well as the docs.
--------------------------------------------------------------------------------
/lib/glmat/CNAME:
--------------------------------------------------------------------------------
1 | glmatrix.net
2 |
--------------------------------------------------------------------------------
/lib/glmat/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/lib/glmat/README.md:
--------------------------------------------------------------------------------
1 | glMatrix
2 | =======================
3 | [](https://travis-ci.org/toji/gl-matrix)
4 |
5 | Javascript has evolved into a language capable of handling realtime 3D graphics,
6 | via WebGL, and computationally intensive tasks such as physics simulations.
7 | These types of applications demand high performance vector and matrix math,
8 | which is something that Javascript doesn't provide by default.
9 | glMatrix to the rescue!
10 |
11 | glMatrix is designed to perform vector and matrix operations stupidly fast! By
12 | hand-tuning each function for maximum performance and encouraging efficient
13 | usage patterns through API conventions, glMatrix will help you get the most out
14 | of your browsers Javascript engine.
15 |
16 | Learn More
17 | ----------------------
18 | For documentation, news, tutorials, and more visit the [glMatrix Homepage](http://glmatrix.net/)
19 |
20 | Contributing
21 | ----------------------
22 | Contributions are welcome! Please provide unit tests for new functionality. (See TESTING.md for details)
23 |
--------------------------------------------------------------------------------
/lib/glmat/TESTING.md:
--------------------------------------------------------------------------------
1 | Running the test suite
2 | =======================
3 |
4 | The unit tests are built upon the following tools:
5 |
6 | * Jasmine -- the underlying test suite which executes the test and reports feedback
7 | * node.js -- used for testing at the command line, via the `jasmine-node` package
8 |
9 | To run the unit tests run the following command:
10 |
11 | npm run test
--------------------------------------------------------------------------------
/lib/glmat/VERSION:
--------------------------------------------------------------------------------
1 | 2.3.0
--------------------------------------------------------------------------------
/lib/glmat/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gl-matrix",
3 | "homepage": "http://glmatrix.net",
4 | "authors": [
5 | "Brandon Jones ",
6 | "Colin MacKenzie IV "
7 | ],
8 | "description": "Javascript Matrix and Vector library for High Performance WebGL apps",
9 | "main": "dist/gl-matrix-min.js",
10 | "ignore": [
11 | "**/.*",
12 | "jsdoc-template",
13 | "spec",
14 | "tasks",
15 | "Gemfile",
16 | "Gemfile.lock",
17 | "Rakefile",
18 | "TESTING.md"
19 | ],
20 | "keywords": [
21 | "webGL",
22 | "matrix",
23 | "vector"
24 | ],
25 | "license": "MIT"
26 | }
27 |
--------------------------------------------------------------------------------
/lib/glmat/docs/common.js.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | JSDoc: Source: common.js
6 |
7 |
8 |
9 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
Source: common.js
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
/* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
30 |
31 | Permission is hereby granted, free of charge, to any person obtaining a copy
32 | of this software and associated documentation files (the "Software"), to deal
33 | in the Software without restriction, including without limitation the rights
34 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
35 | copies of the Software, and to permit persons to whom the Software is
36 | furnished to do so, subject to the following conditions:
37 |
38 | The above copyright notice and this permission notice shall be included in
39 | all copies or substantial portions of the Software.
40 |
41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
42 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
44 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
45 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
46 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
47 | THE SOFTWARE. */
48 |
49 | /**
50 | * @class Common utilities
51 | * @name glMatrix
52 | */
53 | var glMatrix = {};
54 |
55 | // Configuration Constants
56 | glMatrix.EPSILON = 0.000001;
57 | glMatrix.ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;
58 | glMatrix.RANDOM = Math.random;
59 | glMatrix.ENABLE_SIMD = false;
60 |
61 | // Capability detection
62 | glMatrix.SIMD_AVAILABLE = (glMatrix.ARRAY_TYPE === this.Float32Array) && ('SIMD' in this);
63 | glMatrix.USE_SIMD = glMatrix.ENABLE_SIMD && glMatrix.SIMD_AVAILABLE;
64 |
65 | /**
66 | * Sets the type of array used when creating new vectors and matrices
67 | *
68 | * @param {Type} type Array type, such as Float32Array or Array
69 | */
70 | glMatrix.setMatrixArrayType = function(type) {
71 | glMatrix.ARRAY_TYPE = type;
72 | }
73 |
74 | var degree = Math.PI / 180;
75 |
76 | /**
77 | * Convert Degree To Radian
78 | *
79 | * @param {Number} a Angle in Degrees
80 | */
81 | glMatrix.toRadian = function(a){
82 | return a * degree;
83 | }
84 |
85 | /**
86 | * Tests whether or not the arguments have approximately the same value, within an absolute
87 | * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less
88 | * than or equal to 1.0, and a relative tolerance is used for larger values)
89 | *
90 | * @param {Number} a The first number to test.
91 | * @param {Number} b The second number to test.
92 | * @returns {Boolean} True if the numbers are approximately equal, false otherwise.
93 | */
94 | glMatrix.equals = function(a, b) {
95 | return Math.abs(a - b) <= glMatrix.EPSILON*Math.max(1.0, Math.abs(a), Math.abs(b));
96 | }
97 |
98 | module.exports = glMatrix;
99 |
/**
30 | * @fileoverview gl-matrix - High performance matrix and vector operations
31 | * @author Brandon Jones
32 | * @author Colin MacKenzie IV
33 | * @version 2.3.2
34 | */
35 |
36 | /* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
37 |
38 | Permission is hereby granted, free of charge, to any person obtaining a copy
39 | of this software and associated documentation files (the "Software"), to deal
40 | in the Software without restriction, including without limitation the rights
41 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42 | copies of the Software, and to permit persons to whom the Software is
43 | furnished to do so, subject to the following conditions:
44 |
45 | The above copyright notice and this permission notice shall be included in
46 | all copies or substantial portions of the Software.
47 |
48 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
54 | THE SOFTWARE. */
55 | // END HEADER
56 |
57 | exports.glMatrix = require("./gl-matrix/common.js");
58 | exports.mat2 = require("./gl-matrix/mat2.js");
59 | exports.mat2d = require("./gl-matrix/mat2d.js");
60 | exports.mat3 = require("./gl-matrix/mat3.js");
61 | exports.mat4 = require("./gl-matrix/mat4.js");
62 | exports.quat = require("./gl-matrix/quat.js");
63 | exports.vec2 = require("./gl-matrix/vec2.js");
64 | exports.vec3 = require("./gl-matrix/vec3.js");
65 | exports.vec4 = require("./gl-matrix/vec4.js");
/* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
30 |
31 | Permission is hereby granted, free of charge, to any person obtaining a copy
32 | of this software and associated documentation files (the "Software"), to deal
33 | in the Software without restriction, including without limitation the rights
34 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
35 | copies of the Software, and to permit persons to whom the Software is
36 | furnished to do so, subject to the following conditions:
37 |
38 | The above copyright notice and this permission notice shall be included in
39 | all copies or substantial portions of the Software.
40 |
41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
42 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
44 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
45 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
46 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
47 | THE SOFTWARE. */
48 |
49 | /**
50 | * @class Common utilities
51 | * @name glMatrix
52 | */
53 | var glMatrix = {};
54 |
55 | // Configuration Constants
56 | glMatrix.EPSILON = 0.000001;
57 | glMatrix.ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;
58 | glMatrix.RANDOM = Math.random;
59 | glMatrix.ENABLE_SIMD = false;
60 |
61 | // Capability detection
62 | glMatrix.SIMD_AVAILABLE = (glMatrix.ARRAY_TYPE === this.Float32Array) && ('SIMD' in this);
63 | glMatrix.USE_SIMD = glMatrix.ENABLE_SIMD && glMatrix.SIMD_AVAILABLE;
64 |
65 | /**
66 | * Sets the type of array used when creating new vectors and matrices
67 | *
68 | * @param {Type} type Array type, such as Float32Array or Array
69 | */
70 | glMatrix.setMatrixArrayType = function(type) {
71 | glMatrix.ARRAY_TYPE = type;
72 | }
73 |
74 | var degree = Math.PI / 180;
75 |
76 | /**
77 | * Convert Degree To Radian
78 | *
79 | * @param {Number} a Angle in Degrees
80 | */
81 | glMatrix.toRadian = function(a){
82 | return a * degree;
83 | }
84 |
85 | /**
86 | * Tests whether or not the arguments have approximately the same value, within an absolute
87 | * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less
88 | * than or equal to 1.0, and a relative tolerance is used for larger values)
89 | *
90 | * @param {Number} a The first number to test.
91 | * @param {Number} b The second number to test.
92 | * @returns {Boolean} True if the numbers are approximately equal, false otherwise.
93 | */
94 | glMatrix.equals = function(a, b) {
95 | return Math.abs(a - b) <= glMatrix.EPSILON*Math.max(1.0, Math.abs(a), Math.abs(b));
96 | }
97 |
98 | module.exports = glMatrix;
99 |
51 |
52 |
--------------------------------------------------------------------------------
/lib/glmat/jsdoc-template/publish.js:
--------------------------------------------------------------------------------
1 | /** Called automatically by JsDoc Toolkit. */
2 | function publish(symbolSet) {
3 | publish.conf = { // trailing slash expected for dirs
4 | ext: ".html",
5 | outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
6 | templatesDir: JSDOC.opt.t || SYS.pwd+"../jsdoc-template/",
7 | symbolsDir: "symbols/",
8 | srcDir: "symbols/src/"
9 | };
10 |
11 | // is source output is suppressed, just display the links to the source file
12 | if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
13 | Link.prototype._makeSrcLink = function(srcFilePath) {
14 | return "<"+srcFilePath+">";
15 | }
16 | }
17 |
18 | // create the folders and subfolders to hold the output
19 | IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
20 |
21 | // used to allow Link to check the details of things being linked to
22 | Link.symbolSet = symbolSet;
23 |
24 | // create the required templates
25 | try {
26 | var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
27 | var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl");
28 | }
29 | catch(e) {
30 | print("Couldn't create the required templates: "+e);
31 | quit();
32 | }
33 |
34 | // some ustility filters
35 | function hasNoParent($) {return ($.memberOf == "")}
36 | function isaFile($) {return ($.is("FILE"))}
37 | function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)}
38 |
39 | // get an array version of the symbolset, useful for filtering
40 | var symbols = symbolSet.toArray();
41 |
42 | // create the hilited source code files
43 | var files = JSDOC.opt.srcFiles;
44 | for (var i = 0, l = files.length; i < l; i++) {
45 | var file = files[i];
46 | var srcDir = publish.conf.outDir + "symbols/src/";
47 | makeSrcFile(file, srcDir);
48 | }
49 |
50 | // get a list of all the classes in the symbolset
51 | var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
52 |
53 | // create a filemap in which outfiles must be to be named uniquely, ignoring case
54 | if (JSDOC.opt.u) {
55 | var filemapCounts = {};
56 | Link.filemap = {};
57 | for (var i = 0, l = classes.length; i < l; i++) {
58 | var lcAlias = classes[i].alias.toLowerCase();
59 |
60 | if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1;
61 | else filemapCounts[lcAlias]++;
62 |
63 | Link.filemap[classes[i].alias] =
64 | (filemapCounts[lcAlias] > 1)?
65 | lcAlias+"_"+filemapCounts[lcAlias] : lcAlias;
66 | }
67 | }
68 |
69 | // create a class index, displayed in the left-hand column of every class page
70 | Link.base = "../";
71 | publish.classesIndex = classesTemplate.process(classes); // kept in memory
72 |
73 | // create each of the class pages
74 | for (var i = 0, l = classes.length; i < l; i++) {
75 | var symbol = classes[i];
76 |
77 | symbol.events = symbol.getEvents(); // 1 order matters
78 | symbol.methods = symbol.getMethods(); // 2
79 |
80 | Link.currentSymbol= symbol;
81 | var output = "";
82 | output = classTemplate.process(symbol);
83 |
84 | IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output);
85 | }
86 |
87 | // regenerate the index with different relative links, used in the index pages
88 | Link.base = "";
89 | publish.classesIndex = classesTemplate.process(classes);
90 |
91 | // create the class index page
92 | try {
93 | var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl");
94 | }
95 | catch(e) { print(e.message); quit(); }
96 |
97 | var classesIndex = classesindexTemplate.process(classes);
98 | IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex);
99 | classesindexTemplate = classesIndex = classes = null;
100 |
101 | // create the file index page
102 | try {
103 | var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
104 | }
105 | catch(e) { print(e.message); quit(); }
106 |
107 | var documentedFiles = symbols.filter(isaFile); // files that have file-level docs
108 | var allFiles = []; // not all files have file-level docs, but we need to list every one
109 |
110 | for (var i = 0; i < files.length; i++) {
111 | allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */")));
112 | }
113 |
114 | for (var i = 0; i < documentedFiles.length; i++) {
115 | var offset = files.indexOf(documentedFiles[i].alias);
116 | allFiles[offset] = documentedFiles[i];
117 | }
118 |
119 | allFiles = allFiles.sort(makeSortby("name"));
120 |
121 | // output the file index page
122 | var filesIndex = fileindexTemplate.process(allFiles);
123 | IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex);
124 | fileindexTemplate = filesIndex = files = null;
125 | }
126 |
127 |
128 | /** Just the first sentence (up to a full stop). Should not break on dotted variable names. */
129 | function summarize(desc) {
130 | if (typeof desc != "undefined")
131 | return desc.match(/([\w\W]+?\.)[^a-z0-9_$]/i)? RegExp.$1 : desc;
132 | }
133 |
134 | /** Make a symbol sorter by some attribute. */
135 | function makeSortby(attribute) {
136 | return function(a, b) {
137 | if (a[attribute] != undefined && b[attribute] != undefined) {
138 | a = a[attribute].toLowerCase();
139 | b = b[attribute].toLowerCase();
140 | if (a < b) return -1;
141 | if (a > b) return 1;
142 | return 0;
143 | }
144 | }
145 | }
146 |
147 | /** Pull in the contents of an external file at the given path. */
148 | function include(path) {
149 | var path = publish.conf.templatesDir+path;
150 | return IO.readFile(path);
151 | }
152 |
153 | /** Turn a raw source file into a code-hilited page in the docs. */
154 | function makeSrcFile(path, srcDir, name) {
155 | if (JSDOC.opt.s) return;
156 |
157 | if (!name) {
158 | name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_");
159 | name = name.replace(/\:/g, "_");
160 | }
161 |
162 | var src = {path: path, name:name, charset: IO.encoding, hilited: ""};
163 |
164 | if (defined(JSDOC.PluginManager)) {
165 | JSDOC.PluginManager.run("onPublishSrc", src);
166 | }
167 |
168 | if (src.hilited) {
169 | IO.saveFile(srcDir, name+publish.conf.ext, src.hilited);
170 | }
171 | }
172 |
173 | /** Build output for displaying function parameters. */
174 | function makeSignature(params) {
175 | if (!params) return "()";
176 | var signature = "("
177 | +
178 | params.filter(
179 | function($) {
180 | return $.name.indexOf(".") == -1; // don't show config params in signature
181 | }
182 | ).map(
183 | function($) {
184 | return $.name;
185 | }
186 | ).join(", ")
187 | +
188 | ")";
189 | return signature;
190 | }
191 |
192 | /** Find symbol {@link ...} strings in text and turn into html links */
193 | function resolveLinks(str, from) {
194 | str = str.replace(/\{@link ([^} ]+) ?\}/gi,
195 | function(match, symbolName) {
196 | return new Link().toSymbol(symbolName);
197 | }
198 | );
199 |
200 | return str;
201 | }
202 |
--------------------------------------------------------------------------------
/lib/glmat/jsdoc-template/static/header.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/lib/glmat/jsdoc-template/static/index.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 | glMatrix Documentation
7 |
8 |
19 |
--------------------------------------------------------------------------------
/lib/glmat/jsdoc-template/symbol.tmpl:
--------------------------------------------------------------------------------
1 |
2 | {+data.name+}
3 | {+data.memberOf+}
4 | {+data.isStatic+}
5 | {+data.isa+}
6 | {+data.desc+}
7 | {+data.classDesc+}
8 |
9 |
10 |
11 | {+method.name+}
12 | {+method.memberOf+}
13 | {+method.isStatic+}
14 | {+method.desc+}
15 |
16 |
17 | {+param.type+}
18 | {+param.name+}
19 | {+param.desc+}
20 | {+param.defaultValue+}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | {+property.name+}
29 | {+property.memberOf+}
30 | {+property.isStatic+}
31 | {+property.desc+}
32 | {+property.type+}
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/lib/glmat/jsdoc.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "source": {
3 | "include": [ "src/gl-matrix" ]
4 | },
5 | "opts": {
6 | "recurse": true,
7 | "destination": "./docs/"
8 | }
9 | }
--------------------------------------------------------------------------------
/lib/glmat/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gl-matrix",
3 | "description": "Javascript Matrix and Vector library for High Performance WebGL apps",
4 | "version": "2.3.2",
5 | "main": "src/gl-matrix.js",
6 | "homepage": "http://glmatrix.net",
7 | "bugs": {
8 | "url": "https://github.com/toji/gl-matrix/issues"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "https://github.com/toji/gl-matrix.git"
13 | },
14 | "contributors": [
15 | {
16 | "name": "Brandon Jones",
17 | "email": "tojiro@gmail.com"
18 | },
19 | {
20 | "name": "Colin MacKenzie IV",
21 | "email": "sinisterchipmunk@gmail.com"
22 | }
23 | ],
24 | "devDependencies": {
25 | "jasmine-node": "1.2.2",
26 | "jsdoc": "^3.4.0",
27 | "node-libs-browser": "^0.5.2",
28 | "simd": "2.0.0",
29 | "webpack": "^1.9.10"
30 | },
31 | "license": "MIT",
32 | "scripts": {
33 | "test": "jasmine-node spec",
34 | "doc": "jsdoc -c jsdoc.config.json",
35 | "build": "webpack",
36 | "build-min": "webpack --config webpack.config.min.js",
37 | "build-all": "webpack && webpack --config webpack.config.min.js && jsdoc -c jsdoc.config.json"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/glmat/spec/gl-matrix/common-spec.js:
--------------------------------------------------------------------------------
1 | /*
2 | * common.js unit test
3 | */
4 |
5 | describe("glMatrix", function(){
6 | var result;
7 |
8 | var glMatrix = require("../../src/gl-matrix/common.js");
9 |
10 | describe("toRadian", function(){
11 | beforeEach(function(){ result = glMatrix.toRadian(180); });
12 | it("should return a value of 3.141592654(Math.PI)", function(){ expect(result).toBeEqualish(Math.PI); });
13 | });
14 |
15 | describe("equals", function() {
16 | var r0, r1, r2;
17 | beforeEach(function() {
18 | r0 = glMatrix.equals(1.0, 0.0);
19 | r1 = glMatrix.equals(1.0, 1.0);
20 | r2 = glMatrix.equals(1.0+glMatrix.EPSILON/2, 1.0);
21 | });
22 | it("should return false for different numbers", function() { expect(r0).toBe(false); });
23 | it("should return true for the same number", function() { expect(r1).toBe(true); });
24 | it("should return true for numbers that are close", function() { expect(r2).toBe(true); });
25 | });
26 |
27 | });
28 |
--------------------------------------------------------------------------------
/lib/glmat/spec/gl-matrix/worker-spec.js:
--------------------------------------------------------------------------------
1 | /* spec tests gl-matrix when embedded into a Web Worker */
2 |
3 | // only test with workers if workers are available
4 | if (typeof(Worker) !== 'undefined') {
5 | describe("Embedded within Web Workers", function() {
6 | it("should initialize successfully", function() {
7 | var xhr = new XMLHttpRequest();
8 | var source = null;
9 | xhr.onreadystatechange = function() {
10 | if (this.readyState == this.DONE) {
11 | if (this.status == 200) {
12 | source = this.responseText;
13 | }
14 | }
15 | };
16 | xhr.open("GET", "/dist/gl-matrix-min.js");
17 | xhr.send();
18 |
19 | var result = null;
20 |
21 | waitsFor(function() {
22 | if (!source) return false;
23 | var blob = new Blob([
24 | source,
25 | "self.postMessage(vec3.create());"
26 | ],
27 | {type: "application/javascript"}
28 | );
29 |
30 | var worker = new Worker(URL.createObjectURL(blob));
31 | worker.onmessage = function(e) {
32 | result = e.data;
33 | };
34 | return true;
35 | });
36 |
37 | waitsFor(function() {
38 | if (!result) return false;
39 | expect(result).toBeEqualish([0, 0, 0]);
40 | return true;
41 | });
42 | });
43 | });
44 | }
45 |
--------------------------------------------------------------------------------
/lib/glmat/spec/helpers/spec-helper.js:
--------------------------------------------------------------------------------
1 | var HELPER_MATCHERS = (function() {
2 | var EPSILON = 0.00001;
3 |
4 | return {
5 | /*
6 | Returns true if `actual` has the same length as `expected`, and
7 | if each element of both arrays is within 0.000001 of each other.
8 | This is a way to check for "equal enough" conditions, as a way
9 | of working around floating point imprecision.
10 | */
11 | toBeEqualish: function(expected) {
12 | if (typeof(this.actual) == 'number')
13 | return Math.abs(this.actual - expected) < EPSILON;
14 |
15 | if (this.actual.length != expected.length) return false;
16 | for (var i = 0; i < this.actual.length; i++) {
17 | if (isNaN(this.actual[i]) !== isNaN(expected[i]))
18 | return false;
19 | if (Math.abs(this.actual[i] - expected[i]) >= EPSILON)
20 | return false;
21 | }
22 | return true;
23 | }
24 | };
25 | })();
26 |
27 | beforeEach(function() {
28 | this.addMatchers(HELPER_MATCHERS);
29 | });
30 |
31 | if (typeof(global) != 'undefined')
32 | global.HELPER_MATCHERS = HELPER_MATCHERS;
33 |
--------------------------------------------------------------------------------
/lib/glmat/spec/jasmine.yml:
--------------------------------------------------------------------------------
1 | # src_files
2 | #
3 | # Return an array of filepaths relative to src_dir to include before jasmine specs.
4 | # Default: []
5 | #
6 | # EXAMPLE:
7 | #
8 | # src_files:
9 | # - lib/source1.js
10 | # - lib/source2.js
11 | # - dist/**/*.js
12 | #
13 | src_files:
14 | - src/gl-matrix.js
15 | - src/gl-matrix/common.js
16 |
17 | # stylesheets
18 | #
19 | # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
20 | # Default: []
21 | #
22 | # EXAMPLE:
23 | #
24 | # stylesheets:
25 | # - css/style.css
26 | # - stylesheets/*.css
27 | #
28 | stylesheets:
29 |
30 | # helpers
31 | #
32 | # Return an array of filepaths relative to spec_dir to include before jasmine specs.
33 | # Default: ["helpers/**/*.js"]
34 | #
35 | # EXAMPLE:
36 | #
37 | # helpers:
38 | # - helpers/**/*.js
39 | #
40 | helpers:
41 |
42 | # spec_files
43 | #
44 | # Return an array of filepaths relative to spec_dir to include.
45 | # Default: ["**/*[sS]pec.js"]
46 | #
47 | # EXAMPLE:
48 | #
49 | # spec_files:
50 | # - **/*[sS]pec.js
51 | #
52 | spec_files:
53 |
54 | # src_dir
55 | #
56 | # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
57 | # Default: project root
58 | #
59 | # EXAMPLE:
60 | #
61 | # src_dir: public
62 | #
63 | src_dir:
64 |
65 | # spec_dir
66 | #
67 | # Spec directory path. Your spec_files must be returned relative to this path.
68 | # Default: spec/javascripts
69 | #
70 | # EXAMPLE:
71 | #
72 | # spec_dir: spec/javascripts
73 | #
74 | spec_dir: spec
75 |
--------------------------------------------------------------------------------
/lib/glmat/src/gl-matrix.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @fileoverview gl-matrix - High performance matrix and vector operations
3 | * @author Brandon Jones
4 | * @author Colin MacKenzie IV
5 | * @version 2.3.2
6 | */
7 |
8 | /* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in
18 | all copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26 | THE SOFTWARE. */
27 | // END HEADER
28 |
29 | exports.glMatrix = require("./gl-matrix/common.js");
30 | exports.mat2 = require("./gl-matrix/mat2.js");
31 | exports.mat2d = require("./gl-matrix/mat2d.js");
32 | exports.mat3 = require("./gl-matrix/mat3.js");
33 | exports.mat4 = require("./gl-matrix/mat4.js");
34 | exports.quat = require("./gl-matrix/quat.js");
35 | exports.vec2 = require("./gl-matrix/vec2.js");
36 | exports.vec3 = require("./gl-matrix/vec3.js");
37 | exports.vec4 = require("./gl-matrix/vec4.js");
--------------------------------------------------------------------------------
/lib/glmat/src/gl-matrix/common.js:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE. */
20 |
21 | /**
22 | * @class Common utilities
23 | * @name glMatrix
24 | */
25 | var glMatrix = {};
26 |
27 | // Configuration Constants
28 | glMatrix.EPSILON = 0.000001;
29 | glMatrix.ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;
30 | glMatrix.RANDOM = Math.random;
31 | glMatrix.ENABLE_SIMD = false;
32 |
33 | // Capability detection
34 | glMatrix.SIMD_AVAILABLE = (glMatrix.ARRAY_TYPE === this.Float32Array) && ('SIMD' in this);
35 | glMatrix.USE_SIMD = glMatrix.ENABLE_SIMD && glMatrix.SIMD_AVAILABLE;
36 |
37 | /**
38 | * Sets the type of array used when creating new vectors and matrices
39 | *
40 | * @param {Type} type Array type, such as Float32Array or Array
41 | */
42 | glMatrix.setMatrixArrayType = function(type) {
43 | glMatrix.ARRAY_TYPE = type;
44 | }
45 |
46 | var degree = Math.PI / 180;
47 |
48 | /**
49 | * Convert Degree To Radian
50 | *
51 | * @param {Number} a Angle in Degrees
52 | */
53 | glMatrix.toRadian = function(a){
54 | return a * degree;
55 | }
56 |
57 | /**
58 | * Tests whether or not the arguments have approximately the same value, within an absolute
59 | * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less
60 | * than or equal to 1.0, and a relative tolerance is used for larger values)
61 | *
62 | * @param {Number} a The first number to test.
63 | * @param {Number} b The second number to test.
64 | * @returns {Boolean} True if the numbers are approximately equal, false otherwise.
65 | */
66 | glMatrix.equals = function(a, b) {
67 | return Math.abs(a - b) <= glMatrix.EPSILON*Math.max(1.0, Math.abs(a), Math.abs(b));
68 | }
69 |
70 | module.exports = glMatrix;
71 |
--------------------------------------------------------------------------------
/lib/glmat/webpack.config.js:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE. */
20 |
21 | var fs = require('fs');
22 | var webpack = require('webpack');
23 |
24 | var entryFile = './src/gl-matrix.js';
25 |
26 | // Read the comments from the top of the main gl-matrix file and append them to
27 | // the minified version.
28 | var header = '';
29 | var mainFile = fs.readFileSync(entryFile, { encoding: 'utf8' });
30 | if (mainFile) {
31 | var headerIndex = mainFile.indexOf('\/\/ END HEADER');
32 | if (headerIndex >= 0) {
33 | header = mainFile.substr(0, headerIndex);
34 | }
35 | }
36 |
37 | module.exports = {
38 | entry: entryFile,
39 | output: {
40 | path: __dirname + '/dist',
41 | filename: 'gl-matrix.js',
42 | libraryTarget: 'umd'
43 | },
44 | plugins: [
45 | new webpack.BannerPlugin(header, { raw: true }),
46 | ]
47 | };
--------------------------------------------------------------------------------
/lib/glmat/webpack.config.min.js:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE. */
20 |
21 | var webpack = require('webpack');
22 | module.exports = require('./webpack.config.js');
23 |
24 | module.exports.plugins.unshift(
25 | new webpack.optimize.UglifyJsPlugin()
26 | );
27 |
28 | module.exports.output.filename = 'gl-matrix-min.js';
--------------------------------------------------------------------------------
/lib/prism/prism.css:
--------------------------------------------------------------------------------
1 | /* PrismJS 1.15.0
2 | https://prismjs.com/download.html#themes=prism-okaidia&languages=markup+css+clike+javascript */
3 | /**
4 | * okaidia theme for JavaScript, CSS and HTML
5 | * Loosely based on Monokai textmate theme by http://www.monokai.nl/
6 | * @author ocodia
7 | */
8 |
9 | code[class*='language-'],
10 | pre[class*='language-'] {
11 | color: #f8f8f2;
12 | background: none;
13 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
14 | font-size: 12px;
15 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
16 | text-align: left;
17 | white-space: pre;
18 | word-spacing: normal;
19 | word-break: normal;
20 | word-wrap: normal;
21 | line-height: 1.5;
22 |
23 | -moz-tab-size: 4;
24 | -o-tab-size: 4;
25 | tab-size: 4;
26 |
27 | -webkit-hyphens: none;
28 | -moz-hyphens: none;
29 | -ms-hyphens: none;
30 | hyphens: none;
31 | }
32 |
33 | /* Code blocks */
34 | pre[class*='language-'] {
35 | padding: 1em;
36 | margin: 0.5em 0;
37 | overflow: auto;
38 | border-radius: 0.3em;
39 | }
40 |
41 | :not(pre) > code[class*='language-'],
42 | pre[class*='language-'] {
43 | background: #20202000;
44 | }
45 |
46 | /* Inline code */
47 | :not(pre) > code[class*='language-'] {
48 | padding: 0.1em;
49 | border-radius: 0.3em;
50 | white-space: normal;
51 | }
52 |
53 | .token.comment,
54 | .token.prolog,
55 | .token.doctype,
56 | .token.cdata {
57 | color: slategray;
58 | }
59 |
60 | .token.punctuation {
61 | color: #f8f8f2;
62 | }
63 |
64 | .namespace {
65 | opacity: 0.7;
66 | }
67 |
68 | .token.property,
69 | .token.tag,
70 | .token.constant,
71 | .token.symbol,
72 | .token.deleted {
73 | color: #f92672;
74 | }
75 |
76 | .token.boolean,
77 | .token.number {
78 | color: #ae81ff;
79 | }
80 |
81 | .token.selector,
82 | .token.attr-name,
83 | .token.string,
84 | .token.char,
85 | .token.builtin,
86 | .token.inserted {
87 | color: #a6e22e;
88 | }
89 |
90 | .token.operator,
91 | .token.entity,
92 | .token.url,
93 | .language-css .token.string,
94 | .style .token.string,
95 | .token.variable {
96 | color: #f8f8f2;
97 | }
98 |
99 | .token.atrule,
100 | .token.attr-value,
101 | .token.function,
102 | .token.class-name {
103 | color: #e6db74;
104 | }
105 |
106 | .token.keyword {
107 | color: #66d9ef;
108 | }
109 |
110 | .token.regex,
111 | .token.important {
112 | color: #fd971f;
113 | }
114 |
115 | .token.important,
116 | .token.bold {
117 | font-weight: bold;
118 | }
119 | .token.italic {
120 | font-style: italic;
121 | }
122 |
123 | .token.entity {
124 | cursor: help;
125 | }
126 |
--------------------------------------------------------------------------------
/lib/stats.min.js:
--------------------------------------------------------------------------------
1 | // stats.js - http://github.com/mrdoob/stats.js
2 | var Stats=function(){function h(a){c.appendChild(a.dom);return a}function k(a){for(var d=0;de+1E3&&(r.update(1E3*a/(c-e),100),e=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){g=this.end()},domElement:c,setMode:k}};
4 | Stats.Panel=function(h,k,l){var c=Infinity,g=0,e=Math.round,a=e(window.devicePixelRatio||1),r=80*a,f=48*a,t=3*a,u=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement("canvas");q.width=r;q.height=f;q.style.cssText="width:80px;height:48px";var b=q.getContext("2d");b.font="bold "+9*a+"px Helvetica,Arial,sans-serif";b.textBaseline="top";b.fillStyle=l;b.fillRect(0,0,r,f);b.fillStyle=k;b.fillText(h,t,u);b.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(f,
5 | v){c=Math.min(c,f);g=Math.max(g,f);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=k;b.fillText(e(f)+" "+h+" ("+e(c)+"-"+e(g)+")",t,u);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,e((1-f/v)*p))}}};"object"===typeof module&&(module.exports=Stats);
6 |
--------------------------------------------------------------------------------
/lib/vx-ui-ribbon/img/arw_dwn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-ribbon/img/arw_dwn.png
--------------------------------------------------------------------------------
/lib/vx-ui-ribbon/ribbon.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --tab-bg-color: #323232;
3 | --tab-fg-colour-unselected: #aaa;
4 | --tab-fg-colour: #333;
5 |
6 | /* Main Tab Colours */
7 | --maintab-bg-colour: #ff7e00;
8 | --maintab-bg-colour-hover: #ffa64f;
9 | --maintab-fg-colour: #333;
10 | --maintab-fg-colour-hover: #000;
11 |
12 |
13 | --content-bg-color: #ddd;
14 | --content-fg-color: #333;
15 | --gui-selected: #00abff;
16 | }
17 |
18 | .vx-rbn-cntrl{
19 | border: 1px solid #333;
20 | font-family: Arial;
21 | font-size: 11px;
22 | }
23 |
24 | .vx-rbn-headerbar{
25 | text-align: center;
26 | background-color: var(--tab-bg-color);
27 | height: 2px;
28 | color: #aaa;
29 | }
30 | .vx-rbn-titlebar{
31 | padding: 6px;
32 | }
33 |
34 | /* Style the tab */
35 | .vx-rbn-tab-header {
36 | overflow: hidden;
37 | background-color: var(--tab-bg-color);
38 | }
39 |
40 | /* Style the buttons that are used to open the tab content */
41 | .vx-rbn-tab {
42 | color: var(--tab-fg-colour-unselected);
43 | background-color: var(--tab-bg-color);
44 | float: left;
45 | border: none;
46 | outline: none;
47 | cursor: pointer;
48 | padding: 4px 24px;
49 | margin: 0px 1px;
50 | transition: 0.3s;
51 | }
52 |
53 | /* Change background color of buttons on hover */
54 | .vx-rbn-tab:hover {
55 | background-color: #646464;
56 | color: #ccc;
57 | }
58 |
59 | /* Create an active/current tablink class */
60 | .vx-rbn-tab.active {
61 | background-color: var(--content-bg-color);
62 | color: #333;
63 | }
64 |
65 | #mainTab {
66 | background-color: var(--maintab-bg-colour);
67 | color: var(--maintab-fg-colour);
68 | }
69 |
70 | #mainTab:hover {
71 | background-color: var(--maintab-bg-colour-hover);
72 | color: var(--maintab-fg-colour-hover);
73 | }
74 |
75 | /* Style the tab content */
76 | .vx-rbn-tab-content {
77 | background-color: var(--content-bg-color);
78 | display: none;
79 | padding: 6px 12px;
80 | height: 80px;
81 |
82 | /*animation: fadeEffect 0.15s; /* Fading effect takes 1 second */
83 | }
84 |
85 | /* Go from zero to full opacity */
86 | @keyframes fadeEffect {
87 | from {opacity: 0;}
88 | to {opacity: 1;}
89 | }
90 |
91 | .vx-rbn-tab-content ul {
92 | list-style-type: none;
93 | margin: 0;
94 | padding: 0;
95 | display: flex;
96 | flex-direction: column;
97 | flex-wrap: wrap;
98 | height:64px;
99 | width: 400px;
100 | }
101 |
102 | .vx-rbn-tab-group{
103 |
104 | width:100%;
105 | border: 1px solid transparent;
106 | border-color: transparent #777 transparent transparent;
107 | }
108 |
109 |
110 | .vx-rbn-tab-group-footer{
111 | width:100%;
112 | color: #555;
113 | text-align: center;
114 | margin: 0;
115 | }
116 |
117 | .vx-rbn-break
118 | {
119 | height: 96px;
120 | }
121 |
122 |
123 | .vx-rbn-seperator {
124 | border-left: 1px solid #aaa;
125 | height: 92px;
126 | margin: 0px 10px 0px 10px;
127 | }
128 |
129 | .vx-rbn-btn {
130 | color: #333;
131 | background-color: var(--content-bg-color);
132 | border: 1px solid var(--content-bg-color);
133 | outline: none;
134 | cursor: pointer;
135 | padding: 0px 16px 6px 16px;
136 | transition: 0.3s;
137 | margin: 2px 2px;
138 | }
139 |
140 | .vx-rbn-btn[btn-size="large"]{
141 | color: #333;
142 | background-color: var(--content-bg-color);
143 | border: 1px solid var(--content-bg-color);
144 | outline: none;
145 | cursor: pointer;
146 | padding: 4px 16px;
147 | transition: 0.3s;
148 | padding-bottom: 10px;
149 | margin: 2px 2px;
150 | }
151 | .vx-rbn-btn::before {
152 | width: 16px;
153 | height: 16px;
154 | position: relative;
155 | left:-5px;
156 | bottom: -4px;
157 | }
158 |
159 | .vx-rbn-btn[btn-size="large"]::before {
160 |
161 | width: 32px;
162 | height: 32px;
163 | display: block;
164 | white-space: normal;
165 | word-wrap: break-word;
166 | left:0px;
167 | bottom: 0px;
168 | }
169 |
170 | .vx-rbn-btn:hover {
171 | border-radius: 2px;
172 | color: #222;
173 | background-color: #eee;
174 | border: 1px solid #777;
175 | }
176 | .vx-rbn-btn:active {
177 | transition: 0s;
178 | background-color: var(--gui-selected);
179 | color: #fff;
180 | border: 1px solid #555;
181 | }
182 |
183 |
184 |
185 | .vx-rbn-drpdwn {
186 | color: #333;
187 | background-color: var(--content-bg-color);
188 | border: 1px solid var(--content-bg-color);
189 | outline: none;
190 | text-align: left;
191 | cursor: pointer;
192 | padding: 0px 16px 6px 16px;
193 | transition: 0.3s;
194 | margin: 20px 2px;
195 | width: 150px;
196 | transition: 0.3s;
197 | }
198 |
199 | /*the container must be positioned relative:*/
200 | .vx-rbn-drpdwn-select {
201 | position: relative;
202 | width: 125px;
203 | margin: 2px 2px;
204 | }
205 |
206 |
207 |
208 | .vx-rbn-drpdwn-select select {
209 | display: none; /*hide original SELECT element:*/
210 | }
211 | .select-selected {
212 | background-color: var(--content-bg-color);
213 | transition: 0.3s;
214 | }
215 | /*style the arrow inside the select element:*/
216 | .select-selected:after {
217 | position: absolute;
218 | content: "";
219 | top: 8px;
220 | right: 10px;
221 | width: 0;
222 | height: 0;
223 | border: 6px solid transparent;
224 | border-color: #777 transparent transparent transparent;
225 | }
226 | /*point the arrow upwards when the select box is open (active):*/
227 | .select-selected.select-arrow-active:after {
228 | border-color: transparent transparent #333 transparent;
229 | top: 3px;
230 | }
231 | .select-selected {
232 | color: var(--content-fg-color);
233 | border: 1px solid transparent;
234 | cursor: pointer;
235 | padding: 2px 18px 6px 16px;
236 | transition: 0.3s;
237 | margin: 2px 2px;
238 | }
239 | .select-selected:before{
240 | content:url('../img/main/import.png');
241 | position: relative;
242 | left: -5px;
243 | bottom: -3px;
244 | }
245 | /*style the items (options), including the selected item:*/
246 | .select-items div{
247 | color: var(--content-fg-color);
248 | border: 1px solid transparent;
249 | cursor: pointer;
250 | padding: 4px 14px 6px 16px;
251 | transition: 0.3s;
252 | margin: 2px 2px;
253 |
254 | }
255 |
256 | .select-selected:hover{
257 | background-color: #eee;
258 | border: 1px solid #777;
259 | }
260 |
261 | /*style items (options):*/
262 | .select-items {
263 | position: absolute;
264 | background-color: #fff;
265 | top: 100%;
266 | left: 0;
267 | right: 0;
268 | z-index: 99;
269 | border: 1px solid #777;
270 | }
271 | /*hide the items when the select box is closed:*/
272 | .select-hide {
273 | display: none;
274 | }
275 |
276 | .select-items div:before{
277 | content:url('../img/main/import.png');
278 | position: relative;
279 | left: -5px;
280 | bottom: -3px;
281 | }
282 |
283 | .select-items div:hover {
284 | background-color: var(--gui-selected);
285 | }
286 |
287 |
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/arrow_bullet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/arrow_bullet.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/arrow_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/arrow_down.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/arrow_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/arrow_empty.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/arrow_right.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/check_box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/check_box.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/check_box_mix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/check_box_mix.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/check_box_uncheck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/check_box_uncheck.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/img/folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VirtexEdgeDesign/Iris-Web-Viewer/51dbcbb6ae724ec2d33d7748870aee8115f733c1/lib/vx-ui-tree/img/folder.png
--------------------------------------------------------------------------------
/lib/vx-ui-tree/tree.css:
--------------------------------------------------------------------------------
1 |
2 | .tree-control,
3 | .tree-control *
4 | {
5 | padding: 0;
6 | margin: ;
7 | font-family: Arial;
8 | font-size: 11px;
9 | cursor: pointer;
10 | transition: 0.2s;
11 | }
12 |
13 | .tree-control li ul
14 | {
15 | margin: 0 0 0 16px;
16 | }
17 |
18 | input[type=checkbox] {
19 | position: absolute;
20 | top: -9999px;
21 | left: -9999px;
22 | }
23 |
24 | .tree-control ul{
25 | list-style-type: none;
26 | }
27 |
28 | .tree-node{
29 | display: inline-block;
30 | margin: ;
31 | padding: 2px;
32 | }
33 | /* Text And Icon Location */
34 | .tree-node span{
35 | position: relative;
36 | top: -3px;
37 | padding: 5px 6px 3px 3px;
38 | border: solid 1px transparent;
39 |
40 |
41 | background-color: rgba(50,50,50,0.5);
42 | border: solid 1px rgba(20,20,20,0.5);
43 | }
44 |
45 | .tree-node span:hover{
46 | background-color: #00abff;
47 | border: solid 1px #0055ff;
48 | }
49 |
50 | .tree-node span:before{
51 | position: relative;
52 | top: 3px;
53 | left: -2px;
54 | }
55 |
56 | .tree-node span[icon="default"]::before{
57 | content: url('img/folder.png');
58 | }
59 |
60 |
61 |
62 | .tree-node-arrow{
63 | transition: 0.2s;
64 | content: url('img/arrow_right.png');
65 | border: solid 1px transparent;
66 | }
67 | .tree-node-arrow[show="yes"]:hover{
68 | background-color: #00abff;
69 | border: solid 1px #0066ff;
70 | }
71 |
72 | .tree-node-arrow[show="no"]{
73 | content: url('img/arrow_empty.png');
74 | }
75 |
76 |
77 | /* Node Items */
78 | .tree-node input[type=checkbox]:checked ~ .tree-node-arrow[show="yes"] {
79 | content: url('img/arrow_down.png');
80 | }
81 |
82 | .tree-node input[type=checkbox]:checked ~ li
83 | {
84 | display: block;
85 | }
86 |
87 | .tree-node input[type=checkbox]:not(:checked) ~ li
88 | {
89 | display: none;
90 | }
91 |
92 |
93 | .tree-node-chkbx{
94 | padding: 1px;
95 | background-color: transparent;
96 | border: none;
97 | }
98 |
99 | .tree-node-chkbx:hover{
100 | background-color: #00abff;
101 | }
102 |
103 | .tree-node-chkbx-img{
104 | content: url('img/check_box_uncheck.png');
105 | }
106 |
107 | .tree-node-chkbx-img[status="checked"] {
108 | content: url('img/check_box.png');
109 | }
110 |
111 |
112 | .tree-node-chkbx-img[status="mixed"] {
113 | content: url('img/check_box.png');
114 | }
115 |
--------------------------------------------------------------------------------
/lib/vx-ui-tree/tree.js:
--------------------------------------------------------------------------------
1 |
2 | function vxTreeControl (divID) {
3 |
4 | // First create the Tree Control
5 | this.divID = divID;
6 | this.tree = document.createElement("DIV");
7 | this.tree.setAttribute("id", "tree_"+divID);
8 | this.tree.classList.add("tree-control");
9 |
10 | document.getElementById(divID).appendChild(this.tree);
11 |
12 | this.visible = true;
13 | }
14 |
15 |
16 | vxTreeControl.prototype.ToggleVisibility = function(newNode) {
17 | if(this.visible == true)
18 | {
19 | this.visible = false;
20 | document.getElementById("tree_"+this.divID).style.display = "none";
21 | }
22 | else{
23 | this.visible = true;
24 | document.getElementById("tree_"+this.divID).style.display = "block";
25 | }
26 | };
27 |
28 | vxTreeControl.prototype.SetRootNode = function(newNode) {
29 | this.tree.appendChild(newNode.treenode);
30 | };
31 |
32 | vxTreeControl.prototype.AddNode = function(newNode, parentNodeID) {
33 | var parent = document.getElementById(parentNodeID);
34 | if(parent){
35 | var li = document.createElement("li");
36 | li.appendChild(newNode.treenode);
37 | parent.appendChild(li);
38 |
39 | // Now tell the parent node it has children so the arrow texture will show
40 | var arw = parent.getElementsByClassName("tree-node-arrow")[0];
41 | arw.setAttribute("show", "yes");
42 | }
43 | };
44 |
45 | function vxTreeNode (id, text, icon) {
46 |
47 | // Set up variables
48 | this.IsChecked = true;
49 |
50 | if(!icon){
51 | icon = "default";
52 | }
53 | // Now create the HTML elements
54 |
55 | // First, the UL
56 | this.treenode = document.createElement("ul");
57 | this.treenode.classList.add("tree-node");
58 | this.treenode.setAttribute("id", id);
59 |
60 | // Next, the Arrow
61 | //
62 | //
63 | this.arrowInpt = document.createElement("input");
64 | this.arrowInpt.setAttribute("type", "checkbox");
65 |
66 | this.arrowInpt.setAttribute("id", "arw_"+id);
67 | this.treenode.appendChild(this.arrowInpt);
68 |
69 | this.arrowLabel = document.createElement("label");
70 | this.arrowLabel.classList.add("tree-node-arrow");
71 | this.arrowLabel.setAttribute("for", "arw_"+id);
72 | //this.arrowInpt.setAttribute("id", "arw_img_"+id);
73 | this.arrowLabel.setAttribute("show", "no");
74 | this.treenode.appendChild(this.arrowLabel);
75 |
76 |
77 | //
78 | //Hello
79 | this.CheckBox = document.createElement("button");
80 | this.CheckBox.classList.add("tree-node-chkbx");
81 | this.CheckBox.setAttribute("id", "chkbx_"+id);
82 | this.CheckBox.addEventListener("click", function(e) {
83 | var img = e.path[0];
84 | var isChecked = false;
85 |
86 | if(img.getAttribute("status")=="checked"){
87 | isChecked = false;
88 | img.setAttribute("status", "not-checked"); // added line
89 | }
90 | else{
91 | isChecked = true;
92 | img.setAttribute("status", "checked"); // added line
93 | }
94 |
95 | this.setAttribute("toggle", isChecked); // added line
96 | var event = new CustomEvent('onNodeCheckChanged',
97 | {
98 | detail:{
99 | nodeId: id ,
100 | isChecked: isChecked
101 | }
102 | });
103 | // target can be any Element or other EventTarget.
104 | this.dispatchEvent(event);
105 | });
106 |
107 | this.chkBxImg = document.createElement("img");
108 | this.chkBxImg.setAttribute("status", "checked"); // added line
109 | this.chkBxImg.classList.add("tree-node-chkbx-img");
110 | this.CheckBox.appendChild(this.chkBxImg);
111 | this.treenode.appendChild(this.CheckBox);
112 |
113 | this.Text = document.createElement("span");
114 | this.Text.innerHTML = text;
115 | this.Text.setAttribute("icon", icon);
116 | this.treenode.appendChild(this.Text);
117 |
118 | }
119 |
120 | vxTreeNode.prototype.AddNode = function(newNode) {
121 | var li = document.createElement("li");
122 | li.appendChild(newNode.treenode);
123 | this.treenode.appendChild(li);
124 | this.arrowLabel.setAttribute("show", "yes");
125 | };
126 |
127 |
128 | vxTreeNode.prototype.Expand = function(newNode) {
129 | this.arrowInpt.setAttribute("checked", "checked"); // added line
130 | };
131 |
132 | vxTreeNode.prototype.Collapse = function(newNode) {
133 | this.arrowInpt.setAttribute("checked", ""); // added line
134 | };
--------------------------------------------------------------------------------
/privacy.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Iris Web Viewer - Fine Print
5 |
6 |
34 |
35 |
36 |
Iris Web Viewer
37 |
38 |
Privacy Policy
39 |
40 | Iris Web Viewer does not save any user information, whether it be google drive log in info or opened 3D files. In terms of opening and parsing files, everything is done on the client side and nothing regarding file content is sent back to the servers.
41 |
42 |
43 | If you have a comment, question or complaint, you can post to
44 | our forum here.
45 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/wiki/libExporting.md:
--------------------------------------------------------------------------------
1 | # Exporter
2 | Currently only ".stl" files can be exported in Iris Web Viewer. There are some things to be aware of how the files are exported as well.
3 |
4 | ## STL
5 | STL files are often used for 3D printing which makes them very common and are a useful file extension. Iris can export ASCII stl files which are then saved to the users download folder.
6 |
7 | ### Notes
8 | * STL files only specify one normal per face, therefore the exported Normal for each face is the average of all three vertices. This means that if each vertice of a given face has a different normal, the result in the export file will be averaged and shared among each vertex.
--------------------------------------------------------------------------------
/wiki/libImporting.md:
--------------------------------------------------------------------------------
1 | # Importers
2 | The method to open files in Iris is by importing them. This can be found in the side bar by clicking 'Menu'. Below each type of importer is noted, although for some files there are a few notes about how the files are imported which you should be aware of when using Iris.
3 |
4 | ## STL
5 | STL is a very common 3D format and was therefore the first format supported by Iris. There are ASCII and Binary file formats, which Iris supports.
6 |
7 | | 'stl' File Format | Status |
8 | |-------------------|--------|
9 | | ASCII | Full |
10 | | Binary | Full |
11 |
12 | ## Notes
13 | Iris has shown some trouble with very large binary stl files, so use with caution.
14 |
15 | ## OBJ
16 | View below the supported flags in an obj file.
17 |
18 | | Flag | Name | Status |
19 | |--------|-------------------|---------|
20 | | v | Vertex | Full |
21 | | vt | UV Coord. | Full |
22 | | vn | Vertex Normal | Full |
23 | | f | Face Indices | Partial |
24 | | mtllib | Material File | Partial |
25 | | usemtl | Sets Material | Partial |
26 | | o, g | Object and Groups | Full |
27 | | | | |
28 |
29 | ### Notes
30 | * Not all flags are supported for 'obj' files as well as 'f' lines which reference more then 4 indices are not supported.
31 | * Not all flags in mtl files are supported by the shader. Currently Diffuse Color and Diffuse Texture are supported.
32 |
--------------------------------------------------------------------------------