From de97ea9e7543ff4d0bd8ee4f1b52eaf3a5d9dee3 Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Wed, 22 Mar 2023 14:40:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B90.4.5=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E5=85=B3=E8=81=94=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/AssociativeLine.js | 23 +++++++++++++++---- .../src/utils/associativeLineUtils.js | 20 ++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/simple-mind-map/src/AssociativeLine.js b/simple-mind-map/src/AssociativeLine.js index d5aac62b..d915084c 100644 --- a/simple-mind-map/src/AssociativeLine.js +++ b/simple-mind-map/src/AssociativeLine.js @@ -7,7 +7,8 @@ import { cubicBezierPath, getNodePoint, computeNodePoints, - getNodeLinePath + getNodeLinePath, + getDefaultControlPointOffsets } from './utils/associativeLineUtils' // 关联线类 @@ -467,8 +468,14 @@ class AssociativeLine { this.controlPointMousemoveState.endPoint = endPoint let targetIndex = getAssociativeLineTargetIndex(node, toNode) this.controlPointMousemoveState.targetIndex = targetIndex - let offsets = - node.nodeData.data.associativeLineTargetControlOffsets[targetIndex] + let offsets = [] + let associativeLineTargetControlOffsets = node.nodeData.data.associativeLineTargetControlOffsets + if (!associativeLineTargetControlOffsets) { + // 兼容0.4.5版本,没有associativeLineTargetControlOffsets的情况 + offsets = getDefaultControlPointOffsets(startPoint, endPoint) + } else { + offsets = associativeLineTargetControlOffsets[targetIndex] + } let point1 = null let point2 = null // 拖拽的是控制点1 @@ -510,8 +517,14 @@ class AssociativeLine { let { pos, startPoint, endPoint, targetIndex } = this.controlPointMousemoveState let [, , node] = this.activeLine - let offsetList = - node.nodeData.data.associativeLineTargetControlOffsets || [] + let offsetList = [] + let associativeLineTargetControlOffsets = node.nodeData.data.associativeLineTargetControlOffsets + if (!associativeLineTargetControlOffsets) { + // 兼容0.4.5版本,没有associativeLineTargetControlOffsets的情况 + offsetList[targetIndex] = getDefaultControlPointOffsets(startPoint, endPoint) + } else { + offsetList = associativeLineTargetControlOffsets + } let offset1 = null let offset2 = null if (this.mousedownControlPointKey === 'controlPoint1') { diff --git a/simple-mind-map/src/utils/associativeLineUtils.js b/simple-mind-map/src/utils/associativeLineUtils.js index 5ae13fad..018c33b9 100644 --- a/simple-mind-map/src/utils/associativeLineUtils.js +++ b/simple-mind-map/src/utils/associativeLineUtils.js @@ -160,3 +160,23 @@ export const getNodeLinePath = (startPoint, endPoint, node, toNode) => { controlPoints } } + +// 获取默认的控制点差值 +export const getDefaultControlPointOffsets = (startPoint, endPoint) => { + let controlPoints = computeCubicBezierPathPoints( + startPoint.x, + startPoint.y, + endPoint.x, + endPoint.y + ) + return [ + { + x: controlPoints[0].x - startPoint.x, + y: controlPoints[0].y - startPoint.y + }, + { + x: controlPoints[1].x - endPoint.x, + y: controlPoints[1].y - endPoint.y + } + ] +} \ No newline at end of file