1
svg 경로를 svg 폴리 라인으로 변환 할 수 있는지 여부를 알아야합니다. svg 경로를 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;
}
내가 JS에 초보자에서 m이 줄 이해하지 :
내가가 javascript code which convert a path to a polygon 발견 VAR의 SEG, lastSeg를 포인트 = [], X, Y;
잘 작동하지만 패스 선 주위에 프레임을 그립니다. 하지만 프레임을 원하지 않아, 경로를 포인트 세트, 폴리 라인으로 변환하고 싶습니다. is 감사합니다.
나는 경로를 직접 사용하는 것을 찾고 있는데,별로 중요하지는 않다. 덕분에 – merveotesi
나는 경로를 폴리선으로 변환 할 수 없다는 것을 배웠습니다. 왜냐하면 경로는 전에 생각했던 것처럼 선을 제공하지 않기 때문입니다. 경로는 svg 문서에서 "영역"을 설명합니다. 그래서 다각형으로 만 변환 될 수 있습니다. – merveotesi