{"id":15888,"date":"2026-09-28T08:54:20","date_gmt":"2026-09-28T07:54:20","guid":{"rendered":"https:\/\/www.keris-studio.fr\/blog\/?p=15888"},"modified":"2026-09-28T09:18:08","modified_gmt":"2026-09-28T08:18:08","slug":"ai-parametric-structure","status":"publish","type":"post","link":"https:\/\/www.keris-studio.fr\/blog\/?p=15888","title":{"rendered":"AI-parametric structure"},"content":{"rendered":"\n<div class=\"wp-block-columns is-not-stacked-on-mobile is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<title>Faisabilit\u00e9 des fermes param\u00e9triques<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Archivo:wdth,wght@62..125,400..800&amp;family=IBM+Plex+Mono:wght@400;500&amp;display=swap\">\n<style>\n:root {\n  --bg: #EEF2F0; --paper: #F9FBFA; --ink: #152024; --ink-2: #4F5F64; --ink-3: #6E7F83; --line: #CCD5D2; --line-2: #DFE5E3;\n  --accent: #2B6B66; --accent-soft: #D6E8E4; --tension: #2C62AE; --compression: #BD3F2D; --neutral: #9AA6A9;\n  --ok: #2A7A4B; --warn: #8E5C10; --bad: #A92E28; --ok-soft: #D8ECDF; --warn-soft: #F4E6CB; --bad-soft: #F5D8D4;\n  --cell-ok: #9CCDAE; --cell-warn: #EBC77C; --cell-bad: #E59A8F;\n  --font-ui: 'Archivo', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n  --font-mono: 'IBM Plex Mono', ui-monospace, 'Cascadia Mono', Consolas, monospace;\n}\n@media (prefers-color-scheme: dark) {\n  :root:not([data-theme=\"light\"]) {\n    color-scheme: dark;\n    --bg: #0F1517; --paper: #151E21; --ink: #E2EAE8; --ink-2: #A3B2B5; --ink-3: #7C8E92; --line: #2D3A3E; --line-2: #233034;\n    --accent: #6CB6AC; --accent-soft: #1D3A37; --tension: #72A2EA; --compression: #F08270; --neutral: #6E7C80;\n    --ok: #62C88E; --warn: #E6B45C; --bad: #F2776E; --ok-soft: #173327; --warn-soft: #3A2E17; --bad-soft: #3D1D1B;\n    --cell-ok: #2F6B49; --cell-warn: #7D6424; --cell-bad: #7E3530;\n  }\n}\n:root[data-theme=\"dark\"] {\n  color-scheme: dark;\n  --bg: #0F1517; --paper: #151E21; --ink: #E2EAE8; --ink-2: #A3B2B5; --ink-3: #7C8E92; --line: #2D3A3E; --line-2: #233034;\n  --accent: #6CB6AC; --accent-soft: #1D3A37; --tension: #72A2EA; --compression: #F08270; --neutral: #6E7C80;\n  --ok: #62C88E; --warn: #E6B45C; --bad: #F2776E; --ok-soft: #173327; --warn-soft: #3A2E17; --bad-soft: #3D1D1B;\n  --cell-ok: #2F6B49; --cell-warn: #7D6424; --cell-bad: #7E3530;\n}\n* { box-sizing: border-box; }\nbody { margin: 0; background: var(--bg); color: var(--ink); font: 400 15.5px\/1.6 var(--font-ui); -webkit-font-smoothing: antialiased; padding-inline: 16px; padding-block: 32px 64px; }\n.sheet { max-width: 820px; margin: 0 auto; background: var(--paper); border: 1px solid var(--line-2); border-radius: 8px; padding: 40px clamp(18px, 5vw, 56px) 48px; }\n.eyebrow { font-size: 11.5px; font-weight: 650; text-transform: uppercase; letter-spacing: .1em; color: var(--ink-3); font-variation-settings: 'wdth' 80; display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }\n.eyebrow svg { color: var(--accent); }\nh1 { font-size: clamp(28px, 5vw, 40px); line-height: 1.08; margin: 14px 0 12px; font-weight: 760; font-variation-settings: 'wdth' 78; letter-spacing: -0.005em; text-wrap: balance; }\nh2 { font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: .09em; color: var(--accent); margin: 40px 0 10px; font-variation-settings: 'wdth' 80; }\nh3 { font-size: 16px; margin: 20px 0 4px; font-weight: 650; }\np, li { max-width: 68ch; }\np { margin: 0 0 12px; }\n.lead { font-size: 18px; line-height: 1.5; color: var(--ink); max-width: 60ch; }\n.muted { color: var(--ink-2); }\n.small { font-size: 13px; color: var(--ink-3); }\na { color: var(--accent); }\n.verdict { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; margin: 18px 0 8px; }\n.pill { display: inline-flex; align-items: center; gap: 8px; padding: 5px 12px 5px 10px; border-radius: 999px; font-weight: 650; font-size: 13.5px; font-variation-settings: 'wdth' 88; }\n.pill i { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }\n.pill.ok { background: var(--ok-soft); color: var(--ok); } .pill.ok i { background: var(--ok); }\n.btn { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 6px; background: var(--accent); color: var(--paper); text-decoration: none; font-weight: 600; font-variation-settings: 'wdth' 88; }\n.btn:hover { filter: brightness(1.08); }\n.btn:focus-visible, a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }\n.figs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--line-2); border: 1px solid var(--line-2); border-radius: 6px; overflow: hidden; margin: 18px 0 6px; }\n.figs div { background: var(--paper); padding: 10px 12px; }\n.figs span { display: block; font-size: 10.5px; text-transform: uppercase; letter-spacing: .08em; color: var(--ink-3); font-weight: 650; font-variation-settings: 'wdth' 80; }\n.figs b { display: block; font: 600 19px\/1.25 var(--font-mono); font-variant-numeric: tabular-nums; }\n.figs b small { font-size: 11.5px; font-weight: 500; color: var(--ink-2); }\ndl.decisions { display: grid; grid-template-columns: max-content 1fr; gap: 8px 18px; margin: 0; }\ndl.decisions dt { font-weight: 650; }\ndl.decisions dd { margin: 0; color: var(--ink-2); }\n.tbl { overflow-x: auto; margin: 8px 0; }\ntable { width: 100%; border-collapse: collapse; font-size: 14px; }\nth { text-align: left; font-size: 11px; text-transform: uppercase; letter-spacing: .07em; color: var(--ink-3); font-weight: 650; padding: 8px 10px; border-bottom: 1px solid var(--line); font-variation-settings: 'wdth' 82; }\ntd { padding: 9px 10px; border-bottom: 1px solid var(--line-2); vertical-align: top; }\ntd:first-child { font-weight: 600; white-space: nowrap; }\n.st { display: inline-block; font-size: 11px; font-weight: 650; text-transform: uppercase; letter-spacing: .05em; padding: 2px 8px; border-radius: 999px; white-space: nowrap; font-variation-settings: 'wdth' 82; }\n.st.ok { background: var(--ok-soft); color: var(--ok); } .st.warn { background: var(--warn-soft); color: var(--warn); }\nul { padding-left: 20px; margin: 0 0 12px; }\nli { margin-bottom: 6px; }\nfigure { margin: 18px 0 8px; }\nfigure .frame { border: 1px solid var(--line-2); border-radius: 6px; padding: 12px; background: var(--bg); overflow-x: auto; }\nfigure svg { display: block; width: 100%; height: auto; min-width: 460px; }\nfigcaption { font-size: 13px; color: var(--ink-2); margin-top: 8px; max-width: 70ch; }\n.legend { display: flex; gap: 16px; flex-wrap: wrap; font-size: 12.5px; color: var(--ink-2); margin-top: 8px; }\n.legend i { display: inline-block; width: 14px; height: 10px; border-radius: 2px; margin-right: 6px; vertical-align: -1px; }\n.mono { font-family: var(--font-mono); font-size: 13px; }\ncode { font-family: var(--font-mono); font-size: 13px; background: var(--bg); padding: 1px 5px; border-radius: 4px; }\n.note { border-left: 3px solid var(--accent); padding: 4px 0 4px 14px; color: var(--ink-2); margin: 14px 0; }\nfooter { margin-top: 40px; padding-top: 16px; border-top: 1px solid var(--line-2); font-size: 13px; color: var(--ink-3); }\n@media (max-width: 600px) {\n  .figs { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n  dl.decisions { grid-template-columns: 1fr; gap: 2px; }\n  dl.decisions dd { margin-bottom: 10px; }\n  body { padding-block: 16px 40px; }\n}\n<\/style>\n<div style=\"width: 100vw; max-width: 100vw; margin-left: calc(-50vw + 50%); margin-right: calc(-50vw + 50%); box-sizing: border-box; padding: 0 20px;\">\n\n<article class=\"sheet\">\n  <div class=\"eyebrow\">\n    <svg width=\"30\" height=\"20\" viewBox=\"0 0 38 26\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M2 23 L19 3 L36 23 Z\"><\/path><path d=\"M10.5 23 V13 M19 23 V3 M27.5 23 V13 M10.5 13 L19 23 L27.5 13\"><\/path><\/svg>\n    <span>Diagnostic de faisabilit\u00e9<\/span><span>\u00b7<\/span><span>27 septembre 2026<\/span>\n  <\/div>\n  <h1>Une application web pour concevoir des fermes param\u00e9triques<\/h1>\n  <p class=\"lead\">Faire varier port\u00e9e, longueur et hauteur, voir la structure se r\u00e9organiser, savoir quand elle cesse d\u2019\u00eatre constructible, la montrer avec ses vrais profil\u00e9s et en compter les pi\u00e8ces : tout cela tient dans une page web, sans serveur ni logiciel \u00e0 installer.<\/p>\n  <div class=\"verdict\">\n    <span class=\"pill ok\"><i><\/i>Faisable \u2014 un premier prototype fonctionne<\/span>\n    <a class=\"btn\" href=\"https:\/\/youtu.be\/o4P6aTu3va4\" target=\"_blank\" rel=\"noopener\">Voir vid\u00e9o \u2192<\/a>\n  <\/div>\n  <div class=\"figs\" aria-label=\"R\u00e9sultats du projet d\u2019exemple\">\n    <div><span>Exemple<\/span><b>16 \u00d7 36 <small>m<\/small><\/b><\/div>\n    <div><span>Acier S355<\/span><b>12,2 <small>t<\/small><\/b><\/div>\n    <div><span>Ratio<\/span><b>21 <small>kg\/m\u00b2<\/small><\/b><\/div>\n    <div><span>Pi\u00e8ces<\/span><b>354<\/b><\/div>\n  <\/div>\n  <p class=\"small\">Hangar d\u2019exemple calcul\u00e9 par le prototype : ferme deux pans de 3,20 m, poteaux de 5 m, entraxe 6 m, couverture zinc, neige A2, vent r\u00e9gion 2. Le m\u00eame projet en lamell\u00e9-coll\u00e9 GL24h p\u00e8se environ 8,6 t (15 kg\/m\u00b2).<\/p>\n\n  <h2>Cadrage retenu<\/h2>\n  <dl class=\"decisions\">\n    <dt>Typologies<\/dt><dd>Ferme \u00e0 deux pans, monopente et poutre treillis plate, au choix, avec trois dispositions de treillis (Pratt, Howe, Warren).<\/dd>\n    <dt>Couverture<\/dt><dd>Zinc \u00e0 joint debout ou verri\u00e8re. Chacune fixe son poids, sa pente minimale, l\u2019\u00e9cartement maximal des pannes et la fl\u00e8che admissible (l\/200 pour le zinc, l\/300 pour le verre).<\/dd>\n    <dt>Public<\/dt><dd>Outil p\u00e9dagogique : chaque v\u00e9rification est expliqu\u00e9e, les efforts sont dessin\u00e9s, les limites sont cartographi\u00e9es.<\/dd>\n    <dt>Mat\u00e9riau<\/dt><dd>Acier, avec une comparaison en bois (massif C24 ou lamell\u00e9-coll\u00e9 GL24h \/ GL28h) sur le m\u00eame projet.<\/dd>\n  <\/dl>\n\n  <h2>Faisabilit\u00e9 par brique<\/h2>\n  <div class=\"tbl\"><table>\n    <thead><tr><th>Brique<\/th><th>Verdict<\/th><th>Ce que fait le prototype<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td>G\u00e9om\u00e9trie param\u00e9trique<\/td><td><span class=\"st ok\">R\u00e9alis\u00e9<\/span><\/td><td>Logique des tutoriels Grasshopper : division de la port\u00e9e, diagonales par d\u00e9calage de liste, sym\u00e9trie, nombre de fermes arrondi puis entraxe recalcul\u00e9. Mise \u00e0 jour instantan\u00e9e aux curseurs.<\/td><\/tr>\n      <tr><td>Adaptation constructive<\/td><td><span class=\"st ok\">R\u00e9alis\u00e9<\/span><\/td><td>Nombre de panneaux choisi automatiquement : pannes aux n\u0153uds, diagonales proches de 45\u00b0, le moins de barres possible. Contreventements, filants et butons plac\u00e9s d\u2019office.<\/td><\/tr>\n      <tr><td>Limites de constructibilit\u00e9<\/td><td><span class=\"st ok\">R\u00e9alis\u00e9<\/span><\/td><td>Calcul de la file courante par la m\u00e9thode des d\u00e9placements, charges de neige et de vent selon les Eurocodes, choix automatique du profil le plus l\u00e9ger, diagnostic en 12 crit\u00e8res et carte des limites.<\/td><\/tr>\n      <tr><td>Vrais composants en 3D<\/td><td><span class=\"st ok\">R\u00e9alis\u00e9<\/span><\/td><td>Sections r\u00e9elles extrud\u00e9es (HEA, IPE, tubes carr\u00e9s et ronds, tirants, lamell\u00e9-coll\u00e9), goussets, platines, couverture zinc ou verre, socle de maquette, personnages et cotes.<\/td><\/tr>\n      <tr><td>Nomenclature et masse<\/td><td><span class=\"st ok\">R\u00e9alis\u00e9<\/span><\/td><td>Pi\u00e8ces, rep\u00e8res distincts, longueurs, masses, surface \u00e0 peindre ou volume de bois, boulons et \u00e9clisses estim\u00e9s. Export CSV, et OBJ pour Rhino.<\/td><\/tr>\n      <tr><td>Assemblages d\u00e9taill\u00e9s<\/td><td><span class=\"st warn\">Sch\u00e9matique<\/span><\/td><td>Goussets dessin\u00e9s en enveloppe convexe et boulons compt\u00e9s d\u2019apr\u00e8s les efforts ; pas de coupes d\u2019onglet ni de soudures dessin\u00e9es.<\/td><\/tr>\n    <\/tbody>\n  <\/table><\/div>\n\n  <h2>Adapter la structure aux proportions<\/h2>\n  <p>La structure ne se contente pas de s\u2019\u00e9tirer : ses r\u00e8gles de composition sont recalcul\u00e9es \u00e0 chaque changement.<\/p>\n  <ul>\n    <li><strong>Panneaux.<\/strong> Leur nombre est choisi pour que chaque panne tombe sur un n\u0153ud (\u2264 2,5 m sous zinc, \u2264 1,8 m sous verre) et que les diagonales restent entre 30\u00b0 et 60\u00b0. Hors de ces bornes, la membrure sup\u00e9rieure fl\u00e9chit ou les diagonales travaillent mal.<\/li>\n    <li><strong>Trame.<\/strong> Le nombre de trav\u00e9es est arrondi \u00e0 partir de l\u2019entraxe vis\u00e9, puis l\u2019entraxe r\u00e9el est recalcul\u00e9 : pas de trav\u00e9e incompl\u00e8te.<\/li>\n    <li><strong>Stabilit\u00e9.<\/strong> Poutre au vent dans les trav\u00e9es d\u2019extr\u00e9mit\u00e9 (et au milieu au-del\u00e0 de 60 m), pal\u00e9es de stabilit\u00e9 en long-pans, filants tenant la membrure inf\u00e9rieure lorsque le vent soul\u00e8ve la toiture.<\/li>\n    <li><strong>Profils.<\/strong> Chaque famille de barres re\u00e7oit le profil le plus l\u00e9ger du catalogue qui r\u00e9siste \u00e0 neuf combinaisons de charges, puis les membrures sont renforc\u00e9es si la fl\u00e8che d\u00e9passe la limite de la couverture.<\/li>\n  <\/ul>\n\n  <h2>O\u00f9 s\u2019arr\u00eate le constructible<\/h2>\n  <p>Chaque case de la carte ci-dessous est un calcul complet du hangar d\u2019exemple, pour une port\u00e9e et une hauteur de ferme donn\u00e9es. La m\u00eame carte, recalcul\u00e9e pour les param\u00e8tres courants, figure dans l\u2019application.<\/p>\n  <figure>\n    <div class=\"frame\"><svg id=\"map\" viewBox=\"0 0 560 342\" role=\"img\" aria-label=\"Carte de constructibilit\u00e9 : port\u00e9e de 6 \u00e0 60 m en abscisse, hauteur de ferme de 0,5 \u00e0 8 m en ordonn\u00e9e\"><\/svg><\/div>\n    <div class=\"legend\"><span><i style=\"background:var(--cell-ok)\"><\/i>Constructible<\/span><span><i style=\"background:var(--cell-warn)\"><\/i>Constructible avec r\u00e9serves<\/span><span><i style=\"background:var(--cell-bad)\"><\/i>Hors limites<\/span><\/div>\n    <figcaption>Ferme deux pans en acier S355, zinc, entraxe 6 m, 728 configurations. En bas \u00e0 droite, les fermes trop basses pour leur port\u00e9e deviennent d\u00e9mesur\u00e9es ou ne trouvent plus de profil. En haut, les fermes tr\u00e8s hautes restent possibles, avec r\u00e9serves : diagonales trop redress\u00e9es, transport en convoi exceptionnel.<\/figcaption>\n  <\/figure>\n  <p>Deux niveaux se combinent. Les <strong>r\u00e8gles de proportion<\/strong> (rapport port\u00e9e \/ hauteur, angles, pente de couverture, gabarit routier) donnent une alerte imm\u00e9diate. Le <strong>calcul<\/strong> tranche ensuite. Une proposition est hors limites quand aucun profil du catalogue ne r\u00e9siste, quand la fl\u00e8che ne peut \u00eatre tenue, quand la pente ne suffit plus \u00e0 la couverture, ou quand la masse d\u00e9passe le double des usages (70 kg\/m\u00b2).<\/p>\n\n  <h2>Un r\u00e9sultat qui m\u00e9rite d\u2019\u00eatre montr\u00e9<\/h2>\n  <p>En orientant chaque diagonale par l\u2019\u00e9quilibre des moments (m\u00e9thode de Ritter), le prototype a mis en \u00e9vidence une subtilit\u00e9 de cours. Dans une ferme triangulaire, pour que les diagonales restent tendues comme dans une poutre Pratt, il faut les incliner dans l\u2019autre sens.<\/p>\n  <figure>\n    <div class=\"frame\">\n      <svg viewBox=\"0 0 560 150\" role=\"img\" aria-label=\"Comparaison des diagonales tendues dans une poutre \u00e0 membrures parall\u00e8les et dans une ferme triangulaire\">\n        <g transform=\"translate(14 28)\" stroke-width=\"3.2\" stroke-linecap=\"round\" fill=\"none\">\n          <path d=\"M10 10 H250\" style=\"stroke:var(--compression)\"><\/path>\n          <path d=\"M10 60 H250\" style=\"stroke:var(--tension)\"><\/path>\n          <path d=\"M10 10 V60 M50 10 V60 M90 10 V60 M130 10 V60 M170 10 V60 M210 10 V60 M250 10 V60\" style=\"stroke:var(--compression)\" stroke-width=\"2.2\"><\/path>\n          <path d=\"M10 10 L50 60 M50 10 L90 60 M90 10 L130 60 M130 60 L170 10 M170 60 L210 10 M210 60 L250 10\" style=\"stroke:var(--tension)\" stroke-width=\"2.2\"><\/path>\n        <\/g>\n        <g transform=\"translate(290 28)\" stroke-width=\"3.2\" stroke-linecap=\"round\" fill=\"none\">\n          <path d=\"M10 60 L130 10 L250 60\" style=\"stroke:var(--compression)\"><\/path>\n          <path d=\"M10 60 H250\" style=\"stroke:var(--tension)\"><\/path>\n          <path d=\"M50 60 V43.3 M90 60 V26.7 M170 60 V26.7 M210 60 V43.3\" style=\"stroke:var(--compression)\" stroke-width=\"2.2\"><\/path>\n          <path d=\"M130 60 V10\" style=\"stroke:var(--neutral)\" stroke-width=\"2.2\"><\/path>\n          <path d=\"M50 60 L90 26.7 M90 60 L130 10 M130 10 L170 60 M170 26.7 L210 60\" style=\"stroke:var(--tension)\" stroke-width=\"2.2\"><\/path>\n        <\/g>\n        <text x=\"144\" y=\"114\" text-anchor=\"middle\" font-size=\"12.5\" style=\"fill:var(--ink);font-family:var(--font-ui);font-weight:600\">Membrures parall\u00e8les<\/text>\n        <text x=\"144\" y=\"131\" text-anchor=\"middle\" font-size=\"12\" style=\"fill:var(--ink-2);font-family:var(--font-ui)\">diagonales tendues vers le milieu<\/text>\n        <text x=\"420\" y=\"114\" text-anchor=\"middle\" font-size=\"12.5\" style=\"fill:var(--ink);font-family:var(--font-ui);font-weight:600\">Ferme triangulaire<\/text>\n        <text x=\"420\" y=\"131\" text-anchor=\"middle\" font-size=\"12\" style=\"fill:var(--ink-2);font-family:var(--font-ui)\">diagonales tendues vers le fa\u00eetage<\/text>\n      <\/svg>\n    <\/div>\n    <div class=\"legend\"><span><i style=\"background:var(--tension)\"><\/i>Traction<\/span><span><i style=\"background:var(--compression)\"><\/i>Compression<\/span><span><i style=\"background:var(--neutral)\"><\/i>Effort quasi nul<\/span><\/div>\n    <figcaption>Dans une poutre \u00e0 membrures parall\u00e8les, l\u2019effort tranchant ne peut passer que par les diagonales. Dans une ferme triangulaire, la membrure inclin\u00e9e en porte d\u00e9j\u00e0 l\u2019essentiel, et le signe des efforts dans les barres de treillis s\u2019inverse. L\u2019outil choisit l\u2019orientation d\u2019apr\u00e8s la m\u00e9canique, quelle que soit la forme, pour que \u00ab Pratt \u00bb signifie toujours \u00ab diagonales tendues \u00bb.<\/figcaption>\n  <\/figure>\n\n  <h2>Composants et poids<\/h2>\n  <p>Le m\u00e9tr\u00e9 suit les pi\u00e8ces r\u00e9elles : membrures continues d\u00e9coup\u00e9es en tron\u00e7ons de 12 m au plus (avec leurs \u00e9clisses), montants et diagonales \u00e0 la pi\u00e8ce, pannes par trav\u00e9e, tirants, butons, filants, platines. Goussets et boulons sont estim\u00e9s d\u2019apr\u00e8s les efforts de chaque n\u0153ud. Deux indicateurs parlent aux \u00e9tudiants : la masse rapport\u00e9e au m\u00b2 couvert (rep\u00e8re : 15 \u00e0 35 kg\/m\u00b2 pour un hangar l\u00e9ger) et le nombre de rep\u00e8res distincts, qui mesure la r\u00e9p\u00e9titivit\u00e9.<\/p>\n\n  <h2>Ce que l\u2019outil ne fait pas<\/h2>\n  <ul>\n    <li>C\u2019est un <strong>pr\u00e9dimensionnement<\/strong> : il donne des ordres de grandeur fiables pour comparer des partis, pas une note de calcul. Assemblages, fondations, neige accidentelle, s\u00e9isme et incendie ne sont pas v\u00e9rifi\u00e9s.<\/li>\n    <li>Le vent et la neige sont simplifi\u00e9s : zones courantes de toiture, b\u00e2timent ferm\u00e9, altitude \u2264 1 000 m.<\/li>\n    <li>Les pentes minimales de couverture sont indicatives : elles d\u00e9pendent du syst\u00e8me de verri\u00e8re ou du DTU applicable.<\/li>\n  <\/ul>\n\n  <h2>Pistes pour la suite<\/h2>\n  <ul>\n    <li>Bilan carbone indicatif acier \/ bois, \u00e0 partir de facteurs d\u2019\u00e9mission sourc\u00e9s.<\/li>\n    <li>Fermes plus \u00e9labor\u00e9es : Polonceau, en W (Fink), arcs treillis, portiques \u00e0 traverse treillis.<\/li>\n    <li>N\u0153uds d\u00e9taill\u00e9s (coupes, soudures, plats en \u00e2me) pour la vue de d\u00e9tail.<\/li>\n    <li>\u00c9change avec Grasshopper : export des param\u00e8tres et de la g\u00e9om\u00e9trie en JSON pour reprendre le mod\u00e8le dans Rhino.<\/li>\n    <li>Mode \u00ab exercice \u00bb : l\u2019\u00e9tudiant propose une section, l\u2019outil v\u00e9rifie et explique.<\/li>\n  <\/ul>\n\n  <footer>\n    Projet local : <code>M:\\RHINO-GRASSHOPPER\\PARA-STRUCTURE<\/code>, avec <code>index.html<\/code> et les modules <code>js\/<\/code> (catalogue, solveur, mod\u00e8le, dimensionnement, vue 3D, interface), les tests <code>tests\/run.js<\/code> et l\u2019assemblage <code>tools\/build.js<\/code>.\n    Logique g\u00e9om\u00e9trique d\u2019apr\u00e8s les tutoriels de Keris Studio : <a href=\"https:\/\/www.keris-studio.fr\/blog\/?p=11665\" target=\"_blank\" rel=\"noopener\">partie 1<\/a>, <a href=\"https:\/\/www.keris-studio.fr\/blog\/?p=11711\" target=\"_blank\" rel=\"noopener\">partie 2<\/a>.\n  <\/footer>\n<\/article>\n\n<script>\n(function () {\n  \/\/ Carte r\u00e9elle calcul\u00e9e par le prototype (o = constructible, w = r\u00e9serves, b = hors limites), lignes de bas en haut\n  const DATA = 'wwbbbbbbbbbbbbbbbbbbbbbbbbbbowwwbbbbbbbbbbbbbbbbbbbbbbbboowwwwbbbbbbbbbbbbbbbbbbbbbbooowwwwwwbbbbbbbbbbbbbbbbbbboooowwwwwwwbbbbbbbbbbbbbbbbboooooowwwwwwwwbbbbbbbbbbbbbbooooooowwwwwwwwwbbbbbbbbbbbboooooooowwwwwwwwwwbbbbbbbbbbooooooooowwwwwwwwwwwwbbbbbbbowoooooooowwwwwwwwwwwwwbbbbbwwoooooooooowwwwwwwwwwwwwwbbwwwowoooooooowwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwbwwwwwwwwwwwwwwwwwwwwwwwwwwwbwwwwwwwwwwwwwwwwwwwwwwwwwww';\n  const NX = 28, NY = 26, x0 = 6, dxs = 2, y0 = 0.5, dys = 0.3;\n  const ml = 46, mt = 8, cw = 17.5, ch = 11, svg = document.getElementById('map');\n  const cls = { o: 'var(--cell-ok)', w: 'var(--cell-warn)', b: 'var(--cell-bad)' };\n  let s = '';\n  for (let j = 0; j < NY; j++) for (let i = 0; i < NX; i++) {\n    const c = DATA[j * NX + i];\n    s += `<rect x=\"${ml + i * cw + 0.5}\" y=\"${mt + (NY - 1 - j) * ch + 0.5}\" width=\"${cw - 1}\" height=\"${ch - 1}\" rx=\"1.2\" style=\"fill:${cls[c]}\"\/>`;\n  }\n  const text = (x, y, t, a, extra) => `<text x=\"${x}\" y=\"${y}\" font-size=\"10.5\" text-anchor=\"${a}\" style=\"fill:var(--ink-3);font-family:var(--font-mono)\" ${extra || ''}>${t}<\/text>`;\n  for (let i = 0; i < NX; i++) { const v = x0 + i * dxs; if (v % 6 === 0) s += text(ml + i * cw + cw \/ 2, mt + NY * ch + 14, v, 'middle'); }\n  for (let j = 0; j < NY; j++) { const v = y0 + j * dys; if (Math.abs(v - Math.round(v)) < 1e-6) s += text(ml - 6, mt + (NY - 1 - j) * ch + ch \/ 2 + 3.5, v, 'end'); }\n  s += `<text x=\"${ml + NX * cw \/ 2}\" y=\"${mt + NY * ch + 32}\" font-size=\"11.5\" text-anchor=\"middle\" style=\"fill:var(--ink-2);font-family:var(--font-ui)\">Port\u00e9e (m)<\/text>`;\n  s += `<text transform=\"translate(13 ${mt + NY * ch \/ 2}) rotate(-90)\" font-size=\"11.5\" text-anchor=\"middle\" style=\"fill:var(--ink-2);font-family:var(--font-ui)\">Hauteur de ferme (m)<\/text>`;\n  \/\/ projet d'exemple : 16 m, 3,20 m\n  const px = ml + ((16 - x0) \/ dxs) * cw + cw \/ 2, py = mt + (NY - 1 - (3.2 - y0) \/ dys) * ch + ch \/ 2;\n  s += `<circle cx=\"${px}\" cy=\"${py}\" r=\"6\" style=\"fill:none;stroke:var(--ink);stroke-width:2\"\/><circle cx=\"${px}\" cy=\"${py}\" r=\"1.8\" style=\"fill:var(--ink)\"\/>`;\n  s += `<text x=\"${px + 10}\" y=\"${py - 8}\" font-size=\"11\" style=\"fill:var(--ink);font-family:var(--font-ui);font-weight:600\">exemple<\/text>`;\n  svg.innerHTML = s;\n})();\n<\/div>\n\n<\/script>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Faisabilit\u00e9 des fermes param\u00e9triques Diagnostic de faisabilit\u00e9\u00b727 septembre 2026 Une application web pour concevoir des fermes param\u00e9triques Faire varier port\u00e9e, longueur et hauteur, voir la structure se r\u00e9organiser, savoir quand elle cesse d\u2019\u00eatre constructible, la montrer avec ses vrais profil\u00e9s et en compter les pi\u00e8ces : tout cela tient dans une page web, sans serveur &hellip; <a href=\"https:\/\/www.keris-studio.fr\/blog\/?p=15888\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">AI-parametric structure<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":15889,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[190,593,8,26,174],"tags":[546,649,650,543,234,651,585],"class_list":["post-15888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-architecture-2","category-artificial","category-methodologie","category-production","category-simulations","tag-artificial-intelligence","tag-claude-code","tag-ferme","tag-intelligence-artificielle","tag-parametric","tag-serre","tag-structure"],"_links":{"self":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/15888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15888"}],"version-history":[{"count":5,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/15888\/revisions"}],"predecessor-version":[{"id":15903,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/posts\/15888\/revisions\/15903"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=\/wp\/v2\/media\/15889"}],"wp:attachment":[{"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.keris-studio.fr\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}