# Dibrix BIM: ordbok og hurtigoppslag

Generert fra koden (bim/ordbok.py + levende konstanter); ingen repo trengs.

## Typer (levende)

dørtyper (style.type): slett, speil, glass, helglass, garage, dobbel, skyve, skyve_vegg, lomme · vindustyper: fast, 1-floy, 2-floy · takbelegg: shingel_rett, shingel_skra, shingel_drape, shingel_kuttet, shingel_swing, stein_dobbelkrum, stein_flat, falset_stal, torv_sedum, stein_tegl, stal_trapes, papp, skifer · falsetfarger: Rød, Sort, Antrasitt, Grå, Grønn, Brun · kledning: liggende, stående

## Ord → kode

| Norsk | English | Kode / bruk |
|---|---|---|
| yttervegg / ytterring | exterior wall ring | create_wall_path(corners, closed=True, thickness_m=…): lukket ring bygges innover (auto_align_closed) |
| innervegg | interior wall | create_wall / create_wall_path (åpen); navn «Innervegg a.b» |
| tak: saltak, valmtak, pulttak, flatt | gable, hip, shed, flat roof | create_roof_from_walls(form='gable'|'hip'|'shed'|'flat', slope_deg, overhang_m, covering) |
| møne, raft, gavl | ridge, eave, gable end | edge_roles per kant: 'slope' (raftside) / 'gable' (gavlside); møne ligger parallelt med slope-kantene |
| T-tak, L-tak, tverrgavl | cross gable | tegn yttervegg-ringen som T/L → ett sammenføyd tak, hvert fløymøne. På rektangel: T-ring med 2 cm stamme + eksplisitte edge_roles. ALDRI to tak oppå hverandre |
| kvist / ark | dormer | add_roof_opening(kind='ark'), kun små; stor tverrgavl = T-tak |
| takvindu | roof window / skylight | POST /roof_window eller BuildChat takvindu() (VELUX series/size) → glass+karm; roofs[].openings kind='takvindu' er bare hullet (cut i én takflate). Ikke det samme som kind='takopplett' |
| takbelegg (belegning) | roof covering | covering={'type': …, 'color': …}; se typer under |
| falset / stående falset | standing seam | covering type 'falset_stal'; farger se under |
| torvtak / sedumtak / grønt tak / gress på taket | green roof / sedum roof | covering type 'torv_sedum' (farger Sedum, Gress, Torv, Høstsedum); aldri bare en grønn farge |
| teglstein / bølgeblikk / takpapp / skifer | clay tile / corrugated sheet / roofing felt / slate | covering type 'stein_tegl' / 'stal_trapes' / 'papp' / 'skifer'; anbefalt takvinkel: list_roof_finishes() pitch_deg |
| takutstikk | overhang | overhang_m, per kant edge_overhangs |
| kledning: stående / liggende | cladding: vertical / horizontal | set_cladding(on=True, type='stående'|'liggende', cover, utlekting, t, material). Ligger UTENPÅ kjernen (+0,042 m: utlekting 0,023 + bord 0,019): kjernen blir tynnere |
| kjernetykkelse under kledning | core thickness under cladding | normalize_cladding_thickness(viewport): kjerne = målt total - kledningsoffset (0,042), ytterflaten av kledningen uendret, etasjeskille/dekke inset mot kledd ytterflate. Murvegger (navn mur/ringmur/sokkel/fundament, kjeller) er unntatt: de har ikke kledning og beholder målt tykkelse |
| vegg opp til taket | walls to roof | set_walls_to_roof(True): følger taket (høyeste underside ved flere tak) |
| dør | door | place_opening(host_id, kind='door', offset_m, width_m, height_m, hinge, style={type: …}) |
| ytterdør med glass | glazed door | style={'type':'glass','glass_w':0.52,'glass_z0':0.16,'glass_z1':1.91} (glassets egen størrelse, høyder fra dørfot) |
| vindu | window | place_opening(host_id, kind='window', sill_m, width_m, height_m, style={type: …}) |
| fastkarm (én ramme) | fixed window | style.type='fast' |
| åpningsvindu (karm + ramme, to rammer) | casement window | style.type='1-floy' (standard); to ruter med midtpost = '2-floy' |
| karm / ramme | frame / sash | style.karm_w (karm) / style.sash_w (ramme i åpningsvindu), frame_width_m |
| gerikt / omramming | casing / trim | style.trim_out + trim_out_w (utvendig), trim_in* (innvendig); utforing = lysningsbord karm→kledning |
| delt gerikt | shared casing | åpninger nærmere enn to gerikter får ÉN gerikt mellom seg (venstre tegner den, høyre ingen): style trim_out_wl/trim_out_wr settes automatisk av bim.api |
| takopplett / innskåret tverrgavl | roof notch | create_roof / build_roof(openings=[{'kind':'takopplett','boundary':[…],'cut':'perpendicular'|'plumb'}]): kutt gjennom taket; takopplettet selv er et eget pulttak |
| ulik takfot | eave rises | build_roof(edge_rises=[m per kant]): takfot over z_eave per kant; del ikke taket i flere pulttak |
| rekkverk | railing | agent_ops.create_railing(path, z0=, style='liggende'|'spiler'|'glass'|'massiv', height=, clip_roofs=[…]) (bim/railing_paths.py); veranda/terrasse: bim/railings.py |
| skorstein / pipe | chimney | agent_ops.create_chimney((x, y), shape='rect'|'round', size=, z0=, z1=, sections=[…], above_ridge_m=0.8, cap=True) |
| vannbrett / sålbenk | sill flashing / sill | vannbrett*, salbenk i vindusstilen |
| rundt vindu / rundbue / køyevindu | round window / arched window | place_opening(host_id, kind='window', shape='circle', width_m=diameter) | shape='arch' (arch_rise_m = stikk, ellers innstillingen opening.arch_rise); edit_opening(id, shape='circle'|'arch'|'rect'). Hullet, kledningen, karmen, rammen og gerikten følger formen |
| åpning som ikke er firkant (vinklet loftsvindu) | non-rectangular opening | outer_loop_uv=[[u, z], …] på place_opening (z absolutt); veggens hull følger omrisset |
| hull / åpning uten karm | void | place_opening(kind='opening') |
| hengsel / slå | hinge / swing | hinge='left'|'right', style.swing |
| dekke / etasjeskille / såle | slab / floor | kind 'slab' (z_top, thickness_m); to_slab lar vegger stoppe under dekket |
| glass | glass | undergruppe window_glass med opasitet 0,35 (gjennomsiktig også på Web) |
| bilde av modellen / se | picture of the model / look | GET /sessions/{sid}/render.png?view=iso|front|back|left|right|top&hide=SKP-import&focus=<id>&section=z:2.4 (MCP: render); uten nettleser |
| oversikt uten å bygge mesh | light overview | GET /sessions/{sid}/scene-summary (antall per type, boks per element, lag, etasjer, referanse); id-ene virker i focus/hide |
| original mot tolket | original vs interpreted | GET /sessions/{sid}/compare?with=<sid2> (tall) eller render.png?side_by_side=<sid2> (ett bilde, samme kamera) |
| møbler / komponent / seng / sofa / toalett / servant / dusj | furniture / component / bed / sofa / toilet / washbasin / shower | find_component(q) søker i komponentbiblioteket: bare Dibrix' parametriske typer (dibrix-furn-seng, -sofa, -toalett, -servant, -dusj; params med område), ingen mesh-katalog (fjernet 2026-11-06; trær, biler og mennesker finnes ikke der). insert_component(id, x, y, z, rot, size_m=[b, d, h]) setter inn en instans av en DELT prototype bygget i de målene (midten av bunnen i x,y,z, meter), ett angresteg. I hus-spec: furniture=[{ref: id, at: [x,y,z], rot_deg, params: {width_m, …}}]. Miniatyr (SVG): GET /library/{id}/thumb |
| høyt under taket / hvor langt ut / litt større | everyday words | hverdagsord -> tall: se «Hverdagsord» under. bim.hverdag.tolk(tekst) gir verktøykall; draft_from_description(tekst) gjør det og bygger |
| hus-spec / hele huset fra én JSON | house spec | build_house_from_spec(spec, replace=False) bygger etasjer, vegger, åpninger, dekker, tak, trapper, søyler, bjelker, rekkverk, skorstein og terreng på sekunder (ett angresteg); get_house_spec() leser ut. Skjema + eksempel: GET /spec/schema. Navn som i agent_ops (height_m, thickness_m, offset_m, slope_pct, edge_roles) |
| fase / eksisterende / rivning / nybygg / tilbygg | phase / existing / demolition / new / extension | add_phase_presets(), create_phase(name, kind), assign_phase(phase, element_ids | kind='wall'); element uten fase er i «ny». Eksisterende vises grå og koster 0, rivning koster rivepris. hus-spec: phases + phase på elementet |
| tidsplan / Gantt / kritisk sti / 4D | schedule / Gantt / critical path / 4D | suggest_plan(start) lager tasks fra mengder; set_task({name, phase, duration_d, deps}); plan_summary() gir Gantt, kritisk sti, kost og S-kurve; plan_visible_at(dato) viser byggefremdrift |
| kost / 5D / budsjett / S-kurve | cost / 5D / budget / S-curve | set_plan_settings(unit_prices={'wall': {'unit': 'm2', 'nok': 1200}}, budget={'total': ...}); cost_summary() per fase, kind og måned; compare_cost(before) gir kostnad før/etter |

## Hverdagsord (Enkel) ↔ verktøy (Proff)

Samme data og verktøy: «Enkel» og «Proff» er en innstilling som styrer ordvalg og felt, ikke to produkter. Verdiene er innstillinger (`bim.hverdag.DEFAULT_PREFS`).

| Du sier | Verktøy | Argumenter |
|---|---|---|
| høyt under taket | `set_dimensions` | `{'height_m': 2.7}` |
| litt større | `set_dimensions` | `{'scale': 1.15}` |
| mye mindre | `set_dimensions` | `{'scale': 0.667}` |
| 6 x 4 | `set_dimensions` | `{'length_m': 6.0, 'width_m': 4.0}` |
| 20 kvadrat | `set_dimensions` | `{'area_m2': 20.0}` |
| saltak | `set_roof_style` | `{'form': 'gable'}` |
| brattere tak | `set_roof_style` | `{'slope_pct': 50.0}` |
| stort takutstikk | `set_roof_style` | `{'overhang_m': 0.8}` |
| stående panel | `set_cladding_style` | `{'direction': 'stående'}` |
| sort tak | `set_colors` | `{'tak': 'sort'}` |
| hvitt hus | `set_colors` | `{'kledning': 'hvit'}` |
| svalgang | `add_overbygg` | `{'kind': 'svalgang', 'wall_side': 'front', 'depth_m': 1.5}` |
| takoverbygg | `add_overbygg` | `{'kind': 'overbygg', 'wall_side': 'front', 'depth_m': 1.2}` |
| to rom | `add_rooms` | `{'count': 2, 'layout': 'jevnt'}` |
| nordveggen er 8,03 m | `add_anchor` | `{'kind': 'ytterlengde', 'side': 'nord', 'value_m': 8.03}` |
| vindu mot sør | `place_openings` | `{'kind': 'window', 'count': 1, 'wall_side': 'sor', 'distribution': 'senter'}` |
| vindu midt på sørveggen | `place_openings` | `{'kind': 'window', 'count': 1, 'wall_side': 'sor', 'distribution': 'senter'}` |
| to vinduer mot hagen | `place_openings` | `{'kind': 'window', 'count': 2, 'wall_side': 'bak', 'distribution': 'jevnt'}` |
| dør i hjørnet | `place_openings` | `{'kind': 'door', 'count': 1, 'wall_side': 'front', 'distribution': 'hjorne_hoyre'}` |
| døra ved hjørnet | `place_openings` | `{'kind': 'door', 'count': 1, 'wall_side': 'front', 'distribution': 'hjorne_hoyre'}` |

Plassering i ord går til `bim.plassering.place_openings`: vinduer midt på eller jevnt fordelt, dør 0,9 m, minst 0,3 m fra hjørnet, aldri oppå hverandre. Planen har +y = nord; «front» = sør; «hagen» er en antakelse (nord) som sies høyt.

## Oppskrifter

- Faser og plan (T56): add_phase_presets() → assign_phase('eksisterende', kind='wall') for det som står, assign_phase('tilbygg', element_ids=[…]) for det nye → set_plan_settings(start='2027-03-01', unit_prices={…}) → suggest_plan() → plan_summary() (Gantt, kritisk sti, kost per fase og måned) → set_phase_visibility(hidden=['rivning']). Alt er ett angresteg hver. Hus-spec bærer phases, plan og phase per element.
- Hus fra spec (raskest, alt i ett kall): hent eksemplet fra GET /spec/schema (eller get_house_spec() på en eksisterende modell), endre tallene, bygg med build_house_from_spec(spec). Vegger har id (w1…), åpninger refererer med host='w1', tak har boundary (ytre veggflate-ring) og edge_roles per kant. Svaret har warnings (hva som ble hoppet over) og timing. Rett opp i spec-en og bygg på nytt med replace=True, ikke legg til flere kall.
- Møblere: find_component('seng') gir dibrix-furn-seng (parametrisk, params width_m/depth_m/height_m med område); insert_component('dibrix-furn-seng', x, y, 0, rot=90, size_m=[1.8, None, None]) plasserer (hundrevis av like møbler er hundrevis av matriser over én prototype). Med hus-spec: legg furniture=[{ref, at, rot_deg, params}] i samme spec som veggene. get_house_spec() leser plasserte møbler tilbake som furniture. Finnes ingen type (stol, bord, skap): si det, ikke finn på en id.
- Hus fra mål: create_wall_path(ring, closed=True, thickness_m=0.2) → create_roof_from_walls(form='gable', slope_deg=…, covering=…) → set_walls_to_roof(True) → place_opening per åpning → set_cladding(…).
- SKP/importert modell → BIM: plan fra veggbunnene (tykkelse = avstand mellom de to store parallelle flatene) → høyder fra dekke og tak → tak (form, T-ring, belegg) → åpninger fra hullgeometrien (outer_loop_uv for vinklede) → dørtype/vindustype fra de nestede omrissene → kledning fra tekstur (uvw gir retningen). Skjul referanselaget «SKP-import» og se på resultatet.
- Åpning med vinklet topp: hent hjørnene fra flaten, regn om til (u, z) langs veggen, outer_loop_uv.
- Sjekk alltid: plan/areal etter hver endring, og se på modellen. Tall alene sier ikke at det ser riktig ut.
- Se på modellen uten nettleser: scene-summary først (ids, lag, referanse), så render.png med view=iso og view=front; skjul referanselaget med hide=SKP-import; sammenlign original og tolket med side_by_side.

## Fallgruver

- To overlappende tak er ikke et sammenføyd tak. Bruk T-/L-ring med eksplisitte edge_roles.
- Lukket ring: yttervegg (kropp innover). For innvendige mål, auto_align_closed=False og motsatt alignment.
- Hullet i veggen er ikke rektangel når åpningen har outer_loop_uv.
- Window default type er '1-floy' (to rammer): fastkarm må settes eksplisitt. trim_out (gerikt/belistning utenpå) er AV som standard: sett det bare når tegningen viser gerikt (trim_out=true + trim_out_w/trim_out_t, casing_source=lest|antatt); vet du ikke, la det stå av. Karm har karm_w/karm_d (frame_source=lest|antatt|ukjent). Eldre modeller beholder gammel standard til de bygges om med trim_v=2 / opening_std=2.
- Dørbladet kan være et eget element ved siden av karmen: glass i bladet avgjør dørtypen.
- Kledning vokser huset 4,2 cm hvis kjernen ikke gjøres tynnere.
- Kledning leses fra FLATENES materialer i originalen (scripts/skp_batch/cladding_areas.py), ikke fra laget: E2-vegger kan ligge på innervegg-laget og likevel være kledd; kjeller (0-Walls_Exterior) er mur uten kledning; etasjeskille-kanter med kledningsmateriale gir kledningsbånd.
- SketchUp roterer ofte kledningsteksturen 90°: vannrette spor i bildet kan være STÅENDE bord. Bruk uvw, ikke bildet.
- Ikke lag vegg/tak/kledning/dør med mesh (wall()/board()/extrude()): bruk BIM-verktøyene. Ett board per kledningsbord er forbudt.
- Skråvindu (outer_loop_uv): kledningen kuttes etter omrisset, og gerikten følger omrisset (ikke boksen).
- Rundt vindu er shape='circle', ikke et firkantvindu 1x1: «rundt vindu på 1 m» = width_m=1 (høyden blir lik). Bordene kuttes langs sirkelen (cut_pieces_by_outlines).
- `to_roof=True` beviser ingenting: mål veggtopp mot taket (mål < 5 mm). Vegg under to tak: laveste underside vinner.
- Hull i importflater ligger i `Face.holes` (ikke `hole_loops`); ikke svelg feil rundt geometri-uthenting.
- Ikke slett alle BIM-element i en fylt live-modell (kan krasje Desktop); bygg på fersk app og lagre .igz først.
- Alt er meter og grader; én operasjon = ett angre-steg.
