Plant view: toilets in the factory, link lands on doors, no separate trimmer
Deploy test site / deploy (push) Successful in 45s
Deploy test site / deploy (push) Successful in 45s
User feedback on the isometric view (October 2026): - "the production hall is missing toilets": two sets. At the staff entry: women 2 WC, men 1 WC and 1 urinal, an accessible WC, basins. At the east end of the back aisle in the finishing block: women 2 WC, men 1 WC and 1 urinal, basins (proposed, not yet in the parametric plans). site-candidates.md gets a Toilets bullet with the Thai minimum (Ministerial Regulation No. 39 B.E. 2537, table 2; separate toilets for men, women and disabled staff under the welfare regulation B.E. 2548). - "the door and the corridor is not aligned": the covered link now lands on doors at both ends, centred on it (factory entrance at the start of the visitor corridor, office lobby door on the north face, windows cleared); the corridor glass starts after the door; the stray staff door with no path is gone; the link deck ramps up to the factory floor. - "we also dont need a extra trimmer with the optical, this is included in the duplex and the classics": the finishing block keeps only the optical inspection station; site-candidates.md, the tour route and the process flow say the presses trim inline. Checks: renderer 720 checks and functional checks pass (max 2,485 SVG nodes); calculator regression 0 fails; level selector works in the page; no page errors or overflow at 390 / 1024 / 1440 px, dark and light.
This commit is contained in:
1 parent
8e4559ee36
commit
4beda7f27a
4 files changed
+83
-34
No files matched your search
+55
-25
@@ -390,7 +390,7 @@ html[data-theme=light] .iso-wrap {
|
||||
.iso-forklift { --b: #e3a400; } .iso-pump { --b: #3f78c0; } .iso-motor { --b: #59606b; } .iso-accu { --b: #c9473a; }
|
||||
.iso-comp { --b: #4f8d58; } .iso-oil { --b: #b88a2a; } .iso-belt { --b: #2b313b; } .iso-hx { --b: #8aa0b8; }
|
||||
.iso-lathe { --b: #3c4658; } .iso-stair { --b: #9aa0aa; } .iso-lift { --b: #737b88; } .iso-rail2 { --b: var(--iso-steel); }
|
||||
.iso-server { --b: #27303f; } .iso-shower { --b: #5f9fd6; } .iso-wc { --b: #8e9aa9; } .iso-sign { --b: var(--iso-signline); } .iso-fanbox { --b: #6b7585; }
|
||||
.iso-server { --b: #27303f; } .iso-shower { --b: #5f9fd6; } .iso-wc { --b: #8e9aa9; } .iso-sanit { --b: #eef2f5; } .iso-cubicle { --b: #a7b9c9; } .iso-sign { --b: var(--iso-signline); } .iso-fanbox { --b: #6b7585; }
|
||||
.iso-bushing { --b: #c9b8a4; } .iso-pipes { --b: #c9473a; } .iso-pipec { --b: #3f78c0; } .iso-pipec2 { --b: #6aa8ff; }
|
||||
.iso-svg .iso-headc { fill: var(--iso-head); }
|
||||
.iso-svg .iso-fence, .iso-svg .iso-fence.iso-t { fill-opacity: var(--iso-fenceo); --b: var(--iso-fence); }
|
||||
@@ -1245,6 +1245,8 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
var P2 = { x0: 54, y0: 31, x1: 96, y1: 57, eave: 7.0, high: 9.4 };
|
||||
var P2ROWS = [{ x: 55.5, y0: 34, y1: 42, len: 39 }, { x: 55.5, y0: 43, y1: 51, len: 39 }];
|
||||
var OFC = { x0: 14, y0: 42, x1: 46, y1: 57, z0: 0.3, z1: 8.3 };
|
||||
// covered link office lobby -> factory entrance; doors at both ends are centred on it
|
||||
var LINK = { x0: 15.5, x1: 18.5 };
|
||||
|
||||
function tryPlace(list, rows, f, partial) {
|
||||
var out = [], ri = 0, pos = 0, i, w, it, lost = 0;
|
||||
@@ -1533,11 +1535,12 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
|
||||
// ------------------------------------------------------------ factory
|
||||
// finishing and print block, 14 x 25 m on two levels at fx 92..106 (site-candidates.md, block floor plans):
|
||||
// ground floor trim + optical, QC lab, stair + goods lift along the corridor, packaging behind; upper floor at +3.8 m
|
||||
// ground floor optical inspection, QC lab, stair + goods lift along the corridor, packaging behind; upper floor at +3.8 m
|
||||
var BLK = { fx0: 92, fx1: 106, up: 3.8 };
|
||||
function zoneList(cfg, up) {
|
||||
var z = [
|
||||
[0, 0, 8, 10, "iso-z-staff", "staffentry"],
|
||||
[4.6, 3.6, 8, 5.8, "iso-z-wc", "wc-w"], [4.6, 5.8, 8, 7.9, "iso-z-wc", "wc-w"], [4.6, 7.9, 8, 10, "iso-z-wc", "wc-w"],
|
||||
[0, 10, 16, 25, "iso-z-shop", "workshop"],
|
||||
[8, 2.6, 16, 10, "iso-z-shop2", "workshop"],
|
||||
[16, 2.6, 23, 20.5, "iso-z-galv", "galvanics"],
|
||||
@@ -1552,7 +1555,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
[8, 0, up ? 92 : 106, 2.6, cfg.corridor ? "iso-z-corr" : "iso-z-floor", "corridor"]
|
||||
];
|
||||
if (!up) z.push([92, 2.6, 96, 7.9, "iso-z-trim", "trim"], [96, 2.6, 100, 7.9, "iso-z-qc", "qc"], [100, 2.6, 106, 7.9, "iso-z-core", "block-stair"],
|
||||
[92, 7.9, 106, 20.5, "iso-z-pack", "packaging"]);
|
||||
[92, 7.9, 106, 20.5, "iso-z-pack", "packaging"], [100, 20.5, 103, 24.7, "iso-z-wc", "wc-e"], [103, 20.5, 106, 24.7, "iso-z-wc", "wc-e"]);
|
||||
return z;
|
||||
}
|
||||
function factoryInfo(sc, cfg, al) {
|
||||
@@ -1569,29 +1572,31 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.inf("pvclab", "PVC lab, regrind and conveying", "Compound lot checks before release, granulator and vacuum conveying (quality-automation.md tiers)");
|
||||
sc.inf("colourstore", "Colour store, ~180 m2", "About 100 pallet positions on four levels for tens of colours (estimate); weighing, mixing and vacuum conveying");
|
||||
sc.inf("plantroom", "Central hydraulic and air plant room, ~62 m2", "Pump sets on one manifold with the accumulators, one compressed-air plant; ring mains with a valved tee at every press position (pressing-line.md)");
|
||||
sc.inf("aisle", "Crane and forklift aisle, 4.5 m", "Along the back wall from the machine door to the fire wall: heavy moves need a floor-level path");
|
||||
sc.inf("trim", "Trimming and 100 % optical inspection", "Edge trimmer and the optical station at the end of the record path (quality-automation.md)");
|
||||
sc.inf("aisle", "Crane and forklift aisle, 4.5 m", "Along the back wall from the machine door to the finishing block: heavy moves need a floor-level path");
|
||||
sc.inf("trim", "100 % optical inspection", "Optical station at the end of the record path (quality-automation.md). No separate trimmer: every Duplex cell and the Classic trim inline (pressing-line.md)");
|
||||
sc.inf("qc", "QC and listening", "Sampled audio comparison (about 1 in 50) and the listening point on the tour (quality-automation.md)");
|
||||
sc.inf("packaging", "Finishing and packaging", "Packing tables, shrink wrap and pallet wrapper, ~170 m2 on the ground floor of the finishing and print block (14 x 25 m on two levels, print room reserved upstairs)");
|
||||
sc.inf("block-stair", "Stair and goods lift", "Connect the two levels of the finishing and print block. The crane runway ends at the press hall, so loads here move by forklift and goods lift; heavy compound stays on the ground floor (site-candidates.md, crane-workshop-tours.md)");
|
||||
if (cfg.cassette) sc.inf("cassette", "Cassette duplication", "Bench line, ~40 to 80 m2 (project-timeline.md)");
|
||||
if (cfg.cdr) sc.inf("cdr", "CD-R duplication, short run", "Tower duplicator and printer bench, ~20 to 40 m2 (project-timeline.md)");
|
||||
sc.inf("printblock", "Finishing and print block, 14 x 25 m",
|
||||
"Two levels: trim and optical inspection, the QC lab and packaging (~170 m2) on the ground floor; print room (reserve), print stock and packaging materials on the upper floor at +3.8 m (site-candidates.md)");
|
||||
"Two levels: optical inspection, the QC lab and packaging (~170 m2) on the ground floor; print room (reserve), print stock and packaging materials on the upper floor at +3.8 m (site-candidates.md)");
|
||||
sc.inf("printroom", "Print room (kept in reserve)", "Upper floor at +3.8 m. In-house printing is not decided; jackets come from a print partner today (site-candidates.md, production-timeline.md)");
|
||||
sc.inf("printstock", "Print stock", "Paper and board, upper floor at +3.8 m (site-candidates.md)");
|
||||
sc.inf("packmat", "Packaging materials", "Sleeves, inner bags, mailers and cartons, upper floor at +3.8 m (site-candidates.md)");
|
||||
sc.inf("warehouse", "Warehouse behind the fire wall", "Three racking rows; fire wall EI 60/120; forklift territory, no crane");
|
||||
sc.inf("dispatch", "Dispatch, two dock doors", "Pallets staged for the trucks on the apron");
|
||||
sc.inf("workshop", "Workshop and machine bay, ~200 m2", "Service bay, benches, spares, 3D printers, a lathe and a small CNC mill; machine door 4.5 x 5.0 m with the ramp; the crane parks here (crane-workshop-tours.md)");
|
||||
sc.inf("staffentry", "Staff entry (PPE, WC)", "Staff change in the office building and enter here");
|
||||
sc.inf("staffentry", "Staff entry (PPE)", "Staff change in the office building, cross by the covered link and turn in here from the start of the visitor corridor (site-candidates.md)");
|
||||
sc.inf("wc-w", "Toilets at the staff entry", "Women: 2 WC and a basin; men: 1 WC, 1 urinal and a basin; an accessible WC. Thai minimum for a factory, per up to 15 workers of each sex (Ministerial Regulation No. 39, B.E. 2537, table 2); separate toilets for women, men and disabled staff (labour welfare regulation B.E. 2548). Showers are in the office changing rooms.");
|
||||
sc.inf("wc-e", "Toilets, finishing block", "Second set at the east end of the press hall, so nobody walks ~90 m back to the staff entry: women 2 WC and a basin, men 1 WC, 1 urinal and a basin. Proposed (October 2026), not yet in the parametric floor plans.");
|
||||
sc.inf("corridor", cfg.corridor ? "Visitor corridor, glazed, ~98 m" : "Visitor corridor: later",
|
||||
cfg.corridor ? "Along the car-park wall in process order: cutting, galvanics, stamper prep, material lab, press hall, trimming and inspection, QC and listening, finishing. No PPE, filtered air." :
|
||||
cfg.corridor ? "Along the car-park wall in process order: cutting, galvanics, stamper prep, material lab, press hall, optical inspection, QC and listening, finishing. No PPE, filtered air." :
|
||||
"The strip along the car-park wall stays free; the glazed corridor is built later.");
|
||||
sc.inf("crane", cfg.crane === "buy" ? "Overhead crane, 5 t" : "Crane-ready frame (crane rented)",
|
||||
cfg.crane === "buy" ? "EOT crane over the production compartment, runway to the end of the press hall, rail at ~5.6 m; parks over the workshop (crane-workshop-tours.md)" :
|
||||
"Runway brackets and rails in the frame; a crane is rented for installations");
|
||||
sc.inf("conveyor", "Records to finishing", "Schematic: pressed records travel from the presses to trimming and optical inspection");
|
||||
sc.inf("conveyor", "Records to finishing", "Schematic: trimmed records travel from the presses to optical inspection");
|
||||
sc.inf("pipebridge", "Pipe bridge", "Steam, condensate and cooling water from the yard to the service trench along the press rows");
|
||||
}
|
||||
function factoryRoof(sc, cfg, pv) {
|
||||
@@ -1604,12 +1609,13 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
[93, 96.5, 100, 103].forEach(function (u, k) { (k % 2 ? win : lit).push([u, u + 2.4, FFL + 4.4, FFL + 5.6]); });
|
||||
lit.push([5.8, 7.4, FFL + 1, FFL + 2.2], [123, 126, FFL + 1, FFL + 2.2]);
|
||||
s.open(S.S[0], S.S[1], win, "iso-win").open(S.S[0], S.S[1], lit, "iso-win iso-lit");
|
||||
if (cfg.corridor) s.open(S.S[0], S.S[1], [[8.3, 105.7, FFL + 0.4, FFL + 2.7]], "iso-glass", "corridor");
|
||||
if (cfg.corridor) s.open(S.S[0], S.S[1], [[10.3, 105.7, FFL + 0.4, FFL + 2.7]], "iso-glass", "corridor");
|
||||
else {
|
||||
var cw = []; for (u = 10; u < 104; u += 6) cw.push([u, u + 2, FFL + 1, FFL + 2.2]);
|
||||
var cw = []; for (u = 11; u < 104; u += 6) cw.push([u, u + 2, FFL + 1, FFL + 2.2]);
|
||||
s.open(S.S[0], S.S[1], cw, "iso-win");
|
||||
}
|
||||
s.open(S.S[0], S.S[1], [[3, 5, FFL, FFL + 2.5], [107, 108.2, FFL, FFL + 2.2]], "iso-door");
|
||||
// entrance door centred on the covered link (staff turn west to the staff entry, visitors east along the corridor)
|
||||
s.open(S.S[0], S.S[1], [[LINK.x0 + 0.7 - FX, LINK.x1 - 0.7 - FX, FFL, FFL + 2.5], [107, 108.2, FFL, FFL + 2.2]], "iso-door", "link");
|
||||
s.open(S.S[0], S.S[1], [[111.25, 114.75, FFL, FFL + 4.0], [117.25, 120.75, FFL, FFL + 4.0]], "iso-dock", "dispatch");
|
||||
s.open(S.E[0], S.E[1], [[3, 6, FFL + 1, FFL + 2.3], [8, 11, FFL + 1, FFL + 2.3]], "iso-win iso-lit")
|
||||
.open(S.E[0], S.E[1], [[14, 16, FFL, FFL + 2.5]], "iso-door")
|
||||
@@ -1648,7 +1654,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
// pipe bridges and the covered crossing to water treatment are separate sprites
|
||||
}
|
||||
function factoryInside(sc, cfg, al, pv, up) {
|
||||
var x0 = X(0), y0 = Y(0), x1 = X(FL), y1 = Y(FW), P = sc.P, z = FFL, xe = up ? X(BLK.fx0) : X(105.8);
|
||||
var x0 = X(0), y0 = Y(0), x1 = X(FL), y1 = Y(FW), P = sc.P, z = FFL, xe = up ? X(BLK.fx0) : X(100);
|
||||
var fl = sc.sprite("factory");
|
||||
fl.box(x0, y0, x1, y1, 0, FFL, "iso-plinth");
|
||||
var zones = zoneList(cfg, up);
|
||||
@@ -1791,7 +1797,15 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.sprite("workshop").box(X(12.4), Y(21.2), X(14.3), Y(23.2), z, z + 2.0, "iso-mill");
|
||||
sc.sprite("workshop").cyl(X(10.2), Y(22.3), 0.3, z, z + 1.7, "iso-steel");
|
||||
sc.tag(X(6), Y(16), z + 3.4, "Workshop", 6, "workshop");
|
||||
sc.tag(X(4), Y(5), z + 2.6, "Staff entry", 2, "staffentry");
|
||||
sc.tag(X(2.6), Y(5), z + 2.6, "Staff entry", 2, "staffentry");
|
||||
// toilets at the staff entry (fx 4.6..8): accessible WC, women (2 WC), men (WC + urinal); doors to the lobby on the west
|
||||
sanitary(sc, "wc-w", z, [[7.6, 4.3, 0.28, 0.2], [7.6, 6.3, 0.28, 0.2], [7.6, 7.4, 0.28, 0.2], [7.6, 8.4, 0.28, 0.2]],
|
||||
[[6.5, 6.82, 8, 6.88], [6.5, 8.92, 8, 8.98]], [[7.78, 9.3, 7.95, 9.66]],
|
||||
[[7.5, 5.05, 7.95, 5.55], [4.75, 7.2, 5.2, 7.7], [4.75, 9.3, 5.2, 9.8]]);
|
||||
sc.tag(X(6.3), Y(6.8), z + 2.6, "WC", 2, "wc-w");
|
||||
// inner door from the corridor start into the staff entry, and the entrance mat under the covered link
|
||||
sc.sprite("staffentry").flat(rect(X(7.9), Y(0.5), X(8.1), Y(2.1)), z + 0.02, "iso-door");
|
||||
sc.sprite("link").flat(rect(LINK.x0 + 0.7, Y(0.3), LINK.x1 - 0.7, Y(1.1)), z + 0.02, "iso-door");
|
||||
// galvanics (fx 16..23)
|
||||
if (cfg.galvanics) {
|
||||
var gx = X(16.45);
|
||||
@@ -1855,7 +1869,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.sprite("plantroom").box(X(45.4), Y(17.3), X(47.3), Y(19.0), z, z + 1.5, "iso-comp");
|
||||
sc.sprite("plantroom").box(X(41), Y(16.0), X(43.6), Y(17.2), z, z + 1.2, "iso-oil");
|
||||
sc.tag(X(44), Y(16.5), z + 3, "Plant room", 4, "plantroom");
|
||||
// finishing and print block, ground floor (block floor plans): along the corridor trim + optical, QC lab,
|
||||
// finishing and print block, ground floor (block floor plans): along the corridor optical inspection, QC lab,
|
||||
// stair + goods lift; packaging behind with the cassette and CD-R benches; the upper floor is drawn at 1F
|
||||
if (!up) finishingGF(sc, cfg, z);
|
||||
// warehouse: three racking rows; dispatch: staged pallets and a forklift
|
||||
@@ -1867,13 +1881,22 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.tag(X(66), Y(16), z + 3.8, "Press hall", 7, "presshall");
|
||||
sc.tag(X(19.5), Y(14), z + 3.4, cfg.galvanics ? "Galvanics" : "Galvanics (empty)", 6, "galvanics");
|
||||
}
|
||||
// toilets: pans, cubicle partitions, urinals and basins (schematic); fx/fy factory coordinates
|
||||
function sanitary(sc, id, z, pans, parts, urinals, basins) {
|
||||
var s = sc.sprite(id), q = [];
|
||||
pans.forEach(function (p) { q.push([X(p[0]), Y(p[1]), function (r) { r.box(X(p[0] - p[2]), Y(p[1] - p[3]), X(p[0] + p[2]), Y(p[1] + p[3]), z, z + 0.42, "iso-sanit"); }]); });
|
||||
parts.forEach(function (p) { q.push([X((p[0] + p[2]) / 2), Y((p[1] + p[3]) / 2), function (r) { r.box(X(p[0]), Y(p[1]), X(p[2]), Y(p[3]), z, z + 2.0, "iso-cubicle"); }]); });
|
||||
urinals.forEach(function (p) { q.push([X((p[0] + p[2]) / 2), Y((p[1] + p[3]) / 2), function (r) { r.box(X(p[0]), Y(p[1]), X(p[2]), Y(p[3]), z + 0.45, z + 1.15, "iso-sanit"); }]); });
|
||||
basins.forEach(function (p) { q.push([X((p[0] + p[2]) / 2), Y((p[1] + p[3]) / 2), function (r) { r.box(X(p[0]), Y(p[1]), X(p[2]), Y(p[3]), z + 0.75, z + 0.9, "iso-sanit"); }]); });
|
||||
s.seq(q);
|
||||
}
|
||||
// finishing and print block, ground floor (fx 92..106)
|
||||
function finishingGF(sc, cfg, z) {
|
||||
// trim and optical inspection (fx 92..96): the record path ends at the trimmer
|
||||
var tr = sc.sprite("trim"); tr.box(X(93.0), Y(3.0), X(94.1), Y(4.1), z, z + 1.1, "iso-steel"); tr.disc(X(93.55), Y(3.55), z + 1.12, 0.26, "iso-vinylc");
|
||||
var op = sc.sprite("trim"); op.box(X(94.35), Y(2.95), X(95.75), Y(4.3), z, z + 1.5, "iso-optic"); op.cyl(X(95.05), Y(3.6), 0.35, z + 1.5, z + 1.8, "iso-dome"); op.led(X(95.05), Y(3.6), z + 1.82, "iso-ledg");
|
||||
sc.sprite("trim").box(X(94.6), Y(5.0), X(95.5), Y(5.8), z, z + 0.8, "iso-bin");
|
||||
sc.tag(X(94), Y(5), z + 2.6, "Trim + optical", 4, "trim");
|
||||
// optical inspection (fx 92..96): the record path ends at the optical station; no trimmer here,
|
||||
// the presses trim inline (user, October 2026)
|
||||
var op = sc.sprite("trim"); op.box(X(93.0), Y(2.95), X(94.4), Y(4.3), z, z + 1.5, "iso-optic"); op.cyl(X(93.7), Y(3.6), 0.35, z + 1.5, z + 1.8, "iso-dome"); op.led(X(93.7), Y(3.6), z + 1.82, "iso-ledg");
|
||||
sc.sprite("trim").box(X(94.8), Y(3.2), X(95.7), Y(4.0), z, z + 0.8, "iso-bin");
|
||||
sc.tag(X(94), Y(5), z + 2.6, "Optical inspection", 4, "trim");
|
||||
// QC lab (fx 96..100): bench on the packaging side
|
||||
var qb = sc.sprite("qc"); qb.box(X(96.3), Y(6.7), X(99.7), Y(7.5), z, z + 0.85, "iso-bench");
|
||||
qb.seq([[X(97), Y(7.1), function (q) { q.box(X(96.5), Y(6.8), X(97.5), Y(7.4), z + 0.85, z + 1.0, "iso-instr"); q.disc(X(97), Y(7.1), z + 1.02, 0.24, "iso-vinylc"); }],
|
||||
@@ -1883,6 +1906,11 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
// stair and goods lift (fx 100..106), the same footprint on both levels
|
||||
blockCore(sc, z, false);
|
||||
sc.tag(X(103), Y(4.5), z + 3.0, "Stair + goods lift", 2, "block-stair");
|
||||
// toilets at the end of the back aisle (fx 100..106, fy 20.5..24.7): women (2 WC), men (WC + urinal); doors to the aisle
|
||||
sanitary(sc, "wc-e", z, [[100.7, 24.15, 0.2, 0.28], [101.9, 24.15, 0.2, 0.28], [105.2, 24.15, 0.2, 0.28]],
|
||||
[[101.27, 23.0, 101.33, 24.7], [104.57, 23.0, 104.63, 24.7]], [[103.6, 24.48, 103.96, 24.66]],
|
||||
[[102.5, 21.1, 102.95, 21.6], [103.1, 21.1, 103.5, 21.6]]);
|
||||
sc.tag(X(103), Y(22.6), z + 2.6, "WC", 2, "wc-e");
|
||||
// packaging (~170 m2): packing tables, shrink wrap, pallet wrapper, cartons
|
||||
[[93, 13.9, 96, 15.1], [93, 10.9, 96, 12.1], [97, 10.9, 100, 12.1]].forEach(function (t) { sc.sprite("packaging").box(X(t[0]), Y(t[1]), X(t[2]), Y(t[3]), z, z + 0.9, "iso-bench"); });
|
||||
var sh = sc.sprite("packaging"); sh.box(X(97), Y(14.8), X(99.8), Y(15.9), z, z + 1.3, "iso-shrink"); sh.open([X(97), Y(14.8)], [X(99.8), Y(14.8)], [[0.6, 2.2, z + 0.3, z + 1.1]], "iso-open");
|
||||
@@ -2192,7 +2220,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.inf("listening", "Listening room", "Start of the tour with the cutting-room window");
|
||||
sc.inf("canteen", "Canteen and kitchen", "For about 40");
|
||||
sc.inf("changing", "Changing rooms", "Women and men, four showers each; staff change here before crossing to the factory");
|
||||
sc.inf("link", "Covered link", "Office to the start of the visitor corridor");
|
||||
sc.inf("link", "Covered link", "From the office lobby to the door at the start of the visitor corridor, ramping up to the factory floor at +1.2 m (site-candidates.md)");
|
||||
sc.inf("office-stair", "Stair and lift", "Connect the two storeys of the office building (site-candidates.md)");
|
||||
sc.inf("office-wc", "Toilets", "Ground floor of the office building");
|
||||
sc.inf("offices", "Offices, ~150 m2", "First floor of the office building (site-candidates.md)");
|
||||
@@ -2212,19 +2240,21 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
["E", "W", "N"].forEach(function (k, j) {
|
||||
var L = k === "N" ? 32 : 15, a = [], b = [];
|
||||
for (u = 1.2, i = 0; u < L - 1.5; u += 3, i++) {
|
||||
(hash(i + j * 17) > 0.45 ? a : b).push([u, u + 1.8, o.z0 + 0.9, o.z0 + 2.7]);
|
||||
if (!(k === "N" && u + 1.8 > o.x1 - LINK.x1 && u < o.x1 - LINK.x0)) (hash(i + j * 17) > 0.45 ? a : b).push([u, u + 1.8, o.z0 + 0.9, o.z0 + 2.7]);
|
||||
if (both) (hash(i + j * 29 + 5) > 0.45 ? a : b).push([u, u + 1.8, o.z0 + 4.8, o.z0 + 6.8]);
|
||||
}
|
||||
s.open(S[k][0], S[k][1], b, "iso-win").open(S[k][0], S[k][1], a, "iso-win iso-lit");
|
||||
});
|
||||
s.open(S.N[0], S.N[1], [[o.x1 - LINK.x1 + 0.7, o.x1 - LINK.x0 - 0.7, o.z0, o.z0 + 2.5]], "iso-door", "link");
|
||||
}
|
||||
function office(sc, cfg, level) {
|
||||
var o = OFC, x0 = o.x0, y0 = o.y0, x1 = o.x1, y1 = o.y1, S = sides(x0, y0, x1, y1);
|
||||
officeInfo(sc, cfg);
|
||||
// covered link (all levels)
|
||||
var lk = sc.sprite("link");
|
||||
lk.seq([[15.7, 57.4], [18.3, 57.4], [15.7, 68.6], [18.3, 68.6]].map(function (p) { return [p[0], p[1], function (q) { q.box(p[0] - 0.1, p[1] - 0.1, p[0] + 0.1, p[1] + 0.1, 0, 3.5, "iso-steel", { noTop: true }); }]; }));
|
||||
lk.box(15.5, 57, 18.5, 69, 3.5, 3.75, "iso-roof3");
|
||||
var lk = sc.sprite("link"), la = LINK.x0, lb = LINK.x1;
|
||||
lk.prism(rect(la + 0.2, y1, lb - 0.2, FY), 0, [o.z0, o.z0, FFL, FFL], "iso-plinth", { top: "iso-g-path" });
|
||||
lk.seq([[la + 0.2, 57.4], [lb - 0.2, 57.4], [la + 0.2, 68.6], [lb - 0.2, 68.6]].map(function (p) { return [p[0], p[1], function (q) { q.box(p[0] - 0.1, p[1] - 0.1, p[0] + 0.1, p[1] + 0.1, 0, 4.0, "iso-steel", { noTop: true }); }]; }));
|
||||
lk.box(la, y1, lb, FY, 4.0, 4.25, "iso-roof3");
|
||||
if (level === "roof") {
|
||||
var s = sc.sprite("office");
|
||||
s.box(x0, y0, x1, y1, 0, o.z0, "iso-plinth");
|
||||
|
||||
Reference in new issue
Block a user