bill hai 2 meses
pai
achega
b5aba948e5

+ 9 - 3
src/core/components/group/group.vue

@@ -27,6 +27,7 @@ import { EntityShape } from "@/deconstruction.js";
 import { getBaseItem } from "../util.ts";
 import { useForciblyShowItemIds } from "@/core/hook/use-global-vars.ts";
 import { themeColor } from "@/constant";
+import { debounce, frameEebounce } from "@/utils/shared.ts";
 
 const props = defineProps<{ data: GroupData }>();
 const emit = defineEmits<{
@@ -73,22 +74,27 @@ const { shape, tData, data } = useComponentStatus<Rect, GroupData>({
           },
         };
       },
-      handler(data, mat) {
+      handler: debounce((data, mat) => {
         setShapeTransform(shape.value!.getNode(), mat);
         matResponse({ data, mat, store }, prevMat);
         prevMat = mat;
         getGroupShapes!().forEach((shape) => nextTick(() => shape.fire("bound-change")));
         return true;
-      },
+      }, 6),
       start() {
         autoUpdate.value = false;
+        console.error("开始批量移动");
         history.onceTrack(
-          () => new Promise<void>((resolve) => (transformResolve = resolve))
+          () =>
+            new Promise<void>((resolve) => {
+              transformResolve = resolve;
+            })
         );
       },
       callback() {
         autoUpdate.value = true;
         transformResolve();
+        console.log("结束批量移动");
         callback();
       },
     });

+ 22 - 7
src/core/components/group/temp-group.vue

@@ -4,7 +4,7 @@
 
 <script lang="ts" setup>
 import { defaultStyle, GroupData } from "./index.ts";
-import { computed, nextTick, ref, watch } from "vue";
+import { computed, nextTick, onUnmounted, ref, watch } from "vue";
 import { DC, EntityShape } from "@/deconstruction.js";
 import { Rect, RectConfig } from "konva/lib/shapes/Rect";
 import { useViewerInvertTransform } from "@/core/hook/use-viewer.ts";
@@ -40,8 +40,10 @@ const invMat = useViewerInvertTransform();
 const updateBound = () => {
   const shapes = $shapes.value;
   if (!shapes?.length) {
+    console.error("!shapes");
     return;
   }
+  console.log(shapes);
   let lx = Number.MAX_VALUE;
   let ly = Number.MAX_VALUE;
   let rx = Number.MIN_VALUE;
@@ -99,19 +101,32 @@ const { on } = useOnComponentBoundChange();
 const $shapes = computed(getGroupShapes);
 const syncUpdateBound = debounce(updateBound, 0);
 watch(
-  () =>
-    data.value.ids.join(",") +
-    (props.autoUpdate ? "1" : "0") +
-    (data.value.listening ? "1" : "0") +
-    (stage.value ? "1" : "0"),
+  () => {
+    return (
+      data.value.ids.join(",") +
+      (props.autoUpdate ? "1" : "0") +
+      (data.value.listening ? "1" : "0") +
+      (stage.value ? "1" : "0")
+    );
+  },
   (_a, _b, onCleanup) => {
     if (props.autoUpdate) {
-      onCleanup(on($shapes, () => props.autoUpdate && syncUpdateBound(), false));
+      onCleanup(
+        on(
+          $shapes,
+          () => {
+            props.autoUpdate && syncUpdateBound();
+          },
+          false
+        )
+      );
     }
   },
   { immediate: true }
 );
 
+onUnmounted(() => console.error("des temp-group"));
+
 defineExpose({
   get shape() {
     return shape.value;

+ 49 - 15
src/core/components/line/temp-line.vue

@@ -1,19 +1,25 @@
 <template>
   <v-group :id="data.id" ref="shape">
-    <singleLine
-      v-for="item in data.lines"
-      :key="item.id"
-      :line="item"
-      :data="data"
-      :add-mode="addMode"
-      :can-edit="!initData"
-      :dragPointIds="dragPointIds"
-      @add-point="(p) => addPointHandler(p, item)"
-      @del-point="delPointHandler"
-      @update-point="updatePointHandler"
-      @update-before="updateBeforeHandler"
-      @update="updateHandler"
-      @del-line="delLineHandler(item)"
+    <v-group>
+      <singleLine
+        v-for="item in data.lines"
+        :key="item.id"
+        :line="item"
+        :data="data"
+        :add-mode="addMode"
+        :can-edit="!initData"
+        :dragPointIds="dragPointIds"
+        @add-point="(p) => addPointHandler(p, item)"
+        @del-point="delPointHandler"
+        @update-point="updatePointHandler"
+        @update-before="updateBeforeHandler"
+        @update="updateHandler"
+        @del-line="delLineHandler(item)"
+      />
+    </v-group>
+    <v-rect
+      v-if="operMode.mulSelection"
+      :config="{ fill: 'red', ...lineBox, opacity: 0.1 }"
     />
   </v-group>
 </template>
@@ -27,12 +33,17 @@ import { computed, ref } from "vue";
 import { useZIndex } from "@/core/hook/use-layer.ts";
 import { DC } from "@/deconstruction.js";
 import { Group } from "konva/lib/Group";
+import { useOperMode } from "@/core/hook/use-status.ts";
+import { useViewerInvertTransform } from "@/core/hook/use-viewer.ts";
+import { useMouseShapeStatus } from "@/core/hook/use-mouse-status.ts";
 
 const props = defineProps<{
   data: LineData;
   addMode?: boolean;
   canEdit?: boolean;
 }>();
+
+const operMode = useOperMode();
 const initData = useInitData();
 const emit = defineEmits<{
   (e: "updateShape"): void;
@@ -43,6 +54,28 @@ const data = computed(() => {
   return initData.value;
 });
 
+const invMat = useViewerInvertTransform();
+const lineBox = computed(() => {
+  const rect = shape.value?.getNode().getClientRect();
+  if (!rect) {
+    return {};
+  }
+  const start = invMat.value.point({ x: rect.x, y: rect.y });
+  const end = invMat.value.point({ x: rect.x + rect.width, y: rect.y + rect.height });
+  let width = end.x - start.x;
+  let height = end.y - start.y;
+
+  if (width < 0) {
+    start.x = end.x;
+    width = -width;
+  }
+  if (height < 0) {
+    start.y = end.y;
+    height = -height;
+  }
+  return { ...start, width, height };
+});
+
 const dragPointIds = ref<string[]>();
 let track = false;
 let ctx: NLineDataCtx;
@@ -53,7 +86,7 @@ const updateBeforeHandler = (ids: string[]) => {
 };
 
 const delPointHandler = (p: LineData["points"][0]) => {
-  delPoint(props.data, p.id, ctx)
+  delPoint(props.data, p.id, ctx);
 };
 
 const addPointHandler = (p: LineData["points"][0], l: LineData["lines"][0]) => {
@@ -90,4 +123,5 @@ const updateHandler = () => {
 
 const shape = ref<DC<Group>>();
 useZIndex(shape, data);
+useMouseShapeStatus(shape);
 </script>

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

@@ -78,7 +78,6 @@ export const useGetDXF = () => {
       if (!pl.content) return;
       const $text = $stage.findOne<Group>(`#${pl.id}`)?.findOne<Text>(".text");
       if ($text) {
-        console.error('写入文字')
         writeText($text);
       }
     };

+ 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"));
 

+ 16 - 12
src/core/hook/use-transformer.ts

@@ -95,7 +95,7 @@ export const useTransformer = installGlobalVar(() => {
   });
 
   const cleanups: (() => void)[] = [];
-  const getData = useGetComponentData()
+  const getData = useGetComponentData();
   const viewer = useViewer();
   getSvgContent("./icons/m_rotate.svg").then((svgContent) => {
     const svg = parseSvgContent(svgContent);
@@ -117,23 +117,23 @@ export const useTransformer = installGlobalVar(() => {
     rotateRect.opacity(0);
     rotateRect.parent!.add(group);
     const update = async () => {
-      await nextTick()
+      await nextTick();
       setShapeTransform(group, rotateRect.getTransform());
       group.x(group.x() + 8);
       group.y(group.y() + 8);
       group.visible(rotateRect.visible());
     };
-    viewer.viewer.bus.on("transformChange", update)
+    viewer.viewer.bus.on("transformChange", update);
 
     const stopShapeJoin = watch(
       () => transformer.queueShapes.value[0],
       (shape, _b, onCleanup) => {
         if (shape) {
-          const data = getData(computed(() => shape))
+          const data = getData(computed(() => shape));
           update();
           shape.on("bound-change", update);
           onCleanup(() => shape.off("bound-change", update));
-          onCleanup(watch(data, update))
+          onCleanup(watch(data, update));
         }
       },
       { immediate: true }
@@ -291,7 +291,6 @@ 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)));
     });
@@ -304,7 +303,6 @@ export const useShapeDrag = (shape: Ref<DC<EntityShape> | undefined>) => {
       },
       listener(document.documentElement, "pointerup", (ev) => {
         if (ev.button !== 0) return;
-        console.error('up')
         start && leave();
       }),
     ]);
@@ -348,6 +346,7 @@ export const useShapeTransformer = <T extends EntityShape>(
   const can = useCan();
 
   const init = ($shape: T) => {
+    let isRun = false;
     let rep: Rep<T>;
     if (replaceShape) {
       rep = replaceShape($shape);
@@ -360,12 +359,13 @@ export const useShapeTransformer = <T extends EntityShape>(
     }
 
     let selfFire = false;
-    const set = frameEebounce((appleTransform: Transform | undefined) => {
+    const set = (appleTransform: Transform | undefined) => {
       transform.value = appleTransform;
       selfFire = true;
       $shape.fire("bound-change");
       selfFire = false;
-    });
+    };
+
     const updateTransform = () => {
       if (!can.dragMode) return;
       let appleTransform = rep.tempShape.getTransform().copy();
@@ -398,6 +398,7 @@ export const useShapeTransformer = <T extends EntityShape>(
       (translate, oldTranslate) => {
         if (translate) {
           if (!oldTranslate) {
+            isRun = true;
             rep.init && rep.init();
             rep.update && rep.update();
           }
@@ -412,6 +413,7 @@ export const useShapeTransformer = <T extends EntityShape>(
         } else {
           prevMoveTf = null;
           transform.value = void 0;
+          isRun = false;
         }
       },
       { immediate: true }
@@ -441,6 +443,7 @@ export const useShapeTransformer = <T extends EntityShape>(
 
         let isEnter = false;
         const downHandler = () => {
+          isRun = true;
           if (isEnter) {
             mode.pop();
           }
@@ -457,6 +460,7 @@ export const useShapeTransformer = <T extends EntityShape>(
           document.documentElement,
           "pointerup",
           () => {
+            isRun = false;
             if (isEnter) {
               mode.pop();
               transform.value = void 0;
@@ -626,7 +630,7 @@ export const useCustomTransformer = <T extends BaseItem, S extends EntityShape>(
         return {
           tempShape: repResult.shape,
           update: () => {
-              repResult.update && repResult.update(data.value, repResult.shape);
+            repResult.update && repResult.update(data.value, repResult.shape);
           },
           init: () => {
             repResult.init && repResult.init(data.value, repResult.shape);
@@ -688,7 +692,7 @@ export const useLineTransformer = <T extends LineTransformerData>(
   let inverAttitude: Transform;
   let stableVs = data.value.points;
   let tempVs = data.value.points;
-  const transformer = useTransformer()
+  const transformer = useTransformer();
 
   useCustomTransformer(shape, data, {
     openSnap: true,
@@ -730,7 +734,7 @@ export const useLineTransformer = <T extends LineTransformerData>(
         repShape.points(flatPositions(initVs));
         repShape.closed(true);
         inverAttitude = inverMat;
-        transformer.forceUpdate()
+        transformer.forceUpdate();
       };
       update(data.value);
 

+ 0 - 1
src/example/fuse/enter.ts

@@ -80,7 +80,6 @@ const login = (isBack = true) => {
       params.value.token = res.token;
       // console.log(res.token, {...params.value})
       // setTimeout(() => location.reload(), 1000)
-      console.error('login')
     });
     return;
   }

+ 0 - 1
src/example/platform/platform-draw.ts

@@ -106,7 +106,6 @@ const getResourceLayers = (data: AIExposeData) => {
         box = floor.box;
       }
 
-      console.error('data.taggings', data.taggings)
       return {
         ...floor,
         box,

+ 0 - 1
src/example/platform/platform-resource.ts

@@ -207,7 +207,6 @@ export const taggingGets = {
 
       const reqs = signages.map((signage: any) => {
         if (!validNum(signage.pos[0]) || !validNum(signage.pos[2])) return;
-        console.error(signage)
         const getIcon =
           signage.icon.indexOf("style-") === 0
             ? getSceneApi(undefined, `/styles/${signage.icon}.svg`).catch((e) => {

+ 0 - 1
src/mock.ts

@@ -121,7 +121,6 @@ const saveTabulationData = async (data: {
   isAutoGen: boolean,
   paperKey?: string;
 }) => {
-  console.error('???', data)
   localStorage.setItem("tab-draw-data", JSON.stringify(data.store));
   localStorage.setItem("tab-view-port", JSON.stringify(data.viewport));
   localStorage.setItem("tab-paper-key", JSON.stringify(data.paperKey));