Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
adb3c74f85 | ||
|
|
86fcd57b96 | ||
|
|
b137a458d4 | ||
|
|
bd084e4a96 | ||
|
|
ceda0b554d | ||
|
|
b5510d56c7 | ||
|
|
e1a688728c | ||
|
|
8cdfa21f46 | ||
|
|
23bfe153a2 | ||
|
|
12c2579471 | ||
|
|
7d91416004 | ||
|
|
94a5215f82 |
@@ -18,20 +18,33 @@ build-stap. Direct openen via `file://` werkt niet (texturen/lucht).
|
||||
## Structuur
|
||||
|
||||
```
|
||||
index.html app-shell: menubalk, splashscreen
|
||||
index.html app-shell: ribbon, 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/core/ gedeelde helpers: geometrie, bouwfasen, ribbon, UI-kit, PDF-bladen,
|
||||
DXF-schrijver (dxf-writer.js), IFC-schrijver (ifc-writer.js), OBJ-schrijver
|
||||
(obj-writer.js), ZIP (zip-writer.js), 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)
|
||||
PostModel: palen onder een overkapping/veranda (dak per unit te verlengen)
|
||||
js/house/chimney-model.js ChimneyModel: schoorsteen tegen een buitenwand (hol, sparing in de wand zoals een raam,
|
||||
ook over een naad, zonder hout erin; sparing in het dak met raveelwerk (stijlen, balken, kreupele
|
||||
balken), de beplating eindigt op het kader; onderbreekt de dakrand; een nokbalk stopt ervoor;
|
||||
buiten steenstrip/stuc, binnen als de wanden of eigen; in de plattegrond
|
||||
te verslepen langs de buitengevel)
|
||||
js/lighting/ LightingModel: gevellampen, boeideel-spots, binnenspots
|
||||
js/elektra/ ElektraModel + ElektraPdf: meterkast, schakelaars (letters), wcd, groepen, leidingen
|
||||
js/sandwich/ SandwichModel: sandwichpanelen rondom
|
||||
js/room/ RoomModel: ruimtes (verfemmer), functie, netto m², afwerking, vals plafond
|
||||
js/interior/ FixtureModel: inrichting (sanitair, keuken, kasten, meubels, boiler)
|
||||
js/unit/ UnitModel: 1 vloer + 4 wanden, naden, wandstukken
|
||||
js/house/ HouseModel (woning) + woning-PDF + woning-editor
|
||||
js/house/ HouseModel (woning) + woning-PDF + CAD-export (house-dxf.js) + BIM-export (house-ifc.js) + woning-editor
|
||||
js/cost/ CostModel (kostenberekening), posten + noodwaarden, CostCsv (CSV's), venster Kosten & tijden
|
||||
js/app.js menubalk, versienummer, actieve editor
|
||||
json/defaults/ referentie-JSON's (niet runtime ingeladen)
|
||||
kosten/ intern.csv (eigen waarden) + leveranciers.csv (live prijzen), bij het starten ingeladen
|
||||
assets/ logo, texturen, skybox
|
||||
```
|
||||
|
||||
@@ -44,6 +57,15 @@ assets/ logo, texturen, skybox
|
||||
- **Assen/zijden.** Bovenaanzicht boven = noord: voor = noord, achter = zuid,
|
||||
links = west, rechts = oost (interne sleutels blijven voor/achter/…).
|
||||
- **Hoogtes** gelden vanaf bovenkant vloer (loopvlak).
|
||||
- **Bouwfasen** (`BuildStages`): regelwerk → elektra (buizen, dozen, meterkast) → beplating → vochtdoek →
|
||||
latwerk → gevel & dak → afgewerkt, de volgorde in de hal. De 3D toont de
|
||||
gekozen fase; lagen die daarin aan beide zijden zijn ingesloten worden niet
|
||||
gebouwd (stijlen tussen spaanplaat en doek, latten en doek achter de rabat,
|
||||
sporen tussen plafond en dakbedekking). Specificaties en totalen rekenen
|
||||
altijd met alle lagen.
|
||||
- **Invoer volgt de logica:** de dakvorm is een eigenschap van de unit
|
||||
(plat/lessenaar/zadel, richting, goot- en nokhoogte of helling); de
|
||||
wanden volgen.
|
||||
|
||||
## Functionaliteit
|
||||
|
||||
@@ -52,36 +74,315 @@ assets/ logo, texturen, skybox
|
||||
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.
|
||||
- **Elektra** (`elektra/`): meterkast (3×25 A) bij de voordeur, schakelaars
|
||||
met letter (A binnen, B buiten, per unit een eigen; dezelfde letter bij de
|
||||
lampen erop), dubbele wcd's per unit, apparaten met eigen groep (kookgroep
|
||||
perilex, wasmachine, droger, warmtepomp, optioneel oven/vaatwasser).
|
||||
Groepenverklaring met fasen en aardlekschakelaars, leidingen via stijlen
|
||||
en plafond naar de meterkast (strekkende meters per type, draad, buis,
|
||||
steekverbinders op module-naden), materiaallijst en eigen PDF-blad.
|
||||
Buizen minstens 50 mm uit elkaar (gebundeld alleen het laatste stuk naar
|
||||
de meterkast). Vloer-wcd's met leiding door de vloer. Elektra ook op de
|
||||
PDF-bladen per wand, vloer en dakvlak (plafond). Alles verplaatsbaar door
|
||||
te slepen in de plattegrond. Kosten (groep Elektra): buis + draad per
|
||||
meter, boorgaten (geteld op stijlen, regels en balken), dozen,
|
||||
afmonteren, groepenkast en keuring.
|
||||
- **Kozijnen** (`wall/kozijn-model.js`): per opening een vulling (geen, raam
|
||||
met vast glas en optioneel ventilatierooster, of deur met dorpel en
|
||||
optionele glasstrook of als glasdeur; zij- en bovenlicht vullen de rest van een grote
|
||||
opening), kleur buiten en binnen (wit, grijs, antraciet, zwart). Volgt de
|
||||
maat van de opening, ook een schuine bovenzijde. Deur: kant van het blad,
|
||||
scharnierzijde en draairichting (naar binnen/buiten); openslaande deuren
|
||||
met zijlichten = twee deuren naast elkaar. Koppelen: een opening die tegen
|
||||
zijn buur aan staat (zelfde onderkant en hoogte, samen max. 2850 mm) vormt
|
||||
daarmee één sparing zonder stijlen, dagkanten, latten of kozijnstijlen
|
||||
ertussen; twee draaideuren worden stolp (bladen tegen elkaar), anders één
|
||||
gedeelde tussenstijl. Schuifdeur: 1 of 2 bladen
|
||||
(uit elkaar), in de wand of op de wand aan een rail (binnen- of
|
||||
buitenzijde), glazen of dicht blad. In de plattegrond (app en PDF) een
|
||||
draaicirkel per deur en de schuifrichting per schuifdeur; in de loopmodus
|
||||
gaan deuren open (dubbele schuifdeur samen). Dagkanten (afgewerkte
|
||||
fase): binnen een geschilderde omranding, dagkantplaten tot het kozijn en
|
||||
een vensterbank onder ramen; buiten een omranding in de kozijnkleur en
|
||||
een waterslag onder ramen (`WallModel.build3D`).
|
||||
- **Plafond:** in de afgewerkte fase is de onderkant van het dak
|
||||
geschilderd in de plafondkleur (Binnen › Wanden › Plafond), zolang
|
||||
"Geschilderd" aan staat; anders kale OSB.
|
||||
- **Dakvorm/wandhoogte:** per unit een dakvorm (Unit › Dakvorm: plat,
|
||||
lessenaar, zadel of wolfsdak, met schuiven en hellingshoek).
|
||||
Daaruit volgen de wanden: de kopgevels krijgen de daklijn (bij een
|
||||
wolfsdak afgeknot op het wolfseind, met
|
||||
daarboven driehoekige wolfseinden met de dakhelling tot de nok, met een
|
||||
rechte nok ertussen), de haakse wanden staan vlak op de goothoogte. Het
|
||||
bovenste deel van een wolfsdak is gewoon houtwerk: sporen, hoekkepers,
|
||||
nokbalk en kopbalken (ook in zaaglijst, specificaties en kosten).
|
||||
Een dubbel lessenaardak (twee units, elk hoog aan hun gezamenlijke naad,
|
||||
op de mm gelijke goot, nok en hoogte op de naad: samen een zadeldak)
|
||||
krijgt net als een zadeldak een stalen nokbalk onder de naad; één
|
||||
lessenaar of twee die zo niet aansluiten niet. Staat er een schoorsteen
|
||||
op de nok, dan stopt elke nokbalk vóór de schoorsteen.
|
||||
Goot en nok gelden over de volle vloermaat (goot boven de buitenkant van
|
||||
de gevel); staat de kopgevel tussen de haakse wanden, dan loopt zijn
|
||||
daklijn daar precies op aan. Het wolfseind schaalt mee met goot en
|
||||
nok (verhouding). De PDF heeft voor een wolfsdak een eigen blad met het
|
||||
bovenste deel (bovenaanzicht houtwerk + stuklijst).
|
||||
Grenzen (`UnitModel.LIMITS`): nok max 5 m, goot / plat dak max 3 m (vanaf
|
||||
bovenkant vloer tot onderkant dak), unit max 4,7 x 14 m. Platte daken van verschillende hoogte krijgen elk hun eigen
|
||||
boeideel (versprongen, het lage loopt door tot onder het hoge). Wijzig je een
|
||||
wandhoogte in de wand-editor, dan geldt dezelfde regel vanuit die wand.
|
||||
De daklijn van een wand hoort bij de wand zonder naden: loopt een wand
|
||||
door een naad langer door (bijv. de kopgevel naast een gekoppelde unit),
|
||||
dan blijven nok en knikken op hun plaats (`UnitModel.topLineOn`).
|
||||
- **Dakaansluiting (L/T):** staat een unit met nokdak (zadel of
|
||||
wolfsdak) met zijn nok haaks op de langszijde van een buur met nokdak
|
||||
(vleugel tegen hoofdvolume), dan loopt de vleugel het hoofddak in tot
|
||||
zijn nok, met kilkepers in de binnenhoeken (bij gelijke goot, nok en
|
||||
overspanning onder 45°); het
|
||||
wolfseind van de vleugel aan de naad vervalt. Ligt de vleugel gelijk met
|
||||
een kop van het hoofdvolume, dan wordt die kop een schild in de vlakken
|
||||
van de vleugel (hoekkeper, de goot loopt door; de kopgevel staat dan op
|
||||
goothoogte, een wolfseind daar vervalt). Een vleugel die in een wolfseind
|
||||
van het hoofdvolume zou steken sluit niet aan. Elke unit houdt zijn eigen
|
||||
dakdeel (sporen, kreupele sporen, kepers, knik- en nokbalken; stalen
|
||||
nokbalk alleen over de eigen nok) met een eigen PDF-blad
|
||||
(`HouseModel.roofJoins`, `RoofModel.computeJoinedRoof`). Niet bij dak
|
||||
over de hele woning; dakramen in zo'n dakdeel doen nog niet mee.
|
||||
- **Overkapping:** bij een dak over de hele woning met `cover` loopt het
|
||||
dak door tot de omhullende rechthoek waar geen unit staat (bijv. een
|
||||
terras naast een kortere module), met een afgewerkte onderplaat in de
|
||||
kleur van het boeideel (`HouseModel.coverExtensions`).
|
||||
- **Dak over de hele woning:** tabblad Dak › "Over hele woning": één
|
||||
dakvorm (zelfde invoer als per unit) over de omhullende rechthoek van alle
|
||||
units; een wolfsdak alleen bij een rechthoek (bij een L-/T-vorm zouden
|
||||
de wolfseinden kilkepers vragen, dan wordt het een zadeldak), bijv. een
|
||||
grote wolfskap over twee units naast elkaar. Elke unit
|
||||
houdt zijn eigen dakdeel (dekken, bovenste deel van het wolfsdak geknipt
|
||||
op de unit, PDF-bladen, kosten); de wanden van alle units volgen het
|
||||
woningdak. De daken per unit blijven bewaard (`roof.unitWalls`) en komen
|
||||
terug als je het weer uitzet.
|
||||
- **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; steekt een deel
|
||||
boven het dak van de andere unit uit, dan krijgt dat stuk buitenafwerking
|
||||
(vochtdoek + latwerk) die met de gevel meeloopt.
|
||||
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. De dakrand
|
||||
PDF-blad; doorvoeren gaan naar het vlak waarin ze vallen. Opbouw:
|
||||
plafondplaat (OSB) binnen, sporen, dakbeschot (OSB 18 mm) bovenop en
|
||||
daarop de bedekking per unit: dakleer, of bij een hellend dak riet
|
||||
(180 mm, 3,8 kg/m²) of felsplaten (staande naad, zink/antraciet/zwart);
|
||||
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) en loopt de rand van het lage dak door tot de gevel.
|
||||
- **Gevel:** latwerk en vochtdoek lopen per gevel door over unit-naden;
|
||||
sandwichpanelen rondom, 600 mm de grond in.
|
||||
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 en per
|
||||
wandstuk: rabat (vochtdoek + kruislat + rabat 12 mm, kleur per woning,
|
||||
getekend als plankentextuur die over naden doorloopt), steen (181
|
||||
texturen) of stucwerk (pleisterlaag 15 mm op cement-gebonden plaat, kleur
|
||||
per woning, `WallModel.STUC`). Een zijde kan gesplitst worden (wand ›
|
||||
Wandstukken › Splitsen op, gemeten vanaf de linker vloerhoek van buitenaf):
|
||||
elk stuk wordt een eigen wand-element en kan een eigen gevel krijgen
|
||||
(bijv. stuc links, hout rechts). 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.
|
||||
- **Ruimtes** (`room/room-model.js`): elk door wanden afgesloten gebied is
|
||||
een ruimte, bepaald als een verfemmer: alles wat bereikbaar is zonder door
|
||||
een wand te gaan (deuren en ramen tellen als wand). Exact op het raster van
|
||||
de wandvlakken, dus de netto vloer tot op de mm; kiertjes tot 30 mm tussen
|
||||
wanden worden dichtgezet. Gereedschap *Ruimte vullen* (Start/Binnen): kies
|
||||
een functie (woonkamer, keuken, slaapkamer, badkamer, toilet, hal, ...) en
|
||||
klik in de plattegrond; of selecteer een gebied en kies daar de functie
|
||||
(nog eens klikken = de unit eronder). Per ruimte: naam, vloerafwerking
|
||||
(o.a. tegels), FIBO-wandpanelen (decor, tot een hoogte of tot het plafond),
|
||||
eigen verfkleur en een vals plafond op een vaste hoogte (alleen waar het
|
||||
dak hoger ligt; wandafwerking en binnenspots volgen). Laag in de
|
||||
plattegrond (Beeld › Tonen: Ruimtes), label met netto m², in de structuur,
|
||||
het rapport, de kosten (vals plafond, FIBO) en op de PDF-plattegrond met
|
||||
een ruimtestaat. Het zaadpunt hoort bij een unit en schuift mee.
|
||||
- **Inrichting** (`interior/fixture-model.js`): zwevend toilet (wandcloset
|
||||
aan een voorzetwand), fontein, badmeubel met spiegel, inloopdouche
|
||||
(douchegoot, glaswand, regendouche), keukenblok (spoelbak, hoge kast met
|
||||
koelkast en oven, vaatwasser, bovenkasten), kookeiland met inductieplaat,
|
||||
kledingkast, bed, eettafel met stoelen, bank met chaise longue, fauteuil,
|
||||
salontafel, tv-meubel, boiler en wasmachine. Binnen › Inrichting: kies
|
||||
een stuk en klik in de plattegrond; slepen, bij een wand snapt de rug op
|
||||
het wandvlak (Alt = vrij), D = draaien, Del = verwijderen. Per stuk maten
|
||||
en opties (front, plek spoelbak, glaswand links/rechts, ...). In 2D, 3D
|
||||
(afgewerkte fase), de PDF-plattegrond, de structuur en de kosten (groep
|
||||
Inrichting; los meubilair telt niet mee). Het stuk hoort bij een unit en
|
||||
schuift mee.
|
||||
- **Verlichting:** boeideel-spots of gevellampen (per gevel verdeeld,
|
||||
override per wand) en binnenspots in een raster per unit.
|
||||
- **3D:** weergavefilters, omgeving Ontwerp/Dag/Nacht, Render met lampen als
|
||||
echte lichtbronnen.
|
||||
- **Uitvoer:** JSON opslaan/openen en een samenhangende PDF (plattegrond,
|
||||
- **Ribbon** (`core/ribbon.js`, vervangt de menubalk): Bestand · Start ·
|
||||
Gevel · Dak · Binnen · Constructie · Verlichting · Rapport · Beeld · Extra,
|
||||
plus een gekleurd tabblad voor de selectie (unit, wandstuk, binnenwand of
|
||||
naadwand) dat vanzelf opent. Velden staan in groepen naast elkaar, met
|
||||
schuiven voor maten met een logisch bereik. Dubbelklik op een tabblad
|
||||
klapt de ribbon in. Plattegrond en 3D gebruiken de volle breedte; tabblad
|
||||
Rapport toont het rapport (transport per unit, gewicht, afmetingen,
|
||||
kosten, hout, plaatwerk, met staafdiagrammen) in plaats van de plattegrond.
|
||||
- **3D:** schuif Bouwfase linksonder; Beeld › Tonen: Dak/Lampen; Beeld ›
|
||||
Doorsnede (wanden afgesneden op een instelbare hoogte, schuif in de ribbon
|
||||
en onder de 3D, snede wit afgedekt), binnenzijde in een
|
||||
verfkleur (afgewerkte fase), omgeving Ontwerp/Dag/Nacht, Render met lampen
|
||||
als echte lichtbronnen.
|
||||
- **Transport:** per unit buitenmaat (incl. gevelafwerking), hoogte en
|
||||
gewicht (vloer/wanden/dak) met een indicatieve breedteklasse.
|
||||
- **Uitvoer:** JSON opslaan/openen en een samenhangende PDF (aanzichten
|
||||
noord/oost/zuid/west als vlakke render met legenda afwerking, plattegrond,
|
||||
vloeren, wandstukken, binnenwanden, totalen).
|
||||
- **CAD-export (DXF):** Bestand › Exporteren › CAD (DXF), ook in de ribbon
|
||||
Woning › Uitvoer; los van Opslaan/Ctrl+S. DXF R12 (AC1009), opent in elk
|
||||
CAD-pakket (AutoCAD, BricsCAD, DraftSight, LibreCAD, …); DWG maakt het
|
||||
CAD-pakket zelf met Opslaan als (echte DWG schrijven vergt een GPL- of
|
||||
commerciële bibliotheek). Modelruimte 1:1 in mm: plattegrond met noord
|
||||
boven en de zuidwesthoek van de units op 0,0, eronder de vier gevels in een
|
||||
2×2-raster (maaiveld als basis). Plattegrond: wanden per stuk als gesloten
|
||||
polylijn, onderbroken bij sparingen die onder het snijvlak (1500 mm) beginnen
|
||||
(hogere gestreept), stijlzone en gevelbekleding als eigen lagen, kozijnen
|
||||
(raam: kader + glaslijn; deur: stijlen, blad en draaicirkel als boog;
|
||||
schuifdeur: bladen, pijlen, rail), ruimtegrenzen als gesloten polylijn met
|
||||
naam/m²/plafond, inrichting, dakrand, palen, schoorsteen, verlichting,
|
||||
elektra, naden en elementcodes. Gevels: dezelfde vlakken als de
|
||||
PDF-aanzichten (`HousePdf.viewProjections`) als lijntekening met verborgen
|
||||
lijnen weg, kozijnen met kader, blad, zij-/bovenlicht en glas
|
||||
(`KozijnModel.viewLines`). Maatvoering als echte DIMENSION (maatstijl
|
||||
TECTUM): ketting per buitenwandstuk langs de sparingen, totaal per stuk en
|
||||
van de woning, hoogtes maaiveld/peil/top per gevel. Lagen `PL-*`
|
||||
(plattegrond), `AZ-*` (aanzichten), `MAATVOERING`, `TEKST`; tekst,
|
||||
maatvoering en lijntypes afgestemd op 1:50 (`$LTSCALE`/`DIMSCALE` 50).
|
||||
- **BIM-export (IFC):** Bestand › Exporteren › BIM (IFC), ook in Woning ›
|
||||
Uitvoer. IFC4 met alleen de bouwconstructie: hout (stijlen/regels als
|
||||
IfcMember, vloerbalken als IfcBeam, dakbalken als IfcMember), stalen
|
||||
nokbalk, palen, platen (spaanplaat, OSB, cementplaat als IfcPlate) en
|
||||
elektra (buis per leiding, inbouw-/lasdozen, meterkast); geen
|
||||
gevelafwerking, latwerk, isolatie, kozijnen, dakbedekking of inrichting.
|
||||
Geometrie uit de 3D-opbouw zelf (`HouseIfc`: fase *elektra* voor alle balken
|
||||
en leidingen, fase *beplating* voor de platen; herkend aan het materiaal),
|
||||
als driehoeksnet. Opbouw: unit › element (A-W1, A-V1, A-D) › onderdelen;
|
||||
binnenwanden en elektra los in de bouwlaag. Per onderdeel `Pset_Tectum`
|
||||
(element, onderdeel, afmeting, lengte, materiaal). Kleur per soort (op het
|
||||
vlak en het materiaal): stijl lichthout, regel oranje, vloerbalk bruin,
|
||||
dakbalk roodbruin, paal donkerbruin, stalen nokbalk staalblauw, spaanplaat
|
||||
groen, OSB geel, cementplaat grijs; elektra in de app-kleuren
|
||||
(`HouseIfc` COLORS). X = oost, Y = noord,
|
||||
Z = 0 op peil; zuidwesthoek van de units = 0,0 (zelfde als de DXF).
|
||||
- **Render-export (OBJ):** Bestand › Exporteren › Render (OBJ), ook in Woning ›
|
||||
Uitvoer. De volledige afgewerkte woning (laatste bouwfase, dak, dakrand,
|
||||
lampen, ruimtes, inrichting; los van de gekozen fase, doorsnede en
|
||||
weergave-opties; zonder logobord, grond en lucht) als ZIP met `.obj`, `.mtl`
|
||||
en `textures/*.png` (rabat, steen, riet, tegels). Meters, Y omhoog (de
|
||||
standaard OBJ-import van Blender zet dat goed: noord = +Y), oorsprong op
|
||||
maaiveld onder het midden. Kleuren omgerekend van sRGB naar lineair (de app
|
||||
heeft geen kleurbeheer, Blender wel), PBR via `Pr`/`Pm`/`d`/`Ke` (ruwheid,
|
||||
metaal, doorzichtigheid glas, gloed lampen); textuurherhaling zit in de
|
||||
UV's (`ObjWriter`).
|
||||
|
||||
## Kosten en prijzen (CSV)
|
||||
|
||||
Alle waarden van het kostenmodel staan in twee CSV-bestanden in `kosten/`, die
|
||||
de app bij het starten ophaalt. Elke waarde staat op één plek; de CSV's zijn
|
||||
leidend en de app bewaart niets in de browser.
|
||||
|
||||
- `kosten/intern.csv`: eigen waarden: tijden, uurloon, bezetting, kosten per
|
||||
uur, opslagen, marge (alles behalve prijzen).
|
||||
- `kosten/leveranciers.csv`: alle inkoopprijzen (bijv. uit API-scripts van
|
||||
leveranciers), ook constructiehout per balkmaat.
|
||||
- `js/cost/cost-defaults.js`: welke posten er zijn (labels, eenheden, keuzes)
|
||||
en noodwaarden voor wat een CSV mist.
|
||||
|
||||
```
|
||||
# intern.csv
|
||||
code;omschrijving;eenheid;waarde
|
||||
arbeid.uurloon;Uurloon productie (all-in);€/u;45
|
||||
zagen.methode;Zaagmethode;;robot
|
||||
|
||||
# leveranciers.csv
|
||||
code;omschrijving;eenheid;prijs;leverancier;artikelnummer;bijgewerkt
|
||||
elektra.wcdEnkel;Wandcontactdoos enkel met randaarde;€/st.;6,00;Groothandel X;123456;2026-10-09
|
||||
hout.balk.38x235;Constructiehout vuren C24 38×235;€/m;4,91;Houthandel Y;;2026-10-09
|
||||
```
|
||||
|
||||
- Verplicht: `code` en `waarde` (of `prijs`), excl. btw; `6,00`, `6.00`,
|
||||
`1.234,50` en `€ 6` mogen; bij een keuze de sleutel of de tekst.
|
||||
Scheidingsteken `;`, `,` of tab; regels met `#` worden overgeslagen.
|
||||
- `code` = `<groep>.<sleutel>` uit `cost-defaults.js`, of `hout.balk.<b>x<h>`
|
||||
voor constructiehout per balkmaat in €/m (zonder balkmaat: m³-prijs × volume).
|
||||
- `omschrijving` is de naam van de post in de app (leeg = die uit `cost-defaults.js`).
|
||||
- `eenheid` is optioneel; ingevuld moet die gelijk zijn aan die van de post,
|
||||
anders wordt de regel geweigerd.
|
||||
- Een prijs in intern.csv of een tijd in leveranciers.csv wordt geweigerd
|
||||
("hoort in …"). Meerdere regels met dezelfde code in leveranciers.csv
|
||||
(leveranciers): de laagste prijs telt.
|
||||
- Onbekende codes (bijv. onderdelen die de app nog niet rekent) en fouten staan
|
||||
bovenaan in Kosten & tijden.
|
||||
- Kosten & tijden: **Toepassen** geldt tot herladen (om te proberen);
|
||||
**intern.csv downloaden** om het bestand in `kosten/` te vervangen.
|
||||
Prijsvelden staan vast. Bij Leveranciers: **Sjabloon** (alle prijscodes),
|
||||
**Tijdelijk laden** (tot herladen of **Terug naar server**).
|
||||
|
||||
## Bekende beperkingen
|
||||
|
||||
- DXF: geen arceringen en geen lijndiktes (R12); kleuren per laag (ACI), dus
|
||||
pendiktes via de plotstijl. Geen doorsnede en geen dakaanzicht. Eenheid
|
||||
staat niet in het bestand: in CAD op millimeters zetten (UNITS) als het
|
||||
pakket erom vraagt.
|
||||
- OBJ: geen lichtbronnen (lampen alleen als gloeiend materiaal), geen
|
||||
reliëf-/normaalkaarten; glas als doorzichtig materiaal, in Blender eventueel
|
||||
op Glass BSDF zetten.
|
||||
- IFC: onderdelen zijn driehoeksnetten (niet parametrisch); geen
|
||||
verbindingsmiddelen, isolatie of bekabeling (alleen buizen).
|
||||
|
||||
- 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 voorbeeldontwerp "Vlinderwoning"
|
||||
(92 m², drie units, vlinderdak met riet + platte tuinkamer, ook als
|
||||
`json/premade/vlinderwoning.json`); uit te zetten met `TEST_DEFAULT` in
|
||||
`js/house/house-model.js`. Bij het starten opent model **Amstel**
|
||||
(`HouseModel.createAmstel`, naar `examples/ontwerp_amstel.pdf`): 11,24 ×
|
||||
7,2 m, twee modules onder één plat dak dat over het terras doorloopt,
|
||||
stucwerk wit met verticaal hout aan de slaapkamerkant, binnenwanden,
|
||||
dubbele schuifdeur tussen woonkamer en hal, en complete inrichting.
|
||||
Langer maken: beide units breder (alles is vanaf de westgevel gemaat).
|
||||
Model **Wetering** (`HouseModel.createWetering`, naar
|
||||
`examples/ontwerp_wetering.pdf`): 10,5 × 4,8 m, twee units van 2,6 en
|
||||
2,2 m zonder naadwand (open woonkamer over de volle diepte), verticaal
|
||||
rabat grijs, plat dak met zwart boeideel, hoekkeuken met kookplaat,
|
||||
badkamer, slaapkamer met kledingkast. Model **IJssel**
|
||||
(`HouseModel.createIJssel`, naar `examples/ontwerp_ijssel.pdf`): L-vorm
|
||||
14 × 4,6 m met een vleugel van 4,6 × 3 m, twee units met zadeldak en
|
||||
riet die met een kil en een hoekkeper op elkaar aansluiten, stucwerk wit,
|
||||
openslaande deuren in de westgevel. Model **Waal**
|
||||
(`HouseModel.createWaal`, naar `examples/ontwerp_waal.pdf`): 12,85 × 7 m,
|
||||
flauw zadeldak dat aan de oostkop 1,5 m doorloopt als veranda op eiken
|
||||
palen (Overkapping per unit). Model **Maas** (`HouseModel.createMaas`,
|
||||
naar `examples/ontwerp_maas.pdf`): vierkant 9,2 × 9,2 m, flauw zadeldak
|
||||
over de hele woning; de overkapping maakt van de noordwesthoek een
|
||||
inpandige veranda (2,5 × 4,6 m) op eiken palen. Model **Rijn**
|
||||
(`HouseModel.createRijn`, naar `examples/ontwerp_rijn.pdf`): L-vorm
|
||||
13 × 10 m, hoofdvolume met flauw zadeldak (twee lessenaars die op de naad
|
||||
de nok vormen) en een vleugel met plat dak, steenstrips rondom met een
|
||||
schoorsteen (800 mm, hart op de naad) in de oostgevel, kookeiland, logeerkamer en
|
||||
apart toilet in de vleugel. De standaardmodellen staan in
|
||||
`HouseModel.MODELS`; Bestand › Snel nieuw en het venster Nieuw worden
|
||||
daaruit opgebouwd (nieuw model = één regel plus een `create`-functie die
|
||||
`modelKit` gebruikt). De L-woning (8 × 3,6 m + 4,5 × 3,6 m) blijft
|
||||
beschikbaar als "Woning L-vorm".
|
||||
- Netto m² per ruimte telt de hele vloer, ook onder een laag schuin dak
|
||||
(geen NEN 2580-correctie voor hoogte < 1,5 m).
|
||||
- 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).
|
||||
|
||||
@@ -3,3 +3,7 @@ Assets voor de 3D-weergave en de PDF:
|
||||
- skybox.webp equirectangulair panorama dag (4096x2048), "Lucht: Dag" (core/skybox.js)
|
||||
- skybox-night.webp equirectangulair panorama nacht (4096x2048), "Lucht: Nacht"
|
||||
- tiles.jpg tegeltextuur (1024x1024) voor de ronde vloer onder het object
|
||||
- textures/buitenmuur/ steen voor het trasraam: "<code> - Witte voeg.jpg" (2062x1125, 2 mm/px,
|
||||
naadloos), voorvertoning in thumb/32|64|128/*.png (WallModel.TRASRAAM_STONES)
|
||||
- textures/vloer/ vloerafwerking (FloorModel.FINISHES), bijv. visgraat_001.jpg (1500x1500, tegel 3 m); thumb/32|64|128/*.png
|
||||
- textures/dak/ dakbedekking: riet_<nr>.jpg (1024x1024, tegel 1 m); nummers in RoofModel RIET.nrs; thumb/32|64|128/*.png
|
||||
|
||||
|
After Width: | Height: | Size: 523 KiB |
|
After Width: | Height: | Size: 715 KiB |
|
After Width: | Height: | Size: 698 KiB |
|
After Width: | Height: | Size: 753 KiB |
|
After Width: | Height: | Size: 598 KiB |
|
After Width: | Height: | Size: 909 KiB |
|
After Width: | Height: | Size: 711 KiB |
|
After Width: | Height: | Size: 786 KiB |
|
After Width: | Height: | Size: 936 KiB |
|
After Width: | Height: | Size: 656 KiB |
|
After Width: | Height: | Size: 723 KiB |
|
After Width: | Height: | Size: 743 KiB |
|
After Width: | Height: | Size: 813 KiB |
|
After Width: | Height: | Size: 749 KiB |
|
After Width: | Height: | Size: 837 KiB |
|
After Width: | Height: | Size: 981 KiB |
|
After Width: | Height: | Size: 709 KiB |
|
After Width: | Height: | Size: 708 KiB |
|
After Width: | Height: | Size: 798 KiB |
|
After Width: | Height: | Size: 831 KiB |
|
After Width: | Height: | Size: 636 KiB |
|
After Width: | Height: | Size: 548 KiB |
|
After Width: | Height: | Size: 762 KiB |
|
After Width: | Height: | Size: 452 KiB |
|
After Width: | Height: | Size: 887 KiB |
|
After Width: | Height: | Size: 759 KiB |
|
After Width: | Height: | Size: 470 KiB |
|
After Width: | Height: | Size: 645 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 904 KiB |
|
After Width: | Height: | Size: 462 KiB |
|
After Width: | Height: | Size: 813 KiB |
|
After Width: | Height: | Size: 925 KiB |
|
After Width: | Height: | Size: 860 KiB |
|
After Width: | Height: | Size: 865 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 924 KiB |
|
After Width: | Height: | Size: 582 KiB |
|
After Width: | Height: | Size: 835 KiB |
|
After Width: | Height: | Size: 905 KiB |
|
After Width: | Height: | Size: 981 KiB |
|
After Width: | Height: | Size: 787 KiB |
|
After Width: | Height: | Size: 556 KiB |
|
After Width: | Height: | Size: 576 KiB |
|
After Width: | Height: | Size: 505 KiB |
|
After Width: | Height: | Size: 494 KiB |
|
After Width: | Height: | Size: 523 KiB |
|
After Width: | Height: | Size: 538 KiB |
|
After Width: | Height: | Size: 598 KiB |
|
After Width: | Height: | Size: 537 KiB |
|
After Width: | Height: | Size: 772 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 957 KiB |
|
After Width: | Height: | Size: 736 KiB |
|
After Width: | Height: | Size: 459 KiB |
|
After Width: | Height: | Size: 528 KiB |
|
After Width: | Height: | Size: 534 KiB |
|
After Width: | Height: | Size: 846 KiB |
|
After Width: | Height: | Size: 853 KiB |
|
After Width: | Height: | Size: 536 KiB |
|
After Width: | Height: | Size: 562 KiB |
|
After Width: | Height: | Size: 642 KiB |
|
After Width: | Height: | Size: 637 KiB |
|
After Width: | Height: | Size: 941 KiB |
|
After Width: | Height: | Size: 767 KiB |
|
After Width: | Height: | Size: 801 KiB |
|
After Width: | Height: | Size: 924 KiB |
|
After Width: | Height: | Size: 616 KiB |
|
After Width: | Height: | Size: 591 KiB |
|
After Width: | Height: | Size: 647 KiB |
|
After Width: | Height: | Size: 761 KiB |
|
After Width: | Height: | Size: 666 KiB |
|
After Width: | Height: | Size: 630 KiB |
|
After Width: | Height: | Size: 633 KiB |
|
After Width: | Height: | Size: 644 KiB |
|
After Width: | Height: | Size: 570 KiB |
|
After Width: | Height: | Size: 601 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 896 KiB |
|
After Width: | Height: | Size: 746 KiB |
|
After Width: | Height: | Size: 871 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 830 KiB |
|
After Width: | Height: | Size: 883 KiB |
|
After Width: | Height: | Size: 914 KiB |
|
After Width: | Height: | Size: 958 KiB |
|
After Width: | Height: | Size: 809 KiB |
|
After Width: | Height: | Size: 976 KiB |
|
After Width: | Height: | Size: 905 KiB |
|
After Width: | Height: | Size: 979 KiB |
|
After Width: | Height: | Size: 907 KiB |
|
After Width: | Height: | Size: 990 KiB |
|
After Width: | Height: | Size: 935 KiB |
|
After Width: | Height: | Size: 920 KiB |
|
After Width: | Height: | Size: 771 KiB |
|
After Width: | Height: | Size: 960 KiB |
|
After Width: | Height: | Size: 884 KiB |
|
After Width: | Height: | Size: 767 KiB |