{"id":4305,"date":"2026-01-21T14:36:14","date_gmt":"2026-01-21T12:36:14","guid":{"rendered":"https:\/\/wolfinger.at\/daemmen\/?page_id=4305"},"modified":"2026-03-17T11:24:07","modified_gmt":"2026-03-17T09:24:07","slug":"dichterechner","status":"publish","type":"page","link":"https:\/\/wolfinger.at\/daemmen\/dichterechner\/","title":{"rendered":"Dichterechner"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4305\" class=\"elementor elementor-4305\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6e2d080 e-flex e-con-boxed e-con e-parent\" data-id=\"6e2d080\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0ca80f0 elementor-widget elementor-widget-heading\" data-id=\"0ca80f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Einblasdichterechner<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-912b935 elementor-widget elementor-widget-text-editor\" data-id=\"912b935\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Mit diesem Rechner k\u00f6nnen Sie auf Basis von Konstruktionen, D\u00e4mmst\u00e4rke, und Einbausituation die erforderliche Einblasdichte f\u00fcr Wolfinger Zellulosed\u00e4mmung und Wolfinger NatureFill schnell ermitteln. Zus\u00e4tzliche Einflussfaktoren wie Oberfl\u00e4chenbeschaffenheit, Gefachl\u00e4nge, Werksbef\u00fcllung werden dabei ber\u00fccksichtigt.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-476891d elementor-widget elementor-widget-html\" data-id=\"476891d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"wd-card\">\r\n  <h3 class=\"wd-title\">Einblasdichte-Rechner<\/h3>\r\n\r\n  <div class=\"wd-grid\">\r\n    <!-- Konstruktion -->\r\n    <div class=\"wd-row\">\r\n      <label>Konstruktion<\/label>\r\n      <select id=\"konstruktion\">\r\n        <option value=\"decke_offen\">Decke offen aufgeblasen<\/option>\r\n        <option value=\"decke_geschlossen\">Decke geschlossen \/ Dachschr\u00e4ge &lt; 20\u00b0<\/option>\r\n        <option value=\"dach_20_45\">Dachschr\u00e4ge 20\u00b0\u201345\u00b0<\/option>\r\n        <option value=\"dach_46_60\">Dachschr\u00e4ge 46\u00b0\u201360\u00b0<\/option>\r\n        <option value=\"dach_ueber_60\">Dachschr\u00e4ge &gt; 60\u00b0<\/option>\r\n        <option value=\"wand\">Wand<\/option>\r\n      <\/select>\r\n    <\/div>\r\n\r\n    <!-- D\u00e4mmst\u00e4rke als Eingabefeld -->\r\n    <div class=\"wd-row\">\r\n      <label>D\u00e4mmst\u00e4rke (cm)<\/label>\r\n      <input id=\"daemm_cm\" type=\"number\" min=\"1\" max=\"40\" step=\"0.1\" placeholder=\"z.B. 24\">\r\n      <div class=\"hint\" id=\"daemmHint\">Max. 40 cm<\/div>\r\n    <\/div>\r\n\r\n    <!-- Oberfl\u00e4che nur Dach >45\u00b0 & Wand -->\r\n    <div class=\"wd-row surface-only\" style=\"display:none;\">\r\n      <label class=\"wd-label-info\">\r\n  Oberfl\u00e4che Seite 1\r\n  <span class=\"wd-i\" tabindex=\"0\" aria-label=\"Hinweis zu rau\/glatt\">i\r\n    <span class=\"wd-tip\">\r\n      <b>Rau:<\/b> z.B. s\u00e4geraues Holz, Holzweichfaserplatten, rau verputze W\u00e4nde, rauer Untergrund (mehr Reibung).<br>\r\n      <b>Glatt:<\/b> z.B. OSB-Platten, beschichtete Hartfaserplatten, PE und PP Folien, glatte Beplankung (weniger Reibung).\r\n    <\/span>\r\n  <\/span>\r\n<\/label>\r\n      <select id=\"seite1\">\r\n        <option value=\"rau\">Rau<\/option>\r\n        <option value=\"glatt\">Glatt (+2 kg\/m\u00b3)<\/option>\r\n      <\/select>\r\n    <\/div>\r\n\r\n    <div class=\"wd-row surface-only\" style=\"display:none;\">\r\n      <label class=\"wd-label-info\">\r\n  Oberfl\u00e4che Seite 2\r\n  <span class=\"wd-i\" tabindex=\"0\" aria-label=\"Hinweis zu rau\/glatt\">i\r\n    <span class=\"wd-tip\">\r\n      <b>Rau:<\/b> z.B. offene Holzschalung, s\u00e4geraues Holz, rauer Untergrund (mehr Reibung).<br>\r\n      <b>Glatt:<\/b> z.B. OSB\/Spanplatte, glatte Folie, glatte Beplankung (weniger Reibung).\r\n    <\/span>\r\n  <\/span>\r\n<\/label>\r\n      <select id=\"seite2\">\r\n        <option value=\"rau\">Rau<\/option>\r\n        <option value=\"glatt\">Glatt (+2 kg\/m\u00b3)<\/option>\r\n      <\/select>\r\n    <\/div>\r\n\r\n    <!-- Gefachl\u00e4nge nur Dach >45\u00b0 & Wand -->\r\n    <div class=\"wd-row length-only\" style=\"display:none;grid-column:1\/-1\">\r\n      <label>Gefachl\u00e4nge<\/label>\r\n      <select id=\"gefachlaenge\"><\/select>\r\n      <div class=\"hint\" id=\"lenHint\"><\/div>\r\n    <\/div>\r\n\r\n    <!-- Gefachbreite nur Wand -->\r\n    <div class=\"wd-row wall-only\" style=\"display:none;\">\r\n      <label>Gefachbreite (cm)<\/label>\r\n      <input id=\"gefachbreite\" type=\"number\" min=\"0\" max=\"100\" step=\"1\" placeholder=\"z.B. 62\">\r\n      <div class=\"hint\">Maximal 100 cm m\u00f6glich<\/div>\r\n      <div class=\"warn\" id=\"warnBreite\" style=\"display:none;\">\r\n        Hinweis: Bei Gefachbreiten &gt; 85 cm ist das Gefach im <b>Zweischlauchverfahren<\/b> einzublasen.\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Werksbef\u00fcllung -->\r\n    <div class=\"wd-row\">\r\n      <label class=\"checkline\">\r\n        <input id=\"werksbefuellung\" type=\"checkbox\">\r\n        Werksbef\u00fcllung (+8% bei Dachschr\u00e4gen und W\u00e4nden)\r\n      <\/label>\r\n      <div class=\"hint\">Wird nur bei Dachschr\u00e4gen (&gt;20\u00b0) und W\u00e4nden ber\u00fccksichtigt.<\/div>\r\n    <\/div>\r\n\r\n    <!-- Bauvorhaben -->\r\n    <div class=\"wd-row\" style=\"grid-column:1\/-1\">\r\n      <label>Bauvorhaben<\/label>\r\n      <textarea id=\"bauvorhaben\" rows=\"4\" placeholder=\"z.B. Baustelle \/ Projektname, Adresse, Kunde, Ansprechpartner, Notizen \u2026\"><\/textarea>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- Ergebnis -->\r\n  <div class=\"result\">\r\n<div class=\"big\">\r\n  Ergebnis: <span id=\"out\">\u2014<\/span> kg\/m\u00b3\r\n  <span id=\"settleHint\" class=\"after-settle\" style=\"display:none;\">\r\n    (Dichte nach Setzung)\r\n  <\/span>\r\n<\/div>\r\n    <div class=\"muted\" id=\"details\"><\/div>\r\n    <div class=\"warn\" id=\"warnZulassung\" style=\"display:none;\">\r\n  <b>Hinweis Zulassung:<\/b> Der berechnete Wert liegt \u00fcber <b>65 kg\/m\u00b3<\/b>.\r\n  Unsere Zulassung gilt bis <b>65 kg\/m\u00b3<\/b>. Bitte Ausf\u00fchrung\/Planung pr\u00fcfen und ggf. R\u00fccksprache halten.\r\n<\/div>\r\n    <button id=\"pdfBtn\" class=\"wd-btn\" type=\"button\">PDF erstellen<\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .wd-card{max-width:900px;margin:24px auto;padding:18px;border:1px solid #e5e5e5;border-radius:12px;font-family:system-ui}\r\n  .wd-title{margin:0 0 12px}\r\n  .wd-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}\r\n  .wd-row{display:flex;flex-direction:column;gap:6px}\r\n  label{font-size:14px}\r\n  select, textarea, input{padding:10px;border:1px solid #cfcfcf;border-radius:8px;font-size:16px}\r\n  textarea{resize:vertical}\r\n  .hint{font-size:13px;color:#555;line-height:1.3}\r\n  .warn{font-size:14px;color:#7a3b00;background:#fff3cd;border:1px solid #ffeeba;padding:10px;border-radius:8px;line-height:1.35}\r\n  .result{margin-top:14px;padding:14px;border-radius:10px;background:#f7f7f7}\r\n  .big{font-size:22px;font-weight:700}\r\n  .muted{color:#666;font-size:13px;margin-top:6px;line-height:1.35}\r\n  .wd-btn{margin-top:12px;padding:10px 16px;border-radius:8px;border:none;background:#4aa53a;color:#fff;font-size:15px;cursor:pointer}\r\n  .checkline{display:flex;gap:10px;align-items:center;font-size:14px}\r\n  @media (max-width:700px){.wd-grid{grid-template-columns:1fr}}\r\n  \r\n  .wd-label-info{display:flex;align-items:center;gap:8px}\r\n\r\n.wd-i{\r\n  position:relative;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  width:18px;height:18px;\r\n  border-radius:50%;\r\n  border:1px solid #9aa0a6;\r\n  font-size:12px;\r\n  line-height:1;\r\n  color:#555;\r\n  cursor:help;\r\n  user-select:none;\r\n}\r\n\r\n.wd-tip{\r\n  position:absolute;\r\n  left:50%;\r\n  top:125%;\r\n  transform:translateX(-50%);\r\n  width:min(320px, 80vw);\r\n  background:#111;\r\n  color:#fff;\r\n  padding:10px 12px;\r\n  border-radius:10px;\r\n  font-size:15px;\r\n  line-height:1.35;\r\n  box-shadow:0 10px 30px rgba(0,0,0,.25);\r\n  opacity:0;\r\n  pointer-events:none;\r\n  transition:opacity .15s ease;\r\n  z-index:9999;\r\n}\r\n\r\n.wd-tip::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  left:50%;\r\n  top:-6px;\r\n  transform:translateX(-50%);\r\n  border:6px solid transparent;\r\n  border-bottom-color:#111;\r\n}\r\n\r\n\/* Anzeige bei Hover & Focus *\/\r\n.wd-i:hover .wd-tip,\r\n.wd-i:focus .wd-tip{\r\n  opacity:1;\r\n  pointer-events:auto;\r\n}\r\n\r\n.after-settle{\r\n  font-size:16px;\r\n  color:#666;\r\n  font-weight:400;\r\n  margin-left:6px;\r\n}\r\n\r\n<\/style>\r\n\r\n<script src=\"https:\/\/unpkg.com\/pdf-lib@1.17.1\/dist\/pdf-lib.min.js\"><\/script>\r\n\r\n<script>\r\n(() => {\r\n  \/\/ ---------------- Basisdichten ----------------\r\n  const basis = {\r\n    decke_offen:        { bis16:27, \"17_22\":30, \"23_28\":31, \"29_34\":33, \"35_40\":35 },\r\n    decke_geschlossen:  { bis16:42, \"17_22\":42, \"23_28\":45, \"29_34\":46, \"35_40\":50 },\r\n    dach_20_45:         { bis16:46, \"17_22\":48, \"23_28\":50, \"29_34\":52, \"35_40\":54 },\r\n    dach_46_60:         { bis16:48, \"17_22\":50, \"23_28\":52, \"29_34\":54, \"35_40\":58 },\r\n    dach_ueber_60:      { bis16:50, \"17_22\":52, \"23_28\":54, \"29_34\":56, \"35_40\":58 },\r\n    wand:               { bis16:50, \"17_22\":52, \"23_28\":54, \"29_34\":56, \"35_40\":58 }\r\n  };\r\n\r\n  const el = (id) => document.getElementById(id);\r\n  const textSel = (id) => el(id)?.selectedOptions?.[0]?.text || \"\";\r\n\r\n  \/\/ --- Relevanz ---\r\n  const isWall     = (k) => (k === \"wand\");\r\n  const isOpen     = (k) => (k === \"decke_offen\");\r\n  const isRoofOrWall = (k) => (\r\n    k === \"dach_20_45\" || k === \"dach_46_60\" || k === \"dach_ueber_60\" || k === \"wand\"\r\n  );\r\n\r\n  \/\/ Oberfl\u00e4che: 46\u201360, >60, Wand\r\n  const surfaceRelevant = (k) => (k === \"dach_46_60\" || k === \"dach_ueber_60\" || k === \"wand\");\r\n\r\n  \/\/ L\u00e4nge: 46\u201360, >60, Wand\r\n  const lengthRelevant = (k) => (k === \"dach_46_60\" || k === \"dach_ueber_60\" || k === \"wand\");\r\n\r\n  \/\/ --- Zuschlagsfaktoren abh\u00e4ngig von Konstruktion ---\r\n  function surfaceAddPerSide(k){\r\n    if (k === \"dach_46_60\") return 1;\r\n    if (k === \"dach_ueber_60\" || k === \"wand\") return 2;\r\n    return 0;\r\n  }\r\n\r\n  function lengthAddPerStep(k){\r\n    if (k === \"dach_46_60\") return 2;\r\n    if (k === \"dach_ueber_60\" || k === \"wand\") return 3;\r\n    return 0;\r\n  }\r\n\r\n  \/\/ D\u00e4mmst\u00e4rke -> Kategorie\r\n  function thicknessToBand(cm){\r\n    if (cm <= 16) return \"bis16\";\r\n    if (cm <= 22) return \"17_22\";\r\n    if (cm <= 28) return \"23_28\";\r\n    if (cm <= 34) return \"29_34\";\r\n    return \"35_40\";\r\n  }\r\n\r\n  \/\/ ---------------- Gefachl\u00e4nge Dropdown dynamisch ----------------\r\n  let lastLenKey = null;\r\n  function setupLengthSelect(k){\r\n    const sel  = el(\"gefachlaenge\");\r\n    const hint = el(\"lenHint\");\r\n\r\n    const maxM = isWall(k) ? 4 : 5;                 \/\/ Wand max 4, Dach max 5\r\n    const stepAdd = lengthAddPerStep(k);            \/\/ 46\u201360:2 \/ >60:3 \/ Wand:3\r\n    const key = `${isWall(k) ? \"wall\" : \"roof\"}_${maxM}_${stepAdd}`;\r\n\r\n    if (key === lastLenKey) return;\r\n\r\n    const prev = sel.value || \"0\";\r\n    sel.innerHTML = \"\";\r\n\r\n    sel.append(new Option(\"< 3 m (kein Zuschlag)\", \"0\"));\r\n\r\n    \/\/ <4 m = 1 Schritt\r\n    sel.append(new Option(`< 4 m (+${1*stepAdd} kg\/m\u00b3)`, \"1\"));\r\n\r\n    \/\/ <5 m = 2 Schritte (nur wenn erlaubt)\r\n    if (maxM === 5) {\r\n      sel.append(new Option(`< 5 m (+${2*stepAdd} kg\/m\u00b3)`, \"2\"));\r\n      hint.textContent = `Maximal 5 m m\u00f6glich (${k === \"dach_46_60\" ? \"Dachschr\u00e4ge 46\u201360\u00b0\" : \"Dachschr\u00e4ge >60\u00b0\"})`;\r\n    } else {\r\n      hint.textContent = \"Maximal 4 m m\u00f6glich (Wand)\";\r\n    }\r\n\r\n    \/\/ Auswahl wiederherstellen wenn m\u00f6glich\r\n    sel.value = Array.from(sel.options).some(o => o.value === prev) ? prev : \"0\";\r\n    lastLenKey = key;\r\n  }\r\n\r\n  \/\/ ---------------- Oberfl\u00e4che Text dynamisch ----------------\r\n  function updateSurfaceLabels(k){\r\n    const add = surfaceAddPerSide(k);\r\n    \/\/ wenn Oberfl\u00e4che nicht relevant ist, lassen wir den Text wie er ist \u2013 wird sowieso versteckt\r\n    if (!surfaceRelevant(k)) return;\r\n\r\n    \/\/ Glatt-Option Text in beiden Selects anpassen\r\n    [\"seite1\",\"seite2\"].forEach(id => {\r\n      const s = el(id);\r\n      if (!s) return;\r\n      const opt = Array.from(s.options).find(o => o.value === \"glatt\");\r\n      if (opt) opt.textContent = `Glatt (+${add} kg\/m\u00b3)`;\r\n    });\r\n  }\r\n\r\n  \/\/ ---------------- Sichtbarkeit ----------------\r\n  function setVisibility(){\r\n    const k = el(\"konstruktion\").value;\r\n\r\n    \/\/ Oberfl\u00e4che\r\n    document.querySelectorAll(\".surface-only\").forEach(r => {\r\n      r.style.display = surfaceRelevant(k) ? \"\" : \"none\";\r\n    });\r\n\r\n    \/\/ L\u00e4nge\r\n    const lenRow = document.querySelector(\".length-only\");\r\n    if (lengthRelevant(k)) {\r\n      lenRow.style.display = \"\";\r\n      setupLengthSelect(k);\r\n    } else {\r\n      lenRow.style.display = \"none\";\r\n      lastLenKey = null;\r\n    }\r\n\r\n    \/\/ Wandbreite\r\n    document.querySelectorAll(\".wall-only\").forEach(r => {\r\n      r.style.display = isWall(k) ? \"\" : \"none\";\r\n    });\r\n\r\n\/\/ Hint f\u00fcr offen aufblasen\r\nconst cm = Number(el(\"daemm_cm\").value || 0);\r\nif (isOpen(k) && cm > 0) {\r\n  const faktor = (cm <= 25) ? 1.10 : 1.15;\r\n  const prozent = (cm <= 25) ? 10 : 15;\r\n  const einblas = Math.round(cm * faktor * 10) \/ 10;\r\n\r\n  el(\"daemmHint\").textContent =\r\n    `Offen aufblasen: Einblash\u00f6he (+${prozent}%) \u2248 ${einblas} cm (fertig: ${cm} cm)`;\r\n} else {\r\n  el(\"daemmHint\").textContent = \"Max. 40 cm\";\r\n}\r\n\r\n    updateSurfaceLabels(k);\r\n  }\r\n\r\n  function handleWidthWarning(){\r\n    const k = el(\"konstruktion\").value;\r\n    if (!isWall(k)) { el(\"warnBreite\").style.display = \"none\"; return; }\r\n\r\n    let w = Number(el(\"gefachbreite\").value || 0);\r\n    if (w > 100) { w = 100; el(\"gefachbreite\").value = 100; }\r\n    if (w < 0)   { w = 0;   el(\"gefachbreite\").value = 0; }\r\n\r\n    el(\"warnBreite\").style.display = (w > 85) ? \"\" : \"none\";\r\n  }\r\n\r\n  \/\/ ---------------- Berechnung ----------------\r\n  function calc(){\r\n    const k = el(\"konstruktion\").value;\r\n\r\n    let cm = Number(el(\"daemm_cm\").value || 0);\r\n    if (cm > 40) { cm = 40; el(\"daemm_cm\").value = 40; }\r\n    if (cm < 0)  { cm = 0;  el(\"daemm_cm\").value = 0; }\r\n\r\n    setVisibility();\r\n    handleWidthWarning();\r\n\r\n    if (!cm) {\r\n      el(\"out\").textContent = \"\u2014\";\r\n      el(\"details\").textContent = \"Bitte D\u00e4mmst\u00e4rke eingeben.\";\r\n      return;\r\n    }\r\n\r\n    const band = thicknessToBand(cm);\r\n    const base = basis[k][band];\r\n\r\n    \/\/ Oberfl\u00e4che\r\n    let glatt = 0;\r\n    const surfacesActive = surfaceRelevant(k);\r\n    const perSide = surfaceAddPerSide(k);\r\n    if (surfacesActive) {\r\n      if (el(\"seite1\").value === \"glatt\") glatt += perSide;\r\n      if (el(\"seite2\").value === \"glatt\") glatt += perSide;\r\n    }\r\n\r\n    \/\/ L\u00e4nge\r\n    const lenActive = lengthRelevant(k);\r\n    const perStep = lengthAddPerStep(k);\r\n    const steps = lenActive ? Number(el(\"gefachlaenge\").value) : 0;\r\n    const lenAdd = lenActive ? (steps * perStep) : 0;\r\n\r\n    \/\/ Werksbef\u00fcllung (+8% bei Dachschr\u00e4gen >20\u00b0 & W\u00e4nden)\r\n    const werkActive = el(\"werksbefuellung\").checked && isRoofOrWall(k);\r\n\r\nconst basePlus = base + glatt + lenAdd;\r\n\r\n\/\/ Tabellenwert = Dichte vor Setzung\r\nconst dichteVorSetzung = werkActive\r\n  ? Math.round(basePlus * 1.08)\r\n  : Math.round(basePlus);\r\n\r\nlet result = dichteVorSetzung;\r\nlet openInfo = \"\";\r\n\r\n\/\/ Nur bei offen aufblasen: Dichte nach Setzung + \u00dcberd\u00e4mmung\r\nif (isOpen(k)) {\r\n  const faktor = (cm <= 25) ? 1.10 : 1.15;\r\n  const prozent = (cm <= 25) ? 10 : 15;\r\n\r\n  const einblasHoehe = Math.round(cm * faktor * 10) \/ 10;\r\n  const dichteNachSetzung = Math.round(dichteVorSetzung * faktor);\r\n\r\n  result = dichteNachSetzung;\r\n\r\n  openInfo =\r\n    ` \u00b7 Dichte vor Setzung: ${dichteVorSetzung} kg\/m\u00b3` +\r\n    ` \u00b7 Einblash\u00f6he (+${prozent}%): ca. ${einblasHoehe} cm (fertig: ${cm} cm)`;\r\n}\r\n\r\nel(\"out\").textContent = result;\r\nel(\"settleHint\").style.display = isOpen(k) ? \"\" : \"none\";\r\nel(\"warnZulassung\").style.display = (result > 65) ? \"\" : \"none\";\r\n\r\nconst parts = [\r\n  `Basis: ${base} kg\/m\u00b3`,\r\n  (surfacesActive ? `Glatte Seiten: +${glatt}` : null),\r\n  (lenActive ? `Gefachl\u00e4nge: +${lenAdd}` : null),\r\n  (werkActive ? `Werksbef\u00fcllung: +8%` : null)\r\n].filter(Boolean);\r\n\r\nel(\"details\").textContent = parts.join(\" \u00b7 \") + openInfo;\r\n  }\r\n\r\n  \/\/ -------- PDF Wrap Helper bleibt wie bei dir --------\r\n  function wrapTextPreserveNewlines(text, font, size, maxWidth) {\r\n    const paragraphs = String(text || \"\").replace(\/\\r\/g, \"\").split(\"\\n\");\r\n    const lines = [];\r\n    for (const p of paragraphs) {\r\n      if (p === \"\") { lines.push(\"\"); continue; }\r\n      const words = p.split(\/\\s+\/);\r\n      let line = \"\";\r\n      for (const w of words) {\r\n        const test = line ? (line + \" \" + w) : w;\r\n        const wWidth = font.widthOfTextAtSize(test, size);\r\n        if (wWidth <= maxWidth) line = test;\r\n        else { if (line) lines.push(line); line = w; }\r\n      }\r\n      if (line) lines.push(line);\r\n    }\r\n    return lines;\r\n  }\r\n  function drawWrapped(page, text, x, y, font, size, maxWidth, lineHeight) {\r\n    const lines = wrapTextPreserveNewlines(text, font, size, maxWidth);\r\n    let yy = y;\r\n    for (const ln of lines) {\r\n      if (ln === \"\") { yy -= lineHeight; continue; }\r\n      page.drawText(ln, { x, y: yy, size, font });\r\n      yy -= lineHeight;\r\n    }\r\n    return yy;\r\n  }\r\n\r\n  \/\/ ---------------- PDF erstellen (angepasste Zuschl\u00e4ge) ----------------\r\n  async function generatePdf(){\r\n    if (!window.PDFLib) { alert(\"PDFLib nicht geladen.\"); return; }\r\n\r\n    const templateUrl =\r\n      \"https:\/\/wolfinger.at\/daemmen\/wp-content\/uploads\/2026\/02\/Verdichtungstabelle-Vorlage.pdf\";\r\n\r\n    const resp = await fetch(templateUrl, { cache:\"no-store\" });\r\n    if (!resp.ok) { alert(`Vorlage nicht erreichbar (HTTP ${resp.status})`); return; }\r\n\r\n    const bytes = await resp.arrayBuffer();\r\n    const pdfDoc = await PDFLib.PDFDocument.load(bytes);\r\n    const page = pdfDoc.getPages()[0];\r\n    const { width } = page.getSize();\r\n\r\n    const fontReg  = await pdfDoc.embedFont(PDFLib.StandardFonts.Helvetica);\r\n    const fontBold = await pdfDoc.embedFont(PDFLib.StandardFonts.HelveticaBold);\r\n\r\n    const x = 52;\r\n    const maxW = width - 52 - 52;\r\n    let y = 280; \/\/ deine Position bleibt\r\n\r\n    const k = el(\"konstruktion\").value;\r\n    let cm = Number(el(\"daemm_cm\").value || 0);\r\n    if (!cm) { alert(\"Bitte D\u00e4mmst\u00e4rke (cm) eingeben.\"); return; }\r\n    if (cm > 40) cm = 40;\r\n\r\n    const band = thicknessToBand(cm);\r\n    const base = basis[k][band];\r\n\r\n    const surfacesActive = surfaceRelevant(k);\r\n    const perSide = surfaceAddPerSide(k);\r\n    let glatt = 0;\r\n    if (surfacesActive) {\r\n      if (el(\"seite1\").value === \"glatt\") glatt += perSide;\r\n      if (el(\"seite2\").value === \"glatt\") glatt += perSide;\r\n    }\r\n\r\n    const lenActive = lengthRelevant(k);\r\n    const perStep = lengthAddPerStep(k);\r\n    const steps = lenActive ? Number(el(\"gefachlaenge\").value) : 0;\r\n    const lenAdd = lenActive ? (steps * perStep) : 0;\r\n\r\n    const werkActive = el(\"werksbefuellung\").checked && isRoofOrWall(k);\r\n\r\nconst basePlus = base + glatt + lenAdd;\r\n\r\n\/\/ Tabellenwert = Dichte vor Setzung\r\nconst dichteVorSetzung = werkActive\r\n  ? Math.round(basePlus * 1.08)\r\n  : Math.round(basePlus);\r\n\r\nlet result = dichteVorSetzung;\r\nlet prozent = null;\r\nlet einblas = null;\r\n\r\n\/\/ Nur bei offen aufblasen: Ergebnis = Dichte nach Setzung\r\nif (isOpen(k)) {\r\n  const faktor = (cm <= 25) ? 1.10 : 1.15;\r\n  prozent = (cm <= 25) ? 10 : 15;\r\n  einblas = Math.round(cm * faktor * 10) \/ 10;\r\n  result = Math.round(dichteVorSetzung * faktor);\r\n}\r\n\r\n    \/\/ Zweischlauch\r\n    const wall = isWall(k);\r\n    const bw = wall ? Math.min(100, Math.max(0, Number(el(\"gefachbreite\").value || 0))) : 0;\r\n    const zweischlauch = wall && bw > 85;\r\n\r\n\r\n\/\/ Titel\r\nconst title = isOpen(k)\r\n  ? \"Erforderliche Dichte (nach Setzung)\"\r\n  : \"Erforderliche Dichte\";\r\n\r\npage.drawText(title, { x, y, size: 12, font: fontBold });\r\ny -= 16;\r\n\r\n\/\/ Ergebnis\r\npage.drawText(`${result} kg\/m\u00b3`, { x, y, size: 16, font: fontBold });\r\ny -= 20;\r\n\r\n\/\/ Zulassungshinweis\r\nif (result > 65) {\r\n  page.drawText(\"Hinweis Zulassung:\", { x, y, size: 10.5, font: fontBold });\r\n  y -= 12;\r\n  y = drawWrapped(\r\n    page,\r\n    \"Der berechnete Wert liegt \u00fcber 65 kg\/m\u00b3. Unsere Zulassung gilt bis 65 kg\/m\u00b3. Bitte Ausf\u00fchrung\/Planung pr\u00fcfen und ggf. R\u00fccksprache halten.\",\r\n    x, y, fontReg, 10.0, maxW, 12\r\n  );\r\n  y -= 10;\r\n}\r\n\r\n\/\/ Offen aufblasen: Zusatzinfo im PDF\r\nif (isOpen(k)) {\r\n  y = drawWrapped(\r\n    page,\r\n    `Dichte vor Setzung: ${dichteVorSetzung} kg\/m\u00b3 \u00b7 Einblash\u00f6he (+${prozent}%): ca. ${einblas} cm (fertig: ${cm} cm)`,\r\n    x, y, fontReg, 10.5, maxW, 13\r\n  );\r\n  y -= 14;\r\n}\r\n\r\n\/\/ Bauvorhaben\r\npage.drawText(\"Bauvorhaben\", { x, y, size: 12, font: fontBold });\r\ny -= 14;\r\n\r\nconst bv = el(\"bauvorhaben\").value || \"\u2013\";\r\ny = drawWrapped(page, bv, x, y, fontReg, 10.5, maxW, 13);\r\ny -= 12;\r\n\r\n    \/\/ Details (nur relevante, korrekt f\u00fcr 46\u201360)\r\n    const detailsParts = [\r\n      `Konstruktion: ${textSel(\"konstruktion\")}`,\r\n      `D\u00e4mmst\u00e4rke: ${cm} cm`,\r\n      (wall ? `Gefachbreite: ${bw ? (bw + \" cm\") : \"\u2013\"}` : null),\r\n      (surfacesActive ? `Glatte Seiten: +${glatt}` : null),\r\n      (lenActive ? `Gefachl\u00e4nge: +${lenAdd}` : null),\r\n      (werkActive ? `Werksbef\u00fcllung: +8%` : null)\r\n    ].filter(Boolean).join(\" \u00b7 \");\r\n\r\n    y = drawWrapped(page, detailsParts, x, y, fontReg, 9.5, maxW, 12);\r\n    y -= 10;\r\n\r\n    \/\/ Zweischlauch Hinweis\r\n    if (zweischlauch) {\r\n      page.drawText(\"Hinweis:\", { x, y, size: 10.5, font: fontBold }); y -= 14;\r\n      y = drawWrapped(\r\n        page,\r\n        \"Bei Gefachbreiten \u00fcber 85 cm ist das Gefach zwingend im Zweischlauchverfahren einzublasen.\",\r\n        x, y, fontReg, 10.0, maxW, 12\r\n      );\r\n      y -= 6;\r\n    }\r\n\r\n    const outBytes = await pdfDoc.save();\r\n    const blob = new Blob([outBytes], { type:\"application\/pdf\" });\r\n    const a = document.createElement(\"a\");\r\n    a.href = URL.createObjectURL(blob);\r\n    a.download = `Dichteberechnung_${result}kgm3.pdf`;\r\n    a.click();\r\n    URL.revokeObjectURL(a.href);\r\n  }\r\n\r\n  \/\/ Events\r\n  [\"konstruktion\",\"seite1\",\"seite2\",\"gefachlaenge\"].forEach(id => {\r\n    const node = el(id);\r\n    if (node) node.addEventListener(\"change\", calc);\r\n  });\r\n  el(\"daemm_cm\").addEventListener(\"input\", calc);\r\n  el(\"gefachbreite\").addEventListener(\"input\", calc);\r\n  el(\"werksbefuellung\").addEventListener(\"change\", calc);\r\n  el(\"pdfBtn\").addEventListener(\"click\", generatePdf);\r\n\r\n  \/\/ Init\r\n  setVisibility();\r\n  calc();\r\n})();\r\n\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Einblasdichterechner Mit diesem Rechner k\u00f6nnen Sie auf Basis von Konstruktionen, D\u00e4mmst\u00e4rke, und Einbausituation die erforderliche Einblasdichte f\u00fcr Wolfinger Zellulosed\u00e4mmung und Wolfinger NatureFill schnell ermitteln. Zus\u00e4tzliche Einflussfaktoren wie Oberfl\u00e4chenbeschaffenheit, Gefachl\u00e4nge, Werksbef\u00fcllung werden dabei ber\u00fccksichtigt. Einblasdichte-Rechner Konstruktion Decke offen aufgeblasenDecke geschlossen \/ Dachschr\u00e4ge &lt; 20\u00b0Dachschr\u00e4ge 20\u00b0\u201345\u00b0Dachschr\u00e4ge 46\u00b0\u201360\u00b0Dachschr\u00e4ge &gt; 60\u00b0Wand D\u00e4mmst\u00e4rke (cm) Max. 40 cm Oberfl\u00e4che Seite 1 [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4305","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dichterechner - WOLFINGER<\/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:\/\/wolfinger.at\/daemmen\/dichterechner\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dichterechner - WOLFINGER\" \/>\n<meta property=\"og:description\" content=\"Einblasdichterechner Mit diesem Rechner k\u00f6nnen Sie auf Basis von Konstruktionen, D\u00e4mmst\u00e4rke, und Einbausituation die erforderliche Einblasdichte f\u00fcr Wolfinger Zellulosed\u00e4mmung und Wolfinger NatureFill schnell ermitteln. Zus\u00e4tzliche Einflussfaktoren wie Oberfl\u00e4chenbeschaffenheit, Gefachl\u00e4nge, Werksbef\u00fcllung werden dabei ber\u00fccksichtigt. Einblasdichte-Rechner Konstruktion Decke offen aufgeblasenDecke geschlossen \/ Dachschr\u00e4ge &lt; 20\u00b0Dachschr\u00e4ge 20\u00b0\u201345\u00b0Dachschr\u00e4ge 46\u00b0\u201360\u00b0Dachschr\u00e4ge &gt; 60\u00b0Wand D\u00e4mmst\u00e4rke (cm) Max. 40 cm Oberfl\u00e4che Seite 1 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wolfinger.at\/daemmen\/dichterechner\/\" \/>\n<meta property=\"og:site_name\" content=\"WOLFINGER\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-17T09:24:07+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/dichterechner\\\/\",\"url\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/dichterechner\\\/\",\"name\":\"Dichterechner - WOLFINGER\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/#website\"},\"datePublished\":\"2026-01-21T12:36:14+00:00\",\"dateModified\":\"2026-03-17T09:24:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/dichterechner\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/dichterechner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/dichterechner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dichterechner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/#website\",\"url\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/\",\"name\":\"Wolfinger Zellulosed\u00e4mmung\",\"description\":\"Zellulosed\u00e4mmung\",\"publisher\":{\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/#organization\",\"name\":\"Wolfinger GmbH\",\"url\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/wolfinger_fav_144.png\",\"contentUrl\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/wolfinger_fav_144.png\",\"width\":1633,\"height\":1632,\"caption\":\"Wolfinger GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/wolfinger.at\\\/daemmen\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dichterechner - WOLFINGER","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:\/\/wolfinger.at\/daemmen\/dichterechner\/","og_locale":"de_DE","og_type":"article","og_title":"Dichterechner - WOLFINGER","og_description":"Einblasdichterechner Mit diesem Rechner k\u00f6nnen Sie auf Basis von Konstruktionen, D\u00e4mmst\u00e4rke, und Einbausituation die erforderliche Einblasdichte f\u00fcr Wolfinger Zellulosed\u00e4mmung und Wolfinger NatureFill schnell ermitteln. Zus\u00e4tzliche Einflussfaktoren wie Oberfl\u00e4chenbeschaffenheit, Gefachl\u00e4nge, Werksbef\u00fcllung werden dabei ber\u00fccksichtigt. Einblasdichte-Rechner Konstruktion Decke offen aufgeblasenDecke geschlossen \/ Dachschr\u00e4ge &lt; 20\u00b0Dachschr\u00e4ge 20\u00b0\u201345\u00b0Dachschr\u00e4ge 46\u00b0\u201360\u00b0Dachschr\u00e4ge &gt; 60\u00b0Wand D\u00e4mmst\u00e4rke (cm) Max. 40 cm Oberfl\u00e4che Seite 1 [&hellip;]","og_url":"https:\/\/wolfinger.at\/daemmen\/dichterechner\/","og_site_name":"WOLFINGER","article_modified_time":"2026-03-17T09:24:07+00:00","twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wolfinger.at\/daemmen\/dichterechner\/","url":"https:\/\/wolfinger.at\/daemmen\/dichterechner\/","name":"Dichterechner - WOLFINGER","isPartOf":{"@id":"https:\/\/wolfinger.at\/daemmen\/#website"},"datePublished":"2026-01-21T12:36:14+00:00","dateModified":"2026-03-17T09:24:07+00:00","breadcrumb":{"@id":"https:\/\/wolfinger.at\/daemmen\/dichterechner\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wolfinger.at\/daemmen\/dichterechner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wolfinger.at\/daemmen\/dichterechner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/wolfinger.at\/daemmen\/"},{"@type":"ListItem","position":2,"name":"Dichterechner"}]},{"@type":"WebSite","@id":"https:\/\/wolfinger.at\/daemmen\/#website","url":"https:\/\/wolfinger.at\/daemmen\/","name":"Wolfinger Zellulosed\u00e4mmung","description":"Zellulosed\u00e4mmung","publisher":{"@id":"https:\/\/wolfinger.at\/daemmen\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wolfinger.at\/daemmen\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/wolfinger.at\/daemmen\/#organization","name":"Wolfinger GmbH","url":"https:\/\/wolfinger.at\/daemmen\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/wolfinger.at\/daemmen\/#\/schema\/logo\/image\/","url":"https:\/\/wolfinger.at\/daemmen\/wp-content\/uploads\/2024\/03\/wolfinger_fav_144.png","contentUrl":"https:\/\/wolfinger.at\/daemmen\/wp-content\/uploads\/2024\/03\/wolfinger_fav_144.png","width":1633,"height":1632,"caption":"Wolfinger GmbH"},"image":{"@id":"https:\/\/wolfinger.at\/daemmen\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/pages\/4305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/comments?post=4305"}],"version-history":[{"count":332,"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/pages\/4305\/revisions"}],"predecessor-version":[{"id":5373,"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/pages\/4305\/revisions\/5373"}],"wp:attachment":[{"href":"https:\/\/wolfinger.at\/daemmen\/wp-json\/wp\/v2\/media?parent=4305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}