/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/three-3mf-exporter@45.2.0/dist/index.mjs
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
import JSZip from"jszip";import{Vector3,Color}from"three";const defaultPrintConfig={printer_name:"Bambu Lab A1",filament:"Bambu PLA Basic @BBL A1",printableWidth:256,printableDepth:256,printableHeight:256,printableArea:["0x0","256x0","256x256","0x256"],printerSettingsId:"Bambu Lab A1 0.4 nozzle",printSettingsId:"0.20mm Standard @BBL A1",compression:"standard",metadata:{Application:"BambuStudio-02.04.00.70",ApplicationTitle:"Exported 3D Model"}},JSZipCompressionMap={standard:"DEFLATE",none:"STORE"};async function exportTo3MF(e,t){const n=new JSZip,a=Object.assign({},defaultPrintConfig,t),i=JSZipCompressionMap[a.compression],o=[],r=[],s=[],l=e=>{if("Mesh"===e.type)return(e=>{e.updateMatrixWorld(!0);const t=e.geometry,n=t.attributes.position,a=t.index;let i=null;if(e.material){const t=new Color,n=Array.isArray(e.material)?e.material[0]:e.material;n&&"color"in n&&n.color?t.copy(n.color):t.set(8421504);const a=r.find((e=>e.color.r===t.r&&e.color.g===t.g&&e.color.b===t.b));if(a)i=a;else{const n=r.length+1;i={id:r.length+1,color:t,name:e.name?`${e.name}_material`:`material_${r.length}`,extruder:n},r.push(i)}}const s=o.length+1,l={id:s,type:"mesh",vertices:[],triangles:[],material:i,name:e.name||`Mesh-${s}`,subComponents:[],uuid:generateUUID()},m=new Map,d=e=>{const t=new Vector3;t.fromBufferAttribute(n,e);const a=`${t.x},${t.y},${t.z}`;return m.has(a)||(m.set(a,l.vertices.length),l.vertices.push({x:t.x,y:t.y,z:t.z})),m.get(a)};if(a)for(let e=0;e<a.count;e+=3)l.triangles.push({v1:d(a.getX(e)),v2:d(a.getX(e+1)),v3:d(a.getX(e+2))});else for(let e=0;e<n.count;e+=3)l.triangles.push({v1:d(e),v2:d(e+1),v3:d(e+2)});return o.push(l),s})(e);if("Group"===e.type||"Object3D"===e.type||"Scene"===e.type){const t=[];if(e.updateMatrixWorld(!0),e.children.forEach((n=>{const a=l(n);if(-1!==a){const i=n.matrixWorld.clone().premultiply(e.matrixWorld.clone().invert());t.push({objectId:a,transform:i})}})),t.length>0){const n=o.length+1;return o.push({id:n,type:"assembly",subComponents:t,name:e.name||`Group-${n}`,vertices:[],triangles:[],material:null,uuid:generateUUID()}),n}}return-1},m="Scene"===e.type?e.children:[e],d=[];m.forEach((e=>{const t=l(e);if(-1!==t){e.updateMatrix();const n=e.matrix.clone(),a=o.find((e=>e.id===t)),i=e=>"assembly"===e.type?e.subComponents.flatMap((e=>{const t=o.find((t=>t.id===e.objectId));return i(t).map((t=>t.clone().applyMatrix4(e.transform)))})):e.vertices.map((e=>new Vector3(e.x,e.y,e.z)));i(a).forEach((e=>{e.applyMatrix4(n),d.push(e)})),s.push({objectId:t,transformMatrix:n,uuid:generateUUID()})}}));let p={x:1/0,y:1/0,z:1/0},c={x:-1/0,y:-1/0,z:-1/0};d.length>0?d.forEach((e=>{p.x=Math.min(p.x,e.x),p.y=Math.min(p.y,e.y),p.z=Math.min(p.z,e.z),c.x=Math.max(c.x,e.x),c.y=Math.max(c.y,e.y),c.z=Math.max(c.z,e.z)})):(p={x:0,y:0,z:0},c={x:0,y:0,z:0});const x=(p.x+c.x)/2,u=(p.y+c.y)/2,f=(p.z,c.z,{x:a.printableWidth/2-x,y:a.printableDepth/2-u,z:0-p.z}),g=createMainModelXML(o,s,f,a),h=createModelSettingsXML(o,s),y=createProjectSettingsConfig(r,a);return n.file("_rels/.rels",relationshipsXML()),n.file("3D/3dmodel.model",g),n.file("Metadata/model_settings.config",h),n.file("Metadata/project_settings.config",y),n.file("[Content_Types].xml",contentTypesXML()),await n.generateAsync({type:"blob",mimeType:"application/vnd.ms-package.3dmanufacturing-3dmodel+xml",compression:i})}function createMainModelXML(e,t,n,a){const i=[],o=a.metadata;i.push(`<metadata name="CreationDate">${(new Date).toISOString()}</metadata>`);for(const e in o)i.push(`<metadata name="${e}">${o[e]}</metadata>`);const r=e.map((e=>{if("assembly"===e.type){const t=e.subComponents.map((e=>{const t=e.transform.elements,n=`${t[0].toFixed(5)} ${t[1].toFixed(5)} ${t[2].toFixed(5)} ${t[4].toFixed(5)} ${t[5].toFixed(5)} ${t[6].toFixed(5)} ${t[8].toFixed(5)} ${t[9].toFixed(5)} ${t[10].toFixed(5)} ${t[12].toFixed(5)} ${t[13].toFixed(5)} ${t[14].toFixed(5)}`;return`<component objectid="${e.objectId}" transform="${n}" />`})).join("");return`<object id="${e.id}" type="model" name="${e.name}"><components>${t}</components></object>`}{const t=e.vertices.map((e=>`<vertex x="${e.x.toFixed(5)}" y="${e.y.toFixed(5)}" z="${e.z.toFixed(5)}" />`)).join(" "),n=e.triangles.map((e=>`<triangle v1="${e.v1}" v2="${e.v2}" v3="${e.v3}" />`)).join(" ");return`<object id="${e.id}" type="model" name="${e.name}"><mesh><vertices>${t}</vertices><triangles>${n}</triangles></mesh></object>`}})).join("\n"),s=t.map((e=>{const t=e.transformMatrix.elements,a=t[12]+n.x,i=t[13]+n.y,o=t[14]+n.z,r=`${t[0].toFixed(5)} ${t[1].toFixed(5)} ${t[2].toFixed(5)} ${t[4].toFixed(5)} ${t[5].toFixed(5)} ${t[6].toFixed(5)} ${t[8].toFixed(5)} ${t[9].toFixed(5)} ${t[10].toFixed(5)} ${a.toFixed(5)} ${i.toFixed(5)} ${o.toFixed(5)}`;return`<item objectid="${e.objectId}" transform="${r}" printable="1" />`})).join("\n");return`<?xml version="1.0" encoding="UTF-8"?>\n<model unit="millimeter" xml:lang="en-US" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02" xmlns:slic3rpe="http://schemas.slic3r.org/3mf/2017/06" xmlns:p="http://schemas.microsoft.com/3dmanufacturing/production/2015/06" requiredextensions="p">\n    ${i.join("\n    ")}\n    <resources>\n${r}\n    </resources>\n    <build>\n${s}\n    </build>\n</model>`}function createModelSettingsXML(e,t){let n="",a="",i="";return t.forEach(((t,o)=>{const r=t.objectId,s=e.find((e=>e.id===r)),l=[],m=t=>{"mesh"===t.type?l.push(t):t.subComponents.forEach((t=>m(e.find((e=>e.id===t.objectId)))))};m(s);const d=l.map((e=>{const t=e.material?e.material.extruder:1;return`    <part id="${e.id}" subtype="normal_part">\n      <metadata key="name" value="${e.name}"/>\n      <metadata key="extruder" value="${t}"/>\n      <mesh_stat edges_fixed="0" degenerate_facets="0" facets_removed="0" facets_reversed="0" backwards_edges="0"/>\n    </part>`})).join("\n");n+=`  <object id="${r}">\n    <metadata key="name" value="${s.name}"/>\n    <metadata key="extruder" value="1"/>\n    <metadata key="thumbnail_file" value=""/>\n${d}\n  </object>\n`,a+=`    <model_instance>\n      <metadata key="object_id" value="${r}"/>\n      <metadata key="instance_id" value="0"/>\n      <metadata key="identify_id" value="${o+1}"/>\n    </model_instance>\n`,i+=`    <assemble_item object_id="${r}" instance_id="0" offset="0 0 0"/>\n`})),`<?xml version="1.0" encoding="UTF-8"?>\n<config>\n${n}\n  <plate>\n    <metadata key="plater_id" value="1"/>\n    <metadata key="plater_name" value="plate-1"/>\n${a}\n  </plate>\n  <assemble>\n${i}\n  </assemble>\n</config>`}function createProjectSettingsConfig(e,t){const n=e.map((e=>`#${e.color.getHexString()}`));for(;n.length<2;)n.push("#FFFFFF");const a=new Set(t.different_settings_to_system||[]),i={printable_area:t.printableArea,printable_height:t.printableHeight.toString(),bed_exclude_area:[],filament_colour:n,filament_settings_id:Array.from({length:n.length}).fill(t.filament),filament_diameter:Array.from({length:n.length}).fill("1.75"),filament_is_support:Array.from({length:n.length}).fill("0"),printer_model:t.printer_name,layer_height:"0.2",wall_loops:"2",sparse_infill_density:"15%",printer_settings_id:t.printerSettingsId,printer_variant:"0.4",nozzle_diameter:["0.4"],enable_support:"0",support_type:"normal(auto)",print_settings_id:t.printSettingsId};return t.seam_position&&(i.seam_position=t.seam_position,a.add("seam_position")),a.size>0&&(i.different_settings_to_system=Array.from(a)),JSON.stringify(i)}function relationshipsXML(){return'<?xml version="1.0" encoding="UTF-8"?>\n<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">\n  <Relationship Id="rel-1" Target="/3D/3dmodel.model" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"/>\n  <Relationship Id="rel-2" Target="/Metadata/model_settings.config" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"/>\n  <Relationship Id="rel-3" Target="/Metadata/project_settings.config" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"/>\n</Relationships>'}function contentTypesXML(){return'<?xml version="1.0" encoding="UTF-8"?>\n<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">\n  <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />\n  <Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" />\n  <Default Extension="config" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" />\n  <Default Extension="png" ContentType="image/png" />\n  <Default Extension="gcode" ContentType="text/x.gcode"/>\n</Types>'}function generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))}export{defaultPrintConfig,exportTo3MF};
//# sourceMappingURL=/sm/b40c9771c1e1e8311b5e2fec477228502f5bc29c59c15cf49c93a32162ac53ad.map