|
@@ -82,10 +82,11 @@ export class IntersectionDrawer extends Drawer {
|
|
|
// Avoid to create intersection between lines/segments when some defining point is the intersection
|
|
|
// Return true <=> need a new point
|
|
|
alreadyHasIntersection (og1, og2, str_a1, str_a2) {
|
|
|
+ // app/core/enums/elements-class-enum.js : ELEMENTS_CLASS.LINE, ELEMENTS_CLASS.LINE_SEGMENT, ELEMENTS_CLASS.CIRCUMFERENCE
|
|
|
+ // Avoid duplicate intersection between line/segment with line/segment
|
|
|
if ((og1.elementClass==ELEMENTS_CLASS.LINE || og1.elementClass==ELEMENTS_CLASS.LINE_SEGMENT) &&
|
|
|
(og2.elementClass==ELEMENTS_CLASS.LINE || og2.elementClass==ELEMENTS_CLASS.LINE_SEGMENT)) {
|
|
|
// Try to avoid redundant point
|
|
|
- //D var aux = " ELEMENTS_CLASS.LINE=" + ELEMENTS_CLASS.LINE + ", ";
|
|
|
if (og1.pointA==og2.pointA || og1.pointA==og2.pointB || og1.pointB==og2.pointA || og1.pointB==og2.pointB) {
|
|
|
var aux2 = " "+og1.pointA+","+og1.pointB+";"+og2.pointA+","+og2.pointB+" ";
|
|
|
console.log("intersection-drawer.js!alreadyHasIntersection(): existing intersection, nothing to be done: " + str_a1 + " , " + str_a2 + ", " + aux2);
|
|
@@ -93,6 +94,22 @@ export class IntersectionDrawer extends Drawer {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
+ // Avoid duplicate intersection between line/segment with circumference
|
|
|
+ var ogLine = null, ogCirc = null;
|
|
|
+ if (og1.elementClass==ELEMENTS_CLASS.LINE || og1.elementClass==ELEMENTS_CLASS.LINE_SEGMENT) ogLine = og1;
|
|
|
+ else if (og1.elementClass==ELEMENTS_CLASS.CIRCUMFERENCE || og1.elementClass==ELEMENTS_CLASS.CIRCUMFERENCE) ogCirc = og1;
|
|
|
+ if (og2.elementClass==ELEMENTS_CLASS.LINE || og2.elementClass==ELEMENTS_CLASS.LINE_SEGMENT) ogLine = og2;
|
|
|
+ else if (og2.elementClass==ELEMENTS_CLASS.CIRCUMFERENCE || og2.elementClass==ELEMENTS_CLASS.CIRCUMFERENCE) ogCirc = og2;
|
|
|
+ if (ogLine!=null && ogCirc!=null) { // is Line/Segment and Circumference
|
|
|
+ // Try to avoid redundant point
|
|
|
+ if (ogLine.pointA==ogCirc.radius || ogLine.pointB==ogCirc.radius) {
|
|
|
+ var aux2 = " Line/Segment with (A,B)=("+ogLine.pointA + "," + ogLine.pointB + "); Circ.=" + ogCirc.radius + " ";
|
|
|
+ console.log("intersection-drawer.js!alreadyHasIntersection(): existing intersection, nothing to be done: " + str_a1 + " , " + str_a2 + ", " + aux2);
|
|
|
+ //TODO need to become visible? "ogLine.visible = true;" or "ogCirc.visible = true;"
|
|
|
+ return false; // let "app/components/line-segment-component/models/line-segment-model.js!getIntersectionWithCircumference(.)" treat this case!
|
|
|
+ // return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -103,16 +120,28 @@ export class IntersectionDrawer extends Drawer {
|
|
|
const og1 = this.aggregatorA.genericObject, og2 = this.aggregatorB.genericObject;
|
|
|
const str_a1 = "og1=(" + og1.elementClass + ",id=" + og1.id + ")"; //D genericObject
|
|
|
const str_a2 = "og2=(" + og2.elementClass + ",id=" + og2.id + ")"; //D
|
|
|
- if (this.alreadyHasIntersection(og1,og2,str_a1,str_a2)) return;
|
|
|
- console.log("intersection-drawer.js!drawPoint(): create intersection between " + str_a1 + " , " + str_a2);
|
|
|
- const intersectionOg1Og2 = og1.getIntersection(og2);
|
|
|
- const intersectionPoints = intersectionService.addIntersections(intersectionOg1Og2);
|
|
|
+ if (this.alreadyHasIntersection(og1,og2,str_a1,str_a2))
|
|
|
+ return; // intersection already defined by line/segment.pointA or pointB
|
|
|
+ console.log("intersection-drawer.js!drawPoint(): create intersection between " + str_a1 + " , " + str_a2); //D //leo
|
|
|
+
|
|
|
+ // Really create the intersection: line-segment-model.js!getIntersectionByLine(.); getIntersectionWithCircumference(.)
|
|
|
+ // app/components/: line-component/models/line-model.js; line-segment-component/models/line-segment-model.js; circumference-component/models/circumference-model.js
|
|
|
+ const intersectionOg1Og2 = og1.getIntersection(og2); // get [ṔA, PB], but perhaps PA or PB is Point, NOT IntersectionPoint!
|
|
|
+
|
|
|
+ // app/components/intersection-component/services/intersection-service.js
|
|
|
+ const intersectionPoints = intersectionService.addIntersections(intersectionOg1Og2, og1, og2);
|
|
|
+
|
|
|
this.drawByIntersectionPoints(intersectionPoints);
|
|
|
}
|
|
|
|
|
|
drawByIntersectionPoints (intersectionPoints) {
|
|
|
for (let index = 0; index < intersectionPoints.length; index++) {
|
|
|
const intersectionPoint = intersectionPoints[index];
|
|
|
+ if (intersectionPoint.og1 == undefined) {
|
|
|
+ //D console.log("intersection-drawer.js!drawByIntersectionPoints(.): " + index + ": intersectionPoint.id=" + intersectionPoint.id + " og1 undefined");
|
|
|
+ continue; // this point already exists!
|
|
|
+ }
|
|
|
+ //D else console.log("intersection-drawer.js!drawByIntersectionPoints(.): " + index + ": intersectionPoint.id=" + intersectionPoint.id + "");
|
|
|
intersectionPoint.update();
|
|
|
// if (!intersectionPoint.visible) return;
|
|
|
const point = PointDrawer.drawPoint(intersectionPoint, true, false, true);
|