Skip to content

Commit c22e33c

Browse files
committed
fix(snapline): snapline cannot show when zoomed & add a build line to CONTRIBUTING.md
1 parent b7b08fb commit c22e33c

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

CONTRIBUTING.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ LogicFlow 维护同学会确认 issue 意图,更新合适的标签,关联 mi
2020
# 先创建开发分支开发,分支名应该有含义,避免使用 update、tmp 之类的
2121
$ git checkout -b branch-name
2222

23+
# 先 build 所有 workspace 依赖,避免在开发某个包时,找不到 workspace 依赖
24+
$ pnpm run build
25+
2326
# 开发某个包时,利用 build:watch 监听变化实时打包更新
2427
$ cd packages/core # or other packages, such as packages/extensions
2528
$ pnpm run build:watch

packages/core/src/model/SnaplineModel.ts

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,11 @@ export class SnaplineModel {
4848
const item = nodes[i]
4949
// 排除当前节点
5050
if (item.id !== draggingNode.id) {
51-
if (x === item.x) {
51+
const epsilon = 1
52+
if (equal(x, item.x, epsilon)) {
5253
isShowVertical = true
5354
}
54-
if (y === item.y) {
55+
if (equal(y, item.y, epsilon)) {
5556
isShowHorizontal = true
5657
}
5758
// 如果水平垂直都显示,则停止循环。减少不必要的遍历
@@ -95,19 +96,21 @@ export class SnaplineModel {
9596
// 排除当前节点
9697
if (item.id !== draggingNode.id) {
9798
const itemData = getNodeBBox(item)
99+
98100
// 如果节点的最大最小Y轴坐标与节点的最大最小Y轴坐标相等,展示水平线
101+
const epsilon = 1
99102
if (
100-
itemData.minY === draggingData?.minY ||
101-
itemData.maxY === draggingData?.minY
103+
equal(itemData.minY, draggingData?.minY, epsilon) ||
104+
equal(itemData.maxY, draggingData?.minY, epsilon)
102105
) {
103106
// 找到则停止循环。减少不必要的遍历
104107
isShowHorizontal = true
105108
horizontalY = draggingData.minY
106109
break
107110
}
108111
if (
109-
itemData.minY === draggingData?.maxY ||
110-
itemData.maxY === draggingData?.maxY
112+
equal(itemData.minY, draggingData?.maxY, epsilon) ||
113+
equal(itemData.maxY, draggingData?.maxY, epsilon)
111114
) {
112115
isShowHorizontal = true
113116
horizontalY = draggingData.maxY
@@ -151,18 +154,19 @@ export class SnaplineModel {
151154
if (item.id !== draggingNode.id) {
152155
const itemData = getNodeBBox(item)
153156
// 如果节点的最大最小X轴坐标与节点的最大最小X轴坐标相等,展示垂直线
157+
const epsilon = 1
154158
if (
155-
itemData.minX === draggingData?.minX ||
156-
itemData.maxX === draggingData?.minX
159+
equal(itemData.minX, draggingData?.minX, epsilon) ||
160+
equal(itemData.maxX, draggingData?.minX, epsilon)
157161
) {
158162
// 找到则停止循环。减少不必要的遍历
159163
isShowVertical = true
160164
verticalX = draggingData.minX
161165
break
162166
}
163167
if (
164-
itemData.minX === draggingData?.maxX ||
165-
itemData.maxX === draggingData?.maxX
168+
equal(itemData.minX, draggingData?.maxX, epsilon) ||
169+
equal(itemData.maxX, draggingData?.maxX, epsilon)
166170
) {
167171
isShowVertical = true
168172
verticalX = draggingData.maxX
@@ -235,4 +239,12 @@ export class SnaplineModel {
235239
}
236240
}
237241

242+
function equal(num1: number, num2: number, epsilon: number) {
243+
if (Math.abs(num1 - num2) <= epsilon) {
244+
return true
245+
} else {
246+
return false
247+
}
248+
}
249+
238250
export default SnaplineModel

0 commit comments

Comments
 (0)