瀏覽代碼

Update 'src/app/core/parser/parser-orchestrator.js'

Fixes to read GEO file with midpoint.
New comments.
Introduced 3 "try/catch" to allow working in presence of GEO file with errors
leo 2 年之前
父節點
當前提交
d69412fc89
共有 1 個文件被更改,包括 114 次插入61 次删除
  1. 114 61
      src/app/core/parser/parser-orchestrator.js

+ 114 - 61
src/app/core/parser/parser-orchestrator.js

@@ -1,3 +1,14 @@
+/*
+ * iGeom by LInE
+ * Free software to student private data
+ *
+ * http://www.matematica.br/igeom
+ * http://www.usp.br/line
+ *
+ * ./app/core/parser/parser-orchestrator.js
+ * @version 2023/07/14: Fixe reading GEO file with midpoint
+ */
+
 import { ELEMENTS_CLASS } from "../enums/elements-class-enum";
 import { PointModel } from "../../components/point-component/models/point-model";
 import { MiddlePointModel } from "../../components/middle-point/models/middle-point-model";
@@ -15,72 +26,114 @@ export class ParserOrchestrator {
     this.drawersMap = new Map();
     this.tools = menu.tools;
     }
+
   orchestrate () {
-var aux = "";
-var ii=0;
-    for (const i in this.mapArr) { this.do(this.mapArr[i]); aux += "(" + ii + "," + this.mapArr[i] + "); "; ii++; }
-    for (const i in this.list) this.draw(this.list[i]);
-console.log("parser-orchestrator.js: orchestrate(): " + aux);
+    var aux = ""; //D
+    var ii=0; //D
+    try {
+      for (const i in this.mapArr) {
+        this.do(this.mapArr[i]);
+        //D aux += "(" + ii + "," + this.mapArr[i] + "); "; ii++; 
+        }
+      for (const i in this.list) {
+        aux += "(" + ii + "," + this.list[i] + "); "; ii++;
+        this.draw(this.list[i]);
+        }
+    } catch (error) {
+      console.log("parser-orchestrator.js!orchestrate(): error " + error + "\n * " + aux);
+      }
+    console.log("parser-orchestrator.js: orchestrate(): end"); //D
     }
+
   do (map) {
+    var aux = "", int_type = "-1"; //D
     let object;
-    switch (map.get("type")) {
-      case ELEMENTS_CLASS.CIRCUMFERENCE:
-        object = CircumferenceModel.do(map, this.list);
-        break;
-      case ELEMENTS_CLASS.INTERSECTION_POINT:
-        object = IntersectionModel.do(map, this.list);
-        break;
-      case ELEMENTS_CLASS.POINT:
-        object = PointModel.do(map, this.list);
-        break;
-      case ELEMENTS_CLASS.MIDDLE_POINT:
-        object = MiddlePointModel.do(map, this.list);
-        break;
-      case ELEMENTS_CLASS.LINE_SEGMENT:
-        object = LineSegmentModel.do(map, this.list);
-        break;
-      case ELEMENTS_CLASS.LINE:
-        object = LineModel.do(map, this.list);
-        break;
-      default:
-        break;
-      }
-    if (object == undefined) return;
-    switch (object.elementClass) {
-      case ELEMENTS_CLASS.CIRCUMFERENCE:
-        Label.pushLower(object.label);
-      case ELEMENTS_CLASS.LINE_SEGMENT:
-        Label.pushLower(object.label);
-      default:
-        Label.pushUpper(object.label);
-      }
-    this.list.push(object);
-    }
-  draw (object) {
-    if (object == undefined) return;
-    let drawer;
+    try {
+      aux = "1, "; //D
+      int_type = map.get("type");
+      switch (int_type) {
+        case ELEMENTS_CLASS.CIRCUMFERENCE:
+          aux = "2, "; //D
+          object = CircumferenceModel.do(map, this.list);
+          break;
+        case ELEMENTS_CLASS.INTERSECTION_POINT:
+          aux = "3, "; //D
+          object = IntersectionModel.do(map, this.list);
+          break;
+        case ELEMENTS_CLASS.POINT:
+          aux = "4, "; //D
+          object = PointModel.do(map, this.list);
+          break;
+        case ELEMENTS_CLASS.MIDDLE_POINT:
+          aux = "5, "; //D
+          object = MiddlePointModel.do(map, this.list);
+          break;
+        case ELEMENTS_CLASS.LINE_SEGMENT:
+          aux = "6, "; //D
+          object = LineSegmentModel.do(map, this.list);
+          break;
+        case ELEMENTS_CLASS.LINE:
+          aux = "7, "; //D
+          object = LineModel.do(map, this.list);
+          break;
+        default:
+          aux = "switch type missing! ELEMENTS_CLASS elementClass NOT implemented yet! Look iGeomJS code or try to report this to iGeomJS developers..."; //D
+          break;
+        }
+      if (object == undefined) return;
+      switch (object.elementClass) {
+        case ELEMENTS_CLASS.CIRCUMFERENCE:
+          Label.pushLower(object.label);
+        case ELEMENTS_CLASS.LINE_SEGMENT:
+          Label.pushLower(object.label);
+	//TODO: missing ELEMENTS_CLASS.MIDDLE_POINT ??
+        default:
+          Label.pushUpper(object.label);
+        }
+      this.list.push(object);
+    } catch (error) { console.log("parser-orchestrator.js!do(map): error " + error + "\n * " + aux); }
+    } // do(map)
 
-    switch (object.elementClass) {
-      case ELEMENTS_CLASS.CIRCUMFERENCE:
-        drawer = this.getDrawer(ELEMENTS_CLASS.CIRCUMFERENCE)
-        break;
-      case ELEMENTS_CLASS.INTERSECTION_POINT:
-        drawer = this.getDrawer(ELEMENTS_CLASS.INTERSECTION_POINT)
-        break;
-      case ELEMENTS_CLASS.POINT:
-        drawer = this.getDrawer(ELEMENTS_CLASS.POINT)
-        break;
-      case ELEMENTS_CLASS.LINE_SEGMENT:
-        drawer = this.getDrawer(ELEMENTS_CLASS.LINE_SEGMENT)
-        break;
-      case ELEMENTS_CLASS.LINE:
-        drawer = this.getDrawer(ELEMENTS_CLASS.LINE)
-        break;
-      default:
-        break;
-      }
-    drawer.draw ({ attrs: { genericObject: object } });
+  draw (object) {
+    var aux = ""; //D
+    try {
+      console.log("parser-orchestrator.js: draw(object): " + object); //D
+      aux = "1, "; //D
+      if (object == undefined) return;
+      aux += "2, "; //D
+      let drawer;
+      aux += "3, "; //D
+      switch (object.elementClass) {
+        case ELEMENTS_CLASS.CIRCUMFERENCE:
+          aux += "4, "; //D
+          drawer = this.getDrawer(ELEMENTS_CLASS.CIRCUMFERENCE);
+          break;
+        case ELEMENTS_CLASS.INTERSECTION_POINT:
+          aux += "5, "; //D
+          drawer = this.getDrawer(ELEMENTS_CLASS.INTERSECTION_POINT);
+          break;
+        case ELEMENTS_CLASS.POINT:
+          aux += "6, "; //D
+          drawer = this.getDrawer(ELEMENTS_CLASS.POINT);
+          break;
+        case ELEMENTS_CLASS.LINE_SEGMENT:
+          aux += "7, "; //D
+          drawer = this.getDrawer(ELEMENTS_CLASS.LINE_SEGMENT);
+          break;
+        case ELEMENTS_CLASS.LINE:
+          aux += "8, "; //D
+          drawer = this.getDrawer(ELEMENTS_CLASS.LINE);
+          break;
+        case ELEMENTS_CLASS.MIDDLE_POINT:
+          aux += "9, "; //D
+          drawer = this.getDrawer(ELEMENTS_CLASS.MIDDLE_POINT);
+          break;
+        default:
+          aux += "10 = object.elementClass NOT implemented yet! Look iGeomJS code or try to report this to iGeomJS developers..."; //D
+          break;
+        }
+      drawer.draw ({ attrs: { genericObject: object } });
+    } catch (error) { console.log("parser-orchestrator.js!draw(object): error " + error + "\n * " + aux); }
     }
 
   getDrawer (elementClass) {