Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract x,y coordinates from arbitrary SVG path with javascript

I want to replace the coordinates within a SVG path with variables. (with javascript). While svg path could be of many types it would be of great help to get some support on a concrete example:

d = "M27,0C27,21,4,34,-13,23C22,18,-27,9,-27,0";

I want this SVG path to be transformed into

var x = [];
var x[0] = 27; x[1] = ...

d = "M + x[0] + "," + y[0] 
    + "C" 
    + x[0] + "," + y[0] + ","
    + x[1] + "," + y[1] + ","
    + x[2] + "," + y[2] + ","
    + "C" 
    + x[3] + "," + y[3] + ","
    + x[4] + "," + y[4] + ","
    + x[5] + "," + y[5];

So my problem is to find the proper javascript RegExp to extract all the variables and by use of it generate the SVG path as given.

What I actually do is creating a Javascript object representing a given svg and I want to able to set the coordinates individually.

Any help highly appreciated

thx, martin

UPDATE: next to the accepted answer there is also a very handy method in the wonderful raphael.js library to analyze a SVG path

http://raphaeljs.com/reference.html#Raphael.parsePathString

like image 766
dorjeduck Avatar asked Nov 07 '13 09:11

dorjeduck


2 Answers

Just use the SVG DOM to parse it there are more details in this question/answer but basically you do

var segments = path.pathSegList;

and that gives you an array of segments and values you can read or write e.g.

segments.getItem(0).y = -10;
like image 190
Robert Longson Avatar answered Nov 15 '22 18:11

Robert Longson


This could be your regex:

var newd = d.match(/(^[0-9]+,)|(^,[0-9]+)$/g);
var arrayd = newd.split(","); 
like image 45
Manolo Avatar answered Nov 15 '22 19:11

Manolo