-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgizmo.js
More file actions
91 lines (69 loc) · 2.1 KB
/
gizmo.js
File metadata and controls
91 lines (69 loc) · 2.1 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
import * as THREE from 'three';
import { move } from "./components/move";
import { rotate } from "./components/rotate";
import { scale } from "./components/scale";
export { gizmo }
export { setColor } from "./lib/colors"
function gizmo(camera, renderer)
{
renderer.autoClear = false;
let position = new THREE.Vector3(0,0,0)
let helpers = []
let events = {}
let object = {render, on}
object.none = none
object.selectedTool = "none"
function none()
{
object.selectedTool = "none"
for(const helper of helpers)
{
helper.active = false
}
}
object.setOrigin = (point) =>{
position.copy(point)
}
const scalePivot = scale(renderer.domElement, camera, renderer, position,x => events?.scale(x) , x=> events["end-scale"] && events["end-scale"](x) )
helpers.push(scalePivot)
object.scale = () => {
none()
object.selectedTool = "scale"
scalePivot.active = true
}
object.setScale = (...props) => scalePivot.set(...props)
const movePivot = move(renderer.domElement, camera, renderer, position, x => {
position.copy(x)
events?.move(x)
}, x=> events["end-move"] && events["end-move"](x) )
helpers.push(movePivot)
object.move = () => {
none()
object.selectedTool = "move"
movePivot.active = true
}
object.setPosition = (...props) => movePivot.set(...props)
const rotatePivot =rotate(renderer.domElement, camera, renderer, position, x => events?.rotate(x), x=> events["end-rotate"] && events["end-rotate"](x) )
helpers.push(rotatePivot)
object.rotate = () => {
none()
object.selectedTool = "rotate"
rotatePivot.active = true
}
object.setRotation = (...props) => rotatePivot.set(...props)
object.isHover = () => {
return helpers.some(x=>x.isHover)
}
function render()
{
for(const helper of helpers)
{
helper.render()
}
}
function on(key, value)
{
events[key] = value
}
return object
}