1
- var animate , camera , click2D , colorValues , color_gui , container , cube , cubeGeo , dEnd , dStart , deselect , drawColor , i , init , intersector , isCtrlDown , isMouseDown , isShiftDown , lineMat , load , loadObject , makeCircle , makeLine , makeRectangle , makeSquare , meshMaterial , mouse2D , mouse3D , object_list , onDocumentKeyDown , onDocumentKeyUp , onDocumentMouseDown , onDocumentMouseMove , onDocumentMouseUp , plane , print , projector , ray , render , renderer , rollOverMaterial , rollOverMesh , rollOveredFace , save , scene , setDrawColor , shapeChoice , shape_gui , showPrompt , squarePosition , square_size , startSquarePosX , startSquarePosY , stats , theta , tmpVec ;
1
+ var animate , camera , click2D , colorValues , color_gui , container , cube , cubeGeo , currentObj , dEnd , dStart , deselect , drawColor , i , init , intersector , isCtrlDown , isMouseDown , isShiftDown , lineMat , load , loadObject , makeCircle , makeLine , makeRectangle , makeSquare , meshMaterial , mouse2D , mouse3D , object_list , onDocumentKeyDown , onDocumentKeyUp , onDocumentMouseDown , onDocumentMouseMove , onDocumentMouseUp , plane , print , projector , ray , render , renderer , rollOverMaterial , rollOverMesh , rollOveredFace , save , scene , setDrawColor , shapeChoice , shapeChoiceIsSet , shape_gui , showPrompt , squarePosition , square_size , startSquarePosX , startSquarePosY , stats , theta , tmpVec ;
2
2
if ( ! Detector . webgl ) {
3
3
Detector . addGetWebGLMessage ( ) ;
4
4
}
@@ -28,6 +28,8 @@ shapeChoice = {
28
28
circle : false ,
29
29
line : false
30
30
} ;
31
+ currentObj = '' ;
32
+ shapeChoiceIsSet = false ;
31
33
meshMaterial = new THREE . MeshBasicMaterial ( {
32
34
color : drawColor ,
33
35
wireframe : false
@@ -61,42 +63,59 @@ init = function() {
61
63
return document . addEventListener ( "keyup" , onDocumentKeyUp , false ) ;
62
64
} ;
63
65
onDocumentMouseMove = function ( event ) {
66
+ var dX , dY , radius , temp , xScale , yScale ;
64
67
event . preventDefault ( ) ;
65
68
mouse2D . x = ( event . clientX / window . innerWidth ) * 2 - 1 ;
66
- return mouse2D . y = - ( event . clientY / window . innerHeight ) * 2 + 1 ;
69
+ mouse2D . y = - ( event . clientY / window . innerHeight ) * 2 + 1 ;
70
+ temp = mouse2D . clone ( ) ;
71
+ projector . unprojectVector ( temp , camera ) ;
72
+ if ( isMouseDown && shapeChoiceIsSet ( ) && ! shapeChoice . line ) {
73
+ dX = Math . max ( temp . x , dStart . x ) - Math . min ( temp . x , dStart . x ) ;
74
+ dY = Math . max ( temp . y , dStart . y ) - Math . min ( temp . y , dStart . y ) ;
75
+ if ( shapeChoice . rectangle ) {
76
+ xScale = dX / 5.0 ;
77
+ yScale = dY / 5.0 ;
78
+ } else if ( shapeChoice . circle ) {
79
+ radius = Math . sqrt ( dX * dX + dY * dY ) ;
80
+ xScale = yScale = radius / 14 ;
81
+ }
82
+ currentObj . scale . set ( xScale , yScale , 1 ) ;
83
+ return currentObj . updateMatrix ( ) ;
84
+ }
67
85
} ;
68
86
onDocumentMouseDown = function ( event ) {
69
- var temp ;
87
+ var pX , pY , temp ;
70
88
event . preventDefault ( ) ;
71
89
isMouseDown = true ;
72
90
mouse2D . x = ( event . clientX / window . innerWidth ) * 2 - 1 ;
73
91
mouse2D . y = - ( event . clientY / window . innerHeight ) * 2 + 1 ;
74
92
mouse2D . z = 1 ;
75
- temp = mouse2D ;
93
+ temp = mouse2D . clone ( ) ;
76
94
projector . unprojectVector ( temp , camera ) ;
77
95
dStart . x = temp . x ;
78
96
dStart . y = temp . y ;
79
- return dStart . z = 0 ;
97
+ dStart . z = 0 ;
98
+ if ( shapeChoice . rectangle ) {
99
+ pX = dStart . x ;
100
+ pY = dStart . y ;
101
+ return makeRectangle ( 10 , 10 , pX , pY , drawColor ) ;
102
+ } else if ( shapeChoice . circle ) {
103
+ return makeCircle ( 10 , 10 , dStart . x , dStart . y , drawColor ) ;
104
+ }
80
105
} ;
81
106
onDocumentMouseUp = function ( event ) {
82
- var dX , dY , pX , pY ;
107
+ var dX , dY ;
83
108
event . preventDefault ( ) ;
84
109
isMouseDown = false ;
85
110
setDrawColor ( ) ;
86
111
mouse2D . x = ( event . clientX / window . innerWidth ) * 2 - 1 ;
87
112
mouse2D . y = - ( event . clientY / window . innerHeight ) * 2 + 1 ;
88
113
mouse2D . z = 1 ;
89
- dEnd = mouse2D ;
114
+ dEnd = mouse2D . clone ( ) ;
90
115
dEnd = projector . unprojectVector ( dEnd , camera ) ;
91
116
dX = Math . max ( dEnd . x , dStart . x ) - Math . min ( dEnd . x , dStart . x ) ;
92
117
dY = Math . max ( dEnd . y , dStart . y ) - Math . min ( dEnd . y , dStart . y ) ;
93
- if ( shapeChoice . rectangle ) {
94
- pX = dStart . x + .5 * dX ;
95
- pY = dStart . y - .5 * dY ;
96
- return makeRectangle ( dX , dY , pX , pY , drawColor ) ;
97
- } else if ( shapeChoice . circle ) {
98
- return makeCircle ( dX , dY , dStart . x , dStart . y , drawColor ) ;
99
- } else if ( shapeChoice . line ) {
118
+ if ( shapeChoice . line ) {
100
119
return makeLine ( dStart . x , dStart . y , dEnd . x , dEnd . y , drawColor ) ;
101
120
}
102
121
} ;
@@ -167,7 +186,8 @@ makeRectangle = function(dX, dY, pX, pY, color) {
167
186
square . matrixAutoUpdate = false ;
168
187
square . updateMatrix ( ) ;
169
188
scene . addObject ( square ) ;
170
- return object_list [ square . id ] = [ 'rectangle' , dX , dY , pX , pY , color ] ;
189
+ object_list [ square . id ] = [ 'rectangle' , dX , dY , pX , pY , color ] ;
190
+ return currentObj = square ;
171
191
} ;
172
192
makeCircle = function ( dX , dY , pX , pY , color ) {
173
193
var circle , circleGeo , radius ;
@@ -182,15 +202,16 @@ makeCircle = function(dX, dY, pX, pY, color) {
182
202
circle . matrixAutoUpdate = false ;
183
203
circle . updateMatrix ( ) ;
184
204
scene . addObject ( circle ) ;
185
- return object_list [ circle . id ] = [ 'circle' , dX , dY , pX , pY , color ] ;
205
+ object_list [ circle . id ] = [ 'circle' , dX , dY , pX , pY , color ] ;
206
+ return currentObj = circle ;
186
207
}
187
208
} ;
188
209
makeLine = function ( sX , sY , eX , eY , color ) {
189
210
var line , lineGeo , p1 , p2 ;
190
211
lineMat = new THREE . LineBasicMaterial ( {
191
212
color : color ,
192
- opacity : 0.8 ,
193
- linewidth : 1
213
+ opacity : 1.0 ,
214
+ linewidth : 2
194
215
} ) ;
195
216
lineGeo = new THREE . Geometry ( 0 ) ;
196
217
p1 = new THREE . Vector3 ( sX , sY , 0 ) ;
@@ -199,7 +220,8 @@ makeLine = function(sX, sY, eX, eY, color) {
199
220
lineGeo . vertices . push ( new THREE . Vertex ( p2 ) ) ;
200
221
line = new THREE . Line ( lineGeo , lineMat ) ;
201
222
scene . addObject ( line ) ;
202
- return object_list [ line . id ] = [ 'line' , sX , sY , eX , eY , color ] ;
223
+ object_list [ line . id ] = [ 'line' , sX , sY , eX , eY , color ] ;
224
+ return currentObj = line ;
203
225
} ;
204
226
showPrompt = function ( ) {
205
227
var name ;
@@ -236,6 +258,9 @@ setDrawColor = function() {
236
258
drawColor += g ;
237
259
return drawColor += b ;
238
260
} ;
261
+ shapeChoiceIsSet = function ( ) {
262
+ return shapeChoice . circle || shapeChoice . line || shapeChoice . rectangle ;
263
+ } ;
239
264
color_gui = new DAT . GUI ( {
240
265
height : 3 * 32 - 1
241
266
} ) ;
0 commit comments