plotboilerplate 1.24.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/dist/index.esm.js +294 -129
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/plotboilerplate.browser.min.js +1 -1
- package/dist/plotboilerplate.browser.min.js.map +1 -1
- package/dist/plotboilerplate.js +12084 -11919
- package/dist/plotboilerplate.min.js +1 -1
- package/package.json +9 -5
- package/src/cjs/PlotBoilerplate.d.ts +37 -6
- package/src/cjs/PlotBoilerplate.js +222 -116
- package/src/cjs/PlotBoilerplate.js.map +1 -1
- package/src/cjs/Polygon.d.ts +26 -7
- package/src/cjs/Polygon.js +56 -10
- package/src/cjs/Polygon.js.map +1 -1
- package/src/cjs/Triangle.js +2 -2
- package/src/cjs/Triangle.js.map +1 -1
- package/src/cjs/Vertex.d.ts +15 -3
- package/src/cjs/Vertex.js +18 -1
- package/src/cjs/Vertex.js.map +1 -1
- package/src/cjs/interfaces/core.d.ts +28 -0
- package/src/cjs/interfaces/core.js +2 -0
- package/src/cjs/interfaces/core.js.map +1 -1
- package/src/cjs/utils/datastructures/Color.d.ts +147 -1
- package/src/cjs/utils/datastructures/Color.js +385 -41
- package/src/cjs/utils/datastructures/Color.js.map +1 -1
- package/src/cjs/utils/datastructures/ColorGradient.d.ts +79 -0
- package/src/cjs/utils/datastructures/ColorGradient.js +171 -0
- package/src/cjs/utils/datastructures/ColorGradient.js.map +1 -0
- package/src/cjs/utils/dom/components/ColorGradientPicker.d.ts +245 -0
- package/src/cjs/utils/dom/components/ColorGradientPicker.js +667 -0
- package/src/cjs/utils/dom/components/ColorGradientPicker.js.map +1 -0
- package/src/cjs/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
- package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js +520 -0
- package/src/cjs/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
- package/src/cjs/utils/dom/components/ColorGradientSelector.d.ts +117 -0
- package/src/cjs/utils/dom/components/ColorGradientSelector.js +325 -0
- package/src/cjs/utils/dom/components/ColorGradientSelector.js.map +1 -0
- package/src/cjs/utils/dom/components/Test.d.ts +7 -0
- package/src/cjs/utils/dom/components/Test.js +30 -0
- package/src/cjs/utils/dom/components/Test.js.map +1 -0
- package/src/cjs/utils/dom/guiSizeToggler.js +1 -1
- package/src/cjs/utils/dom/guiSizeToggler.js.map +1 -1
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +9 -3
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +20 -13
- package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/cjs/utils/helpers/CircleHelper.d.ts +10 -1
- package/src/cjs/utils/helpers/CircleHelper.js +13 -2
- package/src/cjs/utils/helpers/CircleHelper.js.map +1 -1
- package/src/cjs/utils/helpers/CircleSectorHelper.d.ts +2 -2
- package/src/cjs/utils/helpers/CircleSectorHelper.js +1 -0
- package/src/cjs/utils/helpers/CircleSectorHelper.js.map +1 -1
- package/src/cjs/utils/helpers/TriangleHelper.d.ts +57 -0
- package/src/cjs/utils/helpers/TriangleHelper.js +83 -0
- package/src/cjs/utils/helpers/TriangleHelper.js.map +1 -0
- package/src/cjs/utils/helpers/VEllipseHelper.d.ts +6 -4
- package/src/cjs/utils/helpers/VEllipseHelper.js +4 -2
- package/src/cjs/utils/helpers/VEllipseHelper.js.map +1 -1
- package/src/cjs/utils/helpers/VEllipseSectorHelper.d.ts +3 -2
- package/src/cjs/utils/helpers/VEllipseSectorHelper.js +1 -0
- package/src/cjs/utils/helpers/VEllipseSectorHelper.js.map +1 -1
- package/src/cjs/utils/parsers/LinearColorGradientParser.d.ts +78 -0
- package/src/cjs/utils/parsers/LinearColorGradientParser.js +224 -0
- package/src/cjs/utils/parsers/LinearColorGradientParser.js.map +1 -0
- package/src/createDemoDrawables.js +1 -0
- package/src/esm/PlotBoilerplate.d.ts +37 -6
- package/src/esm/PlotBoilerplate.js +222 -116
- package/src/esm/PlotBoilerplate.js.map +1 -1
- package/src/esm/Polygon.d.ts +26 -7
- package/src/esm/Polygon.js +53 -10
- package/src/esm/Polygon.js.map +1 -1
- package/src/esm/Triangle.js +2 -2
- package/src/esm/Triangle.js.map +1 -1
- package/src/esm/Vertex.d.ts +15 -3
- package/src/esm/Vertex.js +18 -1
- package/src/esm/Vertex.js.map +1 -1
- package/src/esm/interfaces/core.d.ts +28 -0
- package/src/esm/interfaces/core.js +2 -0
- package/src/esm/interfaces/core.js.map +1 -1
- package/src/esm/utils/datastructures/Color.d.ts +147 -1
- package/src/esm/utils/datastructures/Color.js +386 -42
- package/src/esm/utils/datastructures/Color.js.map +1 -1
- package/src/esm/utils/datastructures/ColorGradient.d.ts +79 -0
- package/src/esm/utils/datastructures/ColorGradient.js +166 -0
- package/src/esm/utils/datastructures/ColorGradient.js.map +1 -0
- package/src/esm/utils/dom/components/ColorGradientPicker.d.ts +245 -0
- package/src/esm/utils/dom/components/ColorGradientPicker.js +732 -0
- package/src/esm/utils/dom/components/ColorGradientPicker.js.map +1 -0
- package/src/esm/utils/dom/components/ColorGradientPickerJSX.d.ts +129 -0
- package/src/esm/utils/dom/components/ColorGradientPickerJSX.js +582 -0
- package/src/esm/utils/dom/components/ColorGradientPickerJSX.js.map +1 -0
- package/src/esm/utils/dom/components/ColorGradientSelector.d.ts +117 -0
- package/src/esm/utils/dom/components/ColorGradientSelector.js +332 -0
- package/src/esm/utils/dom/components/ColorGradientSelector.js.map +1 -0
- package/src/esm/utils/dom/components/Test.d.ts +7 -0
- package/src/esm/utils/dom/components/Test.js +26 -0
- package/src/esm/utils/dom/components/Test.js.map +1 -0
- package/src/esm/utils/dom/guiSizeToggler.js +1 -1
- package/src/esm/utils/dom/guiSizeToggler.js.map +1 -1
- package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +9 -3
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js +20 -13
- package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
- package/src/esm/utils/helpers/CircleHelper.d.ts +10 -1
- package/src/esm/utils/helpers/CircleHelper.js +13 -2
- package/src/esm/utils/helpers/CircleHelper.js.map +1 -1
- package/src/esm/utils/helpers/CircleSectorHelper.d.ts +2 -2
- package/src/esm/utils/helpers/CircleSectorHelper.js +1 -0
- package/src/esm/utils/helpers/CircleSectorHelper.js.map +1 -1
- package/src/esm/utils/helpers/TriangleHelper.d.ts +57 -0
- package/src/esm/utils/helpers/TriangleHelper.js +78 -0
- package/src/esm/utils/helpers/TriangleHelper.js.map +1 -0
- package/src/esm/utils/helpers/VEllipseHelper.d.ts +6 -4
- package/src/esm/utils/helpers/VEllipseHelper.js +4 -2
- package/src/esm/utils/helpers/VEllipseHelper.js.map +1 -1
- package/src/esm/utils/helpers/VEllipseSectorHelper.d.ts +3 -2
- package/src/esm/utils/helpers/VEllipseSectorHelper.js +1 -0
- package/src/esm/utils/helpers/VEllipseSectorHelper.js.map +1 -1
- package/src/esm/utils/parsers/LinearColorGradientParser.d.ts +78 -0
- package/src/esm/utils/parsers/LinearColorGradientParser.js +217 -0
- package/src/esm/utils/parsers/LinearColorGradientParser.js.map +1 -0
- package/src/external.d.ts +9 -0
- package/src/ts/PlotBoilerplate.ts +233 -105
- package/src/ts/Polygon.ts +68 -14
- package/src/ts/Triangle.ts +2 -2
- package/src/ts/Vertex.ts +21 -3
- package/src/ts/interfaces/core.ts +31 -0
- package/src/ts/utils/datastructures/Color.ts +423 -44
- package/src/ts/utils/datastructures/ColorGradient.ts +196 -0
- package/src/ts/utils/dom/components/ColorGradientPicker.tsx +877 -0
- package/src/ts/utils/dom/components/ColorGradientSelector.tsx +445 -0
- package/src/ts/utils/dom/components/Test.tsx +44 -0
- package/src/ts/utils/dom/components/_ColorGradientPicker_raw.ts_ +392 -0
- package/src/ts/utils/dom/guiSizeToggler.ts +1 -1
- package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +25 -15
- package/src/ts/utils/helpers/CircleHelper.ts +17 -3
- package/src/ts/utils/helpers/CircleSectorHelper.ts +4 -2
- package/src/ts/utils/helpers/TriangleHelper.ts +102 -0
- package/src/ts/utils/helpers/VEllipseHelper.ts +6 -4
- package/src/ts/utils/helpers/VEllipseSectorHelper.ts +3 -2
- package/src/ts/utils/parsers/LinearColorGradientParser.ts +297 -0
|
@@ -86,8 +86,13 @@
|
|
|
86
86
|
* @modified 2024-07-08 Adding `PlotBoilerplate.getGUI()` to retrieve the GUI instance.
|
|
87
87
|
* @modified 2024-08-25 Extending main class `PlotBoilerplate` optional param `isBackdropFiltersEnabled`.
|
|
88
88
|
* @modified 2024-12-02 Adding the `triggerRedraw` to the `removeAll` method.
|
|
89
|
+
* @modified 2025-05-07 Changing the return type of `removeVertex` from `void` to `boolean`.
|
|
90
|
+
* @modified 2025-05-07 Handling content changes now with `contentChangeListeners`.
|
|
91
|
+
* @modified 2025-05-07 Added `PlogBoilerplate.addContentChangeListener` and `.removeContentChangeListener`.
|
|
92
|
+
* @modified 2025-05-07 Moving full vectors now by default when vector point a is moved.
|
|
93
|
+
* @modified 2025-05-20 Applying `lineWith` parameter in the draw routine for vectors (had been missing).
|
|
89
94
|
*
|
|
90
|
-
* @version 1.
|
|
95
|
+
* @version 1.21.1
|
|
91
96
|
*
|
|
92
97
|
* @file PlotBoilerplate
|
|
93
98
|
* @fileoverview The main class.
|
|
@@ -211,6 +216,10 @@ export class PlotBoilerplate {
|
|
|
211
216
|
*/
|
|
212
217
|
constructor(config, drawConfig) {
|
|
213
218
|
var _b, _c;
|
|
219
|
+
/**
|
|
220
|
+
* A list of content change listeners.
|
|
221
|
+
*/
|
|
222
|
+
this.contentChangeListeners = [];
|
|
214
223
|
/**
|
|
215
224
|
* A discrete timestamp to identify single render cycles.
|
|
216
225
|
* Note that using system time milliseconds is not a safe way to identify render frames, as on modern powerful machines
|
|
@@ -598,6 +607,52 @@ export class PlotBoilerplate {
|
|
|
598
607
|
PlotBoilerplate.utils.setCSSscale(this.canvas, (_d = this.config.cssScaleX) !== null && _d !== void 0 ? _d : 1.0, (_e = this.config.cssScaleY) !== null && _e !== void 0 ? _e : 1.0);
|
|
599
608
|
}
|
|
600
609
|
}
|
|
610
|
+
/**
|
|
611
|
+
* Adds a new content change listener to this instance. Adding duplicates is not possible.
|
|
612
|
+
*
|
|
613
|
+
* @param {PBContentChangeListener} listener - The listenre to add.
|
|
614
|
+
* @method addContentChangeListener
|
|
615
|
+
* @instance
|
|
616
|
+
* @memberof PlotBoilerplate
|
|
617
|
+
* @returns {void}
|
|
618
|
+
*/
|
|
619
|
+
addContentChangeListener(listener) {
|
|
620
|
+
for (var i in this.contentChangeListeners) {
|
|
621
|
+
if (this.contentChangeListeners[i] === listener) {
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
this.contentChangeListeners.push(listener);
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* Removes an existing content change listener from this instance.
|
|
629
|
+
*
|
|
630
|
+
* @param {PBContentChangeListener} listener - The listenre to add.
|
|
631
|
+
* @method removeContentChangeListener
|
|
632
|
+
* @instance
|
|
633
|
+
* @memberof PlotBoilerplate
|
|
634
|
+
* @returns {void}
|
|
635
|
+
*/
|
|
636
|
+
removeContentChangeListener(listener) {
|
|
637
|
+
for (var i = 0; i < this.contentChangeListeners.length; i++) {
|
|
638
|
+
if (this.contentChangeListeners[i] === listener) {
|
|
639
|
+
this.contentChangeListeners.splice(i, 1);
|
|
640
|
+
return;
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
_fireContentChanged(addedDrawables, removedDrawables) {
|
|
645
|
+
for (var i in this.contentChangeListeners) {
|
|
646
|
+
const listener = this.contentChangeListeners[i];
|
|
647
|
+
if (listener && typeof listener === "function") {
|
|
648
|
+
listener({
|
|
649
|
+
type: addedDrawables.length > 0 ? "DRAWABLES_ADDED" : "DRAWABLES_REMOVED",
|
|
650
|
+
addedDrawables: addedDrawables,
|
|
651
|
+
removedDrawables: removedDrawables
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
}
|
|
601
656
|
/**
|
|
602
657
|
* Add a drawable object.<br>
|
|
603
658
|
* <br>
|
|
@@ -622,100 +677,121 @@ export class PlotBoilerplate {
|
|
|
622
677
|
* @memberof PlotBoilerplate
|
|
623
678
|
* @return {void}
|
|
624
679
|
**/
|
|
625
|
-
add(drawable, redraw) {
|
|
680
|
+
add(drawable, redraw, doNotFireEvent) {
|
|
626
681
|
if (Array.isArray(drawable)) {
|
|
627
682
|
const arr = drawable;
|
|
628
683
|
for (var i = 0; i < arr.length; i++) {
|
|
629
|
-
this.add(arr[i], false);
|
|
684
|
+
this.add(arr[i], false, doNotFireEvent);
|
|
630
685
|
}
|
|
686
|
+
// !doNotFireEvent && this._fireContentChanged(arr, []);
|
|
631
687
|
}
|
|
632
|
-
else
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
// Add some lines
|
|
638
|
-
this.drawables.push(drawable);
|
|
639
|
-
this.vertices.push(drawable.a);
|
|
640
|
-
this.vertices.push(drawable.b);
|
|
641
|
-
}
|
|
642
|
-
else if (drawable instanceof Vector) {
|
|
643
|
-
this.drawables.push(drawable);
|
|
644
|
-
this.vertices.push(drawable.a);
|
|
645
|
-
this.vertices.push(drawable.b);
|
|
646
|
-
}
|
|
647
|
-
else if (drawable instanceof VEllipse) {
|
|
648
|
-
this.vertices.push(drawable.center);
|
|
649
|
-
this.vertices.push(drawable.axis);
|
|
650
|
-
this.drawables.push(drawable);
|
|
651
|
-
drawable.center.listeners.addDragListener((event) => {
|
|
652
|
-
drawable.axis.add(event.params.dragAmount);
|
|
653
|
-
});
|
|
654
|
-
}
|
|
655
|
-
else if (drawable instanceof VEllipseSector) {
|
|
656
|
-
this.vertices.push(drawable.ellipse.center);
|
|
657
|
-
this.vertices.push(drawable.ellipse.axis);
|
|
658
|
-
this.drawables.push(drawable);
|
|
659
|
-
drawable.ellipse.center.listeners.addDragListener((event) => {
|
|
660
|
-
drawable.ellipse.axis.add(event.params.dragAmount);
|
|
661
|
-
});
|
|
662
|
-
}
|
|
663
|
-
else if (drawable instanceof Circle) {
|
|
664
|
-
this.vertices.push(drawable.center);
|
|
665
|
-
this.drawables.push(drawable);
|
|
666
|
-
}
|
|
667
|
-
else if (drawable instanceof CircleSector) {
|
|
668
|
-
this.vertices.push(drawable.circle.center);
|
|
669
|
-
this.drawables.push(drawable);
|
|
670
|
-
}
|
|
671
|
-
else if (drawable instanceof Polygon) {
|
|
672
|
-
this.drawables.push(drawable);
|
|
673
|
-
for (var i = 0; i < drawable.vertices.length; i++) {
|
|
674
|
-
this.vertices.push(drawable.vertices[i]);
|
|
688
|
+
else {
|
|
689
|
+
const addedDrawables = [drawable];
|
|
690
|
+
if (drawable instanceof Vertex) {
|
|
691
|
+
this.drawables.push(drawable);
|
|
692
|
+
this.vertices.push(drawable);
|
|
675
693
|
}
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
694
|
+
else if (drawable instanceof Line) {
|
|
695
|
+
// Add some lines
|
|
696
|
+
this.drawables.push(drawable);
|
|
697
|
+
this.vertices.push(drawable.a);
|
|
698
|
+
this.vertices.push(drawable.b);
|
|
699
|
+
addedDrawables.push(drawable.a, drawable.b);
|
|
700
|
+
}
|
|
701
|
+
else if (drawable instanceof Vector) {
|
|
702
|
+
this.drawables.push(drawable);
|
|
703
|
+
this.vertices.push(drawable.a);
|
|
704
|
+
this.vertices.push(drawable.b);
|
|
705
|
+
addedDrawables.push(drawable.a, drawable.b);
|
|
706
|
+
drawable.a.listeners.addDragListener((event) => {
|
|
707
|
+
drawable.b.add(event.params.dragAmount);
|
|
708
|
+
});
|
|
709
|
+
}
|
|
710
|
+
else if (drawable instanceof VEllipse) {
|
|
711
|
+
this.vertices.push(drawable.center);
|
|
712
|
+
this.vertices.push(drawable.axis);
|
|
713
|
+
addedDrawables.push(drawable.center, drawable.axis);
|
|
714
|
+
this.drawables.push(drawable);
|
|
715
|
+
drawable.center.listeners.addDragListener((event) => {
|
|
716
|
+
drawable.axis.add(event.params.dragAmount);
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
else if (drawable instanceof VEllipseSector) {
|
|
720
|
+
this.vertices.push(drawable.ellipse.center);
|
|
721
|
+
this.vertices.push(drawable.ellipse.axis);
|
|
722
|
+
addedDrawables.push(drawable.ellipse.center, drawable.ellipse.axis);
|
|
723
|
+
this.drawables.push(drawable);
|
|
724
|
+
drawable.ellipse.center.listeners.addDragListener((event) => {
|
|
725
|
+
drawable.ellipse.axis.add(event.params.dragAmount);
|
|
726
|
+
});
|
|
727
|
+
}
|
|
728
|
+
else if (drawable instanceof Circle) {
|
|
729
|
+
this.vertices.push(drawable.center);
|
|
730
|
+
addedDrawables.push(drawable.center);
|
|
731
|
+
this.drawables.push(drawable);
|
|
732
|
+
}
|
|
733
|
+
else if (drawable instanceof CircleSector) {
|
|
734
|
+
this.vertices.push(drawable.circle.center);
|
|
735
|
+
addedDrawables.push(drawable.circle.center);
|
|
736
|
+
this.drawables.push(drawable);
|
|
737
|
+
}
|
|
738
|
+
else if (drawable instanceof Polygon) {
|
|
739
|
+
this.drawables.push(drawable);
|
|
740
|
+
for (var i = 0; i < drawable.vertices.length; i++) {
|
|
741
|
+
this.vertices.push(drawable.vertices[i]);
|
|
742
|
+
addedDrawables.push(drawable.vertices[i]);
|
|
689
743
|
}
|
|
690
|
-
this.vertices.push(bezierPath.bezierCurves[i].endPoint);
|
|
691
|
-
this.vertices.push(bezierPath.bezierCurves[i].startControlPoint);
|
|
692
|
-
this.vertices.push(bezierPath.bezierCurves[i].endControlPoint);
|
|
693
|
-
bezierPath.bezierCurves[i].startControlPoint.attr.selectable = false;
|
|
694
|
-
bezierPath.bezierCurves[i].endControlPoint.attr.selectable = false;
|
|
695
744
|
}
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
drawable
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
745
|
+
else if (drawable instanceof Triangle) {
|
|
746
|
+
this.drawables.push(drawable);
|
|
747
|
+
this.vertices.push(drawable.a);
|
|
748
|
+
this.vertices.push(drawable.b);
|
|
749
|
+
this.vertices.push(drawable.c);
|
|
750
|
+
addedDrawables.push(drawable.a, drawable.b, drawable.c);
|
|
751
|
+
}
|
|
752
|
+
else if (drawable instanceof BezierPath) {
|
|
753
|
+
this.drawables.push(drawable);
|
|
754
|
+
const bezierPath = drawable;
|
|
755
|
+
for (var i = 0; i < bezierPath.bezierCurves.length; i++) {
|
|
756
|
+
if (!drawable.adjustCircular && i == 0) {
|
|
757
|
+
this.vertices.push(bezierPath.bezierCurves[i].startPoint);
|
|
758
|
+
addedDrawables.push(bezierPath.bezierCurves[i].startPoint);
|
|
759
|
+
}
|
|
760
|
+
this.vertices.push(bezierPath.bezierCurves[i].endPoint);
|
|
761
|
+
this.vertices.push(bezierPath.bezierCurves[i].startControlPoint);
|
|
762
|
+
this.vertices.push(bezierPath.bezierCurves[i].endControlPoint);
|
|
763
|
+
addedDrawables.push(bezierPath.bezierCurves[i].endPoint, bezierPath.bezierCurves[i].startControlPoint, bezierPath.bezierCurves[i].endControlPoint);
|
|
764
|
+
bezierPath.bezierCurves[i].startControlPoint.attr.selectable = false;
|
|
765
|
+
bezierPath.bezierCurves[i].endControlPoint.attr.selectable = false;
|
|
766
|
+
}
|
|
767
|
+
PlotBoilerplate.utils.enableBezierPathAutoAdjust(drawable);
|
|
768
|
+
}
|
|
769
|
+
else if (drawable instanceof PBImage) {
|
|
770
|
+
this.vertices.push(drawable.upperLeft);
|
|
771
|
+
this.vertices.push(drawable.lowerRight);
|
|
772
|
+
addedDrawables.push(drawable.upperLeft, drawable.lowerRight);
|
|
773
|
+
this.drawables.push(drawable);
|
|
774
|
+
// Todo: think about a IDragEvent interface
|
|
775
|
+
drawable.upperLeft.listeners.addDragListener((e) => {
|
|
776
|
+
drawable.lowerRight.add(e.params.dragAmount);
|
|
777
|
+
});
|
|
778
|
+
drawable.lowerRight.attr.selectable = false;
|
|
779
|
+
}
|
|
780
|
+
else if (drawable instanceof PBText) {
|
|
781
|
+
this.vertices.push(drawable.anchor);
|
|
782
|
+
addedDrawables.push(drawable.anchor);
|
|
783
|
+
this.drawables.push(drawable);
|
|
784
|
+
drawable.anchor.attr.selectable = false;
|
|
785
|
+
}
|
|
786
|
+
else {
|
|
787
|
+
throw "Cannot add drawable of unrecognized type: " + typeof drawable + ".";
|
|
788
|
+
}
|
|
789
|
+
!doNotFireEvent && this._fireContentChanged(addedDrawables, []);
|
|
715
790
|
}
|
|
716
791
|
// This is a workaround for backwards compatibility when the 'redraw' param was not yet present.
|
|
717
|
-
if (redraw || typeof redraw == "undefined")
|
|
792
|
+
if (redraw || typeof redraw == "undefined") {
|
|
718
793
|
this.redraw();
|
|
794
|
+
}
|
|
719
795
|
}
|
|
720
796
|
/**
|
|
721
797
|
* Remove a drawable object.<br>
|
|
@@ -735,88 +811,113 @@ export class PlotBoilerplate {
|
|
|
735
811
|
*
|
|
736
812
|
* @param {Drawable|Array<Drawable>} drawable - The drawable (of one of the allowed class instance) to remove.
|
|
737
813
|
* @param {boolean} [redraw=false]
|
|
814
|
+
* @param {removeWidth}
|
|
738
815
|
* @method remove
|
|
739
816
|
* @instance
|
|
740
817
|
* @memberof PlotBoilerplate
|
|
741
818
|
* @return {void}
|
|
742
819
|
**/
|
|
743
|
-
remove(drawable, redraw, removeWithVertices) {
|
|
820
|
+
remove(drawable, redraw, removeWithVertices, doNotFireEvent) {
|
|
744
821
|
if (Array.isArray(drawable)) {
|
|
822
|
+
const removedDrawables = [];
|
|
745
823
|
for (var i = 0; i < drawable.length; i++) {
|
|
746
|
-
this.remove(drawable[i], false, removeWithVertices)
|
|
824
|
+
if (this.remove(drawable[i], false, removeWithVertices, true)) {
|
|
825
|
+
removedDrawables.push(drawable[i]);
|
|
826
|
+
}
|
|
747
827
|
}
|
|
748
828
|
if (redraw) {
|
|
749
829
|
this.redraw();
|
|
750
830
|
}
|
|
751
|
-
|
|
831
|
+
!doNotFireEvent && this._fireContentChanged([], removedDrawables);
|
|
832
|
+
return removedDrawables.length > 0;
|
|
752
833
|
}
|
|
753
834
|
if (drawable instanceof Vertex) {
|
|
754
|
-
this.removeVertex(drawable, false);
|
|
835
|
+
const wasRemoved = this.removeVertex(drawable, false, false);
|
|
755
836
|
if (redraw) {
|
|
756
837
|
this.redraw();
|
|
757
838
|
}
|
|
839
|
+
!doNotFireEvent && this._fireContentChanged([], [drawable]);
|
|
840
|
+
return wasRemoved;
|
|
758
841
|
}
|
|
842
|
+
let wasRemoved = false;
|
|
843
|
+
const removedDrawables = [];
|
|
759
844
|
for (var i = 0; i < this.drawables.length; i++) {
|
|
760
845
|
if (this.drawables[i] === drawable || this.drawables[i].uid === drawable.uid) {
|
|
761
846
|
this.drawables.splice(i, 1);
|
|
847
|
+
removedDrawables.push(drawable);
|
|
762
848
|
if (removeWithVertices) {
|
|
763
849
|
// Check if some listeners need to be removed
|
|
764
850
|
if (drawable instanceof Line) {
|
|
765
851
|
// Add some lines
|
|
766
|
-
this.removeVertex(drawable.a, false);
|
|
767
|
-
this.removeVertex(drawable.b, false);
|
|
852
|
+
this.removeVertex(drawable.a, false, true);
|
|
853
|
+
this.removeVertex(drawable.b, false, true);
|
|
854
|
+
removedDrawables.push(drawable.a, drawable.b);
|
|
768
855
|
}
|
|
769
856
|
else if (drawable instanceof Vector) {
|
|
770
|
-
this.removeVertex(drawable.a, false);
|
|
771
|
-
this.removeVertex(drawable.b, false);
|
|
857
|
+
this.removeVertex(drawable.a, false, true);
|
|
858
|
+
this.removeVertex(drawable.b, false, true);
|
|
859
|
+
removedDrawables.push(drawable.a, drawable.b);
|
|
772
860
|
}
|
|
773
861
|
else if (drawable instanceof VEllipse) {
|
|
774
|
-
this.removeVertex(drawable.center, false);
|
|
775
|
-
this.removeVertex(drawable.axis, false);
|
|
862
|
+
this.removeVertex(drawable.center, false, true);
|
|
863
|
+
this.removeVertex(drawable.axis, false, true);
|
|
864
|
+
removedDrawables.push(drawable.center, drawable.axis);
|
|
776
865
|
}
|
|
777
866
|
else if (drawable instanceof VEllipseSector) {
|
|
778
|
-
this.removeVertex(drawable.ellipse.center);
|
|
779
|
-
this.removeVertex(drawable.ellipse.axis);
|
|
867
|
+
this.removeVertex(drawable.ellipse.center, false, true);
|
|
868
|
+
this.removeVertex(drawable.ellipse.axis, false, true);
|
|
869
|
+
removedDrawables.push(drawable.ellipse.center, drawable.ellipse.axis);
|
|
780
870
|
}
|
|
781
871
|
else if (drawable instanceof Circle) {
|
|
782
|
-
this.removeVertex(drawable.center, false);
|
|
872
|
+
this.removeVertex(drawable.center, false, true);
|
|
783
873
|
}
|
|
784
874
|
else if (drawable instanceof CircleSector) {
|
|
785
|
-
this.removeVertex(drawable.circle.center, false);
|
|
875
|
+
this.removeVertex(drawable.circle.center, false, true);
|
|
876
|
+
removedDrawables.push(drawable.circle.center);
|
|
786
877
|
}
|
|
787
878
|
else if (drawable instanceof Polygon) {
|
|
788
879
|
// for( var i in drawable.vertices )
|
|
789
|
-
for (var i = 0; i < drawable.vertices.length; i++)
|
|
790
|
-
this.removeVertex(drawable.vertices[i], false);
|
|
880
|
+
for (var i = 0; i < drawable.vertices.length; i++) {
|
|
881
|
+
this.removeVertex(drawable.vertices[i], false, true);
|
|
882
|
+
removedDrawables.push(drawable.vertices[i]);
|
|
883
|
+
}
|
|
791
884
|
}
|
|
792
885
|
else if (drawable instanceof Triangle) {
|
|
793
|
-
this.removeVertex(drawable.a, false);
|
|
794
|
-
this.removeVertex(drawable.b, false);
|
|
795
|
-
this.removeVertex(drawable.c, false);
|
|
886
|
+
this.removeVertex(drawable.a, false, true);
|
|
887
|
+
this.removeVertex(drawable.b, false, true);
|
|
888
|
+
this.removeVertex(drawable.c, false, true);
|
|
889
|
+
removedDrawables.push(drawable.a, drawable.b, drawable.c);
|
|
796
890
|
}
|
|
797
891
|
else if (drawable instanceof BezierPath) {
|
|
798
892
|
for (var i = 0; i < drawable.bezierCurves.length; i++) {
|
|
799
|
-
this.removeVertex(drawable.bezierCurves[i].startPoint, false);
|
|
800
|
-
this.removeVertex(drawable.bezierCurves[i].startControlPoint, false);
|
|
801
|
-
this.removeVertex(drawable.bezierCurves[i].endControlPoint, false);
|
|
893
|
+
this.removeVertex(drawable.bezierCurves[i].startPoint, false, true);
|
|
894
|
+
this.removeVertex(drawable.bezierCurves[i].startControlPoint, false, true);
|
|
895
|
+
this.removeVertex(drawable.bezierCurves[i].endControlPoint, false, true);
|
|
896
|
+
removedDrawables.push(drawable.bezierCurves[i].startPoint, drawable.bezierCurves[i].startControlPoint, drawable.bezierCurves[i].endControlPoint);
|
|
802
897
|
if (i + 1 == drawable.bezierCurves.length) {
|
|
803
|
-
this.removeVertex(drawable.bezierCurves[i].endPoint, false);
|
|
898
|
+
this.removeVertex(drawable.bezierCurves[i].endPoint, false, true);
|
|
899
|
+
removedDrawables.push(drawable.bezierCurves[i].endPoint);
|
|
804
900
|
}
|
|
805
901
|
}
|
|
806
902
|
}
|
|
807
903
|
else if (drawable instanceof PBImage) {
|
|
808
|
-
this.removeVertex(drawable.upperLeft, false);
|
|
809
|
-
this.removeVertex(drawable.lowerRight, false);
|
|
904
|
+
this.removeVertex(drawable.upperLeft, false, true);
|
|
905
|
+
this.removeVertex(drawable.lowerRight, false, true);
|
|
906
|
+
removedDrawables.push(drawable.upperLeft, drawable.lowerRight);
|
|
810
907
|
}
|
|
811
908
|
else if (drawable instanceof PBText) {
|
|
812
|
-
this.removeVertex(drawable.anchor, false);
|
|
909
|
+
this.removeVertex(drawable.anchor, false, true);
|
|
910
|
+
removedDrawables.push(drawable.anchor);
|
|
813
911
|
}
|
|
814
912
|
} // END removeWithVertices
|
|
815
913
|
if (redraw) {
|
|
816
914
|
this.redraw();
|
|
817
915
|
}
|
|
818
|
-
|
|
819
|
-
|
|
916
|
+
!doNotFireEvent && this._fireContentChanged([], removedDrawables);
|
|
917
|
+
wasRemoved = true;
|
|
918
|
+
} // END if
|
|
919
|
+
} // END for
|
|
920
|
+
return wasRemoved;
|
|
820
921
|
}
|
|
821
922
|
/**
|
|
822
923
|
* Remove a vertex from the vertex list.<br>
|
|
@@ -826,18 +927,20 @@ export class PlotBoilerplate {
|
|
|
826
927
|
* @method removeVertex
|
|
827
928
|
* @instance
|
|
828
929
|
* @memberof PlotBoilerplate
|
|
829
|
-
* @return {
|
|
930
|
+
* @return {boolean}
|
|
830
931
|
**/
|
|
831
|
-
removeVertex(vert, redraw) {
|
|
932
|
+
removeVertex(vert, redraw, doNotFireEvent) {
|
|
832
933
|
for (var i = 0; i < this.vertices.length; i++) {
|
|
833
934
|
if (this.vertices[i] === vert) {
|
|
834
935
|
this.vertices.splice(i, 1);
|
|
835
936
|
if (redraw) {
|
|
836
937
|
this.redraw();
|
|
837
938
|
}
|
|
838
|
-
|
|
939
|
+
!doNotFireEvent && this._fireContentChanged([], [vert]);
|
|
940
|
+
return true;
|
|
839
941
|
}
|
|
840
942
|
}
|
|
943
|
+
return false;
|
|
841
944
|
}
|
|
842
945
|
/**
|
|
843
946
|
* Remove all elements.
|
|
@@ -852,13 +955,16 @@ export class PlotBoilerplate {
|
|
|
852
955
|
* @return {void}
|
|
853
956
|
*/
|
|
854
957
|
removeAll(keepVertices, triggerRedraw) {
|
|
958
|
+
let removedDrawables = this.drawables;
|
|
855
959
|
this.drawables = [];
|
|
856
960
|
if (!Boolean(keepVertices)) {
|
|
961
|
+
removedDrawables = removedDrawables.concat(this.vertices);
|
|
857
962
|
this.vertices = [];
|
|
858
963
|
}
|
|
859
964
|
if (triggerRedraw || typeof triggerRedraw === "undefined") {
|
|
860
965
|
this.redraw();
|
|
861
966
|
}
|
|
967
|
+
removedDrawables.length > 0 && this._fireContentChanged([], removedDrawables);
|
|
862
968
|
}
|
|
863
969
|
/**
|
|
864
970
|
* Find the vertex near the given position.
|
|
@@ -1113,7 +1219,7 @@ export class PlotBoilerplate {
|
|
|
1113
1219
|
d.b.attr.renderTime = renderTime;
|
|
1114
1220
|
}
|
|
1115
1221
|
else if (d instanceof Vector) {
|
|
1116
|
-
draw.arrow(d.a, d.b, this.drawConfig.vector.color);
|
|
1222
|
+
draw.arrow(d.a, d.b, this.drawConfig.vector.color, this.drawConfig.vector.lineWidth);
|
|
1117
1223
|
if (this.drawConfig.drawHandlePoints && d.b.attr.selectable && d.b.attr.visible) {
|
|
1118
1224
|
draw.setCurrentId(`${d.uid}_h0`);
|
|
1119
1225
|
draw.setCurrentClassName(`${d.className}-handle`);
|