svg път до svg полилиния

трябва да знам дали svg път може да се преобразува в svg полилиния или не.
Намерих javascript кода които преобразуват път в многоъгълник:

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

аз съм начинаещ в js и не разбирам този ред: var seg,lastSeg,points=[],x,y;

работи добре, но рисува рамка около линията на пътя. но не искам рамка, искам да преобразувам пътя в набор от точки, полилиния. възможно ли е благодаря


person merveotesi    schedule 26.07.2011    source източник
comment
търся директно използване на пътища, не е много важно за сега. Благодаря   -  person merveotesi    schedule 26.07.2011
comment
Научих, че пътят не може да бъде преведен в полилиния, защото пътят не предоставя линия, както си мислех преди. пътят в svg документ описва област. така че може да се преведе само в многоъгълник.   -  person merveotesi    schedule 01.08.2011


Отговори (1)


Полилинията е незатворен многоъгълник, възможно е да има полилинии, които започват и завършват в една и съща точка, което ги прави равни на многоъгълник.

Въпреки че пътищата имат списъци с точки, можете да посочите дали точките са свързани с прави линии или различни други криви.

Малко съм объркан от въпроса ви: "работи добре, но рисува рамка около линията на пътя. но не искам рамка"

Мисля, че проблемът тук е в някои стилови атрибути, а не в типа на обекта.

person gazhay    schedule 02.01.2012