@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 6 kB
JavaScript
import{_ as e}from"../../../../../chunks/tslib.es6.js";import t from"../../../../../core/Evented.js";import r from"../../../../../core/Handles.js";import o from"../../../../../core/Logger.js";import{destroyMaybe as i,isSome as s,isNone as n,unwrap as a}from"../../../../../core/maybe.js";import{watch as m,syncAndInitial as h}from"../../../../../core/reactiveUtils.js";import{property as c}from"../../../../../core/accessorSupport/decorators/property.js";import"../../../../../core/accessorSupport/ensureType.js";import"../../../../../core/arrayUtils.js";import{subclass as l}from"../../../../../core/accessorSupport/decorators/subclass.js";import d from"../../../../../geometry/Point.js";import{tryProjectWithZConversion as p}from"../../../../../geometry/projection.js";import{empty as u,expandPointInPlace as y}from"../../../../../geometry/support/aaBoundingRect.js";import{logFailedGeometryProjectionError as g}from"../../support/projectionUtils.js";import{createCoordinateHelper as _}from"../../../../interactive/coordinateHelper.js";import{EditGeometry as G,Component as f}from"../../../../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as v}from"../../../../interactive/editGeometry/EditGeometryOperations.js";const V="esri.views.3d.analysis.AreaMeasurement.support.AreaMeasurement3DPathHelper",x=o.getLogger(V);let P=class extends t.EventedAccessor{constructor(e={}){super(e),this._handles=new r,this._version=0,this._internalGeometryChange=!1,this._extent=u()}destroy(){this._handles=i(this._handles)}set areaMeasurement(e){this._set("areaMeasurement",e),s(e)&&s(this.view)&&this._initialize(e,this.view)}set view(e){this._set("view",e),s(e)&&s(this.areaMeasurement)&&this._initialize(this.areaMeasurement,e)}get constructed(){return s(this.areaMeasurement)&&s(this.view)}get version(){return this._version}get isValidPolygon(){return this.constructed&&this._editGeometry.components.length>0&&this._editGeometry.components[0].isClosed()}get extent(){if(this.constructed&&this._editGeometry.components.length>0&&this._editGeometry.components[0].vertices.length>0){const e=u(this._extent);return this.forEachVertex((t=>{y(e,t.pos)})),e}return null}get spatialReference(){return this.constructed?this._editGeometry.coordinateHelper.spatialReference:null}_initialize(e,t){this._handles.removeAll(),this._handles.add(m((()=>e.geometry),(()=>{this._updateEditGeometryFromModelGeometry(e,t)}),h)),this._makeDirty(!0)}_makeDirty(e=!1){this.notifyChange("isValidPolygon"),this.notifyChange("initialized"),this.notifyChange("extent"),e&&this.notifyChange("numVertices")}_updateEditGeometryFromModelGeometry(e,t){if(this._version++,this._internalGeometryChange)return;this._handles.remove("EditGeometry");let r=e.geometry;if(s(r)){const o=p(r,t.spatialReference);n(o)&&g(e,r.spatialReference,x),r=o}s(r)?this._editGeometryOperations=v.fromGeometry(r,t.state.viewingMode):this._editGeometryOperations=new v(new G("polygon",_(!0,!1,t.spatialReference))),this._makeDirty(!0),this.emit("change"),this._handles.add(this._editGeometry.on("change",(t=>{this._makeDirty(null!=t.addedVertices||null!=t.removedVertices),this._internalGeometryChange=!0,e.geometry=this.numVertices>0?this._editGeometry.geometry:null,this._internalGeometryChange=!1})),"EditGeometry")}get _editGeometry(){return this._editGeometryOperations.data}get vertices(){const e=[];return this.forEachVertex((t=>{e.push(t)})),e}get numVertices(){return this.constructed&&this._editGeometry.components.length>0?this._editGeometry.components[0].vertices.length:0}get lastPoint(){if(this.constructed&&this._editGeometry.components.length>0){const e=this._editGeometry.components[0].getLastVertex();if(s(e))return this._editGeometry.coordinateHelper.vectorToPoint(e.pos)}return null}getVertex(e){if(!this.constructed||0===this._editGeometry.components.length||0===this._editGeometry.components[0].vertices.length)return null;const t=this._editGeometry.components[0].vertices[0];let r=t;do{if(r.index===e)return r;r=r.rightEdge.rightVertex}while(r!==t&&null!=r);return null}getVertexPositionAsPoint(e){return this._editGeometry.coordinateHelper.vectorToPoint(e.pos)}getVertexPositionAsPointFromIndex(e){return this._editGeometry.coordinateHelper.vectorToPoint(this.getVertex(e).pos)}forEachVertex(e){this.constructed&&this._editGeometry.components.length>0&&this._editGeometry.components[0].iterateVertices(e)}forEachVertexPosition(e){const t=this._editGeometry.coordinateHelper;this.forEachVertex(((r,o)=>{t.vectorToPoint(r.pos,j),e(j,o)}))}clear(){s(this.areaMeasurement)&&(this.areaMeasurement.geometry=null)}add(e){if(!this.constructed)return null;if(0===this._editGeometry.components.length){const e=a(this.view);this._editGeometry.components.push(new f(e.spatialReference,e.state.viewingMode))}const t=this._editGeometryOperations.appendVertex(this._editGeometry.coordinateHelper.pointToVector(e));return this.emit("change"),t}close(){if(!this.constructed||0===this._editGeometry.components.length)return null;const e=this._editGeometryOperations.closeComponent(this._editGeometry.components[0]);return this.emit("change"),e}ensureContains(e,t=""){let r=!1;if(this._editGeometry.components.forEach((t=>{t.iterateVertices((t=>{t===e&&(r=!0)}))})),!r)throw new Error(`vertex doesnt exist ${t}`);return r}setVertexPosition(e,t){if(!this.constructed)return null;const r=this._editGeometryOperations.setVertexPosition(e,this._editGeometry.coordinateHelper.pointToVector(t));return this.emit("change"),r}equals(e){if(this.numVertices!==e.numVertices)return!1;let t=!0;return this.forEachVertexPosition(((r,o)=>{const i=e.getVertexPositionAsPointFromIndex(o);r.equals(i)||(t=!1)})),!!t}};e([c({value:null})],P.prototype,"areaMeasurement",null),e([c({value:null})],P.prototype,"view",null),e([c()],P.prototype,"isValidPolygon",null),e([c()],P.prototype,"extent",null),e([c()],P.prototype,"spatialReference",null),e([c()],P.prototype,"numVertices",null),P=e([l(V)],P);const j=new d;export{P as AreaMeasurement3DPathHelper};