source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/src/extras/helpers/WireframeHelper.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 3.9 KB
Line 
1/**
2 * @author mrdoob / http://mrdoob.com/
3 */
4
5THREE.WireframeHelper = function ( object, hex ) {
6
7 var color = ( hex !== undefined ) ? hex : 0xffffff;
8
9 var edge = [ 0, 0 ], hash = {};
10 var sortFunction = function ( a, b ) { return a - b };
11
12 var keys = [ 'a', 'b', 'c' ];
13 var geometry = new THREE.BufferGeometry();
14
15 if ( object.geometry instanceof THREE.Geometry ) {
16
17 var vertices = object.geometry.vertices;
18 var faces = object.geometry.faces;
19 var numEdges = 0;
20
21 // allocate maximal size
22 var edges = new Uint32Array( 6 * faces.length );
23
24 for ( var i = 0, l = faces.length; i < l; i ++ ) {
25
26 var face = faces[ i ];
27
28 for ( var j = 0; j < 3; j ++ ) {
29
30 edge[ 0 ] = face[ keys[ j ] ];
31 edge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ];
32 edge.sort( sortFunction );
33
34 var key = edge.toString();
35
36 if ( hash[ key ] === undefined ) {
37
38 edges[ 2 * numEdges ] = edge[ 0 ];
39 edges[ 2 * numEdges + 1 ] = edge[ 1 ];
40 hash[ key ] = true;
41 numEdges ++;
42
43 }
44
45 }
46
47 }
48
49 geometry.addAttribute( 'position', Float32Array, 2 * numEdges, 3 );
50
51 var coords = geometry.attributes.position.array;
52
53 for ( var i = 0, l = numEdges; i < l; i ++ ) {
54
55 for ( var j = 0; j < 2; j ++ ) {
56
57 var vertex = vertices[ edges [ 2 * i + j] ];
58
59 var index = 6 * i + 3 * j;
60 coords[ index + 0 ] = vertex.x;
61 coords[ index + 1 ] = vertex.y;
62 coords[ index + 2 ] = vertex.z;
63
64 }
65
66 }
67
68 } else if ( object.geometry instanceof THREE.BufferGeometry && object.geometry.attributes.index !== undefined ) { // indexed BufferGeometry
69
70 var vertices = object.geometry.attributes.position.array;
71 var indices = object.geometry.attributes.index.array;
72 var offsets = object.geometry.offsets;
73 var numEdges = 0;
74
75 // allocate maximal size
76 var edges = new Uint32Array( 2 * indices.length );
77
78 for ( var o = 0, ol = offsets.length; o < ol; ++ o ) {
79
80 var start = offsets[ o ].start;
81 var count = offsets[ o ].count;
82 var index = offsets[ o ].index;
83
84 for ( var i = start, il = start + count; i < il; i += 3 ) {
85
86 for ( var j = 0; j < 3; j ++ ) {
87
88 edge[ 0 ] = index + indices[ i + j ];
89 edge[ 1 ] = index + indices[ i + ( j + 1 ) % 3 ];
90 edge.sort( sortFunction );
91
92 var key = edge.toString();
93
94 if ( hash[ key ] === undefined ) {
95
96 edges[ 2 * numEdges ] = edge[ 0 ];
97 edges[ 2 * numEdges + 1 ] = edge[ 1 ];
98 hash[ key ] = true;
99 numEdges ++;
100
101 }
102
103 }
104
105 }
106
107 }
108
109 geometry.addAttribute( 'position', Float32Array, 2 * numEdges, 3 );
110
111 var coords = geometry.attributes.position.array;
112
113 for ( var i = 0, l = numEdges; i < l; i ++ ) {
114
115 for ( var j = 0; j < 2; j ++ ) {
116
117 var index = 6 * i + 3 * j;
118 var index2 = 3 * edges[ 2 * i + j];
119 coords[ index + 0 ] = vertices[ index2 ];
120 coords[ index + 1 ] = vertices[ index2 + 1 ];
121 coords[ index + 2 ] = vertices[ index2 + 2 ];
122
123 }
124
125 }
126
127 } else if ( object.geometry instanceof THREE.BufferGeometry ) { // non-indexed BufferGeometry
128
129 var vertices = object.geometry.attributes.position.array;
130 var numEdges = vertices.length / 3;
131 var numTris = numEdges / 3;
132
133 geometry.addAttribute( 'position', Float32Array, 2 * numEdges, 3 );
134
135 var coords = geometry.attributes.position.array;
136
137 for ( var i = 0, l = numTris; i < l; i ++ ) {
138
139 for ( var j = 0; j < 3; j ++ ) {
140
141 var index = 18 * i + 6 * j;
142
143 var index1 = 9 * i + 3 * j;
144 coords[ index + 0 ] = vertices[ index1 ];
145 coords[ index + 1 ] = vertices[ index1 + 1 ];
146 coords[ index + 2 ] = vertices[ index1 + 2 ];
147
148 var index2 = 9 * i + 3 * ( ( j + 1 ) % 3 );
149 coords[ index + 3 ] = vertices[ index2 ];
150 coords[ index + 4 ] = vertices[ index2 + 1 ];
151 coords[ index + 5 ] = vertices[ index2 + 2 ];
152
153 }
154
155 }
156
157 }
158
159 THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color } ), THREE.LinePieces );
160
161 this.matrixAutoUpdate = false;
162 this.matrixWorld = object.matrixWorld;
163
164};
165
166THREE.WireframeHelper.prototype = Object.create( THREE.Line.prototype );
Note: See TracBrowser for help on using the repository browser.