online-3d-viewer
Version:
Online 3D Viewer
4 lines • 1.06 MB
JavaScript
var OV=(()=>{var dd=Object.defineProperty;var kx=Object.getOwnPropertyDescriptor;var Bx=Object.getOwnPropertyNames;var Gx=Object.prototype.hasOwnProperty;var Vx=(r,e)=>{for(var t in e)dd(r,t,{get:e[t],enumerable:!0})},zx=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Bx(e))!Gx.call(r,i)&&i!==t&&dd(r,i,{get:()=>e[i],enumerable:!(n=kx(e,i))||n.enumerable});return r};var Hx=r=>zx(dd({},"__esModule",{value:!0}),r);var nA={};Vx(nA,{AddCoord2D:()=>ig,AddCoord3D:()=>Eu,AddDiv:()=>bx,AddDomElement:()=>Wm,ArrayBufferToAsciiString:()=>fg,ArrayBufferToUtf8String:()=>Sn,ArrayToCoord3D:()=>Ui,ArrayToQuaternion:()=>Zo,ArrayToRGBColor:()=>ag,AsciiStringToArrayBuffer:()=>dg,Base64DataURIToArrayBuffer:()=>qs,BezierTweenFunction:()=>xg,BigEps:()=>eg,BinaryReader:()=>oi,BinaryWriter:()=>Ji,BoundingBoxCalculator3D:()=>ia,Box3D:()=>Ks,CalculateSurfaceArea:()=>Tx,CalculateTriangleNormal:()=>Ys,CalculateVolume:()=>Gm,Camera:()=>Or,CameraIsEqual3D:()=>Qf,CameraValidator:()=>ru,CheckModel:()=>ky,ClearDomElement:()=>Sx,ClickDetector:()=>iu,ColorComponentFromFloat:()=>Fn,ColorComponentToFloat:()=>Ws,ColorToMaterialConverter:()=>di,ConvertColorToThreeColor:()=>Dn,ConvertMeshToMeshBuffer:()=>qo,ConvertModelToThreeObject:()=>ed,ConvertThreeColorToColor:()=>Fc,ConvertThreeGeometryToMesh:()=>ur,Coord2D:()=>Nt,Coord3D:()=>Ye,Coord4D:()=>$i,CoordDistance2D:()=>Hs,CoordDistance3D:()=>ni,CoordIsEqual2D:()=>ji,CoordIsEqual3D:()=>bi,CopyObjectAttributes:()=>Fo,CreateDiv:()=>Ox,CreateDomElement:()=>rd,CreateHighlightMaterial:()=>Zp,CreateHighlightMaterials:()=>Pf,CreateModelUrlParameters:()=>Ex,CreateObjectUrl:()=>js,CreateObjectUrlWithMimeType:()=>Su,CreateOcctWorker:()=>Wo,CreateUrlBuilder:()=>Hm,CreateUrlParser:()=>Mx,CrossVector3D:()=>Zi,DegRad:()=>xr,Direction:()=>_t,DisposeThreeObjects:()=>Nf,DotVector2D:()=>Rl,DotVector3D:()=>Nl,EdgeSettings:()=>Io,EmbeddedViewer:()=>Al,EnvironmentSettings:()=>Ro,Eps:()=>Qm,EscapeHtmlChars:()=>hu,EventNotifier:()=>fu,ExportedFile:()=>sn,Exporter:()=>Pu,Exporter3dm:()=>Yo,ExporterBase:()=>kn,ExporterBim:()=>Ko,ExporterGltf:()=>Jo,ExporterModel:()=>$o,ExporterObj:()=>Qo,ExporterOff:()=>ea,ExporterPly:()=>ta,ExporterSettings:()=>Ul,ExporterStl:()=>na,FLoc:()=>Uo,FaceMaterial:()=>zo,FileFormat:()=>dn,FileSource:()=>Ki,FinalizeModel:()=>Of,FlipMeshTrianglesOrientation:()=>Ru,FormatString:()=>uu,GenerateCone:()=>Um,GenerateCuboid:()=>yx,GenerateCylinder:()=>xx,GeneratePlatonicSolid:()=>_x,GenerateSphere:()=>vx,Generator:()=>ks,GeneratorHelper:()=>yl,GeneratorParams:()=>Kc,GetBoundingBox:()=>yd,GetDefaultCamera:()=>sd,GetDefaultMaterials:()=>_g,GetDomElementClientCoordinates:()=>ps,GetDomElementExternalHeight:()=>nd,GetDomElementExternalWidth:()=>td,GetDomElementInnerDimensions:()=>id,GetDomElementOuterHeight:()=>Px,GetDomElementOuterWidth:()=>Rx,GetFileExtension:()=>Tr,GetFileExtensionFromMimeType:()=>xs,GetFileName:()=>Rn,GetIntegerFromStyle:()=>zn,GetLineSegmentsProjectedDistance:()=>Lf,GetShadingType:()=>Rf,GetShadingTypeOfObject:()=>jm,GetTetrahedronSignedVolume:()=>Bm,GetTopology:()=>xd,GetTriangleArea:()=>km,HasHighpDriverIssue:()=>If,HexStringToRGBAColor:()=>og,HexStringToRGBColor:()=>sg,ImportError:()=>Us,ImportErrorCode:()=>Lr,ImportResult:()=>qc,ImportSettings:()=>ml,Importer:()=>gl,Importer3dm:()=>Ka,Importer3ds:()=>Za,ImporterBase:()=>Jt,ImporterBim:()=>rl,ImporterFcstd:()=>pl,ImporterFile:()=>Zs,ImporterFileAccessor:()=>jc,ImporterFileList:()=>Js,ImporterGltf:()=>Ja,ImporterIfc:()=>$a,ImporterObj:()=>Qa,ImporterOcct:()=>nl,ImporterOff:()=>el,ImporterPly:()=>tl,ImporterStl:()=>il,ImporterThree3mf:()=>hl,ImporterThreeAmf:()=>fl,ImporterThreeBase:()=>mr,ImporterThreeDae:()=>cl,ImporterThreeFbx:()=>ll,ImporterThreeSvg:()=>$f,ImporterThreeWrl:()=>ul,Init3DViewerElements:()=>Fx,Init3DViewerFromFileList:()=>Dx,Init3DViewerFromUrlList:()=>Ym,InputFile:()=>aa,InputFilesFromFileObjects:()=>Du,InputFilesFromUrls:()=>Ou,InsertDomElementAfter:()=>wx,InsertDomElementBefore:()=>Ax,IntegerToHexString:()=>In,IntersectionMode:()=>Vm,IsDefined:()=>Do,IsDomElementVisible:()=>Ix,IsEmptyMesh:()=>vs,IsEqual:()=>Ut,IsEqualEps:()=>ng,IsGreater:()=>yu,IsGreaterOrEqual:()=>Vo,IsLower:()=>Bo,IsLowerOrEqual:()=>Go,IsModelEmpty:()=>ca,IsNegative:()=>Br,IsObjectEmpty:()=>cu,IsPositive:()=>Di,IsPowerOfTwo:()=>pd,IsTwoManifold:()=>vd,IsUrl:()=>hg,IsZero:()=>kr,Line:()=>hs,LinearToSRGB:()=>Xs,LinearTweenFunction:()=>vg,LoadExternalLibrary:()=>_r,LoadExternalLibraryFromUrl:()=>Ho,Loc:()=>nt,MaterialBase:()=>Pl,MaterialGeometryType:()=>Vs,MaterialSource:()=>bn,MaterialType:()=>Wn,Matrix:()=>xn,MatrixIsEqual:()=>Iu,Mesh:()=>tn,MeshBuffer:()=>Ol,MeshInstance:()=>Hr,MeshInstanceId:()=>ki,MeshPrimitiveBuffer:()=>Ll,Model:()=>br,ModelObject3D:()=>Er,ModelToThreeConversionOutput:()=>_l,ModelToThreeConversionParams:()=>vl,MouseInteraction:()=>tu,NameFromLine:()=>zr,Navigation:()=>El,NavigationMode:()=>Bs,NavigationType:()=>li,NextPowerOfTwo:()=>ug,Node:()=>Bn,Object3D:()=>Dl,Octree:()=>sa,OctreeNode:()=>kl,ParabolicTweenFunction:()=>Lu,ParameterConverter:()=>rn,ParameterListBuilder:()=>Zc,ParameterListParser:()=>Jc,ParametersFromLine:()=>Yi,PhongMaterial:()=>En,PhysicalMaterial:()=>ys,ProjectPointToSegment2D:()=>md,ProjectionMode:()=>ei,Property:()=>cn,PropertyGroup:()=>Kn,PropertyToString:()=>wu,PropertyType:()=>Yt,Quaternion:()=>ii,QuaternionFromAxisAngle:()=>Cu,QuaternionFromXYZ:()=>mg,QuaternionIsEqual:()=>pg,RGBAColor:()=>Gr,RGBAColorToHexString:()=>rg,RGBColor:()=>St,RGBColorFromFloatComponents:()=>Ei,RGBColorIsEqual:()=>Vr,RGBColorToHexString:()=>xu,RadDeg:()=>tg,ReadFile:()=>Tu,ReadLines:()=>Fi,ReplaceDefaultMaterialsColor:()=>Tg,RequestUrl:()=>_u,RevokeObjectUrl:()=>Au,RunTaskAsync:()=>Il,RunTasks:()=>pu,RunTasksBatch:()=>mu,SRGBToLinear:()=>vr,Segment2D:()=>ra,SegmentPointDistance2D:()=>Nu,SetDomElementHeight:()=>qm,SetDomElementOuterHeight:()=>Lx,SetDomElementOuterWidth:()=>Nx,SetDomElementWidth:()=>Xm,SetLanguageCode:()=>$m,SetLocalizedStrings:()=>Jm,SetThreeMeshPolygonOffset:()=>zm,ShadingModel:()=>bl,ShadingType:()=>vi,ShowDomElement:()=>Cx,SubCoord2D:()=>ms,SubCoord3D:()=>Un,TaskRunner:()=>ko,TextWriter:()=>mi,TextureIsEqual:()=>lg,TextureMap:()=>fi,TextureMapIsEqual:()=>gs,ThreeColorConverter:()=>ja,ThreeConversionStateHandler:()=>$c,ThreeLinearToSRGBColorConverter:()=>Cf,ThreeMaterialHandler:()=>eu,ThreeMeshMaterialHandler:()=>Tl,ThreeModelLoader:()=>Ml,ThreeNodeTree:()=>Qc,ThreeSRGBToLinearColorConverter:()=>Ya,Topology:()=>la,TopologyEdge:()=>Gl,TopologyTriangle:()=>zl,TopologyTriangleEdge:()=>Vl,TopologyVertex:()=>Bl,TouchInteraction:()=>nu,TransformFileHostUrls:()=>Mu,TransformMesh:()=>Mr,Transformation:()=>pn,TransformationIsEqual:()=>gg,TraverseThreeObject:()=>od,Triangle:()=>Qt,TweenCoord3D:()=>oa,Unit:()=>_s,UpVector:()=>su,UpdateMaterialTransparency:()=>pi,Utf8StringToArrayBuffer:()=>jo,ValueOrDefault:()=>Zm,VectorAngle3D:()=>bu,VectorLength3D:()=>Xo,Viewer:()=>Sl,ViewerMainModel:()=>xl,ViewerModel:()=>Gs,WaitWhile:()=>gu});function Do(r){return r!=null}function Zm(r,e){return r??e}function Fo(r,e){if(Do(r))for(let t of Object.keys(r))Do(r[t])&&(e[t]=r[t])}function cu(r){return Object.keys(r).length===0}function uu(r,...e){return r.replace(/{([0-9]+)}/g,(t,n)=>e[n]===void 0?t:e[n])}function hu(r){return r.replace(/</g,"<").replace(/>/g,">")}var fu=class{constructor(){this.eventListeners=new Map}AddEventListener(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,[]),this.eventListeners.get(e).push(t)}HasEventListener(e){return this.eventListeners.has(e)}GetEventNotifier(e){return()=>{this.NotifyEventListeners(e)}}NotifyEventListeners(e,...t){if(!this.eventListeners.has(e))return;let n=this.eventListeners.get(e);for(let i of n)i(...t)}};var Cl=null,du=null;function Jm(r){Cl=r}function $m(r){du=r}function nt(r){return Cl===null||du===null||!Cl[r]||!Cl[r][du]?r:Cl[r][du]}function Uo(r,...e){return uu(nt(r),...e)}var ko=class{constructor(){this.count=null,this.current=null,this.callbacks=null}Run(e,t){this.count=e,this.current=0,this.callbacks=t,e===0?this.TaskReady():this.RunOnce()}RunBatch(e,t,n){let i=0;e>0&&(i=parseInt((e-1)/t,10)+1),this.Run(i,{runTask:(s,o)=>{let a=s*t,l=Math.min((s+1)*t,e)-1;n.runTask(a,l,o)},onReady:n.onReady})}RunOnce(){setTimeout(()=>{this.callbacks.runTask(this.current,this.TaskReady.bind(this))},0)}TaskReady(){this.current+=1,this.current<this.count?this.RunOnce():this.callbacks.onReady&&this.callbacks.onReady()}};function Il(r){setTimeout(()=>{r()},10)}function pu(r,e){new ko().Run(r,e)}function mu(r,e,t){new ko().RunBatch(r,e,t)}function gu(r){function e(t){t()&&setTimeout(()=>{e(t)},10)}e(r)}var Qm=1e-8,eg=1e-4,tg=57.29577951308232,xr=.017453292519943;function kr(r){return Math.abs(r)<1e-8}function Bo(r,e){return e-r>1e-8}function yu(r,e){return r-e>1e-8}function Go(r,e){return e-r>-1e-8}function Vo(r,e){return r-e>-1e-8}function Ut(r,e){return Math.abs(e-r)<1e-8}function ng(r,e,t){return Math.abs(e-r)<t}function Di(r){return r>1e-8}function Br(r){return r<-1e-8}var _t={X:1,Y:2,Z:3};var Nt=class r{constructor(e,t){this.x=e,this.y=t}Clone(){return new r(this.x,this.y)}};function ji(r,e){return Ut(r.x,e.x)&&Ut(r.y,e.y)}function ig(r,e){return new Nt(r.x+e.x,r.y+e.y)}function ms(r,e){return new Nt(r.x-e.x,r.y-e.y)}function Hs(r,e){return Math.sqrt((r.x-e.x)*(r.x-e.x)+(r.y-e.y)*(r.y-e.y))}function Rl(r,e){return r.x*e.x+r.y*e.y}var St=class r{constructor(e,t,n){this.r=e,this.g=t,this.b=n}Set(e,t,n){this.r=e,this.g=t,this.b=n}Clone(){return new r(this.r,this.g,this.b)}},Gr=class r{constructor(e,t,n,i){this.r=e,this.g=t,this.b=n,this.a=i}Set(e,t,n,i){this.r=e,this.g=t,this.b=n,this.a=i}Clone(){return new r(this.r,this.g,this.b,this.a)}};function Fn(r){return parseInt(Math.round(r*255),10)}function Ws(r){return r/255}function Ei(r,e,t){return new St(Fn(r),Fn(e),Fn(t))}function vr(r){return r<.04045?r*.0773993808:Math.pow(r*.9478672986+.0521327014,2.4)}function Xs(r){return r<.0031308?r*12.92:1.055*Math.pow(r,.41666)-.055}function In(r){let e=parseInt(r,10).toString(16);for(;e.length<2;)e="0"+e;return e}function xu(r){let e=In(r.r),t=In(r.g),n=In(r.b);return e+t+n}function rg(r){let e=In(r.r),t=In(r.g),n=In(r.b),i=In(r.a);return e+t+n+i}function sg(r){if(r.length!==6)return null;let e=parseInt(r.substring(0,2),16),t=parseInt(r.substring(2,4),16),n=parseInt(r.substring(4,6),16);return new St(e,t,n)}function og(r){if(r.length!==6&&r.length!==8)return null;let e=parseInt(r.substring(0,2),16),t=parseInt(r.substring(2,4),16),n=parseInt(r.substring(4,6),16),i=255;return r.length===8&&(i=parseInt(r.substring(6,8),16)),new Gr(e,t,n,i)}function ag(r){return new St(r[0],r[1],r[2])}function Vr(r,e){return r.r===e.r&&r.g===e.g&&r.b===e.b}var fi=class{constructor(){this.name=null,this.mimeType=null,this.buffer=null,this.offset=new Nt(0,0),this.scale=new Nt(1,1),this.rotation=0}IsValid(){return this.name!==null&&this.buffer!==null}HasTransformation(){return!ji(this.offset,new Nt(0,0))||!ji(this.scale,new Nt(1,1))||!Ut(this.rotation,0)}IsEqual(e){return!(this.name!==e.name||this.mimeType!==e.mimeType||!ji(this.offset,e.offset)||!ji(this.scale,e.scale)||!Ut(this.rotation,e.rotation))}};function gs(r,e){return r===null&&e===null?!0:r===null||e===null?!1:r.IsEqual(e)}var Wn={Phong:1,Physical:2},bn={Model:1,DefaultFace:2,DefaultLine:3},Pl=class{constructor(e){this.type=e,this.source=bn.Model,this.name="",this.color=new St(0,0,0),this.vertexColors=!1}IsEqual(e){return!(this.type!==e.type||this.source!==e.source||this.name!==e.name||!Vr(this.color,e.color)||this.vertexColors!==e.vertexColors)}},zo=class extends Pl{constructor(e){super(e),this.emissive=new St(0,0,0),this.opacity=1,this.transparent=!1,this.diffuseMap=null,this.bumpMap=null,this.normalMap=null,this.emissiveMap=null,this.alphaTest=0,this.multiplyDiffuseMap=!1}IsEqual(e){return!(!super.IsEqual(e)||!Vr(this.emissive,e.emissive)||!Ut(this.opacity,e.opacity)||this.transparent!==e.transparent||!gs(this.diffuseMap,e.diffuseMap)||!gs(this.bumpMap,e.bumpMap)||!gs(this.normalMap,e.normalMap)||!gs(this.emissiveMap,e.emissiveMap)||!Ut(this.alphaTest,e.alphaTest)||this.multiplyDiffuseMap!==e.multiplyDiffuseMap)}},En=class extends zo{constructor(){super(Wn.Phong),this.ambient=new St(0,0,0),this.specular=new St(0,0,0),this.shininess=0,this.specularMap=null}IsEqual(e){return!(!super.IsEqual(e)||!Vr(this.ambient,e.ambient)||!Vr(this.specular,e.specular)||!Ut(this.shininess,e.shininess)||!gs(this.specularMap,e.specularMap))}},ys=class extends zo{constructor(){super(Wn.Physical),this.metalness=0,this.roughness=1,this.metalnessMap=null}IsEqual(e){return!(!super.IsEqual(e)||!Ut(this.metalness,e.metalness)||!Ut(this.roughness,e.roughness)||!gs(this.metalnessMap,e.metalnessMap))}};function lg(r,e){return!(r.name!==e.name||r.mimeType!==e.mimeType||!ji(r.offset,e.offset)||!ji(r.scale,e.scale)||!Ut(r.rotation,e.rotation))}var cg=new Set;function Ho(r){return new Promise((e,t)=>{if(cg.has(r)){e();return}let n=document.createElement("script");n.type="text/javascript",n.src=r,n.onload=()=>{cg.add(r),e()},n.onerror=()=>{t()},document.head.appendChild(n)})}function zr(r,e,t){let n=r.substring(e),i=n.indexOf(t);return i!==-1&&(n=n.substring(0,i)),n.trim()}function Yi(r,e){if(e!==null){let t=r.indexOf(e);t!==-1&&(r=r.substring(0,t).trim())}return r.split(/\s+/u)}function Fi(r,e){function t(s,o){let a=s.trim();a.length>0&&o(a)}let n=0,i=r.indexOf(`
`,n);for(;i!==-1;)t(r.substring(n,i),e),n=i+1,i=r.indexOf(`
`,n);t(r.substring(n),e)}function pd(r){return(r&r-1)===0}function ug(r){if(pd(r))return r;let e=Math.pow(2,Math.ceil(Math.log(r)/Math.log(2)));return parseInt(e,10)}function pi(r){r.transparent=!1,Bo(r.opacity,1)&&(r.transparent=!0)}var di=class{constructor(e){this.model=e,this.colorToMaterialIndex=new Map}GetMaterialIndex(e,t,n,i){let s=In(e)+In(t)+In(n),o=i!=null;if(o&&(s+=In(i)),this.colorToMaterialIndex.has(s))return this.colorToMaterialIndex.get(s);{let a=new En;a.name=s.toUpperCase(),a.color=new St(e,t,n),o&&i<255&&(a.opacity=i/255,pi(a));let l=this.model.AddMaterial(a);return this.colorToMaterialIndex.set(s,l),l}}},vu=null;function Wo(r){return new Promise((e,t)=>{if(vu!==null){e(new Worker(vu));return}let n="https://cdn.jsdelivr.net/npm/occt-import-js@0.0.22/dist/";fetch(n+"occt-import-js-worker.js").then(i=>i.ok?i.text():t()).then(i=>{i=i.replace("occt-import-js.js",n+"occt-import-js.js"),i=i.replace("return path","return '"+n+"occt-import-js.wasm'");let s=new Blob([i],{type:"text/javascript"});return vu=URL.createObjectURL(s),e(new Worker(vu))}).catch(t)})}function _r(r){return r==="rhino3dm"?Ho("https://cdn.jsdelivr.net/npm/rhino3dm@8.17.0/rhino3dm.min.js"):r==="webifc"?Ho("https://cdn.jsdelivr.net/npm/web-ifc@0.0.68/web-ifc-api-iife.js"):r==="draco3d"?Ho("https://cdn.jsdelivr.net/npm/draco3d@1.5.7/draco_decoder_nodejs.min.js"):null}var Ki={Url:1,File:2,Decompressed:3},dn={Text:1,Binary:2};function Rn(r){let e=r,t=e.indexOf("?");t!==-1&&(e=e.substring(0,t));let n=e.lastIndexOf("/");return n===-1&&(n=e.lastIndexOf("\\")),n!==-1&&(e=e.substring(n+1)),decodeURI(e)}function Tr(r){let e=Rn(r),t=e.lastIndexOf(".");return t===-1?"":e.substring(t+1).toLowerCase()}function _u(r,e){return new Promise((t,n)=>{let i=new XMLHttpRequest;i.open("GET",r,!0),i.onprogress=s=>{e(s.loaded,s.total)},i.onload=()=>{i.status===200?t(i.response):n()},i.onerror=()=>{n()},i.responseType="arraybuffer",i.send(null)})}function Tu(r,e){return new Promise((t,n)=>{let i=new FileReader;i.onprogress=s=>{e(s.loaded,s.total)},i.onloadend=s=>{s.target.readyState===FileReader.DONE&&t(s.target.result)},i.onerror=()=>{n()},i.readAsArrayBuffer(r)})}function Mu(r){for(let e=0;e<r.length;e++){let t=r[e];t.indexOf("www.dropbox.com")!==-1?(t=t.replace("www.dropbox.com","dl.dropbox.com"),r[e]=t):t.indexOf("github.com")!==-1&&(t=t.replace("github.com","raw.githubusercontent.com"),t=t.replace("/blob",""),r[e]=t)}}function hg(r){let e=/^https?:\/\/\S+$/g;return r.match(e)!==null}var Ye=class r{constructor(e,t,n){this.x=e,this.y=t,this.z=n}Length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}MultiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}Normalize(){let e=this.Length();return e>0&&this.MultiplyScalar(1/e),this}Offset(e,t){let n=e.Clone().Normalize();return this.x+=n.x*t,this.y+=n.y*t,this.z+=n.z*t,this}Rotate(e,t,n){let i=e.Clone().Normalize(),s=i.x,o=i.y,a=i.z,l=this.x-n.x,c=this.y-n.y,u=this.z-n.z,h=Math.sin(t),f=Math.cos(t);return this.x=-s*(-s*l-o*c-a*u)*(1-f)+l*f+(-a*c+o*u)*h,this.y=-o*(-s*l-o*c-a*u)*(1-f)+c*f+(a*l-s*u)*h,this.z=-a*(-s*l-o*c-a*u)*(1-f)+u*f+(-o*l+s*c)*h,this.x+=n.x,this.y+=n.y,this.z+=n.z,this}Clone(){return new r(this.x,this.y,this.z)}};function bi(r,e){return Ut(r.x,e.x)&&Ut(r.y,e.y)&&Ut(r.z,e.z)}function Eu(r,e){return new Ye(r.x+e.x,r.y+e.y,r.z+e.z)}function Un(r,e){return new Ye(r.x-e.x,r.y-e.y,r.z-e.z)}function ni(r,e){return Math.sqrt((r.x-e.x)*(r.x-e.x)+(r.y-e.y)*(r.y-e.y)+(r.z-e.z)*(r.z-e.z))}function Nl(r,e){return r.x*e.x+r.y*e.y+r.z*e.z}function bu(r,e){let t=r.Clone().Normalize(),n=e.Clone().Normalize();if(bi(t,n))return 0;let i=Nl(t,n);return Math.acos(i)}function Zi(r,e){let t=new Ye(0,0,0);return t.x=r.y*e.z-r.z*e.y,t.y=r.z*e.x-r.x*e.z,t.z=r.x*e.y-r.y*e.x,t}function Xo(r,e,t){return Math.sqrt(r*r+e*e+t*t)}function Ui(r){return new Ye(r[0],r[1],r[2])}var Ll=class{constructor(){this.indices=[],this.vertices=[],this.colors=[],this.normals=[],this.uvs=[],this.material=null}GetBounds(){let e=[1/0,1/0,1/0],t=[-1/0,-1/0,-1/0];for(let n=0;n<this.vertices.length/3;n++)for(let i=0;i<3;i++)e[i]=Math.min(e[i],this.vertices[n*3+i]),t[i]=Math.max(t[i],this.vertices[n*3+i]);return{min:e,max:t}}GetByteLength(e,t){let n=this.indices.length,i=this.vertices.length+this.colors.length+this.normals.length+this.uvs.length;return n*e+i*t}},Ol=class{constructor(){this.primitives=[]}PrimitiveCount(){return this.primitives.length}GetPrimitive(e){return this.primitives[e]}GetByteLength(e,t){let n=0;for(let i=0;i<this.primitives.length;i++){let s=this.primitives[i];n+=s.GetByteLength(e,t)}return n}};function qo(r){function e(a,l,c,u){function h(y,d,m){return d!==null?y.GetVertexColor(d):m?new St(0,0,0):null}function f(y,d,m){return d!==null?y.GetTextureUV(d):m?new Nt(0,0):null}function p(y,d,m){let _=y.VertexColorCount()>0,v=y.TextureUVCount()>0,x=y.GetVertex(d.vertex),S=y.GetNormal(d.normal),I=m.vertices.length/3;m.indices.push(I),m.vertices.push(x.x,x.y,x.z);let A=h(y,d.color,_);A!==null&&m.colors.push(A.r/255,A.g/255,A.b/255),m.normals.push(S.x,S.y,S.z);let C=f(y,d.uv,v);return C!==null&&m.uvs.push(C.x,C.y),{index:I,color:A,normal:S,uv:C}}function g(y,d,m){function _(S,I,A){if(A===null&&I===null)return!0;let C=h(S,I,!0);return Vr(A,C)}function v(S,I,A){let C=S.GetNormal(I);return bi(A,C)}function x(S,I,A){if(A===null&&I===null)return!0;let C=f(S,I,!0);return ji(A,C)}for(let S=0;S<d.length;S++){let I=d[S],A=_(y,m.color,I.color),C=v(y,m.normal,I.normal),E=x(y,m.uv,I.uv);if(A&&C&&E)return I}return null}if(u.has(l.vertex)){let y=u.get(l.vertex),d=g(a,y,l);if(d!==null)c.indices.push(d.index);else{let m=p(a,l,c);y.push(m)}}else{let y=p(a,l,c);u.set(l.vertex,[y])}}let t=new Ol,n=r.TriangleCount();if(n===0)return null;let i=[];for(let a=0;a<n;a++)i.push(a);i.sort((a,l)=>{let c=r.GetTriangle(a),u=r.GetTriangle(l);return c.mat-u.mat});let s=null,o=null;for(let a=0;a<i.length;a++){let l=i[a],c=r.GetTriangle(l);(s===null||s.material!==c.mat)&&(s=new Ll,s.material=c.mat,o=new Map,t.primitives.push(s));let u={vertex:c.v0,color:c.c0,normal:c.n0,uv:c.u0},h={vertex:c.v1,color:c.c1,normal:c.n1,uv:c.u1},f={vertex:c.v2,color:c.c2,normal:c.n2,uv:c.u2};e(r,u,s,o),e(r,h,s,o),e(r,f,s,o)}return t}function Sn(r){return new TextDecoder("utf-8").decode(r)}function fg(r){let e="",t=new Uint8Array(r);for(let n=0;n<t.byteLength;n++)e+=String.fromCharCode(t[n]);return e}function dg(r){let e=new ArrayBuffer(r.length),t=new Uint8Array(e);for(let n=0;n<r.length;n++)t[n]=r.charCodeAt(n);return e}function jo(r){return new TextEncoder().encode(r).buffer}function qs(r){let e="data:";if(!r.startsWith(e))return null;let t=r.indexOf(";");if(t===-1)return null;let n=r.indexOf(",");if(n===-1)return null;let i=r.substring(e.length,e.length+t-5),s=atob(r.substring(n+1)),o=new ArrayBuffer(s.length),a=new Uint8Array(o);for(let l=0;l<s.length;l++)a[l]=s.charCodeAt(l);return{mimeType:i,buffer:o}}function xs(r){if(r==null)return"";let e=r.split("/");return e.length===0?"":e[e.length-1]}function js(r){let e=new Blob([r]);return URL.createObjectURL(e)}function Su(r,e){let t=new Blob([r],{type:e});return URL.createObjectURL(t)}function Au(r){URL.revokeObjectURL(r)}var sn=class{constructor(e){this.name=e,this.content=null}GetName(){return this.name}SetName(e){this.name=e}GetTextContent(){return Sn(this.content)}GetBufferContent(){return this.content}SetTextContent(e){let t=jo(e);this.content=t}SetBufferContent(e){this.content=e}},kn=class{constructor(){}CanExport(e,t){return!1}Export(e,t,n){let i=[];this.ExportContent(e,t,i,()=>{n(i)})}ExportContent(e,t,n,i){}GetExportedMaterialName(e){return this.GetExportedName(e,nt("Material"))}GetExportedMeshName(e){return this.GetExportedName(e,nt("Mesh"))}GetExportedName(e,t){return e.length===0?t:e}};var Yo=class extends kn{constructor(){super(),this.rhino=null}CanExport(e,t){return e===dn.Binary&&t==="3dm"}ExportContent(e,t,n,i){this.rhino===null?_r("rhino3dm").then(()=>{rhino3dm().then(s=>{this.rhino=s,this.ExportRhinoContent(e,n,i)})}).catch(()=>{i()}):this.ExportRhinoContent(e,n,i)}ExportRhinoContent(e,t,n){function i(c){return{r:c.r,g:c.g,b:c.b,a:255}}let s=new sn("model.3dm");t.push(s);let o=new this.rhino.File3dm;e.EnumerateTransformedMeshInstances(c=>{let u=qo(c);for(let h=0;h<u.PrimitiveCount();h++){let f=u.GetPrimitive(h),p={data:{attributes:{position:{itemSize:3,type:"Float32Array",array:f.vertices},normal:{itemSize:3,type:"Float32Array",array:f.normals}},index:{type:"Uint16Array",array:f.indices}}},g=e.GetMaterial(f.material),y=new this.rhino.Material;y.name=this.GetExportedMaterialName(g.name),g.type===Wn.Phong&&(y.ambientColor=i(g.ambient),y.specularColor=i(g.specular)),y.diffuseColor=i(g.color),y.transparency=1-g.opacity;let d=o.materials().count;o.materials().add(y);let m=new this.rhino.Mesh.createFromThreejsJSON(p),_=new this.rhino.ObjectAttributes;_.name=this.GetExportedMeshName(c.GetName()),_.materialSource=this.rhino.ObjectMaterialSource.MaterialFromObject,_.materialIndex=d,o.objects().add(m,_)}});let a=new this.rhino.File3dmWriteOptions;a.version=6;let l=o.toByteArrayOptions(a);s.SetBufferContent(l),n()}};var Yt={Text:1,Integer:2,Number:3,Boolean:4,Percent:5,Color:6},cn=class r{constructor(e,t,n){this.type=e,this.name=t,this.value=n}Clone(){return this.type===Yt.Color?new r(this.type,this.name,this.value.Clone()):new r(this.type,this.name,this.value)}},Kn=class r{constructor(e){this.name=e,this.properties=[]}PropertyCount(){return this.properties.length}AddProperty(e){this.properties.push(e)}GetProperty(e){return this.properties[e]}Clone(){let e=new r(this.name);for(let t of this.properties)e.AddProperty(t.Clone());return e}};function wu(r){return r.type===Yt.Text?hu(r.value):r.type===Yt.Integer?r.value.toLocaleString():r.type===Yt.Number?r.value.toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2}):r.type===Yt.Boolean?r.value?nt("True"):nt("False"):r.type===Yt.Percent?parseInt(r.value*100,10).toString()+"%":r.type===Yt.Color?"#"+xu(r.value):null}function Wx(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var Ko=class extends kn{constructor(){super()}CanExport(e,t){return e===dn.Text&&t==="bim"}ExportContent(e,t,n,i){let s={schema_version:"1.1.0",meshes:[],elements:[],info:{}};this.ExportProperties(e.GetModel(),s.info);let o=0;e.EnumerateTransformedMeshInstances(l=>{let c={mesh_id:o,coordinates:[],indices:[]};l.EnumerateVertices(g=>{c.coordinates.push(g.x,g.y,g.z)}),l.EnumerateTriangleVertexIndices((g,y,d)=>{c.indices.push(g,y,d)});let u={mesh_id:o,type:"Other",color:{r:200,g:200,b:200,a:255},vector:{x:0,y:0,z:0},rotation:{qx:0,qy:0,qz:0,qw:1},guid:Wx(),info:{}},h=null,f=!0,p=[];for(let g=0;g<l.TriangleCount();g++){let y=l.GetTriangle(g),d=e.GetMaterial(y.mat),m={r:Math.round(d.color.r),g:Math.round(d.color.g),b:Math.round(d.color.b),a:Fn(d.opacity)};p.push(m.r,m.g,m.b,m.a),f&&(h===null?h=m:(h.r!==m.r||h.g!==m.g||h.b!==m.b||h.a!==m.a)&&(f=!1,h=null))}f?u.color=h:u.face_colors=p,u.info.Name=l.GetName(),this.ExportProperties(l,u.info),s.meshes.push(c),s.elements.push(u),o+=1});let a=new sn("model.bim");a.SetTextContent(JSON.stringify(s,null,4)),n.push(a),i()}ExportProperties(e,t){for(let n=0;n<e.PropertyGroupCount();n++){let i=e.GetPropertyGroup(n);for(let s=0;s<i.PropertyCount();s++){let o=i.GetProperty(s);t[o.name]=wu(o)}}}};var Ji=class{constructor(e,t){this.arrayBuffer=new ArrayBuffer(e),this.dataView=new DataView(this.arrayBuffer),this.isLittleEndian=t,this.position=0}GetPosition(){return this.position}SetPosition(e){this.position=e}End(){return this.position>=this.arrayBuffer.byteLength}GetBuffer(){return this.arrayBuffer}WriteArrayBuffer(e){let t=new Uint8Array(e);new Uint8Array(this.arrayBuffer).set(t,this.position),this.position+=e.byteLength}WriteBoolean8(e){this.dataView.setInt8(this.position,e?1:0),this.position=this.position+1}WriteCharacter8(e){this.dataView.setInt8(this.position,e),this.position=this.position+1}WriteUnsignedCharacter8(e){this.dataView.setUint8(this.position,e),this.position=this.position+1}WriteInteger16(e){this.dataView.setInt16(this.position,e,this.isLittleEndian),this.position=this.position+2}WriteUnsignedInteger16(e){this.dataView.setUint16(this.position,e,this.isLittleEndian),this.position=this.position+2}WriteInteger32(e){this.dataView.setInt32(this.position,e,this.isLittleEndian),this.position=this.position+4}WriteUnsignedInteger32(e){this.dataView.setUint32(this.position,e,this.isLittleEndian),this.position=this.position+4}WriteFloat32(e){this.dataView.setFloat32(this.position,e,this.isLittleEndian),this.position=this.position+4}WriteDouble64(e){this.dataView.setFloat64(this.position,e,this.isLittleEndian),this.position=this.position+8}};var $i=class r{constructor(e,t,n,i){this.x=e,this.y=t,this.z=n,this.w=i}Clone(){return new r(this.x,this.y,this.z,this.w)}};var ii=class{constructor(e,t,n,i){this.x=e,this.y=t,this.z=n,this.w=i}};function pg(r,e){return Ut(r.x,e.x)&&Ut(r.y,e.y)&&Ut(r.z,e.z)&&Ut(r.w,e.w)}function Zo(r){return new ii(r[0],r[1],r[2],r[3])}function Cu(r,e){let t=e/2,n=Math.sin(t);return new ii(r.x*n,r.y*n,r.z*n,Math.cos(t))}function mg(r,e,t,n){let i=Math.cos(r/2),s=Math.cos(e/2),o=Math.cos(t/2),a=Math.sin(r/2),l=Math.sin(e/2),c=Math.sin(t/2),u=new ii(0,0,0,1);if(n==="XYZ")u.x=a*s*o+i*l*c,u.y=i*l*o-a*s*c,u.z=i*s*c+a*l*o,u.w=i*s*o-a*l*c;else if(n==="YXZ")u.x=a*s*o+i*l*c,u.y=i*l*o-a*s*c,u.z=i*s*c-a*l*o,u.w=i*s*o+a*l*c;else if(n==="ZXY")u.x=a*s*o-i*l*c,u.y=i*l*o+a*s*c,u.z=i*s*c+a*l*o,u.w=i*s*o-a*l*c;else if(n==="ZYX")u.x=a*s*o-i*l*c,u.y=i*l*o+a*s*c,u.z=i*s*c-a*l*o,u.w=i*s*o+a*l*c;else if(n==="YZX")u.x=a*s*o+i*l*c,u.y=i*l*o+a*s*c,u.z=i*s*c-a*l*o,u.w=i*s*o-a*l*c;else if(n==="XZY")u.x=a*s*o-i*l*c,u.y=i*l*o-a*s*c,u.z=i*s*c+a*l*o,u.w=i*s*o+a*l*c;else return null;return u}var xn=class r{constructor(e){this.matrix=null,e!=null&&(this.matrix=e)}IsValid(){return this.matrix!==null}Set(e){return this.matrix=e,this}Get(){return this.matrix}Clone(){let e=[this.matrix[0],this.matrix[1],this.matrix[2],this.matrix[3],this.matrix[4],this.matrix[5],this.matrix[6],this.matrix[7],this.matrix[8],this.matrix[9],this.matrix[10],this.matrix[11],this.matrix[12],this.matrix[13],this.matrix[14],this.matrix[15]];return new r(e)}CreateIdentity(){return this.matrix=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],this}IsIdentity(){let e=new r().CreateIdentity().Get();for(let t=0;t<16;t++)if(!Ut(this.matrix[t],e[t]))return!1;return!0}CreateTranslation(e,t,n){return this.matrix=[1,0,0,0,0,1,0,0,0,0,1,0,e,t,n,1],this}CreateRotation(e,t,n,i){let s=e+e,o=t+t,a=n+n,l=e*s,c=e*o,u=e*a,h=t*o,f=t*a,p=n*a,g=i*s,y=i*o,d=i*a;return this.matrix=[1-(h+p),c+d,u-y,0,c-d,1-(l+p),f+g,0,u+y,f-g,1-(l+h),0,0,0,0,1],this}CreateRotationAxisAngle(e,t){let n=Cu(e,t);return this.CreateRotation(n.x,n.y,n.z,n.w)}CreateScale(e,t,n){return this.matrix=[e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1],this}ComposeTRS(e,t,n){let i=e.x,s=e.y,o=e.z,a=t.x,l=t.y,c=t.z,u=t.w,h=n.x,f=n.y,p=n.z,g=a+a,y=l+l,d=c+c,m=a*g,_=a*y,v=a*d,x=l*y,S=l*d,I=c*d,A=u*g,C=u*y,E=u*d;return this.matrix=[(1-(x+I))*h,(_+E)*h,(v-C)*h,0,(_-E)*f,(1-(m+I))*f,(S+A)*f,0,(v+C)*p,(S-A)*p,(1-(m+x))*p,0,i,s,o,1],this}DecomposeTRS(){let e=new Ye(this.matrix[12],this.matrix[13],this.matrix[14]),t=Xo(this.matrix[0],this.matrix[1],this.matrix[2]),n=Xo(this.matrix[4],this.matrix[5],this.matrix[6]),i=Xo(this.matrix[8],this.matrix[9],this.matrix[10]),s=this.Determinant();Br(s)&&(t*=-1);let o=new Ye(t,n,i),a=this.matrix[0]/t,l=this.matrix[4]/n,c=this.matrix[8]/i,u=this.matrix[1]/t,h=this.matrix[5]/n,f=this.matrix[9]/i,p=this.matrix[2]/t,g=this.matrix[6]/n,y=this.matrix[10]/i,d=null,m=a+h+y;if(m>0){let _=Math.sqrt(m+1)*2;d=new ii((g-f)/_,(c-p)/_,(u-l)/_,.25*_)}else if(a>h&&a>y){let _=Math.sqrt(1+a-h-y)*2;d=new ii(.25*_,(l+u)/_,(c+p)/_,(g-f)/_)}else if(h>y){let _=Math.sqrt(1+h-a-y)*2;d=new ii((l+u)/_,.25*_,(f+g)/_,(c-p)/_)}else{let _=Math.sqrt(1+y-a-h)*2;d=new ii((c+p)/_,(f+g)/_,.25*_,(u-l)/_)}return{translation:e,rotation:d,scale:o}}Determinant(){let e=this.matrix[0],t=this.matrix[1],n=this.matrix[2],i=this.matrix[3],s=this.matrix[4],o=this.matrix[5],a=this.matrix[6],l=this.matrix[7],c=this.matrix[8],u=this.matrix[9],h=this.matrix[10],f=this.matrix[11],p=this.matrix[12],g=this.matrix[13],y=this.matrix[14],d=this.matrix[15],m=e*o-t*s,_=e*a-n*s,v=e*l-i*s,x=t*a-n*o,S=t*l-i*o,I=n*l-i*a,A=c*g-u*p,C=c*y-h*p,E=c*d-f*p,b=u*y-h*g,R=u*d-f*g,N=h*d-f*y;return m*N-_*R+v*b+x*E-S*C+I*A}Invert(){let e=this.matrix[0],t=this.matrix[1],n=this.matrix[2],i=this.matrix[3],s=this.matrix[4],o=this.matrix[5],a=this.matrix[6],l=this.matrix[7],c=this.matrix[8],u=this.matrix[9],h=this.matrix[10],f=this.matrix[11],p=this.matrix[12],g=this.matrix[13],y=this.matrix[14],d=this.matrix[15],m=e*o-t*s,_=e*a-n*s,v=e*l-i*s,x=t*a-n*o,S=t*l-i*o,I=n*l-i*a,A=c*g-u*p,C=c*y-h*p,E=c*d-f*p,b=u*y-h*g,R=u*d-f*g,N=h*d-f*y,B=m*N-_*R+v*b+x*E-S*C+I*A;if(Ut(B,0))return null;let V=[(o*N-a*R+l*b)/B,(n*R-t*N-i*b)/B,(g*I-y*S+d*x)/B,(h*S-u*I-f*x)/B,(a*E-s*N-l*C)/B,(e*N-n*E+i*C)/B,(y*v-p*I-d*_)/B,(c*I-h*v+f*_)/B,(s*R-o*E+l*A)/B,(t*E-e*R-i*A)/B,(p*S-g*v+d*m)/B,(u*v-c*S-f*m)/B,(o*C-s*b-a*A)/B,(e*b-t*C+n*A)/B,(g*_-p*x-y*m)/B,(c*x-u*_+h*m)/B];return new r(V)}Transpose(){let e=[this.matrix[0],this.matrix[4],this.matrix[8],this.matrix[12],this.matrix[1],this.matrix[5],this.matrix[9],this.matrix[13],this.matrix[2],this.matrix[6],this.matrix[10],this.matrix[14],this.matrix[3],this.matrix[7],this.matrix[11],this.matrix[15]];return new r(e)}InvertTranspose(){let e=this.Invert();return e===null?null:e.Transpose()}MultiplyVector(e){let t=e.x,n=e.y,i=e.z,s=e.w,o=this.matrix[0],a=this.matrix[1],l=this.matrix[2],c=this.matrix[3],u=this.matrix[4],h=this.matrix[5],f=this.matrix[6],p=this.matrix[7],g=this.matrix[8],y=this.matrix[9],d=this.matrix[10],m=this.matrix[11],_=this.matrix[12],v=this.matrix[13],x=this.matrix[14],S=this.matrix[15];return new $i(t*o+n*u+i*g+s*_,t*a+n*h+i*y+s*v,t*l+n*f+i*d+s*x,t*c+n*p+i*m+s*S)}MultiplyMatrix(e){let t=this.matrix[0],n=this.matrix[1],i=this.matrix[2],s=this.matrix[3],o=this.matrix[4],a=this.matrix[5],l=this.matrix[6],c=this.matrix[7],u=this.matrix[8],h=this.matrix[9],f=this.matrix[10],p=this.matrix[11],g=this.matrix[12],y=this.matrix[13],d=this.matrix[14],m=this.matrix[15],_=e.matrix[0],v=e.matrix[1],x=e.matrix[2],S=e.matrix[3],I=e.matrix[4],A=e.matrix[5],C=e.matrix[6],E=e.matrix[7],b=e.matrix[8],R=e.matrix[9],N=e.matrix[10],B=e.matrix[11],V=e.matrix[12],ie=e.matrix[13],Y=e.matrix[14],te=e.matrix[15],q=[t*_+n*I+i*b+s*V,t*v+n*A+i*R+s*ie,t*x+n*C+i*N+s*Y,t*S+n*E+i*B+s*te,o*_+a*I+l*b+c*V,o*v+a*A+l*R+c*ie,o*x+a*C+l*N+c*Y,o*S+a*E+l*B+c*te,u*_+h*I+f*b+p*V,u*v+h*A+f*R+p*ie,u*x+h*C+f*N+p*Y,u*S+h*E+f*B+p*te,g*_+y*I+d*b+m*V,g*v+y*A+d*R+m*ie,g*x+y*C+d*N+m*Y,g*S+y*E+d*B+m*te];return new r(q)}};function Iu(r,e){let t=r.Get(),n=e.Get();for(let i=0;i<16;i++)if(!Ut(t[i],n[i]))return!1;return!0}var pn=class r{constructor(e){e!=null?this.matrix=e:(this.matrix=new xn,this.matrix.CreateIdentity())}SetMatrix(e){return this.matrix=e,this}GetMatrix(){return this.matrix}IsIdentity(){return this.matrix.IsIdentity()}AppendMatrix(e){return this.matrix=this.matrix.MultiplyMatrix(e),this}Append(e){return this.AppendMatrix(e.GetMatrix()),this}TransformCoord3D(e){let t=new $i(e.x,e.y,e.z,1),n=this.matrix.MultiplyVector(t);return new Ye(n.x,n.y,n.z)}Clone(){let e=this.matrix.Clone();return new r(e)}};function gg(r,e){return Iu(r.GetMatrix(),e.GetMatrix())}function vs(r){return r.LineCount()===0&&r.TriangleCount()===0}function Ys(r,e,t){let n=Un(e,r),i=Un(t,r),s=Zi(n,i);return s.Normalize(),s}function Mr(r,e){if(!e.IsIdentity()){for(let t=0;t<r.VertexCount();t++){let n=r.GetVertex(t),i=e.TransformCoord3D(n);n.x=i.x,n.y=i.y,n.z=i.z}if(r.NormalCount()>0){let t=e.GetMatrix().InvertTranspose();if(t!==null){let n=new pn(t);for(let i=0;i<r.NormalCount();i++){let s=r.GetNormal(i),o=n.TransformCoord3D(s);s.x=o.x,s.y=o.y,s.z=o.z}}}}}function Ru(r){for(let e=0;e<r.TriangleCount();e++){let t=r.GetTriangle(e),n=t.v1;t.v1=t.v2,t.v2=n}}var Dl=class{constructor(){}VertexCount(){return 0}VertexColorCount(){return 0}NormalCount(){return 0}TextureUVCount(){return 0}LineCount(){return 0}LineSegmentCount(){return 0}TriangleCount(){return 0}EnumerateVertices(e){}EnumerateTriangleVertexIndices(e){}EnumerateTriangleVertices(e){}},Er=class extends Dl{constructor(){super(),this.name="",this.propertyGroups=[]}GetName(){return this.name}SetName(e){this.name=e}PropertyGroupCount(){return this.propertyGroups.length}AddPropertyGroup(e){return this.propertyGroups.push(e),this.propertyGroups.length-1}GetPropertyGroup(e){return this.propertyGroups[e]}CloneProperties(e){for(let t of this.propertyGroups)e.AddPropertyGroup(t.Clone())}};var ki=class{constructor(e,t){this.nodeId=e,this.meshIndex=t}IsEqual(e){return this.nodeId===e.nodeId&&this.meshIndex===e.meshIndex}GetKey(){return this.nodeId.toString()+":"+this.meshIndex.toString()}},Hr=class extends Er{constructor(e,t,n){super(),this.id=e,this.node=t,this.mesh=n}GetId(){return this.id}GetTransformation(){return this.node.GetWorldTransformation()}GetMesh(){return this.mesh}VertexCount(){return this.mesh.VertexCount()}VertexColorCount(){return this.mesh.VertexColorCount()}NormalCount(){return this.mesh.NormalCount()}TextureUVCount(){return this.mesh.TextureUVCount()}LineCount(){return this.mesh.LineCount()}LineSegmentCount(){return this.mesh.LineSegmentCount()}TriangleCount(){return this.mesh.TriangleCount()}EnumerateVertices(e){let t=this.node.GetWorldTransformation();t.IsIdentity()?this.mesh.EnumerateVertices(e):this.mesh.EnumerateVertices(n=>{let i=t.TransformCoord3D(n);e(i)})}EnumerateTriangleVertexIndices(e){this.mesh.EnumerateTriangleVertexIndices(e)}EnumerateTriangleVertices(e){let t=this.node.GetWorldTransformation();t.IsIdentity()?this.mesh.EnumerateTriangleVertices(e):this.mesh.EnumerateTriangleVertices((n,i,s)=>{let o=t.TransformCoord3D(n),a=t.TransformCoord3D(i),l=t.TransformCoord3D(s);e(o,a,l)})}PropertyGroupCount(){return this.mesh.PropertyGroupCount()}AddPropertyGroup(e){return this.mesh.AddPropertyGroup(e)}GetPropertyGroup(e){return this.mesh.GetPropertyGroup(e)}GetTransformedMesh(){let e=this.node.GetWorldTransformation(),t=this.mesh.Clone();return Mr(t,e),t}};var yg={UNSIGNED_INT:5125,FLOAT:5126},Fl={ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963},Jo=class extends kn{constructor(){super(),this.components={index:{type:yg.UNSIGNED_INT,size:4},number:{type:yg.FLOAT,size:4}}}CanExport(e,t){return e===dn.Text&&t==="gltf"||e===dn.Binary&&t==="glb"}ExportContent(e,t,n,i){t===dn.Text?this.ExportAsciiContent(e,n):t===dn.Binary&&this.ExportBinaryContent(e,n),i()}ExportAsciiContent(e,t){let n=new sn("model.gltf"),i=new sn("model.bin");t.push(n),t.push(i);let s=this.GetMeshData(e),o=this.GetMainBuffer(s),a=this.GetMainJson(e,s);a.buffers.push({uri:i.GetName(),byteLength:o.byteLength});let l=new Map;this.ExportMaterials(e,a,c=>{let u=Rn(c.name);if(l.has(u))return l.get(u);{let h=new sn(u);h.SetBufferContent(c.buffer),t.push(h);let f=a.textures.length;return l.set(u,f),a.images.push({uri:u}),a.textures.push({source:f}),f}}),n.SetTextContent(JSON.stringify(a,null,4)),i.SetBufferContent(o)}ExportBinaryContent(e,t){function n(x){let S=x%4;return S===0?x:x+(4-S)}function i(x,S,I){for(let A=0;A<I;A++)x.WriteUnsignedCharacter8(S)}let s=new sn("model.glb");t.push(s);let o=this.GetMeshData(e),a=this.GetMainBuffer(o),l=this.GetMainJson(e,o),c=[],u=a.byteLength,h=new Map;this.ExportMaterials(e,l,x=>{let S=Rn(x.name),I=Tr(x.name);if(h.has(S))return h.get(S);{let A=l.bufferViews.length,C=l.textures.length;h.set(S,C);let E=x.buffer;return c.push(E),l.bufferViews.push({buffer:0,byteOffset:u,byteLength:E.byteLength}),u+=E.byteLength,l.images.push({bufferView:A,mimeType:"image/"+I}),l.textures.push({source:C}),C}});let f=a.byteLength;for(let x=0;x<c.length;x++){let S=c[x];f+=S.byteLength}let p=n(f);l.buffers.push({byteLength:p});let g=JSON.stringify(l),y=jo(g),d=y.byteLength,m=n(d),_=20+m+8+p,v=new Ji(_,!0);v.WriteUnsignedInteger32(1179937895),v.WriteUnsignedInteger32(2),v.WriteUnsignedInteger32(_),v.WriteUnsignedInteger32(m),v.WriteUnsignedInteger32(1313821514),v.WriteArrayBuffer(y),i(v,32,m-d),v.WriteUnsignedInteger32(p),v.WriteUnsignedInteger32(5130562),v.WriteArrayBuffer(a);for(let x=0;x<c.length;x++){let S=c[x];v.WriteArrayBuffer(S)}i(v,0,p-f),s.SetBufferContent(v.GetBuffer())}GetMeshData(e){let t=[];return e.EnumerateMeshes(n=>{let i=qo(n);t.push({name:n.GetName(),buffer:i,offsets:[],sizes:[]})}),t}GetMainBuffer(e){let t=0;for(let i of e)t+=i.buffer.GetByteLength(this.components.index.size,this.components.number.size);let n=new Ji(t,!0);for(let i of e)for(let s=0;s<i.buffer.PrimitiveCount();s++){let o=i.buffer.GetPrimitive(s),a=n.GetPosition();for(let l=0;l<o.indices.length;l++)n.WriteUnsignedInteger32(o.indices[l]);for(let l=0;l<o.vertices.length;l++)n.WriteFloat32(o.vertices[l]);for(let l=0;l<o.colors.length;l++)n.WriteFloat32(vr(o.colors[l]));for(let l=0;l<o.normals.length;l++)n.WriteFloat32(o.normals[l]);for(let l=0;l<o.uvs.length;l++){let c=o.uvs[l];l%2===1&&(c*=-1),n.WriteFloat32(c)}i.offsets.push(a),i.sizes.push(n.GetPosition()-a)}return n.GetBuffer()}GetMainJson(e,t){class n{constructor(h,f){this.mainJson=h,this.byteOffset=f}AddBufferView(h,f){let p={buffer:0,byteOffset:this.byteOffset,byteLength:h,target:f};return this.mainJson.bufferViews.push(p),this.byteOffset+=h,this.mainJson.bufferViews.length-1}}function i(u,h){for(let f of h.GetMeshIndices()){let p=new ki(h.GetId(),f);if(u.IsMeshInstanceVisible(p))return!0}for(let f of h.GetChildNodes())if(i(u,f))return!0;return!1}function s(u,h,f,p){if(p.IsMeshNode())for(let g of p.GetMeshIndices())o(u,h,f,p,g,!0);else if(i(u,p)){let g={},y=p.GetName();y.length>0&&(g.name=y),p.GetTransformation().IsIdentity()||(g.matrix=p.GetTransformation().GetMatrix().Get()),f.push(g),h.push(f.length-1),g.children=[],a(u,g.children,f,p)}}function o(u,h,f,p,g,y){let d=new ki(p.GetId(),g);if(!u.IsMeshInstanceVisible(d))return;let m={mesh:u.MapMeshIndex(g)};y&&(p.GetTransformation().IsIdentity()||(m.matrix=p.GetTransformation().GetMatrix().Get())),f.push(m),h.push(f.length-1)}function a(u,h,f,p){for(let g of p.GetChildNodes())s(u,h,f,g);for(let g of p.GetMeshIndices())o(u,h,f,p,g,!1)}let l={asset:{generator:"https://3dviewer.net",version:"2.0"},scene:0,scenes:[{nodes:[]}],nodes:[],materials:[],meshes:[],buffers:[],bufferViews:[],accessors:[]},c=e.GetModel().GetRootNode();a(e,l.scenes[0].nodes,l.nodes,c);for(let u of t){let h={name:this.GetExportedMeshName(u.name),primitives:[]},f=u.buffer.primitives;for(let p=0;p<f.length;p++){let g=f[p],y=new n(l,u.offsets[p]),d=y.AddBufferView(g.indices.length*this.components.index.size,Fl.ELEMENT_ARRAY_BUFFER),m=y.AddBufferView(g.vertices.length*this.components.number.size,Fl.ARRAY_BUFFER),_=null;g.colors.length>0&&(_=y.AddBufferView(g.colors.length*this.components.number.size,Fl.ARRAY_BUFFER));let v=y.AddBufferView(g.normals.length*this.components.number.size,Fl.ARRAY_BUFFER),x=null;g.uvs.length>0&&(x=y.AddBufferView(g.uvs.length*this.components.number.size,Fl.ARRAY_BUFFER));let S={attributes:{},mode:4,material:g.material},I=g.GetBounds();l.accessors.push({bufferView:d,byteOffset:0,componentType:this.components.index.type,count:g.indices.length,type:"SCALAR"}),S.indices=l.accessors.length-1,l.accessors.push({bufferView:m,byteOffset:0,componentType:this.components.number.type,count:g.vertices.length/3,min:I.min,max:I.max,type:"VEC3"}),S.attributes.POSITION=l.accessors.length-1,_!==null&&(l.accessors.push({bufferView:_,byteOffset:0,componentType:this.components.number.type,count:g.colors.length/3,type:"VEC3"}),S.attributes.COLOR_0=l.accessors.length-1),l.accessors.push({bufferView:v,byteOffset:0,componentType:this.components.number.type,count:g.normals.length/3,type:"VEC3"}),S.attributes.NORMAL=l.accessors.length-1,x!==null&&(l.accessors.push({bufferView:x,byteOffset:0,componentType:this.components.number.type,count:g.uvs.length/2,type:"VEC2"}),S.attributes.TEXCOORD_0=l.accessors.length-1),h.primitives.push(S)}l.meshes.push(h)}return l}ExportMaterials(e,t,n){function i(s,o,a,l){function c(d,m){return[vr(d.r/255),vr(d.g/255),vr(d.b/255),m]}function u(d){return[vr(d.r/255),vr(d.g/255),vr(d.b/255)]}function h(d,m,_){if(m===null||!m.IsValid())return null;d.images===void 0&&(d.images=[]),d.textures===void 0&&(d.textures=[]);let x={index:_(m)};if(m.HasTransformation()){let S="KHR_texture_transform";d.extensionsUsed===void 0&&(d.extensionsUsed=[]),d.extensionsUsed.indexOf(S)===-1&&d.extensionsUsed.push(S),x.extensions={KHR_texture_transform:{offset:[m.offset.x,-m.offset.y],scale:[m.scale.x,m.scale.y],rotation:-m.rotation}}}return x}let f={name:s.GetExportedMaterialName(a.name),pbrMetallicRoughness:{baseColorFactor:c(a.color,a.opacity)},emissiveFactor:u(a.emissive),doubleSided:!0,alphaMode:"OPAQUE"};a.transparent&&(f.alphaMode="BLEND");let p=h(o,a.diffuseMap,l);if(p!==null&&(a.multiplyDiffuseMap||(f.pbrMetallicRoughness.baseColorFactor=c(new St(255,255,255),a.opacity)),f.pbrMetallicRoughness.baseColorTexture=p),a.type===Wn.Physical){let d=h(o,a.metalnessMap,l);d!==null?f.pbrMetallicRoughness.metallicRoughnessTexture=d:(f.pbrMetallicRoughness.metallicFactor=a.metalness,f.pbrMetallicRoughness.roughnessFactor=a.roughness)}let g=h(o,a.normalMap,l);g!==null&&(f.normalTexture=g);let y=h(o,a.emissiveMap,l);y!==null&&(f.emissiveTexture=y),o.materials.push(f)}for(let s=0;s<e.MaterialCount();s++){let o=e.GetMaterial(s);i(this,t,o,n)}}};var Ul=class{constructor(e){this.transformation=new pn,this.isMeshVisible=t=>!0,Fo(e,this)}},$o=class{constructor(e,t){this.model=e,this.settings=t||new Ul,this.visibleMeshes=null,this.meshToVisibleMeshIndex=null}GetModel(){return this.model}MaterialCount(){return this.model.MaterialCount()}GetMaterial(e){return this.model.GetMaterial(e)}VertexCount(){let e=0;return this.EnumerateMeshInstances(t=>{e+=t.VertexCount()}),e}TriangleCount(){let e=0;return this.EnumerateMeshInstances(t=>{e+=t.TriangleCount()}),e}MeshCount(){let e=0;return this.EnumerateMeshes(t=>{e+=1}),e}EnumerateMeshes(e){this.FillVisibleMeshCache();for(let t=0;t<this.model.MeshCount();t++)if(this.visibleMeshes.has(t)){let n=this.model.GetMesh(t);e(n)}}MapMeshIndex(e){return this.FillVisibleMeshCache(),this.meshToVisibleMeshIndex.get(e)}IsMeshInstanceVisible(e){return this.settings.isMeshVisible(e)}MeshInstanceCount(){let e=0;return this.EnumerateMeshInstances(t=>{e+=1}),e}EnumerateMeshInstances(e){this.model.EnumerateMeshInstances(t=>{this.settings.isMeshVisible(t.GetId())&&e(t)})}EnumerateTransformedMeshInstances(e){this.EnumerateMeshInstances(t=>{let n=t.GetTransformation();this.settings.transformation.IsIdentity()||n.Append(this.settings.transformation);let s=t.GetMesh().Clone();n.IsIdentity()||Mr(s,n),e(s)})}EnumerateVerticesAndTriangles(e){let t=[];this.EnumerateTransformedMeshInstances(i=>{t.push(i)});for(let i of t)i.EnumerateVertices(s=>{e.onVertex(s.x,s.y,s.z)});let n=0;for(let i of t)i.EnumerateTriangleVertexIndices((s,o,a)=>{e.onTriangle(s+n,o+n,a+n)}),n+=i.VertexCount()}EnumerateTrianglesWithNormals(e){this.EnumerateTransformedMeshInstances(t=>{t.EnumerateTriangleVertices((n,i,s)=>{let o=Ys(n,i,s);e(n,i,s,o)})})}FillVisibleMeshCache(){if(this.visibleMeshes!==null&&this.meshToVisibleMeshIndex!==null)return;this.visibleMeshes=new Set,this.model.EnumerateMeshInstances(t=>{let n=t.GetId();this.settings.isMeshVisible(n)&&this.visibleMeshes.add(n.meshIndex)}),this.meshToVisibleMeshIndex=new Map;let e=0;for(let t=0;t<this.model.MeshCount();t++)this.visibleMeshes.has(t)&&(this.meshToVisibleMeshIndex.set(t,e),e+=1)}};var mi=class{constructor(){this.text="",this.indentation=0}GetText(){return this.text}Indent(e){this.indentation+=e}WriteArrayLine(e){this.WriteLine(e.join(" "))}WriteLine(e){this.WriteIndentation(),this.Write(e+`
`)}WriteIndentation(){for(let e=0;e<this.indentation;e++)this.Write(" ")}Write(e){this.text+=e}};var Qo=class extends kn{constructor(){super()}CanExport(e,t){return e===dn.Text&&t==="obj"}ExportContent(e,t,n,i){function s(g,y,d,m){if(d===null||!d.IsValid())return;let _=Rn(d.name);if(g.WriteArrayLine([y,_]),m.findIndex(x=>x.GetName()===_)===-1){let x=new sn(_);x.SetBufferContent(d.buffer),m.push(x)}}let o=new sn("model.mtl"),a=new sn("model.obj");n.push(o),n.push(a);let l=new mi;l.WriteLine(this.GetHeaderText());for(let g=0;g<e.MaterialCount();g++){let y=e.GetMaterial(g);l.WriteArrayLine(["newmtl",this.GetExportedMaterialName(y.name)]),l.WriteArrayLine(["Kd",y.color.r/255,y.color.g/255,y.color.b/255]),l.WriteArrayLine(["d",y.opacity]),y.type===Wn.Phong&&(l.WriteArrayLine(["Ka",y.ambient.r/255,y.ambient.g/255,y.ambient.b/255]),l.WriteArrayLine(["Ks",y.specular.r/255,y.specular.g/255,y.specular.b/255]),l.WriteArrayLine(["Ns",y.shininess*1e3])),s(l,"map_Kd",y.diffuseMap,n),y.type===Wn.Phong&&s(l,"map_Ks",y.specularMap,n),s(l,"bump",y.bumpMap,n)}o.SetTextContent(l.GetText());let c=new mi;c.WriteLine(this.GetHeaderText()),c.WriteArrayLine(["mtllib",o.GetName()]);let u=0,h=0,f=0,p=null;e.EnumerateTransformedMeshInstances(g=>{c.WriteArrayLine(["g",this.GetExportedMeshName(g.GetName())]);for(let y=0;y<g.VertexCount();y++){let d=g.GetVertex(y);c.WriteArrayLine(["v",d.x,d.y,d.z])}for(let y=0;y<g.NormalCount();y++){let d=g.GetNormal(y);c.WriteArrayLine(["vn",d.x,d.y,d.z])}for(let y=0;y<g.TextureUVCount();y++){let d=g.GetTextureUV(y);c.WriteArrayLine(["vt",d.x,d.y])}for(let y=0;y<g.TriangleCount();y++){let d=g.GetTriangle(y),m=d.v0+u+1,_=d.v1+u+1,v=d.v2+u+1,x=d.n0+h+1,S=d.n1+h+1,I=d.n2+h+1,A="",C="",E="";if(d.HasTextureUVs()&&(A=d.u0+f+1,C=d.u1+f+1,E=d.u2+f+1),d.mat!==null){let b=e.GetMaterial(d.mat),R=this.GetExportedMaterialName(b.name);R!==p&&(c.WriteArrayLine(["usemtl",R]),p=R)}c.WriteArrayLine(["f",[m,A,x].join("/"),[_,C,S].join("/"),[v,E,I].join("/")])}for(let y=0;y<g.LineCount();y++){let d=g.GetLine(y),m=[];for(let _=0;_<d.vertices.length;_++)m.push(d.vertices[_]+u+1);if(d.mat!==null){let _=e.GetMaterial(d.mat),v=this.GetExportedMaterialName(_.name);v!==p&&(c.WriteArrayLine(["usemtl",v]),p=v)}c.WriteArrayLine(["l",m.join(" ")])}u+=g.VertexCount(),h+=g.NormalCount(),f+=g.TextureUVCount()}),a.SetTextContent(c.GetText()),i()}GetHeaderText(){return"# exported by https://3dviewer.net"}};var ea=class extends kn{constructor(){super()}CanExport(e,t){return e===dn.Text&&t==="off"}ExportContent(e,t,n,i){let s=new sn("model.off");n.push(s);let o=new mi;o.WriteLine("OFF"),o.WriteArrayLine([e.VertexCount(),e.TriangleCount(),0]),e.EnumerateVerticesAndTriangles({onVertex:function(a,l,c){o.WriteArrayLine([a,l,c])},onTriangle:function(a,l,c){o.WriteArrayLine([3,a,l,c])}}),s.SetTextContent(o.GetText()),i()}};var ta=class extends kn{constructor(){super()}CanExport(e,t){return(e===dn.Text||e===dn.Binary)&&t==="ply"}ExportContent(e,t,n,i){t===dn.Text?this.ExportText(e,n):this.ExportBinary(e,n),i()}ExportText(e,t){let n=new sn("model.ply");t.push(n);let i=new mi,s=e.VertexCount(),o=e.TriangleCount(),a=this.GetHeaderText("ascii",s,o);i.Write(a),e.EnumerateVerticesAndTriangles({onVertex:function(l,c,u){i.WriteArrayLine([l,c,u])},onTriangle:function(l,c,u){i.WriteArrayLine([3,l,c,u])}}),n.SetTextContent(i.GetText())}ExportBinary(e,t){let n=new sn("model.ply");t.push(n);let i=e.VertexCount(),s=e.TriangleCount(),o=this.GetHeaderText("binary_little_endian",i,s),a=o.length+i*3*4+s*(1+3*4),l=new Ji(a,!0);for(let c=0;c<o.length;c++)l.WriteUnsignedCharacter8(o.charCodeAt(c));e.EnumerateVerticesAndTriangles({onVertex:function(c,u,h){l.WriteFloat32(c),l.WriteFloat32(u),l.WriteFloat32(h)},onTriangle:function(c,u,h){l.WriteUnsignedCharacter8(3),l.WriteInteger32(c),l.WriteInteger32(u),l.WriteInteger32(h)}}),n.SetBufferContent(l.GetBuffer())}GetHeaderText(e,t,n){let i=new mi;return i.WriteLine("ply"),i.WriteLine("format "+e+" 1.0"),i.WriteLine("element vertex "+t),i.WriteLine("property float x"),i.WriteLine("property float y"),i.WriteLine("property float z"),i.WriteLine("element face "+n),i.WriteLine("property list uchar int vertex_index"),i.WriteLine("end_header"),i.GetText()}};var na=class extends kn{constructor(){super()}CanExport(e,t){return(e===dn.Text||e===dn.Binary)&&t==="stl"}ExportContent(e,t,n,i){t===dn.Text?this.ExportText(e,n):this.ExportBinary(e,n),i()}ExportText(e,t){let n=new sn("model.stl");t.push(n);let i=new mi;i.WriteLine("solid Model"),e.EnumerateTrianglesWithNormals((s,o,a,l)=>{i.WriteArrayLine(["facet","normal",l.x,l.y,l.z]),i.Indent(1),i.WriteLine("outer loop"),i.Indent(1),i.WriteArrayLine(["vertex",s.x,s.y,s.z]),i.WriteArrayLine(["vertex",o.x,o.y,o.z]),i.WriteArrayLine(["vertex",a.x,a.y,a.z]),i.Indent(-1),i.WriteLine("endloop"),i.Indent(-1),i.WriteLine("endf