Convert SVG shapes to SVG paths. Check out this demo.
If you use NPM, npm install shape2path
. Otherwise, download the latest release. AMD, CommonJS, and vanilla environments are supported. In vanilla, a shape2path global is exported:
<script src="https://unpkg.com/[email protected]/build/shape2path.min.js"></script>
<script>
const path = shape2path.circle()
.attr("r", 50) // Paths can be configured with constants...
.attr("cx", d => d.cx); // ...or with functions.
// The cy attribute defaults to zero because it was not specified.
path({cx: 50}); // M50,0 m-50,0 a50,50 0 1,0 100,0 a50,50 0 1,0 -100,0
</script>
shape2path's methods return configurable functions that can be used to produce the d attribute required to draw an SVG path identical to a corresponding SVG basic shape. Each method corresponds to a basic SVG shape: circle, ellipse, line, polygon, polyline, and rect.
# shape2path.circle() · Source, Example
Creates a new circle generator whose cx, cy, and r attributes are set to 0.
# shape2path.ellipse() · Source, Example
Creates a new ellipse generator whose cx, cy, rx, and ry attributes are set to 0.
# shape2path.line() · Source, Example
Creates a new line generator whose x1, y1, x2, and y2 attributes default to 0.
# shape2path.polygon() · Source, Example
Creates a new polygon generator whose points attribute defaults to "0,0".
# shape2path.polyline() · Source, Example
Creates a new polyline generator whose points attribute defaults to "0,0".
# shape2path.rect() · Source, Example
Creates a new rect generator whose x, y, width, height, rx, and ry attributes default to 0.
# shape([datum])
Returns a string representing the path's d attribute, whose appearance will be identical to an SVG basic shape corresponding to the generator's attributes. If datum is specified, applies the generator's functional accessors on the specified datum.
# shape.attr(name[, value])
If value is specified, sets the attribute name to the specified value and returns the generator. For instance, to set a circle generator's cx attribute to 10:
shape2path.circle()
.attr("cx", 10);
If the value is constant, sets the position to that constant. Constants must be specified as numbers unless you are setting a points attribute, in which case you can set the constant to a string (e.g. "0,0 1,1"
) or an array of points (e.g. [[0,0], [1,1]]
).
If value is a function, the function is evaluated for the passed datum, and the function's return value is used to set the attribute's value. For instance, to set a circle generator's cx attribute to a datum's "left" attribute:
shape2path.circle()
.attr("cx", d => d.left)
({left: 10});
If value is not specified, returns the current value of the attribute. For all attributes other than points, the value defaults to 0; for points, it defaults to "0,0".