UNPKG

@foblex/flow

Version:

An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.

35 lines 6.38 kB
export class CalculateConnectionCenterHandler { handle(request) { const { points } = request; let totalDistance = 0; let distances = []; for (let i = 0; i < points.length - 1; i++) { const distance = this.calculateDistance(points[i], points[i + 1]); distances.push(distance); totalDistance += distance; } let accumulatedDistance = 0; let centerIndex = 0; const halfTotalDistance = totalDistance / 2; for (let i = 0; i < distances.length; i++) { accumulatedDistance += distances[i]; if (accumulatedDistance >= halfTotalDistance) { centerIndex = i; break; } } const remainingDistanceToCenter = halfTotalDistance - (accumulatedDistance - distances[centerIndex]); return this.findPointAtDistance(points[centerIndex], points[centerIndex + 1], remainingDistanceToCenter); } calculateDistance(pointA, pointB) { return Math.sqrt(Math.pow(pointB.x - pointA.x, 2) + Math.pow(pointB.y - pointA.y, 2)); } findPointAtDistance(startPoint, endPoint, distance) { const totalDistance = this.calculateDistance(startPoint, endPoint); const ratio = distance / totalDistance; const x = (1 - ratio) * startPoint.x + ratio * endPoint.x; const y = (1 - ratio) * startPoint.y + ratio * endPoint.y; return { x, y }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLWNvbm5lY3Rpb24tY2VudGVyLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtY29ubmVjdGlvbi9jb21tb24vZG9tYWluL2NhbGN1bGF0ZS1jb25uZWN0aW9uLWNlbnRlci9jYWxjdWxhdGUtY29ubmVjdGlvbi1jZW50ZXIuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sZ0NBQWdDO0lBR3BDLE1BQU0sQ0FBQyxPQUF5QztRQUVyRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzNCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFFN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBRSxDQUFDLENBQUUsRUFBRSxNQUFNLENBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBRSxDQUFDLENBQUM7WUFDdEUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QixhQUFhLElBQUksUUFBUSxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsbUJBQW1CLElBQUksU0FBUyxDQUFFLENBQUMsQ0FBRSxDQUFDO1lBQ3RDLElBQUksbUJBQW1CLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDN0MsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSx5QkFBeUIsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBRSxXQUFXLENBQUUsQ0FBQyxDQUFDO1FBRXZHLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBRSxXQUFXLENBQUUsRUFBRSxNQUFNLENBQUUsV0FBVyxHQUFHLENBQUMsQ0FBRSxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDL0csQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxNQUFjO1FBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0I7UUFDaEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQb2ludCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgSUhhbmRsZXIgfSBmcm9tICdAZm9ibGV4L21lZGlhdG9yJztcbmltcG9ydCB7IENhbGN1bGF0ZUNvbm5lY3Rpb25DZW50ZXJSZXF1ZXN0IH0gZnJvbSAnLi9jYWxjdWxhdGUtY29ubmVjdGlvbi1jZW50ZXItcmVxdWVzdCc7XG5cbmV4cG9ydCBjbGFzcyBDYWxjdWxhdGVDb25uZWN0aW9uQ2VudGVySGFuZGxlclxuICAgIGltcGxlbWVudHMgSUhhbmRsZXI8Q2FsY3VsYXRlQ29ubmVjdGlvbkNlbnRlclJlcXVlc3QsIElQb2ludD4ge1xuXG4gIHB1YmxpYyBoYW5kbGUocmVxdWVzdDogQ2FsY3VsYXRlQ29ubmVjdGlvbkNlbnRlclJlcXVlc3QpOiBJUG9pbnQge1xuXG4gICAgY29uc3QgeyBwb2ludHMgfSA9IHJlcXVlc3Q7XG4gICAgbGV0IHRvdGFsRGlzdGFuY2UgPSAwO1xuICAgIGxldCBkaXN0YW5jZXM6IG51bWJlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVEaXN0YW5jZShwb2ludHNbIGkgXSwgcG9pbnRzWyBpICsgMSBdKTtcbiAgICAgIGRpc3RhbmNlcy5wdXNoKGRpc3RhbmNlKTtcbiAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZGlzdGFuY2U7XG4gICAgfVxuXG4gICAgbGV0IGFjY3VtdWxhdGVkRGlzdGFuY2UgPSAwO1xuICAgIGxldCBjZW50ZXJJbmRleCA9IDA7XG4gICAgY29uc3QgaGFsZlRvdGFsRGlzdGFuY2UgPSB0b3RhbERpc3RhbmNlIC8gMjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgYWNjdW11bGF0ZWREaXN0YW5jZSArPSBkaXN0YW5jZXNbIGkgXTtcbiAgICAgIGlmIChhY2N1bXVsYXRlZERpc3RhbmNlID49IGhhbGZUb3RhbERpc3RhbmNlKSB7XG4gICAgICAgIGNlbnRlckluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVtYWluaW5nRGlzdGFuY2VUb0NlbnRlciA9IGhhbGZUb3RhbERpc3RhbmNlIC0gKGFjY3VtdWxhdGVkRGlzdGFuY2UgLSBkaXN0YW5jZXNbIGNlbnRlckluZGV4IF0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZmluZFBvaW50QXREaXN0YW5jZShwb2ludHNbIGNlbnRlckluZGV4IF0sIHBvaW50c1sgY2VudGVySW5kZXggKyAxIF0sIHJlbWFpbmluZ0Rpc3RhbmNlVG9DZW50ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaXN0YW5jZShwb2ludEE6IElQb2ludCwgcG9pbnRCOiBJUG9pbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocG9pbnRCLnggLSBwb2ludEEueCwgMikgKyBNYXRoLnBvdyhwb2ludEIueSAtIHBvaW50QS55LCAyKSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQb2ludEF0RGlzdGFuY2Uoc3RhcnRQb2ludDogSVBvaW50LCBlbmRQb2ludDogSVBvaW50LCBkaXN0YW5jZTogbnVtYmVyKTogSVBvaW50IHtcbiAgICBjb25zdCB0b3RhbERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVEaXN0YW5jZShzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgY29uc3QgcmF0aW8gPSBkaXN0YW5jZSAvIHRvdGFsRGlzdGFuY2U7XG4gICAgY29uc3QgeCA9ICgxIC0gcmF0aW8pICogc3RhcnRQb2ludC54ICsgcmF0aW8gKiBlbmRQb2ludC54O1xuICAgIGNvbnN0IHkgPSAoMSAtIHJhdGlvKSAqIHN0YXJ0UG9pbnQueSArIHJhdGlvICogZW5kUG9pbnQueTtcbiAgICByZXR1cm4geyB4LCB5IH07XG4gIH1cbn1cbiJdfQ==