@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 4.15 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{__decorate as t}from"tslib";import e from"../../core/Accessor.js";import{EventEmitter as i}from"../../core/Evented.js";import{watch as o,sync as s}from"../../core/reactiveUtils.js";import{property as l,subclass as r}from"../../core/accessorSupport/decorators.js";import{distance as n}from"../../core/libs/gl-matrix-2/math/vec3.js";import{create as a}from"../../core/libs/gl-matrix-2/factories/vec3f64.js";import{projectPointToVector as h}from"../../geometry/projection/projectPointToVector.js";import{getGraphicEffectiveElevationMode as c}from"../../support/elevationInfoUtils.js";import p from"../../symbols/support/ElevationInfo.js";import{intersectionDistance2D as m}from"./support/utils.js";let u=class extends e{set graphic(t){this._circleCollisionCache=null,this._originalSymbol=t.symbol,this._set("graphic",t),this.attachSymbolChanged()}get elevationInfo(){const{layer:t}=this.graphic,e=t&&"elevationInfo"in t?t.elevationInfo:null,i=c(this.graphic),o=e?e.offset:0;return new p({mode:i,offset:o})}set focusedSymbol(t){t!==this._get("focusedSymbol")&&(this._set("focusedSymbol",t),this._updateGraphicSymbol(),this._circleCollisionCache=null)}grabbableForEvent(){return!0}set grabbing(t){t!==this._get("grabbing")&&(this._set("grabbing",t),this._updateGraphicSymbol())}set hovering(t){t!==this._get("hovering")&&(this._set("hovering",t),this._updateGraphicSymbol())}set selected(t){t!==this._get("selected")&&(this._set("selected",t),this._updateGraphicSymbol(),this.events.emit("select-changed",{action:t?"select":"deselect"}))}get _focused(){return this._get("hovering")||this._get("grabbing")}constructor(t){super(t),this.layer=null,this.interactive=!0,this.selectable=!1,this.grabbable=!0,this.dragging=!1,this.cursor=null,this.consumesClicks=!0,this.events=new i,this._circleCollisionCache=null,this._graphicSymbolChangedHandle=null,this._originalSymbol=null}destroy(){this.detachSymbolChanged(),this._resetGraphicSymbol(),this._set("view",null)}intersectionDistance(t){const e=this.graphic;if(!1===e.visible)return null;const i=e.geometry;if(null==i)return null;const o=this._get("focusedSymbol"),s=null!=o?o:e.symbol;return"2d"===this.view.type?this._intersectDistance2D(this.view,t,i,s):this._intersectDistance3D(this.view,t,e)}attach(){this.attachSymbolChanged(),null!=this.layer&&this.layer.add(this.graphic)}detach(){this.detachSymbolChanged(),this._resetGraphicSymbol(),null!=this.layer&&this.layer.remove(this.graphic)}attachSymbolChanged(){this.detachSymbolChanged(),this._graphicSymbolChangedHandle=o(()=>this.graphic?.symbol,t=>{null!=t&&t!==this.focusedSymbol&&t!==this._originalSymbol&&(this._originalSymbol=t,this._focused&&null!=this.focusedSymbol&&(this.graphic.symbol=this.focusedSymbol))},s)}detachSymbolChanged(){null!=this._graphicSymbolChangedHandle&&(this._graphicSymbolChangedHandle.remove(),this._graphicSymbolChangedHandle=null)}onElevationChange(){}onViewChange(){}_updateGraphicSymbol(){this.graphic.symbol=this._focused&&null!=this.focusedSymbol?this.focusedSymbol:this._originalSymbol}_resetGraphicSymbol(){this.graphic.symbol=this._originalSymbol}_intersectDistance2D(t,e,i,o){const{cache:s,result:l}=m(t,e,i,o,this._circleCollisionCache)??{};return this._circleCollisionCache=s,l??null}_intersectDistance3D(t,e,i){const o=t.toMap(e,{include:[i]});return o&&h(o,g,t.renderSpatialReference)?n(g,t.state.camera.eye):null}};t([l({constructOnly:!0,nonNullable:!0})],u.prototype,"graphic",null),t([l()],u.prototype,"elevationInfo",null),t([l({constructOnly:!0,nonNullable:!0})],u.prototype,"view",void 0),t([l({value:null})],u.prototype,"focusedSymbol",null),t([l({constructOnly:!0})],u.prototype,"layer",void 0),t([l()],u.prototype,"interactive",void 0),t([l()],u.prototype,"selectable",void 0),t([l()],u.prototype,"grabbable",void 0),t([l({value:!1})],u.prototype,"grabbing",null),t([l()],u.prototype,"dragging",void 0),t([l()],u.prototype,"hovering",null),t([l({value:!1})],u.prototype,"selected",null),t([l()],u.prototype,"cursor",void 0),u=t([r("esri.views.interactive.GraphicManipulator")],u);const g=a();export{u as GraphicManipulator};