@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 4.13 kB
JavaScript
import e from"../../../../Color.js";import{getAccentColor as r,getContrastColor as t}from"../../../../core/analysisThemeUtils.js";import s from"../../../../core/Handles.js";import{applyOpacity as i}from"../../../../core/mathUtils.js";import{destroyMaybe as o,isNone as a,isSome as n}from"../../../../core/maybe.js";import{watch as h}from"../../../../core/reactiveUtils.js";import{c as l}from"../../../../chunks/mat4f64.js";import{b as d}from"../../../../chunks/vec3.js";import{c}from"../../../../chunks/vec3f64.js";import{c as p}from"../../../../chunks/vec4f64.js";import{sv3d as m}from"../../../../geometry/support/vectorStacks.js";import{Object3DVisualElement as _}from"./Object3DVisualElement.js";import{createPolylineGeometry as w}from"../../webgl-engine/lib/GeometryUtil.js";import{RenderOccludedFlag as g}from"../../webgl-engine/lib/Material.js";import{MeasurementArrowMaterial as u}from"../../webgl-engine/materials/MeasurementArrowMaterial.js";class y extends _{constructor(s){super(s),this._parameters={arrowWidth:16,arrowOutlineColor:e.toUnitRGBA(r()),arrowStripeEvenColor:e.toUnitRGBA(t()),arrowStripeOddColor:e.toUnitRGBA(r()),arrowSubdivisions:128},this._origin=c(),this._originTransform=l(),this._arrowCenter=c(),this._renderOccluded=g.OccludeAndTransparent,this._geometry=null,this._stripeLength=1,this._stripesEnabled=!0,this._opacity=1,this.applyProps(s)}get renderOccluded(){return this._renderOccluded}set renderOccluded(e){e!==this._renderOccluded&&(this._renderOccluded=e,this._arrowMaterial&&this._arrowMaterial.setParameters({renderOccluded:e}))}get geometry(){return this._geometry}set geometry(e){this._geometry=e,this._geometryChanged()}get stripeLength(){return this._stripeLength}set stripeLength(e){this._stripeLength=e,this.attached&&this._arrowMaterial.setParameters({stripeLength:this._stripeLength})}get stripesEnabled(){return this._stripesEnabled}set stripesEnabled(e){if(this._stripesEnabled=e,this.attached){const e=this.opacity,{arrowStripeEvenColor:r,arrowStripeOddColor:t}=this._parameters,s=i(C,this._stripesEnabled?r:t,e);this._arrowMaterial.setParameters({stripeEvenColor:s})}}get opacity(){return this._opacity}set opacity(e){e!==this._opacity&&(this._opacity=e,this._updateArrowOpacity())}createExternalResources(){const{arrowStripeEvenColor:e,arrowStripeOddColor:r,arrowOutlineColor:t}=this._parameters,i=this._stripesEnabled?e:r;this._arrowMaterial=new u({outlineColor:t,stripeEvenColor:i,stripeOddColor:r,renderOccluded:this.renderOccluded,polygonOffset:!0}),this._handles=new s,this._handles.add(h((()=>this.view.state.camera),(()=>{this._viewChanged()})))}destroyExternalResources(){this._arrowMaterial=null,this._handles=o(this._handles)}forEachExternalMaterial(e){e(this._arrowMaterial)}createGeometries(e){if(a(this._geometry)||a(this._geometry.startRenderSpace)||a(this._geometry.endRenderSpace))return;const r=this._createArrowGeometry(this._geometry.startRenderSpace,this._geometry.endRenderSpace,this._origin,this._geometry);r.transformation=this._originTransform,e.addGeometry(r),this._viewChanged()}_createArrowGeometry(e,r,t,s){const i=this.view.renderCoordsHelper,o=[],a=[],n=(e,r)=>{const s=m.get();d(s,e,t),o.push(s),a.push(r)};if("euclidean"===s.type){s.eval(.5,this._arrowCenter);const t=m.get();i.worldUpAtPosition(this._arrowCenter,t),n(e,t),n(r,t)}else{s.eval(.5,this._arrowCenter);const e=this._parameters.arrowSubdivisions+1&-2;for(let r=0;r<e;++r){const t=r/(e-1),o=m.get(),a=m.get();s.eval(t,o),i.worldUpAtPosition(o,a),n(o,a)}}return w(this._arrowMaterial,o,a)}_geometryChanged(){this.recreateGeometry()}_viewChanged(){if(this.view.ready&&this.attached&&n(this._geometry)){const e=this.view.state.camera.computeScreenPixelSizeAt(this._arrowCenter);this._arrowMaterial.setParameters({width:this._parameters.arrowWidth*e})}}_updateArrowOpacity(){const e=this.opacity,{arrowStripeEvenColor:r,arrowStripeOddColor:t,arrowOutlineColor:s}=this._parameters,o=i(C,this._stripesEnabled?r:t,e),a=i(f,s,e),n=i(v,t,e);this._arrowMaterial.setParameters({stripeEvenColor:o,outlineColor:a,stripeOddColor:n})}}const C=p(),f=p(),v=p();export{y as MeasurementArrowVisualElement};