-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmain.js
More file actions
129 lines (110 loc) · 3.21 KB
/
main.js
File metadata and controls
129 lines (110 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//
// Global variables
//
var scene, width, height, camera, renderer;
var mouseIsPressed, mouseX, mouseY, pmouseX, pmouseY;
//
// Initialization of global objects and set up callbacks for mouse and resize
//
function init() {
// Scene object
scene = new THREE.Scene();
// Will use the whole window for the webgl canvas
width = window.innerWidth;
height = window.innerHeight;
// Orthogonal camera for 2D drawing
camera = new THREE.OrthographicCamera( 0, width, 0, height, -height, height );
camera.lookAt (new THREE.Vector3 (0,0,0));
// Renderer will use a canvas taking the whole window
renderer = new THREE.WebGLRenderer( {antialias: true});
renderer.sortObjects = false;
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( width, height );
// Append camera to the page
document.body.appendChild( renderer.domElement );
// Set resize (reshape) callback
window.addEventListener( 'resize', resize );
// Set up mouse callbacks.
// Call mousePressed, mouseDragged and mouseReleased functions if defined.
// Arrange for global mouse variables to be set before calling user callbacks.
mouseIsPressed = false;
mouseX = 0;
mouseY = 0;
pmouseX = 0;
pmouseY = 0;
var setMouse = function () {
mouseX = event.clientX;
mouseY = event.clientY;
}
renderer.domElement.addEventListener ( 'mousedown', function () {
setMouse();
mouseIsPressed = true;
if (typeof mousePressed !== 'undefined') mousePressed();
});
renderer.domElement.addEventListener ( 'mousemove', function () {
pmouseX = mouseX;
pmouseY = mouseY;
setMouse();
if (mouseIsPressed) {
if (typeof mouseDragged !== 'undefined') mouseDragged();
}
if (typeof mouseMoved !== 'undefined') mouseMoved();
});
renderer.domElement.addEventListener ( 'mouseup', function () {
mouseIsPressed = false;
if (typeof mouseReleased !== 'undefined') mouseReleased();
});
// If a setup function is defined, call it
if (typeof setup !== 'undefined') setup();
// First render
render();
}
//
// Reshape callback
//
function resize() {
width = window.innerWidth;
height = window.innerHeight;
camera.right = width;
camera.bottom = height;
camera.updateProjectionMatrix();
renderer.setSize(width,height);
render();
}
//
// The render callback
//
function render () {
requestAnimationFrame( render );
renderer.render( scene, camera );
};
//------------------------------------------------------------
//
// User code from here on
//
//------------------------------------------------------------
var material; // A line material
var selected; // Object that was picked
function setup () {
material = new THREE.LineBasicMaterial ( {color:0xffffff, depthWrite:false, linewidth : 4 } );
}
function mousePressed() {
var point = new THREE.Vector3 (mouseX,mouseY,0);
var geometry = new THREE.Geometry();
geometry.vertices.push (point);
var line = new THREE.Line (geometry, material);
scene.add (line);
selected = line;
}
function mouseDragged() {
var line = selected;
var point = new THREE.Vector3 (mouseX,mouseY,0);
var oldgeometry = line.geometry;
var newgeometry = new THREE.Geometry();
newgeometry.vertices = oldgeometry.vertices;
newgeometry.vertices.push (point);
line.geometry = newgeometry;
}
function mouseReleased() {
}
init();