1 | 'use strict';
|
2 |
|
3 | import FluxViewport from '../src/FluxViewport.js';
|
4 | import viewportState from './viewportState.json';
|
5 | import * as THREE from 'three';
|
6 |
|
7 |
|
8 | var domElement = document.createElement();
|
9 |
|
10 | export function focusViewport(t) {
|
11 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
|
12 | var viewport = new FluxViewport(domElement, {width:100,height:100});
|
13 | viewport.setGeometryEntity(sphere).then(function () {
|
14 | t.ok(viewport._renderer._model, 'Viewport should create a model');
|
15 | t.end();
|
16 | }, function (errors) {
|
17 | t.fail('Caught an error: '+ errors);
|
18 | t.end();
|
19 | });
|
20 | }
|
21 |
|
22 | export function replaceGeom(t) {
|
23 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
|
24 | var sphere2 = {"origin":[0,0,0],"primitive":"sphere","radius":2};
|
25 | var viewport = new FluxViewport(domElement, {width:100,height:100});
|
26 | viewport.setGeometryEntity(sphere).then(function () {
|
27 | t.ok(viewport._renderer._model, 'Viewport should create a model');
|
28 | viewport.setGeometryEntity(sphere2).then(function () {
|
29 | t.ok(viewport._renderer._model, 'Viewport should create a model');
|
30 | t.end();
|
31 | }, function (errors) {
|
32 | t.fail('Caught an error: '+ errors);
|
33 | t.end();
|
34 | });
|
35 | }, function (errors) {
|
36 | t.fail('Caught an error: '+ errors);
|
37 | t.end();
|
38 | });
|
39 | }
|
40 |
|
41 | export function viewportToJson(t) {
|
42 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
|
43 | var viewport = new FluxViewport(domElement, {width:100,height:100});
|
44 | viewport.setGeometryEntity(sphere).then(function () {
|
45 | var viewportString = JSON.stringify(viewport.toJSON());
|
46 | var keywords = ['entities', 'view', 'cameras'];
|
47 | for (var i=0;i<keywords.length;i++) {
|
48 | t.ok(viewportString.toLocaleLowerCase().indexOf(keywords[i])!==-1, 'JSON should contain '+keywords[i]);
|
49 | }
|
50 | t.end();
|
51 | }, function (errors) {
|
52 | t.fail('Caught an error: '+ errors);
|
53 | t.end();
|
54 | });
|
55 | }
|
56 |
|
57 | export function viewportFromJson(t) {
|
58 | var viewport = new FluxViewport(domElement, {width:100,height:100});
|
59 | viewport.fromJSON(viewportState).then( function() {
|
60 | t.equal(viewport._entities.primitive, 'sphere', 'Should get a sphere from JSON');
|
61 | t.end();
|
62 | }, function (errors) {
|
63 | t.fail('Caught an error: '+ errors);
|
64 | t.end();
|
65 | });
|
66 | }
|
67 |
|
68 | export function initControls(t) {
|
69 | var updated = false;
|
70 | var viewport = new FluxViewport(domElement);
|
71 | viewport.addEventListener(FluxViewport.getChangeEvent(), function() {
|
72 | updated = true;
|
73 | });
|
74 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
|
75 | viewport.setGeometryEntity(sphere).then(function () {
|
76 | viewport.focus();
|
77 | t.ok(updated, 'Update should fire.');
|
78 | t.end();
|
79 | }, function (errors) {
|
80 | t.fail('Caught an error: '+ errors);
|
81 | t.end();
|
82 | });
|
83 | }
|
84 |
|
85 | export function hideHelpers(t) {
|
86 | var viewport = new FluxViewport(domElement, {width:100,height:100});
|
87 | viewport.setHelpersVisible(false);
|
88 | t.equal(viewport._renderer._helpersScene.visible, false, "Should not be visible");
|
89 | t.end();
|
90 | }
|
91 |
|
92 | export function setAlpha(t) {
|
93 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10};
|
94 | var viewport = new FluxViewport(domElement, {width:100,height:100});
|
95 | viewport.setGeometryEntity(sphere).then(function () {
|
96 | t.ok(viewport._renderer._model, 'Viewport should create a model');
|
97 | viewport.setClearColor('white', 0.5);
|
98 | viewport.render();
|
99 | t.equal(viewport._renderer._context.renderer.getClearAlpha(), 0.5, "Alpha can be set");
|
100 | t.end();
|
101 | }, function (errors) {
|
102 | t.fail('Caught an error: '+ errors);
|
103 | t.end();
|
104 | });
|
105 | }
|
106 |
|
107 | export function viewportSelection(t) {
|
108 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
|
109 | var viewport = new FluxViewport(domElement, {width:100,height:100,
|
110 | selection: FluxViewport.getSelectionModes().HOVER});
|
111 | viewport.setGeometryEntity(sphere).then(function () {
|
112 | t.equal(viewport.getSelection().length,0,"Selection starts empty");
|
113 | viewport.setSelection(['mySphere']);
|
114 | t.deepEqual(viewport.getSelection(),['mySphere'],"Selection has id");
|
115 | t.end();
|
116 | }).catch(function (errors) {
|
117 | t.fail('Caught an error: '+ errors);
|
118 | t.end();
|
119 | });
|
120 | }
|
121 |
|
122 | export function viewportShadows(t) {
|
123 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
|
124 | var sphere2 = {"origin":[100,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
|
125 | var viewport = new FluxViewport(domElement);
|
126 | viewport.setupDefaultLighting();
|
127 | var left = [];
|
128 | viewport.setGeometryEntity(sphere).then(function () {
|
129 | var lights = viewport._renderer._scene.children[0].children;
|
130 | for (var i=0;i<lights.length;i++) {
|
131 | var light = lights[i];
|
132 | if (light.type === 'DirectionalLight') {
|
133 | left[i] = light.shadow.camera.left;
|
134 | t.ok(light.shadow.camera.right > light.shadow.camera.left, 'Frustum has positive width');
|
135 | }
|
136 | }
|
137 | t.equal(viewport._renderer._context.renderer.shadowMap.enabled, false, 'Shadow default is off');
|
138 | viewport.activateShadows();
|
139 | t.equal(viewport._renderer._context.renderer.shadowMap.enabled, true, 'Shadow turned on');
|
140 | viewport.setGeometryEntity(sphere2).then(function () {
|
141 | var lights = viewport._renderer._scene.children[0].children;
|
142 | for (var i=0;i<lights.length;i++) {
|
143 | var light = lights[i];
|
144 | if (light.type === 'DirectionalLight') {
|
145 | t.ok(Math.abs(light.shadow.camera.left)>Math.abs(left[i]),
|
146 | 'Frustum is larger for distant geom');
|
147 | }
|
148 | }
|
149 | });
|
150 | t.end();
|
151 | }).catch(function (errors) {
|
152 | t.fail('Caught an error: '+ errors);
|
153 | t.end();
|
154 | });
|
155 | }
|
156 |
|
157 | export function viewportClipping(t) {
|
158 | var sphere = {"origin":[0,0,0],"primitive":"sphere","radius":10,"id":"mySphere"};
|
159 | var viewport = new FluxViewport(domElement);
|
160 | viewport.setGeometryEntity(sphere).then(function (result) {
|
161 | var object = result.getObject();
|
162 | t.equal(object.children[0].material.side, THREE.FrontSide, 'Solid object default to one side');
|
163 | viewport.activateClipping(0,0.4,0,0,1,0);
|
164 | t.equal(object.children[0].material.side, THREE.DoubleSide, 'Objects must be double side when clipped');
|
165 | t.ok(viewport._renderer._clippingPlane.constant > 0, 'Plane does not go through origin');
|
166 | viewport.deactivateClipping();
|
167 | t.equal(object.children[0].material.side, THREE.FrontSide, 'Solid object return to one side');
|
168 | t.end();
|
169 | }).catch(function (errors) {
|
170 | t.fail('Caught an error: '+ errors);
|
171 | t.end();
|
172 | });
|
173 | }
|