@adatechnology/game-floorplan-structure 2.0.1 → 2.1.0

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/README.md CHANGED
@@ -14,6 +14,24 @@ plan.structure.supports // what each part rests on, down to 'ground'
14
14
 
15
15
  A free-standing wall: `buildStructure(plan, { roof: false })` leaves the roof out, so a plan with one exterior wall stands as a house wall does (on the strip footing, with the bond beam on it). `wallPiece` of `game-floorplan-three` builds and draws such a wall; every wall of a scene or a game is made that way.
16
16
 
17
+ Structural validation: `validateStructure(structure, { doors, wallDetail })` checks a structure as a structural engineer would sign it and returns typed
18
+ violations (`{ code, part, message }`, codes in `STRUCTURAL_VIOLATION`): load paths (`FLOATING_PART`, `PILLAR_NOT_GROUNDED`), reinforced concrete by
19
+ NBR 6118 (`CONCRETE_BELOW_MIN_SECTION`: pillars of 19 cm and 360 cm², beams 12 cm wide and L/10 deep between point supports; `UNREINFORCED_CONCRETE`;
20
+ `BEAM_ON_WEAK_MASONRY`) and, in masonry, confined masonry: `MISSING_GROUND_BEAM`, `WALL_END_WITHOUT_PILLAR`, `CORNER_WITHOUT_PILLAR`,
21
+ `WALL_JUNCTION_WITHOUT_PILLAR`, `WALL_SPAN_WITHOUT_PILLAR` (more than `MAX_PILLAR_SPACING`, 4 m), `PILLAR_DOES_NOT_REACH_BOND_BEAM`, `MISSING_BOND_BEAM`,
22
+ `OPENING_WITHOUT_LINTEL`, `OPENING_WITHOUT_SILL`, `UNBONDED_MASONRY`, `MISSING_PLASTER`. `validateSpec(spec)` checks a spec built straight (towers,
23
+ skyscrapers) for load paths and sections; `countViolations` tallies them. Every typology of the floorplan packages runs through it in its
24
+ `tests/construction.test.ts`:
25
+
26
+ ```ts
27
+ const plan = engine.generate('townhouse', { seed: 7 })
28
+ validateStructure(plan.structure, { doors: plan.doors }) // [] : nothing a structural engineer would refuse
29
+ ```
30
+
31
+ A masonry house stands on reinforced concrete ground beams (`ground_beam_*`, viga baldrame, `GROUND_BEAM_DEPTH` deep, buried, anchored in the spec;
32
+ `groundBeams: false` leaves them out), with concrete pillars from the floor to the bond beam, a lintel over every opening (h = L/10, the wide doors on
33
+ jamb pillars) and a sill beam (`_sillbeam_`, `SILL_BEAM_DEPTH`) under every window.
34
+
17
35
  Tall buildings: `buildTower()` builds a frame with continuous columns, a concrete core with stairs and elevator shafts, a glass curtain wall, a flat
18
36
  roof with its membrane and the mechanical floor (`addCore`, `addCurtainWall`, `addFlatRoof`, `addMechanicalFloor` add each one to any frame spec).
19
37
  Wind: `buildTower({ wind: { speed, terrain }, damper: true })` sizes the tower for the wind and adds a tuned mass damper (`addTunedMassDamper`, `DAMPER_DEFAULTS`)
package/dist/index.d.ts CHANGED
@@ -38,8 +38,10 @@ interface StructurePart {
38
38
  unit?: true;
39
39
  /** Distance between repeated members (joists, ceiling joists). */
40
40
  spacing?: number;
41
- /** `plate` (timber top plate) or `bond_beam` (masonry bond beam). */
42
- beamKind?: 'plate' | 'bond_beam';
41
+ /** `plate` (timber top plate), `bond_beam` (masonry bond beam) or `ground_beam` (the masonry ground beam, viga baldrame, buried under a ground-floor wall). */
42
+ beamKind?: 'plate' | 'bond_beam' | 'ground_beam';
43
+ /** An exterior wall (it carries the bond beam and the pillars of confined masonry). */
44
+ exterior?: true;
43
45
  steps?: number;
44
46
  door?: string;
45
47
  /** Slab that is the roof (flat roof). */
@@ -329,6 +331,17 @@ interface StructureOptions {
329
331
  wallDetail?: WallDetail;
330
332
  /** `false`: no roof (a free-standing wall, a garden wall). Default `true`. */
331
333
  roof?: boolean;
334
+ /**
335
+ * Concrete pillars along the exterior masonry walls besides the corner ones (at the free ends and door jambs, beside the windows, where walls meet and at
336
+ * most every `spacing` metres, default `WALL_PILLAR_SPACING`). `false`: only the corner pillars. Default `true`.
337
+ */
338
+ wallPillars?: boolean | {
339
+ spacing?: number;
340
+ };
341
+ /** A reinforced concrete ground beam (viga baldrame) under each ground-floor wall of a masonry house on strip footings (`GROUND_BEAM_DEPTH` deep). Default `true`. */
342
+ groundBeams?: boolean;
343
+ /** The sections the Visor de casas 3D drew below the NBR 6118 minimum (16 cm balcony pillars), for the team's golden only. Default `false`. */
344
+ visorSections?: boolean;
332
345
  }
333
346
  /** What a construction builder and the tank get to see: the generated plan, its seed and the template. */
334
347
  interface PlanContext {
@@ -348,6 +361,9 @@ interface PlanContext {
348
361
  */
349
362
  declare function buildStructure(source: StructureSource, options?: StructureOptions): Structure;
350
363
 
364
+ /** Depth of the sill beam under a window of a masonry wall, metres (a contraverga is usually 10 cm). */
365
+ declare const SILL_BEAM_DEPTH = 0.1;
366
+
351
367
  interface PartsAndSupports {
352
368
  parts: StructurePart[];
353
369
  supports: Support[];
@@ -490,6 +506,16 @@ declare const MEMBER_CAGE: {
490
506
  diameter: number;
491
507
  unit: number;
492
508
  };
509
+ /**
510
+ * What the bare cage of a concrete pillar still carries once its concrete is blown off, as the share of the pillar's `capacity` (kg) the destruction
511
+ * world keeps for it (`reinforcement.residualCapacity`): its perimeter bars (at most `spacing` apart, at least two a face) by the steel's crushing
512
+ * strength, halved for buckling between the stirrups. A pillar under a light bond beam keeps standing on its cage; a loaded one still gives way.
513
+ */
514
+ declare function cageResidualCapacity(size: readonly number[], reinforcement: {
515
+ material: string;
516
+ spacing: number;
517
+ diameter: number;
518
+ }, capacity: number | undefined): number;
493
519
  /**
494
520
  * The structure as a `DestructibleSpec` in the space of the house (x = u, y = height, z = v; the ground is y = 0), one box per part and a terrain slab
495
521
  * that anchors it. Capacities are sized from the loads at rest, as a designer would: a house stands whole, holds the loss of one pillar or bearing wall
@@ -497,38 +523,6 @@ declare const MEMBER_CAGE: {
497
523
  */
498
524
  declare function toDestructibleSpec(structure: Structure, options?: DestructibleSpecOptions): DestructibleSpec;
499
525
 
500
- interface WallSpecimenOptions {
501
- /** Wall assembly of `game-destruction` (`brick_wall_plastered`, `concrete_block_wall`, `reinforced_concrete`, `drywall`, `wood_frame_wall`, `log_wall`, `sheet_metal_shack`...). */
502
- assembly: string;
503
- /** Width and height in metres (the test area uses 2.4 x 2.1). */
504
- w: number;
505
- h: number;
506
- opening?: 'door' | 'window' | null;
507
- /** Default `panels`: piers, lintel with its 0.2 m bearing, sill, plaster and rebar; `units` also lays the bricks, blocks or concrete panels one by one. */
508
- detail?: WallDetail;
509
- }
510
- /**
511
- * A test wall as its assembly builds it, standing on a plinth: in `panels` the piers beside the opening, the lintel over it (reinforced concrete bearing 0.2 m on
512
- * the piers; a header in timber walls), the sill under a window and the wall above; with the plaster coat and the rebar of the assembly. The mass is the
513
- * assembly's for the whole w x h, whatever the detail.
514
- */
515
- declare function buildWallSpecimen(options: WallSpecimenOptions): DestructibleSpec;
516
-
517
- type Rng = () => number;
518
- interface TankPlanOptions {
519
- /** Litres by template id or style id (default: budget 500, mid 1000, mansion 3000, any other 2000). */
520
- capacities?: Record<string, number>;
521
- /** Where the tank goes; default: on the slab of a flat roof, else on a raised platform (the attic one time in eight). */
522
- location?: (source: StructureSource, rng: Rng) => WaterTank['place'];
523
- /** A template with its own tank (a trestle for the rural water) answers here instead. */
524
- custom?: (source: StructureSource, rng: Rng) => WaterTank | null;
525
- }
526
- /**
527
- * The water tank of a house: on the roof slab, in the attic, or on a platform that rises out of the roof, never in the yard. Null for a plan without
528
- * a lot (an apartment) or a commercial building, and when no room has space.
529
- */
530
- declare function planWaterTank(source: StructureSource, rng: Rng, options?: TankPlanOptions): WaterTank | null;
531
-
532
526
  /** What a wall system is made of and how its parts are tied. Timber systems sit on joists, carry the roof on timber plates and have wooden porch posts. */
533
527
  interface ConstructionSystemDef {
534
528
  /** Wall assembly of `game-destruction` (`registerAssembly`) the detailed wall is built from. Empty: no walls (a tent). */
@@ -567,6 +561,130 @@ declare const CONSTRUCTIONS: Map<string, ConstructionBuilder>;
567
561
  /** Registers how a template's building is made: `TemplateDef.construction` names it. A template without one gets the masonry default. */
568
562
  declare function registerConstruction(id: string, builder: ConstructionBuilder): void;
569
563
 
564
+ /**
565
+ * Most a masonry wall runs between two of its concrete pillars, metres. Confined masonry (alvenaria confinada / de vedação with a concrete frame) puts a pillar
566
+ * every 3 to 5 m, at the corners, where walls meet and beside the openings; 4 m is the middle of that range.
567
+ */
568
+ declare const WALL_PILLAR_SPACING = 4;
569
+ /** Side of a wall pillar, metres: 0.2 x 0.2 m, as the corner pillars (NBR 6118 asks at least 19 cm for a pillar). */
570
+ declare const WALL_PILLAR_SIDE = 0.2;
571
+ /**
572
+ * Centres of the pillars of a stretch: at each end (inside the stretch, flush with it), at the walls that meet it, and in between so that no span passes
573
+ * `spacing`. A short pier still gets one at each end (a door jamb beside a corner keeps its own pillar; `addWallPillars` drops the one a pillar already
574
+ * stands near); one too short for two gets one in its middle, and one too short for a pillar none.
575
+ */
576
+ declare function pillarStations(from: number, to: number, junctions: readonly number[], spacing: number): number[];
577
+
578
+ /** Depth of the ground beam (viga baldrame) under a ground-floor masonry wall, metres: the usual 15 x 30 cm, as wide as the wall. */
579
+ declare const GROUND_BEAM_DEPTH = 0.3;
580
+
581
+ type Rng = () => number;
582
+ /** Side of the concrete pillars of a raised tank slab, metres: NBR 6118 asks at least 19 cm. */
583
+ declare const TANK_PILLAR_SIDE = 0.2;
584
+ interface TankPlanOptions {
585
+ /** Litres by template id or style id (default: budget 500, mid 1000, mansion 3000, any other 2000). */
586
+ capacities?: Record<string, number>;
587
+ /** Where the tank goes; default: on the slab of a flat roof, else on a raised platform (the attic one time in eight). */
588
+ location?: (source: StructureSource, rng: Rng) => WaterTank['place'];
589
+ /** A template with its own tank (a trestle for the rural water) answers here instead. */
590
+ custom?: (source: StructureSource, rng: Rng) => WaterTank | null;
591
+ /** Side of the platform's concrete pillars (default `TANK_PILLAR_SIDE`; the Visor de casas 3D drew 0.12 m). */
592
+ pillarSide?: number;
593
+ }
594
+ /**
595
+ * The water tank of a house: on the roof slab, in the attic, or on a platform that rises out of the roof, never in the yard. Null for a plan without
596
+ * a lot (an apartment) or a commercial building, and when no room has space.
597
+ */
598
+ declare function planWaterTank(source: StructureSource, rng: Rng, options?: TankPlanOptions): WaterTank | null;
599
+
600
+ /** Stable codes of what `validateStructure` and `validateSpec` find wrong in a construction. */
601
+ declare const STRUCTURAL_VIOLATION: {
602
+ /** A pillar with no load path to the ground, or that starts above what it rests on. */
603
+ readonly PILLAR_NOT_GROUNDED: "PILLAR_NOT_GROUNDED";
604
+ /** A pillar of a masonry wall that stops short of the bond beam, or that the bond beam does not rest on. */
605
+ readonly PILLAR_DOES_NOT_REACH_BOND_BEAM: "PILLAR_DOES_NOT_REACH_BOND_BEAM";
606
+ /** A masonry wall that runs more than `MAX_PILLAR_SPACING` between two of its pillars. */
607
+ readonly WALL_SPAN_WITHOUT_PILLAR: "WALL_SPAN_WITHOUT_PILLAR";
608
+ /** A free end of a masonry wall (a door jamb, the end of a garden wall) with no pillar. */
609
+ readonly WALL_END_WITHOUT_PILLAR: "WALL_END_WITHOUT_PILLAR";
610
+ /** Two masonry walls meet at a corner with no pillar there. */
611
+ readonly CORNER_WITHOUT_PILLAR: "CORNER_WITHOUT_PILLAR";
612
+ /** Another wall meets a masonry wall inside its length (a T) with no pillar there. */
613
+ readonly WALL_JUNCTION_WITHOUT_PILLAR: "WALL_JUNCTION_WITHOUT_PILLAR";
614
+ /** A window or door in a masonry wall with no lintel (verga) over it. */
615
+ readonly OPENING_WITHOUT_LINTEL: "OPENING_WITHOUT_LINTEL";
616
+ /** A window in a masonry wall with no sill beam (contraverga) under it. */
617
+ readonly OPENING_WITHOUT_SILL: "OPENING_WITHOUT_SILL";
618
+ /** An exterior masonry wall with no bond beam (cinta de amarração) on top. */
619
+ readonly MISSING_BOND_BEAM: "MISSING_BOND_BEAM";
620
+ /** A ground-floor masonry wall standing on the soil with no ground beam (viga baldrame) or foundation under it. */
621
+ readonly MISSING_GROUND_BEAM: "MISSING_GROUND_BEAM";
622
+ /** A part with no load path down to the ground. */
623
+ readonly FLOATING_PART: "FLOATING_PART";
624
+ /** A concrete beam longer than a lintel that rests on masonry alone (no pillar, beam or slab carries it). */
625
+ readonly BEAM_ON_WEAK_MASONRY: "BEAM_ON_WEAK_MASONRY";
626
+ /** A concrete pillar or beam below the NBR 6118 minimum section, or a beam between point supports shallower than a tenth of its span. */
627
+ readonly CONCRETE_BELOW_MIN_SECTION: "CONCRETE_BELOW_MIN_SECTION";
628
+ /** A concrete pillar or beam with no steel (the construction has no rebar). */
629
+ readonly UNREINFORCED_CONCRETE: "UNREINFORCED_CONCRETE";
630
+ /** A brick or block wall laid in stack bond: the vertical joints line up and the wall splits along them. */
631
+ readonly UNBONDED_MASONRY: "UNBONDED_MASONRY";
632
+ /** A plastered brick wall without plaster on both faces. */
633
+ readonly MISSING_PLASTER: "MISSING_PLASTER";
634
+ };
635
+ type StructuralViolationCode = (typeof STRUCTURAL_VIOLATION)[keyof typeof STRUCTURAL_VIOLATION];
636
+ /** One thing a construction gets wrong: the code, the part (or opening) it is about and the rule it breaks, in words. */
637
+ interface StructuralViolation {
638
+ readonly code: StructuralViolationCode;
639
+ readonly part: string;
640
+ readonly message: string;
641
+ }
642
+ /** Most metres a masonry wall runs between two pillars (confined masonry: 3 to 4 m; `WALL_PILLAR_SPACING` is 4). */
643
+ declare const MAX_PILLAR_SPACING = 4;
644
+ /** NBR 6118 13.2.3: no side of a pillar under 19 cm, and at least 360 cm² of section. */
645
+ declare const MIN_PILLAR_SIDE = 0.19;
646
+ declare const MIN_PILLAR_AREA = 0.036;
647
+ /** NBR 6118 13.2.2: a beam at least 12 cm wide. */
648
+ declare const MIN_BEAM_WIDTH = 0.12;
649
+ /** A beam between point supports is at least a tenth of its span deep (pre-sizing of reinforced concrete beams, h = L/10). */
650
+ declare const BEAM_DEPTH_RATIO = 10;
651
+ /** A concrete beam that only masonry carries may be a lintel up to this span; a longer one needs pillars. */
652
+ declare const MAX_LINTEL_ON_MASONRY = 3;
653
+
654
+ interface ValidateStructureOptions {
655
+ /** Detail the walls are built in for play (default `panels`, as the houses are): the lintels and sill beams of the windows come from it. */
656
+ wallDetail?: WallDetail;
657
+ /** The doors of the plan (`plan.doors`): each door gap in a masonry wall needs a lintel. Without them only the windows are checked. */
658
+ doors?: readonly SourceDoor[];
659
+ }
660
+ /**
661
+ * What a structure gets wrong as a real building: load paths (every part down to the ground, every pillar on what carries it), reinforced concrete (NBR
662
+ * 6118 sections, steel, beam depth) and, in masonry, confined masonry (ground beam, pillars at ends, corners, junctions and every 4 m up to the bond beam,
663
+ * lintels and sill beams, bonded and plastered bricks). An empty list is a structure that a structural engineer would sign.
664
+ */
665
+ declare function validateStructure(structure: Structure, options?: ValidateStructureOptions): StructuralViolation[];
666
+ /** What a destructible spec built straight as one (towers, skyscrapers) gets wrong: load paths and concrete sections. */
667
+ declare function validateSpec(spec: DestructibleSpec): StructuralViolation[];
668
+ /** The violations counted by code (for reports and tests). */
669
+ declare function countViolations(violations: readonly StructuralViolation[]): Partial<Record<keyof typeof STRUCTURAL_VIOLATION, number>>;
670
+
671
+ interface WallSpecimenOptions {
672
+ /** Wall assembly of `game-destruction` (`brick_wall_plastered`, `concrete_block_wall`, `reinforced_concrete`, `drywall`, `wood_frame_wall`, `log_wall`, `sheet_metal_shack`...). */
673
+ assembly: string;
674
+ /** Width and height in metres (the test area uses 2.4 x 2.1). */
675
+ w: number;
676
+ h: number;
677
+ opening?: 'door' | 'window' | null;
678
+ /** Default `panels`: piers, lintel with its 0.2 m bearing, sill, plaster and rebar; `units` also lays the bricks, blocks or concrete panels one by one. */
679
+ detail?: WallDetail;
680
+ }
681
+ /**
682
+ * A test wall as its assembly builds it, standing on a plinth: in `panels` the piers beside the opening, the lintel over it (reinforced concrete bearing 0.2 m on
683
+ * the piers; a header in timber walls), the sill under a window and the wall above; with the plaster coat and the rebar of the assembly. The mass is the
684
+ * assembly's for the whole w x h, whatever the detail.
685
+ */
686
+ declare function buildWallSpecimen(options: WallSpecimenOptions): DestructibleSpec;
687
+
570
688
  /** Masonry house of the engine's own templates: brick with plaster, concrete frame, tiles by facade; a unit in a building gets a flat slab roof. */
571
689
  declare function masonryConstruction(source: StructureSource): Construction;
572
690
  interface WoodFrameOptions {
@@ -1410,4 +1528,4 @@ interface Utilities {
1410
1528
 
1411
1529
  declare const version = "0.1.0";
1412
1530
 
1413
- export { CONSTRUCTIONS, CONSTRUCTION_SYSTEMS, CORE_DEFAULTS, CURTAIN_DEFAULTS, type ChaletOptions, type Chimney, type Circuit, type Conduit, type Construction, type ConstructionBuild, type ConstructionBuilder, type ConstructionSystem, type ConstructionSystemDef, type CoreOptions, type CurtainWallOptions, DAMPER_DEFAULTS, DENSITY, type DamperOptions, type DestructibleSpecOptions, type ElectricMeter, type Electrical, type ElectricalPanel, type EnergyConfig, type EnergyMode, FLAT_ROOF_DEFAULTS, type FlatRoofOptions, type FoundationType, GROUND, type Gas, type GasMeter, type Inverter, type LightSwitch, MECHANICAL_DEFAULTS, MEMBER_CAGE, type MechanicalFloorOptions, type Opening, type Outbuilding, type OutbuildingItem, type OutbuildingOpening, type OutbuildingWall, type OutdoorLamp, type Outlet, PILE_AREA, PILE_DEFAULTS, PLATE_DEFAULTS, PUNCHED_DEFAULTS, type PartRole, type PileDesign, type PlanContext, type PlateOptions, type PlateRect, type PlateStrip, type Plumbing, type PlumbingPoint, type PlumbingRun, type Point3, type PunchedFacadeOptions, RAFT_THICKNESS, REBAR_RATIOS, ROOF_COVERINGS, type Rect, type Roof, type RoofCoveringDef, type RoofPane, type RoofShape, SKYSCRAPER_DEFAULTS, SKYSCRAPER_MAX_STOREYS, SLAB_PANEL_DEFAULTS, type ServiceEntrance, type ShackOptions, type SkyscraperLayout, type SkyscraperOptions, type SkyscraperPreset, type SlabPanelOptions, type Solar, type SolarPanel, type SourceDoor, type SourceWall, type SourceWindow, type StoreyContext, type StoreyKind, type StripFill, type StripFiller, type StripId, type Structure, type StructureExtras, type StructureOptions, type StructurePackOptions, type StructurePart, type StructureSource, type Support, TOWER_DEFAULTS, type TankPlanOptions, type TankPlatform, type Tent, type TowerGeometry, type TowerMechanicalOptions, type TowerOptions, type TowerPlanOptions, type TowerPlate, type Utilities, type WallDetail, type WallFixture, type WallMaterials, type WallSpecimenOptions, type WaterTank, type WoodFrameOptions, addCore, addCurtainWall, addFlatRoof, addMechanicalFloor, addPunchedFacade, addTunedMassDamper, applySlabPanels, beamDepthFor, beamSpan, buildSkyscraper, buildStructure, buildTower, buildWallSpecimen, campConstruction, chaletConstruction, constructionOfSystem, coreSize, damperMass, exteriorWindows, logCabinConstruction, masonryConstruction, mechanicalStoreys, pilesFor, planToSpace, planWaterTank, register, registerConstruction, registerConstructionSystem, registerRoofCovering, resolveSlabPanels, shackConstruction, skyscraperLayout, slabPanelView, slabPanelsOf, splitStrip, storeyKinds, stripDoor, structureLayer, toDestructibleSpec, towerFloors, towerLocales, towerPlate, towerWater, version, windExposureOf, woodFrameConstruction };
1531
+ export { BEAM_DEPTH_RATIO, CONSTRUCTIONS, CONSTRUCTION_SYSTEMS, CORE_DEFAULTS, CURTAIN_DEFAULTS, type ChaletOptions, type Chimney, type Circuit, type Conduit, type Construction, type ConstructionBuild, type ConstructionBuilder, type ConstructionSystem, type ConstructionSystemDef, type CoreOptions, type CurtainWallOptions, DAMPER_DEFAULTS, DENSITY, type DamperOptions, type DestructibleSpecOptions, type ElectricMeter, type Electrical, type ElectricalPanel, type EnergyConfig, type EnergyMode, FLAT_ROOF_DEFAULTS, type FlatRoofOptions, type FoundationType, GROUND, GROUND_BEAM_DEPTH, type Gas, type GasMeter, type Inverter, type LightSwitch, MAX_LINTEL_ON_MASONRY, MAX_PILLAR_SPACING, MECHANICAL_DEFAULTS, MEMBER_CAGE, MIN_BEAM_WIDTH, MIN_PILLAR_AREA, MIN_PILLAR_SIDE, type MechanicalFloorOptions, type Opening, type Outbuilding, type OutbuildingItem, type OutbuildingOpening, type OutbuildingWall, type OutdoorLamp, type Outlet, PILE_AREA, PILE_DEFAULTS, PLATE_DEFAULTS, PUNCHED_DEFAULTS, type PartRole, type PileDesign, type PlanContext, type PlateOptions, type PlateRect, type PlateStrip, type Plumbing, type PlumbingPoint, type PlumbingRun, type Point3, type PunchedFacadeOptions, RAFT_THICKNESS, REBAR_RATIOS, ROOF_COVERINGS, type Rect, type Roof, type RoofCoveringDef, type RoofPane, type RoofShape, SILL_BEAM_DEPTH, SKYSCRAPER_DEFAULTS, SKYSCRAPER_MAX_STOREYS, SLAB_PANEL_DEFAULTS, STRUCTURAL_VIOLATION, type ServiceEntrance, type ShackOptions, type SkyscraperLayout, type SkyscraperOptions, type SkyscraperPreset, type SlabPanelOptions, type Solar, type SolarPanel, type SourceDoor, type SourceWall, type SourceWindow, type StoreyContext, type StoreyKind, type StripFill, type StripFiller, type StripId, type StructuralViolation, type StructuralViolationCode, type Structure, type StructureExtras, type StructureOptions, type StructurePackOptions, type StructurePart, type StructureSource, type Support, TANK_PILLAR_SIDE, TOWER_DEFAULTS, type TankPlanOptions, type TankPlatform, type Tent, type TowerGeometry, type TowerMechanicalOptions, type TowerOptions, type TowerPlanOptions, type TowerPlate, type Utilities, type ValidateStructureOptions, WALL_PILLAR_SIDE, WALL_PILLAR_SPACING, type WallDetail, type WallFixture, type WallMaterials, type WallSpecimenOptions, type WaterTank, type WoodFrameOptions, addCore, addCurtainWall, addFlatRoof, addMechanicalFloor, addPunchedFacade, addTunedMassDamper, applySlabPanels, beamDepthFor, beamSpan, buildSkyscraper, buildStructure, buildTower, buildWallSpecimen, cageResidualCapacity, campConstruction, chaletConstruction, constructionOfSystem, coreSize, countViolations, damperMass, exteriorWindows, logCabinConstruction, masonryConstruction, mechanicalStoreys, pilesFor, pillarStations, planToSpace, planWaterTank, register, registerConstruction, registerConstructionSystem, registerRoofCovering, resolveSlabPanels, shackConstruction, skyscraperLayout, slabPanelView, slabPanelsOf, splitStrip, storeyKinds, stripDoor, structureLayer, toDestructibleSpec, towerFloors, towerLocales, towerPlate, towerWater, validateSpec, validateStructure, version, windExposureOf, woodFrameConstruction };