@omrips/viewstl 2.0.0-rc.5 → 2.0.0-rc.7
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.
- package/README.md +3 -3
- package/build/THIRD-PARTY-NOTICES.txt +1006 -1006
- package/build/cad/occt-import-js.source.txt +19 -19
- package/build/chunks/archive-QK7XZSVT.js +1 -0
- package/build/chunks/{cad-4JYHORYZ.js → cad-QGVO6UGR.js} +1 -1
- package/build/chunks/chunk-6AW5U52H.js +1 -0
- package/build/chunks/{chunk-Y6VY64LY.js → chunk-CVGQTUJ5.js} +2 -2
- package/build/chunks/chunk-FUXP2W57.js +1 -0
- package/build/chunks/chunk-LFTKNL2V.js +1 -0
- package/build/chunks/{chunk-PQYEV7WH.js → chunk-T6PPRDOE.js} +1 -1
- package/build/chunks/chunk-V6KYGP62.js +1 -0
- package/build/chunks/{export-VM6OQCQJ.js → export-2CFMTPJ3.js} +3 -3
- package/build/chunks/{export-cad-QXCB6UDU.js → export-cad-XOXIE726.js} +1 -1
- package/build/chunks/{export-zip-PVXETVLK.js → export-zip-I2ADLFJI.js} +1 -1
- package/build/chunks/measure-3LDALPCN.js +1 -0
- package/build/chunks/print-check-WWHTT5PW.js +1 -0
- package/build/chunks/scene-export-7P6ZJOG3.js +1 -0
- package/build/chunks/scene-reader-WXTRELY3.js +1 -0
- package/build/node/analysis-worker.js +2 -1
- package/build/stl_viewer.min.js +6 -5
- package/build/viewstl.cjs +1246 -403
- package/build/viewstl.d.cts +48 -0
- package/build/viewstl.d.ts +48 -0
- package/build/viewstl.js +1246 -402
- package/build/viewstl.min.js +6 -5
- package/build/viewstl.worker.js +1 -1
- package/docs/releases/2.0.0-rc.7.md +16 -0
- package/docs/v2-usage.md +39 -0
- package/docs/v2-verification.md +71 -0
- package/package.json +2 -2
- package/build/chunks/archive-JU75RPTU.js +0 -1
- package/build/chunks/chunk-IK3WL53C.js +0 -1
- package/build/chunks/chunk-OP2L7L4N.js +0 -1
- package/build/chunks/print-check-NJ4IONC5.js +0 -1
- package/build/chunks/scene-export-ZIXMUNLI.js +0 -1
- package/build/chunks/scene-reader-JGHERXR2.js +0 -1
- package/docs/releases/2.0.0-rc.5.md +0 -46
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-LFTKNL2V.js";import{b as S}from"./chunk-CVGQTUJ5.js";import"./chunk-ZSV4PTIA.js";import{b as y}from"./chunk-FUXP2W57.js";import"./chunk-W5KVLGVR.js";import"./chunk-6AW5U52H.js";var _=["x","y","z","rotationx","rotationy","rotationz","scalex","scaley","scalez"],c=e=>e.startsWith("scale"),f=(e,n,r=!1)=>{if(typeof e!="number"||!Number.isFinite(e)||Math.abs(e)>Number.MAX_SAFE_INTEGER||r&&e<=0)throw new Error(`Invalid animation ${n}`);return e},h=(e,n)=>{if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`Invalid animation ${n}`);return e};function k(e){return Object.fromEntries(_.map(n=>[n,f(e[n]??(c(n)?e.scale??1:0),n,c(n))]))}function b(e){h(e,"definition");let n={},r=new Set;for(let t of["delta","exact"]){if(e[t]==null)continue;let o=h(e[t],t),s={},a=f(o.msec??300,"duration",!0);if(o.loop!==void 0&&typeof o.loop!="boolean")throw new Error("Animation loop must be a boolean");let i=t==="delta"&&!!o.loop;for(let l of _){let m=o[l]??(c(l)?o.scale:void 0);if(m!==void 0){if(r.has(l))throw new Error(`Animation delta/exact conflict: ${l}`);if(f(m,l,t==="exact"&&c(l)),i&&c(l)&&m<0)throw new Error("Looping scale deltas cannot be negative");s[l]=m,r.add(l)}}if(!Object.keys(s).length)throw new Error("Animation track needs a transform");n[t]={...s,msec:a,...i?{loop:!0}:{}}}if(!Object.keys(n).length)throw new Error("Animation needs delta or exact");return n}function x(e){if(h(e,"playback state"),e.version!==1||typeof e.paused!="boolean")throw new Error("Invalid animation playback state version or paused flag");let n=f(e.elapsed_ms,"elapsed time");if(n<0)throw new Error("Invalid animation elapsed time");h(e.origin,"origin");for(let r of _)f(e.origin[r],r,c(r));if(!Array.isArray(e.center)||e.center.length!==3)throw new Error("Invalid animation pivot");return{version:1,elapsed_ms:n,paused:e.paused,origin:k(e.origin),center:e.center.map(r=>f(r,"pivot"))}}function z(e,n,r){let t=b(e),o=r==null?null:x(r),s=o?.origin??k(n),a=Object.entries(t).map(([l,m])=>{let p=Object.entries(m).filter(([u])=>_.includes(u));if(l==="delta")for(let[u,P]of p)f(s[u]+P,`${u} endpoint`,c(u));return{mode:l,values:p,duration:m.msec,loop:!!m.loop,done:!1}}),i={animation:t,origin:s,tracks:a,elapsed_ms:o?.elapsed_ms??0,paused:o?.paused??!1,last_time:null};return O({...i,tracks:a.map(l=>({...l}))},{}),i}function O(e,n){let r=[];for(let o of e.tracks){if(o.done)continue;let s=e.elapsed_ms/o.duration,a=o.loop?s:Math.min(s,1);for(let[i,l]of o.values){let m=e.origin[i],p=o.mode==="delta"?m+l*a:m*(1-a)+l*a;r.push([i,f(p,`${i} result`,c(i))])}}let t=!1;for(let[o,s]of r)t||=c(o)&&n[o]!==s,n[o]=s;for(let o of e.tracks)!o.loop&&e.elapsed_ms>=o.duration&&(o.done=!0);return t&&(n._stats=null),e.tracks.some(o=>!o.done)}var g=["x","y","z"];function E(e){if(!["mm","inch"].includes(e))throw new Error("Choose mm or inch");return e}function A(e){if(!e||e.version!==1||!Array.isArray(e.baseline_mm)||e.baseline_mm.length!==3||e.baseline_mm.some(n=>!Number.isFinite(n)||n<0||n>1e12)||typeof e.editable!="boolean"||e.unit_factor!==void 0&&(!Number.isFinite(e.unit_factor)||e.unit_factor<=0||e.unit_factor>1e12))throw new Error("Invalid saved model size");return{version:1,baseline_mm:[...e.baseline_mm],file_units:E(e.file_units),editable:e.editable,unit_factor:e.unit_factor??1}}function M(e){if(!Array.isArray(e)||e.length>32)throw new Error("Save up to 32 camera views");let n=new Set;return e.map(r=>{let t=typeof r?.name=="string"?r.name.trim():"";if(!t||t.length>80||/[\x00-\x1f]/.test(t)||n.has(t))throw new Error("Use a unique view name of 1\u201380 characters");n.add(t);let o={};for(let i of["position","target","up"]){if(!r.camera?.[i]||g.some(l=>!Number.isFinite(r.camera[i][l])||Math.abs(r.camera[i][l])>1e15))throw new Error("Invalid saved camera");o[i]=Object.fromEntries(g.map(l=>[l,r.camera[i][l]]))}let s=g.map(i=>o.position[i]-o.target[i]),a=g.map(i=>o.up[i]);if(Math.hypot(s[1]*a[2]-s[2]*a[1],s[2]*a[0]-s[0]*a[2],s[0]*a[1]-s[1]*a[0])<1e-12)throw new Error("Degenerate saved camera");return{name:t,camera:o}})}var F=["flat","smooth","wireframe","edges","mesh","xray","studio","orientation"];function j(e,n){if(!F.includes(e))throw new Error("Invalid display mode");if(typeof n!="boolean")throw new Error("smooth_shading must be a boolean");return{display:e,smooth_shading:e==="smooth"||n}}function I(e){if(e==null)return null;if(!["x","y","z"].includes(e.axis))throw new Error("Section axis must be x, y or z");if(!Number.isFinite(e.position)||e.position<0||e.position>1)throw new Error("Section position must be between 0 and 1");if(e.flip!==void 0&&typeof e.flip!="boolean")throw new Error("Section flip must be a boolean");return{axis:e.axis,position:e.position,flip:e.flip??!1}}var w=["x","y","z"],d=(e,n,r=!1)=>{if(typeof e!="number"||!Number.isFinite(e)||r&&e<=0)throw new Error(`Invalid scene ${n}`);return e},N=e=>String(e||"").match(/\.(vsb|vsj)(?:[?#]|$)/i)?.[1].toLowerCase()||"";function v(e,n){if(!e||!Array.isArray(e.models)||!e.models.length||e.models.length>n.max_archive_entries)throw new Error("Invalid, empty or oversized scene manifest");let r={models:[]};e.camera_bookmarks!==void 0&&(r.camera_bookmarks=M(e.camera_bookmarks)),e.display_units!==void 0&&(r.display_units=E(e.display_units));for(let t of["center_models","auto_rotate","grid"])if(e[t]!==void 0){if(typeof e[t]!="boolean")throw new Error(`Invalid scene ${t}`);r[t]=e[t]}if(e.bg_color!==void 0&&(e.bg_color!=="transparent"&&y(e.bg_color),r.bg_color=e.bg_color),e.infinite_grid&&(r.infinite_grid={spacing:d(e.infinite_grid.spacing,"grid spacing",!0),height:d(e.infinite_grid.height,"grid height")}),e.camera_state){let t={};for(let a of["position","target","up"])t[a]=Object.fromEntries(w.map(i=>[i,d(e.camera_state[a]?.[i],"camera")]));let o=w.map(a=>t.position[a]-t.target[a]),s=w.map(a=>t.up[a]);if(!Math.hypot(...o)||!Math.hypot(...s)||!Math.hypot(o[1]*s[2]-o[2]*s[1],o[2]*s[0]-o[0]*s[2],o[0]*s[1]-o[1]*s[0]))throw new Error("Invalid scene camera");r.camera_state=t}for(let t of e.models){if(!t||typeof t.filename!="string"||!t.filename||t.filename.length>8192||/[\x00-\x1f\x7f]/.test(t.filename))throw new Error("Scene model filename is missing or invalid");if(N(t.filename))throw new Error("Nested scene references are not supported");let o={filename:t.filename};typeof t.orig_filename=="string"&&(o.orig_filename=t.orig_filename.slice(0,200));for(let s of w)for(let a of["","rotation","scale"]){let i=a+s;t[i]!==void 0&&(o[i]=d(t[i],i,a==="scale"))}if(t.scale!==void 0&&(o.scale=d(t.scale,"scale",!0)),t.opacity!==void 0&&(o.opacity=d(t.opacity,"opacity"),o.opacity<0||o.opacity>1))throw new Error("Invalid scene opacity");if(t.color!=null&&(t.color!=="transparent"&&y(t.color),o.color=t.color),o.units=t.units??"mm",!["mm","inch"].includes(o.units))throw new Error("Invalid scene units");if(Object.assign(o,j(t.display??"flat",t.smooth_shading??t.display==="smooth")),o.section=I(t.section),t.view_edges!==void 0&&typeof t.view_edges!="boolean")throw new Error("Invalid scene edges");if(o.view_edges=!!t.view_edges,t.animation!=null&&(o.animation=b(t.animation)),t.animation_state!=null){if(!o.animation)throw new Error("Playback state needs an animation");o.animation_state=x(t.animation_state)}if(o.animation&&z(o.animation,o,o.animation_state),t.size_state!==void 0&&(o.size_state=A(t.size_state)),t.display_name!==void 0){if(typeof t.display_name!="string"||t.display_name.length>1024)throw new Error("Invalid model name");o.display_name=t.display_name}r.models.push(o)}return r}function te(e,n,r){let t=Object.create(null),o=e;if(n==="vsb"){let s=S(e,r);if(o=s.get("json_data.vsj"),!o)throw new Error("VSB manifest json_data.vsj is missing");let a=v(JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(o)),r);for(let i of a.models){let l=s.get(i.filename);if(!l)throw new Error("VSB model file is missing: "+i.filename);t[i.filename]=l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength)}return{scene:a,files:t}}return{scene:v(JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(o)),r),files:null}}export{te as readSceneDocument};
|