From 5e2f0ccd4737e2eb0d71007ec6ef9dd2cf09ab39 Mon Sep 17 00:00:00 2001
From: Andrea Gottsponer <ago@attr.ch>
Date: Mon, 5 Sep 2022 17:37:19 +0200
Subject: [PATCH] - fix update position point event in creation (selection
 reset fixed) - fix marker create error

---
 src/app/index.ts                              | 17 ++---
 src/lib/elements/connections/Line.ts          |  2 +-
 src/lib/elements/fills/FillCollection.ts      |  2 +-
 src/lib/elements/legends/LegendCollection.ts  |  2 +-
 .../elements/positionings/PositionPoint.ts    |  2 +-
 src/lib/elements/primitives/ArrowPrimitive.ts |  4 +-
 .../BackgroundRectanglePrimitive.ts           |  4 +-
 .../elements/primitives/EllipsePrimitive.ts   |  4 +-
 .../elements/primitives/RectanglePrimitive.ts |  4 +-
 src/lib/elements/primitives/TextPrimitive.ts  |  4 +-
 .../generators/combinations/ArrowGenerator.ts |  6 +-
 .../combinations/EllipseGenerator.ts          |  6 +-
 .../combinations/InteractiveAreaGenerator.ts  |  3 +-
 .../combinations/MarkerGenerator.ts           |  3 +-
 .../combinations/PrimitiveMarkerGenerator.ts  | 12 ++--
 .../combinations/RectangleGenerator.ts        |  6 +-
 .../primitives/ArrowPrimitiveGenerator.ts     | 64 +++++++++++++-----
 .../primitives/EllipsePrimitiveGenerator.ts   | 64 +++++++++++++-----
 .../primitives/RectanglePrimitiveGenerator.ts | 64 +++++++++++++-----
 .../primitives/TextPrimitiveGenerator.ts      | 65 ++++++++++++++-----
 20 files changed, 245 insertions(+), 93 deletions(-)

diff --git a/src/app/index.ts b/src/app/index.ts
index b0e6305a..b8f949fd 100644
--- a/src/app/index.ts
+++ b/src/app/index.ts
@@ -275,6 +275,7 @@ async function setupImage() {
             layerGroup: layerGroupsArray['sketch'],
             image: {},
             rotateWithLine: false,
+            triggerImmediateEndDraw: true
         });
         generator.once('startGenerator', _startGenerator, this);
         generator.once('endGenerator', generator.endGenerator, generator);
@@ -1414,7 +1415,7 @@ buttonTest.addEventListener("click", () => {
     console.log("sketch", layerGroupsArray['sketch']);
     image.externControlSelectLayerGroup(layerGroupsArray['sketch']);
     */
-    elementsArray['text'].modeInteraction.setMode('delete');
+    // elementsArray['text'].modeInteraction.setMode('delete');
 
     // Position point
     /** /
@@ -1443,7 +1444,7 @@ buttonTest.addEventListener("click", () => {
                         // bezierCourve: false,
                         stickMode: MedsurfDraw.StickMode.POSITIONPOINTS,
                         // startElement: test17Point,
-                        layerGroup: layerGroupModel1,
+                        layerGroup: layerGroupsArray['layerGroupModel1'],
                         image: {}
                     });
      /**/
@@ -1500,7 +1501,7 @@ buttonTest.addEventListener("click", () => {
     });
     /**/
     // Fill collection
-    /**/
+    /** /
     const generator = new MedsurfDraw.FillGenerator({
         target: image,
         bezierCourve: false,
@@ -1511,12 +1512,12 @@ buttonTest.addEventListener("click", () => {
     });
     /**/
     // Marker
-    /** /
+    /**/
      const generator = new MedsurfDraw.MarkerGenerator({
-                        target: image,
-                        layerGroup: sketch,
-                        image: {}
-                    });
+            target: image,
+            layerGroup: layerGroupsArray['sketch'],
+            image: {}
+        });
      /**/
     // Primitive Marker
     /** /
diff --git a/src/lib/elements/connections/Line.ts b/src/lib/elements/connections/Line.ts
index d2fb7eea..893ddb8c 100644
--- a/src/lib/elements/connections/Line.ts
+++ b/src/lib/elements/connections/Line.ts
@@ -1527,7 +1527,7 @@ export class Line extends BaseElementContainer<Models.Line, BaseElementContainer
 
         if (image) {
             // Select layer group
-            if (this.modeInteraction.lastMode !== 'delete_multiple') {
+            if (['delete_multiple', 'delete_draw', 'delete_clone'].indexOf(this.modeInteraction.lastMode) === -1) {
                 this.controlUnselectItem(image);
             }
 
diff --git a/src/lib/elements/fills/FillCollection.ts b/src/lib/elements/fills/FillCollection.ts
index a2fb9889..9cc65883 100644
--- a/src/lib/elements/fills/FillCollection.ts
+++ b/src/lib/elements/fills/FillCollection.ts
@@ -1296,7 +1296,7 @@ export class FillCollection extends BaseElementContainer<Models.FillCollection,
 
         if (image) {
             // Select layer group
-            if (this.modeInteraction.lastMode !== 'delete_multiple') {
+            if (['delete_multiple', 'delete_draw', 'delete_clone'].indexOf(this.modeInteraction.lastMode) === -1) {
                 this.controlUnselectItem(image);
             }
 
diff --git a/src/lib/elements/legends/LegendCollection.ts b/src/lib/elements/legends/LegendCollection.ts
index 089c5c6c..6f08ed3b 100644
--- a/src/lib/elements/legends/LegendCollection.ts
+++ b/src/lib/elements/legends/LegendCollection.ts
@@ -931,7 +931,7 @@ export class LegendCollection extends BaseElementContainer<Models.LegendCollecti
 
         if (image) {
             // Select layer group
-            if (this.modeInteraction.lastMode !== 'delete_multiple') {
+            if (['delete_multiple', 'delete_draw', 'delete_clone'].indexOf(this.modeInteraction.lastMode) === -1) {
                 this.controlUnselectItem(image);
             }
 
diff --git a/src/lib/elements/positionings/PositionPoint.ts b/src/lib/elements/positionings/PositionPoint.ts
index bcc1fa98..0b7d2771 100644
--- a/src/lib/elements/positionings/PositionPoint.ts
+++ b/src/lib/elements/positionings/PositionPoint.ts
@@ -1070,7 +1070,7 @@ export class PositionPoint extends BaseElementContainer<Models.PositionPoint, Ba
 
         if (image) {
             // Select layer group
-            if (this.modeInteraction.lastMode !== 'delete_multiple') {
+            if (['delete_multiple', 'delete_draw', 'delete_clone'].indexOf(this.modeInteraction.lastMode) === -1) {
                 this.controlUnselectItem(image);
             }
 
diff --git a/src/lib/elements/primitives/ArrowPrimitive.ts b/src/lib/elements/primitives/ArrowPrimitive.ts
index 8f51d1c9..639267f3 100644
--- a/src/lib/elements/primitives/ArrowPrimitive.ts
+++ b/src/lib/elements/primitives/ArrowPrimitive.ts
@@ -992,7 +992,9 @@ export class ArrowPrimitive extends BaseElementContainer<Models.ArrowPrimitive,
                 let index = parent.model.primitives.findIndex((primitive: any) => primitive === this.model);
                 if (index > -1) {
                     // Select layer group
-                    this.emit("debounceControlUnselectItem", parent);
+                    if (['delete_draw'].indexOf(this.modeInteraction.lastMode) === -1) {
+                        this.emit("debounceControlUnselectItem", parent);
+                    }
 
                     // Delete from parent
                     parent.model.primitives.slice(index, 1);
diff --git a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts
index 93b2d7c2..cd3e76fd 100644
--- a/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts
+++ b/src/lib/elements/primitives/BackgroundRectanglePrimitive.ts
@@ -965,7 +965,9 @@ export class BackgroundRectanglePrimitive extends BaseElementContainer<Models.Ba
                 let index = parent.model.primitives.findIndex((primitive: any) => primitive === this.model);
                 if (index > -1) {
                     // Select layer group
-                    this.emit("debounceControlUnselectItem", parent);
+                    if (['delete_draw'].indexOf(this.modeInteraction.lastMode) === -1) {
+                        this.emit("debounceControlUnselectItem", parent);
+                    }
 
                     // Delete from parent
                     parent.model.primitives.slice(index, 1);
diff --git a/src/lib/elements/primitives/EllipsePrimitive.ts b/src/lib/elements/primitives/EllipsePrimitive.ts
index 6a8d3f64..44da24cc 100644
--- a/src/lib/elements/primitives/EllipsePrimitive.ts
+++ b/src/lib/elements/primitives/EllipsePrimitive.ts
@@ -964,7 +964,9 @@ export class EllipsePrimitive extends BaseElementContainer<Models.EllipsePrimiti
                 let index = parent.model.primitives.findIndex((primitive: any) => primitive === this.model);
                 if (index > -1) {
                     // Select layer group
-                    this.emit("debounceControlUnselectItem", parent);
+                    if (['delete_draw'].indexOf(this.modeInteraction.lastMode) === -1) {
+                        this.emit("debounceControlUnselectItem", parent);
+                    }
 
                     // Delete from parent
                     parent.model.primitives.slice(index, 1);
diff --git a/src/lib/elements/primitives/RectanglePrimitive.ts b/src/lib/elements/primitives/RectanglePrimitive.ts
index 8e5e575a..5ee402e9 100644
--- a/src/lib/elements/primitives/RectanglePrimitive.ts
+++ b/src/lib/elements/primitives/RectanglePrimitive.ts
@@ -965,7 +965,9 @@ export class RectanglePrimitive extends BaseElementContainer<Models.RectanglePri
                 let index = parent.model.primitives.findIndex((primitive: any) => primitive === this.model);
                 if (index > -1) {
                     // Select layer group
-                    this.emit("debounceControlUnselectItem", parent);
+                    if (['delete_draw'].indexOf(this.modeInteraction.lastMode) === -1) {
+                        this.emit("debounceControlUnselectItem", parent);
+                    }
 
                     // Delete from parent
                     parent.model.primitives.slice(index, 1);
diff --git a/src/lib/elements/primitives/TextPrimitive.ts b/src/lib/elements/primitives/TextPrimitive.ts
index b2aed46a..717e66d6 100644
--- a/src/lib/elements/primitives/TextPrimitive.ts
+++ b/src/lib/elements/primitives/TextPrimitive.ts
@@ -1013,7 +1013,9 @@ export class TextPrimitive extends BaseElementContainer<Models.TextPrimitive, Ba
                 let index = parent.model.primitives.findIndex((primitive: any) => primitive === this.model);
                 if (index > -1) {
                     // Select layer group
-                    this.emit("debounceControlUnselectItem", parent);
+                    if (['delete_draw'].indexOf(this.modeInteraction.lastMode) === -1) {
+                        this.emit("debounceControlUnselectItem", parent);
+                    }
 
                     // Delete from parent
                     parent.model.primitives.slice(index, 1);
diff --git a/src/lib/generators/combinations/ArrowGenerator.ts b/src/lib/generators/combinations/ArrowGenerator.ts
index c8b927c8..b7a8d952 100644
--- a/src/lib/generators/combinations/ArrowGenerator.ts
+++ b/src/lib/generators/combinations/ArrowGenerator.ts
@@ -163,7 +163,8 @@ export class ArrowGenerator extends BaseGenerator<MedsurfDraw.Image, ArrowGenera
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: true
+                rotateWithLine: true,
+                triggerImmediateEndDraw: true
             });
             this._arrowPrimitiveGenerator.once("startGenerator", this.start, this);
             this._arrowPrimitiveGenerator.once("endGenerator", this.endArrowPrimitiveGenerator, this);
@@ -177,7 +178,8 @@ export class ArrowGenerator extends BaseGenerator<MedsurfDraw.Image, ArrowGenera
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: false
+                rotateWithLine: false,
+                triggerImmediateEndDraw: false
             });
             this._textPrimitiveGenerator.once("startGenerator", this.startTextPrimitiveGenerator, this);
             this._textPrimitiveGenerator.once("endGenerator", this.endTextPrimitiveGenerator, this);
diff --git a/src/lib/generators/combinations/EllipseGenerator.ts b/src/lib/generators/combinations/EllipseGenerator.ts
index d0ba74a2..d96e2150 100644
--- a/src/lib/generators/combinations/EllipseGenerator.ts
+++ b/src/lib/generators/combinations/EllipseGenerator.ts
@@ -163,7 +163,8 @@ export class EllipseGenerator extends BaseGenerator<MedsurfDraw.Image, EllipseGe
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: false
+                rotateWithLine: false,
+                triggerImmediateEndDraw: true
             });
             this._ellipsePrimitiveGenerator.once("startGenerator", this.start, this);
             this._ellipsePrimitiveGenerator.once("endGenerator", this.endEllipsePrimitiveGenerator, this);
@@ -177,7 +178,8 @@ export class EllipseGenerator extends BaseGenerator<MedsurfDraw.Image, EllipseGe
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: false
+                rotateWithLine: false,
+                triggerImmediateEndDraw: false
             });
             this._textPrimitiveGenerator.once("startGenerator", this.startTextPrimitiveGenerator, this);
             this._textPrimitiveGenerator.once("endGenerator", this.endTextPrimitiveGenerator, this);
diff --git a/src/lib/generators/combinations/InteractiveAreaGenerator.ts b/src/lib/generators/combinations/InteractiveAreaGenerator.ts
index 1af0550d..2180c24a 100644
--- a/src/lib/generators/combinations/InteractiveAreaGenerator.ts
+++ b/src/lib/generators/combinations/InteractiveAreaGenerator.ts
@@ -175,7 +175,8 @@ export class InteractiveAreaGenerator extends BaseGenerator<MedsurfDraw.Image, I
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: false
+                rotateWithLine: false,
+                triggerImmediateEndDraw: false
             });
             this._textPrimitiveGenerator.once("startGenerator", this.startTextPrimitiveGenerator, this);
             this._textPrimitiveGenerator.once("endGenerator", this.endTextPrimitiveGenerator, this);
diff --git a/src/lib/generators/combinations/MarkerGenerator.ts b/src/lib/generators/combinations/MarkerGenerator.ts
index f142bc0d..7081d2a7 100644
--- a/src/lib/generators/combinations/MarkerGenerator.ts
+++ b/src/lib/generators/combinations/MarkerGenerator.ts
@@ -202,7 +202,8 @@ export class MarkerGenerator extends BaseGenerator<MedsurfDraw.Image, MarkerGene
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: false
+                rotateWithLine: false,
+                triggerImmediateEndDraw: false
             });
             this._textPrimitiveGenerator.once("endGenerator", this.endTextPrimitiveGenerator, this);
             this._textPrimitiveGenerator.once("abortGenerator", this.abortTextPrimitiveGenerator, this);
diff --git a/src/lib/generators/combinations/PrimitiveMarkerGenerator.ts b/src/lib/generators/combinations/PrimitiveMarkerGenerator.ts
index aeb1cc0f..e9e627b4 100644
--- a/src/lib/generators/combinations/PrimitiveMarkerGenerator.ts
+++ b/src/lib/generators/combinations/PrimitiveMarkerGenerator.ts
@@ -180,7 +180,8 @@ export class PrimitiveMarkerGenerator extends BaseGenerator<MedsurfDraw.Image, P
                         image: this.data.image,
                         stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                         startElement: positionPoint,
-                        rotateWithLine: this.data.rotateWithLine
+                        rotateWithLine: this.data.rotateWithLine,
+                        triggerImmediateEndDraw: true
                     });
                     break;
                 case Models.ImageObjectType.ELLIPSE:
@@ -190,7 +191,8 @@ export class PrimitiveMarkerGenerator extends BaseGenerator<MedsurfDraw.Image, P
                         image: this.data.image,
                         stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                         startElement: positionPoint,
-                        rotateWithLine: this.data.rotateWithLine
+                        rotateWithLine: this.data.rotateWithLine,
+                        triggerImmediateEndDraw: true
                     });
                     break;
                 case Models.ImageObjectType.RECTANGLE:
@@ -200,7 +202,8 @@ export class PrimitiveMarkerGenerator extends BaseGenerator<MedsurfDraw.Image, P
                         image: this.data.image,
                         stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                         startElement: positionPoint,
-                        rotateWithLine: this.data.rotateWithLine
+                        rotateWithLine: this.data.rotateWithLine,
+                        triggerImmediateEndDraw: true
                     });
                     break;
                 case Models.ImageObjectType.TEXT:
@@ -210,7 +213,8 @@ export class PrimitiveMarkerGenerator extends BaseGenerator<MedsurfDraw.Image, P
                         image: this.data.image,
                         stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                         startElement: positionPoint,
-                        rotateWithLine: this.data.rotateWithLine
+                        rotateWithLine: this.data.rotateWithLine,
+                        triggerImmediateEndDraw: true
                     });
                     break;
                 default:
diff --git a/src/lib/generators/combinations/RectangleGenerator.ts b/src/lib/generators/combinations/RectangleGenerator.ts
index 5e65f08e..99be52da 100644
--- a/src/lib/generators/combinations/RectangleGenerator.ts
+++ b/src/lib/generators/combinations/RectangleGenerator.ts
@@ -163,7 +163,8 @@ export class RectangleGenerator extends BaseGenerator<MedsurfDraw.Image, Rectang
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: false
+                rotateWithLine: false,
+                triggerImmediateEndDraw: true
             });
             this._rectanglePrimitiveGenerator.once("startGenerator", this.start, this);
             this._rectanglePrimitiveGenerator.once("endGenerator", this.endRectanglePrimitiveGenerator, this);
@@ -177,7 +178,8 @@ export class RectangleGenerator extends BaseGenerator<MedsurfDraw.Image, Rectang
                 image: this.data.image,
                 stickMode: MedsurfDraw.StickMode.NOELEMENTS,
                 startElement: positionPoint,
-                rotateWithLine: false
+                rotateWithLine: false,
+                triggerImmediateEndDraw: false
             });
             this._textPrimitiveGenerator.once("startGenerator", this.startTextPrimitiveGenerator, this);
             this._textPrimitiveGenerator.once("endGenerator", this.endTextPrimitiveGenerator, this);
diff --git a/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts b/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts
index 6578ed89..f07b7532 100644
--- a/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts
+++ b/src/lib/generators/primitives/ArrowPrimitiveGenerator.ts
@@ -9,6 +9,7 @@ import {PositionPointGeneratorModel} from "../positionings/PositionPointGenerato
 export class ArrowPrimitiveGeneratorModel extends PositionPointGeneratorModel {
     startElement?: MedsurfDraw.PositionPoint;
     rotateWithLine: boolean;
+    triggerImmediateEndDraw: boolean;
 }
 
 /**
@@ -226,20 +227,24 @@ export class ArrowPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Ar
         }
         this.positionPointElement.model.primitives.push(this.arrowPrimitiveElement.model as any);
 
-        //<editor-fold desc="Events">
-        // -- Image
-        this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
-        this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
-        this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
-        this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
-        // -- Scale
-        this.drawInteraction.on("startScale", this.arrowPrimitiveElement.scaleInteraction.startScale, this.arrowPrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("onScale", this.arrowPrimitiveElement.scaleInteraction.onScale, this.arrowPrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("endScale", this.arrowPrimitiveElement.scaleInteraction.endScale, this.arrowPrimitiveElement.scaleInteraction);
-        // -- Draw
-        this.drawInteraction.on("endDraw", this.endArrowPrimitiveDraw, this);
-        this.drawInteraction.on("abortDraw", this.abortArrowPrimitiveDraw, this);
-        //</editor-fold>
+        if (this.triggerImmediateEndDraw) {
+            this.endArrowPrimitiveDraw()
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // -- Scale
+            this.drawInteraction.on("startScale", this.arrowPrimitiveElement.scaleInteraction.startScale, this.arrowPrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("onScale", this.arrowPrimitiveElement.scaleInteraction.onScale, this.arrowPrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("endScale", this.arrowPrimitiveElement.scaleInteraction.endScale, this.arrowPrimitiveElement.scaleInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endArrowPrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortArrowPrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -252,8 +257,20 @@ export class ArrowPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Ar
         }
         this.positionPointElement.model.primitives.push(this.arrowPrimitiveElement.model as any);
 
-        // End arrow primitive draw
-        this.endArrowPrimitiveDraw();
+        if (this.triggerImmediateEndDraw) {
+            this.endArrowPrimitiveDraw();
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endArrowPrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortArrowPrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -369,5 +386,20 @@ export class ArrowPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Ar
     public set rotateWithLine(value: boolean) {
         this.data.rotateWithLine = value;
     }
+
+    /**
+     * Get trigger immediate end draw
+     */
+    public get triggerImmediateEndDraw(): boolean {
+        return this.data.triggerImmediateEndDraw;
+    }
+
+    /**
+     * Set trigger immediate end draw
+     * @param value
+     */
+    public set triggerImmediateEndDraw(value: boolean) {
+        this.data.triggerImmediateEndDraw = value;
+    }
     //</editor-fold>
 }
\ No newline at end of file
diff --git a/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts b/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts
index 55768da2..9800721a 100644
--- a/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts
+++ b/src/lib/generators/primitives/EllipsePrimitiveGenerator.ts
@@ -9,6 +9,7 @@ import {PositionPointGeneratorModel} from "../positionings/PositionPointGenerato
 export class EllipsePrimitiveGeneratorModel extends PositionPointGeneratorModel {
     startElement?: MedsurfDraw.PositionPoint;
     rotateWithLine: boolean;
+    triggerImmediateEndDraw: boolean;
 }
 
 /**
@@ -226,20 +227,24 @@ export class EllipsePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image,
         }
         this.positionPointElement.model.primitives.push(this.ellipsePrimitiveElement.model as any);
 
-        //<editor-fold desc="Events">
-        // -- Image
-        this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
-        this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
-        this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
-        this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
-        // ---- Scale
-        this.drawInteraction.on("startScale", this.ellipsePrimitiveElement.scaleInteraction.startScale, this.ellipsePrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("onScale", this.ellipsePrimitiveElement.scaleInteraction.onScale, this.ellipsePrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("endScale", this.ellipsePrimitiveElement.scaleInteraction.endScale, this.ellipsePrimitiveElement.scaleInteraction);
-        // -- Draw
-        this.drawInteraction.on("endDraw", this.endEllipsePrimitiveDraw, this);
-        this.drawInteraction.on("abortDraw", this.abortEllipsePrimitiveDraw, this);
-        //</editor-fold>
+        if (this.triggerImmediateEndDraw) {
+            this.endEllipsePrimitiveDraw();
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // ---- Scale
+            this.drawInteraction.on("startScale", this.ellipsePrimitiveElement.scaleInteraction.startScale, this.ellipsePrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("onScale", this.ellipsePrimitiveElement.scaleInteraction.onScale, this.ellipsePrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("endScale", this.ellipsePrimitiveElement.scaleInteraction.endScale, this.ellipsePrimitiveElement.scaleInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endEllipsePrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortEllipsePrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -252,8 +257,20 @@ export class EllipsePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image,
         }
         this.positionPointElement.model.primitives.push(this.ellipsePrimitiveElement.model as any);
 
-        // End ellipse primitive draw
-        this.endEllipsePrimitiveDraw();
+        if (this.triggerImmediateEndDraw) {
+            this.endEllipsePrimitiveDraw();
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endEllipsePrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortEllipsePrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -369,5 +386,20 @@ export class EllipsePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image,
     public set rotateWithLine(value: boolean) {
         this.data.rotateWithLine = value;
     }
+
+    /**
+     * Get trigger immediate end draw
+     */
+    public get triggerImmediateEndDraw(): boolean {
+        return this.data.triggerImmediateEndDraw;
+    }
+
+    /**
+     * Set trigger immediate end draw
+     * @param value
+     */
+    public set triggerImmediateEndDraw(value: boolean) {
+        this.data.triggerImmediateEndDraw = value;
+    }
     //</editor-fold>
 }
\ No newline at end of file
diff --git a/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts b/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts
index df5e2294..4312e654 100644
--- a/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts
+++ b/src/lib/generators/primitives/RectanglePrimitiveGenerator.ts
@@ -9,6 +9,7 @@ import {PositionPointGeneratorModel} from "../positionings/PositionPointGenerato
 export class RectanglePrimitiveGeneratorModel extends PositionPointGeneratorModel {
     startElement?: MedsurfDraw.PositionPoint;
     rotateWithLine: boolean;
+    triggerImmediateEndDraw: boolean;
 }
 
 /**
@@ -225,20 +226,24 @@ export class RectanglePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image
         }
         this.positionPointElement.model.primitives.push(this.rectanglePrimitiveElement.model as any);
 
-        //<editor-fold desc="Events">
-        // -- Image
-        this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
-        this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
-        this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
-        this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
-        // ---- Scale
-        this.drawInteraction.on("startScale", this.rectanglePrimitiveElement.scaleInteraction.startScale, this.rectanglePrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("onScale", this.rectanglePrimitiveElement.scaleInteraction.onScale, this.rectanglePrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("endScale", this.rectanglePrimitiveElement.scaleInteraction.endScale, this.rectanglePrimitiveElement.scaleInteraction);
-        // -- Draw
-        this.drawInteraction.on("endDraw", this.endRectanglePrimitiveDraw, this);
-        this.drawInteraction.on("abortDraw", this.abortRectanglePrimitiveDraw, this);
-        //</editor-fold>
+        if (this.triggerImmediateEndDraw) {
+            this.endRectanglePrimitiveDraw();
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // ---- Scale
+            this.drawInteraction.on("startScale", this.rectanglePrimitiveElement.scaleInteraction.startScale, this.rectanglePrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("onScale", this.rectanglePrimitiveElement.scaleInteraction.onScale, this.rectanglePrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("endScale", this.rectanglePrimitiveElement.scaleInteraction.endScale, this.rectanglePrimitiveElement.scaleInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endRectanglePrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortRectanglePrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -251,8 +256,20 @@ export class RectanglePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image
         }
         this.positionPointElement.model.primitives.push(this.rectanglePrimitiveElement.model as any);
 
-        // End rectangle primitive draw
-        this.endRectanglePrimitiveDraw();
+        if (this.triggerImmediateEndDraw) {
+            this.endRectanglePrimitiveDraw();
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endRectanglePrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortRectanglePrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -368,5 +385,20 @@ export class RectanglePrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image
     public set rotateWithLine(value: boolean) {
         this.data.rotateWithLine = value;
     }
+
+    /**
+     * Get trigger immediate end draw
+     */
+    public get triggerImmediateEndDraw(): boolean {
+        return this.data.triggerImmediateEndDraw;
+    }
+
+    /**
+     * Set trigger immediate end draw
+     * @param value
+     */
+    public set triggerImmediateEndDraw(value: boolean) {
+        this.data.triggerImmediateEndDraw = value;
+    }
     //</editor-fold>
 }
\ No newline at end of file
diff --git a/src/lib/generators/primitives/TextPrimitiveGenerator.ts b/src/lib/generators/primitives/TextPrimitiveGenerator.ts
index 721b24d3..d1fcfb94 100644
--- a/src/lib/generators/primitives/TextPrimitiveGenerator.ts
+++ b/src/lib/generators/primitives/TextPrimitiveGenerator.ts
@@ -9,6 +9,7 @@ import {PositionPointGeneratorModel} from "../positionings/PositionPointGenerato
 export class TextPrimitiveGeneratorModel extends PositionPointGeneratorModel {
     startElement?: MedsurfDraw.PositionPoint;
     rotateWithLine: boolean;
+    triggerImmediateEndDraw: boolean;
 }
 
 /**
@@ -225,20 +226,24 @@ export class TextPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Tex
         }
         this.positionPointElement.model.primitives.push(this.textPrimitiveElement.model as any);
 
-        //<editor-fold desc="Events">
-        // -- Image
-        this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
-        this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
-        this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
-        this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
-        // ---- Scale
-        this.drawInteraction.on("startScale", this.textPrimitiveElement.scaleInteraction.startScale, this.textPrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("onScale", this.textPrimitiveElement.scaleInteraction.onScale, this.textPrimitiveElement.scaleInteraction);
-        this.drawInteraction.on("endScale", this.textPrimitiveElement.scaleInteraction.endScale, this.textPrimitiveElement.scaleInteraction);
-        // -- Draw
-        this.drawInteraction.on("endDraw", this.endTextPrimitiveDraw, this);
-        this.drawInteraction.on("abortDraw", this.abortTextPrimitiveDraw, this);
-        //</editor-fold>
+        if (this.triggerImmediateEndDraw) {
+            this.endTextPrimitiveDraw()
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // ---- Scale
+            this.drawInteraction.on("startScale", this.textPrimitiveElement.scaleInteraction.startScale, this.textPrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("onScale", this.textPrimitiveElement.scaleInteraction.onScale, this.textPrimitiveElement.scaleInteraction);
+            this.drawInteraction.on("endScale", this.textPrimitiveElement.scaleInteraction.endScale, this.textPrimitiveElement.scaleInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endTextPrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortTextPrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -251,8 +256,21 @@ export class TextPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Tex
         }
         this.positionPointElement.model.primitives.push(this.textPrimitiveElement.model as any);
 
-        // End text primitive draw
-        this.endTextPrimitiveDraw();
+        // Check for trigger var
+        if (this.triggerImmediateEndDraw) {
+            this.endTextPrimitiveDraw()
+        } else {
+            //<editor-fold desc="Events">
+            // -- Image
+            this.target.on("mousedown", this.drawInteraction.startDrawScale, this.drawInteraction);
+            this.target.on("rightup", this.drawInteraction.abortDraw, this.drawInteraction);
+            this.target.on("pointermove", this.drawInteraction.onDraw, this.drawInteraction);
+            this.target.on("mouseup", this.drawInteraction.endDraw, this.drawInteraction);
+            // -- Draw
+            this.drawInteraction.on("endDraw", this.endTextPrimitiveDraw, this);
+            this.drawInteraction.on("abortDraw", this.abortTextPrimitiveDraw, this);
+            //</editor-fold>
+        }
     }
 
     /**
@@ -368,5 +386,20 @@ export class TextPrimitiveGenerator extends BaseGenerator<MedsurfDraw.Image, Tex
     public set rotateWithLine(value: boolean) {
         this.data.rotateWithLine = value;
     }
+
+    /**
+     * Get trigger immediate end draw
+     */
+    public get triggerImmediateEndDraw(): boolean {
+        return this.data.triggerImmediateEndDraw;
+    }
+
+    /**
+     * Set trigger immediate end draw
+     * @param value
+     */
+    public set triggerImmediateEndDraw(value: boolean) {
+        this.data.triggerImmediateEndDraw = value;
+    }
     //</editor-fold>
 }
\ No newline at end of file
-- 
GitLab