UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 3.94 kB
import{isNone as e}from"../../../../core/maybe.js";import{s as t}from"../../../../chunks/vec3.js";import{c as r}from"../../../../chunks/vec3f64.js";import{g as i,c as s}from"../../../../chunks/vec4.js";import{settings as a}from"../editingTools/settings.js";import{Object3DVisualElement as o}from"./Object3DVisualElement.js";import{ElevationContext as l}from"../../layers/graphics/ElevationContext.js";import{geometryToRenderInfo as n}from"../../support/renderInfoUtils/point.js";import{CullFaceOptions as c}from"../../webgl-engine/lib/basicInterfaces.js";import{createSphereGeometry as h}from"../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as u}from"../../webgl-engine/lib/Material.js";import{ShadedColorMaterial as d}from"../../webgl-engine/materials/ShadedColorMaterial.js";class _ extends o{constructor(e){super(e),this.view=null,this._renderOccluded=u.OccludeAndTransparent,this._vertices=null,this._spatialReference=null,this._color=a.colorToVec4(a.reshapeManipulators.vertex.color),this._size=a.reshapeManipulators.vertex.size,this._outlineColor=a.colorToVec4(a.reshapeManipulators.vertex.outlineColor),this._outlineSize=a.reshapeManipulators.vertex.outlineSize,this._elevationInfo=null,this.applyProps(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){i(e,this._color)||(s(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){i(e,this._outlineColor)||(s(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,transparent:this._color[3]<1,screenSizeScale:this.size,renderOccluded:this._renderOccluded}}get _vertexOutlineMaterialParameters(){return{color:this._outlineColor,transparent:this._outlineColor[3]<1,screenSizeScale:this.size+2*this.outlineSize,renderOccluded:this._renderOccluded}}_updateMaterial(){this.attached&&this._vertexMaterial.setParameters(this._vertexMaterialParameters)}_updateOutlineMaterial(){this.attached&&this._vertexOutlineMaterial.setParameters(this._vertexOutlineMaterialParameters)}_createRenderGeometries(){const r=this.vertices;if(e(r)||0===r.length)return[];const i=.5,s=.5,a=n(r,this.spatialReference,this.view.elevationProvider,this.view.renderCoordsHelper,l.fromElevationInfo(this.elevationInfo)),o=[],c=a.numVertices,h=a.position;for(let e=0;e<c;++e){const r=t(p,h[3*e+0],h[3*e+1],h[3*e+2]),a=m(this._vertexMaterial,i,r),l=m(this._vertexOutlineMaterial,s,r);o.push({vertexGeometry:a,vertexOutlineGeometry:l})}return o}createGeometries(e){const t=this._createRenderGeometries();for(const{vertexGeometry:r,vertexOutlineGeometry:i}of t)e.addGeometry(r),e.addGeometry(i)}createExternalResources(){this._vertexMaterial=new d({...this._vertexMaterialParameters,writeDepth:!0,cullFace:c.Back,screenSizeEnabled:!0}),this._vertexOutlineMaterial=new d({...this._vertexOutlineMaterialParameters,transparent:!0,writeDepth:!0,cullFace:c.Front,screenSizeEnabled:!0,shadingEnabled:!1})}destroyExternalResources(){this._vertexMaterial=null,this._vertexOutlineMaterial=null}forEachExternalMaterial(e){e(this._vertexMaterial),e(this._vertexOutlineMaterial)}}const p=r();function m(e,t,r){return h(e,t,16,16,{offset:r})}export{_ as VerticesVisualElement};