diff --git a/docs/api/objects/Line.html b/docs/api/objects/Line.html index b70c86f74d14db6b11c8f57f2f48cdf6b2632d9d..1791110801ecfcbb557a916a1386534164fb2ff0 100644 --- a/docs/api/objects/Line.html +++ b/docs/api/objects/Line.html @@ -11,12 +11,11 @@

[name]

-
A line or a series of lines.
+
A continuous line.

Example

- var material = new THREE.LineBasicMaterial({ color: 0x0000ff }); @@ -35,18 +34,15 @@

Constructor

- -

[name]( [page:Geometry geometry], [page:Material material], [page:Integer type] )

+

[name]( [page:Geometry geometry], [page:Material material] )

geometry — Vertices representing the line segment(s).
material — Material for the line. Default is [page:LineBasicMaterial LineBasicMaterial].
- type — Connection type between vertices. Default is THREE.LineStrip.
If no material is supplied, a randomized line material will be created and assigned to the object.
-
Also, if no type is supplied, the default (THREE.LineStrip) will be used).

Properties

@@ -60,13 +56,6 @@ Material for the line. -

[property:Integer type]

-
- Possible values: THREE.LineStrip or THREE.LinePieces. THREE.LineStrip will draw a series of segments connecting each point (first connected to the second, the second connected to the third, and so on and so forth); and THREE.LinePieces will draw a series of pairs of segments (first connected to the second, the third connected to the fourth, and so on and so forth).
- -
- In OpenGL terms, LineStrip is the classic GL_LINE_STRIP and LinePieces is the equivalent to GL_LINES. -

Methods

diff --git a/docs/api/objects/SegmentsLine.html b/docs/api/objects/SegmentsLine.html new file mode 100644 index 0000000000000000000000000000000000000000..ded538cff9aaee40fd3f19182e13c8c763f834ac --- /dev/null +++ b/docs/api/objects/SegmentsLine.html @@ -0,0 +1,53 @@ + + + + + + + + + + [page:Line] → + +

[name]

+ +
A series of lines.
+ + +

Constructor

+ +

[name]( [page:Geometry geometry], [page:Material material] )

+ +
+ geometry — Vertices representing the line segment(s).
+ material — Material for the line. Default is [page:LineBasicMaterial LineBasicMaterial]. +
+ +
If no material is supplied, a randomized line material will be created and assigned to the object.
+ + +

Properties

+ +

[property:Geometry geometry]

+
+ Vertices representing the line segment(s). +
+ +

[property:Material material]

+
+ Material for the line. +
+ + +

Methods

+ +

[method:Array raycast]([page:Raycaster raycaster], [page:Array intersects])

+
+ Get intersections between a casted ray and this Line. [page:Raycaster.intersectObject] will call this method. +
+ +

Source

+ + [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js] + + diff --git a/docs/list.js b/docs/list.js index 7a71ca4fe447e73a1947bbbab8bc7a47abbe57ab..0db0055a7fc1440bb1aff1f30be9debab0eaab80 100644 --- a/docs/list.js +++ b/docs/list.js @@ -110,6 +110,7 @@ var list = { [ "Bone", "api/objects/Bone" ], [ "LensFlare", "api/objects/LensFlare" ], [ "Line", "api/objects/Line" ], + [ "SegmentsLine", "api/objects/SegmentsLine" ], [ "LOD", "api/objects/LOD" ], [ "Mesh", "api/objects/Mesh" ], [ "MorphAnimMesh", "api/objects/MorphAnimMesh" ], diff --git a/examples/canvas_camera_orthographic.html b/examples/canvas_camera_orthographic.html index de2ef47793f64ba54f7da072f14e74bea6dd727f..75605457116071f90bc35037a49bb311c31f3708 100644 --- a/examples/canvas_camera_orthographic.html +++ b/examples/canvas_camera_orthographic.html @@ -68,7 +68,7 @@ var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.2 } ); - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Cubes diff --git a/examples/canvas_camera_orthographic2.html b/examples/canvas_camera_orthographic2.html index f15050dc64ec82cdc109f5a4ec4a960d983cb9f8..b7cb73b57de2f8965db17bc8d10cfe45a703e942 100644 --- a/examples/canvas_camera_orthographic2.html +++ b/examples/canvas_camera_orthographic2.html @@ -137,7 +137,7 @@ var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.2 } ); - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Cubes diff --git a/examples/canvas_interactive_voxelpainter.html b/examples/canvas_interactive_voxelpainter.html index 20e61979310217fa0de96a464378858ff0a9e42c..a54565e279340519915d95af8aca35cc376804f5 100644 --- a/examples/canvas_interactive_voxelpainter.html +++ b/examples/canvas_interactive_voxelpainter.html @@ -73,7 +73,7 @@ var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.2 } ); - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // diff --git a/examples/canvas_lines_dashed.html b/examples/canvas_lines_dashed.html index 7c0431996dd7231bce7f2df2f5d28a3f98eecf05..74ad644559736a38a6490c66ee271a50e724c01a 100644 --- a/examples/canvas_lines_dashed.html +++ b/examples/canvas_lines_dashed.html @@ -88,12 +88,12 @@ geometryCube.computeLineDistances(); geometrySpline.computeLineDistances(); - var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ), THREE.LineStrip ); + var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) ); objects.push( object ); scene.add( object ); - var object = new THREE.Line( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ), THREE.LinePieces ); + var object = new THREE.SegmentsLine( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ) ); objects.push( object ); scene.add( object ); diff --git a/examples/canvas_materials.html b/examples/canvas_materials.html index 8c8006f229fe51c272861eb89f1b814c2867aa44..d43d3dd1497d12f078ac59445649e543ac4ff88d 100644 --- a/examples/canvas_materials.html +++ b/examples/canvas_materials.html @@ -60,7 +60,7 @@ var material = new THREE.LineBasicMaterial( { color: 0xffffff, opacity: 0.2 } ); - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Spheres diff --git a/examples/canvas_performance.html b/examples/canvas_performance.html index 32600676f55b8a9c96e60ded2b4b225d9748388b..0b97c81285aacd5ef4e6d32b68da4102665ebd1d 100644 --- a/examples/canvas_performance.html +++ b/examples/canvas_performance.html @@ -63,7 +63,7 @@ var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.5 } ); - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Spheres diff --git a/examples/canvas_sandbox.html b/examples/canvas_sandbox.html index a3aa97c776a4791b7f089e2c44afec55b69b6387..513c1eaa8f3e183baa3ca353da74896aa418fb68 100644 --- a/examples/canvas_sandbox.html +++ b/examples/canvas_sandbox.html @@ -85,7 +85,7 @@ var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.5 } ); - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Spheres diff --git a/examples/js/renderers/Projector.js b/examples/js/renderers/Projector.js index 53c7e4e4977583a9fcb47d5eff92d9d8fa839d9a..8260ed0e7275fa6a7a90c79869fd2532f6adf6cb 100644 --- a/examples/js/renderers/Projector.js +++ b/examples/js/renderers/Projector.js @@ -468,7 +468,7 @@ THREE.Projector = function () { _normalMatrix.getNormalMatrix( _modelMatrix ); var material = object.material; - + var isFaceMaterial = material instanceof THREE.MeshFaceMaterial; var objectMaterials = isFaceMaterial === true ? object.material : null; @@ -616,7 +616,7 @@ THREE.Projector = function () { } else { - var step = object.mode === THREE.LinePieces ? 2 : 1; + var step = object instanceof THREE.SegmentsLine ? 2 : 1; for ( var i = 0, l = ( positions.length / 3 ) - 1; i < l; i += step ) { @@ -639,8 +639,7 @@ THREE.Projector = function () { v1 = getNextVertexInPool(); v1.positionScreen.copy( vertices[ 0 ] ).applyMatrix4( _modelViewProjectionMatrix ); - // Handle LineStrip and LinePieces - var step = object.mode === THREE.LinePieces ? 2 : 1; + var step = object instanceof THREE.SegmentsLine ? 2 : 1; for ( var v = 1, vl = vertices.length; v < vl; v ++ ) { diff --git a/examples/webgl_buffergeometry_drawcalls.html b/examples/webgl_buffergeometry_drawcalls.html index f667dc98af890449e093295cfb3b0fd30298a6f3..ef026c12212e6710ed72a7a36d7c2216d5e90947 100644 --- a/examples/webgl_buffergeometry_drawcalls.html +++ b/examples/webgl_buffergeometry_drawcalls.html @@ -177,7 +177,7 @@ transparent: true } ); - linesMesh = new THREE.Line( geometry, material, THREE.LinePieces ); + linesMesh = new THREE.SegmentsLine( geometry, material ); group.add( linesMesh ); // diff --git a/examples/webgl_buffergeometry_lines_indexed.html b/examples/webgl_buffergeometry_lines_indexed.html index 24160dfd11f6f748cfd1110e8aef77097a260d4d..5c7cbc635634bcec3d04ddaff62694974b4ab645 100644 --- a/examples/webgl_buffergeometry_lines_indexed.html +++ b/examples/webgl_buffergeometry_lines_indexed.html @@ -187,7 +187,7 @@ geometry.addAttribute( 'color', new THREE.BufferAttribute( new Float32Array( colors ), 3 ) ); geometry.computeBoundingSphere(); - mesh = new THREE.Line( geometry, material, THREE.LinePieces ); + mesh = new THREE.SegmentsLine( geometry, material ); mesh.position.x -= 1200; mesh.position.y -= 1200; diff --git a/examples/webgl_camera.html b/examples/webgl_camera.html index 14362ee534472bccdb7a29f12f8a4d730ed65022..923c6a12527c435580b5e84e8d91029545ec3bab 100644 --- a/examples/webgl_camera.html +++ b/examples/webgl_camera.html @@ -102,25 +102,22 @@ // - mesh = new THREE.Line( + mesh = new THREE.SegmentsLine( new THREE.WireframeGeometry( new THREE.SphereBufferGeometry( 100, 16, 8 ) ), - new THREE.LineBasicMaterial( { color: 0xffffff } ), - THREE.LinePieces + new THREE.LineBasicMaterial( { color: 0xffffff } ) ); scene.add( mesh ); - var mesh2 = new THREE.Line( + var mesh2 = new THREE.SegmentsLine( new THREE.WireframeGeometry( new THREE.SphereBufferGeometry( 50, 16, 8 ) ), - new THREE.LineBasicMaterial( { color: 0x00ff00 } ), - THREE.LinePieces + new THREE.LineBasicMaterial( { color: 0x00ff00 } ) ); mesh2.position.y = 150; mesh.add( mesh2 ); - var mesh3 = new THREE.Line( + var mesh3 = new THREE.SegmentsLine( new THREE.WireframeGeometry( new THREE.SphereBufferGeometry( 5, 16, 8 ) ), - new THREE.LineBasicMaterial( { color: 0x0000ff } ), - THREE.LinePieces + new THREE.LineBasicMaterial( { color: 0x0000ff } ) ); mesh3.position.z = 150; cameraRig.add( mesh3 ); diff --git a/examples/webgl_custom_attributes_lines.html b/examples/webgl_custom_attributes_lines.html index 69ff10e9bec4028785a95003453e5160ff125c3f..49a2b5424034ae613e050f598e64ad2084be9119 100644 --- a/examples/webgl_custom_attributes_lines.html +++ b/examples/webgl_custom_attributes_lines.html @@ -165,7 +165,7 @@ geometry.center(); - object = new THREE.Line( geometry, shaderMaterial, THREE.LineStrip ); + object = new THREE.Line( geometry, shaderMaterial ); var vertices = object.geometry.vertices; diff --git a/examples/webgl_helpers.html b/examples/webgl_helpers.html index 58742ae5e326abfb9d75f245e9871958e8942d99..a99d9620d826f119fd6a01df27400586e4f48291 100644 --- a/examples/webgl_helpers.html +++ b/examples/webgl_helpers.html @@ -53,20 +53,33 @@ var material = new THREE.MeshLambertMaterial(); - var mesh = new THREE.Mesh( geometry, material ); - mesh.scale.multiplyScalar( 50 ); - scene.add( mesh ); - - scene.add( new THREE.FaceNormalsHelper( mesh, 10 ) ); - scene.add( new THREE.VertexNormalsHelper( mesh, 10 ) ); + var group = new THREE.Group(); + group.scale.multiplyScalar( 50 ); + scene.add( group ); - var helper = new THREE.WireframeHelper( mesh ); - helper.material.depthTest = false; - helper.material.opacity = 0.25; - helper.material.transparent = true; - scene.add( helper ); - - scene.add( new THREE.BoxHelper( mesh ) ); + var mesh = new THREE.Mesh( geometry, material ); + group.add( mesh ); + + group.add( new THREE.FaceNormalsHelper( mesh, 0.1 ) ); + group.add( new THREE.VertexNormalsHelper( mesh, 0.1 ) ); + + group.add( new THREE.BoxHelper( mesh ) ); + + var wireframe = new THREE.WireframeGeometry( geometry ); + var line = new THREE.SegmentsLine( wireframe ); + line.material.depthTest = false; + line.material.opacity = 0.25; + line.material.transparent = true; + line.position.x = 4; + group.add( line ); + + var edges = new THREE.EdgesGeometry( geometry ); + var line = new THREE.SegmentsLine( edges ); + line.material.depthTest = false; + line.material.opacity = 0.25; + line.material.transparent = true; + line.position.x = -4; + group.add( line ); } ); diff --git a/examples/webgl_interactive_lines.html b/examples/webgl_interactive_lines.html index c28f6b2bcedbc7dd9706de7490bd0271af12e5c5..9879bac754af69e90f14857904ff3b675ec60919 100644 --- a/examples/webgl_interactive_lines.html +++ b/examples/webgl_interactive_lines.html @@ -89,8 +89,17 @@ for ( var i = 0; i < 50; i ++ ) { - var type = Math.random() > 0.5 ? THREE.LineStrip : THREE.LinePieces; - var object = new THREE.Line( geometry, new THREE.LineBasicMaterial( { color: Math.random() * 0xffffff } ), type ); + var object; + + if ( Math.random() > 0.5 ) { + + object = new THREE.Line( geometry ); + + } else { + + object = new THREE.SegmentsLine( geometry ); + + } object.position.x = Math.random() * 400 - 200; object.position.y = Math.random() * 400 - 200; diff --git a/examples/webgl_interactive_voxelpainter.html b/examples/webgl_interactive_voxelpainter.html index d0e9bda9151761443af5dc43e39dd1cce42fc492..64c4676f8e96b0b68578477bd568b26a15f20d8e 100644 --- a/examples/webgl_interactive_voxelpainter.html +++ b/examples/webgl_interactive_voxelpainter.html @@ -87,7 +87,7 @@ var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.2, transparent: true } ); - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // diff --git a/examples/webgl_lines_dashed.html b/examples/webgl_lines_dashed.html index 1355fbd28341c5a1af79348ed4f8406657d56df0..8e9815186ac7c8fa44a1447ee7b8cd0ff5bb2b1a 100644 --- a/examples/webgl_lines_dashed.html +++ b/examples/webgl_lines_dashed.html @@ -85,12 +85,12 @@ geometryCube.computeLineDistances(); geometrySpline.computeLineDistances(); - var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ), THREE.LineStrip ); + var object = new THREE.Line( geometrySpline, new THREE.LineDashedMaterial( { color: 0xffffff, dashSize: 1, gapSize: 0.5 } ) ); objects.push( object ); scene.add( object ); - var object = new THREE.Line( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ), THREE.LinePieces ); + var object = new THREE.SegmentsLine( geometryCube, new THREE.LineDashedMaterial( { color: 0xffaa00, dashSize: 3, gapSize: 1, linewidth: 2 } ) ); objects.push( object ); scene.add( object ); diff --git a/examples/webgl_lines_sphere.html b/examples/webgl_lines_sphere.html index 75d4643b296d12beae297dbe832fdb54c7b050d6..fda71a2173d6cc42c2d0569cae2b6046a1bffcf5 100644 --- a/examples/webgl_lines_sphere.html +++ b/examples/webgl_lines_sphere.html @@ -91,7 +91,7 @@ material = new THREE.LineBasicMaterial( { color: p[ 1 ], opacity: p[ 2 ], linewidth: p[ 3 ] } ); - line = new THREE.Line( geometry, material, THREE.LinePieces ); + line = new THREE.SegmentsLine( geometry, material ); line.scale.x = line.scale.y = line.scale.z = p[ 0 ]; line.originalScale = p[ 0 ]; line.rotation.y = Math.random() * Math.PI; diff --git a/examples/webgl_loader_collada.html b/examples/webgl_loader_collada.html index 52b1c9e24883f415daa49cb5b4f6f29b6f1bdf86..e1c67100ca91610079317ae32f33fc94072ddd25 100644 --- a/examples/webgl_loader_collada.html +++ b/examples/webgl_loader_collada.html @@ -101,7 +101,7 @@ } - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Add the COLLADA diff --git a/examples/webgl_loader_collada_keyframe.html b/examples/webgl_loader_collada_keyframe.html index b865e616bcd7deb4d46244e7726de61aca9ef21d..38335a9ca28a326a7a46337f8148452c397666e4 100644 --- a/examples/webgl_loader_collada_keyframe.html +++ b/examples/webgl_loader_collada_keyframe.html @@ -113,7 +113,7 @@ } - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Add the COLLADA diff --git a/examples/webgl_loader_collada_kinematics.html b/examples/webgl_loader_collada_kinematics.html index e8e9ba0d962cfcd1450934689734b215b3958f00..890580462faa6c4d6ba2dd6d898554fb13c73506 100644 --- a/examples/webgl_loader_collada_kinematics.html +++ b/examples/webgl_loader_collada_kinematics.html @@ -108,7 +108,7 @@ } - var line = new THREE.Line( geometry, material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, material ); scene.add( line ); // Add the COLLADA diff --git a/examples/webgl_materials.html b/examples/webgl_materials.html index 38c05dffa4d608f54f2357e61f1349d1c8537d0b..037832050a08716271c20f8ba56554d370eb01c6 100644 --- a/examples/webgl_materials.html +++ b/examples/webgl_materials.html @@ -60,7 +60,7 @@ } - var line = new THREE.Line( geometry, line_material, THREE.LinePieces ); + var line = new THREE.SegmentsLine( geometry, line_material ); scene.add( line ); // Materials diff --git a/src/extras/helpers/AxisHelper.js b/src/extras/helpers/AxisHelper.js index 2e20adae391e81b97ff51d7e0ab7972140d68bd0..56411efb1de4e787e097c80efad39c33f5f73b49 100644 --- a/src/extras/helpers/AxisHelper.js +++ b/src/extras/helpers/AxisHelper.js @@ -25,9 +25,9 @@ THREE.AxisHelper = function ( size ) { var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } ); - THREE.Line.call( this, geometry, material, THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, material ); }; -THREE.AxisHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.AxisHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.AxisHelper.prototype.constructor = THREE.AxisHelper; diff --git a/src/extras/helpers/BoxHelper.js b/src/extras/helpers/BoxHelper.js index 3044a7ade54b51c0e904e222ae77e0a997a05d83..3c7e9f4b3dd4d573e97d36f23af1064acf3f0fd2 100644 --- a/src/extras/helpers/BoxHelper.js +++ b/src/extras/helpers/BoxHelper.js @@ -7,7 +7,7 @@ THREE.BoxHelper = function ( object ) { var geometry = new THREE.BufferGeometry(); geometry.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( 72 ), 3 ) ); - THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ), THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) ); if ( object !== undefined ) { @@ -17,7 +17,7 @@ THREE.BoxHelper = function ( object ) { }; -THREE.BoxHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.BoxHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.BoxHelper.prototype.constructor = THREE.BoxHelper; THREE.BoxHelper.prototype.update = function ( object ) { diff --git a/src/extras/helpers/CameraHelper.js b/src/extras/helpers/CameraHelper.js index 6341be0cf8764bd79f90b04f05b488eca6b17d1e..fc97c7632dd4a00b5060f8890da4518933747746 100644 --- a/src/extras/helpers/CameraHelper.js +++ b/src/extras/helpers/CameraHelper.js @@ -91,7 +91,7 @@ THREE.CameraHelper = function ( camera ) { } - THREE.Line.call( this, geometry, material, THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, material ); this.camera = camera; this.matrix = camera.matrixWorld; @@ -103,13 +103,13 @@ THREE.CameraHelper = function ( camera ) { }; -THREE.CameraHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.CameraHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.CameraHelper.prototype.constructor = THREE.CameraHelper; THREE.CameraHelper.prototype.update = function () { var geometry, pointMap; - + var vector = new THREE.Vector3(); var camera = new THREE.Camera(); diff --git a/src/extras/helpers/EdgesHelper.js b/src/extras/helpers/EdgesHelper.js index 91d45ca626af63e1325f37f8a8172a3f1aad643c..a54ecac1dec234c51dd5353063335f3be062c5a9 100644 --- a/src/extras/helpers/EdgesHelper.js +++ b/src/extras/helpers/EdgesHelper.js @@ -12,12 +12,12 @@ THREE.EdgesHelper = function ( object, hex, thresholdAngle ) { var color = ( hex !== undefined ) ? hex : 0xffffff; - THREE.Line.call( this, new THREE.EdgesGeometry( object.geometry, thresholdAngle ), new THREE.LineBasicMaterial( { color: color } ), THREE.LinePieces ); + THREE.SegmentsLine.call( this, new THREE.EdgesGeometry( object.geometry, thresholdAngle ), new THREE.LineBasicMaterial( { color: color } ) ); this.matrix = object.matrixWorld; this.matrixAutoUpdate = false; }; -THREE.EdgesHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.EdgesHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.EdgesHelper.prototype.constructor = THREE.EdgesHelper; diff --git a/src/extras/helpers/FaceNormalsHelper.js b/src/extras/helpers/FaceNormalsHelper.js index 3c8339989c14e2048c442b2e352aad9f406e9c09..bc689776254daf4b0a343db84efbcfe3b48e0b7e 100644 --- a/src/extras/helpers/FaceNormalsHelper.js +++ b/src/extras/helpers/FaceNormalsHelper.js @@ -23,7 +23,7 @@ THREE.FaceNormalsHelper = function ( object, size, hex, linewidth ) { } - THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ) ); this.matrixAutoUpdate = false; @@ -33,7 +33,7 @@ THREE.FaceNormalsHelper = function ( object, size, hex, linewidth ) { }; -THREE.FaceNormalsHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.FaceNormalsHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.FaceNormalsHelper.prototype.constructor = THREE.FaceNormalsHelper; THREE.FaceNormalsHelper.prototype.update = function () { @@ -72,4 +72,3 @@ THREE.FaceNormalsHelper.prototype.update = function () { return this; }; - diff --git a/src/extras/helpers/GridHelper.js b/src/extras/helpers/GridHelper.js index e4a63fba67f2c848a18e51179c71f98c9d9cc7fb..45abf7e018613b3f5ea69f514285cf9c100c0a7f 100644 --- a/src/extras/helpers/GridHelper.js +++ b/src/extras/helpers/GridHelper.js @@ -23,11 +23,11 @@ THREE.GridHelper = function ( size, step ) { } - THREE.Line.call( this, geometry, material, THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, material ); }; -THREE.GridHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.GridHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.GridHelper.prototype.constructor = THREE.GridHelper; THREE.GridHelper.prototype.setColors = function( colorCenterLine, colorGrid ) { diff --git a/src/extras/helpers/SkeletonHelper.js b/src/extras/helpers/SkeletonHelper.js index 8e08e8496aeb22d67f7010f8c3781ac302ae2028..b37e1f02a076d4f55be885cdbfc23b6edb8d5a72 100644 --- a/src/extras/helpers/SkeletonHelper.js +++ b/src/extras/helpers/SkeletonHelper.js @@ -28,7 +28,7 @@ THREE.SkeletonHelper = function ( object ) { var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors, depthTest: false, depthWrite: false, transparent: true } ); - THREE.Line.call( this, geometry, material, THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, material ); this.root = object; @@ -40,7 +40,7 @@ THREE.SkeletonHelper = function ( object ) { }; -THREE.SkeletonHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.SkeletonHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.SkeletonHelper.prototype.constructor = THREE.SkeletonHelper; THREE.SkeletonHelper.prototype.getBoneList = function( object ) { diff --git a/src/extras/helpers/VertexNormalsHelper.js b/src/extras/helpers/VertexNormalsHelper.js index 64481b870fa718dc3ce4e5fa2d89c28322dd4efa..668e5df4f15a143dfec382b8adb2b191c8286e7c 100644 --- a/src/extras/helpers/VertexNormalsHelper.js +++ b/src/extras/helpers/VertexNormalsHelper.js @@ -29,7 +29,7 @@ THREE.VertexNormalsHelper = function ( object, size, hex, linewidth ) { } - THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ) ); this.matrixAutoUpdate = false; @@ -39,7 +39,7 @@ THREE.VertexNormalsHelper = function ( object, size, hex, linewidth ) { }; -THREE.VertexNormalsHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.VertexNormalsHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.VertexNormalsHelper.prototype.constructor = THREE.VertexNormalsHelper; THREE.VertexNormalsHelper.prototype.update = ( function ( object ) { diff --git a/src/extras/helpers/VertexTangentsHelper.js b/src/extras/helpers/VertexTangentsHelper.js index 4852f9c457299ceeaa5db61a34e517711e80bff2..88b668834b76cf9fe04cac29aeb6161c9feb2df3 100644 --- a/src/extras/helpers/VertexTangentsHelper.js +++ b/src/extras/helpers/VertexTangentsHelper.js @@ -30,7 +30,7 @@ THREE.VertexTangentsHelper = function ( object, size, hex, linewidth ) { } - THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces ); + THREE.SegmentsLine.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ) ); this.matrixAutoUpdate = false; @@ -38,7 +38,7 @@ THREE.VertexTangentsHelper = function ( object, size, hex, linewidth ) { }; -THREE.VertexTangentsHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.VertexTangentsHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.VertexTangentsHelper.prototype.constructor = THREE.VertexTangentsHelper; THREE.VertexTangentsHelper.prototype.update = ( function ( object ) { diff --git a/src/extras/helpers/WireframeHelper.js b/src/extras/helpers/WireframeHelper.js index ccc12c0264813b326dd46204a2b11832e480f006..a462f61df77c756239ae919d959e4aa7d9903310 100644 --- a/src/extras/helpers/WireframeHelper.js +++ b/src/extras/helpers/WireframeHelper.js @@ -6,12 +6,12 @@ THREE.WireframeHelper = function ( object, hex ) { var color = ( hex !== undefined ) ? hex : 0xffffff; - THREE.Line.call( this, new THREE.WireframeGeometry( object.geometry ), new THREE.LineBasicMaterial( { color: color } ), THREE.LinePieces ); + THREE.SegmentsLine.call( this, new THREE.WireframeGeometry( object.geometry ), new THREE.LineBasicMaterial( { color: color } ) ); this.matrix = object.matrixWorld; this.matrixAutoUpdate = false; }; -THREE.WireframeHelper.prototype = Object.create( THREE.Line.prototype ); +THREE.WireframeHelper.prototype = Object.create( THREE.SegmentsLine.prototype ); THREE.WireframeHelper.prototype.constructor = THREE.WireframeHelper; diff --git a/src/objects/Line.js b/src/objects/Line.js index 1adec5ba08ebc29741a233536b0ab251b4a53683..32a6bfc3891f3914dbc89d2166090aac4a277907 100644 --- a/src/objects/Line.js +++ b/src/objects/Line.js @@ -4,6 +4,12 @@ THREE.Line = function ( geometry, material, mode ) { + if ( mode === 1 ) { + + THREE.error( 'THREE.Line: THREE.LinePieces mode has been removed. Use THREE.SegmentsLine instead.' ); + + } + THREE.Object3D.call( this ); this.type = 'Line'; @@ -11,13 +17,8 @@ THREE.Line = function ( geometry, material, mode ) { this.geometry = geometry !== undefined ? geometry : new THREE.Geometry(); this.material = material !== undefined ? material : new THREE.LineBasicMaterial( { color: Math.random() * 0xffffff } ); - this.mode = mode !== undefined ? mode : THREE.LineStrip; - }; -THREE.LineStrip = 0; -THREE.LinePieces = 1; - THREE.Line.prototype = Object.create( THREE.Object3D.prototype ); THREE.Line.prototype.constructor = THREE.Line; @@ -54,7 +55,7 @@ THREE.Line.prototype.raycast = ( function () { var vEnd = new THREE.Vector3(); var interSegment = new THREE.Vector3(); var interRay = new THREE.Vector3(); - var step = this.mode === THREE.LineStrip ? 1 : 2; + var step = this instanceof THREE.SegmentsLine ? 2 : 1; if ( geometry instanceof THREE.BufferGeometry ) { @@ -184,7 +185,7 @@ THREE.Line.prototype.raycast = ( function () { THREE.Line.prototype.clone = function ( object ) { - if ( object === undefined ) object = new THREE.Line( this.geometry, this.material, this.mode ); + if ( object === undefined ) object = new THREE[ this.type ]( this.geometry, this.material ); THREE.Object3D.prototype.clone.call( this, object ); @@ -196,8 +197,6 @@ THREE.Line.prototype.toJSON = function ( meta ) { var data = THREE.Object3D.prototype.toJSON.call( this, meta ); - data.object.mode = this.mode; - // only serialize if not in meta geometries cache if ( meta.geometries[ this.geometry.uuid ] === undefined ) { meta.geometries[ this.geometry.uuid ] = this.geometry.toJSON(); @@ -214,3 +213,8 @@ THREE.Line.prototype.toJSON = function ( meta ) { return data; }; + +// DEPRECATED + +THREE.LineStrip = 0; +THREE.LinePieces = 1; diff --git a/src/objects/SegmentsLine.js b/src/objects/SegmentsLine.js new file mode 100644 index 0000000000000000000000000000000000000000..6a6d5dd9a8691444eefe3275594d68935015800d --- /dev/null +++ b/src/objects/SegmentsLine.js @@ -0,0 +1,14 @@ +/** + * @author mrdoob / http://mrdoob.com/ + */ + +THREE.SegmentsLine = function ( geometry, material ) { + + THREE.Line.call( this, geometry, material ); + + this.type = 'SegmentsLine'; + +}; + +THREE.SegmentsLine.prototype = Object.create( THREE.Line.prototype ); +THREE.SegmentsLine.prototype.constructor = THREE.SegmentsLine; diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 4c506fdcdc564fc33da6f33204c9be47dc508438..874a08f3d5982e6c827aaa38de57142e7dd02993 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -1190,7 +1190,7 @@ THREE.WebGLRenderer = function ( parameters ) { function renderLine( material, geometry, object, program, updateBuffers ) { - var mode = ( object.mode === THREE.LineStrip ) ? _gl.LINE_STRIP : _gl.LINES; + var mode = object instanceof THREE.SegmentsLine ? _gl.LINES : _gl.LINE_STRIP; // In case user is not using Line*Material by mistake var lineWidth = material.linewidth !== undefined ? material.linewidth : 1; diff --git a/test/unit/geometry/EdgesGeometry.js b/test/unit/geometry/EdgesGeometry.js index 5b14830dc1b77f7d04ec68cd761569bb15eadcd2..cb1073fefab63127f7a8764cc00cebe8cf013965 100644 --- a/test/unit/geometry/EdgesGeometry.js +++ b/test/unit/geometry/EdgesGeometry.js @@ -3,7 +3,7 @@ module( "EdgesGeometry" ); var DEBUG = false; var vertList = [ - new THREE.Vector3(0, 0, 0), + new THREE.Vector3(0, 0, 0), new THREE.Vector3(1, 0, 0), new THREE.Vector3(1, 1, 0), new THREE.Vector3(0, 1, 0), @@ -11,72 +11,72 @@ var vertList = [ ]; test( "singularity", function() { - + testEdges( vertList, [1, 1, 1], 0 ); - + }); test( "needle", function() { - + testEdges( vertList, [0, 0, 1], 0 ); - + }); test( "single triangle", function() { - + testEdges( vertList, [0, 1, 2], 3 ); - + }); test( "two isolated triangles", function() { - + var vertList = [ - new THREE.Vector3(0, 0, 0), + new THREE.Vector3(0, 0, 0), new THREE.Vector3(1, 0, 0), new THREE.Vector3(1, 1, 0), - new THREE.Vector3(0, 0, 1), + new THREE.Vector3(0, 0, 1), new THREE.Vector3(1, 0, 1), new THREE.Vector3(1, 1, 1), ]; - + testEdges( vertList, [0, 1, 2, 3, 4, 5], 6 ); - + }); test( "two flat triangles", function() { - + testEdges( vertList, [0, 1, 2, 0, 2, 3], 4 ); - + }); test( "two flat triangles, inverted", function() { - + testEdges( vertList, [0, 1, 2, 0, 3, 2], 5 ); - + }); test( "two non-coplanar triangles", function() { - + testEdges( vertList, [0, 1, 2, 0, 4, 2], 5 ); - + }); test( "three triangles, coplanar first", function() { - + testEdges( vertList, [0, 1, 2, 0, 2, 3, 0, 4, 2], 7 ); - + }); test( "three triangles, coplanar last", function() { - + testEdges( vertList, [0, 1, 2, 0, 4, 2, 0, 2, 3], 6 ); // Should be 7 - + }); test( "tetrahedron", function() { - + testEdges( vertList, [0, 1, 2, 0, 1, 4, 0, 4, 2, 1, 2, 4], 6 ); - + }); @@ -86,122 +86,122 @@ test( "tetrahedron", function() { // function testEdges ( vertList, idxList, numAfter ) { - + var geoms = createGeometries ( vertList, idxList ); for ( var i = 0 ; i < geoms.length ; i ++ ) { - + var geom = geoms[i]; var numBefore = idxList.length; equal( countEdges (geom), numBefore, "Edges before!" ); - + var egeom = new THREE.EdgesGeometry ( geom );; - + equal( countEdges (egeom), numAfter, "Edges after!" ); output( geom, egeom ); - + } - + } function createGeometries ( vertList, idxList ) { - + var geomIB = createIndexedBufferGeometry ( vertList, idxList ); var geom = new THREE.Geometry().fromBufferGeometry( geomIB ); var geomB = new THREE.BufferGeometry().fromGeometry( geom ); var geomDC = addDrawCalls( geomIB.clone() ); return [ geom, geomB, geomIB, geomDC ]; - + } function createIndexedBufferGeometry ( vertList, idxList ) { - + var geom = new THREE.BufferGeometry(); - - var indexTable = []; + + var indexTable = []; var numTris = idxList.length / 3; var numVerts = 0; var indices = new Uint32Array( numTris * 3 ); var vertices = new Float32Array( vertList.length * 3 ); - + for ( var i = 0; i < numTris; i ++ ) { for ( var j = 0; j < 3; j ++ ) { - + var idx = idxList[ 3 * i + j ]; if ( indexTable[ idx ] === undefined ) { - + var v = vertList[ idx ]; vertices[ 3 * numVerts ] = v.x; vertices[ 3 * numVerts + 1 ] = v.y; vertices[ 3 * numVerts + 2 ] = v.z; - + indexTable[ idx ] = numVerts; - + numVerts ++; - + } - + indices[ 3 * i + j ] = indexTable[ idx ] ; - + } - + } - + vertices = vertices.subarray( 0, 3 * numVerts ); - + geom.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) ); geom.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) ); - + geom.computeFaceNormals(); - + return geom; - + } function addDrawCalls ( geometry ) { - + var numTris = geometry.getAttribute( 'index' ).length / 3; - + var offset = 0; for ( var i = 0 ; i < numTris; i ++ ) { var start = i * 3; var count = 3; - + geometry.addDrawCall ( start, count, offset ); - + } - + return geometry; - + } function countEdges ( geom ) { - + if ( geom instanceof THREE.EdgesGeometry ) { - + return geom.getAttribute( 'position' ).length / 2; - + } - + if ( geom.faces !== undefined ) { - + return geom.faces.length * 3; - + } - + var indices = geom.getAttribute( 'index' ); if ( indices !== undefined ) { - + return indices.length; - + } - + return geom.getAttribute( 'position' ).length; - + } // @@ -214,23 +214,23 @@ var scene = new THREE.Scene(); var xoffset = 0; function output ( geom, egeom ) { - + if ( DEBUG !== true ) return; - + if ( !renderer ) initDebug(); - + var mesh = new THREE.Mesh( geom, undefined ); - var edges = new THREE.Line( egeom, new THREE.LineBasicMaterial( { color: 'black' }), THREE.LinePieces ); + var edges = new THREE.SegmentsLine( egeom, new THREE.LineBasicMaterial( { color: 'black' } ) ); mesh.position.setX( xoffset ); edges.position.setX( xoffset ++ ); scene.add(mesh); scene.add(edges); - + if (scene.children.length % 8 === 0) { xoffset += 2; } - + } function initDebug () { @@ -238,12 +238,12 @@ function initDebug () { renderer = new THREE.WebGLRenderer({ antialias: true - + }); - + var width = 600; var height = 480; - + renderer.setSize(width, height); renderer.setClearColor( 0xCCCCCC ); @@ -251,12 +251,12 @@ function initDebug () { camera.position.x = 30; camera.position.z = 40; camera.lookAt(new THREE.Vector3(30, 0, 0)); - + document.body.appendChild(renderer.domElement); var controls = new THREE.OrbitControls( camera, renderer.domElement ); controls.target = new THREE.Vector3(30, 0, 0); - + animate(); function animate() { @@ -264,10 +264,9 @@ function initDebug () { requestAnimationFrame( animate ); controls.update(); - + renderer.render( scene, camera ); } - -} +} diff --git a/utils/build/includes/common.json b/utils/build/includes/common.json index 346d144e24a3a8c7ec40849f54bab88fb6a6c242..ff2b3059b765a2c1a837764c620dee5be1283aea 100644 --- a/utils/build/includes/common.json +++ b/utils/build/includes/common.json @@ -78,6 +78,7 @@ "src/objects/Group.js", "src/objects/PointCloud.js", "src/objects/Line.js", + "src/objects/SegmentsLine.js", "src/objects/Mesh.js", "src/objects/Bone.js", "src/objects/Skeleton.js",