bill před 2 měsíci
rodič
revize
c252380ca2

+ 50 - 42
src/core/components/icon/icon.ts

@@ -14,69 +14,76 @@ import { Color } from "three";
 
 export const shapeName = "图例";
 export const defaultStyle = {
-  coverFill: '#000000',
+  coverFill: "#000000",
   coverOpcatiy: 0,
   strokeScaleEnabled: false,
   width: 80,
   height: 80,
 };
 
-  type ColorCounts = [string, number][]
-  const colorsManage = (counts: ColorCounts, color: any) => {
+type ColorCounts = [string, number][];
+const colorsManage = (counts: ColorCounts, color: any) => {
   if (!color) {
     return;
   }
-  const colorHex = new Color(color).getHexString()
-  const item = counts.find(([c]) => c === colorHex)
+  const colorHex = new Color(color).getHexString();
+  const item = counts.find(([c]) => c === colorHex);
   if (!item) {
-    counts.push([colorHex, 1])
+    counts.push([colorHex, 1]);
   } else {
-    item[1]++
+    item[1]++;
   }
-}
+};
 const findColor = (counts: ColorCounts) => {
-  let ndx = -1
-  let max = 0
+  let ndx = -1;
+  let max = 0;
   for (let i = 0; i < counts.length; i++) {
     if (counts[i][1] >= max) {
-      ndx = i
-      max = counts[i][1]
+      ndx = i;
+      max = counts[i][1];
     }
   }
   if (~ndx) {
-    return `#${counts[ndx][0]}`
+    return `#${counts[ndx][0]}`;
   }
-}
+};
 
-export const getIconStyle = async (url: string, width = defaultStyle.width, height = defaultStyle.height) => {
+export const getIconStyle = async (
+  url: string,
+  width = defaultStyle.width,
+  height = defaultStyle.height,
+  fixed = false
+) => {
   const svgContent = parseSvgContent(await getSvgContent(url));
-  if (width / height > svgContent.width / svgContent.height) {
-    width = svgContent.width / svgContent.height * height
-  } else {
-    height = svgContent.height / svgContent.width * width
+  if (!fixed) {
+    if (width / height > svgContent.width / svgContent.height) {
+      width = (svgContent.width / svgContent.height) * height;
+    } else {
+      height = (svgContent.height / svgContent.width) * width;
+    }
   }
-  const fillColorCounts: [string, number][] = []
-  const strokeColorCounts: [string, number][] = []
+  const fillColorCounts: [string, number][] = [];
+  const strokeColorCounts: [string, number][] = [];
 
   for (let i = 0; i < svgContent.paths.length; i++) {
-    colorsManage(fillColorCounts, svgContent.paths[i].fill)
-    colorsManage(strokeColorCounts, svgContent.paths[i].stroke)
+    colorsManage(fillColorCounts, svgContent.paths[i].fill);
+    colorsManage(strokeColorCounts, svgContent.paths[i].stroke);
   }
 
   const color = {
     fill: findColor(fillColorCounts) || null,
-    stroke: findColor(strokeColorCounts) || null
+    stroke: findColor(strokeColorCounts) || null,
   };
   if (!color.fill && !color.stroke) {
     color.stroke = "#000000";
-  } 
+  }
   return {
     url,
     width,
     height,
-    ...color
-  }
-}
+    ...color,
+  };
+};
 
 export const addMode = "dot";
 
@@ -102,17 +109,18 @@ export const getMouseStyle = (data: IconData) => {
       coverOpcatiy: data.coverOpcatiy || 0,
     },
     hover: { coverFill: fillStatus.hover, coverOpcatiy: hCoverOpcaoty },
-    select: { coverFill: fillStatus.select, coverOpcatiy: hCoverOpcaoty  },
-    focus: { coverFill: fillStatus.select, coverOpcatiy: hCoverOpcaoty  },
+    select: { coverFill: fillStatus.select, coverOpcatiy: hCoverOpcaoty },
+    focus: { coverFill: fillStatus.select, coverOpcatiy: hCoverOpcaoty },
     press: { coverFill: fillStatus.press, coverOpcatiy: hCoverOpcaoty },
   };
 };
 
 export type IconData = Partial<typeof defaultStyle> &
-  BaseItem & Size & {
+  BaseItem &
+  Size & {
     fill?: string | null;
     stroke?: string | null;
-    name?: string
+    name?: string;
     strokeWidth?: number;
     coverFill?: string;
     coverStroke?: string;
@@ -136,7 +144,7 @@ export const interactiveToData: InteractiveTo<"icon"> = ({
   ...args
 }) => {
   if (info.cur) {
-  console.error(preset)
+    console.error(preset);
     return interactiveFixData({
       ...args,
       viewTransform,
@@ -168,17 +176,17 @@ export const interactiveFixData: InteractiveFix<"icon"> = ({
   return data;
 };
 
-
-
-
-export const matResponse = ({data, mat, increment}: MatResponseProps<'icon'>) => {
+export const matResponse = ({
+  data,
+  mat,
+  increment,
+}: MatResponseProps<"icon">) => {
   data.mat = increment ? mat.copy().multiply(new Transform(data.mat)).m : mat.m;
   return data;
-}
-
+};
 
 export const getPredefine = (key: keyof IconData) => {
-  if (key === 'fill' || key === 'stroke') {
-    return { canun: true }
+  if (key === "fill" || key === "stroke") {
+    return { canun: true };
   }
-}
+};

+ 4 - 3
src/example/platform/platform-draw.ts

@@ -60,6 +60,7 @@ const scaleResource = (info: AIExposeData, scale: number) => {
         if (!floor || !floor.box) return;
         const w = floor.box.bound.x_max - floor.box.bound.x_min;
         const h = floor.box.bound.y_max - floor.box.bound.y_min;
+        console.log(item.size)
         return {
           ...item,
           position: {
@@ -67,6 +68,7 @@ const scaleResource = (info: AIExposeData, scale: number) => {
             y: floor.box.bound.y_min + h * item.position.y,
             z: floor.box.bound.z_min + 0.001,
           },
+          fixed: true,
           size: item.size
             ? {
                 width: item.size!.width * w,
@@ -118,13 +120,11 @@ const getResourceLayers = (data: AIExposeData) => {
       box.bound.z_min = -999999;
       box.bound.z_max = 999999;
 
-      console.log("楼层范围", box.bound.z_min, box.bound.z_max);
       return {
         ...floor,
         box,
         taggings: data.taggings
           .filter((item) => {
-            console.log("tag高度", item.position.z);
             return (
               item.position.z === undefined ||
               (item.position.z >= box.bound.z_min &&
@@ -317,7 +317,8 @@ const drawLayerResource = async (
           attach = await getIconStyle(
             item.url,
             item.size?.width,
-            item.size?.height
+            item.size?.height,
+            item.fixed,
           );
         } catch {}
       }

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

@@ -42,6 +42,7 @@ export type Taging = {
   url: string;
   position: Pos & { z: number };
   size?: Size;
+  fixed?: boolean
   rotate?: number;
   name?: string;
   pixel?: boolean;