@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.51 kB
JavaScript
import{isSome as t}from"../../../../core/maybe.js";import{generateUID as i}from"../../../../core/uid.js";import{b as r}from"../../../../chunks/vec3.js";import{c as o}from"../../../../chunks/vec3f64.js";import{f as s}from"../../../../chunks/vec4f64.js";import{projectBuffer as e}from"../../../../geometry/projection.js";import{Attribute as n}from"./Attribute.js";import{ContentObjectType as a}from"./ContentObjectType.js";import{Geometry as h}from"./Geometry.js";import{fromValues as m}from"./LocalOriginFactory.js";import{Object3D as c}from"./Object3D.js";import{gridLocalOriginFactory as d}from"./testUtils.js";import{VertexAttribute as g}from"./VertexAttribute.js";import{WebGLLayer as _}from"./WebGLLayer.js";import{RibbonLineMaterial as f}from"../materials/RibbonLineMaterial.js";class p{constructor(t){this._originSR=t,this._origins=new Map,this._objects=new Map,this._gridSize=5e5,this._rootOriginId="root/"+i()}getOrigin(i){const o=this._origins.get(this._rootOriginId);if(null==o){const r=d.rootOrigin;if(t(r))return this._origins.set(this._rootOriginId,m(r[0],r[1],r[2],this._rootOriginId)),this.getOrigin(i);const o=m(i[0]+Math.random()-.5,i[1]+Math.random()-.5,i[2]+Math.random()-.5,this._rootOriginId);return this._origins.set(this._rootOriginId,o),o}const s=this._gridSize,e=Math.round(i[0]/s),n=Math.round(i[1]/s),a=Math.round(i[2]/s),h=`${e}/${n}/${a}`;let c=this._origins.get(h);const g=.5*s;if(r(j,i,o.vec3),j[0]=Math.abs(j[0]),j[1]=Math.abs(j[1]),j[2]=Math.abs(j[2]),j[0]<g&&j[1]<g&&j[2]<g){if(c){const t=Math.max(...j);r(j,i,c.vec3),j[0]=Math.abs(j[0]),j[1]=Math.abs(j[1]),j[2]=Math.abs(j[2]);if(Math.max(...j)<t)return c}return o}return c||(c=m(e*s,n*s,a*s,h),this._origins.set(h,c)),c}_drawOriginBox(t,i=s(1,1,0,1)){const r=window.view,o=r._stage,m=i.toString();if(!this._objects.has(m)){this._material=new f({width:2,color:i}),o.add(this._material);const t=new _({pickable:!1}),r=new c({castShadow:!1});o.add(r),t.add(r),o.add(t),this._objects.set(m,r)}const d=this._objects.get(m),p=[0,1,5,4,0,2,1,7,6,2,0,1,3,7,5,4,6,2,0],j=p.length,b=new Array(3*j),u=new Array,l=.5*this._gridSize;for(let s=0;s<j;s++)b[3*s+0]=t[0]+(1&p[s]?l:-l),b[3*s+1]=t[1]+(2&p[s]?l:-l),b[3*s+2]=t[2]+(4&p[s]?l:-l),s>0&&u.push(s-1,s);e(b,this._originSR,0,b,r.renderSpatialReference,0,j);const M=new h(this._material,[[g.POSITION,new n(b,3,!0)]],[[g.POSITION,u]],null,a.Line);o.add(M),d.addGeometry(M)}get test(){const t=this;return{set gridSize(i){t._gridSize=i}}}}const j=o();export{p as GridLocalOriginFactory};