UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 3.96 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{i as e}from"../../../../chunks/vec32.js";import{create as t}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{a as r,c as i}from"../../../../chunks/vec42.js";import{fromArray as s}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{Object3DVisualElement as a}from"./Object3DVisualElement.js";import{ElevationContext as l}from"../../layers/graphics/ElevationContext.js";import{geometryToRenderInfo as o}from"../../support/renderInfoUtils/point.js";import{CullFaceOptions as n}from"../../webgl-engine/lib/basicInterfaces.js";import{createSphereGeometry as c}from"../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as h}from"../../webgl-engine/lib/Material.js";import{ShadedColorMaterial as u}from"../../webgl-engine/materials/ShadedColorMaterial.js";class d extends a{constructor(e){super(e),this.view=null,this._renderOccluded=h.OccludeAndTransparent,this._vertices=null,this._spatialReference=null,this._color=s([1,127/255,0,1]),this._size=11,this._outlineColor=s([0,0,0,.5]),this._outlineSize=1,this._elevationInfo=null,this.applyProperties(e)}get renderOccluded(){return this._renderOccluded}set renderOccluded(e){e!==this._renderOccluded&&(this._renderOccluded=e,this._updateMaterial(),this._updateOutlineMaterial())}get vertices(){return this._vertices}set vertices(e){this._vertices=e,this.recreateGeometry()}get spatialReference(){return this._spatialReference}set spatialReference(e){this._spatialReference=e,this.recreateGeometry()}get color(){return this._color}set color(e){r(e,this._color)||(i(this._color,e),this._updateMaterial())}get size(){return this._size}set size(e){e!==this._size&&(this._size=e,this._updateMaterial())}get outlineColor(){return this._outlineColor}set outlineColor(e){r(e,this._outlineColor)||(i(this._outlineColor,e),this._updateOutlineMaterial())}get outlineSize(){return this._outlineSize}set outlineSize(e){e!==this._outlineSize&&(this._outlineSize=e,this._updateOutlineMaterial())}get elevationInfo(){return this._elevationInfo}set elevationInfo(e){this._elevationInfo=e,this.recreateGeometry()}get _vertexMaterialParameters(){return{color:this._color,screenSizeScale:this.size,renderOccluded:this._renderOccluded,isDecoration:this.isDecoration}}get _vertexOutlineMaterialParameters(){return{color:this._outlineColor,screenSizeScale:this.size+2*this.outlineSize,renderOccluded:this._renderOccluded,isDecoration:this.isDecoration}}_updateMaterial(){this.attached&&this._vertexMaterial.setParameters(this._vertexMaterialParameters)}_updateOutlineMaterial(){this.attached&&this._vertexOutlineMaterial.setParameters(this._vertexOutlineMaterialParameters)}_createRenderGeometries(){const t=this.vertices;if(null==t||0===t.length)return[];const r=.5,i=.5,s=o(t,this.spatialReference,this.view.elevationProvider,this.view.renderCoordsHelper,l.fromElevationInfo(this.elevationInfo)),a=[],n=s.numVertices,c=s.position;for(let l=0;l<n;++l){const t=e(_,c[3*l],c[3*l+1],c[3*l+2]),s=m(this._vertexMaterial,r,t),o=m(this._vertexOutlineMaterial,i,t);a.push({vertexGeometry:s,vertexOutlineGeometry:o})}return a}createGeometries(e){const t=this._createRenderGeometries();for(const{vertexGeometry:r,vertexOutlineGeometry:i}of t)e.addGeometry(r),e.addGeometry(i)}createExternalResources(){this._vertexMaterial=new u({...this._vertexMaterialParameters,writeDepth:!0,cullFace:n.Back,screenSizeEnabled:!0}),this._vertexOutlineMaterial=new u({...this._vertexOutlineMaterialParameters,forceTransparentMode:!0,writeDepth:!0,cullFace:n.Front,screenSizeEnabled:!0,shadingEnabled:!1})}destroyExternalResources(){this._vertexMaterial=null,this._vertexOutlineMaterial=null}forEachMaterial(e){e(this._vertexMaterial),e(this._vertexOutlineMaterial)}}const _=t();function m(e,t,r){return c(e,t,16,16,{offset:r})}export{d as VerticesVisualElement};