Javascript svg路径到svg多段线

Javascript svg路径到svg多段线,javascript,path,svg,polygon,polyline,Javascript,Path,Svg,Polygon,Polyline,我需要知道svg路径是否可以转换为svg多段线。 我发现: 函数路径拓扑多边形(路径,示例){ 如果(!samples)samples=0; var doc=path.ownerDocument; var poly=doc.createElements('http://www.w3.org/2000/svg'多边形'; //将所有路径段放入队列中 对于(var segs=[],s=path.pathSegList,i=s.numberOfItems-1;i>=0;--i)segs[i]=s.ge

我需要知道svg路径是否可以转换为svg多段线。
我发现:

函数路径拓扑多边形(路径,示例){
如果(!samples)samples=0;
var doc=path.ownerDocument;
var poly=doc.createElements('http://www.w3.org/2000/svg'多边形';
//将所有路径段放入队列中
对于(var segs=[],s=path.pathSegList,i=s.numberOfItems-1;i>=0;--i)segs[i]=s.getItem(i);
var segments=segs.concat();
var seg,lastSeg,点=[],x,y;
var addSegmentPoint=函数{
如果(s.pathSegType==SVGPathSeg.PATHSEG_CLOSEPATH){
}否则{
如果(s.pathSegType%2==1&&s.pathSegType>1){
//除PATHSEG_CLOSEPATH(1)外,所有奇数编号的路径类型都是相对的
x+=s.x;y+=s.y;
}否则{
x=s.x;y=s.y;
}
var lastPoint=点[points.length-1];
如果(!lastPoint | | | x!=lastPoint[0]| | y!=lastPoint[1])点。推送([x,y]);
}
};

对于(var d=0,len=path.getTotalLength(),step=len/samples;d多段线是一个未闭合的多边形,可以有在同一点开始和结束的多段线,这使它们等于一个多边形

尽管路径具有点列表,但可以指定这些点是否与直线或各种其他曲线链接

你的问题让我有点困惑:“它很好用,但它在路径线上画了一个框架。但我不想要框架”


我认为这里的问题是一些样式属性,而不是对象的类型。

我正在寻找直接使用路径的方法,目前还不是很重要。thanksi已经了解到,路径不能转换为多段线,因为路径不像我以前想的那样提供直线。svg文档中的路径描述“区域”.因此它只能转换为多边形。
function pathToPolygon(path,samples){
  if (!samples) samples = 0;
  var doc = path.ownerDocument;
  var poly = doc.createElementNS('http://www.w3.org/2000/svg','polygon');

  // Put all path segments in a queue
  for (var segs=[],s=path.pathSegList,i=s.numberOfItems-1;i>=0;--i) segs[i] = s.getItem(i);
  var segments = segs.concat();

  var seg,lastSeg,points=[],x,y;
  var addSegmentPoint = function(s){
    if (s.pathSegType == SVGPathSeg.PATHSEG_CLOSEPATH){

    }else{
      if (s.pathSegType%2==1 && s.pathSegType>1){
        // All odd-numbered path types are relative, except PATHSEG_CLOSEPATH (1)
        x+=s.x; y+=s.y;
      }else{
        x=s.x; y=s.y;
      }
      var lastPoint = points[points.length-1];
      if (!lastPoint || x!=lastPoint[0] || y!=lastPoint[1]) points.push([x,y]);
    }
  };
  for (var d=0,len=path.getTotalLength(),step=len/samples;d<=len;d+=step){
    var seg = segments[path.getPathSegAtLength(d)];
    var pt = path.getPointAtLength(d);
    if (seg != lastSeg){
      lastSeg = seg;
      while (segs.length && segs[0]!=seg) addSegmentPoint( segs.shift() );
    }
    var lastPoint = points[points.length-1];
    if (!lastPoint || pt.x!=lastPoint[0] || pt.y!=lastPoint[1]) points.push([pt.x,pt.y]);
  }
  for (var i=0,len=segs.length;i<len;++i) addSegmentPoint(segs[i]);
  for (var i=0,len=points.length;i<len;++i) points[i] = points[i].join(',');
  poly.setAttribute('points',points.join(' '));
  return poly;
}