@ridp/threejs 1.4.0 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/hooks.cjs +1 -1
  2. package/dist/hooks.js +12 -9
  3. package/dist/packages/threejs/package.json.cjs +1 -0
  4. package/dist/packages/threejs/package.json.js +4 -0
  5. package/dist/packages/threejs/src/hooks/useBatchGLTFLoader.cjs +1 -0
  6. package/dist/packages/threejs/src/hooks/useBatchGLTFLoader.js +83 -0
  7. package/dist/packages/threejs/src/hooks/useGLTFLoader.cjs +1 -0
  8. package/dist/packages/threejs/src/hooks/useGLTFLoader.js +292 -0
  9. package/dist/packages/threejs/src/hooks/useObb.cjs +1 -0
  10. package/dist/packages/threejs/src/hooks/useObb.js +41 -0
  11. package/dist/packages/threejs/src/hooks/useRaycaster.cjs +1 -0
  12. package/dist/packages/threejs/src/hooks/useRaycaster.js +35 -0
  13. package/dist/packages/threejs/src/hooks/useThreeJs.cjs +5 -0
  14. package/dist/packages/threejs/src/hooks/useThreeJs.js +153 -0
  15. package/dist/packages/threejs/src/instance/IDBCache.cjs +1 -0
  16. package/dist/packages/threejs/src/instance/IDBCache.js +142 -0
  17. package/dist/packages/threejs/src/instance/threeIns.cjs +3 -0
  18. package/dist/packages/threejs/src/instance/threeIns.js +369 -0
  19. package/dist/packages/threejs/src/utils/CacheMonitor.cjs +1 -0
  20. package/dist/packages/threejs/src/utils/CacheMonitor.js +125 -0
  21. package/dist/packages/threejs/src/utils/ImageLoader.cjs +1 -0
  22. package/dist/packages/threejs/src/utils/ImageLoader.js +33 -0
  23. package/dist/packages/threejs/src/utils/PredictiveLoader.cjs +1 -0
  24. package/dist/packages/threejs/src/utils/PredictiveLoader.js +155 -0
  25. package/dist/packages/threejs/src/utils/RetryHelper.cjs +1 -0
  26. package/dist/packages/threejs/src/utils/RetryHelper.js +108 -0
  27. package/dist/packages/threejs/src/utils/common.cjs +1 -0
  28. package/dist/packages/threejs/src/utils/common.js +15 -0
  29. package/dist/packages/threejs/src/utils/css3dHelper.cjs +15 -0
  30. package/dist/packages/threejs/src/utils/css3dHelper.js +42 -0
  31. package/dist/packages/threejs/src/utils/disposeObject.cjs +1 -0
  32. package/dist/packages/threejs/src/utils/disposeObject.js +13 -0
  33. package/dist/packages/threejs/src/utils/helper.cjs +1 -0
  34. package/dist/packages/threejs/src/utils/helper.js +47 -0
  35. package/dist/packages/threejs/src/utils/modelSerialize.cjs +1 -0
  36. package/dist/packages/threejs/src/utils/modelSerialize.js +225 -0
  37. package/dist/packages/threejs/src/utils/sceneRebuilder.cjs +1 -0
  38. package/dist/packages/threejs/src/utils/sceneRebuilder.js +138 -0
  39. package/dist/packages/threejs/src/workers/gltfParser.worker.cjs +1 -0
  40. package/dist/packages/threejs/src/workers/gltfParser.worker.js +11 -0
  41. package/dist/packages/threejs/src/workers/gltfParserOptimized.worker.cjs +1 -0
  42. package/dist/packages/threejs/src/workers/gltfParserOptimized.worker.js +11 -0
  43. package/dist/threejs.cjs +1 -3
  44. package/dist/threejs.js +58 -404
  45. package/dist/utils.cjs +1 -1
  46. package/dist/utils.js +40 -32
  47. package/package.json +1 -1
  48. package/dist/ImageLoader-DXx88iwh.js +0 -1444
  49. package/dist/ImageLoader-DzG6sgbB.cjs +0 -24
  50. package/dist/PredictiveLoader--_3bEnce.js +0 -3738
  51. package/dist/PredictiveLoader-CpRi-ULa.cjs +0 -2
  52. package/dist/useBatchGLTFLoader-CDNvTMtt.cjs +0 -5
  53. package/dist/useBatchGLTFLoader-Dg-xau9i.js +0 -493
  54. /package/dist/{modelOptimizer-A0Cs6f9e.cjs → packages/threejs/src/utils/modelOptimizer.cjs} +0 -0
  55. /package/dist/{modelOptimizer-BRPnM2RH.js → packages/threejs/src/utils/modelOptimizer.js} +0 -0
@@ -0,0 +1,138 @@
1
+ import * as o from "three";
2
+ function p(e) {
3
+ const { geometries: i, materials: r, hierarchy: t } = e, l = /* @__PURE__ */ new Map();
4
+ i.forEach((s, n) => {
5
+ const u = y(s);
6
+ l.set(n, u);
7
+ });
8
+ const h = /* @__PURE__ */ new Map();
9
+ r.forEach((s, n) => {
10
+ const u = a(s);
11
+ h.set(n, u);
12
+ });
13
+ const c = new o.Group();
14
+ c.name = "Scene";
15
+ const f = /* @__PURE__ */ new Map();
16
+ return t.forEach((s) => {
17
+ let n;
18
+ if (s.type === "Mesh") {
19
+ const u = s.geometryIndex >= 0 ? l.get(s.geometryIndex) : null, d = s.materialIndex >= 0 ? h.get(s.materialIndex) : null;
20
+ n = new o.Mesh(u, d);
21
+ } else s.type === "Group" ? n = new o.Group() : s.type === "Object3D" ? n = new o.Object3D() : n = new o.Object3D();
22
+ n.name = s.name, n.position.fromArray(s.position), n.rotation.fromArray(s.rotation), n.scale.fromArray(s.scale), n.visible = s.visible, f.set(s.id, n);
23
+ }), t.forEach((s) => {
24
+ const n = f.get(s.id);
25
+ if (s.parentId !== null) {
26
+ const u = f.get(s.parentId);
27
+ u && u.add(n);
28
+ } else
29
+ c.add(n);
30
+ }), c;
31
+ }
32
+ function y(e) {
33
+ const i = new o.BufferGeometry();
34
+ for (const r in e.attributes) {
35
+ const t = e.attributes[r], l = t.array;
36
+ let h;
37
+ if (l.byteLength === 0) {
38
+ console.warn(`[ sceneRebuilder ] 属性 ${r} 的数组为空`);
39
+ continue;
40
+ }
41
+ if (l.buffer && l.buffer.byteLength === 0) {
42
+ console.warn(`[ sceneRebuilder ] 属性 ${r} 的 buffer 已被转移,尝试重建`);
43
+ continue;
44
+ }
45
+ h = l;
46
+ const c = new o.BufferAttribute(h, t.itemSize);
47
+ c.normalized = t.normalized, i.setAttribute(r, c);
48
+ }
49
+ if (e.index) {
50
+ const r = e.index, t = r.array;
51
+ if (t && t.byteLength > 0) {
52
+ const l = new o.BufferAttribute(t, r.itemSize);
53
+ i.setIndex(l);
54
+ }
55
+ }
56
+ return i;
57
+ }
58
+ function a(e) {
59
+ let i;
60
+ const r = {
61
+ color: e.color !== void 0 ? e.color : 16777215,
62
+ opacity: e.opacity !== void 0 ? e.opacity : 1,
63
+ transparent: e.transparent !== void 0 ? e.transparent : !1,
64
+ alphaTest: e.alphaTest !== void 0 ? e.alphaTest : 0,
65
+ // 关键渲染属性 - 这些缺失会导致渲染抖动和显示错误
66
+ side: e.side !== void 0 ? e.side : o.FrontSide,
67
+ depthTest: e.depthTest !== void 0 ? e.depthTest : !0,
68
+ depthWrite: e.depthWrite !== void 0 ? e.depthWrite : !0,
69
+ wireframe: e.wireframe !== void 0 ? e.wireframe : !1,
70
+ vertexColors: e.vertexColors !== void 0 ? e.vertexColors : !1
71
+ };
72
+ switch (e.type) {
73
+ case "MeshStandardMaterial":
74
+ i = new o.MeshStandardMaterial({
75
+ ...r,
76
+ roughness: e.roughness !== void 0 ? e.roughness : 0.5,
77
+ metalness: e.metalness !== void 0 ? e.metalness : 0.5,
78
+ emissive: e.emissive !== void 0 ? e.emissive : 0,
79
+ emissiveIntensity: e.emissiveIntensity !== void 0 ? e.emissiveIntensity : 1
80
+ });
81
+ break;
82
+ case "MeshBasicMaterial":
83
+ i = new o.MeshBasicMaterial({
84
+ ...r
85
+ });
86
+ break;
87
+ case "MeshPhongMaterial":
88
+ i = new o.MeshPhongMaterial({
89
+ ...r,
90
+ shininess: e.shininess !== void 0 ? e.shininess : 30,
91
+ specular: e.specular !== void 0 ? e.specular : 1118481,
92
+ emissive: e.emissive !== void 0 ? e.emissive : 0,
93
+ emissiveIntensity: e.emissiveIntensity !== void 0 ? e.emissiveIntensity : 1
94
+ });
95
+ break;
96
+ default:
97
+ i = new o.MeshStandardMaterial(r);
98
+ }
99
+ return i.uuid = e.uuid, i;
100
+ }
101
+ class b {
102
+ constructor() {
103
+ this.geometries = [], this.materials = [], this.hierarchy = [], this.geometryMap = /* @__PURE__ */ new Map(), this.materialMap = /* @__PURE__ */ new Map();
104
+ }
105
+ /**
106
+ * 添加场景数据块
107
+ */
108
+ addChunk(i) {
109
+ i.geometries && i.geometries.forEach((r) => {
110
+ const t = this.geometries.length;
111
+ this.geometries.push(r), this.geometryMap.set(r.uuid, t);
112
+ }), i.materials && i.materials.forEach((r) => {
113
+ const t = this.materials.length;
114
+ this.materials.push(r), this.materialMap.set(r.uuid, t);
115
+ }), i.hierarchy && this.hierarchy.push(...i.hierarchy);
116
+ }
117
+ /**
118
+ * 构建当前可渲染的场景
119
+ */
120
+ buildCurrent() {
121
+ const i = {
122
+ geometries: this.geometries,
123
+ materials: this.materials,
124
+ hierarchy: this.hierarchy
125
+ };
126
+ return p(i);
127
+ }
128
+ /**
129
+ * 完成构建
130
+ */
131
+ finalize() {
132
+ return this.buildCurrent();
133
+ }
134
+ }
135
+ export {
136
+ b as ProgressiveSceneBuilder,
137
+ p as rebuildScene
138
+ };
@@ -0,0 +1 @@
1
+ "use strict";function r(e){return new Worker(""+(typeof document>"u"?require("url").pathToFileURL(__dirname+"/../../../../assets/gltfParser.worker-Bqz8BBJx.js").href:new URL("../../../../assets/gltfParser.worker-Bqz8BBJx.js",document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&document.currentScript.src||document.baseURI).href),{name:e==null?void 0:e.name})}module.exports=r;
@@ -0,0 +1,11 @@
1
+ function e(r) {
2
+ return new Worker(
3
+ "" + new URL("../../../../assets/gltfParser.worker-Bqz8BBJx.js", import.meta.url).href,
4
+ {
5
+ name: r == null ? void 0 : r.name
6
+ }
7
+ );
8
+ }
9
+ export {
10
+ e as default
11
+ };
@@ -0,0 +1 @@
1
+ "use strict";function r(e){return new Worker(""+(typeof document>"u"?require("url").pathToFileURL(__dirname+"/../../../../assets/gltfParserOptimized.worker-DfipxPjm.js").href:new URL("../../../../assets/gltfParserOptimized.worker-DfipxPjm.js",document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&document.currentScript.src||document.baseURI).href),{name:e==null?void 0:e.name})}module.exports=r;
@@ -0,0 +1,11 @@
1
+ function r(e) {
2
+ return new Worker(
3
+ "" + new URL("../../../../assets/gltfParserOptimized.worker-DfipxPjm.js", import.meta.url).href,
4
+ {
5
+ name: e == null ? void 0 : e.name
6
+ }
7
+ );
8
+ }
9
+ export {
10
+ r as default
11
+ };
package/dist/threejs.cjs CHANGED
@@ -1,3 +1 @@
1
- "use strict";var j=Object.defineProperty;var q=(x,e,t)=>e in x?j(x,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):x[e]=t;var o=(x,e,t)=>q(x,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./useBatchGLTFLoader-CDNvTMtt.cjs"),i=require("./PredictiveLoader-CpRi-ULa.cjs"),R=require("./ImageLoader-DzG6sgbB.cjs"),S=require("./modelOptimizer-A0Cs6f9e.cjs"),r=require("three"),B="1.4.0",X=50,Y=20,Z=20,E={TOP:"top",RIGHT:"right",LEFT:"left",ISO:"iso"},G={enableDamping:!0,dampingFactor:.25,screenSpacePanning:!1,minDistance:.1,maxDistance:1e3,maxPolarAngle:r.MathUtils.degToRad(60)};class I{constructor(e,t){o(this,"isReady",!1);o(this,"scene",null);o(this,"camera",null);o(this,"renderer",null);o(this,"control",null);o(this,"css3dRenderer",null);o(this,"el",null);o(this,"renderRequested",!1);o(this,"selector",null);o(this,"eventsListener",{});o(this,"stats",null);o(this,"isDispose",!1);o(this,"version","0.0.0");o(this,"boxHelper",null);o(this,"initOpt",{css3d:!1,stats:!1,renderType:"change",initListener:!0,initialFov:50,control:{init:!0,options:{}}});o(this,"setup",e=>{if(this.isDispose=!1,this.selector=e,this.el=document.querySelector(e),!this.el){console.error(`ThreeIns: 找不到元素 ${e}`);return}const[t,h]=this.getTargetSize();if(this.updateCameraFOV(t,h),this.camera.position.set(0,0,0),this.camera.lookAt(0,0,0),this.camera.updateProjectionMatrix(),this.renderer.setPixelRatio(window.devicePixelRatio),this.renderer.setSize(t,h),this.el.appendChild(this.renderer.domElement),this.initOpt.control&&this.initOpt.control.init){this.control=i.createOrbitControl(this.camera,this.renderer.domElement);const s=Object.assign(G,this.initOpt.control.options||{});Object.keys(s).forEach(F=>{this.control[F]=s[F]})}setTimeout(()=>{this.isReady=!0},Y),this.initOpt.stats&&this.initStats(),this.initOpt.css3d&&this.initCss3dRenderer(),this.initOpt.renderType==="loop"?this.animate():this.initOpt.renderType==="change"&&this.control&&this.control.addEventListener("change",this.requestRenderIfNotRequested),this.initListener()});o(this,"onContextLost",e=>{e.preventDefault(),this.animationFrameId&&cancelAnimationFrame(this.animationFrameId)});o(this,"onContextRestored",e=>{e.preventDefault(),this.dispose(),setTimeout(()=>{this.setup(this.selector)},Z)});o(this,"initListener",()=>{this.initOpt.initListener&&window&&window.addEventListener("resize",this.onResize,!1),this.renderer.domElement.addEventListener("webglcontextlost",this.onContextLost,!1),this.renderer.domElement.addEventListener("webglcontextrestored",this.onContextRestored,!1)});o(this,"removeListener",()=>{window&&window.removeEventListener("resize",this.onResize,!1),this.renderer&&this.renderer.domElement&&(this.renderer.domElement.removeEventListener("webglcontextlost",this.onContextLost,!1),this.renderer.domElement.removeEventListener("webglcontextrestored",this.onContextRestored,!1))});o(this,"animate",()=>{this.isDispose||(this.initOpt.renderType==="loop"&&this.onRender(),this.animationFrameId=requestAnimationFrame(this.animate))});o(this,"onRender",()=>{this.isDispose||(this.renderRequested=!1,this.stats&&this.stats.update(),this.control&&this.control.update(),this.renderer.render(this.scene,this.camera),this.css3dRenderer&&this.css3dRenderer.render(this.scene,this.camera),this.eventsListener.onRender&&this.eventsListener.onRender.length&&this.eventsListener.onRender.forEach(e=>e()))});o(this,"requestRenderIfNotRequested",()=>{this.renderRequested||(this.renderRequested=!0,requestAnimationFrame(()=>{this.onRender()}))});o(this,"onResize",()=>{this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout(()=>{const[e,t]=this.getTargetSize();this.updateCameraFOV(e,t),this.camera.lookAt(this.scene.position),this.renderer.setSize(e,t),this.css3dRenderer&&this.css3dRenderer.setSize(e,t),this.onRender()},X)});o(this,"frameArea",(e,t)=>(console.warn(`[ThreeIns] frameArea() 已弃用,建议使用 setView() 方法。
2
- 旧用法: threeIns.frameArea(model, scale)
3
- 新用法: threeIns.setView(model, ViewType.ISO, { scale })`),this.setView(e,E.ISO,{scale:t,animate:!1,showBox:!1})));o(this,"setView",(e,t,h={})=>{let s=h.scale||.8,F=h.offset||null,b=h.showBox||!1,H=h.boxColor||16776960,O=h.animate!==void 0?h.animate:!0,z=h.duration||1e3;const T=new r.Box3().setFromObject(e);let d=T.getCenter(new r.Vector3);F&&d.add(F);const w={top:new r.Vector3(0,1,0),right:new r.Vector3(2,1,1).normalize(),left:new r.Vector3(-2,1,1).normalize(),iso:new r.Vector3(0,1,1).normalize()},M=w[t]||w.iso,n=T.getSize(new r.Vector3),v=this.camera.aspect,a=r.MathUtils.degToRad(this.camera.fov*.5),P=r.MathUtils.degToRad(80),m=Math.min(Math.atan(Math.tan(a)*v),P);let u;if(t==="top"){const l=n.x*.5/(Math.tan(m)*s),c=n.z*.5/(Math.tan(a)*s);u=Math.max(l,c)}else if(t==="right"||t==="left"){const l=n.y*.5/(Math.tan(a)*s),c=n.z*.5/(Math.tan(a)*s);u=Math.max(l,c)}else{const l=n.x*.5/(Math.tan(m)*s),c=n.y*.5/(Math.tan(a)*s),f=n.z*.5/(Math.tan(a)*s);u=Math.max(l,c,f)}const p=M.clone().multiplyScalar(u).add(d);if(b&&(console.log("📍 相机位置验证:"),console.log(" - 方向向量:",M),console.log(" - 距离:",u.toFixed(2)),console.log(" - 包围盒中心:",d),console.log(" - 计算公式: direction * distance + boxCenter"),console.log(" - 目标位置:",p),console.log(" - 实际相机与中心的距离:",p.clone().sub(d).length().toFixed(2))),b?(this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),this.boxHelper=new r.Box3Helper(T,H),this.scene.add(this.boxHelper)):this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),O){const l=this.camera.position.clone(),c=this.control?this.control.target.clone():new r.Vector3(0,0,0),f=d,V=Date.now(),C=()=>{const A=Date.now()-V,y=Math.min(A/z,1),D=1-Math.pow(1-y,3);if(this.camera.position.lerpVectors(l,p,D),this.control){const L=new r.Vector3;L.lerpVectors(c,f,D),this.control.target.copy(L),this.camera.lookAt(L)}else this.camera.lookAt(d);this.camera.updateProjectionMatrix(),y<1?requestAnimationFrame(C):(this.camera.position.copy(p),this.camera.lookAt(d),this.camera.updateProjectionMatrix(),this.control&&(this.control.target.copy(d),this.control.update()),this.onRender())};C()}else this.camera.position.copy(p),this.camera.lookAt(d),this.camera.updateProjectionMatrix(),this.control&&(this.control.target.copy(d),this.control.update()),this.onRender();if(b){if(console.log("🎥 视角切换信息:"),console.log(" - 视角类型:",t),console.log(" - 相机位置:",p),console.log(" - 观察目标:",d),console.log(" - 方向向量:",M),console.log(" - 包围盒尺寸:",n),console.log(" - 包围盒中心:",T.getCenter(new r.Vector3)),console.log(" - 水平 FOV:",r.MathUtils.radToDeg(m*2).toFixed(2)+"°"),console.log(" - 垂直 FOV:",r.MathUtils.radToDeg(a*2).toFixed(2)+"°"),console.log(" - 宽高比:",v.toFixed(4)),console.log(" - 模型宽度:",n.x.toFixed(2)),console.log(" - 模型高度:",n.y.toFixed(2)),console.log(" - 模型深度:",n.z.toFixed(2)),console.log(" - 传入的 scale 参数:",s),t==="top"){const l=n.x*.5/(Math.tan(m)*s),c=n.z*.5/(Math.tan(a)*s);console.log(" - 模型 X 尺寸 (宽度):",n.x.toFixed(2)),console.log(" - 模型 Z 尺寸 (深度):",n.z.toFixed(2)),console.log(" - tan(halfFovX):",Math.tan(m).toFixed(4)),console.log(" - tan(halfFovY):",Math.tan(a).toFixed(4)),console.log(" - X方向距离计算: (",(n.x*.5).toFixed(2),") / (",Math.tan(m).toFixed(4)," *",s,") =",l.toFixed(2)),console.log(" - Z方向距离计算: (",(n.z*.5).toFixed(2),") / (",Math.tan(a).toFixed(4)," *",s,") =",c.toFixed(2)),console.log(" - X方向距离 (scale="+s+"):",l.toFixed(2)),console.log(" - Z方向距离 (scale="+s+"):",c.toFixed(2))}else if(t==="right"||t==="left"){const l=n.y*.5/(Math.tan(a)*s),c=n.z*.5/(Math.tan(a)*s);console.log(" - Y方向距离 (scale="+s+"):",l.toFixed(2)),console.log(" - Z方向距离 (scale="+s+"):",c.toFixed(2))}else{const l=n.x*.5/(Math.tan(m)*s),c=n.y*.5/(Math.tan(a)*s),f=n.z*.5/(Math.tan(a)*s);console.log(" - 模型 X 尺寸 (宽度):",n.x.toFixed(2)),console.log(" - 模型 Y 尺寸 (高度):",n.y.toFixed(2)),console.log(" - 模型 Z 尺寸 (深度):",n.z.toFixed(2)),console.log(" - tan(halfFovX):",Math.tan(m).toFixed(4)),console.log(" - tan(halfFovY):",Math.tan(a).toFixed(4)),console.log(" - X方向距离计算: (",(n.x*.5).toFixed(2),") / (",Math.tan(m).toFixed(4)," *",s,") =",l.toFixed(2)),console.log(" - Y方向距离计算: (",(n.y*.5).toFixed(2),") / (",Math.tan(a).toFixed(4)," *",s,") =",c.toFixed(2)),console.log(" - Z方向距离计算: (",(n.z*.5).toFixed(2),") / (",Math.tan(a).toFixed(4)," *",s,") =",f.toFixed(2)),console.log(" - X方向距离 (scale="+s+"):",l.toFixed(2)),console.log(" - Y方向距离 (scale="+s+"):",c.toFixed(2)),console.log(" - Z方向距离 (scale="+s+"):",f.toFixed(2)),console.log(" - 最大距离 (Max):",Math.max(l,c,f).toFixed(2))}console.log(" - 最终距离:",u.toFixed(2)),console.log(" - 缩放比例:",s),console.log(" - 动画:",O?"是 ("+z+"ms)":"否")}return{position:p,target:d,distance:u,viewType:t}});o(this,"on",(e,t)=>!e||!t||typeof t!="function"?(console.warn("ThreeIns.on: 无效的参数"),()=>{}):(this.eventsListener[e]||(this.eventsListener[e]=[]),this.eventsListener[e].push(t),()=>this.off(e,t)));this.isReady=!1,this.scene=new r.Scene({}),this.camera=new r.PerspectiveCamera(50,1,.1,2e3),this.renderer=new r.WebGLRenderer({antialias:!0,alpha:!0,precision:"mediump",logarithmicDepthBuffer:!0}),this.version=B,this.onContextLost=this.onContextLost.bind(this),this.onContextRestored=this.onContextRestored.bind(this),this.onResize=this.onResize.bind(this),this.animate=this.animate.bind(this),this.resizeTimer=null,this.animationFrameId=null,t&&(this.initOpt=Object.assign(this.initOpt,t)),e&&this.setup(e)}updateCameraFOV(e,t){const h=this.initOpt.initialFov||50,s=Math.tan(Math.PI/180*h/2);this.camera.aspect=e/t,this.camera.fov=360/Math.PI*Math.atan(s*(t/e)),this.camera.updateProjectionMatrix()}initStats(){this.stats=new i.Stats,this.stats.dom.style.cssText="position:absolute;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",this.el.appendChild(this.stats.dom)}initCss3dRenderer(){this.css3dRenderer=new i.CSS3DRenderer;const[e,t]=this.getTargetSize();this.css3dRenderer.setSize(e,t),this.css3dRenderer.domElement.style.position="absolute",this.css3dRenderer.domElement.style.pointerEvents="none",this.css3dRenderer.domElement.style.top=0,this.css3dRenderer.domElement.style.left=0,this.el.appendChild(this.css3dRenderer.domElement)}getTargetSize(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement?[window.innerWidth,window.innerHeight]:this.el?!document.body.contains(this.el)&&(console.warn(`ThreeIns: 缓存的元素已失效,重新查询 ${this.selector}`),this.el=document.querySelector(this.selector),!this.el)?[0,0]:[this.el.clientWidth,this.el.clientHeight]:[0,0]}off(e,t){if(!e){this.eventsListener={};return}this.eventsListener[e]&&(t?this.eventsListener[e]=this.eventsListener[e].filter(h=>h!==t):this.eventsListener[e]=[])}dispose(){this.isDispose||(this.isDispose=!0,this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=null),this.removeListener(),this.eventsListener={},this.stats&&this.stats.dom&&(this.stats.dom.remove(),this.stats=null),this.css3dRenderer&&(this.css3dRenderer.domElement.remove(),this.css3dRenderer=null),this.boxHelper&&(this.scene.remove(this.boxHelper),this.boxHelper=null),this.scene&&(i.disposeThreeObject(this.scene),this.scene=null),this.renderer&&(this.renderer.dispose(),this.renderer.domElement&&this.renderer.domElement.remove(),this.renderer=null),this.control&&(this.control.dispose(),this.control=null),this.camera=null,this.el=null,this.selector=null,console.log("ThreeIns: 资源已清理完成"))}}o(I,"ViewType",E);exports.intersectColor=g.intersectColor;exports.obbObjects=g.obbObjects;exports.useBatchGLTFLoader=g.useBatchGLTFLoader;exports.useObb=g.useObb;exports.useRaycaster=g.useRaycaster;exports.useThreeJs=g.useThreeJs;exports.CacheMonitor=i.CacheMonitor;exports.ErrorType=i.ErrorType;exports.IDBCache=i.IDBCache;exports.ModelLoadError=i.ModelLoadError;exports.PredictiveLoader=i.PredictiveLoader;exports.ProgressiveSceneBuilder=i.ProgressiveSceneBuilder;exports.RetryHelper=i.RetryHelper;exports.cacheMonitor=i.cacheMonitor;exports.createArrowHelper=i.createArrowHelper;exports.createAxesHelper=i.createAxesHelper;exports.createBox3Helper=i.createBox3Helper;exports.createCameraHelper=i.createCameraHelper;exports.createGridHelper=i.createGridHelper;exports.createMapControls=i.createMapControls;exports.createOrbitControl=i.createOrbitControl;exports.createRaycaster=i.createRaycaster;exports.createStats=i.createStats;exports.dataToObject3D=i.dataToObject3D;exports.dataToObject3DSync=i.dataToObject3DSync;exports.disposeThreeObject=i.disposeThreeObject;exports.object3DToData=i.object3DToData;exports.object3DToDataSync=i.object3DToDataSync;exports.predictiveLoader=i.predictiveLoader;exports.rebuildScene=i.rebuildScene;exports.useGLTFLoader=i.useGLTFLoader;exports.ImageLoader=R.ImageLoader;exports.createInfoPlane=R.createInfoPlane;exports.createTagPlane=R.createTagPlane;exports.getCommonParent=R.getCommonParent;exports.initEnvImage=R.initEnvImage;exports.ModelOptimizer=S.ModelOptimizer;exports.modelOptimizer=S.modelOptimizer;exports.ThreeIns=I;exports.ViewType=E;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./packages/threejs/src/hooks/useThreeJs.cjs"),p=require("./packages/threejs/src/hooks/useRaycaster.cjs"),t=require("./packages/threejs/src/hooks/useObb.cjs"),b=require("./packages/threejs/src/hooks/useGLTFLoader.cjs"),T=require("./packages/threejs/src/hooks/useBatchGLTFLoader.cjs"),e=require("./packages/threejs/src/utils/helper.cjs"),a=require("./packages/threejs/src/utils/css3dHelper.cjs"),m=require("./packages/threejs/src/utils/disposeObject.cjs"),L=require("./packages/threejs/src/utils/common.cjs"),c=require("./packages/threejs/src/utils/ImageLoader.cjs"),r=require("./packages/threejs/src/utils/modelSerialize.cjs"),i=require("./packages/threejs/src/utils/CacheMonitor.cjs"),o=require("./packages/threejs/src/utils/RetryHelper.cjs"),s=require("./packages/threejs/src/utils/PredictiveLoader.cjs"),n=require("./packages/threejs/src/utils/sceneRebuilder.cjs"),d=require("./packages/threejs/src/utils/modelOptimizer.cjs"),h=require("./packages/threejs/src/instance/IDBCache.cjs"),l=require("./packages/threejs/src/instance/threeIns.cjs");exports.useThreeJs=u.useThreeJs;exports.useRaycaster=p.useRaycaster;exports.intersectColor=t.intersectColor;exports.obbObjects=t.obbObjects;exports.useObb=t.useObb;exports.useGLTFLoader=b.useGLTFLoader;exports.useBatchGLTFLoader=T.useBatchGLTFLoader;exports.createArrowHelper=e.createArrowHelper;exports.createAxesHelper=e.createAxesHelper;exports.createBox3Helper=e.createBox3Helper;exports.createCameraHelper=e.createCameraHelper;exports.createGridHelper=e.createGridHelper;exports.createMapControls=e.createMapControls;exports.createOrbitControl=e.createOrbitControl;exports.createRaycaster=e.createRaycaster;exports.createStats=e.createStats;exports.createInfoPlane=a.createInfoPlane;exports.createTagPlane=a.createTagPlane;exports.disposeThreeObject=m.disposeThreeObject;exports.getCommonParent=L.getCommonParent;exports.ImageLoader=c.ImageLoader;exports.initEnvImage=c.initEnvImage;exports.dataToObject3D=r.dataToObject3D;exports.dataToObject3DSync=r.dataToObject3DSync;exports.object3DToData=r.object3DToData;exports.object3DToDataSync=r.object3DToDataSync;exports.CacheMonitor=i.CacheMonitor;exports.cacheMonitor=i.cacheMonitor;exports.ErrorType=o.ErrorType;exports.ModelLoadError=o.ModelLoadError;exports.RetryHelper=o.RetryHelper;exports.PredictiveLoader=s.PredictiveLoader;exports.predictiveLoader=s.predictiveLoader;exports.ProgressiveSceneBuilder=n.ProgressiveSceneBuilder;exports.rebuildScene=n.rebuildScene;exports.ModelOptimizer=d.ModelOptimizer;exports.modelOptimizer=d.modelOptimizer;exports.IDBCache=h.IDBCache;exports.ThreeIns=l.ThreeIns;exports.ViewType=l.ViewType;