bill 3 mēneši atpakaļ
vecāks
revīzija
083973109b

+ 11 - 1
src/core/components/arrow/temp-arrow.vue

@@ -17,6 +17,16 @@
         opacity: addMode ? 0.3 : data.opacity,
       }"
     />
+    <v-circle
+      v-if="zeroEq(lineLen(data.points[0], data.points[1]))"
+      :config="{
+        ...data.points[0],
+        radius: data.strokeWidth * 2,
+        opacity: 0,
+        fill: 'red',
+        offset: { x: data.strokeWidth, y: 0 },
+      }"
+    />
 
     <!-- <EditPolygon
       :data="{ ...data, stroke: data.fill, strokeWidth: data.strokeWidth + 5 }"
@@ -68,7 +78,7 @@ import { DC } from "@/deconstruction.js";
 import { computed, ref, watchEffect } from "vue";
 import { flatPositions } from "@/utils/shared.ts";
 import { Arrow } from "konva/lib/shapes/Arrow";
-import { Pos } from "@/utils/math.ts";
+import { lineLen, Pos, zeroEq } from "@/utils/math.ts";
 import { LineConfig } from "konva/lib/shapes/Line";
 import { Group } from "konva/lib/Group";
 import { useConfig } from "@/core/hook/use-config.ts";

+ 1 - 0
src/core/hook/use-event.ts

@@ -206,6 +206,7 @@ export const useGlobalOnlyRightClickShape = installGlobalVar(() => {
         const pos = stage.value?.getNode().pointerPos;
         if (!pos) return false;
         clickShape = stage.value?.getNode().getIntersection(pos);
+        console.log(clickShape)
         do {
           ndx = checkShapes.indexOf(clickShape!);
           if (~ndx) {

+ 8 - 8
src/core/hook/use-status.ts

@@ -26,14 +26,14 @@ export const useMode = installGlobalVar(() => {
       modes.forEach((mode) => modeStack.value.delete(mode));
     },
   };
-  // if (import.meta.env.DEV) {
-  //   watchEffect(
-  //     () => {
-  //       console.error([...modeStack.value.values()].join(","));
-  //     },
-  //     { flush: "sync" }
-  //   );
-  // }
+  if (import.meta.env.DEV) {
+    watchEffect(
+      () => {
+        console.error([...modeStack.value.values()].join(","));
+      },
+      { flush: "sync" }
+    );
+  }
   return modeStack;
 }, Symbol("mode"));
 

+ 3 - 1
src/core/hook/use-transformer.ts

@@ -290,6 +290,7 @@ export const useShapeDrag = (shape: Ref<DC<EntityShape> | undefined>) => {
     });
 
     shape.on("pointerdown.mouse-drag", (ev) => {
+      console.error('down')
       if (ev.evt.button !== 0) return;
       enter(conversion(getOffset(ev.evt)));
     });
@@ -302,6 +303,7 @@ export const useShapeDrag = (shape: Ref<DC<EntityShape> | undefined>) => {
       },
       listener(document.documentElement, "pointerup", (ev) => {
         if (ev.button !== 0) return;
+        console.error('up')
         start && leave();
       }),
     ]);
@@ -451,7 +453,7 @@ export const useShapeTransformer = <T extends EntityShape>(
         };
         transformer.on("pointerdown.shapemer", downHandler);
         const stopPointupListener = listener(
-          $shape.getStage()!.container(),
+          document.documentElement,
           "pointerup",
           () => {
             if (isEnter) {

+ 11 - 3
src/core/viewer.ts

@@ -93,9 +93,17 @@ export class Viewer {
 
   scale(center: Pos, scale: number, initMat = this.viewMat) {
     const base = initMat.decompose().scaleX;
-    if (base * scale < 0.05 || base * scale > 50) {
-      console.error("缩放范围0.05~50 已超过范围无法缩放");
-      return;
+    const isMin = base * scale < 0.05
+    const isMax = base * scale > 50
+    if (isMax || isMin) {
+      console.error("缩放范围0.05~50 将自动调整缩放值");
+      if (scale > 1 && isMin) {
+        scale = 0.05 / base
+      } else if (scale < 1 && isMax) {
+        scale = 50 / base
+      } else {
+        return;
+      }
     }
     if (isNaN(center.x) || isNaN(center.y)) {
       console.error(`无效中心点${center.x} ${center.y}`);