{"id":2948,"date":"2026-11-02T18:07:12","date_gmt":"2026-11-02T17:07:12","guid":{"rendered":"https:\/\/parametricsolutions.de\/3d-printing\/"},"modified":"2026-11-02T18:29:52","modified_gmt":"2026-11-02T17:29:52","slug":"3d-printing","status":"publish","type":"page","link":"https:\/\/parametricsolutions.de\/de\/3d-printing\/","title":{"rendered":"3D-Druck automatisieren"},"content":{"rendered":"<style>.ps-lp, .ps-lp-end { --ink:#111; --text:#2e2e2e; --muted:#5f6368; --line:#d9dadc; --soft:#f4f4f2; --sig:#d7ff3e; font-family:\"Space Grotesk\",sans-serif; color:var(--text); font-size:16px; line-height:1.55; hyphens:none; -webkit-hyphens:none; overflow-wrap:normal; } .ps-lp *, .ps-lp-end * { box-sizing:border-box; } .ps-lp h1, .ps-lp h2, .ps-lp h3, .ps-lp-end h2, .ps-lp-end h3 { font-family:inherit; color:var(--ink); margin:0; letter-spacing:-.02em; line-height:1.1; font-weight:700; } .ps-lp p, .ps-lp-end p { margin:0; } .lp-eyebrow { display:block; font-size:13px; font-weight:500; text-transform:uppercase; letter-spacing:.09em; color:var(--muted); margin-bottom:14px; } .lp-sec { padding:72px 0 0; } .lp-sec > h2, .lp-h2 { font-size:clamp(28px,3.2vw,40px); line-height:1.2; max-width:24em; } #lp-demo { scroll-margin-top:110px; } p.lp-lead { font-size:clamp(17px,1.4vw,20px); max-width:38em; margin-top:16px; } .lp-btn { display:inline-block; padding:15px 24px; background:var(--sig); color:#16181b !important; font-weight:700; text-decoration:none !important; border:1px solid var(--sig); transition:transform .15s ease; } .lp-btn:hover { transform:translateY(-2px); } .lp-btn:focus-visible, .lp-link:focus-visible, .lp-tabs button:focus-visible, .lp-faq summary:focus-visible { outline:2px solid #16181b; outline-offset:3px; } .lp-hero .lp-btn:focus-visible, .lp-hero .lp-link:focus-visible, .lp-final a:focus-visible { outline-color:#fff; } .lp-link { color:inherit !important; font-weight:500; text-decoration:underline !important; text-underline-offset:4px; } .lp-hero, .lp-final { position:relative; isolation:isolate; color:#e9e9e6; } .lp-hero::before, .lp-final::before { content:\"\"; position:absolute; top:0; bottom:0; left:50%; width:100vw; transform:translateX(-50%); background:#16181b; z-index:-1; } body { overflow-x:clip; } .lp-hero { display:grid; grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr); gap:52px; align-items:center; padding:56px 0 60px; } .lp-hero h1 { color:#fff; font-size:clamp(36px,3.5vw,50px); hyphens:none; -webkit-hyphens:none; line-height:1.02; } .lp-hero .lp-eyebrow { color:#a9abae; } .lp-hero p.lp-lead { color:#d4d5d3; } .lp-actions { display:flex; flex-wrap:wrap; align-items:center; gap:22px; margin-top:30px; } .lp-hero .lp-link { color:#fff !important; } .lp-stage { min-width:0; } p.lp-note { font-size:13px; color:#9b9d9f; margin-top:10px; } .lp-tabs { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); border:1px solid #5a5c5e; margin-bottom:14px; } .lp-tabs button { appearance:none; font:inherit; font-size:14px; font-weight:700; background:transparent; color:#e9e9e6; border:0; border-right:1px solid #5a5c5e; border-radius:0; padding:11px 6px; min-height:44px; cursor:pointer; } .lp-tabs button:last-child { border-right:0; } .lp-tabs button:hover { background:#25282b; } .lp-tabs button[aria-selected=true] { background:var(--sig); color:#16181b; } .lp-tabs button:focus-visible, .lp-shapes button:focus-visible { outline:2px solid #fff; outline-offset:2px; } .lp-under { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:14px 24px; margin-top:12px; } .lp-shapes { display:flex; flex-wrap:wrap; } .lp-shapes button { appearance:none; font:inherit; font-size:13px; font-weight:500; background:transparent; color:#e9e9e6; border:1px solid #5a5c5e; border-radius:0; padding:7px 11px; margin-left:-1px; min-height:38px; cursor:pointer; } .lp-shapes button:first-child { margin-left:0; } .lp-shapes button:hover { background:#25282b; } .lp-shapes button[aria-pressed=true] { background:#f2f2ee; color:#16181b; border-color:#f2f2ee; } .lp-metrics { display:flex; flex-wrap:wrap; gap:6px 24px; margin:0; } .lp-metrics div { margin:0; } .lp-metrics dt { font-size:12px; color:#a9abae; font-weight:400; } .lp-metrics dd { margin:0; font-size:19px; font-weight:700; color:#fff; line-height:1.2; } .lp-sectors { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); margin-top:34px; border-top:2px solid var(--ink); } .lp-sectors article { padding:20px 22px 22px 0; display:flex; flex-direction:column; } .lp-sectors article + article { padding-left:22px; border-left:1px solid var(--line); } .lp-sectors article:last-child { padding-right:0; } .lp-sectors h3 { font-size:21px; } .lp-sectors p.lp-q { margin-top:10px; font-size:16px; } .lp-sectors h4 { font-family:inherit; font-size:12px; color:var(--ink); margin:18px 0 6px; font-weight:700; text-transform:uppercase; letter-spacing:.06em; } .lp-sectors ul { margin:0; padding:0 0 0 16px; font-size:15px; } .lp-sectors li { margin:0 0 4px; } .lp-sectors p.lp-who { margin:16px 0; font-size:14px; color:var(--muted); flex:1; } .lp-sectors .lp-link { font-size:15px; } .lp-plan { aspect-ratio:48\/36; --i:#f4f4f0; --fl:#16181b; --z:#212427; --zg:#272c12; --fx:#191b1e; --a2:#34373a; --t:#7f8285; --tm:#a7a9ab; --rt:#d7ff3e; --gw:#16181b; } .lp-plan svg { display:block; width:100%; height:100%; } .lp-plan .fl { fill:var(--fl); } .lp-plan .wo { fill:none; stroke:var(--i); stroke-width:calc(var(--k,1) * .38); stroke-linejoin:miter; } .lp-plan .wm { stroke:var(--i); stroke-width:calc(var(--k,1) * .24); stroke-linecap:square; } .lp-plan .wk { stroke:#c9cac6; stroke-width:.34; stroke-linecap:square; } .lp-plan .wi { stroke:var(--i); stroke-width:calc(var(--k,1) * .13 + .03); stroke-linecap:square; } .lp-plan .gl2 { stroke:#c9e04a; stroke-width:.07; } .lp-plan .z { fill:var(--z); } .lp-plan .zg { fill:none; } .lp-plan .pat-t { fill:url(#pt); } .lp-plan .pat-w { fill:url(#pw); } .lp-plan .pat-r { fill:url(#pr); } .lp-plan .pl { fill:none; stroke:#3a3d40; stroke-width:.025; } .lp-plan .f { fill:var(--fx); stroke:var(--i); stroke-width:.045; } .lp-plan .fs { fill:#26292c; stroke:var(--i); stroke-width:.045; } .lp-plan .fa { fill:var(--a2); stroke:var(--i); stroke-width:.035; } .lp-plan .fc { fill:#2a3a3e; stroke:var(--i); stroke-width:.045; } .lp-plan .fg { fill:#2c3a14; stroke:#b9d640; stroke-width:.03; } .lp-plan .tg { stroke:#b9d640; stroke-width:.02; } .lp-plan .fi { fill:var(--i); } .lp-plan .fl2 { fill:#1d2023; stroke:var(--i); stroke-width:.04; } .lp-plan .gapr { fill:var(--fl); } .lp-plan .c { fill:var(--i); stroke:var(--fl); stroke-width:.05; } .lp-plan .t { stroke:var(--t); stroke-width:.022; fill:none; } .lp-plan .tm { stroke:var(--tm); stroke-width:.035; } .lp-plan .tb { stroke:var(--i); stroke-width:.06; } .lp-plan .gap { stroke:var(--fl); stroke-width:calc(var(--k,1) * .32 + .04); } .lp-plan .dr { fill:none; stroke:var(--i); stroke-width:.04; } .lp-plan .gw { stroke:var(--gw); stroke-width:calc(var(--k,1) * .42 + .02); } .lp-plan .wn { stroke:var(--i); stroke-width:.05; } .lp-plan .gl { stroke:#9fc4cf; stroke-width:.03; } .lp-plan .gl3 { stroke:#9fc4cf; stroke-width:.06; } .lp-plan .fp { fill:var(--fx); stroke:#d7ff3e; stroke-width:.05; } .lp-plan .zt { fill:none; } .lp-plan .en { stroke:var(--rt); stroke-width:calc(var(--k,1) * .44); } .lp-plan .rt { fill:none; stroke:var(--rt); stroke-width:calc(var(--k,1) * .12); stroke-dasharray:calc(var(--k,1) * .45) calc(var(--k,1) * .3); stroke-linejoin:round; } .lp-plan .am { fill:var(--rt); } .lp-plan .ad { fill:var(--i); } .lp-plan text { fill:var(--i); text-anchor:middle; dominant-baseline:middle; font-family:inherit; } .lp-plan .lb { font-weight:700; paint-order:stroke; stroke:var(--fl); stroke-width:calc(var(--k,1) * .2); stroke-linejoin:round; } .lp-plan .ls { fill:#b4b6b6; paint-order:stroke; stroke:var(--fl); stroke-width:calc(var(--k,1) * .14); stroke-linejoin:round; } .lp-plan .fw { fill:#34373a; stroke:var(--i); stroke-width:.06; } .lp-hint { display:flex; flex-wrap:nowrap; align-items:center; gap:4px 9px; margin:0 0 8px; font-size:14px; color:#e9e9e6; } .ps-lp .lp-hint { margin:0 0 8px; } .lp-hint > span { width:11px; height:11px; border-radius:50%; background:var(--sig); box-shadow:0 0 0 4px rgba(215,255,62,.22); margin:0 3px; flex:none; } .lp-hint button { appearance:none; font:inherit; font-size:13px; font-weight:500; color:#fff; background:none; border:0; padding:4px 2px; margin-left:auto; text-decoration:underline; text-underline-offset:3px; cursor:pointer; transition:none !important; } .lp-hint button[hidden], .lp-shapes[hidden] { display:none; } .lp-grip { cursor:grab; touch-action:none; outline:none; } .lp-grip.c { cursor:nesw-resize; } .lp-grip.w { cursor:ew-resize; } .lp-grip.d { cursor:ns-resize; } .lp-stage .lp-plan.fashion-grip { } .lp-grip .gh { fill:transparent; } .lp-grip .gp { fill:rgba(215,255,62,.26); transform-box:fill-box; transform-origin:center; animation:lp-pulse 1.7s ease-in-out infinite; } .lp-grip .gd { fill:var(--sig); stroke:#16181b; stroke-width:calc(var(--k,1) * .16); } .lp-grip:hover .gp, .lp-grip.on .gp, .lp-grip:focus-visible .gp { fill:rgba(215,255,62,.5); } .lp-plan.dragging { cursor:grabbing; user-select:none; -webkit-user-select:none; } .lp-plan svg { touch-action:pan-y; overflow:visible; } @keyframes lp-pulse { 0%,100% { transform:scale(.85); } 50% { transform:scale(1.12); } } @media (prefers-reduced-motion:reduce) { .lp-grip .gp { animation:none; } } .lp-plan .pp { fill:#8a8d8f; stroke:var(--i); stroke-width:.025; } .lp-plan .ph { fill:var(--i); } .lp-plan .wib { fill:none; stroke:var(--i); stroke-width:.14; } .lp-shapes button[hidden] { display:none; } .lp-plan .lx { font-weight:500; } .lp-plan .ax { stroke:#55585b; stroke-width:.025; stroke-dasharray:1 .2 .15 .2; } .lp-plan .bb { fill:var(--fl); stroke:#8a8c8e; stroke-width:.035; } .lp-plan .bt { fill:#c8c9c7; } .lp-plan .dm { stroke:#7f8285; stroke-width:.025; } .lp-plan .dt { stroke:#c8c9c7; stroke-width:.05; } .lp-plan .dx { fill:#a9abae; } .lp-plan .sb1 { fill:#d9d9d5; } .lp-plan .sb2 { fill:none; stroke:#d9d9d5; stroke-width:.03; } .lp-plan .dc { fill:none; stroke:#8a8c8e; stroke-width:.035; } .lp-plan .nr { fill:#d9d9d5; } p.lp-more { margin-top:18px; font-size:16px; max-width:48em; } .lp-steps { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:0; margin-top:34px; border-top:2px solid var(--ink); } .lp-steps > div { padding:20px 22px 0 0; } .lp-steps b { display:block; font-size:14px; color:var(--muted); font-weight:500; } .lp-steps h3 { font-size:21px; margin:6px 0 8px; } .lp-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:1px; margin-top:34px; background:var(--line); border:1px solid var(--line); } .lp-grid > div { background:#fff; padding:22px; } .lp-grid h3 { font-size:19px; margin-bottom:7px; } .lp-chips { list-style:none; display:flex; flex-wrap:wrap; gap:10px; margin:22px 0 0; padding:0; } .lp-chips li { margin:0; padding:9px 15px; border:1px solid var(--ink); font-weight:500; color:var(--ink); } .lp-steps p { font-size:15px; color:var(--muted); } .lp-faq { margin-top:28px; border-top:1px solid var(--ink); max-width:880px; } .lp-faq details { border-bottom:1px solid var(--line); padding:0; } .lp-faq summary { cursor:pointer; font-weight:700; color:var(--ink); padding:17px 0; font-size:18px; } .lp-faq p { padding:0 0 18px; max-width:42em; } .lp-final { margin-top:80px; padding:72px 0; } .lp-proof { list-style:none; margin:26px 0 0; padding:18px 0 0; border-top:1px solid #3d4043; font-size:14px; color:#c8c9c7; } .lp-proof li { margin:0 0 4px; padding-left:18px; position:relative; } .lp-proof li::before { content:\"\"; position:absolute; left:0; top:.55em; width:8px; height:8px; background:var(--sig); } .lp-tabs button { position:relative; } .lp-tabs button, .lp-shapes button { transition:none !important; } .lp-stage.auto .lp-tabs button[aria-selected=true]::after { content:\"\"; position:absolute; left:0; right:0; bottom:0; height:3px; background:#16181b; transform-origin:left; animation:lp-bar 5.2s linear both; } .lp-stage.auto:hover .lp-tabs button[aria-selected=true]::after { animation-play-state:paused; } @keyframes lp-bar { from { transform:scaleX(0); } to { transform:scaleX(1); } } .lp-after { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:18px 32px; margin-top:26px; padding:28px 32px; background:var(--sig); } .ps-lp-end .lp-after h2 { font-size:clamp(22px,2.3vw,28px); color:#111; } .ps-lp-end .lp-after p { margin-top:6px; max-width:38em; color:#111; } .lp-after .lp-btn { background:#16181b; border-color:#16181b; color:#fff !important; } .lp-after .lp-btn:focus-visible { outline-color:#16181b; } .site-content:has(.ps-lp-end) { padding-bottom:0 !important; margin-bottom:0 !important; } .ps-plan__thumbs small { white-space:normal; overflow-wrap:anywhere; } .lp-final h2 { color:#fff; font-size:clamp(30px,3.6vw,48px); max-width:15em; } .lp-final p { color:#d4d5d3; max-width:38em; margin-top:16px; font-size:18px; } .lp-final a.lp-link { color:#fff !important; } .lp-demo-head { padding-bottom:26px; } .lp-demo-tag { display:inline-block; background:var(--sig); color:#16181b; font-size:13px; font-weight:700; padding:3px 9px; margin-bottom:14px; } @media (max-width:1000px) {   .lp-hero { grid-template-columns:1fr; gap:36px; padding:48px 0 54px; }       .lp-steps, .lp-sectors { grid-template-columns:repeat(2,minmax(0,1fr)); }   .lp-sectors article:nth-child(odd) { padding-left:0; border-left:0; }   .lp-sectors article:nth-child(even) { padding-right:0; }   .lp-sectors article:nth-child(n+3) { border-top:1px solid var(--line); }   .lp-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } } @media (max-width:640px) {   .ps-lp, .ps-lp-end { font-size:16px; }   .lp-sec { padding-top:54px; }   .lp-steps, .lp-grid, .lp-sectors { grid-template-columns:1fr; }   .lp-sectors article, .lp-sectors article + article { padding:20px 0; border-left:0; border-top:1px solid var(--line); }   .lp-sectors article:first-child { border-top:0; }   .lp-tabs { grid-template-columns:repeat(2,minmax(0,1fr)); }   .lp-tabs button:nth-child(2) { border-right:0; }   .lp-tabs button:nth-child(-n+2) { border-bottom:1px solid #5a5c5e; }   .lp-under { align-items:flex-start; flex-direction:column; }   .lp-plan { aspect-ratio:auto; }   .lp-plan svg { height:auto; }   .lp-plan .pax, .lp-plan .pdm, .lp-plan .ls { display:none; }   .lp-after { padding:22px 18px; }   .lp-after .lp-btn { width:100%; text-align:center; }   .lp-steps > div { padding-right:0; }   .lp-actions .lp-btn { width:100%; text-align:center; }   .lp-final { margin-top:56px; padding:52px 0; } } @media (prefers-reduced-motion:reduce) { .lp-btn { transition:none; } .lp-plan.run svg { animation:none; } .lp-stage.auto .lp-tabs button::after { animation:none !important; display:none; } } \/* Dunkler Kopf unter transparenter Theme-Navigation *\/ .ps-lp .lp-hero h1 { hyphens:none !important; -webkit-hyphens:none !important; text-transform:uppercase; font-size:clamp(30px,3vw,42px); line-height:1.08; } body.header-transparent .ps-lp .lp-hero:not(.lp-hero-short) { padding-top:118px; } @media (max-width:1024px) { body.header-transparent .ps-lp .lp-hero:not(.lp-hero-short) { padding-top:96px; } } body.header-transparent-text-light .site-header:not(.minimized) .header-items svg { color:#fff; fill:#fff; } body.header-transparent-text-light .site-header:not(.minimized) a.logo > img.logo-dark:only-child { opacity:1 !important; visibility:visible !important; display:block !important; position:static !important; width:auto !important; max-width:200px; height:auto !important; filter:brightness(0) invert(1); } .ps-lp h1, .ps-lp h2, .ps-lp h3, .ps-lp-end h2, .ps-lp-end h3 { hyphens:none !important; -webkit-hyphens:none !important; } \/* Feinschliff: einheitliche \u00dcberschriften und Abst\u00e4nde *\/ .lp-final h2 { font-size:clamp(28px,3vw,40px); line-height:1.12; } .lp-hero .lp-actions { margin-top:24px; } .lp-hero .lp-btn { padding:13px 22px; } .lp-steps h3 { font-size:19px; line-height:1.2; } .lp-sec { padding-top:64px; } .lp-sec .lp-eyebrow { margin-bottom:10px; } .lp-sec p.lp-lead { max-width:42em; } .lp-tabs button { font-size:13px; letter-spacing:.01em; } .lp-metrics { gap:8px 22px; } .lp-metrics dd { font-size:18px; } .lp-chips li { font-size:15px; } .lp-final .lp-btn:hover, .lp-hero .lp-btn:hover { transform:translateY(-1px); } @media (max-width:640px) { .lp-sec { padding-top:48px; } .lp-hero .lp-btn { display:block; text-align:center; } .lp-hero .lp-proof { display:none; } } \/* Umbr\u00fcche und schmale Bildschirme *\/ .lp-nb { white-space:nowrap; } .ps-lp h1, .ps-lp h2, .ps-lp h3, .ps-lp-end h2, .ps-lp-end h3 { text-wrap:balance; } .ps-lp p, .ps-lp-end p, .lp-proof li { text-wrap:pretty; } @media (max-width:1000px) {   .lp-hero:not(.lp-hero-short) { display:flex; flex-direction:column; align-items:stretch; gap:0; }   .lp-hero .lp-copy { display:contents; }   .lp-hero .lp-stage { order:4; margin-top:26px; }   .lp-hero .lp-actions { order:5; margin-top:22px; }   .lp-hero .lp-proof { order:6; } } @media (max-width:640px) {   .ps-lp .lp-hero:not(.lp-hero-short) { padding-bottom:44px; }   body:not(.header-transparent) .ps-lp .lp-hero:not(.lp-hero-short) { padding-top:36px; }   .ps-lp .lp-hero h1 { font-size:clamp(28px,8.6vw,36px); }   .lp-hero p.lp-lead { font-size:16px; margin-top:12px; }   .lp-tabs { margin-bottom:10px; }   .lp-tabs button { min-height:42px; padding:8px 4px; font-size:13px; }   .lp-plan { margin:0 -8px; }   .lp-under { margin-top:8px; }   .lp-metrics { display:grid; width:100%; grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); gap:10px 14px; padding-top:12px; border-top:1px solid #3d4043; }   .lp-metrics dd { font-size:18px; }   p.lp-note { font-size:12px; line-height:1.4; }   .lp-hero .lp-actions { flex-direction:column; align-items:stretch; gap:14px; text-align:center; } } \/* Feinschliff Kopfbereich: mehr Platz f\u00fcr den Plan, ruhige Kennzahlen, R\u00fcckmeldung beim Ziehen *\/ .lp-hero:not(.lp-hero-short) { grid-template-columns:minmax(0,.74fr) minmax(0,1.26fr); gap:44px; } .lp-hero .lp-eyebrow { display:flex; align-items:center; gap:9px; } .lp-hero .lp-eyebrow::before { content:\"\"; width:8px; height:8px; background:var(--sig); flex:none; } .lp-hero .lp-btn::after, .lp-final .lp-btn::after { content:\"\u2192\"; display:inline-block; margin-left:10px; transition:transform .15s ease; } .lp-hero .lp-btn:hover::after, .lp-final .lp-btn:hover::after { transform:translateX(4px); } .lp-hero .lp-btn:hover, .lp-final .lp-btn:hover { transform:none; } .lp-tabs button:not([aria-selected=true]) { color:#c8c9c7; } .lp-tabs button:not([aria-selected=true]):hover { color:#fff; } .lp-under { margin-top:14px; } .lp-metrics { display:grid; width:100%; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); gap:0 16px; padding-top:12px; border-top:1px solid #3d4043; } .lp-metrics dt { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .lp-metrics dd { font-size:22px; font-variant-numeric:tabular-nums; white-space:nowrap; transition:color .12s; } .lp-plan.dragging ~ .lp-under dd { color:var(--sig); } .lp-plan.dragged .lp-grip .gp { animation:none; } p.lp-note { color:#85878a; } @media (max-width:1000px) {   .lp-hero:not(.lp-hero-short) { gap:0; } } @media (max-width:640px) {   .lp-metrics { grid-auto-flow:row; grid-auto-columns:auto; gap:10px 14px; }   .lp-metrics dd { font-size:20px; } } \/* Mobiles Logo wie auf der Startseite: gleiche Gr\u00f6\u00dfe, mittig *\/ body.header-transparent-text-light .site-header:not(.minimized) .header-mobile a.logo > img.logo-dark:only-child { display:inline-block !important; max-width:180px; } \/* Nutzungen auf dem Handy: nur Titel, Frage und Link *\/ @media (max-width:640px) {   .lp-sectors { margin-top:20px; }   .lp-sectors article, .lp-sectors article + article { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:4px 14px; align-items:center; padding:14px 0; }   .lp-sectors h3 { font-size:18px; grid-column:1; }   .lp-sectors p.lp-q { grid-column:1; margin:0; font-size:14px; line-height:1.4; color:var(--muted); }   .lp-sectors h4, .lp-sectors ul, .lp-sectors p.lp-who, p.lp-more { display:none; }   .lp-sectors .lp-link { grid-column:2; grid-row:1 \/ 3; width:40px; height:40px; font-size:0; display:flex; align-items:center; justify-content:center; background:var(--sig); text-decoration:none !important; }   .lp-sectors .lp-link::after { content:\"\u2192\"; font-size:18px; color:#16181b; } } \/* Abl\u00e4ufe und Listen auf dem Handy kompakter *\/ @media (max-width:640px) {   .lp-steps { grid-template-columns:repeat(2,minmax(0,1fr)); gap:0 16px; margin-top:18px; }   .lp-steps > div { padding:12px 0 0; }   .lp-steps h3 { font-size:16px; margin:2px 0 4px; }   .lp-steps p { font-size:14px; line-height:1.4; }   .pp-fit { margin-top:12px; }   .pp-fit li { padding:9px 0 9px 22px; font-size:15px; }   .pp-fit li::before { top:15px; }   .pp-mach div { padding:9px 0; }   .lp-chips { gap:6px; margin-top:12px; }   .lp-chips li { padding:5px 10px; font-size:14px; }   .lp-faq summary { padding:13px 0; font-size:16px; }   .lp-final { margin-top:40px; padding:40px 0; } } \/* Schritte aus dem Seiteninhalt *\/ .pp-flow { width:100%; padding:48px 0 40px; } .pp-flow .lp-steps { grid-template-columns:repeat(3,minmax(0,1fr)); gap:0 28px; } .pp-flow .lp-steps > div { padding-right:0; } @media (max-width:640px) {   .pp-flow { padding:32px 0 24px; }   .pp-flow .lp-steps { grid-template-columns:1fr; gap:0; margin-top:14px; }   .pp-flow .lp-steps > div { display:grid; grid-template-columns:32px minmax(0,1fr); gap:2px 8px; padding:12px 0; border-bottom:1px solid var(--line); }   .pp-flow .lp-steps b { grid-row:1 \/ 3; padding-top:2px; }   .pp-flow .lp-steps h3 { margin:0; } } \/* Referenzliste auf der Automatisierung-Seite: auf dem Handy ausgeblendet, der Kopfbereich zeigt die Tools schon *\/ @media (max-width:640px) { body.page-id-1254 .wp-block-column:has(> h5):has(> ul.wp-block-list) { display:none; } } \/* Unterseiten Computational Design und Grasshopper *\/ .lp-tabs.lp-tabs-3 { grid-template-columns:repeat(3,minmax(0,1fr)); } .lp-tabs.lp-tabs-3 button:nth-child(2) { border-right:1px solid #5a5c5e; } .lp-tabs.lp-tabs-3 button:nth-child(-n+2) { border-bottom:0; } .pp-banner { margin:44px 0 0; } .pp-banner img { display:block; width:100%; height:auto; } .pp-banner figcaption { margin-top:8px; font-size:14px; color:var(--muted); } @media (max-width:640px) { .pp-banner { margin-top:28px; } .lp-tabs.lp-tabs-3 button { padding:8px 2px; font-size:12px; } } .pp-banner.pp-crop img { max-height:420px; object-fit:cover; } \/* Mitlaufendes Men\u00fc \u00fcber dem dunklen Kopf *\/ .site-header.minimized { transition:background-color .2s ease; } body.ps-head-dark .site-header.minimized, body.ps-head-dark .site-header.minimized .header-main, body.ps-head-dark .site-header.minimized .header-mobile, body.ps-head-dark .site-header.minimized .header-contents { background:#16181b !important; border-color:transparent !important; box-shadow:none !important; } body.ps-head-dark .site-header.minimized a.logo img { filter:brightness(0) invert(1); } body.ps-head-dark .site-header.minimized .main-navigation .nav-menu > li > a, body.ps-head-dark .site-header.minimized .header-items a, body.ps-head-dark .site-header.minimized .header-items svg, body.ps-head-dark .site-header.minimized .header-mobile svg, body.ps-head-dark .site-header.minimized .mobile-menu-toggle { color:#fff !important; fill:currentColor; } body.ps-head-dark .site-header.minimized .main-navigation .nav-menu > li.current-menu-item:not(.current-language-menu-item) > a, body.ps-head-dark .site-header.minimized .main-navigation .nav-menu > li.current-menu-ancestor > a { color:#fff !important; text-decoration-color:#d7ff3e !important; } body.ps-head-dark .site-header.minimized .main-navigation .nav-menu > li.current-language-menu-item > a { color:#a3a3a3 !important; } \/* F\u00fcnf Reiter: am Desktop in einer Zeile, auf dem Handy der erste \u00fcber die ganze Breite und darunter zwei mal zwei *\/ .lp-tabs.lp-tabs-5 { grid-template-columns:repeat(5,minmax(0,1fr)); } .lp-tabs.lp-tabs-5 button { padding:11px 4px; } @media (max-width:640px) {   .lp-tabs.lp-tabs-5 { grid-template-columns:repeat(2,minmax(0,1fr)); }   .lp-tabs.lp-tabs-5 button { border-right:1px solid #5a5c5e; border-bottom:1px solid #5a5c5e; }   .lp-tabs.lp-tabs-5 button:first-child { grid-column:1 \/ -1; border-right:0; }   .lp-tabs.lp-tabs-5 button:nth-child(odd):not(:first-child) { border-right:0; }   .lp-tabs.lp-tabs-5 button:nth-child(n+4) { border-bottom:0; } } \/* Unterseiten: Pfad zur\u00fcck zu den Leistungen *\/ .lp-tabs[hidden] { display:none; } .lp-crumb { display:flex; flex-wrap:wrap; align-items:center; gap:8px; font-size:13px; font-weight:500; text-transform:uppercase; letter-spacing:.09em; color:#a9abae; margin-bottom:14px; } .lp-crumb a { color:#fff !important; text-decoration:underline; text-underline-offset:4px; text-decoration-color:#5a5c5e; } .lp-crumb a:hover { text-decoration-color:var(--sig); } .lp-crumb a::before { content:\"\u2190 \"; } \/* Aktuelle Leistung als Umschalter zu den anderen Leistungen *\/ .lp-switch { position:relative; } .lp-switch > summary { list-style:none; cursor:pointer; display:flex; align-items:center; gap:9px; color:#fff; } .lp-switch > summary::-webkit-details-marker { display:none; } .lp-switch > summary::after { content:\"\"; width:6px; height:6px; border-right:1.5px solid currentColor; border-bottom:1.5px solid currentColor; transform:translateY(-2px) rotate(45deg); margin-left:2px; } .lp-switch[open] > summary::after { transform:translateY(1px) rotate(225deg); } .lp-switch > div { position:absolute; left:0; top:calc(100% + 10px); z-index:20; display:grid; min-width:240px; background:#16181b; border:1px solid #5a5c5e; box-shadow:0 12px 30px rgba(0,0,0,.35); } .lp-switch > div a { padding:12px 14px; color:#fff !important; text-decoration:none !important; text-transform:none; letter-spacing:0; font-size:15px; border-top:1px solid #2c2f32; } .lp-switch > div a:first-child { border-top:0; } .lp-switch > div a:hover, .lp-switch > div a:focus-visible { background:#25282b; color:var(--sig) !important; } .lp-crumb .lp-switch [aria-current]::before { content:\"\"; width:8px; height:8px; background:var(--sig); flex:none; } \/* Ausgabe-Karten blitzen nach jeder \u00c4nderung kurz gr\u00fcn auf *\/ @keyframes ps-flash { from { stroke:#d7ff3e; } to { stroke:#f4f4f0; } } .lp-plan .ps-flash { animation:ps-flash .9s ease-out both; } @media (prefers-reduced-motion:reduce) { .lp-plan .ps-flash { animation:none; } } .lp-switch > div a::before { content:none; } \/* Hinweis unter dem Bild: kleiner und ruhiger *\/ .ps-lp .lp-hint.lp-hint-below { margin:12px 0 0; font-size:13px; color:#a9abae; } .ps-lp .lp-hint.lp-hint-below > span { width:8px; height:8px; box-shadow:none; }  .lp-plan .fn { fill:none; stroke:var(--i); } .ps-lp .lp-plan.run svg { animation:none; } .ps-lp .lp-plan .dx { font-style:italic; } .ps-lp .lp-plan .lw { fill:none; stroke:none; } .lp-plan .dl { fill:#8a8c8e; stroke:#16181b; } .lp-plan .dp { fill:none; stroke:var(--i); } .lp-plan .mb { fill:none; stroke:rgba(244,244,240,.42); } .lp-plan .pg { fill:none; stroke:#2b2e31; } .lp-plan .bm { fill:#1d2023; stroke:var(--tm); stroke-dasharray:calc(var(--k,1) * .3) calc(var(--k,1) * .22); } .lp-plan .dsh { fill:none; stroke:var(--t); stroke-dasharray:calc(var(--k,1) * .3) calc(var(--k,1) * .25); } .lp-plan .pj { stroke:var(--fl); } .lp-plan .rw { fill:none; stroke:var(--rt); stroke-linejoin:round; } .lp-plan .rf { fill:none; stroke:var(--tm); stroke-linejoin:round; } .lp-plan .rb { stroke:var(--i); stroke-linecap:round; } .lp-plan .rc { stroke:var(--fl); stroke-linecap:round; } .ps-lp .lp-plan svg { overflow:hidden; } @media (min-width:641px) { .ps-lp .lp-plan svg { overflow:visible; } } .lp-plan .gh-w { stroke:#a3a5a7; transition:opacity .15s; } .lp-plan .gh-n { cursor:pointer; outline:none; transition:opacity .15s; } .lp-plan .gh-l { display:none; } .lp-plan .gh-n.sel .gh-l { display:block; } .lp-plan .gh-n.sel .gh-b, .lp-plan .gh-n:focus-visible .gh-b { stroke:#d7ff3e !important; } .lp-plan .gh-pulse { stroke-dasharray:5 95; animation:gh-flow 4s linear infinite; } @keyframes gh-flow { from { stroke-dashoffset:100; } to { stroke-dashoffset:0; } } .lp-plan .gh-focus .gh-route { display:none; } .lp-plan .gh-focus .gh-w { opacity:.14; } .lp-plan .gh-focus .gh-w.on { opacity:1; stroke:#d7ff3e; } .lp-plan .gh-focus .gh-n:not(.on) { opacity:.3; } @media (prefers-reduced-motion:reduce) { .lp-plan .gh-pulse { display:none; } } .ps-lp .lp-hero-short { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr); gap:12px 56px; align-items:end; padding:56px 0 120px; } .ps-lp .lp-hero-short .lp-eyebrow { grid-column:1 \/ -1; margin:0 0 4px; } .ps-lp .lp-hero-short h1 { max-width:none; } .ps-lp .lp-hero-short p.lp-lead { margin:0; } .ps-lp .lp-hero-short .lp-actions { grid-column:2; margin-top:10px; } #ps-parts-demo { position:relative; z-index:2; margin-top:-84px; box-shadow:0 18px 50px rgba(0,0,0,.18); background:#fff; } .pp-fit { list-style:none; margin:22px 0 0; padding:0; } .pp-fit li { padding:14px 0 14px 26px; border-top:1px solid var(--line); font-size:17px; position:relative; } .pp-fit li::before { content:\"\"; position:absolute; left:0; top:21px; width:10px; height:10px; background:var(--sig); box-shadow:inset 0 0 0 1px #16181b; } .pp-proven { padding-top:24px; padding-bottom:16px; } .pp-intro { max-width:42em; margin-top:10px; color:var(--muted); } .pp-intro a { color:var(--ink) !important; text-decoration:underline; text-underline-offset:3px; } .pp-cards.pp-cards-3 { grid-template-columns:repeat(3,minmax(0,1fr)); } .pp-services { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:22px; margin-top:26px; } .pp-service { display:flex; flex-direction:column; padding:20px 0 0; border-top:1px solid #cfd0cd; color:var(--ink) !important; text-decoration:none !important; transition:border-color .2s; } .pp-service b { display:flex; align-items:flex-start; gap:8px; font-size:clamp(52px,6vw,76px); line-height:.9; font-weight:700; letter-spacing:-.03em; color:var(--ink); } .pp-service b::after { content:\"\"; width:12px; height:12px; margin-top:6px; background:var(--sig); flex:none; transition:transform .2s; } .pp-service:hover b::after { transform:scale(1.4); } .ps-lp-end .pp-service h3 { font-size:20px; line-height:1.25; margin:18px 0 0; } .ps-lp-end .pp-service p { font-size:15px; line-height:1.5; margin:8px 0 14px; color:var(--muted); } .pp-service > span:last-child { margin-top:auto; font-size:14px; font-weight:500; text-decoration:underline; text-underline-offset:4px; } .pp-service:hover { border-color:var(--sig); } .pp-service:hover > span:last-child { text-decoration-color:var(--sig); } @media (max-width:700px) { .pp-services { grid-template-columns:1fr; gap:26px; } } .pp-cards { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:22px; margin-top:26px; } .pp-card { display:block; color:var(--ink) !important; text-decoration:none !important; } .pp-card img { width:100%; aspect-ratio:3\/2; object-fit:cover; display:block; transition:opacity .2s; } .pp-card:hover img { opacity:.82; } .ps-lp-end .pp-card h3 { font-size:16px; line-height:1.25; margin-top:12px; } .pp-card span { display:inline-block; margin-top:6px; font-size:14px; color:var(--muted); text-decoration:underline; text-underline-offset:4px; } .pp-tech { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:56px; } .pp-tech .lp-h2 { font-size:clamp(24px,2.3vw,30px); } .pp-tech .pp-mach { margin-top:22px; } .pp-tech .lp-chips { gap:6px; margin-top:16px; } .pp-tech .lp-chips li { padding:5px 10px; font-size:14px; } .lp-final.pp-final { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr); gap:48px; align-items:center; margin-top:64px; padding:56px 0; } .pp-final img { width:100%; aspect-ratio:3\/2; object-fit:cover; display:block; } .pp-final img.pp-drawing { object-fit:contain; background:#fff; padding:18px 0; } .pp-mach { margin:0; border-top:2px solid var(--ink); } .pp-mach div { display:grid; grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr); gap:18px; padding:13px 0; border-bottom:1px solid var(--line); } .pp-mach dt { font-weight:700; color:var(--ink); } .pp-mach dd { margin:0; } .pp-tech h3 { font-size:15px; margin-top:24px; } p.pp-also { margin-top:22px; font-size:15px; color:#a9abae; } @media (max-width:900px) { .ps-lp .lp-hero-short, .pp-tech, .lp-final.pp-final { display:block; } .pp-tech > div + div { margin-top:40px; } .pp-final img { margin-top:26px; } .ps-lp .lp-hero-short { padding-bottom:110px; } .ps-lp .lp-hero-short .lp-eyebrow { margin-bottom:14px; } .ps-lp .lp-hero-short p.lp-lead { margin-top:12px; } .pp-cards { grid-template-columns:repeat(2,minmax(0,1fr)); } } @media (max-width:520px) { .pp-cards { gap:18px 12px; } .ps-lp-end .pp-card h3 { font-size:14px; } .pp-mach div { display:block; } } body:has(.lp-hero-short) #content { padding-top:0; } .ps-lp .lp-hero-short h1 { max-width:18em; } <\/style><script>if(document.body.classList.contains('header-transparent')){document.body.classList.remove('header-transparent-text-dark');document.body.classList.add('header-transparent-text-light');}<\/script><div class=\"ps-lp\" data-no-translation><section class=\"lp-hero lp-hero-short\"><nav class=\"lp-crumb\" aria-label=\"Breadcrumb\"><a href=\"\/de\/parametric-and-computational-design-service\/\">Leistungen<\/a><span aria-hidden=\"true\">\/<\/span><details class=\"lp-switch\"><summary aria-current=\"page\">3D-Druck<\/summary><div><a href=\"\/de\/grasshopper-design-automation-development\/\">Grasshopper-Entwicklung<\/a><a href=\"\/de\/parametric-computational-design\/\">Computational Design<\/a><\/div><\/details><\/nav><script>document.addEventListener('click',function(e){document.querySelectorAll('.lp-switch[open]').forEach(function(d){if(!d.contains(e.target))d.open=false;});});<\/script><h1>Jede Variante druckfertig. Automatisch.<\/h1><p class=\"lp-lead\">Von der Variantenliste zu gepr\u00fcften, druckfertigen Daten: f\u00fcr Ihre eigenen Maschinen oder Ihren Druckpartner.<\/p> <div class=\"lp-actions\"><a class=\"lp-btn\" href=\"mailto:hallo@parametricsolutions.de?subject=Anfrage:%203D-Druck-Automatisierung\">Bauteil einreichen<\/a><a class=\"lp-link\" href=\"#ps-parts-demo\">Direkt ausprobieren<\/a><\/div><\/section><\/div>\n\n\n\n<div class=\"wp-block-group\" id=\"ps-parts-demo\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\"><style>\n.ps-conf { container-type: inline-size; font-family: inherit; color: #2e2e2e; }\n.ps-conf * { box-sizing: border-box; }\n.ps-conf__grid { display: grid; grid-template-columns: 1fr; border: 1px solid #e2e2e2; }\n.ps-conf__stage { position: relative; aspect-ratio: 4 \/ 3; background: #f4f4f2; touch-action: pan-y; cursor: grab; overflow: hidden; }\n.ps-conf__stage:active { cursor: grabbing; }\n.ps-conf__stage canvas { display: block; width: 100%; height: 100%; }\n.ps-conf__hint { position: absolute; left: 16px; bottom: 12px; font-size: 13px; color: #777; pointer-events: none; }\n.ps-conf__panel { padding: 20px; background: #fff; }\n.ps-conf__title { margin: 0 0 16px; font-size: 18px; line-height: 1.3; font-weight: 700; color: #111; }\n.ps-conf__row { margin-bottom: 13px; }\n.ps-conf__row label { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; line-height: 1.3; margin-bottom: 5px; }\n.ps-conf__row output { font-weight: 500; color: #111; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.ps-conf input[type=range] { -webkit-appearance: none; appearance: none; display: block; width: 100%; height: 24px !important; margin: 0; padding: 0 !important; background: transparent !important; border: 0 !important; box-shadow: none !important; cursor: pointer; --p: 50%; }\n.ps-conf input[type=range]::-webkit-slider-runnable-track { height: 2px; background: linear-gradient(to right, #32373c var(--p), #cfcfcf var(--p)); }\n.ps-conf input[type=range]::-moz-range-track { height: 2px; background: #cfcfcf; }\n.ps-conf input[type=range]::-moz-range-progress { height: 2px; background: #32373c; }\n.ps-conf input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 18px; margin-top: -8px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]::-moz-range-thumb { width: 14px; height: 18px; background: #32373c; border: 0; border-radius: 0; }\n.ps-conf input[type=range]:focus-visible { outline: 2px solid #32373c; outline-offset: 2px; }\n.ps-conf__wood { display: flex; gap: 6px; margin: 16px 0; }\n.ps-conf__wood button { flex: 1; min-height: 40px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__wood button[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 0 0 16px; padding: 14px 0; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-conf__stats div { min-width: 0; }\n.ps-conf__stats dt { font-size: 13px; line-height: 1.3; color: #777; }\n.ps-conf__stats dd { margin: 0; font-size: 17px; font-weight: 500; color: #111; font-variant-numeric: tabular-nums; }\n.ps-conf__csv { width: 100%; min-height: 46px; padding: 10px 16px; font: inherit; font-size: 16px; font-weight: 500; color: #fff; background: #32373c; border: 0; border-radius: 0; cursor: pointer; }\n.ps-conf__csv:hover { background: #111; }\n.ps-conf__csvlink { display: block; width: 100%; margin-top: 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; text-decoration: underline; background: none; border: 0; cursor: pointer; }\n.ps-conf__dim { position: absolute; left: 0; top: 0; padding: 1px 5px; font-size: 12px; line-height: 1.4; font-weight: 500; color: #111; background: rgba(244,244,242,.92); white-space: nowrap; pointer-events: none; font-variant-numeric: tabular-nums; }\n.ps-conf__dimtoggle { position: absolute; right: 12px; top: 12px; z-index: 2; min-height: 34px; padding: 4px 12px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-conf__dimtoggle[aria-pressed=true] { color: #fff; background: #32373c; border-color: #32373c; }\n.ps-conf__error { padding: 24px; font-size: 15px; }\n@container (min-width: 760px) {\n.ps-conf__grid { grid-template-columns: minmax(0, 1fr) 320px; }\n.ps-conf__stage { aspect-ratio: auto; min-height: 620px; }\n.ps-conf__panel { border-left: 1px solid #e2e2e2; }\n}\n<\/style>\n<style>\n.ps-parts .ps-parts__title { margin: 0 0 12px; font-size: 17px; line-height: 1.25; font-weight: 700; color: #111; hyphens: none; }\n.ps-parts .ps-parts__more { margin: 2px 0 14px; border-top: 1px solid #e2e2e2; border-bottom: 1px solid #e2e2e2; }\n.ps-parts .ps-parts__more summary { padding: 9px 0; font-size: 13px; font-weight: 700; color: #111; cursor: pointer; }\n.ps-parts .ps-parts__more[open] { padding-bottom: 4px; }\n.ps-parts .ps-parts__morerows { margin-bottom: 4px; }\n.ps-parts .ps-parts__note { margin: 0 0 10px; font-size: 12px; line-height: 1.35; color: #777; }\n.ps-parts .ps-parts__intro { margin: 0 0 12px; font-size: 14px; line-height: 1.4; color: #555; }\n.ps-parts .ps-parts__sub { margin: 0 0 6px; font-size: 13px; font-weight: 700; color: #111; }\n.ps-parts .ps-parts__list { max-height: 100px; overflow-y: auto; margin: 0 0 8px; border-top: 1px solid #e2e2e2; }\n.ps-parts .ps-parts__row { display: grid; grid-template-columns: 14px 56px 1fr; gap: 6px; align-items: center; width: 100%; min-height: 32px; padding: 4px 6px; font: inherit; font-size: 13px; line-height: 1.2; text-align: left; color: #2e2e2e; background: #fff; border: 0; border-bottom: 1px solid #e2e2e2; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-parts__row b { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.ps-parts .ps-parts__row span { color: #777; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.ps-parts .ps-parts__row i { width: 9px; height: 9px; border-radius: 50%; background: #3f9a5f; }\n.ps-parts .ps-parts__row.is-bad i { background: #c8321f; }\n.ps-parts .ps-parts__row[aria-pressed=true] { color: #fff; background: #32373c; }\n.ps-parts .ps-parts__row[aria-pressed=true] span { color: #d5d5d5; }\n.ps-parts .ps-parts__tools { display: flex; gap: 6px; margin: 0 0 14px; }\n.ps-parts .ps-parts__tools button { flex: 1; min-height: 34px; padding: 4px; font: inherit; font-size: 13px; color: #2e2e2e; background: #fff; border: 1px solid #cfcfcf; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-conf__row { margin-bottom: 8px; }\n.ps-parts .ps-parts__label { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 0 0 12px; font-size: 14px; }\n.ps-parts .ps-parts__label input { width: 130px !important; min-height: 32px; margin: 0 !important; padding: 3px 6px !important; font: inherit; font-size: 13px !important; color: #2e2e2e !important; background: #fff !important; border: 1px solid #cfcfcf !important; border-radius: 0 !important; box-shadow: none !important; }\n.ps-parts .ps-conf__warn { margin: 0 0 14px; padding: 8px 10px; font-size: 13px; line-height: 1.35; color: #111; background: #f9e4e1; border-left: 3px solid #c8321f; }\n.ps-parts .ps-conf__warn:empty { display: none; }\n.ps-parts .ps-parts__save { margin: 0 0 12px; padding: 10px 12px; font-size: 14px; line-height: 1.35; color: #111; background: #f4f4f2; }\n.ps-parts .ps-parts__save strong { display: block; font-size: 17px; font-weight: 700; }\n.ps-parts .ps-parts__save small { display: block; margin-top: 4px; font-size: 12px; color: #777; }\n.ps-parts .ps-parts__stl { width: 100%; min-height: 40px; margin: 0 0 8px; padding: 6px; font: inherit; font-size: 14px; color: #2e2e2e; background: #fff; border: 1px solid #32373c; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-parts__stl:disabled { opacity: .4; cursor: default; }\n.ps-parts a.ps-conf__csv { display: block; box-sizing: border-box; text-align: center; color: #fff !important; text-decoration: none !important; }\n.ps-parts .ps-parts__pager { position: absolute; left: 50%; bottom: 12px; z-index: 2; display: flex; align-items: center; transform: translateX(-50%); background: #fff; border: 1px solid #cfcfcf; font-size: 13px; white-space: nowrap; }\n.ps-parts .ps-parts__pager button { width: 34px; height: 34px; padding: 0; font: inherit; font-size: 16px; color: #2e2e2e; background: none; border: 0; border-radius: 0; cursor: pointer; }\n.ps-parts .ps-parts__pager button:disabled { opacity: .3; cursor: default; }\n.ps-parts .ps-parts__pager span { padding: 0 8px; }\n@container (max-width: 759px) { .ps-parts .ps-conf__hint { display: none; } }\n@container (min-width: 760px) { .ps-parts .ps-conf__grid { background: #f4f4f2; } .ps-parts .ps-conf__stage { align-self: stretch; height: auto; min-height: 560px; } }\n<\/style>\n<div class=\"ps-conf ps-parts\" id=\"ps-parts\" data-three=\"\/wp-content\/uploads\/ps-configurator\/three.module.min.js\">\n<div class=\"ps-conf__grid\">\n<div class=\"ps-conf__stage\"><button type=\"button\" class=\"ps-conf__dimtoggle\" aria-pressed=\"false\" data-t=\"regen\"><\/button><div class=\"ps-conf__hint\" data-t=\"hint\"><\/div><div class=\"ps-parts__pager\" data-no-translation><button type=\"button\" data-p=\"-1\" aria-label=\"&lt;\">\u2039<\/button><span><\/span><button type=\"button\" data-p=\"1\" aria-label=\"&gt;\">\u203a<\/button><\/div><\/div>\n<div class=\"ps-conf__panel\">\n<h3 class=\"ps-parts__title\" data-t=\"title\"><\/h3>\n<p class=\"ps-parts__sub\" data-t=\"variants\"><\/p>\n<div class=\"ps-parts__list\" data-no-translation><\/div>\n<p class=\"ps-parts__sub\" data-no-translation data-edit><\/p>\n<div class=\"ps-conf__sliders\" data-no-translation><\/div>\n<details class=\"ps-parts__more\">\n<summary data-t=\"more\"><\/summary>\n<p class=\"ps-parts__intro\" data-t=\"intro\"><\/p>\n<div class=\"ps-parts__morerows\" data-no-translation><\/div>\n<label class=\"ps-parts__label\"><span data-t=\"label\"><\/span><input type=\"text\" maxlength=\"24\" data-no-translation><\/label>\n<div class=\"ps-parts__tools\"><button type=\"button\" data-a=\"add\" data-t=\"add\"><\/button><button type=\"button\" data-a=\"del\" data-t=\"del\"><\/button><\/div>\n<div class=\"ps-parts__save\" data-no-translation><\/div>\n<p class=\"ps-parts__note\"><\/p>\n<\/details>\n<p class=\"ps-conf__warn\" aria-live=\"polite\" data-no-translation><\/p>\n<dl class=\"ps-conf__stats\" data-no-translation><\/dl>\n<button type=\"button\" class=\"ps-parts__stl\" data-t=\"stl\"><\/button>\n<a class=\"ps-conf__csv\" data-t=\"cta\"><\/a>\n<\/div>\n<\/div>\n<\/div>\n<script type=\"module\">\nconst root = document.getElementById('ps-parts');\nconst lang = new URLSearchParams(location.search).get('lang') || document.documentElement.lang || 'de';\nconst de = lang.toLowerCase().startsWith('de');\nconst T = de ? {\nmore: 'Weitere Optionen', title: 'Beispiel: Viele Varianten, ein Skript', intro: 'Jede Zeile ist eine Variante desselben Halters. W\u00e4hlen Sie eine aus und \u00e4ndern Sie ihre Ma\u00dfe. Bauteil, Pr\u00fcfung und Druckplatte passen sich automatisch an.', hint: 'Ziehen zum Drehen', regen: 'Neu generieren', variants: 'Varianten', edit: n => `Variante ${n} anpassen`, w: 'Breite', h: 'H\u00f6he', d: 'Tiefe', n: 'L\u00f6cher', wall: 'Wandst\u00e4rke (alle)', label: 'Beschriftung', add: '+ Variante', del: 'Entfernen', holes: n => n === 1 ? 'Loch' : 'L\u00f6cher',\nparts: 'Druckfertige Teile', plates: 'Druckplatten', time: 'Druckzeit', mass: 'Material', stl: 'Diese Platte als STL', cta: 'Bauteil anfragen', contact: '\/de\/contact-lets-connect\/',\nhand: h => `Von Hand ca. ${h}`, auto: 'Automatisiert in Sekunden', note: n => `Annahme: 30 Minuten Handarbeit je Variante, ${n} Varianten. Beispielbauteil, keine Fertigungsfreigabe.`, plate: (a, b) => `Platte ${a} von ${b}`, none: 'Nicht druckbar', bad: e => `Diese Variante wird nicht gedruckt: ${e}.`,\neSize: 'passt nicht in den Bauraum', eWall: 'Wand unter 2 mm', eHoles: 'L\u00f6cher zu eng', hrs: 'Std.', min: 'Min.'\n} : {\nmore: 'More Options', title: 'Example: Many Variants, One Script', intro: 'Each row is a variant of the same bracket. Pick one and change its size. Part, checks and print plate update automatically.', hint: 'Drag to rotate', regen: 'Regenerate', variants: 'Variants', edit: n => `Adjust variant ${n}`, w: 'Width', h: 'Height', d: 'Depth', n: 'Holes', wall: 'Wall thickness (all)', label: 'Label', add: '+ Variant', del: 'Remove', holes: n => n === 1 ? 'hole' : 'holes',\nparts: 'Print-ready parts', plates: 'Print plates', time: 'Print time', mass: 'Material', stl: 'This plate as STL', cta: 'Request a Part', contact: '\/contact-lets-connect\/',\nhand: h => `By hand approx. ${h}`, auto: 'Automated in seconds', note: n => `Assumption: 30 minutes of manual work per variant, ${n} variants. Sample part, not released for production.`, plate: (a, b) => `Plate ${a} of ${b}`, none: 'Not printable', bad: e => `This variant will not be printed: ${e}.`,\neSize: 'does not fit the build volume', eWall: 'wall below 2 mm', eHoles: 'holes too close', hrs: 'h', min: 'min'\n};\nroot.querySelectorAll('[data-t]').forEach(el => { el.textContent = T[el.dataset.t]; });\nroot.querySelector('a.ps-conf__csv').href = T.contact;\nconst num = (v, d = 0) => v.toLocaleString(de ? 'de-DE' : 'en-GB', { minimumFractionDigits: d, maximumFractionDigits: d });\nconst SAMPLE = [[120, 70, 50, 3, 'A-120'], [90, 60, 45, 2, 'A-090'], [60, 40, 35, 2, 'B-060'], [150, 80, 60, 4, 'A-150'], [80, 90, 40, 2, 'C-080'], [45, 35, 30, 1, 'B-045'], [100, 50, 70, 3, 'D-100'], [70, 70, 50, 2, 'C-070'], [130, 60, 40, 4, 'A-130'], [55, 45, 45, 1, 'B-055'], [40, 40, 30, 1, 'E-040'], [280, 60, 50, 6, 'L-280']];\nconst list = SAMPLE.map(a => ({ w: a[0], h: a[1], d: a[2], n: a[3], label: a[4] }));\nconst state = { wall: 4 };\nlet sel = 0, page = 0, plates = [];\nconst PL = 256, PH = 256, GAP = 8, HOLE = 5, S = 0.01;\nlet schedule = () => refresh(), regen = () => {}, downloadPlate = () => {}, showPage = () => {};\nconst check = p => {\nconst e = [], t = state.wall;\nif (Math.max(p.w, p.d) > PL - 2 * GAP || p.h > PH) e.push(T.eSize);\nif (t < 2) e.push(T.eWall);\nif ((p.w - 2 * t) \/ Math.max(1, p.n) < HOLE * 2.5) e.push(T.eHoles);\nreturn e;\n};\nconst pack = parts => {\nconst good = parts.filter(p => !p.errors.length).sort((a, b) => b.d - a.d || b.w - a.w), out = [];\nconst open = () => { const pl = { z: GAP, rows: [], items: [] }; out.push(pl); return pl; };\nopen();\nfor (const p of good) {\nlet done = false;\nfor (const pl of out) {\nconst row = pl.rows.find(r => r.x + p.w + GAP <= PL);\nif (row) { pl.items.push({ p, x: row.x + p.w \/ 2, z: row.z + p.d \/ 2 }); row.x += p.w + GAP; done = true; break; }\nif (pl.z + p.d + GAP <= PL) { const r = { z: pl.z, x: GAP + p.w + GAP }; pl.rows.push(r); pl.z += p.d + GAP; pl.items.push({ p, x: GAP + p.w \/ 2, z: r.z + p.d \/ 2 }); done = true; break; }\n}\nif (!done) { const pl = open(), r = { z: pl.z, x: GAP + p.w + GAP }; pl.rows.push(r); pl.z += p.d + GAP; pl.items.push({ p, x: GAP + p.w \/ 2, z: r.z + p.d \/ 2 }); }\n}\nreturn out;\n};\nconst volume = p => { const t = state.wall, hA = Math.PI * HOLE * HOLE \/ 4 * t * 2 * p.n; return t * (p.w * p.d + p.w * (p.h - t)) + t * (p.d - t) * (p.h - t) - hA; };\nconst listEl = root.querySelector('.ps-parts__list'), boxEl = root.querySelector('.ps-conf__sliders'), labelIn = root.querySelector('.ps-parts__label input'), editEl = root.querySelector('[data-edit]');\nconst rowText = p => `${p.w} \u00d7 ${p.h} \u00d7 ${p.d} \u00b7 ${p.n} ${T.holes(p.n)}`;\nconst renderList = () => {\nlistEl.innerHTML = '';\nlist.forEach((p, i) => {\nconst r = document.createElement('button'); r.type = 'button'; r.className = 'ps-parts__row'; r.setAttribute('aria-pressed', i === sel);\nr.innerHTML = '<i><\/i><b><\/b><span><\/span>'; r.querySelector('b').textContent = p.label; r.querySelector('span').textContent = rowText(p);\nr.addEventListener('click', () => select(i)); p.el = r; listEl.append(r);\n});\n};\nconst FIELDS = { w: [20, 300, 5], h: [15, 260, 5], d: [15, 300, 5], n: [0, 8, 1] }, paints = {};\nconst addSlider = (key, min, max, step, get, set, show) => {\nconst row = document.createElement('div'); row.className = 'ps-conf__row'; const id = 'ps-parts-' + key;\nrow.innerHTML = `<label for=\"${id}\"><span>${T[key]}<\/span><output><\/output><\/label><input id=\"${id}\" type=\"range\" min=\"${min}\" max=\"${max}\" step=\"${step}\">`;\nconst input = row.querySelector('input'), out = row.querySelector('output');\nconst paint = () => { const v = get(); input.value = v; out.textContent = show(v); input.style.setProperty('--p', ((Math.min(max, v) - min) \/ (max - min) * 100) + '%'); };\ninput.addEventListener('input', () => { set(+input.value); paint(); const p = list[sel]; if (p) { p.el.querySelector('span').textContent = rowText(p); } schedule(); });\npaints[key] = paint; (key === 'n' || key === 'wall' ? root.querySelector('.ps-parts__morerows') : boxEl).append(row);\n};\nfor (const [k, f] of Object.entries(FIELDS)) addSlider(k, f[0], f[1], f[2], () => (list[sel] || {})[k] || 0, v => { if (list[sel]) list[sel][k] = v; }, v => k === 'n' ? `${v}` : `${v} mm`);\naddSlider('wall', 1, 8, 0.5, () => state.wall, v => { state.wall = v; }, v => `${num(v, 1)} mm`);\nconst paintAll = () => { Object.values(paints).forEach(f => f()); const p = list[sel]; labelIn.value = p ? p.label : ''; editEl.textContent = p ? T.edit(p.label) : ''; };\nfunction select(i, jump = true) { sel = i; [...listEl.children].forEach((r, k) => r.setAttribute('aria-pressed', k === i)); paintAll(); if (jump) schedule(); }\nlabelIn.addEventListener('input', () => { const p = list[sel]; if (!p) return; p.label = labelIn.value; p.el.querySelector('b').textContent = p.label; editEl.textContent = T.edit(p.label); schedule(); });\nroot.querySelector('[data-a=add]').addEventListener('click', () => { const l = list[sel] || { w: 100, h: 60, d: 50, n: 2 }; list.push({ w: l.w, h: l.h, d: l.d, n: l.n, label: `V-${String(list.length + 1).padStart(3, '0')}` }); renderList(); select(list.length - 1); listEl.scrollTop = listEl.scrollHeight; });\nroot.querySelector('[data-a=del]').addEventListener('click', () => { if (list.length < 2) return; list.splice(sel, 1); sel = Math.min(sel, list.length - 1); renderList(); select(sel); });\nconst stats = root.querySelector('.ps-conf__stats');\nstats.innerHTML = ['parts', 'plates', 'time', 'mass'].map(k => `<div><dt>${T[k]}<\/dt><dd data-s=\"${k}\"><\/dd><\/div>`).join('');\nconst warn = root.querySelector('.ps-conf__warn'), save = root.querySelector('.ps-parts__save'), stlBtn = root.querySelector('.ps-parts__stl'), pagerText = root.querySelector('.ps-parts__pager span'), pagerBtns = root.querySelectorAll('.ps-parts__pager button');\nstlBtn.addEventListener('click', () => downloadPlate());\npagerBtns.forEach(b => b.addEventListener('click', () => showPage(+b.dataset.p)));\nfunction refresh() {\nlist.forEach(p => { p.errors = check(p); p.el.classList.toggle('is-bad', p.errors.length > 0); });\nplates = pack(list);\nconst good = list.filter(p => !p.errors.length), vol = good.reduce((a, p) => a + volume(p), 0), sec = vol \/ 12 * 1.2 + good.length * 45, cur = list[sel];\nconst at = cur && !cur.errors.length ? plates.findIndex(pl => pl.items.some(it => it.p === cur)) : -1; if (at >= 0) page = at; page = Math.min(page, plates.length - 1);\nconst v = k => stats.querySelector(`[data-s=${k}]`);\nv('parts').textContent = `${good.length} \/ ${list.length}`; v('plates').textContent = num(good.length ? plates.length : 0);\nv('time').textContent = sec >= 3600 ? `${num(sec \/ 3600, 1)} ${T.hrs}` : `${num(sec \/ 60)} ${T.min}`; v('mass').textContent = `${num(vol \/ 1000 * 1.24)} g`;\nwarn.textContent = cur && cur.errors.length ? T.bad(cur.errors.join(', ')) : '';\nconst hand = list.length * 0.5;\nsave.innerHTML = `<strong>${T.hand(`${num(hand, hand % 1 ? 1 : 0)} ${T.hrs}`)}<\/strong>${T.auto}`; root.querySelector('.ps-parts__note').textContent = T.note(list.length);\npaintPager();\n}\nconst showsBad = () => { const c = list[sel]; return !!(c && c.errors && c.errors.length); };\nfunction paintPager() {\nconst n = plates.length, bad = showsBad();\npagerText.textContent = bad ? T.none : T.plate(page + 1, n);\npagerBtns[0].disabled = bad || page <= 0; pagerBtns[1].disabled = bad || page >= n - 1;\nstlBtn.disabled = bad || !plates[page] || !plates[page].items.length;\n}\nrenderList(); paintAll(); refresh();\nconst stage = root.querySelector('.ps-conf__stage');\nlet THREE;\nconst load = async () => {\ntry { THREE = await import(new URL(root.dataset.three, location.href).href); init(); }\ncatch (err) { console.error(err); stage.innerHTML = `<div class=\"ps-conf__error\">WebGL<\/div>`; }\n};\nif ('IntersectionObserver' in window) { const io = new IntersectionObserver(es => { if (es.some(e => e.isIntersecting)) { io.disconnect(); load(); } }, { rootMargin: '400px' }); io.observe(root); } else load();\nfunction init() {\nconst renderer = new THREE.WebGLRenderer({ antialias: true });\nrenderer.setPixelRatio(Math.min(devicePixelRatio, 2));\nrenderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFShadowMap; renderer.toneMapping = THREE.ACESFilmicToneMapping;\nstage.prepend(renderer.domElement); renderer.domElement.style.touchAction = 'pan-y';\nconst scene = new THREE.Scene(); scene.background = new THREE.Color(0xf4f4f2);\nconst camera = new THREE.PerspectiveCamera(26, 1, 0.5, 200);\nscene.add(new THREE.HemisphereLight(0xffffff, 0xcfc9be, 1.35));\nconst sun = new THREE.DirectionalLight(0xfff4e6, 2.3); sun.position.set(2.4, 6.5, 3.2); sun.target.position.set(0, 0, 0); sun.castShadow = true; sun.shadow.mapSize.set(2048, 2048); sun.shadow.bias = -0.0003; sun.shadow.normalBias = 0.006; sun.shadow.radius = 5;\nObject.assign(sun.shadow.camera, { left: -3, right: 3, top: 3, bottom: -3, near: 1, far: 16 }); scene.add(sun, sun.target);\nconst ground = new THREE.Mesh(new THREE.PlaneGeometry(60, 60), new THREE.ShadowMaterial({ opacity: 0.13 })); ground.rotation.x = -Math.PI \/ 2; ground.position.y = -0.1; ground.receiveShadow = true; scene.add(ground);\nconst partMat = new THREE.MeshStandardMaterial({ color: 0xece5d8, roughness: 0.55 }), selMat = new THREE.MeshStandardMaterial({ color: 0x9c82dd, roughness: 0.5 }), badMat = new THREE.MeshStandardMaterial({ color: 0xe0573f, roughness: 0.55 });\nconst rrect = (w, r) => { const s = new THREE.Shape(), x = w \/ 2; s.moveTo(-x + r, -x); s.lineTo(x - r, -x); s.quadraticCurveTo(x, -x, x, -x + r); s.lineTo(x, x - r); s.quadraticCurveTo(x, x, x - r, x); s.lineTo(-x + r, x); s.quadraticCurveTo(-x, x, -x, x - r); s.lineTo(-x, -x + r); s.quadraticCurveTo(-x, -x, -x + r, -x); return s; };\nconst plateGeo = (w, th, r) => new THREE.ExtrudeGeometry(rrect(w, r), { depth: th, curveSegments: 12, bevelEnabled: false }).rotateX(-Math.PI \/ 2);\nconst carrier = new THREE.Mesh(plateGeo(PL * S + 0.14, 0.05, 0.09), new THREE.MeshStandardMaterial({ color: 0xb9bcbf, roughness: 0.45 })); carrier.position.y = -0.075; carrier.receiveShadow = true; carrier.castShadow = true; scene.add(carrier);\nconst bed = new THREE.Mesh(plateGeo(PL * S, 0.025, 0.06), new THREE.MeshStandardMaterial({ color: 0x41454b, roughness: 0.82 })); bed.position.y = -0.025; bed.receiveShadow = true; scene.add(bed);\nconst lines = []; for (let k = -6; k <= 6; k++) { const q = k \/ 6 * 1.2; lines.push(q, 0.001, -1.2, q, 0.001, 1.2, -1.2, 0.001, q, 1.2, 0.001, q); }\nconst gridGeo = new THREE.BufferGeometry(); gridGeo.setAttribute('position', new THREE.Float32BufferAttribute(lines, 3)); scene.add(new THREE.LineSegments(gridGeo, new THREE.LineBasicMaterial({ color: 0x575b61 })));\nconst world = new THREE.Group(); scene.add(world);\nconst holesIn = (s, n, w, y) => { for (let i = 0; i < n; i++) { const h = new THREE.Path(); h.absarc(-w \/ 2 + w * (i + 0.5) \/ n, y, HOLE \/ 2, 0, Math.PI * 2, true); s.holes.push(h); } };\nconst ex = (s, depth) => new THREE.ExtrudeGeometry(s, { depth, curveSegments: 10, bevelEnabled: false });\nconst merge = gs => { const pos = []; for (const g of gs) { const n = g.index ? g.toNonIndexed() : g, a = n.attributes.position; for (let i = 0; i < a.count; i++) pos.push(a.getX(i), a.getY(i), a.getZ(i)); } const o = new THREE.BufferGeometry(); o.setAttribute('position', new THREE.Float32BufferAttribute(pos, 3)); o.computeVertexNormals(); return o; };\nconst emboss = (txt, t, z, maxW) => {\nconst ROWS = 11, c = document.createElement('canvas'), x = c.getContext('2d', { willReadFrequently: true }), font = `700 ${ROWS}px sans-serif`; x.font = font;\nc.width = Math.max(1, Math.ceil(x.measureText(txt).width) + 2); c.height = ROWS + 2; x.font = font; x.textBaseline = 'middle'; x.fillStyle = '#000'; x.fillText(txt, 1, c.height \/ 2 + 0.5);\nconst d = x.getImageData(0, 0, c.width, c.height).data, px = Math.min(0.55, maxW \/ c.width), out = [], H = 0.6;\nfor (let r = 0; r < c.height; r++) { let run = -1; for (let i = 0; i <= c.width; i++) { const on = i < c.width && d[(r * c.width + i) * 4 + 3] > 110; if (on && run < 0) run = i; if (!on && run >= 0) { const len = i - run; out.push(new THREE.BoxGeometry(len * px, H, px).translate((run + len \/ 2 - c.width \/ 2) * px, t + H \/ 2, z + (r - c.height \/ 2) * px)); run = -1; } } }\nreturn out;\n};\nconst partGeo = p => {\nconst t = state.wall, w = p.w, d = p.d, h = p.h, R = Math.min(5, w \/ 4, d \/ 4), ok = !p.errors.length, parts = [];\nconst sb = new THREE.Shape(), x = w \/ 2, y = d \/ 2; sb.moveTo(-x, y); sb.lineTo(-x, -y + R); sb.quadraticCurveTo(-x, -y, -x + R, -y); sb.lineTo(x - R, -y); sb.quadraticCurveTo(x, -y, x, -y + R); sb.lineTo(x, y); sb.closePath();\nif (p.n && ok) holesIn(sb, p.n, w, -d * 0.02);\nparts.push(ex(sb, t).rotateX(-Math.PI \/ 2));\nconst sl = new THREE.Shape(), r2 = Math.min(8, w \/ 4, h \/ 4); sl.moveTo(-x, 0); sl.lineTo(x, 0); sl.lineTo(x, h - r2); sl.quadraticCurveTo(x, h, x - r2, h); sl.lineTo(-x + r2, h); sl.quadraticCurveTo(-x, h, -x, h - r2); sl.closePath();\nif (p.n && ok) holesIn(sl, p.n, w, h * 0.62);\nparts.push(ex(sl, t).translate(0, 0, -d \/ 2));\nconst zc = -d \/ 2 + t, along = (shape, depth, ox) => ex(shape, depth).rotateY(-Math.PI \/ 2).translate(ox, t, zc);\nconst f = Math.min(6, (d - t) * 0.3, (h - t) * 0.3), sf = new THREE.Shape(); sf.moveTo(0, 0); sf.lineTo(f, 0); sf.quadraticCurveTo(0.1 * f, 0.1 * f, 0, f); sf.closePath();\nparts.push(along(sf, w, w \/ 2));\nconst rd = (d - t) * 0.72, rh = (h - t) * 0.72, sr = new THREE.Shape(); sr.moveTo(0, 0); sr.lineTo(rd, 0); sr.lineTo(rd * 0.12, rh * 0.86); sr.lineTo(0, rh); sr.closePath();\nparts.push(along(sr, t, -x + t), along(sr, t, x));\nif (ok && p.label) parts.push(...emboss(p.label, t, d * 0.3, w - 8));\nreturn merge(parts);\n};\nconst build = (p, mat) => { const o = new THREE.Mesh(partGeo(p), mat); o.castShadow = true; o.receiveShadow = true; o.scale.setScalar(S); return o; };\nconst clear = () => { world.traverse(c => { if (c.geometry) c.geometry.dispose(); }); world.clear(); };\nlet items = [];\nconst POP = 70, HALF = PL * S \/ 2;\nfunction rebuild(animate) {\nclear(); items = [];\nconst cur = list[sel];\nif (showsBad()) { const o = build(cur, badMat); o.position.set(0, 0, 0); world.add(o); items.push(o); }\nelse if (plates[page]) for (const it of plates[page].items) { const o = build(it.p, it.p === cur ? selMat : partMat); o.position.set(it.x * S - HALF, 0, it.z * S - HALF); world.add(o); items.push(o); }\npaintPager();\nif (animate) { start = performance.now(); items.forEach(g => { g.visible = false; }); playing = true; } else playing = false;\nreq();\n}\nlet start = 0, playing = false, az = 0.62, po = 0.92, vAz = 0, vPo = 0, dragging = false, px = 0, py = 0, raf = 0, W = 1, H = 1;\nfunction frame() {\nraf = 0;\nif (playing) { const el = performance.now() - start; let open = false; items.forEach((g, i) => { const u = Math.max(0, Math.min(1, (el - i * POP) \/ 280)); g.visible = u > 0; const e = 1 - (1 - u) ** 3; g.scale.set(S, S * Math.max(0.01, e), S); if (u < 1) open = true; }); playing = open; }\naz += vAz; po = Math.max(0.3, Math.min(1.42, po + vPo)); if (!dragging) { vAz *= 0.9; vPo *= 0.9; } else { vAz = 0; vPo = 0; }\nconst tanV = Math.tan(camera.fov * Math.PI \/ 360), dist = Math.max(3.9 \/ 2 \/ (tanV * camera.aspect), 2.5 \/ 2 \/ tanV) + 0.4;\ncamera.position.set(dist * Math.sin(po) * Math.sin(az), 0.2 + dist * Math.cos(po), dist * Math.sin(po) * Math.cos(az)); camera.lookAt(0, 0.2, 0);\nrenderer.render(scene, camera);\nif (playing || Math.abs(vAz) > 1e-4 || Math.abs(vPo) > 1e-4) req();\n}\nconst req = () => { if (!raf) raf = requestAnimationFrame(frame); };\ndownloadPlate = () => {\nconst pl = plates[page]; if (!pl || showsBad()) return; const tris = [];\nfor (const it of pl.items) { const g = partGeo(it.p), a = g.attributes.position; for (let k = 0; k < a.count; k++) tris.push(a.getX(k) + it.x, -(a.getZ(k) + it.z), a.getY(k)); g.dispose(); }\nconst n = tris.length \/ 9, buf = new ArrayBuffer(84 + n * 50), v = new DataView(buf); v.setUint32(80, n, true);\nfor (let t = 0; t < n; t++) { const o = 84 + t * 50, q = t * 9, ux = tris[q + 3] - tris[q], uy = tris[q + 4] - tris[q + 1], uz = tris[q + 5] - tris[q + 2], wx = tris[q + 6] - tris[q], wy = tris[q + 7] - tris[q + 1], wz = tris[q + 8] - tris[q + 2]; let nx = uy * wz - uz * wy, ny = uz * wx - ux * wz, nz = ux * wy - uy * wx; const l = Math.hypot(nx, ny, nz) || 1; v.setFloat32(o, nx \/ l, true); v.setFloat32(o + 4, ny \/ l, true); v.setFloat32(o + 8, nz \/ l, true); for (let c = 0; c < 9; c++) v.setFloat32(o + 12 + c * 4, tris[q + c], true); }\nconst a = document.createElement('a'); a.href = URL.createObjectURL(new Blob([buf], { type: 'model\/stl' })); a.download = `bauteile-platte-${page + 1}.stl`; a.click(); setTimeout(() => URL.revokeObjectURL(a.href), 2000);\n};\nshowPage = d => { const n = page + d; if (n < 0 || n >= plates.length) return; page = n; const cur = list[sel]; if (!plates[page].items.some(it => it.p === cur) && plates[page].items[0]) select(list.indexOf(plates[page].items[0].p), false); rebuild(true); };\nconst cv = renderer.domElement;\ncv.addEventListener('pointerdown', e => { dragging = true; cv.setPointerCapture(e.pointerId); px = e.clientX; py = e.clientY; });\ncv.addEventListener('pointermove', e => { if (!dragging) return; az -= (e.clientX - px) * 0.007; if (e.pointerType !== 'touch') po = Math.max(0.3, Math.min(1.42, po - (e.clientY - py) * 0.005)); px = e.clientX; py = e.clientY; req(); });\nconst end = () => { dragging = false; }; cv.addEventListener('pointerup', end); cv.addEventListener('pointercancel', end);\nlet dirty = false;\nschedule = () => { if (dirty) return; dirty = true; requestAnimationFrame(() => { dirty = false; refresh(); rebuild(false); }); };\nregen = () => { refresh(); rebuild(true); };\nroot.querySelector('.ps-conf__dimtoggle').addEventListener('click', () => regen());\nnew ResizeObserver(() => { W = stage.clientWidth; H = stage.clientHeight; if (!W || !H) return; renderer.setSize(W, H, false); camera.aspect = W \/ H; camera.updateProjectionMatrix(); req(); }).observe(stage);\nrebuild(!matchMedia('(prefers-reduced-motion: reduce)').matches);\n}\n<\/script>\n<\/div><\/div>\n\n\n<div class=\"ps-lp-end\" data-no-translation> <section class=\"lp-sec\"><h2 class=\"lp-h2\">Vier Schritte, die Sie heute unn\u00f6tig Zeit kosten<\/h2><div class=\"lp-steps\"><div><b>01<\/b><h3>Varianten erzeugen<\/h3><p>Bauteile aus Tabellen, ERP-Daten oder Kundeneingaben.<\/p><\/div><div><b>02<\/b><h3>Regeln pr\u00fcfen<\/h3><p>Wandst\u00e4rke, Bauraum, Abst\u00e4nde und Toleranzen, bevor etwas gedruckt wird.<\/p><\/div><div><b>03<\/b><h3>Druck vorbereiten<\/h3><p>Ausrichtung, Plattenbelegung und druckfertige Dateien.<\/p><\/div><div><b>04<\/b><h3>Werkzeugwege optimieren<\/h3><p>Eigener G-Code, Brims und Innenstrukturen f\u00fcr Ihr Material und Ihre Maschine.<\/p><\/div><\/div><\/section> <section class=\"lp-sec\"><h2 class=\"lp-h2\">Aus der Praxis<\/h2><div class=\"pp-cards\"><a class=\"pp-card\" href=\"\/de\/2025\/11\/13\/3d-printed-boat\/\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2025\/11\/3D-Printed-Boat-3D-gedrucktes-Boot.png\" alt=\"Fertigungskette f\u00fcr ein 3D-gedrucktes Boot\"><h3>Fertigungskette f\u00fcr ein 3D-gedrucktes Boot<\/h3><\/a><a class=\"pp-card\" href=\"\/de\/2024\/11\/28\/3d-printed-luxury-handrails\/\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/10\/Store-Amsterdam-LV-Blackengine-7-1024x683.jpg-768x512.webp\" alt=\"Handl\u00e4ufe f\u00fcr einen Store in Amsterdam\"><h3>Handl\u00e4ufe f\u00fcr einen Store in Amsterdam<\/h3><\/a><a class=\"pp-card\" href=\"\/de\/2026\/10\/28\/larger-slicer-grasshopper-robotic-3d-printing\/\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2026\/10\/kuka-kr120-weber-dxr25-robotic-3d-printing-768x576.jpg\" alt=\"LARGER.slicer: Robotischer 3D-Druck aus Grasshopper\"><h3>LARGER.slicer: Robotischer 3D-Druck aus Grasshopper<\/h3><\/a><a class=\"pp-card\" href=\"\/de\/2024\/04\/08\/lfam-custom-inner-structures\/\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/10\/Gelaender-Schnitt-Druchs-Modell-3D-Druck-UNIKAT-scaled-1-768x512.jpg\" alt=\"Eigener G-Code und Innenstrukturen\"><h3>Eigener G-Code und Innenstrukturen<\/h3><\/a><\/div><\/section> <section class=\"lp-sec pp-tech\"><div><h2 class=\"lp-h2\">Lohnt sich das bei Ihnen?<\/h2><ul class=\"pp-fit\"><li>Sie fertigen viele Varianten desselben Bauteils.<\/li><li>Das Konstruktionswissen liegt bei wenigen Personen.<\/li><li>Die Druckvorbereitung dauert l\u00e4nger als die Konstruktions\u00e4nderung.<\/li><li>Drucke scheitern an Fehlern, die eine Regel h\u00e4tte abfangen k\u00f6nnen.<\/li><\/ul><\/div><div><h2 class=\"lp-h2\">F\u00fcr die Maschinen, die Sie schon haben<\/h2><dl class=\"pp-mach\"><div><dt>FDM<\/dt><dd>Bambu Lab, Ultimaker und gro\u00dfe Baur\u00e4ume bis 2700 \u00d7 2000 \u00d7 2000 mm<\/dd><\/div><div><dt>SLS<\/dt><dd>Hochfeste Bauteile bis 350 \u00d7 350 \u00d7 400 mm<\/dd><\/div><div><dt>Pellet-Gro\u00dfformat<\/dt><dd>Ginger One<\/dd><\/div><div><dt>Roboterzellen<\/dt><dd>Weber DXR25 mit KUKA KR120<\/dd><\/div><\/dl><ul class=\"lp-chips\"><li>PLA<\/li><li>PETG<\/li><li>PCTG<\/li><li>PA11<\/li><li>PA12<\/li><li>TPU<\/li><li>PEEK<\/li><li>ASA<\/li><li>ABS<\/li><\/ul><\/div><\/section> <section class=\"lp-final pp-final\"><div><h2>Welches Bauteil automatisieren wir zuerst?<\/h2><p>Schicken Sie uns ein Bauteil. Wir sagen Ihnen, was sich automatisieren l\u00e4sst und ob es sich bei Ihrer St\u00fcckzahl lohnt.<\/p><div class=\"lp-actions\"><a class=\"lp-btn\" href=\"mailto:hallo@parametricsolutions.de?subject=Anfrage:%203D-Druck-Automatisierung\">Bauteil einreichen<\/a><\/div><p class=\"pp-also\">Sie brauchen auch die Teile? Die drucken wir f\u00fcr Sie.<\/p><\/div><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png\" alt=\"Gro\u00dfformat-3D-Druck in der Produktion\"><\/section><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Wir automatisieren die Erstellung von 3D-Druck-Bauteilen: von der Variantenliste zu gepr\u00fcften, druckfertigen Daten f\u00fcr Ihre Maschinen.<\/p>","protected":false},"author":1,"featured_media":1079,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-2948","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>3D Printing Automation - PARAMETRIC Solutions<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/parametricsolutions.de\/de\/3d-printing\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"3D Printing Automation - PARAMETRIC Solutions\" \/>\n<meta property=\"og:description\" content=\"We automate the creation of 3D-printed parts: from variant lists to checked, print-ready data for your machines.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/parametricsolutions.de\/de\/3d-printing\/\" \/>\n<meta property=\"og:site_name\" content=\"PARAMETRIC Solutions\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-02T17:29:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/11\/Parametric-Solutions-Social-Media.png\" \/><meta property=\"og:image\" content=\"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-1024x687.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"687\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/\",\"name\":\"3D Printing Automation - PARAMETRIC Solutions\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/parametricsolutions.de\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png\",\"datePublished\":\"2026-11-02T17:07:12+00:00\",\"dateModified\":\"2026-11-02T17:29:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/#primaryimage\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png\",\"contentUrl\":\"https:\\\/\\\/parametricsolutions.de\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png\",\"width\":1410,\"height\":946,\"caption\":\"3D Printing Projects References\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/3d-printing\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/parametricsolutions.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"3D Printing Automation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#website\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/\",\"name\":\"PARAMETRIC Solutions\",\"description\":\"Computational Design, Digital Automation &amp; 3D Configuration\",\"publisher\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/parametricsolutions.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#organization\",\"name\":\"PARAMETRIC Solutions\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/parametricsolutions.de\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Parametric-Solutions-Logo-Dark.png\",\"contentUrl\":\"https:\\\/\\\/parametricsolutions.de\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Parametric-Solutions-Logo-Dark.png\",\"width\":453,\"height\":37,\"caption\":\"PARAMETRIC Solutions\"},\"image\":{\"@id\":\"https:\\\/\\\/parametricsolutions.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/96184690\",\"https:\\\/\\\/www.instagram.com\\\/moewe.crafts\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"3D Printing Automation - PARAMETRIC Solutions","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/parametricsolutions.de\/de\/3d-printing\/","og_locale":"de_DE","og_type":"article","og_title":"3D Printing Automation - PARAMETRIC Solutions","og_description":"We automate the creation of 3D-printed parts: from variant lists to checked, print-ready data for your machines.","og_url":"https:\/\/parametricsolutions.de\/de\/3d-printing\/","og_site_name":"PARAMETRIC Solutions","article_modified_time":"2026-11-02T17:29:52+00:00","og_image":[{"url":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/11\/Parametric-Solutions-Social-Media.png","type":"","width":"","height":""},{"width":1024,"height":687,"url":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-1024x687.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/parametricsolutions.de\/3d-printing\/","url":"https:\/\/parametricsolutions.de\/3d-printing\/","name":"3D Printing Automation - PARAMETRIC Solutions","isPartOf":{"@id":"https:\/\/parametricsolutions.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/parametricsolutions.de\/3d-printing\/#primaryimage"},"image":{"@id":"https:\/\/parametricsolutions.de\/3d-printing\/#primaryimage"},"thumbnailUrl":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png","datePublished":"2026-11-02T17:07:12+00:00","dateModified":"2026-11-02T17:29:52+00:00","breadcrumb":{"@id":"https:\/\/parametricsolutions.de\/3d-printing\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/parametricsolutions.de\/3d-printing\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/parametricsolutions.de\/3d-printing\/#primaryimage","url":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png","contentUrl":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png","width":1410,"height":946,"caption":"3D Printing Projects References"},{"@type":"BreadcrumbList","@id":"https:\/\/parametricsolutions.de\/3d-printing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/parametricsolutions.de\/"},{"@type":"ListItem","position":2,"name":"3D Printing Automation"}]},{"@type":"WebSite","@id":"https:\/\/parametricsolutions.de\/#website","url":"https:\/\/parametricsolutions.de\/","name":"PARAMETRIC Solutions","description":"Computational Design, Automatisierung &amp; 3D-Konfiguration","publisher":{"@id":"https:\/\/parametricsolutions.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/parametricsolutions.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/parametricsolutions.de\/#organization","name":"PARAMETRIC Solutions","url":"https:\/\/parametricsolutions.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/parametricsolutions.de\/#\/schema\/logo\/image\/","url":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/09\/Parametric-Solutions-Logo-Dark.png","contentUrl":"https:\/\/parametricsolutions.de\/wp-content\/uploads\/2024\/09\/Parametric-Solutions-Logo-Dark.png","width":453,"height":37,"caption":"PARAMETRIC Solutions"},"image":{"@id":"https:\/\/parametricsolutions.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/96184690","https:\/\/www.instagram.com\/moewe.crafts\/"]}]}},"uagb_featured_image_src":{"full":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png",1410,946,false],"thumbnail":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-150x150.png",150,150,true],"medium":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-300x201.png",300,201,true],"medium_large":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-768x515.png",640,429,true],"large":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-1024x687.png",640,429,true],"1536x1536":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png",1410,946,false],"2048x2048":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png",1410,946,false],"trp-custom-language-flag":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1.png",18,12,false],"razzi-blog-grid":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-600x398.png",600,398,true],"mailpoet_newsletter_max":["https:\/\/parametricsolutions.de\/wp-content\/uploads\/2023\/06\/Grossformat-Produktion-3D-Druck-Parametric-Solutions-1-1320x886.png",1320,886,true]},"uagb_author_info":{"display_name":"PARAMETRIC.solutions","author_link":"https:\/\/parametricsolutions.de\/de\/author\/moritz\/"},"uagb_comment_info":0,"uagb_excerpt":"We automate the creation of 3D-printed parts: from variant lists to checked, print-ready data for your machines.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages\/2948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/comments?post=2948"}],"version-history":[{"count":1,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages\/2948\/revisions"}],"predecessor-version":[{"id":2949,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/pages\/2948\/revisions\/2949"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/media\/1079"}],"wp:attachment":[{"href":"https:\/\/parametricsolutions.de\/de\/wp-json\/wp\/v2\/media?parent=2948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}