|
@@ -219,19 +219,20 @@ class WorkViewModel : ViewModel() {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 给定屏幕上一个位置,查找目标身上处于这个位置的点在数组中的索引
|
|
|
- * 本函数会依次遍历轮廓、长、宽各个数组,找到数组中处于该位置的点
|
|
|
- * @param position 屏幕上点的坐标,这里是相对于画布左上角的位移
|
|
|
- * @return Pair<Int, Int>,第一个 Int 是数组的标记,0:轮廓,1:长,2:宽;第二个 Int 表示点在数组中的索引。
|
|
|
- * @return Pair(-1, -1),表示没有找到目标点
|
|
|
+ * 给定屏幕上一个位置, 查找目标身上处于这个位置的点在数组中的索引
|
|
|
+ * 本函数会依次遍历 (轮廓/长/宽) 各个数组, 找到数组中处于该位置的点
|
|
|
+ * @param position 屏幕上点的坐标, 这里是相对于画布左上角的位移
|
|
|
+ * @return Pair<pathIndex,pointIndex>, 默认值 (-1,-1), 表示没有找到目标点
|
|
|
+ * pathIndex: 数组的标记, 0:轮廓, 1:长, 2:宽
|
|
|
+ * pointIndex: 表示点在数组中的索引
|
|
|
*/
|
|
|
- fun findVertexAt(position: Offset): Pair<Int, Int> {
|
|
|
+ private fun findVertexAt(position: Offset): Pair<Int, Int> {
|
|
|
|
|
|
/**
|
|
|
- * 给定屏幕上一个位置,在数组中查找此坐标附近的点
|
|
|
- * 由于画布经过了缩放、平移等操作,所以需要把数组中的坐标经过相同的变换映射到新的坐标
|
|
|
- * @param list 画布上点的数组,这里指轮廓,长或宽的数组
|
|
|
- * @return 点在画布上的位置,-1 表示查无此点
|
|
|
+ * 给定屏幕上一个位置, 在数组中查找此坐标附近的点
|
|
|
+ * 由于画布经过了缩放, 平移等操作, 所以需要把数组中的坐标经过相同的变换映射到新的坐标
|
|
|
+ * @param list 画布上点的数组, 这里指 (轮廓/长/宽) 的数组
|
|
|
+ * @return 点在画布上的位置, -1 表示查无此点
|
|
|
*/
|
|
|
fun findVertex(list: List<Offset>): Int {
|
|
|
val center = canvasSize.center
|
|
@@ -251,20 +252,28 @@ class WorkViewModel : ViewModel() {
|
|
|
return -1
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 用途: 查找当前正在编辑的点
|
|
|
+ * 逻辑: 在可编辑状态下, 按照优先级 (轮廓>长>宽) 的顺序查找
|
|
|
+ */
|
|
|
var pathIndex = -1
|
|
|
var pointIndex = -1
|
|
|
-
|
|
|
- val paths: List<List<Offset>> = listOf(
|
|
|
- contourPath.value,
|
|
|
- lengthPath.value,
|
|
|
- widthPath.value
|
|
|
- )
|
|
|
-
|
|
|
- for (i in paths.indices) {
|
|
|
- pointIndex = findVertex(paths[i])
|
|
|
- if (pointIndex >= 0) {
|
|
|
- pathIndex = i
|
|
|
- break
|
|
|
+ if (imageState.value.editMode) {
|
|
|
+ if (imageState.value.showContour) {
|
|
|
+ pointIndex = findVertex(contourPath.value)
|
|
|
+ if (pointIndex >= 0) {
|
|
|
+ pathIndex = 0
|
|
|
+ }
|
|
|
+ } else if (imageState.value.showLength) {
|
|
|
+ pointIndex = findVertex(lengthPath.value)
|
|
|
+ if (pointIndex >= 0) {
|
|
|
+ pathIndex = 1
|
|
|
+ }
|
|
|
+ } else if (imageState.value.showWidth) {
|
|
|
+ pointIndex = findVertex(widthPath.value)
|
|
|
+ if (pointIndex >= 0) {
|
|
|
+ pathIndex = 2
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -302,18 +311,19 @@ class WorkViewModel : ViewModel() {
|
|
|
if (dragStartPos == null) {
|
|
|
dragStartPos = position
|
|
|
|
|
|
- // 编辑模式下,开始拖动时,检查有没有目标上的点被
|
|
|
- if (imageState.value.editMode) {
|
|
|
- val (pathIndex, pointIndex) = findVertexAt(position)
|
|
|
- isEditingVertex = pathIndex >= 0 && pointIndex >= 0
|
|
|
- if (isEditingVertex) {
|
|
|
- editingPath = pathIndex
|
|
|
- editingPoint = pointIndex
|
|
|
- }
|
|
|
+ // 获取目标上被拖动的点
|
|
|
+ val (pathIndex, pointIndex) = findVertexAt(position)
|
|
|
+ isEditingVertex = pathIndex >= 0 && pointIndex >= 0
|
|
|
+ if (isEditingVertex) {
|
|
|
+ editingPath = pathIndex
|
|
|
+ editingPoint = pointIndex
|
|
|
}
|
|
|
|
|
|
Log.i(
|
|
|
- TAG, "editing:$isEditingVertex, path: $editingPath, " +
|
|
|
+ TAG,
|
|
|
+ "drag started, " +
|
|
|
+ "editing:$isEditingVertex, " +
|
|
|
+ "path:$editingPath, " +
|
|
|
"point:$editingPoint"
|
|
|
)
|
|
|
}
|