Skip to content

Commit c4476ed

Browse files
abelnationmrdoob
authored andcommitted
Simple cone geometry (mrdoob#8818)
* add files for buffered and non-buffered ConeGeometry based on CylinderGeometry * build files with cone * removing unneeded file * remove unneeded npm script * remove build files from pr
1 parent d4b45ce commit c4476ed

8 files changed

Lines changed: 277 additions & 2 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<base href="../../../" />
6+
<script src="list.js"></script>
7+
<script src="page.js"></script>
8+
<link type="text/css" rel="stylesheet" href="page.css" />
9+
</head>
10+
<body>
11+
[page:BufferGeometry] &rarr;
12+
13+
<h1>[name]</h1>
14+
15+
<div class="desc">This is the [page:BufferGeometry] port of [page:ConeGeometry].</div>
16+
17+
18+
<h2>Example</h2>
19+
20+
<iframe src='scenes/geometry-browser.html#ConeBufferGeometry'></iframe>
21+
22+
<code>var geometry = new THREE.ConeBufferGeometry( 5, 20, 32 );
23+
var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
24+
var cone = new THREE.Mesh( geometry, material );
25+
scene.add( cone );
26+
</code>
27+
28+
29+
<h2>Constructor</h2>
30+
31+
32+
<h3>[name]([page:Float radiusTop], [page:Float radiusBottom], [page:Float height], [page:Integer radiusSegments], [page:Integer heightSegments], [page:Boolean openEnded], [page:Float thetaStart], [page:Float thetaLength])</h3>
33+
<div>
34+
radius — Radius of the cone base. Default is 20.<br />
35+
height — Height of the cone. Default is 100.<br />
36+
radiusSegments — Number of segmented faces around the circumference of the cone. Default is 8<br />
37+
heightSegments — Number of rows of faces along the height of the cone. Default is 1.<br />
38+
openEnded — A Boolean indicating whether the ends of the cone are open or capped. Default is false, meaning capped.<br />
39+
thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
40+
thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete cone.
41+
</div>
42+
43+
44+
<h2>Properties</h2>
45+
46+
<div>
47+
Each of the constructor parameters is accessible as a property of the same name. Any modification of these properties after instantiation does not change the geometry.
48+
</div>
49+
50+
51+
<h2>Source</h2>
52+
53+
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
54+
</body>
55+
</html>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<base href="../../../" />
6+
<script src="list.js"></script>
7+
<script src="page.js"></script>
8+
<link type="text/css" rel="stylesheet" href="page.css" />
9+
</head>
10+
<body>
11+
[page:Geometry] &rarr;
12+
13+
<h1>[name]</h1>
14+
15+
<div class="desc">A class for generating cone geometries</div>
16+
17+
18+
<h2>Example</h2>
19+
20+
<iframe src='scenes/geometry-browser.html#ConeGeometry'></iframe>
21+
22+
<code>var geometry = new THREE.ConeGeometry( 5, 20, 32 );
23+
var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
24+
var cone = new THREE.Mesh( geometry, material );
25+
scene.add( cone );
26+
</code>
27+
28+
29+
<h2>Constructor</h2>
30+
31+
32+
<h3>[name]([page:Float radiusTop], [page:Float radiusBottom], [page:Float height], [page:Integer radiusSegments], [page:Integer heightSegments], [page:Boolean openEnded], [page:Float thetaStart], [page:Float thetaLength])</h3>
33+
<div>
34+
radius — Radius of the cone at the base. Default is 20.<br />
35+
height — Height of the cone. Default is 100.<br />
36+
radiusSegments — Number of segmented faces around the circumference of the cone. Default is 8<br />
37+
heightSegments — Number of rows of faces along the height of the cone. Default is 1.<br />
38+
openEnded — A Boolean indicating whether the ends of the cone are open or capped. Default is false, meaning capped.<br />
39+
thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
40+
thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete cone.
41+
</div>
42+
43+
44+
<h2>Properties</h2>
45+
46+
<div>
47+
Each of the constructor parameters is accessible as a property of the same name. Any modification of these properties after instantiation does not change the geometry.
48+
</div>
49+
50+
51+
<h2>Source</h2>
52+
53+
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
54+
</body>
55+
</html>

docs/list.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ var list = {
198198
[ "CircleGeometry", "api/extras/geometries/CircleGeometry" ],
199199
[ "CylinderBufferGeometry", "api/extras/geometries/CylinderBufferGeometry" ],
200200
[ "CylinderGeometry", "api/extras/geometries/CylinderGeometry" ],
201+
[ "ConeBufferGeometry", "api/extras/geometries/ConeBufferGeometry" ],
202+
[ "ConeGeometry", "api/extras/geometries/ConeGeometry" ],
201203
[ "DodecahedronGeometry", "api/extras/geometries/DodecahedronGeometry" ],
202204
[ "ExtrudeGeometry", "api/extras/geometries/ExtrudeGeometry" ],
203205
[ "IcosahedronGeometry", "api/extras/geometries/IcosahedronGeometry" ],

docs/scenes/js/geometry.js

Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ var guis = {
193193

194194
var folder = gui.addFolder( 'THREE.CylinderBufferGeometry' );
195195

196-
folder.add( data, 'radiusTop', 1, 30 ).onChange( generateGeometry );
197-
folder.add( data, 'radiusBottom', 1, 30 ).onChange( generateGeometry );
196+
folder.add( data, 'radiusTop', 0, 30 ).onChange( generateGeometry );
197+
folder.add( data, 'radiusBottom', 0, 30 ).onChange( generateGeometry );
198198
folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
199199
folder.add( data, 'radiusSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
200200
folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
@@ -253,6 +253,93 @@ var guis = {
253253

254254
},
255255

256+
ConeBufferGeometry : function( mesh ) {
257+
258+
var data = {
259+
radius : 5,
260+
height : 10,
261+
radiusSegments : 8,
262+
heightSegments : 1,
263+
openEnded : false,
264+
thetaStart : 0,
265+
thetaLength : twoPi,
266+
};
267+
268+
function generateGeometry() {
269+
270+
updateGroupGeometry( mesh,
271+
new THREE.ConeBufferGeometry(
272+
data.radius,
273+
data.height,
274+
data.radiusSegments,
275+
data.heightSegments,
276+
data.openEnded,
277+
data.thetaStart,
278+
data.thetaLength
279+
)
280+
);
281+
282+
}
283+
284+
var folder = gui.addFolder( 'THREE.ConeBufferGeometry' );
285+
286+
folder.add( data, 'radius', 0, 30 ).onChange( generateGeometry );
287+
folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
288+
folder.add( data, 'radiusSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
289+
folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
290+
folder.add( data, 'openEnded' ).onChange( generateGeometry );
291+
folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
292+
folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
293+
294+
295+
generateGeometry();
296+
297+
},
298+
299+
ConeGeometry : function( mesh ) {
300+
301+
var data = {
302+
radius : 5,
303+
height : 10,
304+
radiusSegments : 8,
305+
heightSegments : 1,
306+
openEnded : false,
307+
thetaStart : 0,
308+
thetaLength : twoPi,
309+
};
310+
311+
function generateGeometry() {
312+
313+
updateGroupGeometry( mesh,
314+
new THREE.ConeGeometry(
315+
data.radius,
316+
data.height,
317+
data.radiusSegments,
318+
data.heightSegments,
319+
data.openEnded,
320+
data.thetaStart,
321+
data.thetaLength
322+
)
323+
);
324+
325+
}
326+
327+
var folder = gui.addFolder( 'THREE.ConeGeometry' );
328+
329+
folder.add( data, 'radius', 0, 30 ).onChange( generateGeometry );
330+
folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
331+
folder.add( data, 'radiusSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
332+
folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
333+
folder.add( data, 'openEnded' ).onChange( generateGeometry );
334+
folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
335+
folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
336+
337+
338+
generateGeometry();
339+
340+
},
341+
342+
256343
CircleBufferGeometry : function( mesh ) {
257344

258345
var data = {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* @author: abelnation / http://github.com/abelnation
3+
*/
4+
5+
THREE.ConeBufferGeometry = function (
6+
radius, height,
7+
radialSegments, heightSegments,
8+
openEnded, thetaStart, thetaLength ) {
9+
10+
THREE.CylinderBufferGeometry.call( this,
11+
0, radius, height,
12+
radialSegments, heightSegments,
13+
openEnded, thetaStart, thetaLength );
14+
15+
this.type = 'ConeBufferGeometry';
16+
17+
this.parameters = {
18+
radius: radius,
19+
height: height,
20+
radialSegments: radialSegments,
21+
heightSegments: heightSegments,
22+
thetaStart: thetaStart,
23+
thetaLength: thetaLength
24+
};
25+
26+
};
27+
28+
THREE.ConeBufferGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );
29+
THREE.ConeBufferGeometry.prototype.constructor = THREE.ConeBufferGeometry;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @author abelnation / http://github.com/abelnation
3+
*/
4+
5+
THREE.ConeGeometry = function (
6+
radius, height,
7+
radialSegments, heightSegments,
8+
openEnded, thetaStart, thetaLength ) {
9+
10+
THREE.CylinderGeometry.call( this,
11+
0, radius, height,
12+
radialSegments, heightSegments,
13+
openEnded, thetaStart, thetaLength );
14+
15+
this.type = 'ConeGeometry';
16+
17+
this.parameters = {
18+
radius: radius,
19+
height: height,
20+
radialSegments: radialSegments,
21+
heightSegments: heightSegments,
22+
openEnded: openEnded,
23+
thetaStart: thetaStart,
24+
thetaLength: thetaLength
25+
};
26+
27+
};
28+
29+
THREE.ConeGeometry.prototype = Object.create( THREE.CylinderGeometry.prototype );
30+
THREE.ConeGeometry.prototype.constructor = THREE.ConeGeometry;

src/loaders/ObjectLoader.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,21 @@ THREE.ObjectLoader.prototype = {
146146

147147
break;
148148

149+
case 'ConeGeometry':
150+
case 'ConeBufferGeometry':
151+
152+
geometry = new THREE [ data.type ](
153+
data.radius,
154+
data.height,
155+
data.radialSegments,
156+
data.heightSegments,
157+
data.openEnded,
158+
data.thetaStart,
159+
data.thetaLength
160+
);
161+
162+
break;
163+
149164
case 'SphereGeometry':
150165
case 'SphereBufferGeometry':
151166

utils/build/includes/extras.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
"src/extras/geometries/CircleBufferGeometry.js",
2626
"src/extras/geometries/CylinderBufferGeometry.js",
2727
"src/extras/geometries/CylinderGeometry.js",
28+
"src/extras/geometries/ConeBufferGeometry.js",
29+
"src/extras/geometries/ConeGeometry.js",
2830
"src/extras/geometries/EdgesGeometry.js",
2931
"src/extras/geometries/ExtrudeGeometry.js",
3032
"src/extras/geometries/ShapeGeometry.js",

0 commit comments

Comments
 (0)