이 순간에 나를 위해 큰 문제입니다 ...KineticJS - 패스 셰이프의 너비/높이 가져 오기?
경로 모양을 통해 나는 세계지도를 렌더링하고 있습니다 ... 문제는 , 경로 모양의 폭 또는 높이가 제공하지 않습니다 그래서 캐싱 또는 단순 기타 작업이 정말 어렵게됩니다.
x/y 높이/너비는 path.toImage
까지 무엇입니까?
어떻게하면이 문제를 해결할 수 있을까요?
이 순간에 나를 위해 큰 문제입니다 ...KineticJS - 패스 셰이프의 너비/높이 가져 오기?
경로 모양을 통해 나는 세계지도를 렌더링하고 있습니다 ... 문제는 , 경로 모양의 폭 또는 높이가 제공하지 않습니다 그래서 캐싱 또는 단순 기타 작업이 정말 어렵게됩니다.
x/y 높이/너비는 path.toImage
까지 무엇입니까?
어떻게하면이 문제를 해결할 수 있을까요?
세계지도 경로가 일련의 줄로 구성된 경우 (흔히 그렇듯이) 경로 데이터에서 minX/minY 및 maxX/maxY 좌표를 찾아 패스의 경계 상자를 가져올 수 있습니다.
키네틱 JS로 이와 동일한 문제를 해결해야했습니다.
아래 코드는 (x, y) 좌표가 포함 된 임의의 캔버스 드로 코드를 살펴보고 배열에 좌표를 추출하고 X와 Y의 최소값과 최대 값을 살펴보고 너비와 높이를 표시합니다. 형태.
경계 상자가 있어야합니다.
var regex = /[+-]?\d+\.\d+/g;
var str = 'ctx.bezierCurveTo(30.1, 220.7, 82.8, 233.0, 147.8, 233.0); ctx.bezierCurveTo(213.1, 233.0, 266.6, 220.8, 266.6, 205.7); ctx.bezierCurveTo(266.6, 205.3, 267.0, 205.1, 267.0, 204.7);';
var floats = str.match(regex).map(function(v) { return parseFloat(v); });
console.log(floats);
var minX = 99999;
var maxX = -99999;
var minY = 99999;
var maxY = -99999;
for (var i = 0; i < floats.length; i++) {
if (isOdd(i)) { // the array of numbers is in the form (x,y,x,y,x,y,x...)
// Check Y values
if (floats[i] < minY) { minY = floats[i]; }
if (floats[i] > maxY) { maxY = floats[i]; }
} else {
// Check X values
if (floats[i] < minX) { minX = floats[i]; }
if (floats[i] > maxX) { maxX = floats[i]; }
}
}
console.log('minX = ' + minX + ', minY = ' + minY + ', maxX = ' + maxX + ', maxY = ' + maxY);
function isOdd(num) { return num % 2;}
불행히도이 경우 생성 된 이미지는 매우 큰 화면입니다. 운동 층이 층을 다시 그리려면 4 초가 걸립니다. x/y/width/height를 입력하면 이미지가 더 작아지고 다시 그리기는 2ms가 소요됩니다! :) – RadiantHex
기록을 위해 내가 다시 그려야 할 500 개의 SVG 경로가 있는데 분명히 서로 겹쳐진 500 개의 큰 이미지가 상당히 문제가있는 것처럼 보입니다 :) – RadiantHex
확인, 대체 계획 ... 내 수정 된 답변보기! BTW, 당신의 경로가 SVG에서 들어오는 경우, 에릭 Dahlström에 의해 SVG 경로의 경계 상자를 받고이 게시물을 체크 아웃 : http://my.opera.com/MacDev_ed/blog/2009/01/21/getting- boundingbox-of-svg-elements – markE