@a2f0/skyline 0.2.29 → 0.2.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/skyline-geography.md +3 -2
- package/lib/models/colour-materials.js +3 -2
- package/lib/models/colour-palette.js +3 -0
- package/lib/models/millennium-park-plaza-geographic.js +27 -4
- package/lib/models/skyline-geography-data.js +2 -2
- package/lib/models/swissotel-geographic.d.ts +3 -1
- package/lib/models/swissotel-geographic.js +14 -6
- package/package.json +1 -1
- package/site/models/colour-materials.js +3 -2
- package/site/models/colour-palette.js +3 -0
- package/site/models/millennium-park-plaza-geographic.js +27 -4
- package/site/models/skyline-geography-data.js +2 -2
- package/site/models/swissotel-geographic.js +14 -6
|
@@ -362,7 +362,7 @@ Intermediate parts have less certainty than the overall height:
|
|
|
362
362
|
geographic camera names; see the
|
|
363
363
|
[building audit](building-labels.md#names-from-the-geographic-camera). A 90 m concrete
|
|
364
364
|
slab stands to the published 121.9 m, with window strips in its narrow ends and punched
|
|
365
|
-
windows in its long faces.
|
|
365
|
+
windows in its long faces. Continuous south office piers and recessed panel joints follow dated photographs; joint dimensions and floor levels remain estimates; see the
|
|
366
366
|
[Millennium Park Plaza reference audit](millennium-park-plaza-reference.md).
|
|
367
367
|
- Willoughby Tower stands at Michigan and Madison, left of Six North Michigan in the
|
|
368
368
|
drawing. Its limestone base fills the mapped L to the setback over the 23rd floor; a
|
|
@@ -478,7 +478,8 @@ Intermediate parts have less certainty than the overall height:
|
|
|
478
478
|
drawn tower there stands about 140 layer units higher, so the drawing's group keeps its
|
|
479
479
|
label; see the [Three Illinois Center reference audit](three-illinois-center-reference.md).
|
|
480
480
|
- Swissôtel Chicago stands behind Three Illinois Center and The Buckingham. Its triangular
|
|
481
|
-
glass tower
|
|
481
|
+
glass tower retains the published 139.3 m over 45 facade modules, each divided
|
|
482
|
+
into an opaque floor band and a vision panel using 2012 photographic ratios,
|
|
482
483
|
and its west corner closes the seam where those two models' corners leave sky; see the
|
|
483
484
|
[Swissôtel reference audit](swissotel-reference.md).
|
|
484
485
|
|
|
@@ -138,7 +138,8 @@ export const colourMaterials = {
|
|
|
138
138
|
// A warm white precast slab with bronze-tinted glass.
|
|
139
139
|
"building-michigan-plaza-front-tall": {
|
|
140
140
|
shell: ["neutral"],
|
|
141
|
-
"walls and windows": ["glass", { ...windows(0x727272, 0x484848), 0x666666: "concrete" }],
|
|
141
|
+
"walls and windows": ["glass", { ...windows(0x727272, 0x484848), 0x666666: "concrete", 0x5e5e5e: "concrete" }],
|
|
142
|
+
"south concrete panels": ["concrete"],
|
|
142
143
|
},
|
|
143
144
|
// Buff limestone over a granite base.
|
|
144
145
|
"building-willoughby-tower": {
|
|
@@ -263,7 +264,7 @@ export const colourMaterials = {
|
|
|
263
264
|
// Reflective blue-green glass in its frame.
|
|
264
265
|
"building-swissotel": {
|
|
265
266
|
shell: ["neutral"],
|
|
266
|
-
"curtain wall": ["blue-green glass", windows(0x878787, 0x515151)],
|
|
267
|
+
"curtain wall": ["blue-green glass", { ...windows(0x878787, 0x515151), 0x414141: "aluminium", 0x909090: "opaque spandrel" }],
|
|
267
268
|
},
|
|
268
269
|
};
|
|
269
270
|
// A batch's materials from its mesh's name, if the trial knows the building and the batch.
|
|
@@ -204,6 +204,9 @@ export const measuredColours = {
|
|
|
204
204
|
// docs/swissotel-reference.md, 2026-10-10 — Daytime colours from Chicago.jpg.
|
|
205
205
|
"building-swissotel": {
|
|
206
206
|
...glass(0x475056, "blue-green glass"),
|
|
207
|
+
// FID-SWI-002: mixed panorama sample does not resolve these separately.
|
|
208
|
+
"opaque spandrel": null,
|
|
209
|
+
aluminium: null,
|
|
207
210
|
neutral: null,
|
|
208
211
|
},
|
|
209
212
|
// docs/north-michigan-180-reference.md, 2026-10-10 — Daytime colours from Chicago.jpg. Only the
|
|
@@ -24,7 +24,7 @@ const floor = (n) => (n <= 8 ? h.lobby + (n - 2) * h.office : h.lobby + 6 * h.of
|
|
|
24
24
|
const color = (hex) => new THREE.Color(hex);
|
|
25
25
|
const glassTones = [0x2e2e2e, 0x323232, 0x363636, 0x3a3a3a].map(color);
|
|
26
26
|
const litGlass = color(0x727272), dimGlass = color(0x484848);
|
|
27
|
-
const concrete = color(0x666666), strip = color(0x3e3e3e), lobby = color(0x3a3a3a), core = color(0x262626), roofing = color(0x3e3e3e);
|
|
27
|
+
const concrete = color(0x666666), joint = color(0x5e5e5e), strip = color(0x3e3e3e), lobby = color(0x3a3a3a), core = color(0x262626), roofing = color(0x3e3e3e);
|
|
28
28
|
function paneColor(row, bay, wall) {
|
|
29
29
|
const hash = (Math.imul(row + 23, 0x9e3779b1) ^ Math.imul(bay + 47, 0x85ebca77) ^ Math.imul(wall + 37, 0xc2b2ae3d)) >>> 0;
|
|
30
30
|
const value = hash % 101;
|
|
@@ -45,6 +45,7 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
45
45
|
const kit = createBuilder(record.name, record.id);
|
|
46
46
|
const shell = kit.batch("Millennium Park Plaza · shell", kit.material(0xffffff, { vertexColors: true }));
|
|
47
47
|
const wall = kit.batch("Millennium Park Plaza · walls and windows", kit.material(0xffffff, { vertexColors: true }));
|
|
48
|
+
const panels = kit.batch("Millennium Park Plaza · south concrete panels", kit.material(0x666666));
|
|
48
49
|
const corners = orient(polygonOf(projectPlan(record.footprint.coordinates)));
|
|
49
50
|
// The slab, its walls the shell's dark core.
|
|
50
51
|
planOf(corners).forEach((run) => {
|
|
@@ -56,13 +57,15 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
56
57
|
// Every wall's skin, one box a chain, held 2 cm clear of its ends. A narrow end carries
|
|
57
58
|
// four window strips, 1.25 m wide and symmetrical about its middle, from the eighth floor,
|
|
58
59
|
// the first of apartments, with the top floor's window standing apart over each; below,
|
|
59
|
-
// the
|
|
60
|
+
// the office glazing is bounded by outer piers on the south (the north remains
|
|
61
|
+
// the older full-width approximation). A long face has a window every 3 m between
|
|
60
62
|
// 0.8 m piers. The chamfers are solid.
|
|
61
63
|
const plan = planOf(corners);
|
|
62
64
|
chainsOf(plan).forEach((chain, index) => {
|
|
63
65
|
const first = chain.runs[0], last = chain.runs.at(-1);
|
|
64
66
|
const s0 = turnsAt(plan, first)[0] > 0 ? 0.09 : 0.02, s1 = chain.length - (turnsAt(plan, last)[1] > 0 ? 0.09 : 0.02);
|
|
65
67
|
const end = chain.length > 12 && chain.length < 30, long = chain.length >= 30;
|
|
68
|
+
const south = end && plan[first].normal(0)[1] > 0.9;
|
|
66
69
|
let columns, isWindow;
|
|
67
70
|
if (end) {
|
|
68
71
|
const middle = chain.length / 2, centres = [-4.1, -1.6, 1.6, 4.1].map((d) => middle + d);
|
|
@@ -78,11 +81,15 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
78
81
|
columns = [0, chain.length];
|
|
79
82
|
isWindow = () => false;
|
|
80
83
|
}
|
|
81
|
-
chainSkin(kit, wall, plan, chain, 0, chain.runs.length - 1, s0, s1, columns, heights, 0.02, 0.07, (bay, r) => {
|
|
84
|
+
chainSkin(kit, wall, plan, chain, 0, chain.runs.length - 1, s0, s1, columns, heights, 0.02, south ? 0.04 : 0.07, (bay, r) => {
|
|
82
85
|
const row = rows[r];
|
|
83
86
|
if (row.kind === "lobby")
|
|
84
87
|
return lobby;
|
|
85
88
|
const office = row.floor < 8;
|
|
89
|
+
// Dated south views show the outer concrete piers continuing past the
|
|
90
|
+
// office windows; the earlier model glazed the entire end below floor 8.
|
|
91
|
+
if (south && (bay === 1 || bay === columns.length - 1 || (!office && !isWindow(bay))))
|
|
92
|
+
return joint;
|
|
86
93
|
if (end && !office && isWindow(bay)) {
|
|
87
94
|
if (row.kind === "glass")
|
|
88
95
|
return paneColor(row.floor, bay, index);
|
|
@@ -91,9 +98,25 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
91
98
|
if (row.kind === "spandrel")
|
|
92
99
|
return concrete;
|
|
93
100
|
if (end)
|
|
94
|
-
return office ? paneColor(row.floor, bay, index) : concrete;
|
|
101
|
+
return office ? paneColor(row.floor, bay, index) : south ? joint : concrete;
|
|
95
102
|
return isWindow(bay) ? paneColor(row.floor, bay, index) : concrete;
|
|
96
103
|
}, concrete);
|
|
104
|
+
if (south) {
|
|
105
|
+
// 1980/2005/2008 photographs resolve horizontal joints on the solid end.
|
|
106
|
+
// Keep the existing estimated floor cadence; 5 cm joint width and 3 cm
|
|
107
|
+
// relief are schematic, not measured construction dimensions. Closed
|
|
108
|
+
// panels stand in front of the continuous, closed backing skin.
|
|
109
|
+
for (let bay = 1; bay < columns.length; bay += 2) {
|
|
110
|
+
const outer = bay === 1 || bay === columns.length - 1;
|
|
111
|
+
// End clearances keep panel caps off the backing skin's end-cap planes.
|
|
112
|
+
const from = Math.max(s0 + 0.01, columns[bay - 1]), to = Math.min(s1 - 0.01, columns[bay]);
|
|
113
|
+
for (let n = outer ? 2 : 8; n <= 41; n += 1) {
|
|
114
|
+
const lo = floor(n) - 0.3 + 0.025;
|
|
115
|
+
const hi = n === 41 ? h.top - 0.01 : floor(n + 1) - 0.3 - 0.025;
|
|
116
|
+
chainSkin(kit, panels, plan, chain, 0, chain.runs.length - 1, from, to, [from, to], [lo, hi], 0.035, 0.07, () => concrete, concrete);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
97
120
|
});
|
|
98
121
|
const model = kit.finish({ height: h.top, outlines: [shell], opacity: 0.16 });
|
|
99
122
|
model.building.position.set(offset[0], 0, offset[1]);
|
|
@@ -25,7 +25,7 @@ export const geographicBuildings = [
|
|
|
25
25
|
{ "id": "building-blue-cross-blue-shield", "name": "Blue Cross and Blue Shield Tower", "shortName": "Blue Cross", "height": 226.7, "tipHeight": 226.7, "heightSource": "https://www.skyscrapercenter.com/building/blue-cross-blue-shield-tower/1160", "note": "Detailed Blue Cross: the mapped outline and parts; a glass curtain wall on the 5 ft module, the central block standing forward of end bays open through at the middle mechanical band, three bands of mechanical floors with their columns, and the emblem screen to the published 226.7 m. The lobby's height is estimated.", "footprint": { "way": 95486960, "version": 16, "coordinates": [[-87.6204645, 41.8846925], [-87.620465, 41.8847182], [-87.6204697, 41.8849849], [-87.6203148, 41.8849886], [-87.6203086, 41.8850315], [-87.6201881, 41.8850329], [-87.6201798, 41.8850759], [-87.6201749, 41.8851015], [-87.6196594, 41.8851062], [-87.6196557, 41.8850788], [-87.6196503, 41.8850388], [-87.6195227, 41.8850407], [-87.6195157, 41.8850011], [-87.6193623, 41.8849997], [-87.6193587, 41.8849047], [-87.6193513, 41.8847032], [-87.6193817, 41.8847037], [-87.6194025, 41.8847041], [-87.6194595, 41.8847032], [-87.6194506, 41.8846598], [-87.6199021, 41.8846549], [-87.6203621, 41.8846501], [-87.6203607, 41.884669], [-87.6203595, 41.8846955]] }, "parts": [{ "way": 284779637, "version": 4, "coordinates": [[-87.6203086, 41.8850315], [-87.6203148, 41.8849886], [-87.6203559, 41.8847194], [-87.6203595, 41.8846955], [-87.6203607, 41.884669], [-87.6203621, 41.8846501], [-87.6202, 41.8846517], [-87.6199021, 41.8846549], [-87.6196193, 41.8846576], [-87.6194506, 41.8846598], [-87.6194595, 41.8847032], [-87.6195157, 41.8850011], [-87.6195227, 41.8850407], [-87.6196503, 41.8850388], [-87.6201881, 41.8850329]], "bottom": 0, "top": 226.7 }, { "way": 284779635, "version": 5, "coordinates": [[-87.6193623, 41.8849997], [-87.6195157, 41.8850011], [-87.6203148, 41.8849886], [-87.6204697, 41.8849849], [-87.620465, 41.8847182], [-87.6204645, 41.8846925], [-87.6203595, 41.8846955], [-87.6194595, 41.8847032], [-87.6194025, 41.8847041], [-87.6193817, 41.8847037], [-87.6193513, 41.8847032], [-87.6193587, 41.8849047]], "bottom": 0, "top": 212 }] },
|
|
26
26
|
{ "id": "building-340-on-the-park", "name": "340 on the Park", "shortName": "340 on the Park", "height": 204.9, "tipHeight": 204.9, "heightSource": "https://www.skyscrapercenter.com/building/340-on-the-park/1583", "note": "Detailed 340 on the Park: the mapped outline and parts; glass curtain walls on a straight south face, a diagonal south-east face and a curved north face, with the south face's white concrete frame: piers, a beam every fifth floor, a parapet band over four penthouse floors, cantilevered and recessed balconies, and the winter garden's tall bay. The corner block's roof is measured on photographs at 51.7 m, over the map's 40 m. Floor levels are measured on the drawing; the lobby's height is estimated.", "footprint": { "way": 95486949, "version": 12, "coordinates": [[-87.619168, 41.884674], [-87.6191536, 41.884912], [-87.6191146, 41.8849133], [-87.6190581, 41.8849113], [-87.6188847, 41.8849048], [-87.6187278, 41.8848896], [-87.6186525, 41.8848776], [-87.6185999, 41.8848701], [-87.6184438, 41.8848387], [-87.61849, 41.8848042], [-87.6184907, 41.8847024], [-87.6185294, 41.8847019], [-87.6186088, 41.8847009], [-87.6186482, 41.8847001], [-87.6186465, 41.8846785]] }, "parts": [{ "way": 284789056, "version": 4, "coordinates": [[-87.6191536, 41.884912], [-87.619168, 41.884674], [-87.6186465, 41.8846785], [-87.6186482, 41.8847001], [-87.6186088, 41.8847009], [-87.61849, 41.8848042], [-87.6184438, 41.8848387], [-87.6185999, 41.8848701], [-87.6186525, 41.8848776], [-87.6187278, 41.8848896], [-87.6188847, 41.8849048], [-87.6190581, 41.8849113], [-87.6191146, 41.8849133]], "bottom": 0, "top": 204.9 }, { "way": 284789058, "version": 4, "coordinates": [[-87.6186088, 41.8847009], [-87.6185294, 41.8847019], [-87.6184907, 41.8847024], [-87.61849, 41.8848042]], "bottom": 0, "top": 51.7, "estimatedHeight": true }] },
|
|
27
27
|
{ "id": "building-the-buckingham", "name": "The Buckingham", "shortName": "Buckingham", "height": 121.9, "tipHeight": 121.9, "heightSource": "https://www.skyscrapercenter.com/building/buckingham-plaza/10315", "note": "Detailed Buckingham: the mapped outline and rooftop part; a concrete frame of five bays a face, a band at every floor over bronze ribbon windows, the end bays standing forward of the middle three on the south, east and north faces, balconies stacked in the two notched corners, the top floor's tall openings under a cap at the mapped 119 m, and the rooftop enclosure to the published 121.9 m. Floor levels are measured on the drawing; the lobby's height is estimated.", "footprint": { "way": 95486940, "version": 11, "coordinates": [[-87.6181599, 41.8846507], [-87.6181604, 41.8847282], [-87.618162, 41.8847796], [-87.6181638, 41.8849686], [-87.6180927, 41.8849698], [-87.618091, 41.8849586], [-87.6178554, 41.8849597], [-87.6178564, 41.8849736], [-87.6177989, 41.8849746], [-87.6177849, 41.8849748], [-87.6177824, 41.8849587], [-87.6177569, 41.8849571], [-87.6177552, 41.8849011], [-87.617777, 41.8849005], [-87.6177734, 41.8847266], [-87.6177501, 41.8847273], [-87.6177485, 41.884672], [-87.6177809, 41.8846702], [-87.6177797, 41.8846527], [-87.617852, 41.8846523], [-87.617852, 41.8846679], [-87.618083, 41.8846651], [-87.618083, 41.8846511]] }, "parts": [{ "way": 95486940, "version": 11, "coordinates": [[-87.6181599, 41.8846507], [-87.6181604, 41.8847282], [-87.618162, 41.8847796], [-87.6181638, 41.8849686], [-87.6180927, 41.8849698], [-87.618091, 41.8849586], [-87.6178554, 41.8849597], [-87.6178564, 41.8849736], [-87.6177989, 41.8849746], [-87.6177849, 41.8849748], [-87.6177824, 41.8849587], [-87.6177569, 41.8849571], [-87.6177552, 41.8849011], [-87.617777, 41.8849005], [-87.6177734, 41.8847266], [-87.6177501, 41.8847273], [-87.6177485, 41.884672], [-87.6177809, 41.8846702], [-87.6177797, 41.8846527], [-87.617852, 41.8846523], [-87.617852, 41.8846679], [-87.618083, 41.8846651], [-87.618083, 41.8846511]], "bottom": 0, "top": 119 }, { "way": 284790189, "version": 1, "coordinates": [[-87.6180734, 41.8848536], [-87.6178346, 41.8848542], [-87.6178342, 41.8847737], [-87.6180731, 41.8847732]], "bottom": 119, "top": 121.9 }] },
|
|
28
|
-
{ "id": "building-michigan-plaza-front-tall", "name": "Millennium Park Plaza", "shortName": "Millennium Park Plaza", "height": 121.9, "tipHeight": 121.9, "heightSource": "https://www.skyscrapercenter.com/building/millennium-park-plaza/10316", "note": "Detailed Millennium Park Plaza: the mapped outline, named through the geographic camera; a 90 m concrete slab with chamfered south corners, offices on the first seven floors and apartments above, solid narrow ends with four slender window strips, and punched windows between piers on the long faces, to the published 121.9 m. Floor levels
|
|
28
|
+
{ "id": "building-michigan-plaza-front-tall", "name": "Millennium Park Plaza", "shortName": "Millennium Park Plaza", "height": 121.9, "tipHeight": 121.9, "heightSource": "https://www.skyscrapercenter.com/building/millennium-park-plaza/10316", "note": "Detailed Millennium Park Plaza: the mapped outline, named through the geographic camera; a 90 m concrete slab with chamfered south corners, offices on the first seven floors and apartments above, solid narrow ends with four slender window strips, and punched windows between piers on the long faces, to the published 121.9 m. South office glazing sits between continuous outer concrete piers; recessed south-panel joints follow the existing estimated floors. Floor levels, window widths and joint relief remain approximations.", "footprint": { "way": 127107026, "version": 7, "coordinates": [[-87.6240359, 41.8856557], [-87.624011, 41.8848485], [-87.6240357, 41.8848351], [-87.624242, 41.8848314], [-87.6242648, 41.8848508], [-87.6242799, 41.8856518]] }, "parts": [{ "way": 127107026, "version": 7, "coordinates": [[-87.6240359, 41.8856557], [-87.624011, 41.8848485], [-87.6240357, 41.8848351], [-87.624242, 41.8848314], [-87.6242648, 41.8848508], [-87.6242799, 41.8856518]], "bottom": 0, "top": 121.9 }] },
|
|
29
29
|
{ "id": "building-willoughby-tower", "name": "Willoughby Tower", "shortName": "Willoughby", "height": 133.5, "tipHeight": 133.5, "heightSource": "https://www.skyscrapercenter.com/building/willoughby-tower/9854", "note": "Detailed Willoughby Tower: the mapped L-shaped outline; a limestone Gothic base to the setback over the 23rd floor under a parapet of pinnacles, a shaft at the lot's south-east corner with a shoulder west of it, and a crown of arched windows under pinnacles and gables, its tallest pinnacles at the published 133.5 m. Levels are measured on the drawing; the shaft's plan is read from the drawing and photographs.", "footprint": { "way": 124873939, "version": 10, "coordinates": [[-87.6250765, 41.882002], [-87.6249763, 41.8820043], [-87.6249007, 41.8820051], [-87.624702, 41.8820073], [-87.6246761, 41.8820076], [-87.624674, 41.8819841], [-87.6246656, 41.8818144], [-87.6246642, 41.8817867], [-87.6247865, 41.881785], [-87.6249397, 41.8817829], [-87.624944, 41.8818519], [-87.6250739, 41.8818499]] }, "parts": [{ "way": 124873939, "version": 10, "coordinates": [[-87.6250765, 41.882002], [-87.6249763, 41.8820043], [-87.6249007, 41.8820051], [-87.624702, 41.8820073], [-87.6246761, 41.8820076], [-87.624674, 41.8819841], [-87.6246656, 41.8818144], [-87.6246642, 41.8817867], [-87.6247865, 41.881785], [-87.6249397, 41.8817829], [-87.624944, 41.8818519], [-87.6250739, 41.8818499]], "bottom": 0, "top": 133.5 }] },
|
|
30
30
|
{ "id": "building-six-north-michigan", "name": "Six North Michigan", "shortName": "Six North", "height": 86, "tipHeight": 86, "heightSource": "https://chicagology.com/goldenage/goldenage015/", "note": "Detailed Six North Michigan, the Montgomery Ward Building: the mapped outline; a sixteen-storey block under a projecting cornice, and the tower in the middle of its Michigan front, with a band, an arched stage of three tall windows to a face under a cornice, and a panelled top stage under a cap at the published 86 m, where the pyramid came off in 1947. Levels are measured on the drawing; the tower's plan is read from the drawing.", "footprint": { "way": 126982631, "version": 12, "coordinates": [[-87.6246862, 41.8824645], [-87.6246875, 41.8824613], [-87.6246872, 41.8824178], [-87.6246863, 41.8823638], [-87.624686, 41.8823412], [-87.6246848, 41.8822497], [-87.6246844, 41.882217], [-87.6249101, 41.8822147], [-87.6249772, 41.8822141], [-87.6252824, 41.8822112], [-87.6252834, 41.8823395], [-87.6252861, 41.8824613]] }, "parts": [{ "way": 126982631, "version": 12, "coordinates": [[-87.6246862, 41.8824645], [-87.6246875, 41.8824613], [-87.6246872, 41.8824178], [-87.6246863, 41.8823638], [-87.624686, 41.8823412], [-87.6246848, 41.8822497], [-87.6246844, 41.882217], [-87.6249101, 41.8822147], [-87.6249772, 41.8822141], [-87.6252824, 41.8822112], [-87.6252834, 41.8823395], [-87.6252861, 41.8824613]], "bottom": 0, "top": 86 }] },
|
|
31
31
|
{ "id": "building-six-north-far-east", "name": "Michigan Boulevard Building", "shortName": "Michigan Boulevard", "height": 82, "tipHeight": 83.3, "heightSource": "https://web.archive.org/web/20070216134331/http://www.emporis.com/en/wm/bu/?id=michiganboulevardbuilding-chicago-il-usa", "note": "Detailed Michigan Boulevard Building: the mapped outline, named through the geographic camera; a terracotta Michigan front of five bays, a single window and four pairs to a floor, over twenty-one storeys, with a belt course over the thirteenth and an attic of panels under the parapet at the published 82 m, its south bay's parapet raised to 83.3 m. The terracotta turns one bay onto the south wall, common brick beyond, blank above 20 North Michigan to the eighteenth floor. Levels are measured on the drawing.", "footprint": { "way": 126982630, "version": 8, "coordinates": [[-87.6246899, 41.8828465], [-87.6250574, 41.8828445], [-87.6250579, 41.8828698], [-87.6252905, 41.8828713], [-87.625293, 41.8831223], [-87.6251914, 41.8831227], [-87.6251166, 41.883123], [-87.6250744, 41.8831231], [-87.6249196, 41.8831237], [-87.6246922, 41.8831245], [-87.6246919, 41.8830972], [-87.6246898, 41.8828903], [-87.6246895, 41.8828674], [-87.6246898, 41.8828566]] }, "parts": [{ "way": 126982630, "version": 8, "coordinates": [[-87.6246899, 41.8828465], [-87.6250574, 41.8828445], [-87.6250579, 41.8828698], [-87.6252905, 41.8828713], [-87.625293, 41.8831223], [-87.6251914, 41.8831227], [-87.6251166, 41.883123], [-87.6250744, 41.8831231], [-87.6249196, 41.8831237], [-87.6246922, 41.8831245], [-87.6246919, 41.8830972], [-87.6246898, 41.8828903], [-87.6246895, 41.8828674], [-87.6246898, 41.8828566]], "bottom": 0, "top": 83.3 }] },
|
|
@@ -46,7 +46,7 @@ export const geographicBuildings = [
|
|
|
46
46
|
{ "id": "building-hyatt-regency-west-tower", "name": "Hyatt Regency Chicago West Tower", "shortName": "Hyatt West Tower", "height": 111.3, "tipHeight": 111.3, "heightSource": "https://www.skyscrapercenter.com/building/hyatt-regency-chicago-west-tower/13132", "note": "Detailed Hyatt Regency Chicago West Tower: its mapped part of the hotel's outline; a brick slab of 33 storeys, narrow window slots continuous from the lobby to the top two floors on a 3.5 m module between solid corners, and a plain band over them to a flat roof at the Skyscraper Center's 111.3 m. From the photograph's camera it stands between Aon Center and the Blue Cross and Blue Shield Tower, where the drawing's Blue Cross group paints a dark brown sliver.", "footprint": { "way": 235920252, "version": 4, "coordinates": [[-87.6227574, 41.887587], [-87.6228537, 41.887584], [-87.6228521, 41.8874603], [-87.6228518, 41.8874165], [-87.6225427, 41.8874231], [-87.6225408, 41.8875106], [-87.6225253, 41.8875109], [-87.6225266, 41.8875277], [-87.6225277, 41.8875513], [-87.622528, 41.8875746], [-87.6225382, 41.8878947], [-87.62255, 41.8878954], [-87.6225496, 41.8879846], [-87.6228658, 41.8879789], [-87.6228643, 41.8879388], [-87.6228611, 41.8878099], [-87.6227664, 41.8878103]] }, "parts": [{ "way": 235920252, "version": 4, "coordinates": [[-87.6227574, 41.887587], [-87.6228537, 41.887584], [-87.6228521, 41.8874603], [-87.6228518, 41.8874165], [-87.6225427, 41.8874231], [-87.6225408, 41.8875106], [-87.6225253, 41.8875109], [-87.6225266, 41.8875277], [-87.6225277, 41.8875513], [-87.622528, 41.8875746], [-87.6225382, 41.8878947], [-87.62255, 41.8878954], [-87.6225496, 41.8879846], [-87.6228658, 41.8879789], [-87.6228643, 41.8879388], [-87.6228611, 41.8878099], [-87.6227664, 41.8878103]], "bottom": 0, "top": 111.3 }] },
|
|
47
47
|
{ "id": "building-buckingham-east", "name": "Sheraton Grand Chicago Riverwalk", "shortName": "Sheraton Grand", "height": 112.3, "tipHeight": 112.3, "heightSource": "https://www.skyscrapercenter.com/building/sheraton-chicago-hotel-towers/10020", "note": "Detailed Sheraton Grand Chicago Riverwalk: the mapped tower and its corner part; a cream precast tower on an L of punched windows at Emporis's 2.67 m floor-to-floor, its arms to 94.76 m, the corner's round tower two floors higher to 100.1 m, and pale stepped frames under dark louvered screens on all four round ends, with the smaller bases approximated from the principal frame. The main crown reaches the Skyscraper Center's 112.3 m. Heights stand on the Skyscraper Center's datum: its top floor at 97 m, a floor-to-roof of 3.1 m and a 12.2 m main crown from Emporis; photographic ratios estimate about 7.2 m crowns on the arms and 6 m on the east wing; the published height nearest the drawing's reading, over Emporis's 330.56 ft. The Skyscraper Center's 112.8 m tip, 50 cm over the drum, is not modelled. The drawing's buckingham-east group is its corner's lit drum over its tower. The mapped east wing and its round end continue the hotel to the east, with estimated roofs at 84.08 m and 86.75 m on the same height datum and a fourth crown. Photographs from before 2013 establish the wing; exact roof and crown dimensions remain inferred.", "footprint": { "way": 592122464, "version": 5, "coordinates": [[-87.6199499, 41.8891119], [-87.6199176, 41.8893381], [-87.6199306, 41.8893589], [-87.6199502, 41.8893716], [-87.6199845, 41.8893878], [-87.6200276, 41.8893957], [-87.6200732, 41.8893915], [-87.6201147, 41.8893744], [-87.6201372, 41.8893482], [-87.6201463, 41.8893162], [-87.6201584, 41.8892447], [-87.6201841, 41.889063], [-87.6201875, 41.8890302], [-87.6201812, 41.8889946], [-87.6201588, 41.8889641], [-87.620121, 41.8889384], [-87.6200743, 41.8889276], [-87.6196505, 41.8888958], [-87.6196025, 41.8889162], [-87.6195726, 41.8889427], [-87.6195591, 41.8889735], [-87.6195627, 41.8890068], [-87.6195846, 41.8890373], [-87.6196228, 41.8890638], [-87.6198263, 41.8890777], [-87.6198225, 41.889104]] }, "parts": [{ "way": 592122464, "version": 5, "coordinates": [[-87.6199499, 41.8891119], [-87.6199176, 41.8893381], [-87.6199306, 41.8893589], [-87.6199502, 41.8893716], [-87.6199845, 41.8893878], [-87.6200276, 41.8893957], [-87.6200732, 41.8893915], [-87.6201147, 41.8893744], [-87.6201372, 41.8893482], [-87.6201463, 41.8893162], [-87.6201584, 41.8892447], [-87.6201841, 41.889063], [-87.6201875, 41.8890302], [-87.6201812, 41.8889946], [-87.6201588, 41.8889641], [-87.620121, 41.8889384], [-87.6200743, 41.8889276], [-87.6196505, 41.8888958], [-87.6196025, 41.8889162], [-87.6195726, 41.8889427], [-87.6195591, 41.8889735], [-87.6195627, 41.8890068], [-87.6195846, 41.8890373], [-87.6196228, 41.8890638], [-87.6198263, 41.8890777], [-87.6198225, 41.889104]], "bottom": 0, "top": 94.76 }, { "way": 1269924307, "version": 1, "coordinates": [[-87.6199691, 41.8890378], [-87.6199677, 41.889013], [-87.6199719, 41.8889952], [-87.6199903, 41.8889744], [-87.6200135, 41.88896], [-87.6200416, 41.8889517], [-87.6200717, 41.8889503], [-87.6201037, 41.8889568], [-87.6201308, 41.8889711], [-87.6201498, 41.8889914], [-87.6201583, 41.8890152], [-87.6201555, 41.8890398], [-87.6201415, 41.8890622], [-87.6201241, 41.8890776], [-87.6200882, 41.8890904], [-87.6200552, 41.8890928], [-87.6200258, 41.8890875], [-87.6200001, 41.8890757], [-87.6199805, 41.8890586]], "bottom": 94.76, "top": 100.1 }, { "way": 1269924305, "version": 1, "coordinates": [[-87.6191033, 41.8890226], [-87.6190622, 41.8889954], [-87.6190428, 41.8889627], [-87.6190431, 41.8889236], [-87.6190607, 41.8888928], [-87.619091, 41.8888724], [-87.6191278, 41.8888566], [-87.6193634, 41.8888743], [-87.6196505, 41.8888958], [-87.6196025, 41.8889162], [-87.6195726, 41.8889427], [-87.6195591, 41.8889735], [-87.6195627, 41.8890068], [-87.6195846, 41.8890373], [-87.6196228, 41.8890638]], "bottom": 0, "top": 84.08, "estimatedHeight": true }, { "way": 1269924304, "version": 1, "coordinates": [[-87.619112, 41.8888866], [-87.61909, 41.8888996], [-87.6190746, 41.888917], [-87.6190672, 41.8889372], [-87.6190685, 41.8889581], [-87.6190786, 41.8889777], [-87.6190963, 41.8889939], [-87.6191199, 41.8890052], [-87.6191471, 41.8890105], [-87.6191778, 41.8890088], [-87.6192059, 41.8889994], [-87.619228, 41.8889835], [-87.6192416, 41.8889629], [-87.6192449, 41.8889401], [-87.6192376, 41.8889179], [-87.6192207, 41.8888988], [-87.6191959, 41.8888851], [-87.6191665, 41.8888785], [-87.6191384, 41.8888793]], "bottom": 84.08, "top": 86.75, "estimatedHeight": true }], "groundFootprintWays": [592122464, 1269924305] },
|
|
48
48
|
{ "id": "building-three-illinois-center", "name": "Three Illinois Center", "shortName": "Three Illinois Center", "height": 106.7, "tipHeight": 106.7, "heightSource": "https://www.skyscrapercenter.com/building/three-illinois-center/13913", "note": "Detailed Three Illinois Center: the mapped outline; a dark bronze curtain wall of 30 storeys, mullions on a 5 ft module and glass over a spandrel on each floor at the published 11.5 ft slab to slab over a 5.06 m lobby, and the top two floors' windowless mechanical penthouse, glazed about 2019 but kept as the 2013 photograph shows it, under a flat roof at the Skyscraper Center's and Emporis's 350 ft. Its east end fills the gap between 340 on the Park and The Buckingham, where the drawing's buckingham-west group paints an office tower whose top stands about 140 layer units higher.", "footprint": { "way": 95486958, "version": 12, "coordinates": [[-87.6204966, 41.8869542], [-87.6202534, 41.8869566], [-87.6200384, 41.8869571], [-87.6200396, 41.887005], [-87.6200455, 41.8873733], [-87.620058, 41.8876286], [-87.6205101, 41.8876189], [-87.6205054, 41.8873683]] }, "parts": [{ "way": 95486958, "version": 12, "coordinates": [[-87.6204966, 41.8869542], [-87.6202534, 41.8869566], [-87.6200384, 41.8869571], [-87.6200396, 41.887005], [-87.6200455, 41.8873733], [-87.620058, 41.8876286], [-87.6205101, 41.8876189], [-87.6205054, 41.8873683]], "bottom": 0, "top": 106.7 }] },
|
|
49
|
-
{ "id": "building-swissotel", "name": "Swissôtel Chicago", "shortName": "Swissôtel", "height": 139.3, "tipHeight": 139.3, "heightSource": "https://www.skyscrapercenter.com/building/swissotel-chicago/4362", "note": "Detailed Swissôtel Chicago: the hotel's mapped tower part, a triangle; a flush grid of reflective
|
|
49
|
+
{ "id": "building-swissotel", "name": "Swissôtel Chicago", "shortName": "Swissôtel", "height": 139.3, "tipHeight": 139.3, "heightSource": "https://www.skyscrapercenter.com/building/swissotel-chicago/4362", "note": "Detailed Swissôtel Chicago: the hotel's mapped tower part, a triangle; a flush grid of reflective vision windows above pale opaque floor bands, with thin mullions about 1.5 m apart and paired transoms in each of 45 retained modules. The bands take about 45% of each module from 2012 photographic ratios; precise occupied-floor and mechanical-row counts remain unresolved. The flat roof stays at the Skyscraper Center's 139.3 m. It stands behind Three Illinois Center and The Buckingham from the drawing's camera, and fills the seam where their corners meet. The hotel's outline, 95486966, adds a small block on the tower's north-east face, and its podium, 95486953, carries no height; neither is modelled.", "footprint": { "way": 641288601, "version": 3, "coordinates": [[-87.6194102, 41.8874254], [-87.619534, 41.8875706], [-87.619676, 41.8873866], [-87.6198184, 41.8871906], [-87.6192311, 41.8871971], [-87.619375, 41.8873843]] }, "parts": [{ "way": 641288601, "version": 3, "coordinates": [[-87.6194102, 41.8874254], [-87.619534, 41.8875706], [-87.619676, 41.8873866], [-87.6198184, 41.8871906], [-87.6192311, 41.8871971], [-87.619375, 41.8873843]], "bottom": 0, "top": 139.3 }] },
|
|
50
50
|
];
|
|
51
51
|
// Every vehicular street on the upper or surface level across the 3D skyline's ground, from
|
|
52
52
|
// a separate extract retrieved 2026-09-30: OpenStreetMap's roads and their links, and its
|
|
@@ -4,6 +4,7 @@ export declare const swissotelLevels: Readonly<{
|
|
|
4
4
|
levels: 45;
|
|
5
5
|
roof: 139.3;
|
|
6
6
|
module: 1.5;
|
|
7
|
+
spandrel: 1.4;
|
|
7
8
|
frame: 0.06;
|
|
8
9
|
coping: 0.1;
|
|
9
10
|
}>;
|
|
@@ -12,11 +13,12 @@ export declare const swissotelPalette: Readonly<{
|
|
|
12
13
|
lit: 8882055;
|
|
13
14
|
dim: 5329233;
|
|
14
15
|
frame: 4276545;
|
|
16
|
+
spandrel: 9474192;
|
|
15
17
|
}>;
|
|
16
18
|
type Row = {
|
|
17
19
|
lo: number;
|
|
18
20
|
hi: number;
|
|
19
|
-
kind: "glass" | "frame";
|
|
21
|
+
kind: "glass" | "frame" | "spandrel";
|
|
20
22
|
floor: number;
|
|
21
23
|
};
|
|
22
24
|
export declare const swissotelRows: Row[];
|
|
@@ -6,25 +6,28 @@ import { chainSkin, chainsOf, orient, paintedSlab, planOf, turnsAt } from "./fac
|
|
|
6
6
|
// the photograph's camera it stands behind Three Illinois Center and The Buckingham, and fills
|
|
7
7
|
// the seam where their corners meet.
|
|
8
8
|
//
|
|
9
|
-
// A triangular tower of reflective glass
|
|
10
|
-
//
|
|
9
|
+
// A triangular tower of reflective glass and opaque bands: thin mullions about 1.5 m apart and
|
|
10
|
+
// paired opaque spandrel / vision panels at each floor, under a flat roof at the published 139.3 m. The
|
|
11
11
|
// floors divide that height by OpenStreetMap's 45 levels. See docs/swissotel-reference.md.
|
|
12
12
|
// Units are meters; +x is east, +z is south.
|
|
13
13
|
export const swissotelLevels = Object.freeze({
|
|
14
|
-
levels: 45, //
|
|
14
|
+
levels: 45, // retained module count; OSM and Enclos both report 45 storeys
|
|
15
15
|
roof: 139.3, // the published height, the Skyscraper Center's 457 ft
|
|
16
16
|
module: 1.5, // the mullions' spacing, read on the photographs
|
|
17
|
+
spandrel: 1.4, // about 45% of the retained floor pitch; 2012 photographs, ±0.2 m
|
|
17
18
|
frame: 0.06, // each mullion's and transom's width
|
|
18
19
|
coping: 0.1, // the roof's coping over the top panel
|
|
19
20
|
});
|
|
20
21
|
const h = swissotelLevels;
|
|
21
22
|
const pitch = h.roof / h.levels;
|
|
22
|
-
//
|
|
23
|
-
|
|
23
|
+
// Window tones are distinct from frames and opaque spandrels. The pale band
|
|
24
|
+
// is an explicit grey fallback, not a calibrated sunny-day colour.
|
|
25
|
+
export const swissotelPalette = Object.freeze({ glass: [0x2d2d2d, 0x313131, 0x353535, 0x292929], lit: 0x878787, dim: 0x515151, frame: 0x414141, spandrel: 0x909090 });
|
|
24
26
|
const palette = swissotelPalette;
|
|
25
27
|
const color = (hex) => new THREE.Color(hex);
|
|
26
28
|
const glassTones = palette.glass.map(color);
|
|
27
29
|
const litGlass = color(palette.lit), dimGlass = color(palette.dim), frame = color(palette.frame);
|
|
30
|
+
const spandrel = color(palette.spandrel);
|
|
28
31
|
const core = color(0x1e1e1e), roofing = color(0x323232);
|
|
29
32
|
function paneColor(row, bay, wall) {
|
|
30
33
|
const hash = (Math.imul(row + 71, 0x9e3779b1) ^ Math.imul(bay + 13, 0x85ebca77) ^ Math.imul(wall + 47, 0xc2b2ae3d)) >>> 0;
|
|
@@ -38,7 +41,10 @@ function paneColor(row, bay, wall) {
|
|
|
38
41
|
export const swissotelRows = [];
|
|
39
42
|
for (let n = 1; n <= h.levels; n += 1) {
|
|
40
43
|
const lo = n === 1 ? 0.25 : (n - 1) * pitch + h.frame / 2, hi = n === h.levels ? h.roof - h.coping : n * pitch - h.frame / 2;
|
|
41
|
-
|
|
44
|
+
const split = (n - 1) * pitch + h.spandrel;
|
|
45
|
+
swissotelRows.push({ lo, hi: split - h.frame / 2, kind: "spandrel", floor: n });
|
|
46
|
+
swissotelRows.push({ lo: split - h.frame / 2, hi: split + h.frame / 2, kind: "frame", floor: n });
|
|
47
|
+
swissotelRows.push({ lo: split + h.frame / 2, hi, kind: "glass", floor: n });
|
|
42
48
|
swissotelRows.push({ lo: hi, hi: n === h.levels ? h.roof : n * pitch + h.frame / 2, kind: "frame", floor: n });
|
|
43
49
|
}
|
|
44
50
|
const rows = swissotelRows;
|
|
@@ -68,6 +74,8 @@ export function createSwissotelGeographicBuilding(record, projectPlan, offset) {
|
|
|
68
74
|
const row = rows[r], middle = (columns[bay - 1] + columns[bay]) / 2;
|
|
69
75
|
if (row.kind === "frame" || lines.some((c) => Math.abs(middle - c) < h.frame / 2))
|
|
70
76
|
return frame;
|
|
77
|
+
if (row.kind === "spandrel")
|
|
78
|
+
return spandrel;
|
|
71
79
|
return paneColor(row.floor, bay, index);
|
|
72
80
|
}, frame);
|
|
73
81
|
});
|
package/package.json
CHANGED
|
@@ -138,7 +138,8 @@ export const colourMaterials = {
|
|
|
138
138
|
// A warm white precast slab with bronze-tinted glass.
|
|
139
139
|
"building-michigan-plaza-front-tall": {
|
|
140
140
|
shell: ["neutral"],
|
|
141
|
-
"walls and windows": ["glass", { ...windows(0x727272, 0x484848), 0x666666: "concrete" }],
|
|
141
|
+
"walls and windows": ["glass", { ...windows(0x727272, 0x484848), 0x666666: "concrete", 0x5e5e5e: "concrete" }],
|
|
142
|
+
"south concrete panels": ["concrete"],
|
|
142
143
|
},
|
|
143
144
|
// Buff limestone over a granite base.
|
|
144
145
|
"building-willoughby-tower": {
|
|
@@ -263,7 +264,7 @@ export const colourMaterials = {
|
|
|
263
264
|
// Reflective blue-green glass in its frame.
|
|
264
265
|
"building-swissotel": {
|
|
265
266
|
shell: ["neutral"],
|
|
266
|
-
"curtain wall": ["blue-green glass", windows(0x878787, 0x515151)],
|
|
267
|
+
"curtain wall": ["blue-green glass", { ...windows(0x878787, 0x515151), 0x414141: "aluminium", 0x909090: "opaque spandrel" }],
|
|
267
268
|
},
|
|
268
269
|
};
|
|
269
270
|
// A batch's materials from its mesh's name, if the trial knows the building and the batch.
|
|
@@ -204,6 +204,9 @@ export const measuredColours = {
|
|
|
204
204
|
// docs/swissotel-reference.md, 2026-10-10 — Daytime colours from Chicago.jpg.
|
|
205
205
|
"building-swissotel": {
|
|
206
206
|
...glass(0x475056, "blue-green glass"),
|
|
207
|
+
// FID-SWI-002: mixed panorama sample does not resolve these separately.
|
|
208
|
+
"opaque spandrel": null,
|
|
209
|
+
aluminium: null,
|
|
207
210
|
neutral: null,
|
|
208
211
|
},
|
|
209
212
|
// docs/north-michigan-180-reference.md, 2026-10-10 — Daytime colours from Chicago.jpg. Only the
|
|
@@ -24,7 +24,7 @@ const floor = (n) => (n <= 8 ? h.lobby + (n - 2) * h.office : h.lobby + 6 * h.of
|
|
|
24
24
|
const color = (hex) => new THREE.Color(hex);
|
|
25
25
|
const glassTones = [0x2e2e2e, 0x323232, 0x363636, 0x3a3a3a].map(color);
|
|
26
26
|
const litGlass = color(0x727272), dimGlass = color(0x484848);
|
|
27
|
-
const concrete = color(0x666666), strip = color(0x3e3e3e), lobby = color(0x3a3a3a), core = color(0x262626), roofing = color(0x3e3e3e);
|
|
27
|
+
const concrete = color(0x666666), joint = color(0x5e5e5e), strip = color(0x3e3e3e), lobby = color(0x3a3a3a), core = color(0x262626), roofing = color(0x3e3e3e);
|
|
28
28
|
function paneColor(row, bay, wall) {
|
|
29
29
|
const hash = (Math.imul(row + 23, 0x9e3779b1) ^ Math.imul(bay + 47, 0x85ebca77) ^ Math.imul(wall + 37, 0xc2b2ae3d)) >>> 0;
|
|
30
30
|
const value = hash % 101;
|
|
@@ -45,6 +45,7 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
45
45
|
const kit = createBuilder(record.name, record.id);
|
|
46
46
|
const shell = kit.batch("Millennium Park Plaza · shell", kit.material(0xffffff, { vertexColors: true }));
|
|
47
47
|
const wall = kit.batch("Millennium Park Plaza · walls and windows", kit.material(0xffffff, { vertexColors: true }));
|
|
48
|
+
const panels = kit.batch("Millennium Park Plaza · south concrete panels", kit.material(0x666666));
|
|
48
49
|
const corners = orient(polygonOf(projectPlan(record.footprint.coordinates)));
|
|
49
50
|
// The slab, its walls the shell's dark core.
|
|
50
51
|
planOf(corners).forEach((run) => {
|
|
@@ -56,13 +57,15 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
56
57
|
// Every wall's skin, one box a chain, held 2 cm clear of its ends. A narrow end carries
|
|
57
58
|
// four window strips, 1.25 m wide and symmetrical about its middle, from the eighth floor,
|
|
58
59
|
// the first of apartments, with the top floor's window standing apart over each; below,
|
|
59
|
-
// the
|
|
60
|
+
// the office glazing is bounded by outer piers on the south (the north remains
|
|
61
|
+
// the older full-width approximation). A long face has a window every 3 m between
|
|
60
62
|
// 0.8 m piers. The chamfers are solid.
|
|
61
63
|
const plan = planOf(corners);
|
|
62
64
|
chainsOf(plan).forEach((chain, index) => {
|
|
63
65
|
const first = chain.runs[0], last = chain.runs.at(-1);
|
|
64
66
|
const s0 = turnsAt(plan, first)[0] > 0 ? 0.09 : 0.02, s1 = chain.length - (turnsAt(plan, last)[1] > 0 ? 0.09 : 0.02);
|
|
65
67
|
const end = chain.length > 12 && chain.length < 30, long = chain.length >= 30;
|
|
68
|
+
const south = end && plan[first].normal(0)[1] > 0.9;
|
|
66
69
|
let columns, isWindow;
|
|
67
70
|
if (end) {
|
|
68
71
|
const middle = chain.length / 2, centres = [-4.1, -1.6, 1.6, 4.1].map((d) => middle + d);
|
|
@@ -78,11 +81,15 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
78
81
|
columns = [0, chain.length];
|
|
79
82
|
isWindow = () => false;
|
|
80
83
|
}
|
|
81
|
-
chainSkin(kit, wall, plan, chain, 0, chain.runs.length - 1, s0, s1, columns, heights, 0.02, 0.07, (bay, r) => {
|
|
84
|
+
chainSkin(kit, wall, plan, chain, 0, chain.runs.length - 1, s0, s1, columns, heights, 0.02, south ? 0.04 : 0.07, (bay, r) => {
|
|
82
85
|
const row = rows[r];
|
|
83
86
|
if (row.kind === "lobby")
|
|
84
87
|
return lobby;
|
|
85
88
|
const office = row.floor < 8;
|
|
89
|
+
// Dated south views show the outer concrete piers continuing past the
|
|
90
|
+
// office windows; the earlier model glazed the entire end below floor 8.
|
|
91
|
+
if (south && (bay === 1 || bay === columns.length - 1 || (!office && !isWindow(bay))))
|
|
92
|
+
return joint;
|
|
86
93
|
if (end && !office && isWindow(bay)) {
|
|
87
94
|
if (row.kind === "glass")
|
|
88
95
|
return paneColor(row.floor, bay, index);
|
|
@@ -91,9 +98,25 @@ export function createMillenniumParkPlazaGeographicBuilding(record, projectPlan,
|
|
|
91
98
|
if (row.kind === "spandrel")
|
|
92
99
|
return concrete;
|
|
93
100
|
if (end)
|
|
94
|
-
return office ? paneColor(row.floor, bay, index) : concrete;
|
|
101
|
+
return office ? paneColor(row.floor, bay, index) : south ? joint : concrete;
|
|
95
102
|
return isWindow(bay) ? paneColor(row.floor, bay, index) : concrete;
|
|
96
103
|
}, concrete);
|
|
104
|
+
if (south) {
|
|
105
|
+
// 1980/2005/2008 photographs resolve horizontal joints on the solid end.
|
|
106
|
+
// Keep the existing estimated floor cadence; 5 cm joint width and 3 cm
|
|
107
|
+
// relief are schematic, not measured construction dimensions. Closed
|
|
108
|
+
// panels stand in front of the continuous, closed backing skin.
|
|
109
|
+
for (let bay = 1; bay < columns.length; bay += 2) {
|
|
110
|
+
const outer = bay === 1 || bay === columns.length - 1;
|
|
111
|
+
// End clearances keep panel caps off the backing skin's end-cap planes.
|
|
112
|
+
const from = Math.max(s0 + 0.01, columns[bay - 1]), to = Math.min(s1 - 0.01, columns[bay]);
|
|
113
|
+
for (let n = outer ? 2 : 8; n <= 41; n += 1) {
|
|
114
|
+
const lo = floor(n) - 0.3 + 0.025;
|
|
115
|
+
const hi = n === 41 ? h.top - 0.01 : floor(n + 1) - 0.3 - 0.025;
|
|
116
|
+
chainSkin(kit, panels, plan, chain, 0, chain.runs.length - 1, from, to, [from, to], [lo, hi], 0.035, 0.07, () => concrete, concrete);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
97
120
|
});
|
|
98
121
|
const model = kit.finish({ height: h.top, outlines: [shell], opacity: 0.16 });
|
|
99
122
|
model.building.position.set(offset[0], 0, offset[1]);
|
|
@@ -25,7 +25,7 @@ export const geographicBuildings = [
|
|
|
25
25
|
{ "id": "building-blue-cross-blue-shield", "name": "Blue Cross and Blue Shield Tower", "shortName": "Blue Cross", "height": 226.7, "tipHeight": 226.7, "heightSource": "https://www.skyscrapercenter.com/building/blue-cross-blue-shield-tower/1160", "note": "Detailed Blue Cross: the mapped outline and parts; a glass curtain wall on the 5 ft module, the central block standing forward of end bays open through at the middle mechanical band, three bands of mechanical floors with their columns, and the emblem screen to the published 226.7 m. The lobby's height is estimated.", "footprint": { "way": 95486960, "version": 16, "coordinates": [[-87.6204645, 41.8846925], [-87.620465, 41.8847182], [-87.6204697, 41.8849849], [-87.6203148, 41.8849886], [-87.6203086, 41.8850315], [-87.6201881, 41.8850329], [-87.6201798, 41.8850759], [-87.6201749, 41.8851015], [-87.6196594, 41.8851062], [-87.6196557, 41.8850788], [-87.6196503, 41.8850388], [-87.6195227, 41.8850407], [-87.6195157, 41.8850011], [-87.6193623, 41.8849997], [-87.6193587, 41.8849047], [-87.6193513, 41.8847032], [-87.6193817, 41.8847037], [-87.6194025, 41.8847041], [-87.6194595, 41.8847032], [-87.6194506, 41.8846598], [-87.6199021, 41.8846549], [-87.6203621, 41.8846501], [-87.6203607, 41.884669], [-87.6203595, 41.8846955]] }, "parts": [{ "way": 284779637, "version": 4, "coordinates": [[-87.6203086, 41.8850315], [-87.6203148, 41.8849886], [-87.6203559, 41.8847194], [-87.6203595, 41.8846955], [-87.6203607, 41.884669], [-87.6203621, 41.8846501], [-87.6202, 41.8846517], [-87.6199021, 41.8846549], [-87.6196193, 41.8846576], [-87.6194506, 41.8846598], [-87.6194595, 41.8847032], [-87.6195157, 41.8850011], [-87.6195227, 41.8850407], [-87.6196503, 41.8850388], [-87.6201881, 41.8850329]], "bottom": 0, "top": 226.7 }, { "way": 284779635, "version": 5, "coordinates": [[-87.6193623, 41.8849997], [-87.6195157, 41.8850011], [-87.6203148, 41.8849886], [-87.6204697, 41.8849849], [-87.620465, 41.8847182], [-87.6204645, 41.8846925], [-87.6203595, 41.8846955], [-87.6194595, 41.8847032], [-87.6194025, 41.8847041], [-87.6193817, 41.8847037], [-87.6193513, 41.8847032], [-87.6193587, 41.8849047]], "bottom": 0, "top": 212 }] },
|
|
26
26
|
{ "id": "building-340-on-the-park", "name": "340 on the Park", "shortName": "340 on the Park", "height": 204.9, "tipHeight": 204.9, "heightSource": "https://www.skyscrapercenter.com/building/340-on-the-park/1583", "note": "Detailed 340 on the Park: the mapped outline and parts; glass curtain walls on a straight south face, a diagonal south-east face and a curved north face, with the south face's white concrete frame: piers, a beam every fifth floor, a parapet band over four penthouse floors, cantilevered and recessed balconies, and the winter garden's tall bay. The corner block's roof is measured on photographs at 51.7 m, over the map's 40 m. Floor levels are measured on the drawing; the lobby's height is estimated.", "footprint": { "way": 95486949, "version": 12, "coordinates": [[-87.619168, 41.884674], [-87.6191536, 41.884912], [-87.6191146, 41.8849133], [-87.6190581, 41.8849113], [-87.6188847, 41.8849048], [-87.6187278, 41.8848896], [-87.6186525, 41.8848776], [-87.6185999, 41.8848701], [-87.6184438, 41.8848387], [-87.61849, 41.8848042], [-87.6184907, 41.8847024], [-87.6185294, 41.8847019], [-87.6186088, 41.8847009], [-87.6186482, 41.8847001], [-87.6186465, 41.8846785]] }, "parts": [{ "way": 284789056, "version": 4, "coordinates": [[-87.6191536, 41.884912], [-87.619168, 41.884674], [-87.6186465, 41.8846785], [-87.6186482, 41.8847001], [-87.6186088, 41.8847009], [-87.61849, 41.8848042], [-87.6184438, 41.8848387], [-87.6185999, 41.8848701], [-87.6186525, 41.8848776], [-87.6187278, 41.8848896], [-87.6188847, 41.8849048], [-87.6190581, 41.8849113], [-87.6191146, 41.8849133]], "bottom": 0, "top": 204.9 }, { "way": 284789058, "version": 4, "coordinates": [[-87.6186088, 41.8847009], [-87.6185294, 41.8847019], [-87.6184907, 41.8847024], [-87.61849, 41.8848042]], "bottom": 0, "top": 51.7, "estimatedHeight": true }] },
|
|
27
27
|
{ "id": "building-the-buckingham", "name": "The Buckingham", "shortName": "Buckingham", "height": 121.9, "tipHeight": 121.9, "heightSource": "https://www.skyscrapercenter.com/building/buckingham-plaza/10315", "note": "Detailed Buckingham: the mapped outline and rooftop part; a concrete frame of five bays a face, a band at every floor over bronze ribbon windows, the end bays standing forward of the middle three on the south, east and north faces, balconies stacked in the two notched corners, the top floor's tall openings under a cap at the mapped 119 m, and the rooftop enclosure to the published 121.9 m. Floor levels are measured on the drawing; the lobby's height is estimated.", "footprint": { "way": 95486940, "version": 11, "coordinates": [[-87.6181599, 41.8846507], [-87.6181604, 41.8847282], [-87.618162, 41.8847796], [-87.6181638, 41.8849686], [-87.6180927, 41.8849698], [-87.618091, 41.8849586], [-87.6178554, 41.8849597], [-87.6178564, 41.8849736], [-87.6177989, 41.8849746], [-87.6177849, 41.8849748], [-87.6177824, 41.8849587], [-87.6177569, 41.8849571], [-87.6177552, 41.8849011], [-87.617777, 41.8849005], [-87.6177734, 41.8847266], [-87.6177501, 41.8847273], [-87.6177485, 41.884672], [-87.6177809, 41.8846702], [-87.6177797, 41.8846527], [-87.617852, 41.8846523], [-87.617852, 41.8846679], [-87.618083, 41.8846651], [-87.618083, 41.8846511]] }, "parts": [{ "way": 95486940, "version": 11, "coordinates": [[-87.6181599, 41.8846507], [-87.6181604, 41.8847282], [-87.618162, 41.8847796], [-87.6181638, 41.8849686], [-87.6180927, 41.8849698], [-87.618091, 41.8849586], [-87.6178554, 41.8849597], [-87.6178564, 41.8849736], [-87.6177989, 41.8849746], [-87.6177849, 41.8849748], [-87.6177824, 41.8849587], [-87.6177569, 41.8849571], [-87.6177552, 41.8849011], [-87.617777, 41.8849005], [-87.6177734, 41.8847266], [-87.6177501, 41.8847273], [-87.6177485, 41.884672], [-87.6177809, 41.8846702], [-87.6177797, 41.8846527], [-87.617852, 41.8846523], [-87.617852, 41.8846679], [-87.618083, 41.8846651], [-87.618083, 41.8846511]], "bottom": 0, "top": 119 }, { "way": 284790189, "version": 1, "coordinates": [[-87.6180734, 41.8848536], [-87.6178346, 41.8848542], [-87.6178342, 41.8847737], [-87.6180731, 41.8847732]], "bottom": 119, "top": 121.9 }] },
|
|
28
|
-
{ "id": "building-michigan-plaza-front-tall", "name": "Millennium Park Plaza", "shortName": "Millennium Park Plaza", "height": 121.9, "tipHeight": 121.9, "heightSource": "https://www.skyscrapercenter.com/building/millennium-park-plaza/10316", "note": "Detailed Millennium Park Plaza: the mapped outline, named through the geographic camera; a 90 m concrete slab with chamfered south corners, offices on the first seven floors and apartments above, solid narrow ends with four slender window strips, and punched windows between piers on the long faces, to the published 121.9 m. Floor levels
|
|
28
|
+
{ "id": "building-michigan-plaza-front-tall", "name": "Millennium Park Plaza", "shortName": "Millennium Park Plaza", "height": 121.9, "tipHeight": 121.9, "heightSource": "https://www.skyscrapercenter.com/building/millennium-park-plaza/10316", "note": "Detailed Millennium Park Plaza: the mapped outline, named through the geographic camera; a 90 m concrete slab with chamfered south corners, offices on the first seven floors and apartments above, solid narrow ends with four slender window strips, and punched windows between piers on the long faces, to the published 121.9 m. South office glazing sits between continuous outer concrete piers; recessed south-panel joints follow the existing estimated floors. Floor levels, window widths and joint relief remain approximations.", "footprint": { "way": 127107026, "version": 7, "coordinates": [[-87.6240359, 41.8856557], [-87.624011, 41.8848485], [-87.6240357, 41.8848351], [-87.624242, 41.8848314], [-87.6242648, 41.8848508], [-87.6242799, 41.8856518]] }, "parts": [{ "way": 127107026, "version": 7, "coordinates": [[-87.6240359, 41.8856557], [-87.624011, 41.8848485], [-87.6240357, 41.8848351], [-87.624242, 41.8848314], [-87.6242648, 41.8848508], [-87.6242799, 41.8856518]], "bottom": 0, "top": 121.9 }] },
|
|
29
29
|
{ "id": "building-willoughby-tower", "name": "Willoughby Tower", "shortName": "Willoughby", "height": 133.5, "tipHeight": 133.5, "heightSource": "https://www.skyscrapercenter.com/building/willoughby-tower/9854", "note": "Detailed Willoughby Tower: the mapped L-shaped outline; a limestone Gothic base to the setback over the 23rd floor under a parapet of pinnacles, a shaft at the lot's south-east corner with a shoulder west of it, and a crown of arched windows under pinnacles and gables, its tallest pinnacles at the published 133.5 m. Levels are measured on the drawing; the shaft's plan is read from the drawing and photographs.", "footprint": { "way": 124873939, "version": 10, "coordinates": [[-87.6250765, 41.882002], [-87.6249763, 41.8820043], [-87.6249007, 41.8820051], [-87.624702, 41.8820073], [-87.6246761, 41.8820076], [-87.624674, 41.8819841], [-87.6246656, 41.8818144], [-87.6246642, 41.8817867], [-87.6247865, 41.881785], [-87.6249397, 41.8817829], [-87.624944, 41.8818519], [-87.6250739, 41.8818499]] }, "parts": [{ "way": 124873939, "version": 10, "coordinates": [[-87.6250765, 41.882002], [-87.6249763, 41.8820043], [-87.6249007, 41.8820051], [-87.624702, 41.8820073], [-87.6246761, 41.8820076], [-87.624674, 41.8819841], [-87.6246656, 41.8818144], [-87.6246642, 41.8817867], [-87.6247865, 41.881785], [-87.6249397, 41.8817829], [-87.624944, 41.8818519], [-87.6250739, 41.8818499]], "bottom": 0, "top": 133.5 }] },
|
|
30
30
|
{ "id": "building-six-north-michigan", "name": "Six North Michigan", "shortName": "Six North", "height": 86, "tipHeight": 86, "heightSource": "https://chicagology.com/goldenage/goldenage015/", "note": "Detailed Six North Michigan, the Montgomery Ward Building: the mapped outline; a sixteen-storey block under a projecting cornice, and the tower in the middle of its Michigan front, with a band, an arched stage of three tall windows to a face under a cornice, and a panelled top stage under a cap at the published 86 m, where the pyramid came off in 1947. Levels are measured on the drawing; the tower's plan is read from the drawing.", "footprint": { "way": 126982631, "version": 12, "coordinates": [[-87.6246862, 41.8824645], [-87.6246875, 41.8824613], [-87.6246872, 41.8824178], [-87.6246863, 41.8823638], [-87.624686, 41.8823412], [-87.6246848, 41.8822497], [-87.6246844, 41.882217], [-87.6249101, 41.8822147], [-87.6249772, 41.8822141], [-87.6252824, 41.8822112], [-87.6252834, 41.8823395], [-87.6252861, 41.8824613]] }, "parts": [{ "way": 126982631, "version": 12, "coordinates": [[-87.6246862, 41.8824645], [-87.6246875, 41.8824613], [-87.6246872, 41.8824178], [-87.6246863, 41.8823638], [-87.624686, 41.8823412], [-87.6246848, 41.8822497], [-87.6246844, 41.882217], [-87.6249101, 41.8822147], [-87.6249772, 41.8822141], [-87.6252824, 41.8822112], [-87.6252834, 41.8823395], [-87.6252861, 41.8824613]], "bottom": 0, "top": 86 }] },
|
|
31
31
|
{ "id": "building-six-north-far-east", "name": "Michigan Boulevard Building", "shortName": "Michigan Boulevard", "height": 82, "tipHeight": 83.3, "heightSource": "https://web.archive.org/web/20070216134331/http://www.emporis.com/en/wm/bu/?id=michiganboulevardbuilding-chicago-il-usa", "note": "Detailed Michigan Boulevard Building: the mapped outline, named through the geographic camera; a terracotta Michigan front of five bays, a single window and four pairs to a floor, over twenty-one storeys, with a belt course over the thirteenth and an attic of panels under the parapet at the published 82 m, its south bay's parapet raised to 83.3 m. The terracotta turns one bay onto the south wall, common brick beyond, blank above 20 North Michigan to the eighteenth floor. Levels are measured on the drawing.", "footprint": { "way": 126982630, "version": 8, "coordinates": [[-87.6246899, 41.8828465], [-87.6250574, 41.8828445], [-87.6250579, 41.8828698], [-87.6252905, 41.8828713], [-87.625293, 41.8831223], [-87.6251914, 41.8831227], [-87.6251166, 41.883123], [-87.6250744, 41.8831231], [-87.6249196, 41.8831237], [-87.6246922, 41.8831245], [-87.6246919, 41.8830972], [-87.6246898, 41.8828903], [-87.6246895, 41.8828674], [-87.6246898, 41.8828566]] }, "parts": [{ "way": 126982630, "version": 8, "coordinates": [[-87.6246899, 41.8828465], [-87.6250574, 41.8828445], [-87.6250579, 41.8828698], [-87.6252905, 41.8828713], [-87.625293, 41.8831223], [-87.6251914, 41.8831227], [-87.6251166, 41.883123], [-87.6250744, 41.8831231], [-87.6249196, 41.8831237], [-87.6246922, 41.8831245], [-87.6246919, 41.8830972], [-87.6246898, 41.8828903], [-87.6246895, 41.8828674], [-87.6246898, 41.8828566]], "bottom": 0, "top": 83.3 }] },
|
|
@@ -46,7 +46,7 @@ export const geographicBuildings = [
|
|
|
46
46
|
{ "id": "building-hyatt-regency-west-tower", "name": "Hyatt Regency Chicago West Tower", "shortName": "Hyatt West Tower", "height": 111.3, "tipHeight": 111.3, "heightSource": "https://www.skyscrapercenter.com/building/hyatt-regency-chicago-west-tower/13132", "note": "Detailed Hyatt Regency Chicago West Tower: its mapped part of the hotel's outline; a brick slab of 33 storeys, narrow window slots continuous from the lobby to the top two floors on a 3.5 m module between solid corners, and a plain band over them to a flat roof at the Skyscraper Center's 111.3 m. From the photograph's camera it stands between Aon Center and the Blue Cross and Blue Shield Tower, where the drawing's Blue Cross group paints a dark brown sliver.", "footprint": { "way": 235920252, "version": 4, "coordinates": [[-87.6227574, 41.887587], [-87.6228537, 41.887584], [-87.6228521, 41.8874603], [-87.6228518, 41.8874165], [-87.6225427, 41.8874231], [-87.6225408, 41.8875106], [-87.6225253, 41.8875109], [-87.6225266, 41.8875277], [-87.6225277, 41.8875513], [-87.622528, 41.8875746], [-87.6225382, 41.8878947], [-87.62255, 41.8878954], [-87.6225496, 41.8879846], [-87.6228658, 41.8879789], [-87.6228643, 41.8879388], [-87.6228611, 41.8878099], [-87.6227664, 41.8878103]] }, "parts": [{ "way": 235920252, "version": 4, "coordinates": [[-87.6227574, 41.887587], [-87.6228537, 41.887584], [-87.6228521, 41.8874603], [-87.6228518, 41.8874165], [-87.6225427, 41.8874231], [-87.6225408, 41.8875106], [-87.6225253, 41.8875109], [-87.6225266, 41.8875277], [-87.6225277, 41.8875513], [-87.622528, 41.8875746], [-87.6225382, 41.8878947], [-87.62255, 41.8878954], [-87.6225496, 41.8879846], [-87.6228658, 41.8879789], [-87.6228643, 41.8879388], [-87.6228611, 41.8878099], [-87.6227664, 41.8878103]], "bottom": 0, "top": 111.3 }] },
|
|
47
47
|
{ "id": "building-buckingham-east", "name": "Sheraton Grand Chicago Riverwalk", "shortName": "Sheraton Grand", "height": 112.3, "tipHeight": 112.3, "heightSource": "https://www.skyscrapercenter.com/building/sheraton-chicago-hotel-towers/10020", "note": "Detailed Sheraton Grand Chicago Riverwalk: the mapped tower and its corner part; a cream precast tower on an L of punched windows at Emporis's 2.67 m floor-to-floor, its arms to 94.76 m, the corner's round tower two floors higher to 100.1 m, and pale stepped frames under dark louvered screens on all four round ends, with the smaller bases approximated from the principal frame. The main crown reaches the Skyscraper Center's 112.3 m. Heights stand on the Skyscraper Center's datum: its top floor at 97 m, a floor-to-roof of 3.1 m and a 12.2 m main crown from Emporis; photographic ratios estimate about 7.2 m crowns on the arms and 6 m on the east wing; the published height nearest the drawing's reading, over Emporis's 330.56 ft. The Skyscraper Center's 112.8 m tip, 50 cm over the drum, is not modelled. The drawing's buckingham-east group is its corner's lit drum over its tower. The mapped east wing and its round end continue the hotel to the east, with estimated roofs at 84.08 m and 86.75 m on the same height datum and a fourth crown. Photographs from before 2013 establish the wing; exact roof and crown dimensions remain inferred.", "footprint": { "way": 592122464, "version": 5, "coordinates": [[-87.6199499, 41.8891119], [-87.6199176, 41.8893381], [-87.6199306, 41.8893589], [-87.6199502, 41.8893716], [-87.6199845, 41.8893878], [-87.6200276, 41.8893957], [-87.6200732, 41.8893915], [-87.6201147, 41.8893744], [-87.6201372, 41.8893482], [-87.6201463, 41.8893162], [-87.6201584, 41.8892447], [-87.6201841, 41.889063], [-87.6201875, 41.8890302], [-87.6201812, 41.8889946], [-87.6201588, 41.8889641], [-87.620121, 41.8889384], [-87.6200743, 41.8889276], [-87.6196505, 41.8888958], [-87.6196025, 41.8889162], [-87.6195726, 41.8889427], [-87.6195591, 41.8889735], [-87.6195627, 41.8890068], [-87.6195846, 41.8890373], [-87.6196228, 41.8890638], [-87.6198263, 41.8890777], [-87.6198225, 41.889104]] }, "parts": [{ "way": 592122464, "version": 5, "coordinates": [[-87.6199499, 41.8891119], [-87.6199176, 41.8893381], [-87.6199306, 41.8893589], [-87.6199502, 41.8893716], [-87.6199845, 41.8893878], [-87.6200276, 41.8893957], [-87.6200732, 41.8893915], [-87.6201147, 41.8893744], [-87.6201372, 41.8893482], [-87.6201463, 41.8893162], [-87.6201584, 41.8892447], [-87.6201841, 41.889063], [-87.6201875, 41.8890302], [-87.6201812, 41.8889946], [-87.6201588, 41.8889641], [-87.620121, 41.8889384], [-87.6200743, 41.8889276], [-87.6196505, 41.8888958], [-87.6196025, 41.8889162], [-87.6195726, 41.8889427], [-87.6195591, 41.8889735], [-87.6195627, 41.8890068], [-87.6195846, 41.8890373], [-87.6196228, 41.8890638], [-87.6198263, 41.8890777], [-87.6198225, 41.889104]], "bottom": 0, "top": 94.76 }, { "way": 1269924307, "version": 1, "coordinates": [[-87.6199691, 41.8890378], [-87.6199677, 41.889013], [-87.6199719, 41.8889952], [-87.6199903, 41.8889744], [-87.6200135, 41.88896], [-87.6200416, 41.8889517], [-87.6200717, 41.8889503], [-87.6201037, 41.8889568], [-87.6201308, 41.8889711], [-87.6201498, 41.8889914], [-87.6201583, 41.8890152], [-87.6201555, 41.8890398], [-87.6201415, 41.8890622], [-87.6201241, 41.8890776], [-87.6200882, 41.8890904], [-87.6200552, 41.8890928], [-87.6200258, 41.8890875], [-87.6200001, 41.8890757], [-87.6199805, 41.8890586]], "bottom": 94.76, "top": 100.1 }, { "way": 1269924305, "version": 1, "coordinates": [[-87.6191033, 41.8890226], [-87.6190622, 41.8889954], [-87.6190428, 41.8889627], [-87.6190431, 41.8889236], [-87.6190607, 41.8888928], [-87.619091, 41.8888724], [-87.6191278, 41.8888566], [-87.6193634, 41.8888743], [-87.6196505, 41.8888958], [-87.6196025, 41.8889162], [-87.6195726, 41.8889427], [-87.6195591, 41.8889735], [-87.6195627, 41.8890068], [-87.6195846, 41.8890373], [-87.6196228, 41.8890638]], "bottom": 0, "top": 84.08, "estimatedHeight": true }, { "way": 1269924304, "version": 1, "coordinates": [[-87.619112, 41.8888866], [-87.61909, 41.8888996], [-87.6190746, 41.888917], [-87.6190672, 41.8889372], [-87.6190685, 41.8889581], [-87.6190786, 41.8889777], [-87.6190963, 41.8889939], [-87.6191199, 41.8890052], [-87.6191471, 41.8890105], [-87.6191778, 41.8890088], [-87.6192059, 41.8889994], [-87.619228, 41.8889835], [-87.6192416, 41.8889629], [-87.6192449, 41.8889401], [-87.6192376, 41.8889179], [-87.6192207, 41.8888988], [-87.6191959, 41.8888851], [-87.6191665, 41.8888785], [-87.6191384, 41.8888793]], "bottom": 84.08, "top": 86.75, "estimatedHeight": true }], "groundFootprintWays": [592122464, 1269924305] },
|
|
48
48
|
{ "id": "building-three-illinois-center", "name": "Three Illinois Center", "shortName": "Three Illinois Center", "height": 106.7, "tipHeight": 106.7, "heightSource": "https://www.skyscrapercenter.com/building/three-illinois-center/13913", "note": "Detailed Three Illinois Center: the mapped outline; a dark bronze curtain wall of 30 storeys, mullions on a 5 ft module and glass over a spandrel on each floor at the published 11.5 ft slab to slab over a 5.06 m lobby, and the top two floors' windowless mechanical penthouse, glazed about 2019 but kept as the 2013 photograph shows it, under a flat roof at the Skyscraper Center's and Emporis's 350 ft. Its east end fills the gap between 340 on the Park and The Buckingham, where the drawing's buckingham-west group paints an office tower whose top stands about 140 layer units higher.", "footprint": { "way": 95486958, "version": 12, "coordinates": [[-87.6204966, 41.8869542], [-87.6202534, 41.8869566], [-87.6200384, 41.8869571], [-87.6200396, 41.887005], [-87.6200455, 41.8873733], [-87.620058, 41.8876286], [-87.6205101, 41.8876189], [-87.6205054, 41.8873683]] }, "parts": [{ "way": 95486958, "version": 12, "coordinates": [[-87.6204966, 41.8869542], [-87.6202534, 41.8869566], [-87.6200384, 41.8869571], [-87.6200396, 41.887005], [-87.6200455, 41.8873733], [-87.620058, 41.8876286], [-87.6205101, 41.8876189], [-87.6205054, 41.8873683]], "bottom": 0, "top": 106.7 }] },
|
|
49
|
-
{ "id": "building-swissotel", "name": "Swissôtel Chicago", "shortName": "Swissôtel", "height": 139.3, "tipHeight": 139.3, "heightSource": "https://www.skyscrapercenter.com/building/swissotel-chicago/4362", "note": "Detailed Swissôtel Chicago: the hotel's mapped tower part, a triangle; a flush grid of reflective
|
|
49
|
+
{ "id": "building-swissotel", "name": "Swissôtel Chicago", "shortName": "Swissôtel", "height": 139.3, "tipHeight": 139.3, "heightSource": "https://www.skyscrapercenter.com/building/swissotel-chicago/4362", "note": "Detailed Swissôtel Chicago: the hotel's mapped tower part, a triangle; a flush grid of reflective vision windows above pale opaque floor bands, with thin mullions about 1.5 m apart and paired transoms in each of 45 retained modules. The bands take about 45% of each module from 2012 photographic ratios; precise occupied-floor and mechanical-row counts remain unresolved. The flat roof stays at the Skyscraper Center's 139.3 m. It stands behind Three Illinois Center and The Buckingham from the drawing's camera, and fills the seam where their corners meet. The hotel's outline, 95486966, adds a small block on the tower's north-east face, and its podium, 95486953, carries no height; neither is modelled.", "footprint": { "way": 641288601, "version": 3, "coordinates": [[-87.6194102, 41.8874254], [-87.619534, 41.8875706], [-87.619676, 41.8873866], [-87.6198184, 41.8871906], [-87.6192311, 41.8871971], [-87.619375, 41.8873843]] }, "parts": [{ "way": 641288601, "version": 3, "coordinates": [[-87.6194102, 41.8874254], [-87.619534, 41.8875706], [-87.619676, 41.8873866], [-87.6198184, 41.8871906], [-87.6192311, 41.8871971], [-87.619375, 41.8873843]], "bottom": 0, "top": 139.3 }] },
|
|
50
50
|
];
|
|
51
51
|
// Every vehicular street on the upper or surface level across the 3D skyline's ground, from
|
|
52
52
|
// a separate extract retrieved 2026-09-30: OpenStreetMap's roads and their links, and its
|
|
@@ -6,25 +6,28 @@ import { chainSkin, chainsOf, orient, paintedSlab, planOf, turnsAt } from "./fac
|
|
|
6
6
|
// the photograph's camera it stands behind Three Illinois Center and The Buckingham, and fills
|
|
7
7
|
// the seam where their corners meet.
|
|
8
8
|
//
|
|
9
|
-
// A triangular tower of reflective glass
|
|
10
|
-
//
|
|
9
|
+
// A triangular tower of reflective glass and opaque bands: thin mullions about 1.5 m apart and
|
|
10
|
+
// paired opaque spandrel / vision panels at each floor, under a flat roof at the published 139.3 m. The
|
|
11
11
|
// floors divide that height by OpenStreetMap's 45 levels. See docs/swissotel-reference.md.
|
|
12
12
|
// Units are meters; +x is east, +z is south.
|
|
13
13
|
export const swissotelLevels = Object.freeze({
|
|
14
|
-
levels: 45, //
|
|
14
|
+
levels: 45, // retained module count; OSM and Enclos both report 45 storeys
|
|
15
15
|
roof: 139.3, // the published height, the Skyscraper Center's 457 ft
|
|
16
16
|
module: 1.5, // the mullions' spacing, read on the photographs
|
|
17
|
+
spandrel: 1.4, // about 45% of the retained floor pitch; 2012 photographs, ±0.2 m
|
|
17
18
|
frame: 0.06, // each mullion's and transom's width
|
|
18
19
|
coping: 0.1, // the roof's coping over the top panel
|
|
19
20
|
});
|
|
20
21
|
const h = swissotelLevels;
|
|
21
22
|
const pitch = h.roof / h.levels;
|
|
22
|
-
//
|
|
23
|
-
|
|
23
|
+
// Window tones are distinct from frames and opaque spandrels. The pale band
|
|
24
|
+
// is an explicit grey fallback, not a calibrated sunny-day colour.
|
|
25
|
+
export const swissotelPalette = Object.freeze({ glass: [0x2d2d2d, 0x313131, 0x353535, 0x292929], lit: 0x878787, dim: 0x515151, frame: 0x414141, spandrel: 0x909090 });
|
|
24
26
|
const palette = swissotelPalette;
|
|
25
27
|
const color = (hex) => new THREE.Color(hex);
|
|
26
28
|
const glassTones = palette.glass.map(color);
|
|
27
29
|
const litGlass = color(palette.lit), dimGlass = color(palette.dim), frame = color(palette.frame);
|
|
30
|
+
const spandrel = color(palette.spandrel);
|
|
28
31
|
const core = color(0x1e1e1e), roofing = color(0x323232);
|
|
29
32
|
function paneColor(row, bay, wall) {
|
|
30
33
|
const hash = (Math.imul(row + 71, 0x9e3779b1) ^ Math.imul(bay + 13, 0x85ebca77) ^ Math.imul(wall + 47, 0xc2b2ae3d)) >>> 0;
|
|
@@ -38,7 +41,10 @@ function paneColor(row, bay, wall) {
|
|
|
38
41
|
export const swissotelRows = [];
|
|
39
42
|
for (let n = 1; n <= h.levels; n += 1) {
|
|
40
43
|
const lo = n === 1 ? 0.25 : (n - 1) * pitch + h.frame / 2, hi = n === h.levels ? h.roof - h.coping : n * pitch - h.frame / 2;
|
|
41
|
-
|
|
44
|
+
const split = (n - 1) * pitch + h.spandrel;
|
|
45
|
+
swissotelRows.push({ lo, hi: split - h.frame / 2, kind: "spandrel", floor: n });
|
|
46
|
+
swissotelRows.push({ lo: split - h.frame / 2, hi: split + h.frame / 2, kind: "frame", floor: n });
|
|
47
|
+
swissotelRows.push({ lo: split + h.frame / 2, hi, kind: "glass", floor: n });
|
|
42
48
|
swissotelRows.push({ lo: hi, hi: n === h.levels ? h.roof : n * pitch + h.frame / 2, kind: "frame", floor: n });
|
|
43
49
|
}
|
|
44
50
|
const rows = swissotelRows;
|
|
@@ -68,6 +74,8 @@ export function createSwissotelGeographicBuilding(record, projectPlan, offset) {
|
|
|
68
74
|
const row = rows[r], middle = (columns[bay - 1] + columns[bay]) / 2;
|
|
69
75
|
if (row.kind === "frame" || lines.some((c) => Math.abs(middle - c) < h.frame / 2))
|
|
70
76
|
return frame;
|
|
77
|
+
if (row.kind === "spandrel")
|
|
78
|
+
return spandrel;
|
|
71
79
|
return paneColor(row.floor, bay, index);
|
|
72
80
|
}, frame);
|
|
73
81
|
});
|