BIMviewer

Форк
0
/
MeasureAngleTool.js 
127 строк · 4.0 Кб
1
import {Controller} from "../Controller.js";
2
import {AngleMeasurementsPlugin, AngleMeasurementsMouseControl, ContextMenu} from "@xeokit/xeokit-sdk";
3

4
/** @private */
5
export class MeasureAngleTool extends Controller {
6

7
    constructor(parent, cfg) {
8

9
        super(parent);
10

11
        if (!cfg.buttonElement) {
12
            throw "Missing config: buttonElement";
13
        }
14

15
        const buttonElement = cfg.buttonElement;
16

17
        this._contextMenu = new ContextMenu({
18
            items: [
19
                [
20
                    {
21
                        getTitle: (context) => {
22
                            return context.measurement.labelsVisible ? "Hide Measurement Label" : "Show Measurement Label";
23
                        },
24
                        doAction: function (context) {
25
                            context.measurement.labelsVisible = !context.measurement.labelsVisible;
26
                        }
27
                    }
28
                ], [
29
                    {
30
                        title: "Delete Measurement",
31
                        doAction: function (context) {
32
                            context.measurement.destroy();
33
                        }
34
                    }
35
                ]
36
            ]
37
        });
38

39
        this._contextMenu.on("hidden", () => {
40
            if (this._contextMenu.context.measurement) {
41
                this._contextMenu.context.measurement.setHighlighted(false);
42
            }
43
        });
44

45
        this._angleMeasurementsPlugin = new AngleMeasurementsPlugin(this.viewer, {});
46

47
        this._angleMeasurementsPlugin.on("mouseOver", (e) => {
48
            e.measurement.setHighlighted(true);
49
        });
50

51
        this._angleMeasurementsPlugin.on("mouseLeave", (e) => {
52
            if (this._contextMenu.shown && this._contextMenu.context.measurement.id === e.measurement.id) {
53
                return;
54
            }
55
            e.measurement.setHighlighted(false);
56
        });
57

58
        this._angleMeasurementsPlugin.on("contextMenu", (e) => {
59
            this._contextMenu.context = { // Must set context before showing menu
60
                angleMeasurementsPlugin: this._angleMeasurementsPlugin,
61
                measurement: e.measurement
62
            };
63
            this._contextMenu.show(e.event.clientX, e.event.clientY);
64
            e.event.preventDefault();
65
        });
66

67
        this._angleMeasurementsMouseControl  = new AngleMeasurementsMouseControl(this._angleMeasurementsPlugin, {
68
         //   pointerLens : new PointerLens(viewer)
69
        })
70

71
        this._angleMeasurementsMouseControl.snapping = true;
72
        
73
        this.on("enabled", (enabled) => {
74
            if (!enabled) {
75
                buttonElement.classList.add("disabled");
76
            } else {
77
                buttonElement.classList.remove("disabled");
78
            }
79
        });
80

81
        this.on("active", (active) => {
82
            if (active) {
83
                buttonElement.classList.add("active");
84
                this._angleMeasurementsMouseControl.activate();
85
            } else {
86
                buttonElement.classList.remove("active");
87
                this._angleMeasurementsMouseControl.deactivate();
88
            }
89
        });
90

91
        buttonElement.addEventListener("click", (event) => {
92
            if (this.getEnabled()) {
93
                const active = this.getActive();
94
                this.setActive(!active);
95
            }
96
            event.preventDefault();
97
        });
98

99
        this.bimViewer.on("reset", () => {
100
            this.setActive(false);
101
            this.clear();
102
        });
103
    }
104

105
    getNumMeasurements() {
106
        return Object.keys(this._angleMeasurementsPlugin.measurements).length;
107
    }
108

109
    setSnappingEnabled(snappingEnabled) {
110
        return this._angleMeasurementsMouseControl.snapping = snappingEnabled;
111
    }
112

113
    getSnappingEnabled() {
114
        return this._angleMeasurementsMouseControl.snapping;
115
    }
116

117
    clear() {
118
        this._angleMeasurementsPlugin.clear();
119
    }
120

121
    destroy() {
122
        this._angleMeasurementsPlugin.destroy();
123
        this._angleMeasurementsMouseControl.destroy();
124
        this._contextMenu.destroy();
125
        super.destroy();
126
    }
127
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.