Filler fix (#6989)

* Filler fix
* Add an indicator of reference points
This commit is contained in:
Jukka Kurkela 2020-01-22 01:30:23 +02:00 committed by Evert Timberg
parent 14df2c6722
commit b76dd46d72

View File

@ -164,11 +164,11 @@ function pointsFromSegments(boundary, line) {
const first = linePoints[segment.start]; const first = linePoints[segment.start];
const last = linePoints[segment.end]; const last = linePoints[segment.end];
if (y !== null) { if (y !== null) {
points.push({x: first.x, y}); points.push({x: first.x, y, _prop: 'x', _ref: first});
points.push({x: last.x, y}); points.push({x: last.x, y, _prop: 'x', _ref: last});
} else if (x !== null) { } else if (x !== null) {
points.push({x, y: first.y}); points.push({x, y: first.y, _prop: 'y', _ref: first});
points.push({x, y: last.y}); points.push({x, y: last.y, _prop: 'y', _ref: last});
} }
}); });
return points; return points;
@ -184,6 +184,7 @@ function getTarget(source) {
const boundary = computeBoundary(source); const boundary = computeBoundary(source);
let points = []; let points = [];
let _loop = false; let _loop = false;
let _refPoints = false;
if (boundary instanceof simpleArc) { if (boundary instanceof simpleArc) {
return boundary; return boundary;
@ -194,8 +195,15 @@ function getTarget(source) {
points = boundary; points = boundary;
} else { } else {
points = pointsFromSegments(boundary, line); points = pointsFromSegments(boundary, line);
_refPoints = true;
} }
return points.length ? new Line({points, options: {tension: 0}, _loop, _fullLoop: _loop}) : null; return points.length ? new Line({
points,
options: {tension: 0},
_loop,
_fullLoop: _loop,
_refPoints
}) : null;
} }
function resolveTarget(sources, index, propagate) { function resolveTarget(sources, index, propagate) {
@ -264,6 +272,17 @@ function _segments(line, target, property) {
const tpoints = target.points; const tpoints = target.points;
const parts = []; const parts = [];
if (target._refPoints) {
// Update properties from reference points. (In case those points are animating)
for (let i = 0, ilen = tpoints.length; i < ilen; ++i) {
const point = tpoints[i];
const prop = point._prop;
if (prop) {
point[prop] = point._ref[prop];
}
}
}
for (let segment of line.segments) { for (let segment of line.segments) {
const bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop); const bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);