Browse Source

Line/LineSegments: Refactoring

Mugen87 7 years ago
parent
commit
e1391a96f4
2 changed files with 15 additions and 30 deletions
  1. 11 22
      src/objects/Line.js
  2. 4 8
      src/objects/LineSegments.js

+ 11 - 22
src/objects/Line.js

@@ -42,7 +42,6 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
 
 		return function computeLineDistances() {
 
-			var distance = 0;
 			var geometry = this.geometry;
 
 			if ( geometry.isBufferGeometry ) {
@@ -52,20 +51,15 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
 				if ( geometry.index === null ) {
 
 					var positionAttribute = geometry.attributes.position;
-					var lineDistances = [];
+					var lineDistances = [ 0 ];
 
-					for ( var i = 0, l = positionAttribute.count; i < l; i ++ ) {
+					for ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {
 
-						if ( i > 0 ) {
+						start.fromBufferAttribute( positionAttribute, i - 1 );
+						end.fromBufferAttribute( positionAttribute, i );
 
-							start.fromBufferAttribute( positionAttribute, i - 1 );
-							end.fromBufferAttribute( positionAttribute, i );
-
-							distance += start.distanceTo( end );
-
-						}
-
-						lineDistances[ i ] = distance;
+						lineDistances[ i ] = lineDistances[ i - 1 ];
+						lineDistances[ i ] += start.distanceTo( end );
 
 					}
 
@@ -80,19 +74,14 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {
 			} else if ( geometry.isGeometry ) {
 
 				var vertices = geometry.vertices;
+				var lineDistances = geometry.lineDistances;
 
-				for ( var i = 0, l = vertices.length; i < l; i ++ ) {
-
-					if ( i > 0 ) {
+				lineDistances[ 0 ] = 0;
 
-						start.copy( vertices[ i - 1 ] );
-						end.copy( vertices[ i ] );
-
-						distance += start.distanceTo( end );
-
-					}
+				for ( var i = 1, l = vertices.length; i < l; i ++ ) {
 
-					geometry.lineDistances[ i ] = distance;
+					lineDistances[ i ] = lineDistances[ i - 1 ];
+					lineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );
 
 				}
 

+ 4 - 8
src/objects/LineSegments.js

@@ -26,7 +26,6 @@ LineSegments.prototype = Object.assign( Object.create( Line.prototype ), {
 
 		return function computeLineDistances() {
 
-			var distance = 0;
 			var geometry = this.geometry;
 
 			if ( geometry.isBufferGeometry ) {
@@ -43,10 +42,8 @@ LineSegments.prototype = Object.assign( Object.create( Line.prototype ), {
 						start.fromBufferAttribute( positionAttribute, i );
 						end.fromBufferAttribute( positionAttribute, i + 1 );
 
-						distance += start.distanceTo( end );
-
 						lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];
-						lineDistances[ i + 1 ] = distance;
+						lineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );
 
 					}
 
@@ -61,16 +58,15 @@ LineSegments.prototype = Object.assign( Object.create( Line.prototype ), {
 			} else if ( geometry.isGeometry ) {
 
 				var vertices = geometry.vertices;
+				var lineDistances = geometry.lineDistances;
 
 				for ( var i = 0, l = vertices.length; i < l; i += 2 ) {
 
 					start.copy( vertices[ i ] );
 					end.copy( vertices[ i + 1 ] );
 
-					distance += start.distanceTo( end );
-
-					geometry.lineDistances[ i ] = ( i === 0 ) ? 0 : geometry.lineDistances[ i - 1 ];
-					geometry.lineDistances[ i + 1 ] = distance;
+					lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];
+					lineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );
 
 				}