ng-plan
Version:
This module will draw a 2D plan drawing from a geoJSON object. It was built to visualize 2D space boundaries from the Building Information Modeling (BIM) authring tool, Revit. It is quite generic, but does have some features that are mainly related to the
186 lines (185 loc) • 15.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Directive, Output, HostListener, EventEmitter } from '@angular/core';
export class CanvasEventsDirective {
constructor() {
this.zoomOut = new EventEmitter();
this.zoomIn = new EventEmitter();
this.moveInit = new EventEmitter();
this.move = new EventEmitter();
this.moveEnd = new EventEmitter();
this.panMode = new EventEmitter();
this.addNodeMode = new EventEmitter();
this.mouseDown = false;
this.dragMode = false;
}
/**
* @param {?} event
* @return {?}
*/
onMouseWheelChrome(event) {
this.mouseWheelFunc(event);
}
/**
* @param {?} event
* @return {?}
*/
onMouseWheelFirefox(event) {
this.mouseWheelFunc(event);
}
/**
* @param {?} event
* @return {?}
*/
onMouseWheelIE(event) {
this.mouseWheelFunc(event);
}
/**
* @param {?} ev
* @return {?}
*/
onKeyDown(ev) {
if (ev.key == "ArrowDown") {
this.zoomIn.emit(ev);
}
if (ev.key == "ArrowUp") {
this.zoomOut.emit(ev);
}
if (ev.key == "Alt") {
// enable drag mode if holding Alt
this.dragMode = true;
this.panMode.emit(true);
}
if (ev.key == "Control") {
this.addNodeMode.emit(true);
}
}
/**
* @param {?} ev
* @return {?}
*/
onKeyUp(ev) {
if (ev.key == "Alt") {
// disable drag mode if releasing Alt
this.dragMode = false;
this.panMode.emit(false);
}
if (ev.key == "Control") {
this.addNodeMode.emit(false);
}
}
/**
* @param {?} ev
* @return {?}
*/
onMouseClick(ev) {
this.mouseDown = true;
// enable drag mode if clicking middle button
if (ev.button == 1)
this.dragMode = true;
if (this.dragMode) {
this.clickX = ev.offsetX;
this.clickY = ev.offsetY;
this.panMode.emit(true);
this.moveInit.emit([ev.offsetX, ev.offsetY]);
}
}
/**
* @param {?} ev
* @return {?}
*/
onMouseMove(ev) {
if (this.dragMode && this.mouseDown) {
this.move.emit([ev.offsetX - this.clickX, ev.offsetY - this.clickY]);
}
}
/**
* @param {?} ev
* @return {?}
*/
onMouseUp(ev) {
this.mouseDown = false;
if (this.dragMode) {
this.dragMode = false;
this.panMode.emit(false);
this.moveEnd.emit([ev.offsetX - this.clickX, ev.offsetY - this.clickY]);
}
}
/**
* @param {?} event
* @return {?}
*/
mouseWheelFunc(event) {
var /** @type {?} */ event = window.event || event; // old IE support
var /** @type {?} */ delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));
if (delta > 0) {
this.zoomIn.emit(event);
}
else if (delta < 0) {
this.zoomOut.emit(event);
}
// for IE
event.returnValue = false;
// for Chrome and Firefox
if (event.preventDefault) {
event.preventDefault();
}
}
}
CanvasEventsDirective.decorators = [
{ type: Directive, args: [{ selector: '[canvasEvents]' },] },
];
/** @nocollapse */
CanvasEventsDirective.propDecorators = {
"zoomOut": [{ type: Output },],
"zoomIn": [{ type: Output },],
"moveInit": [{ type: Output },],
"move": [{ type: Output },],
"moveEnd": [{ type: Output },],
"panMode": [{ type: Output },],
"addNodeMode": [{ type: Output },],
"onMouseWheelChrome": [{ type: HostListener, args: ['mousewheel', ['$event'],] },],
"onMouseWheelFirefox": [{ type: HostListener, args: ['DOMMouseScroll', ['$event'],] },],
"onMouseWheelIE": [{ type: HostListener, args: ['onmousewheel', ['$event'],] },],
"onKeyDown": [{ type: HostListener, args: ['document:keydown', ['$event'],] },],
"onKeyUp": [{ type: HostListener, args: ['document:keyup', ['$event'],] },],
"onMouseClick": [{ type: HostListener, args: ['mousedown', ['$event'],] },],
"onMouseMove": [{ type: HostListener, args: ['mousemove', ['$event'],] },],
"onMouseUp": [{ type: HostListener, args: ['mouseup', ['$event'],] },],
};
function CanvasEventsDirective_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
CanvasEventsDirective.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
CanvasEventsDirective.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
CanvasEventsDirective.propDecorators;
/** @type {?} */
CanvasEventsDirective.prototype.zoomOut;
/** @type {?} */
CanvasEventsDirective.prototype.zoomIn;
/** @type {?} */
CanvasEventsDirective.prototype.moveInit;
/** @type {?} */
CanvasEventsDirective.prototype.move;
/** @type {?} */
CanvasEventsDirective.prototype.moveEnd;
/** @type {?} */
CanvasEventsDirective.prototype.panMode;
/** @type {?} */
CanvasEventsDirective.prototype.addNodeMode;
/** @type {?} */
CanvasEventsDirective.prototype.mouseDown;
/** @type {?} */
CanvasEventsDirective.prototype.dragMode;
/** @type {?} */
CanvasEventsDirective.prototype.clickX;
/** @type {?} */
CanvasEventsDirective.prototype.clickY;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLWV2ZW50cy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1wbGFuLyIsInNvdXJjZXMiOlsibGliL2NhbnZhcy1ldmVudHMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzlFLE1BQU07O3VCQUVnQixJQUFJLFlBQVksRUFBRTtzQkFDbkIsSUFBSSxZQUFZLEVBQUU7d0JBQ2hCLElBQUksWUFBWSxFQUFFO29CQUN0QixJQUFJLFlBQVksRUFBRTt1QkFDZixJQUFJLFlBQVksRUFBRTt1QkFDbEIsSUFBSSxZQUFZLEVBQUU7MkJBQ2QsSUFBSSxZQUFZLEVBQUU7eUJBRWIsS0FBSzt3QkFDTixLQUFLOzs7Ozs7SUFLTyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7OztJQUdlLG1CQUFtQixDQUFDLEtBQVU7UUFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Ozs7O0lBR2EsY0FBYyxDQUFDLEtBQVU7UUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Ozs7O0lBSTdCLFNBQVMsQ0FBQyxFQUFnQjtRQUN0QixFQUFFLENBQUEsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFBLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEI7UUFDRCxFQUFFLENBQUEsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFBLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkI7UUFDRCxFQUFFLENBQUEsQ0FBQyxFQUFFLENBQUMs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SyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjtRQUFDLElBQUksQ0FBQyxFQUFFLENBQUEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1Qjs7UUFFRCxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzs7UUFFMUIsRUFBRSxDQUFBLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzFCO0tBQ0Y7OztZQTNHRixTQUFTLFNBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7Ozs7d0JBR3RDLE1BQU07dUJBQ04sTUFBTTt5QkFDTixNQUFNO3FCQUNOLE1BQU07d0JBQ04sTUFBTTt3QkFDTixNQUFNOzRCQUNOLE1BQU07bUNBUU4sWUFBWSxTQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQztvQ0FJckMsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDOytCQUl6QyxZQUFZLFNBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDOzBCQUl2QyxZQUFZLFNBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBa0IzQyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7NkJBYXpDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7NEJBZ0JwQyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOzBCQU9wQyxZQUFZLFNBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPdXRwdXQsIEhvc3RMaXN0ZW5lciwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY2FudmFzRXZlbnRzXScgfSlcclxuZXhwb3J0IGNsYXNzIENhbnZhc0V2ZW50c0RpcmVjdGl2ZSB7XHJcblxyXG4gIEBPdXRwdXQoKSB6b29tT3V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB6b29tSW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG1vdmVJbml0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBtb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwYW5Nb2RlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhZGROb2RlTW9kZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHJpdmF0ZSBtb3VzZURvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGRyYWdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgY2xpY2tYO1xyXG4gIHByaXZhdGUgY2xpY2tZO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZXdoZWVsJywgWyckZXZlbnQnXSkgb25Nb3VzZVdoZWVsQ2hyb21lKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMubW91c2VXaGVlbEZ1bmMoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignRE9NTW91c2VTY3JvbGwnLCBbJyRldmVudCddKSBvbk1vdXNlV2hlZWxGaXJlZm94KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMubW91c2VXaGVlbEZ1bmMoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignb25tb3VzZXdoZWVsJywgWyckZXZlbnQnXSkgb25Nb3VzZVdoZWVsSUUoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5tb3VzZVdoZWVsRnVuYyhldmVudCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBvbktleURvd24oZXY6S2V5Ym9hcmRFdmVudCl7XHJcbiAgICAgIGlmKGV2LmtleSA9PSBcIkFycm93RG93blwiKXtcclxuICAgICAgICB0aGlzLnpvb21Jbi5lbWl0KGV2KTtcclxuICAgICAgfVxyXG4gICAgICBpZihldi5rZXkgPT0gXCJBcnJvd1VwXCIpe1xyXG4gICAgICAgIHRoaXMuem9vbU91dC5lbWl0KGV2KTtcclxuICAgICAgfVxyXG4gICAgICBpZihldi5rZXkgPT0gXCJBbHRcIil7XHJcbiAgICAgICAgLy8gZW5hYmxlIGRyYWcgbW9kZSBpZiBob2xkaW5nIEFsdFxyXG4gICAgICAgIHRoaXMuZHJhZ01vZGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGFuTW9kZS5lbWl0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGV2LmtleSA9PSBcIkNvbnRyb2xcIil7XHJcbiAgICAgICAgdGhpcy5hZGROb2RlTW9kZS5lbWl0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlVcChldjpLZXlib2FyZEV2ZW50KXtcclxuICAgICAgaWYoZXYua2V5ID09IFwiQWx0XCIpe1xyXG4gICAgICAgIC8vIGRpc2FibGUgZHJhZyBtb2RlIGlmIHJlbGVhc2luZyBBbHRcclxuICAgICAgICB0aGlzLmRyYWdNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wYW5Nb2RlLmVtaXQoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGV2LmtleSA9PSBcIkNvbnRyb2xcIil7XHJcbiAgICAgICAgdGhpcy5hZGROb2RlTW9kZS5lbWl0KGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZUNsaWNrKGV2OiBNb3VzZUV2ZW50KSB7XHJcblxyXG4gICAgICB0aGlzLm1vdXNlRG93biA9IHRydWU7XHJcblxyXG4gICAgICAvLyBlbmFibGUgZHJhZyBtb2RlIGlmIGNsaWNraW5nIG1pZGRsZSBidXR0b25cclxuICAgICAgaWYoZXYuYnV0dG9uID09IDEpIHRoaXMuZHJhZ01vZGUgPSB0cnVlO1xyXG5cclxuICAgICAgaWYodGhpcy5kcmFnTW9kZSl7XHJcbiAgICAgICAgdGhpcy5jbGlja1ggPSBldi5vZmZzZXRYO1xyXG4gICAgICAgIHRoaXMuY2xpY2tZID0gZXYub2Zmc2V0WTtcclxuICAgICAgICB0aGlzLnBhbk1vZGUuZW1pdCh0cnVlKTtcclxuICAgICAgICB0aGlzLm1vdmVJbml0LmVtaXQoW2V2Lm9mZnNldFgsZXYub2Zmc2V0WV0pO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnLCBbJyRldmVudCddKVxyXG4gIG9uTW91c2VNb3ZlKGV2OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgIGlmKHRoaXMuZHJhZ01vZGUgJiYgdGhpcy5tb3VzZURvd24pe1xyXG4gICAgICAgICAgdGhpcy5tb3ZlLmVtaXQoW2V2Lm9mZnNldFgtdGhpcy5jbGlja1gsZXYub2Zmc2V0WS10aGlzLmNsaWNrWV0pO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcclxuICBvbk1vdXNlVXAoZXY6IE1vdXNlRXZlbnQpIHtcclxuICAgICAgdGhpcy5tb3VzZURvd24gPSBmYWxzZTtcclxuICAgICAgaWYodGhpcy5kcmFnTW9kZSl7XHJcbiAgICAgICAgdGhpcy5kcmFnTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucGFuTW9kZS5lbWl0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLm1vdmVFbmQuZW1pdChbZXYub2Zmc2V0WC10aGlzLmNsaWNrWCxldi5vZmZzZXRZLXRoaXMuY2xpY2tZXSk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlV2hlZWxGdW5jKGV2ZW50OiBhbnkpIHtcclxuICAgIHZhciBldmVudCA9IHdpbmRvdy5ldmVudCB8fCBldmVudDsgLy8gb2xkIElFIHN1cHBvcnRcclxuICAgIHZhciBkZWx0YSA9IE1hdGgubWF4KC0xLCBNYXRoLm1pbigxLCAoZXZlbnQud2hlZWxEZWx0YSB8fCAtZXZlbnQuZGV0YWlsKSkpO1xyXG4gICAgaWYoZGVsdGEgPiAwKSB7XHJcbiAgICAgICAgdGhpcy56b29tSW4uZW1pdChldmVudCk7XHJcbiAgICB9IGVsc2UgaWYoZGVsdGEgPCAwKSB7XHJcbiAgICAgICAgdGhpcy56b29tT3V0LmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgLy8gZm9yIElFXHJcbiAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xyXG4gICAgLy8gZm9yIENocm9tZSBhbmQgRmlyZWZveFxyXG4gICAgaWYoZXZlbnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==