Skip to content

Commit

Permalink
Merge pull request #13147 from Mugen87/dev3
Browse files Browse the repository at this point in the history
Geometry: Move computeLineDistance() to Line/LineSegments
  • Loading branch information
mrdoob committed Feb 9, 2018
2 parents 099e436 + aeb4865 commit e3cea7e
Show file tree
Hide file tree
Showing 10 changed files with 194 additions and 117 deletions.
6 changes: 1 addition & 5 deletions docs/api/core/Geometry.html
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,7 @@ <h3>[property:Boolean isGeometry]</h3>
<h3>[property:array lineDistances]</h3>
<div>
An array containing distances between vertices for Line geometries.
This is required for [page:LineSegments] / [page:LineDashedMaterial] to render correctly.
Line distances can be generated automatically with [page:.computeLineDistances].
This is required for [page:LineDashedMaterial] to render correctly.
</div>

<h3>[property:Array morphTargets]</h3>
Expand Down Expand Up @@ -242,9 +241,6 @@ <h3>[method:null computeFaceNormals]()</h3>
<h3>[method:null computeFlatVertexNormals]()</h3>
<div>Computes flat [page:Face3.vertexNormals vertex normals]. Sets the vertex normal of each vertex of each face to be the same as the face's normal.</div>

<h3>[method:null computeLineDistances]()</h3>
<div>Compute [page:.lineDistances].</div>

<h3>[method:null computeMorphNormals]()</h3>
<div>Computes [page:.morphNormals].</div>

Expand Down
6 changes: 6 additions & 0 deletions docs/api/deprecated/DeprecatedList.html
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,12 @@ <h3>[page:SplineCurve3]</h3>

<h2>Geometry</h2>

<div>
Geometry.computeTangents() has been removed.<br /><br />

Geometry.computeLineDistances() has been removed. Use [page:Line.computeLineDistances] instead.<br /><br />
</div>

<h3>[page:BufferGeometry]</h3>
<div>
BufferGeometry.addIndex has been renamed to [page:BufferGeometry.setIndex].<br /><br />
Expand Down
5 changes: 5 additions & 0 deletions docs/api/objects/Line.html
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ <h3>[property:Material material]</h3>
<h2>Methods</h2>
<div>See the base [page:Object3D] class for common methods.</div>

<h3>[method:Line computeLineDistances]()</h3>
<div>
Computes an array of distance values which are necessary for [page:LineDashedMaterial]. For each vertex in the geometry, the method calculates the cumulative length from the current point to the very beginning of the line.
</div>

<h3>[method:Array raycast]( [page:Raycaster raycaster], [page:Array intersects] )</h3>
<div>
Get intersections between a casted [page:Ray] and this Line.
Expand Down
19 changes: 3 additions & 16 deletions examples/canvas_lines_dashed.html
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,7 @@
var objects = [];


var WIDTH = window.innerWidth,
HEIGHT = window.innerHeight;
var WIDTH = window.innerWidth, HEIGHT = window.innerHeight;

init();
animate();
Expand All @@ -63,28 +62,17 @@
scene = new THREE.Scene();
scene.background = new THREE.Color( 0x111111 );

root = new THREE.Object3D();

var subdivisions = 6;
var recursion = 1;

var points = hilbert3D( new THREE.Vector3( 0,0,0 ), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7 );

var spline = new THREE.CatmullRomCurve3( points );
var geometrySpline = new THREE.Geometry();

for ( var i = 0; i < points.length * subdivisions; i ++ ) {

var t = i / ( points.length * subdivisions );
geometrySpline.vertices[ i ] = spline.getPoint( t );

}
var samples = spline.getPoints( points.length * subdivisions );
var geometrySpline = new THREE.Geometry().setFromPoints( samples );

var geometryCube = cube( 50 );

geometryCube.computeLineDistances();
geometrySpline.computeLineDistances();

var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) );

objects.push( object );
Expand Down Expand Up @@ -186,7 +174,6 @@

var object = objects[ i ];

//object.rotation.x = 0.25 * time * ( i%2 == 1 ? 1 : -1);
object.rotation.x = 0.25 * time;
object.rotation.y = 0.25 * time;

Expand Down
103 changes: 48 additions & 55 deletions examples/webgl_lines_dashed.html
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@
var renderer, scene, camera, stats;
var objects = [];


var WIDTH = window.innerWidth,
HEIGHT = window.innerHeight;
var WIDTH = window.innerWidth, HEIGHT = window.innerHeight;

init();
animate();
Expand All @@ -61,37 +59,28 @@
scene.background = new THREE.Color( 0x111111 );
scene.fog = new THREE.Fog( 0x111111, 150, 200 );

root = new THREE.Object3D();

var subdivisions = 6;
var recursion = 1;

var points = hilbert3D( new THREE.Vector3( 0,0,0 ), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7 );

var points = hilbert3D( new THREE.Vector3( 0, 0, 0 ), 25.0, recursion, 0, 1, 2, 3, 4, 5, 6, 7 );
var spline = new THREE.CatmullRomCurve3( points );
var geometrySpline = new THREE.Geometry();

for ( var i = 0; i < points.length * subdivisions; i ++ ) {
var samples = spline.getPoints( points.length * subdivisions );
var geometrySpline = new THREE.Geometry().setFromPoints( samples );

var t = i / ( points.length * subdivisions );
geometrySpline.vertices[ i ] = spline.getPoint( t );
var line = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) );
line.computeLineDistances();

}
objects.push( line );
scene.add( line );

var geometryCube = cube( 50 );

geometryCube.computeLineDistances();
geometrySpline.computeLineDistances();

var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) );

objects.push( object );
scene.add( object );
var lineSegments = new THREE.LineSegments( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ) );
lineSegments.computeLineDistances();

var object = new THREE.LineSegments( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ) );

objects.push( object );
scene.add( object );
objects.push( lineSegments );
scene.add( lineSegments );

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
Expand All @@ -113,47 +102,49 @@

var h = size * 0.5;

var geometry = new THREE.Geometry();

geometry.vertices.push(
new THREE.Vector3( -h, -h, -h ),
new THREE.Vector3( -h, h, -h ),
var geometry = new THREE.BufferGeometry();
var position = [];

new THREE.Vector3( -h, h, -h ),
new THREE.Vector3( h, h, -h ),
position.push(
-h, -h, -h,
-h, h, -h,

new THREE.Vector3( h, h, -h ),
new THREE.Vector3( h, -h, -h ),
-h, h, -h,
h, h, -h,

new THREE.Vector3( h, -h, -h ),
new THREE.Vector3( -h, -h, -h ),
h, h, -h,
h, -h, -h,

h, -h, -h,
-h, -h, -h,

new THREE.Vector3( -h, -h, h ),
new THREE.Vector3( -h, h, h ),
-h, -h, h,
-h, h, h,

new THREE.Vector3( -h, h, h ),
new THREE.Vector3( h, h, h ),
-h, h, h,
h, h, h,

new THREE.Vector3( h, h, h ),
new THREE.Vector3( h, -h, h ),
h, h, h,
h, -h, h,

new THREE.Vector3( h, -h, h ),
new THREE.Vector3( -h, -h, h ),
h, -h, h,
-h, -h, h,

new THREE.Vector3( -h, -h, -h ),
new THREE.Vector3( -h, -h, h ),
-h, -h, -h,
-h, -h, h,

new THREE.Vector3( -h, h, -h ),
new THREE.Vector3( -h, h, h ),
-h, h, -h,
-h, h, h,

new THREE.Vector3( h, h, -h ),
new THREE.Vector3( h, h, h ),
h, h, -h,
h, h, h,

new THREE.Vector3( h, -h, -h ),
new THREE.Vector3( h, -h, h )
h, -h, -h,
h, -h, h
);

geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( position, 3 ) );

return geometry;

}
Expand All @@ -180,14 +171,16 @@

var time = Date.now() * 0.001;

for ( var i = 0; i < objects.length; i ++ ) {
scene.traverse( function( object ) {

if ( object.isLine ) {

var object = objects[ i ];
object.rotation.x = 0.25 * time;
object.rotation.y = 0.25 * time;

object.rotation.x = 0.25 * time;
object.rotation.y = 0.25 * time;
}

}
} );

renderer.render( scene, camera );

Expand Down
15 changes: 12 additions & 3 deletions src/Three.Legacy.js
Original file line number Diff line number Diff line change
Expand Up @@ -832,11 +832,20 @@ Object.assign( Vector4.prototype, {

//

Geometry.prototype.computeTangents = function () {
Object.assign( Geometry.prototype, {

console.warn( 'THREE.Geometry: .computeTangents() has been removed.' );
computeTangents: function () {

};
console.error( 'THREE.Geometry: .computeTangents() has been removed.' );

},
computeLineDistances: function () {

console.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );

}

} );

Object.assign( Object3D.prototype, {

Expand Down
19 changes: 0 additions & 19 deletions src/core/Geometry.js
Original file line number Diff line number Diff line change
Expand Up @@ -656,25 +656,6 @@ Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ),

},

computeLineDistances: function () {

var d = 0;
var vertices = this.vertices;

for ( var i = 0, il = vertices.length; i < il; i ++ ) {

if ( i > 0 ) {

d += vertices[ i ].distanceTo( vertices[ i - 1 ] );

}

this.lineDistances[ i ] = d;

}

},

computeBoundingBox: function () {

if ( this.boundingBox === null ) {
Expand Down
58 changes: 58 additions & 0 deletions src/objects/Line.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,64 @@ Line.prototype = Object.assign( Object.create( Object3D.prototype ), {

isLine: true,

computeLineDistances: ( function () {

var start = new Vector3();
var end = new Vector3();

return function computeLineDistances() {

var geometry = this.geometry;

if ( geometry.isBufferGeometry ) {

// we assume non-indexed geometry

if ( geometry.index === null ) {

var positionAttribute = geometry.attributes.position;
var lineDistances = [ 0 ];

for ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {

start.fromBufferAttribute( positionAttribute, i - 1 );
end.fromBufferAttribute( positionAttribute, i );

lineDistances[ i ] = lineDistances[ i - 1 ];
lineDistances[ i ] += start.distanceTo( end );

}

geometry.addAttribute( 'lineDistance', new THREE.Float32BufferAttribute( lineDistances, 1 ) );

} else {

console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );

}

} else if ( geometry.isGeometry ) {

var vertices = geometry.vertices;
var lineDistances = geometry.lineDistances;

lineDistances[ 0 ] = 0;

for ( var i = 1, l = vertices.length; i < l; i ++ ) {

lineDistances[ i ] = lineDistances[ i - 1 ];
lineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );

}

}

return this;

};

}() ),

raycast: ( function () {

var inverseMatrix = new Matrix4();
Expand Down
Loading

0 comments on commit e3cea7e

Please sign in to comment.