Question

i besoin de savoir si un chemin svg peut être converti en svg polyligne ou non.
i trouvé le code javascript qui convertissent un chemin vers un polygone :

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;
}

i m un débutant à js et ne comprennent pas cette ligne: var seg, lastSeg, points = [], x, y;

il fonctionne bien, mais il dessine un cadre autour de la ligne de chemin. mais je ne veux pas un cadre, je veux convertir chemin vers le point de consigne, polyligne. c'est possible merci

Était-ce utile?

La solution

A polyligne est un polygone non fermé, il est possible d'avoir des polylignes qui commencent et se terminent à un même point, ce qui les rend égaux à un polygone.

Bien que les chemins ont des listes de points, vous pouvez spécifier si les points sont liés à des lignes droites ou courbes diverses autres.

Je suis un peu confus par votre question: «il fonctionne bien, mais il dessine un cadre autour de la ligne de chemin, mais je ne veux pas un cadre »

Je pense que le problème est ici un peu de style des attributs plutôt que le type d'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top