瀏覽代碼

继续绘图

xushiting 2 年之前
父節點
當前提交
90029e1c3f

+ 1 - 1
src/graphic/Geometry/Img.js

@@ -5,9 +5,9 @@ export default class Img extends Geometry {
   constructor(src, vectorId) {
     super();
     this.src = null;
+    this.angle = 0;
     this.geoType = VectorType.Img;
     this.setId(vectorId);
-
     this.setSrc(src);
   }
 

+ 8 - 2
src/graphic/Layer.js

@@ -118,8 +118,6 @@ export default class Layer {
     ) {
       // 是否拖拽了
       this.dragging = true;
-    } else {
-      this.dragging = false;
     }
 
     const eventName = stateService.getEventName();
@@ -311,6 +309,14 @@ export default class Layer {
         addRoad.setNewRoadPoint("start", position);
         break;
       case LayerEvents.MoveCurveRoadPoint:
+        point = dataService.getCurvePoint(draggingItem.vectorId);
+        listenLayer.start(position, draggingItem.vectorId, null, point.parent);
+        if (listenLayer.modifyPoint) {
+          position = {
+            x: listenLayer.modifyPoint.x,
+            y: listenLayer.modifyPoint.y,
+          };
+        }
         if (draggingItem) {
           moveRoad.moveCurveRoadPoint(draggingItem.vectorId, position);
           needAutoRedraw = true;

+ 8 - 18
src/graphic/ListenLayer.js

@@ -29,11 +29,12 @@ export default class ListenLayer {
   }
 
   //开始监听,exceptPointId表示不考虑的点,exceptRoadIds表示不考虑的墙
-  start(position, exceptPointId, exceptRoadIds) {
+  start(position, exceptPointId, exceptRoadIds, exceptCurveRoadId) {
     let nearest = this.getNearForVectors(
       position,
       exceptPointId,
-      exceptRoadIds
+      exceptRoadIds,
+      exceptCurveRoadId
     );
 
     if (
@@ -83,12 +84,12 @@ export default class ListenLayer {
   // 获得最近的墙面和墙角
   // 同时获得吸附的相关信息
   // 找到选中的symbol(只有选中了,才算是最近的)
-  getNearForVectors(position, exceptPointId, exceptRoadIds) {
+  getNearForVectors(position, exceptPointId, exceptRoadIds, exceptCurveRoadId) {
     let info1 = this.getNearForRoad(position, exceptPointId, exceptRoadIds);
     let info2 = this.getNearForCurveRoad(
       position,
       exceptPointId,
-      exceptRoadIds
+      exceptCurveRoadId
     );
 
     let min1 = info1.min1;
@@ -327,7 +328,7 @@ export default class ListenLayer {
   }
 
   //暂时只考虑端点
-  getNearForCurveRoad(position, exceptPointId, exceptRoadIds) {
+  getNearForCurveRoad(position, exceptPointId, exceptCurveRoadId) {
     let min1 = null; // 与墙角的距离
     let min2 = null; // 与墙面的距离
     // 纠正
@@ -341,7 +342,7 @@ export default class ListenLayer {
     }
     const curveRoads = dataService.getCurveRoads();
     for (const curveRoadId in curveRoads) {
-      if (exceptRoadIds && exceptRoadIds.hasOwnProperty(curveRoadId)) {
+      if (exceptCurveRoadId && exceptCurveRoadId == curveRoadId) {
         continue;
       }
 
@@ -419,7 +420,6 @@ export default class ListenLayer {
     };
   }
 
-  // position用来判断是否在墙的symbol上
   updateSelectInfos(nearest, minDistance) {
     console.log("实时监控:" + JSON.stringify(nearest));
     // 墙角状态是否改变
@@ -475,17 +475,7 @@ export default class ListenLayer {
       };
     }
 
-    const flag5 = this.isChanged(
-      nearest.tagInfo.tagId,
-      nearest.tagInfo.state,
-      5
-    );
-    this.tagInfo = {
-      tagId: nearest.tagInfo.tagId,
-      state: nearest.tagInfo.state,
-    };
-
-    return flag1 || flag2 || flag5;
+    return flag1 || flag2;
   }
 
   // type是1表示点,2表示墙,3表示symbol,4表示component, 5表示tag,6表示furniture

+ 2 - 8
src/graphic/Renderer/Draw.js

@@ -31,15 +31,9 @@ export default class Draw {
     );
   }
 
-  drawBackGround(color) {
+  drawBackGroundImg(vector) {
     this.context.save();
-    this.context.fillStyle = color;
-    this.context.fillRect(
-      0,
-      0,
-      this.context.canvas.width,
-      this.context.canvas.height
-    );
+
     this.context.restore();
   }
 

+ 4 - 0
src/graphic/Renderer/Render.js

@@ -36,6 +36,8 @@ export default class Render {
       case VectorType.MeasureLine:
         draw.drawMeasures(vector, styleType);
         return;
+      case VectorType.BackgroundImg:
+        draw.drawBackGroundImg();
     }
   }
 
@@ -96,6 +98,8 @@ export default class Render {
   autoRedraw() {
     draw.clear();
 
+    this.drawGeometry(dataService.getBackgroundImg());
+
     let roads = dataService.getRoads();
     for (let key in roads) {
       this.drawGeometry(roads[key]);

+ 13 - 0
src/graphic/Service/DataService.js

@@ -21,6 +21,7 @@ export class DataService {
   }
 
   initVectorData() {
+    this.vectorData.backgroundImg = null;
     this.vectorData.points = {};
     this.vectorData.roads = {};
     this.vectorData.edges = {};
@@ -249,6 +250,18 @@ export class DataService {
     this.vectorData.edges[edge.vectorId] = edge;
   }
 
+  addBackgroundImg(img) {
+    this.vectorData.backgroundImg = img;
+  }
+
+  getBackgroundImg() {
+    return this.vectorData.backgroundImg;
+  }
+
+  setAngle(angle) {
+    this.vectorData.backgroundImg.angle = angle;
+  }
+
   /**
    * 对标注的操作
    */

+ 16 - 0
src/graphic/Service/ImageService.js

@@ -0,0 +1,16 @@
+import Img from "../Geometry/Img.js";
+import { dataService } from "./DataService.js";
+import { mathUtil } from "../Util/MathUtil";
+
+export default class ImageService {
+  constructor() {}
+
+  create(position, vectorId) {
+    let point = new Img(position, vectorId);
+    dataService.addPoint(point);
+    return point;
+  }
+}
+
+const imageService = new ImageService();
+export { imageService };

+ 3 - 0
src/graphic/Service/RoadService.js

@@ -525,6 +525,9 @@ export default class RoadService {
     // 不能重合
     let point1 = dataService.getPoint(pointId1);
     let point2 = dataService.getPoint(pointId2);
+    if (!point2) {
+      return false;
+    }
     const dx = point1.x - point2.x;
     const dy = point1.y - point2.y;
     let parent1 = point1.getParent();

+ 1 - 0
src/graphic/enum/VectorType.js

@@ -14,5 +14,6 @@ const VectorType = {
   CurveRoad: "CurveRoad",
   CurveEdge: "CurveEdge",
   Tag: "Tag",
+  BackgroundImg: "BackgroundImg",
 };
 export default VectorType;