Files
Tectum/README.md
T

113 lines
5.9 KiB
Markdown

# Tectum — configurator Van Emous Mantelzorgwoningen (intern)
Configurator voor mantelzorgwoningen: wand, vloer en woning (gekoppelde units)
met 2D, 3D, specificaties en PDF-tekenbladen.
Copyright © 2026 Machiel Heinen. Alle rechten voorbehouden; gebruik
uitsluitend met schriftelijke toestemming. Zie [LICENTIE.md](LICENTIE.md).
Elk bronbestand begint met deze copyright-kop.
## Draaien
```
./start.sh # of: python3 -m http.server 8000
```
Open `http://localhost:8000`. Elke statische webserver volstaat; geen
build-stap. Direct openen via `file://` werkt niet (texturen/lucht).
## Structuur
```
index.html app-shell: menubalk, splashscreen
css/app.css alle stijl
js/vendor/ three.js r128, eigen OrbitControls, jsPDF
js/core/ gedeelde helpers: geometrie, UI-kit, PDF-bladen, labels,
camerageheugen, weergavefilter, skybox, licentie, logo
js/wall/ WallModel (logica) + wand-PDF + wand-editor
js/floor/ FloorModel (logica) + vloer-PDF + vloer-editor
js/roof/ RoofModel: dak (plat/lessenaar/zadel) + dakrand (boeidelen/daktrim)
js/lighting/ LightingModel: gevellampen, boeideel-spots, binnenspots
js/sandwich/ SandwichModel: sandwichpanelen rondom
js/unit/ UnitModel: 1 vloer + 4 wanden, naden, wandstukken
js/house/ HouseModel (woning) + woning-PDF + woning-editor
js/app.js menubalk, versienummer, actieve editor
json/defaults/ referentie-JSON's (niet runtime ingeladen)
assets/ logo, texturen, skybox
```
## Uitgangspunten
- **Eén bron per logica.** Rekenwerk en 3D-opbouw zitten alleen in de
`*Model`/`*Pdf`-modules; editors en woning hergebruiken die.
- **Geen ES-modules, geen CDN.** Gewone `<script>`-tags in vaste volgorde
(zie `index.html`), alle libraries lokaal.
- **Assen/zijden.** Bovenaanzicht boven = noord: voor = noord, achter = zuid,
links = west, rechts = oost (interne sleutels blijven voor/achter/…).
- **Hoogtes** gelden vanaf bovenkant vloer (loopvlak).
## Functionaliteit
- **Wand:** openingen (raam/deur/voordeur) met ankers, ook boven elkaar
(raam boven een deur; stijlen ertussen van dorpel tot dorpel), regelwerk
38x235 met dubbele hoekstijlen en een dubbele stijl naast deuren, zaagplan
op handelslengtes, spaanplaat binnen, vochtdoek (met kruislat en trasraam)
of cementplaat buiten.
- **Wandhoogte:** schuine bovenrand of middenpunt (nok) met goothoogtes. In
een unit bepaalt de laatst gewijzigde wand de dakvorm: de tegenoverliggende
wand spiegelt mee, de haakse wanden worden vlak op de hoekhoogtes.
- **Vloer:** balken, cirkelvormige doorvoeren, OSB, optioneel chassis;
in de woning een vloerafwerking (textuur, bijv. visgraat).
- **Woning:** units koppelen aan een zijde (uitlijning + verschuiving); op
naden vervallen de buitenwanden en komt een naadwand met deur: midden op
de naad in twee delen (één per unit), of als één binnenwand geheel in unit
A of B. De hoogte volgt per deel de daklijn van zijn unit. Staat een unit
met een hogere daklijn tegen een lager dak, dan krijgt zijn buitenwand aan
de naadzijde een opbouw vanaf de bovenkant van het lage dak (ramen daar
teken je op die buitenwand) en stopt de naadwand op die hoogte. Loopt het
lage dak langs de naad schuin, dan loopt de naadwand door en krijgt het
uitstekende stuk buitenafwerking (vochtdoek + latwerk).
Binnenwanden teken je in de plattegrond.
- **Dak:** per unit opgebouwd als gespiegelde vloer + dakleer, in de vorm
die de wanden aangeven: plat, lessenaar (schuine kopgevels) of zadel
(nok). Elk dakvlak is een eigen dek met de balken als sporen en een eigen
PDF-blad; doorvoeren gaan naar het vlak waarin ze vallen. Bedekking per
unit: dakleer, of bij een hellend dak riet (180 mm, 3,8 kg/m²); de
dakrand schuift dan mee omhoog. De dakrand
(boeidelen/daktrim, spots) loopt als één rand door en volgt de helling.
Is een dak langs de naad minstens een boeideelhoogte hoger dan het
aangrenzende, dan krijgt het een eigen rand rondom (boven het lage dak
zonder spots). De rand van het lage dak loopt dan door tot de gevel van
het hoge, of langs een zijgevel tot de volle overstek (onder de hoge
rand). Boeideel en daktrim steken 80 mm boven het dakleer uit.
- **Gevel:** gevelbekleding per woning, met override per wand: rabat
(vochtdoek + kruislat) of steen (181 texturen). Steen is overal een
steenstrip op een wit isolatieblok, samen 110 mm (`WallModel.STONE`).
Het trasraam (cementplaat of een eigen steen) komt onder beide, dus
twee stenen kan. Latwerk, doek en metselwerk lopen per gevel door over
unit-naden. Sandwichpanelen rondom, 600 mm de grond in.
- **Verlichting:** boeideel-spots of gevellampen (per gevel verdeeld,
override per wand) en binnenspots in een raster per unit.
- **3D:** weergavefilters (o.a. Vloerplan: wanden afgesneden op 500 mm,
snede wit afgedekt), binnenzijde van de wanden in een verfkleur (globaal),
omgeving Ontwerp/Dag/Nacht, Render met lampen als echte lichtbronnen.
- **Uitvoer:** JSON opslaan/openen en een samenhangende PDF (aanzichten
noord/oost/zuid/west als vlakke render met legenda afwerking, plattegrond,
vloeren, wandstukken, binnenwanden, totalen).
## Bekende beperkingen
- Tijdelijk (verwijderen voor productie): zaagmachine-overzicht (zaagmeters bij
2400 m/u, zaagsneden, hoeken) in de app en op het totalenblad (`SAW_M_PER_H`).
- Tijdelijk: een nieuwe woning is het testontwerp (L-vorm, lessenaar met
riet); uit te zetten met `TEST_DEFAULT` in `js/house/house-model.js`.
- Units kunnen niet gedraaid worden.
- Getekende binnenwanden volgen de dakvorm (nog) niet.
- De dak-editor toont het dek in de plattegrond (niet per schuin dakvlak).
- Geen schaduw per lamp in de render (browserlimiet).
- Eigen OrbitControls: roteren/zoomen/pannen, geen damping.
## Versie
`APP_VERSION` in `js/app.js`: laatste cijfer per iteratie, middelste per
mijlpaal (met git-tag), eerste bij live-gang. De changelog staat in git.