110 lines
5.7 KiB
Markdown
110 lines
5.7 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 (plattegrond,
|
|
vloeren, wandstukken, binnenwanden, totalen).
|
|
|
|
## Bekende beperkingen
|
|
|
|
- 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.
|