Can someone explain - in layman’s terms - the difference between Shapes, Paths and Curves?
Of particular interest:
can one easily convert one into the other like:
Shape.FromCurve( curve )
or similar?
Can someone explain - in layman’s terms - the difference between Shapes, Paths and Curves?
Of particular interest:
can one easily convert one into the other like:
Shape.FromCurve( curve )
or similar?
Curve
An abstract class for creating curves. It can be 2D (using Vector2
) or 3D (using Vector3
). You can extend this class to create custom curves. The built-in curve types are:
CurvePath
A container for multiple Curve
objects, supporting both 2D and 3D curves. It provides the same methods as Curve
but works with sequences of curves.
Path
A 2D version of CurvePath
, designed to mimic the Canvas API (moveTo
, lineTo
, etc.).
ShapePath
Creates an array of paths and converts them into a series of Shape
objects. It’s mainly used with the SVGLoader.
Shape
A 2D class that extends Path
, designed to work with ExtrudeGeometry and ShapeGeometry. Supports holes within the shape.
ExtrudeGeometry & ShapeGeometry
Both geometries take a Shape
as input along with optional parameters to control the geometry.
ShapeUtils
A collection of utility functions for working with shapes.
To answer your question:
Shape
is a Path
with added support for holes, mainly used to create the final geometry.Path
is a 2D CurvePath
with support for canvas-like methods (moveTo
, lineTo
, etc.).CurvePath
is essentially an array of 2D Curve
objects.To create a shape, you can either use the canvas-like API:
const shape = new THREE.Shape();
shape.moveTo(100, 0);
shape.lineTo(100, 100);
shape.arcTo(50, 50, 0, 100, 50);
shape.closePath();
Or add a series of Curve
objects:
const shape = new THREE.Shape();
shape.moveTo(100, 0);
shape.add(new THREE.LineCurve(new THREE.Vector2(100, 0), new THREE.Vector2(100, 100)));
shape.add(new THREE.QuadraticBezierCurve(
new THREE.Vector2(100, 100),
new THREE.Vector2(50, 50),
new THREE.Vector2(0, 100)
));
shape.add(new THREE.LineCurve(new THREE.Vector2(0, 100), new THREE.Vector2(100, 0)));
shape.closePath();