{"id":987496213,"date":"2026-06-29T03:15:23","date_gmt":"2026-06-29T10:15:23","guid":{"rendered":"https:\/\/www.fictiv.com\/?post_type=cpt_specifications&#038;p=987496213"},"modified":"2026-06-29T03:43:37","modified_gmt":"2026-06-29T10:43:37","slug":"calculators","status":"publish","type":"cpt_specifications","link":"https:\/\/www.fictiv.com\/specifications\/calculators","title":{"rendered":"Calculators"},"content":{"rendered":"\n<style>\n.calc-field > label {\n    font-size: 14px;\n}\nlabel.font-museo-700.text-grey-600 {\n    --text-opacity: 1;\n    color: #76787a !important;\n    color: rgba(118, 120, 122, var(--text-opacity));\n}\n  \/* Only exact Figma geometry that has no theme utility equivalent. Colors\/fonts\/spacing use theme classes. *\/\n  .calc-wrap { max-width:960px;  padding:32px 16px; }\n\n  .calc-tablist { display:flex; flex-wrap:wrap; gap:8px; align-items:flex-start; padding-bottom:20px; }\n  .calc-tab { border-style:solid; border-width:1.5px; border-radius:20px; padding:8px 18px; }   \/* pill *\/\n  \/* Exact Figma tab colors (#e8fcf5 \/ #16bc9c \/ #0b967f vs white \/ #d9d9d9 \/ #8c8c8c) *\/\n  .calc-tab[aria-selected=\"true\"]  { background:#e8fcf5; border-color:#16bc9c; color:#0b967f; }\n  .calc-tab[aria-selected=\"false\"] { background:#fff;     border-color:#d9d9d9; color:#8c8c8c; }\n  .calc-card { border-radius:8px; display:flex; flex-direction:column; gap:16px; padding:20px; }\n  .calc-card[hidden] { display:none; }   \/* override .calc-card display:flex so hidden panels stay hidden *\/\n  .calc-btn  { border-radius:4.75px; padding:9.5px 19px; }\n  .calc-row  { display:flex; flex-wrap:wrap; gap:12px; align-items:flex-end; }\n  .calc-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }\n\n  .calc-field { display:flex; flex-direction:column; gap:4px; }\n  input.calc-input {\n    height:36px; border:1px solid #d9d9d9; border-radius:6px; padding:0 10px;\n    font-size:12px; color:#262626; background:#fff; outline:none; min-width:0;\n    font-family:'museo-700','Museo Sans',system-ui,sans-serif;\n  }\n  .calc-input::placeholder { color:#d9d9d9; }\n  .calc-input:focus { border-color:#16bc9c; }\n  select.calc-input {\nborder: 1px solid #d9d9d9;\n    -webkit-appearance:none; appearance:none; padding-right:28px;\n    background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238c8c8c' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'\/%3E%3C\/svg%3E\");\n    background-repeat:no-repeat; background-position:right 8px center;\n  }\n  \/* teal result\/quick-ref bar (#e8fcf5 \/ #0b967f) *\/\n  .calc-result { background:#e8fcf5; border-radius:6px; padding:10px 12px; color:#0b967f; }\n  .calc-result .big { font-size:20px; }\n<\/style>\n\n<div class=\"calc-wrap\">\n\n  <!-- ===== Tabs (Figma 22:593) ===== -->\n  <div role=\"tablist\" data-slot=\"tabs-list\" class=\"calc-tablist\">\n    <button type=\"button\" role=\"tab\" aria-controls=\"content-units\" aria-selected=\"true\" class=\"calc-tab font-museo-900 text-16 whitespace-nowrap cursor-pointer\">Unit Converter<\/button>\n    <button type=\"button\" role=\"tab\" aria-controls=\"content-threads\" aria-selected=\"false\" class=\"calc-tab font-museo-700 text-16 whitespace-nowrap cursor-pointer\">Thread Checker<\/button>\n    <button type=\"button\" role=\"tab\" aria-controls=\"content-tolerance\" aria-selected=\"false\" class=\"calc-tab font-museo-700 text-16 whitespace-nowrap cursor-pointer\">Tolerance Stack<\/button>\n    <button type=\"button\" role=\"tab\" aria-controls=\"content-bend\" aria-selected=\"false\" class=\"calc-tab font-museo-700 text-16 whitespace-nowrap cursor-pointer\">Bend Allowance<\/button>\n    <button type=\"button\" role=\"tab\" aria-controls=\"content-isofits\" aria-selected=\"false\" class=\"calc-tab font-museo-700 text-16 whitespace-nowrap cursor-pointer\">ISO Fits<\/button>\n    <button type=\"button\" role=\"tab\" aria-controls=\"content-printtime\" aria-selected=\"false\" class=\"calc-tab font-museo-700 text-16 whitespace-nowrap cursor-pointer\">Print Time<\/button>\n  <\/div>\n\n  <!-- ===== UNIT CONVERTER ===== -->\n  <div role=\"tabpanel\" id=\"content-units\" class=\"calc-card bg-white border border-grey-200\">\n    <p class=\"font-museo-900 text-16 text-grey-700\">Unit Converter<\/p>\n    <div class=\"calc-row\">\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"uc-category\">Category<\/label>\n        <select id=\"uc-category\" class=\"calc-input\" style=\"width:160px\"><\/select>\n      <\/div>\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"uc-value\">Value<\/label>\n        <input id=\"uc-value\" type=\"number\" value=\"1\" class=\"calc-input\" style=\"width:160px\" placeholder=\"Enter value\">\n      <\/div>\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"uc-from\">From<\/label>\n        <select id=\"uc-from\" class=\"calc-input\" style=\"width:140px\"><\/select>\n      <\/div>\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"uc-to\">To<\/label>\n        <select id=\"uc-to\" class=\"calc-input\" style=\"width:140px\"><\/select>\n      <\/div>\n      <button type=\"button\" id=\"uc-btn\" class=\"calc-btn bg-teal-light hover:bg-teal-dark text-white font-museo-900 text-14 cursor-pointer\">Convert<\/button>\n    <\/div>\n    <div id=\"uc-result\" class=\"calc-result font-museo-700 text-16\"><\/div>\n  <\/div>\n\n  <!-- ===== THREAD CHECKER ===== -->\n  <div role=\"tabpanel\" id=\"content-threads\" class=\"calc-card bg-white border border-grey-200\" hidden=\"\">\n    <p class=\"font-museo-900 text-16 text-grey-700\">Thread Checker<\/p>\n    <div class=\"calc-row\">\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"th-size\">Thread Size (ISO Metric Coarse)<\/label>\n        <select id=\"th-size\" class=\"calc-input\" style=\"width:220px\"><\/select>\n      <\/div>\n    <\/div>\n    <div id=\"th-result\" class=\"calc-result font-museo-700 text-16\"><\/div>\n  <\/div>\n\n  <!-- ===== TOLERANCE STACK ===== -->\n  <div role=\"tabpanel\" id=\"content-tolerance\" class=\"calc-card bg-white border border-grey-200\" hidden=\"\">\n    <p class=\"font-museo-900 text-16 text-grey-700\">Tolerance Stack<\/p>\n    <p class=\"font-museo-500 text-16 text-grey-600\">Enter each feature&#8217;s nominal dimension and bilateral tolerance (\u00b1). Worst-case sums the tolerances; statistical (RSS) is the root-sum-square.<\/p>\n    <div id=\"ts-rows\" class=\"flex flex-col gap-3\"><\/div>\n    <button type=\"button\" id=\"ts-add\" class=\"font-museo-700 text-16 text-teal-light hover:text-teal-dark cursor-pointer self-start\">+ Add dimension<\/button>\n    <div id=\"ts-result\" class=\"calc-result font-museo-700 text-16\"><\/div>\n  <\/div>\n\n  <!-- ===== BEND ALLOWANCE ===== -->\n  <div role=\"tabpanel\" id=\"content-bend\" class=\"calc-card bg-white border border-grey-200\" hidden=\"\">\n    <p class=\"font-museo-900 text-16 text-grey-700\">Bend Allowance<\/p>\n    <div class=\"calc-row\">\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"thickness\">Material Thickness (mm)<\/label>\n        <input id=\"thickness\" type=\"number\" step=\"0.1\" class=\"calc-input\" style=\"width:170px\" placeholder=\"e.g., 1.5\">\n      <\/div>\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"radius\">Inside Bend Radius (mm)<\/label>\n        <input id=\"radius\" type=\"number\" step=\"0.1\" class=\"calc-input\" style=\"width:170px\" placeholder=\"e.g., 2.0\">\n      <\/div>\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"angle\">Bend Angle (degrees)<\/label>\n        <input id=\"angle\" type=\"number\" class=\"calc-input\" style=\"width:150px\" placeholder=\"90\" value=\"90\">\n      <\/div>\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"kfactor\">K-Factor<\/label>\n        <input id=\"kfactor\" type=\"number\" step=\"0.01\" class=\"calc-input\" style=\"width:120px\" placeholder=\"0.4\" value=\"0.4\">\n      <\/div>\n      <button type=\"button\" id=\"bend-calc\" class=\"calc-btn bg-teal-light hover:bg-teal-dark text-white font-museo-900 text-14 cursor-pointer\">Calculate<\/button>\n    <\/div>\n    <div id=\"bend-result\" class=\"calc-result font-museo-700 text-16\" hidden=\"\"><\/div>\n  <\/div>\n\n  <!-- ===== ISO FITS ===== -->\n  <div role=\"tabpanel\" id=\"content-isofits\" class=\"calc-card bg-white border border-grey-200\" hidden=\"\">\n    <p class=\"font-museo-900 text-16 text-grey-700\">ISO Fits<\/p>\n    <div class=\"calc-row\">\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"iso-dia\">Nominal Diameter (mm)<\/label>\n        <input id=\"iso-dia\" type=\"number\" value=\"20\" step=\"0.1\" class=\"calc-input\" style=\"width:180px\">\n      <\/div>\n      <div class=\"calc-field\">\n        <label class=\"font-museo-700 text-grey-600\" for=\"iso-fit\">Fit (hole-basis)<\/label>\n        <select id=\"iso-fit\" class=\"calc-input\" style=\"width:180px\"><\/select>\n      <\/div>\n    <\/div>\n    <div id=\"iso-result\" class=\"calc-result font-museo-700 text-16\"><\/div>\n    <p class=\"font-museo-500 text-10 text-grey-600\">Clearance fits per ISO 286 (IT6\/IT7\/IT9 grades, hole basis). Valid for nominal sizes \u2264 250 mm.<\/p>\n  <\/div>\n\n  <!-- ===== PRINT TIME ===== -->\n  <div role=\"tabpanel\" id=\"content-printtime\" class=\"calc-card bg-white border border-grey-200\" hidden=\"\">\n    <p class=\"font-museo-900 text-16 text-grey-700\">Print Time<\/p>\n    <div class=\"calc-row\">\n      <div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\" for=\"pt-volume\">Part Volume (cm\u00b3)<\/label><input id=\"pt-volume\" type=\"number\" value=\"20\" step=\"0.1\" class=\"calc-input\" style=\"width:140px\"><\/div>\n      <div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\" for=\"pt-infill\">Infill (%)<\/label><input id=\"pt-infill\" type=\"number\" value=\"20\" step=\"5\" class=\"calc-input\" style=\"width:120px\"><\/div>\n      <div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\" for=\"pt-layer\">Layer Height (mm)<\/label><input id=\"pt-layer\" type=\"number\" value=\"0.2\" step=\"0.05\" class=\"calc-input\" style=\"width:140px\"><\/div>\n      <div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\" for=\"pt-speed\">Print Speed (mm\/s)<\/label><input id=\"pt-speed\" type=\"number\" value=\"60\" step=\"5\" class=\"calc-input\" style=\"width:140px\"><\/div>\n      <div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\" for=\"pt-width\">Line Width (mm)<\/label><input id=\"pt-width\" type=\"number\" value=\"0.4\" step=\"0.05\" class=\"calc-input\" style=\"width:130px\"><\/div>\n      <div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\" for=\"pt-material\">Material<\/label><select id=\"pt-material\" class=\"calc-input\" style=\"width:130px\"><\/select><\/div>\n    <\/div>\n    <div id=\"pt-result\" class=\"calc-result font-museo-700 text-16\"><\/div>\n    <p class=\"font-museo-500 text-10 text-grey-600\">First-order estimate: extruded volume \u00f7 volumetric flow rate; actual slicer times vary with travel, cooling and acceleration.<\/p>\n  <\/div>\n\n  <p class=\"text-center font-museo-500 text-10 text-grey-600 mt-4\">Calculations use standard engineering formulas. Verify against your shop&#8217;s process data before production.<\/p>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', loadCalc);\n\nfunction loadCalc() {\n  \"use strict\";\n  const byId = (id) => document.getElementById(id);\n  const num = (v) => { const n = parseFloat(v); return Number.isFinite(n) ? n : NaN; };\n  const fmt = (n, d = 3) => Number(n).toLocaleString(undefined, { maximumFractionDigits: d });\n\n  \/* ---------- Tabs: colors via [aria-selected] CSS; toggle Museo weight + panel here ---------- *\/\n  const triggers = [...document.querySelectorAll('[role=\"tab\"]')];\n  const panels = [...document.querySelectorAll('[role=\"tabpanel\"]')];\n  function setTab(active) {\n    triggers.forEach((t) => {\n      const on = t === active;\n      t.setAttribute('aria-selected', String(on));\n      t.classList.toggle('font-museo-900', on);\n      t.classList.toggle('font-museo-700', !on);\n    });\n    const target = active.getAttribute('aria-controls');\n    panels.forEach((p) => { p.hidden = p.id !== target; });\n  }\n  triggers.forEach((t) => t.addEventListener('click', () => setTab(t)));\n\n  \/* ---------- 1. Unit Converter ---------- *\/\n  const UNITS = {\n    Length: { units: { 'mm': 0.001, 'cm': 0.01, 'm': 1, 'thou (mil)': 0.0000254, 'inch': 0.0254, 'foot': 0.3048 } },\n    Mass:   { units: { 'g': 0.001, 'kg': 1, 'oz': 0.0283495, 'lb': 0.453592 } },\n    Pressure: { units: { 'Pa': 1, 'kPa': 1000, 'MPa': 1e6, 'bar': 1e5, 'psi': 6894.757 } },\n    Force:  { units: { 'N': 1, 'kN': 1000, 'kgf': 9.80665, 'lbf': 4.448222 } },\n    Temperature: { units: { '\u00b0C': 1, '\u00b0F': 1, 'K': 1 } }\n  };\n  function tempConvert(v, from, to) {\n    let c;\n    if (from === '\u00b0C') c = v; else if (from === '\u00b0F') c = (v - 32) * 5 \/ 9; else c = v - 273.15;\n    if (to === '\u00b0C') return c; if (to === '\u00b0F') return c * 9 \/ 5 + 32; return c + 273.15;\n  }\n  function fillUnitSelects() {\n    const keys = Object.keys(UNITS[byId('uc-category').value].units);\n    ['uc-from', 'uc-to'].forEach((id, idx) => {\n      const sel = byId(id);\n      sel.innerHTML = keys.map((k) => `<option value=\"${k}\">${k}<\/option>`).join('');\n      sel.selectedIndex = idx === 1 && keys.length > 1 ? 1 : 0;\n    });\n    convertUnits();\n  }\n  function convertUnits() {\n    const cat = byId('uc-category').value, v = num(byId('uc-value').value);\n    const from = byId('uc-from').value, to = byId('uc-to').value, box = byId('uc-result');\n    if (isNaN(v)) { box.textContent = 'Enter a value.'; return; }\n    const out = cat === 'Temperature' ? tempConvert(v, from, to) : v * UNITS[cat].units[from] \/ UNITS[cat].units[to];\n    box.innerHTML = `${fmt(v, 6)} ${from} = <span class=\"big font-museo-900\">${fmt(out, 6)} ${to}<\/span>`;\n  }\n  byId('uc-category').innerHTML = Object.keys(UNITS).map((c) => `<option value=\"${c}\">${c}<\/option>`).join('');\n  byId('uc-category').addEventListener('change', fillUnitSelects);\n  ['uc-value', 'uc-from', 'uc-to'].forEach((id) => byId(id).addEventListener('input', convertUnits));\n  byId('uc-btn').addEventListener('click', convertUnits);\n  fillUnitSelects();\n\n  \/* ---------- 2. Thread Checker (ISO 261 metric coarse) ---------- *\/\n  const THREADS = [\n    ['M2', 0.4, 2], ['M2.5', 0.45, 2.5], ['M3', 0.5, 3], ['M4', 0.7, 4], ['M5', 0.8, 5],\n    ['M6', 1.0, 6], ['M8', 1.25, 8], ['M10', 1.5, 10], ['M12', 1.75, 12], ['M16', 2.0, 16],\n    ['M20', 2.5, 20], ['M24', 3.0, 24]\n  ];\n  function row(label, val) { return `<div class=\"text-grey-600 font-museo-500\">${label}<\/div><div>${val}<\/div>`; }\n  function showThread() {\n    const [name, pitch, major] = THREADS[byId('th-size').selectedIndex];\n    const tapDrill = major - pitch, minor = major - 1.0825 * pitch, pitchDia = major - 0.6495 * pitch;\n    byId('th-result').innerHTML =\n      `<div class=\"big font-museo-900 mb-2\">${name} \u00d7 ${pitch.toFixed(2)}<\/div>\n       <div class=\"calc-grid text-16\">\n         ${row('Pitch', pitch.toFixed(2) + ' mm')}${row('Major \u00d8', major.toFixed(2) + ' mm')}\n         ${row('Pitch \u00d8', pitchDia.toFixed(3) + ' mm')}${row('Minor \u00d8', minor.toFixed(3) + ' mm')}\n         ${row('Tap drill', tapDrill.toFixed(2) + ' mm')}\n       <\/div>`;\n  }\n  byId('th-size').innerHTML = THREADS.map((t) => `<option>${t[0]}<\/option>`).join('');\n  byId('th-size').value = 'M6';\n  byId('th-size').addEventListener('change', showThread);\n  showThread();\n\n  \/* ---------- 3. Tolerance Stack ---------- *\/\n  const tsRows = byId('ts-rows');\n  function addRow(nominal = '', tol = '') {\n    const r = document.createElement('div');\n    r.className = 'calc-row';\n    r.innerHTML =\n      `<div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\">Nominal (mm)<\/label>\n        <input type=\"number\" step=\"0.01\" value=\"${nominal}\" class=\"ts-nom calc-input\" style=\"width:160px\"><\/div>\n       <div class=\"calc-field\"><label class=\"font-museo-700 text-grey-600\">Tolerance \u00b1 (mm)<\/label>\n        <input type=\"number\" step=\"0.001\" value=\"${tol}\" class=\"ts-tol calc-input\" style=\"width:160px\"><\/div>\n       <button type=\"button\" class=\"ts-del calc-btn bg-white border border-grey-200 text-grey-600 font-museo-700 cursor-pointer\">Remove<\/button>`;\n    tsRows.appendChild(r);\n    r.querySelector('.ts-del').addEventListener('click', () => { r.remove(); calcStack(); });\n    r.querySelectorAll('input').forEach((i) => i.addEventListener('input', calcStack));\n  }\n  function calcStack() {\n    const noms = [...tsRows.querySelectorAll('.ts-nom')].map((i) => num(i.value));\n    const tols = [...tsRows.querySelectorAll('.ts-tol')].map((i) => Math.abs(num(i.value)));\n    const box = byId('ts-result');\n    if (!(noms.length && noms.every((n) => !isNaN(n)) && tols.every((t) => !isNaN(t)))) { box.textContent = 'Enter nominal and tolerance for each dimension.'; return; }\n    const nominal = noms.reduce((a, b) => a + b, 0), worst = tols.reduce((a, b) => a + b, 0), rss = Math.sqrt(tols.reduce((a, b) => a + b * b, 0));\n    box.innerHTML =\n      `<div class=\"text-16 text-grey-600 font-museo-500\">Stack of ${noms.length} dimensions<\/div>\n       <div class=\"big font-museo-900\">${fmt(nominal)} mm<\/div>\n       <div class=\"calc-grid text-16 mt-2\">\n         ${row('Worst-case', '\u00b1' + fmt(worst) + ' mm (' + fmt(nominal - worst) + ' \u2013 ' + fmt(nominal + worst) + ')')}\n         ${row('Statistical (RSS)', '\u00b1' + fmt(rss) + ' mm (' + fmt(nominal - rss) + ' \u2013 ' + fmt(nominal + rss) + ')')}\n       <\/div>`;\n  }\n  byId('ts-add').addEventListener('click', () => addRow());\n  addRow(25, 0.1); addRow(50, 0.05); addRow(10, 0.02);\n  calcStack();\n\n  \/* ---------- 4. Bend Allowance:  BA = (\u03c0\/180)\u00b7angle\u00b7(R + K\u00b7T) ---------- *\/\n  function calcBend() {\n    const T = num(byId('thickness').value), R = num(byId('radius').value), A = num(byId('angle').value), K = num(byId('kfactor').value);\n    const box = byId('bend-result'); box.hidden = false;\n    if ([T, R, A, K].some(isNaN)) { box.textContent = 'Please fill in thickness, radius, angle and K-factor.'; return; }\n    const ba = (Math.PI \/ 180) * A * (R + K * T);\n    const ossb = (R + T) * Math.tan((A \/ 2) * Math.PI \/ 180);\n    const bd = 2 * ossb - ba;\n    box.innerHTML =\n      `<div class=\"text-16 text-grey-600 font-museo-500\">Bend Allowance<\/div>\n       <div class=\"big font-museo-900\">${fmt(ba)} mm<\/div>\n       <div class=\"calc-grid text-16 mt-2\">\n         ${row('Bend Deduction', fmt(bd) + ' mm')}${row('Outside Setback', fmt(ossb) + ' mm')}\n       <\/div>\n       <div class=\"text-10 text-grey-600 font-museo-500 mt-2\">BA = (\u03c0\/180) \u00d7 ${A}\u00b0 \u00d7 (${R} + ${K}\u00d7${T})<\/div>`;\n  }\n  byId('bend-calc').addEventListener('click', calcBend);\n  ['thickness', 'radius', 'angle', 'kfactor'].forEach((id) => byId(id).addEventListener('input', () => { if (!byId('bend-result').hidden) calcBend(); }));\n\n  \/* ---------- 5. ISO Fits (hole basis, ISO 286) ---------- *\/\n  const ISO_BOUNDS = [3, 6, 10, 18, 30, 50, 80, 120, 180, 250];\n  const IT6 = [6, 8, 9, 11, 13, 16, 19, 22, 25, 29];\n  const IT7 = [10, 12, 15, 18, 21, 25, 30, 35, 40, 46];\n  const IT9 = [25, 30, 36, 43, 52, 62, 74, 87, 100, 115];\n  const DEV_f = [-6, -10, -13, -16, -20, -25, -30, -36, -43, -50];\n  const DEV_g = [-2, -4, -5, -6, -7, -9, -10, -12, -14, -15];\n  const FITS = {\n    'H7\/h6': { hole: 'H7', shaft: 'h6', shaftEs: () => 0, shaftIT: IT6, type: 'Clearance \/ locational (slip)' },\n    'H7\/g6': { hole: 'H7', shaft: 'g6', shaftEs: (i) => DEV_g[i], shaftIT: IT6, type: 'Clearance (running, close)' },\n    'H7\/f7': { hole: 'H7', shaft: 'f7', shaftEs: (i) => DEV_f[i], shaftIT: IT7, type: 'Clearance (running, free)' },\n    'H9\/h9': { hole: 'H9', shaft: 'h9', shaftEs: () => 0, shaftIT: IT9, type: 'Clearance (loose)' }\n  };\n  function isoRangeIndex(d) { for (let i = 0; i < ISO_BOUNDS.length; i++) if (d <= ISO_BOUNDS[i]) return i; return -1; }\n  function calcISO() {\n    const d = num(byId('iso-dia').value), key = byId('iso-fit').value, f = FITS[key], box = byId('iso-result'), i = isoRangeIndex(d);\n    if (isNaN(d) || d <= 0) { box.textContent = 'Enter a diameter.'; return; }\n    if (i < 0) { box.textContent = 'Diameter out of supported range (\u2264 250 mm).'; return; }\n    const holeHi = f.hole === 'H9' ? IT9[i] : IT7[i], holeLo = 0;\n    const shaftEs = f.shaftEs(i), shaftEi = shaftEs - f.shaftIT[i], u = (x) => x \/ 1000;\n    box.innerHTML =\n      `<div class=\"text-16 text-grey-600 font-museo-500\">${key} \u2014 ${f.type}<\/div>\n       <div class=\"calc-grid text-16 mt-2\">\n         ${row('Hole ' + f.hole, fmt(d + u(holeLo)) + ' \/ ' + fmt(d + u(holeHi)) + ' mm')}\n         ${row('Shaft ' + f.shaft, fmt(d + u(shaftEi)) + ' \/ ' + fmt(d + u(shaftEs)) + ' mm')}\n         ${row('Max clearance', fmt((holeHi - shaftEi) \/ 1000) + ' mm')}\n         ${row('Min clearance', fmt((holeLo - shaftEs) \/ 1000) + ' mm')}\n       <\/div>`;\n  }\n  byId('iso-fit').innerHTML = Object.keys(FITS).map((k) => `<option>${k}<\/option>`).join('');\n  byId('iso-fit').value = 'H7\/g6';\n  ['iso-dia', 'iso-fit'].forEach((id) => byId(id).addEventListener('input', calcISO));\n  calcISO();\n\n  \/* ---------- 6. Print Time (FDM first-order estimate) ---------- *\/\n  const MATERIALS = { 'PLA': 1.24, 'PETG': 1.27, 'ABS': 1.04, 'TPU': 1.21, 'Nylon': 1.14 };\n  const FIL_AREA = Math.PI * Math.pow(1.75 \/ 2, 2);\n  function calcPrint() {\n    const vol = num(byId('pt-volume').value), infill = num(byId('pt-infill').value) \/ 100, layer = num(byId('pt-layer').value),\n          speed = num(byId('pt-speed').value), width = num(byId('pt-width').value), density = MATERIALS[byId('pt-material').value];\n    const box = byId('pt-result');\n    if ([vol, infill, layer, speed, width].some(isNaN) || layer <= 0 || speed <= 0 || width <= 0) { box.textContent = 'Fill in all fields with positive values.'; return; }\n    const solidFraction = 0.15 + 0.85 * infill;\n    const extruded = vol * 1000 * solidFraction;\n    const Q = speed * layer * width;\n    const hours = (extruded \/ Q) * 1.10 \/ 3600;\n    const h = Math.floor(hours), m = Math.round((hours - h) * 60);\n    box.innerHTML =\n      `<div class=\"text-16 text-grey-600 font-museo-500\">Estimated print time<\/div>\n       <div class=\"big font-museo-900\">${h} h ${m} min<\/div>\n       <div class=\"calc-grid text-16 mt-2\">\n         ${row('Filament length', fmt(extruded \/ FIL_AREA \/ 1000, 1) + ' m')}\n         ${row('Filament weight', fmt((extruded \/ 1000) * density, 1) + ' g')}\n         ${row('Deposited volume', fmt(extruded \/ 1000, 1) + ' cm\u00b3')}\n       <\/div>`;\n  }\n  byId('pt-material').innerHTML = Object.keys(MATERIALS).map((m) => `<option>${m}<\/option>`).join('');\n  ['pt-volume', 'pt-infill', 'pt-layer', 'pt-speed', 'pt-width', 'pt-material'].forEach((id) => byId(id).addEventListener('input', calcPrint));\n  calcPrint();\n};\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Unit Converter Thread Checker Tolerance Stack Bend Allowance ISO Fits Print Time Unit Converter Category Value From To Convert Thread Checker Thread Size (ISO Metric Coarse) Tolerance Stack Enter each feature&#8217;s nominal dimension and bilateral tolerance (\u00b1). Worst-case sums the tolerances; statistical (RSS) is the root-sum-square. + Add dimension Bend Allowance Material Thickness (mm) Inside [&hellip;]<\/p>\n","protected":false},"author":182,"featured_media":0,"parent":0,"menu_order":0,"template":"","coauthors":[272],"class_list":["post-987496213","cpt_specifications","type-cpt_specifications","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO Pro 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Quick calculation tools for common manufacturing tasks\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Ajit Patil\"\/>\n\t<meta name=\"google-site-verification\" content=\"8ph8WlncDAsdIAhs3oF8lSgRZYdkAFVJd_q_uOqTeh0\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.fictiv.com\/specifications\/calculators\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Fictiv\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Manufacturing Calculators | Fictiv\" \/>\n\t\t<meta property=\"og:description\" content=\"Quick calculation tools for common manufacturing tasks\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.fictiv.com\/specifications\/calculators\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.fictiv.com\/wp-content\/uploads\/2025\/03\/fictiv.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.fictiv.com\/wp-content\/uploads\/2025\/03\/fictiv.jpg\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-06-29T10:15:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-06-29T10:43:37+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Manufacturing Calculators | Fictiv\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Quick calculation tools for common manufacturing tasks\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.fictiv.com\/wp-content\/uploads\/2025\/03\/fictiv.jpg\" \/>\n\t\t<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t\t<meta name=\"twitter:data1\" content=\"Ajit Patil\" \/>\n\t\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.fictiv.com#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.fictiv.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators#listItem\",\"name\":\"Calculators\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators#listItem\",\"position\":2,\"name\":\"Calculators\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.fictiv.com#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/#organization\",\"name\":\"Fictiv\",\"url\":\"https:\\\/\\\/www.fictiv.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.fictiv.com\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/Fictiv-Logo-Green-1.png\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators\\\/#organizationLogo\",\"width\":1284,\"height\":678},\"image\":{\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/authors\\\/ajitsing-patil#author\",\"url\":\"https:\\\/\\\/www.fictiv.com\\\/authors\\\/ajitsing-patil\",\"name\":\"Ajit Patil\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c70e48d4eef18d626da38dda21fc3977425c8ae2855b78e861d5819070a1ccd5?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Ajit Patil\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators#webpage\",\"url\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators\",\"name\":\"Manufacturing Calculators | Fictiv\",\"description\":\"Quick calculation tools for common manufacturing tasks\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/specifications\\\/calculators#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/authors\\\/ajitsing-patil#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/authors\\\/ajitsing-patil#author\"},\"datePublished\":\"2026-06-29T03:15:23-07:00\",\"dateModified\":\"2026-06-29T03:43:37-07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/#website\",\"url\":\"https:\\\/\\\/www.fictiv.com\\\/\",\"name\":\"Fictiv\",\"description\":\"On-Demand Manufacturing, CNC Machining & 3D Printing\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.fictiv.com\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Manufacturing Calculators | Fictiv<\/title>\n\n","aioseo_head_json":{"title":"Manufacturing Calculators | Fictiv","description":"Quick calculation tools for common manufacturing tasks","canonical_url":"https:\/\/www.fictiv.com\/specifications\/calculators","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"8ph8WlncDAsdIAhs3oF8lSgRZYdkAFVJd_q_uOqTeh0","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.fictiv.com\/specifications\/calculators#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.fictiv.com#listItem","position":1,"name":"Home","item":"https:\/\/www.fictiv.com","nextItem":{"@type":"ListItem","@id":"https:\/\/www.fictiv.com\/specifications\/calculators#listItem","name":"Calculators"}},{"@type":"ListItem","@id":"https:\/\/www.fictiv.com\/specifications\/calculators#listItem","position":2,"name":"Calculators","previousItem":{"@type":"ListItem","@id":"https:\/\/www.fictiv.com#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/www.fictiv.com\/#organization","name":"Fictiv","url":"https:\/\/www.fictiv.com\/","logo":{"@type":"ImageObject","url":"https:\/\/www.fictiv.com\/wp-content\/uploads\/2020\/09\/Fictiv-Logo-Green-1.png","@id":"https:\/\/www.fictiv.com\/specifications\/calculators\/#organizationLogo","width":1284,"height":678},"image":{"@id":"https:\/\/www.fictiv.com\/specifications\/calculators\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/www.fictiv.com\/authors\/ajitsing-patil#author","url":"https:\/\/www.fictiv.com\/authors\/ajitsing-patil","name":"Ajit Patil","image":{"@type":"ImageObject","@id":"https:\/\/www.fictiv.com\/specifications\/calculators#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/c70e48d4eef18d626da38dda21fc3977425c8ae2855b78e861d5819070a1ccd5?s=96&d=mm&r=g","width":96,"height":96,"caption":"Ajit Patil"}},{"@type":"WebPage","@id":"https:\/\/www.fictiv.com\/specifications\/calculators#webpage","url":"https:\/\/www.fictiv.com\/specifications\/calculators","name":"Manufacturing Calculators | Fictiv","description":"Quick calculation tools for common manufacturing tasks","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.fictiv.com\/#website"},"breadcrumb":{"@id":"https:\/\/www.fictiv.com\/specifications\/calculators#breadcrumblist"},"author":{"@id":"https:\/\/www.fictiv.com\/authors\/ajitsing-patil#author"},"creator":{"@id":"https:\/\/www.fictiv.com\/authors\/ajitsing-patil#author"},"datePublished":"2026-06-29T03:15:23-07:00","dateModified":"2026-06-29T03:43:37-07:00"},{"@type":"WebSite","@id":"https:\/\/www.fictiv.com\/#website","url":"https:\/\/www.fictiv.com\/","name":"Fictiv","description":"On-Demand Manufacturing, CNC Machining & 3D Printing","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.fictiv.com\/#organization"}}]},"og:locale":"en_US","og:site_name":"Fictiv","og:type":"article","og:title":"Manufacturing Calculators | Fictiv","og:description":"Quick calculation tools for common manufacturing tasks","og:url":"https:\/\/www.fictiv.com\/specifications\/calculators","og:image":"https:\/\/www.fictiv.com\/wp-content\/uploads\/2025\/03\/fictiv.jpg","og:image:secure_url":"https:\/\/www.fictiv.com\/wp-content\/uploads\/2025\/03\/fictiv.jpg","article:published_time":"2026-06-29T10:15:23+00:00","article:modified_time":"2026-06-29T10:43:37+00:00","twitter:card":"summary_large_image","twitter:title":"Manufacturing Calculators | Fictiv","twitter:description":"Quick calculation tools for common manufacturing tasks","twitter:image":"https:\/\/www.fictiv.com\/wp-content\/uploads\/2025\/03\/fictiv.jpg","twitter:label1":"Written by","twitter:data1":"Ajit Patil","twitter:label2":"Est. reading time","twitter:data2":"1 minute"},"aioseo_meta_data":{"post_id":"987496213","title":"Manufacturing Calculators | #site_title","description":"Quick calculation tools for common manufacturing tasks","keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"seo_analyzer_scan_date":"2026-06-29 10:44:46","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":"0","open_ai":null,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-06-29 09:53:42","updated":"2026-06-29 12:15:46","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.fictiv.com\" title=\"Home\">Home<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\tCalculators\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.fictiv.com"},{"label":"Calculators","link":"https:\/\/www.fictiv.com\/specifications\/calculators"}],"_links":{"self":[{"href":"https:\/\/www.fictiv.com\/wp-json\/wp\/v2\/fictiv-specs\/987496213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fictiv.com\/wp-json\/wp\/v2\/fictiv-specs"}],"about":[{"href":"https:\/\/www.fictiv.com\/wp-json\/wp\/v2\/types\/cpt_specifications"}],"author":[{"embeddable":true,"href":"https:\/\/www.fictiv.com\/wp-json\/wp\/v2\/users\/182"}],"wp:attachment":[{"href":"https:\/\/www.fictiv.com\/wp-json\/wp\/v2\/media?parent=987496213"}],"wp:term":[{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.fictiv.com\/wp-json\/wp\/v2\/coauthors?post=987496213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}