// Last edited on 2011-05-08 18:01:56 by stolfi // Pillars and beams inside the Fukushima Daiichi Unit #4 rooms. // Unless said otherwise, these are positive objects that may be // subtracted from the negative basic room spaces to give the actual // room spaces. They are shaved on their free faces, and bloated on the // non-free faces so as to merge with the floor, ceiling and adjacent // walls. // // Specifically, the pillars barely enter the floor (by {p_eps+eps}). // They overlap the ceiling and stop {p_eps} below it. Therefore // pillars from adjacent floors merge into a single pillar, but // they will not protrude into the floor above. A pillar adjacent to a wall // will overlap the wall but stop {p_eps} before its opposite nominal surface. // // Similarly, a beam will generally overlap the ceiling and any adjacent wall // (including perpendicular walls at either end of the beam) but stop // {b_eps} before its opposite nominal surface. // // These pillars and beams do NOT include separating walls, // the secondary containment around the drywell and shroud, // and the walls of the service-floor pools. #declare p_eps = 5*eps; // Fudge factor to prevent pillars from punching through walls. #declare b_eps = 6*eps; // Fudge factor to prevent beams from punching through walls. // ====================================================================== // ALL PILLARS AND BEAMS #macro un4_pillars_and_beams() // The pillars and concrete beams of the building. // !!! Currently only for the "upp" block, floor 3 up. union{ // object{ un4_storey_0_pillars_and_beams() } // object{ un4_storey_1_pillars_and_beams() } // object{ un4_storey_2_pillars_and_beams() } object{ un4_storey_3_pillars_and_beams() } object{ un4_storey_4_pillars_and_beams() } object{ un4_storey_5_pillars_and_beams() } } #end // ====================================================================== // STOREY_SPECIFIC MACROS // These macros generate the pillars and concrete beams in // a specific storey. // ---------------------------------------------------------------------- // Storey 0 - basement #macro un4_storey_0_pillars_and_beams() #local lo_X = un4_building_und_lo_X; #local hi_X = un4_building_und_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_0_lo_Z; #local hi_Z = un4_storey_1_lo_Z; union{ object{ un4_storey_0_pillars() } object{ un4_storey_0_beams() } bounded_by{ box{ < lo_X, lo_Y, lo_Z > - 9*epsv, < hi_X, hi_Y, hi_Z > + 9*epsv } } } #end #macro un4_storey_0_pillars() // !!! placeholder object{ empty() } #end #macro un4_storey_0_beams() // !!! placeholder object{ empty() } #end // ---------------------------------------------------------------------- // Storey 1 - ground floor #macro un4_storey_1_pillars_and_beams() #local lo_X = un4_building_mid_lo_X; #local hi_X = un4_building_mid_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_1_lo_Z; #local hi_Z = un4_storey_2_lo_Z; union{ object{ un4_storey_1_pillars() } object{ un4_storey_1_beams() } bounded_by{ box{ < lo_X, lo_Y, lo_Z > - 9*epsv, < hi_X, hi_Y, hi_Z > + 9*epsv } } } #end #macro un4_storey_1_pillars() // !!! placeholder object{ empty() } #end #macro un4_storey_1_beams() // !!! placeholder object{ empty() } #end // ---------------------------------------------------------------------- // Storey 2 - top flor of "mid" block, right under SFP. #macro un4_storey_2_pillars_and_beams() #local lo_X = un4_building_mid_lo_X; #local hi_X = un4_building_mid_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_2_lo_Z; #local hi_Z = un4_storey_3_lo_Z; union{ object{ un4_storey_2_pillars() } object{ un4_storey_2_beams() } bounded_by{ box{ < lo_X, lo_Y, lo_Z > - 9*epsv, < hi_X, hi_Y, hi_Z > + 9*epsv } } } #end #macro un4_storey_2_pillars() // !!! placeholder object{ empty() } #end #macro un4_storey_2_beams() // !!! placeholder object{ empty() } #end // ---------------------------------------------------------------------- // Storey 3 - bottom of "upp" block, level with bottom of SPF. #macro un4_storey_3_pillars_and_beams() // !!! According to [B3N] the pillars taper into the wall in this floor. #local lo_X = un4_building_upp_lo_X; #local hi_X = un4_building_upp_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_3_lo_Z; #local hi_Z = un4_storey_4_lo_Z; union{ object{ un4_storey_3_pillars() } object{ un4_storey_3_beams() } bounded_by{ box{ < lo_X, lo_Y, lo_Z > - 9*epsv, < hi_X, hi_Y, hi_Z > + 9*epsv } } } #end #macro un4_storey_3_pillars() object{ un4_single_storey_main_pillars(lo_Z,hi_Z) } // !!! More to come. #end #macro un4_storey_3_beams() // The beams of storey 3 along the ceiling-wall corners are not // shown in the blueprints. In the photos after explosion there // are hints of such beams all around the ceiling of storey 3. #local sz_W_X = un4_storey_3_W_beam_size_X; #local sz_E_X = un4_storey_3_E_beam_size_X; #local sz_S_Y = un4_storey_3_S_beam_size_Y; #local sz_N_Y = un4_storey_3_N_beam_size_Y; #local lo_X = un4_building_upp_lo_X; #local hi_X = un4_building_upp_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_3_ceil_wall_beams_lo_Z; #local hi_Z = un4_storey_4_lo_Z; union{ object{ un4_perimeter_wall_ceil_beams ( lo_X,hi_X, lo_Y,hi_Y, lo_Z,sz_W_X, lo_Z,sz_E_X, lo_Z,sz_S_Y, lo_Z,sz_N_Y, hi_Z ) } // !!! More to come. } #end // ---------------------------------------------------------------------- // Storey 4 -- right under service floor #macro un4_storey_4_pillars_and_beams() #local lo_X = un4_building_upp_lo_X; #local hi_X = un4_building_upp_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_4_lo_Z; #local hi_Z = un4_storey_5_lo_Z; union{ object{ un4_storey_4_pillars() } object{ un4_storey_4_beams() } bounded_by{ box{ < lo_X, lo_Y, lo_Z > - 9*epsv, < hi_X, hi_Y, hi_Z > + 9*epsv } } } #end #macro un4_storey_4_pillars() #local lo_Z = un4_storey_4_lo_Z; #local hi_Z = un4_storey_5_lo_Z; object{ un4_single_storey_main_pillars(lo_Z,hi_Z) } // !!! More to come. #end #macro un4_storey_4_beams() // The beams of storey 4 along the ceiling-wall corners are not // shown in the blueprints. In the photos after explosion there // is strong (but not conclusive evidence) of such beams, // at least over most of the perimeter. #local sz_W_X = un4_storey_4_W_beam_size_X; #local sz_E_X = un4_storey_4_E_beam_size_X; #local sz_S_Y = un4_storey_4_S_beam_size_Y; #local sz_N_Y = un4_storey_4_N_beam_size_Y; #local lo_X = un4_building_upp_lo_X; #local hi_X = un4_building_upp_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_4_ceil_wall_beams_lo_Z; #local hi_Z = un4_storey_5_lo_Z; union{ object{ un4_perimeter_wall_ceil_beams ( lo_X,hi_X, lo_Y,hi_Y, lo_Z,sz_W_X, lo_Z,sz_E_X, lo_Z,sz_S_Y, lo_Z,sz_N_Y, hi_Z ) } // !!! More to come. } #end // ---------------------------------------------------------------------- // Storey 5 - service floor #macro un4_storey_5_pillars_and_beams() #local lo_X = un4_building_upp_lo_X; #local hi_X = un4_building_upp_hi_X; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local lo_Z = un4_storey_5_lo_Z; #local hi_Z = un4_storey_6_lo_Z; union{ object{ un4_storey_5_pillars() } object{ un4_storey_5_beams() } object{ un4_storey_5_crane_supports() } bounded_by{ box{ < lo_X, lo_Y, lo_Z > - 9*epsv, < hi_X, hi_Y, hi_Z > + 9*epsv } } } #end #macro un4_storey_5_pillars() // Naked pillars, without the crane supports. #local lo_Z = un4_storey_5_lo_Z; #local hi_Z = un4_storey_6_lo_Z; object{ un4_single_storey_main_pillars(lo_Z,hi_Z) } #end #macro un4_storey_5_beams() union{ object{ un4_storey_5_E_and_W_beams() } object{ un4_storey_5_S_beams() } object{ un4_storey_5_N_beams() } } #end #macro un4_storey_5_E_and_W_beams() // Generates the east and west horizontal beams of the service floor. #local size_1_X = un4_storey_5_E_W_beams_1_size_X; #local hi_1_Z = un4_storey_5_beams_1_hi_Z; #local lo_1_Z = hi_1_Z - un4_storey_5_E_W_beams_1_size_Z; #local size_2_X = un4_storey_5_E_W_beams_2_size_X; #local hi_2_Z = un4_storey_5_beams_2_hi_Z; #local lo_2_Z = hi_2_Z - un4_storey_5_E_W_beams_1_size_Z; #local lo_Y = un4_building_lo_Y; #local hi_Y = un4_building_hi_Y; #local W_beams = union{ un4_single_W_wall_beam(size_1_X, lo_Y,hi_Y, lo_1_Z,hi_1_Z) un4_single_W_wall_beam(size_2_X, lo_Y,hi_Y, lo_2_Z,hi_2_Z) scale <+1,+1,+1> translate un4_building_upp_lo_X*x } #local E_beams = union{ un4_single_W_wall_beam(size_1_X, lo_Y,hi_Y, lo_1_Z,hi_1_Z) un4_single_W_wall_beam(size_2_X, lo_Y,hi_Y, lo_2_Z,hi_2_Z) scale <-1,+1,+1> translate un4_building_upp_hi_X*x } union{ object{ W_beams } object{ E_beams } } #end #macro un4_storey_5_crane_supports() // Generates the east and west supports for the service // floor crane rails. #local W_supports = object{ un4_storey_5_W_crane_supports() scale <+1,+1,+1> translate un4_building_upp_lo_X*x } #local E_supports = object{ un4_storey_5_W_crane_supports() scale <-1,+1,+1> translate un4_building_upp_hi_X*x } union{ object{ W_supports } object{ E_supports } } #end #macro un4_storey_5_W_crane_supports() // Generates the supports for the service // floor crane rails along the west side. // Assumes that the west wall begins at X=0. // They can be mirrored to get the east side supports. #local hi_Z = un4_crane_support_hi_Z; #local lo_Z = hi_Z - un4_crane_support_size_Z; #local md_Z = lo_Z + un4_crane_support_taper_size_Z; #local sz_c_b_X = un4_crane_support_corner_bot_size_X; // X width of corner pillars at base. #local sz_c_t_X = un4_crane_support_corner_top_size_X; // X width of corner pillars at top. #local sz_c_Y = un4_main_corner_pillar_size_Y; // Y width of corner pillars. #local SW_support = object{ un4_single_SW_concrete_support(sz_c_b_X,sz_c_t_X, sz_c_Y, lo_Z,md_Z,hi_Z) } #local sz_n_b_X = un4_crane_support_normal_bot_size_X; // X width of normal pillars at base. #local sz_n_t_X = un4_crane_support_normal_top_size_X; // X width of normal pillars at top. #local sz_n_Y = un4_main_E_W_pillar_1_5_size_Y; // Y width of normal W pillars. #local W_support = object{ un4_single_W_concrete_support(sz_n_b_X,sz_n_t_X, sz_n_Y, lo_Z,md_Z,hi_Z) } #local bld_lo_Y = un4_building_lo_Y; #local bld_hi_Y = un4_building_hi_Y; #local ctr_Y = (bld_lo_Y + bld_hi_Y)/2; // Y of building center. #local step_Y = un4_main_E_W_pillar_1_5_step_Y; // Y distance btw normal pillar midlines. union{ // Support on southwest corner pillar: #local md_Y = lo_Y + sz_c_Y/2; object{ SW_support scale <+1,+1,+1> translate md_Y*y } // Supports on west main pillars: #local k = -2; #while (k <= 2) #local md_Y = ctr_Y + k*step_Y; object{ W_support translate md_Y*y } #local k = k + 1; #end // Support on northwest corner pillar: #local md_Y = hi_Y - sz_c_Y/2; object{ SW_support scale <+1,-1,+1> translate md_Y*y } } #end #macro un4_storey_5_S_beams() #local size_1_Y = un4_storey_5_N_S_beams_1_size_Y; #local hi_1_Z = un4_storey_5_beams_1_hi_Z; #local lo_1_Z = hi_1_Z - un4_storey_5_N_S_beams_1_size_Z; #local size_2_Y = un4_storey_5_N_S_beams_2_size_Y; #local hi_2_Z = un4_storey_5_beams_2_hi_Z; #local lo_2_Z = hi_2_Z - un4_storey_5_N_S_beams_1_size_Z; #local lo_X = un4_building_upp_lo_X; #local hi_X = un4_building_upp_hi_X; union{ un4_single_S_wall_beam(size_1_Y, lo_X,hi_X, lo_1_Z,hi_1_Z) un4_single_S_wall_beam(size_2_Y, lo_X,hi_X, lo_2_Z,hi_2_Z) scale <+1,+1,+1> translate un4_building_lo_Y*y } #end #macro un4_storey_5_N_beams() #local size_1_Y = un4_storey_5_N_S_beams_1_size_Y; #local hi_1_Z = un4_storey_5_beams_1_hi_Z; #local lo_1_Z = hi_1_Z - un4_storey_5_N_S_beams_1_size_Z; #local size_2_Y = un4_storey_5_N_S_beams_2_size_Y; #local hi_2_Z = un4_storey_5_beams_2_hi_Z; #local lo_2_Z = hi_2_Z - un4_storey_5_N_S_beams_1_size_Z; #local lo_X = un4_building_upp_lo_X; #local hi_X = un4_building_upp_hi_X; union{ un4_single_S_wall_beam(size_1_Y, lo_X,hi_X, lo_1_Z,hi_1_Z) un4_single_S_wall_beam(size_2_Y, lo_X,hi_X, lo_2_Z,hi_2_Z) scale <+1,-1,+1> translate un4_building_hi_Y*y } #end // ====================================================================== // MAIN PILLARS IN GENERIC STOREY #macro un4_single_storey_main_pillars(lo_Z,hi_Z) // Generates the main pillars inside an arbitrary storey, given // the floor's Z {lo_Z} and the next upper floor's Z {hi_Z}. // The main pillars are those that run all the way to the top // of the service storey. union{ object{ un4_single_storey_main_corner_pillars(lo_Z,hi_Z) } object{ un4_single_storey_main_E_and_W_pillars(lo_Z,hi_Z) } object{ un4_single_storey_main_S_pillars(lo_Z,hi_Z) } object{ un4_single_storey_main_N_pillars(lo_Z,hi_Z) } } #end #macro un4_single_storey_main_corner_pillars(lo_Z,hi_Z) // The main corner pillars in an arbitrary storey. union{ object{ un4_main_corner_pillar(lo_Z,hi_Z) scale <+1,+1,+1> translate < un4_building_upp_lo_X, un4_building_lo_Y, 0 > } object{ un4_main_corner_pillar(lo_Z,hi_Z) scale <-1,+1,+1> translate < un4_building_upp_hi_X, un4_building_lo_Y, 0 > } object{ un4_main_corner_pillar(lo_Z,hi_Z) scale <+1,-1,+1> translate < un4_building_upp_lo_X, un4_building_hi_Y, 0 > } object{ un4_main_corner_pillar(lo_Z,hi_Z) scale <-1,-1,+1> translate < un4_building_upp_hi_X, un4_building_hi_Y, 0 > } } #end #macro un4_single_storey_main_E_and_W_pillars(lo_Z,hi_Z) // Generates the east and west non-corner pillars, 1 through 5, // in anarbitrary storey. #local W_pillars = union{ object{ un4_single_storey_main_W_pillars(lo_Z,hi_Z) } scale <+1,+1,+1> translate un4_building_upp_lo_X*x } #local E_pillars = union{ object{ un4_single_storey_main_W_pillars(lo_Z,hi_Z) } scale <-1,+1,+1> translate un4_building_upp_hi_X*x } union{ object{ W_pillars } object{ E_pillars } } #end #macro un4_single_storey_main_W_pillars(lo_Z,hi_Z) // Generates the west non-corner pillars 1 through 5 // assuming that the west wall exterior X is zero. // These can be mirrored and translated to give the // main non-corner pillars on the east wall. #local hw_Y = un4_main_corner_pillar_size_Y/2; #local ctr_Y = (un4_building_lo_Y + un4_building_hi_Y)/2; #local step_Y = un4_main_E_W_pillar_1_5_step_Y; #local pillar = object{ un4_single_main_W_pillar(lo_Z,hi_Z) } union{ #local k = -2; #while (k <= 2) #local md_Y = ctr_Y + k*step_Y; object{ pillar translate md_Y*y } #local k = k + 1; #end } #end #macro un4_single_storey_main_S_pillars(lo_Z,hi_Z) #local pmd_1_X = un4_main_S_pillar_1_md_X; #local pmd_2_X = un4_main_S_pillar_2_md_X; #local pmd_3_X = un4_main_S_pillar_3_md_X; #local pmd_4_X = un4_main_S_pillar_4_md_X; #local psz_1_X = un4_main_S_pillar_1_3_size_X; #local psz_2_X = un4_main_S_pillar_1_3_size_X; #local psz_3_X = un4_main_S_pillar_1_3_size_X; #local psz_4_X = un4_main_S_pillar_4_size_X; #local psz_1_Y = un4_main_S_pillar_1_4_size_Y; #local psz_2_Y = un4_main_S_pillar_1_4_size_Y; #local psz_3_Y = un4_main_S_pillar_1_4_size_Y; #local psz_4_Y = un4_main_S_pillar_1_4_size_Y; union{ object{ un4_S_non_corner_pillar(psz_1_X,psz_1_Y,lo_Z,hi_Z) translate pmd_1_X*x } object{ un4_S_non_corner_pillar(psz_2_X,psz_2_Y,lo_Z,hi_Z) translate pmd_2_X*x } object{ un4_S_non_corner_pillar(psz_3_X,psz_3_Y,lo_Z,hi_Z) translate pmd_3_X*x } object{ un4_S_non_corner_pillar(psz_4_X,psz_4_Y,lo_Z,hi_Z) translate pmd_4_X*x } scale <+1,+1,+1> translate un4_building_lo_Y*y } #end #macro un4_single_storey_main_N_pillars(lo_Z,hi_Z) #local pmd_1_X = un4_main_N_pillar_1_md_X; #local pmd_2_X = un4_main_N_pillar_2_md_X; #local pmd_3_X = un4_main_N_pillar_3_md_X; #local pmd_4_X = un4_main_N_pillar_4_md_X; #local psz_1_X = un4_main_N_pillar_1_4_size_X; #local psz_2_X = un4_main_N_pillar_1_4_size_X; #local psz_3_X = un4_main_N_pillar_1_4_size_X; #local psz_4_X = un4_main_N_pillar_1_4_size_X; #local psz_1_Y = un4_main_N_pillar_1_2_size_Y; #local psz_2_Y = un4_main_N_pillar_1_2_size_Y; #local psz_3_Y = un4_main_N_pillar_3_4_size_Y; #local psz_4_Y = un4_main_N_pillar_3_4_size_Y; union{ object{ un4_S_non_corner_pillar(psz_1_X,psz_1_Y,lo_Z,hi_Z) translate pmd_1_X*x } object{ un4_S_non_corner_pillar(psz_2_X,psz_2_Y,lo_Z,hi_Z) translate pmd_2_X*x } object{ un4_S_non_corner_pillar(psz_3_X,psz_3_Y,lo_Z,hi_Z) translate pmd_3_X*x } object{ un4_S_non_corner_pillar(psz_4_X,psz_4_Y,lo_Z,hi_Z) translate pmd_4_X*x } scale <+1,-1,+1> translate un4_building_hi_Y*y } #end // ====================================================================== // SINGLE PILLARS #macro un4_main_corner_pillar(lo_Z,hi_Z) // Generates the SW corner pillar of a generic floor, // assuming that the exterior SW corner of the floor's walls // is at (X,Y) = (0,0). Can be mirrored and/or translated to give // other corner pillars. #local lo_X = 0; #local hi_X = un4_main_corner_pillar_size_X; #local lo_Y = 0; #local hi_Y = un4_main_corner_pillar_size_Y; box{ < lo_X + p_eps, lo_Y + p_eps, lo_Z-p_eps-eps >, < hi_X-eps, hi_Y-eps, hi_Z-p_eps > } #end #macro un4_single_main_W_pillar(lo_Z,hi_Z) // Generates a single west non-corner pillar, // assuming that the west wall exterior X is zero // and the mid-Y is zero. // This object can be mirrored and/or translated to give any // main non-corner pillar on the west or east wall. #local lo_X = 0; #local hi_X = un4_main_E_W_pillar_1_5_size_X; #local md_Y = 0; #local hw_Y = un4_main_E_W_pillar_1_5_size_Y/2; box{ < lo_X+p_eps, md_Y-hw_Y+eps, lo_Z-p_eps-eps >, < hi_X-eps, md_Y+hw_Y-eps, hi_Z-p_eps > } #end #macro un4_S_non_corner_pillar(sz_X,sz_Y,lo_Z,hi_Z) // Generates a pillar along a south wall, // assuming that the south wall exterior's surface X is zero, // the pillar's midline X is zero, its X and Y widths are {sz_X} and {sz_Y}, // and it extends from a floor at {lo_Z} to the next upper floor // at {hi_Z}. #local lo_X = - sz_X/2; #local hi_X = + sz_X/2; #local lo_Y = 0; #local hi_Y = sz_Y; box{ < lo_X+eps, lo_Y+p_eps, lo_Z-p_eps-eps >, < hi_X-eps, hi_Y-eps, hi_Z-p_eps > } #end // ====================================================================== // TYPICAL BEAMS IN A GENERIC STOREY #macro un4_perimeter_wall_ceil_beams ( lo_X,hi_X, lo_Y,hi_Y, lo_W_Z,sz_W_X, lo_E_Z,sz_E_X, lo_S_Z,sz_S_Y, lo_N_Z,sz_N_Y, hi_Z ) // The horizontal beams around the corners between the ceiling and the // perimeter walls of a rectangular space. // {lo_X,hi_X, lo_Y,hi_Y} = coordinates of the OUTER surfaces of walls. // {lo_W_Z,lo_E_Z,lo_S_Z,lo_N_Z} = Z of bottom face of each beam. // {sz_W_X,sz_E_X,sz_S_Y,sz_N_Y} = Total X or Y width of each beam // (incl. part embedded in wall). #local W_beam = union{ un4_single_W_wall_ceil_beam(sz_W_X, lo_Y,hi_Y, lo_W_Z,hi_Z) scale <+1,+1,+1> translate un4_building_upp_lo_X*x } #local E_beam = union{ un4_single_W_wall_ceil_beam(sz_E_X, lo_Y,hi_Y, lo_E_Z,hi_Z) scale <-1,+1,+1> translate un4_building_upp_hi_X*x } #local S_beam = union{ un4_single_S_wall_ceil_beam(sz_S_Y, lo_X,hi_X, lo_S_Z,hi_Z) scale <+1,+1,+1> translate un4_building_lo_Y*y } #local N_beam = union{ un4_single_S_wall_ceil_beam(sz_N_Y, lo_X,hi_X, lo_N_Z,hi_Z) scale <+1,-1,+1> translate un4_building_hi_Y*y } union{ object{ W_beam } object{ E_beam } object{ S_beam } object{ N_beam } } #end // ====================================================================== // SINGLE BEAMS #macro un4_single_W_wall_beam(sz_X, lo_Y,hi_Y, lo_Z,hi_Z) // Generates a horizontal beam running along the Y direction, // with its south, north, and west faces embedded into walls, // but free on the east, top, and bottom sides. The exterior // south and north surfaces of the transverse walls are at Y // {lo_Y} to {hi_Y}. // Assumes that the west wall extends east from X = 0, // and that the beam is {sz_X} wide, extending from {lo_Z} // to {hi_Z} in Z. // // The free faces are inset by {2*eps} so as not to interfere with // crossing columns. // Can be mirrored in X to generate a beam embedded into a wall // on the east side. #local lo_X = 0; #local hi_X = sz_X; box{ < lo_X+b_eps, lo_Y+b_eps, lo_Z+2*eps >, < hi_X-2*eps, hi_Y-b_eps, hi_Z-2*eps > } #end #macro un4_single_S_wall_beam(sz_Y, lo_X,hi_X, lo_Z,hi_Z) // Generates a horizontal beam running along the X direction, // with its west, east, and south faces embedded into walls, // but free on the north, top, and bottom sides. The exterior west and east surfaces of the // transverse walls are at X {lo_X} to {hi_X}. // Assumes that the south wall extends north from Y = 0, // and that the beam is {sz_Y} wide, extending from {lo_Z} // to {hi_Z} in Z. // // The free faces are inset by {2*eps} so as not to interfere with // crossing columns. // Can be mirrored in Y to generate a beam embedded into a wall // on the north side. #local lo_Y = 0; #local hi_Y = sz_Y; box{ < lo_X+b_eps, lo_Y+b_eps, lo_Z+2*eps >, < hi_X-b_eps, hi_Y-2*eps, hi_Z-2*eps > } #end #macro un4_single_W_wall_ceil_beam(sz_X, lo_Y,hi_Y, lo_Z,hi_Z) // Generates a horizontal beam running along the Y direction, // with its south, north, and west faces embedded into walls, // the top face embedded into the ceiling, // but free on the east and bottom sides. The exterior // south and north surfaces of the transverse walls are at Y // {lo_Y} to {hi_Y}. // Assumes that the west wall extends east from X = 0, // that the ceiling extends down from Z = {hi_Z}, // and that the beam is {sz_X} wide, starting at Z = {lo_Z}. // // The free faces are inset by {2*eps} so as not to interfere with // crossing columns. // Can be mirrored in X to generate a beam embedded into a wall // and ceiling on the east side. #local lo_X = 0; #local hi_X = sz_X; box{ < lo_X+b_eps, lo_Y+b_eps, lo_Z+2*eps >, < hi_X-2*eps, hi_Y-b_eps, hi_Z-b_eps > } #end #macro un4_single_S_wall_ceil_beam(sz_Y, lo_X,hi_X, lo_Z,hi_Z) // Generates a horizontal beam running along the X direction, // with its west, east, and south faces embedded into walls, // the top face embedded into the ceiling, // but free on the north and bottom sides. The exterior west // and east surfaces of the transverse walls are at X {lo_X} to {hi_X}. // Assumes that the south wall extends north from Y = 0, // that the ceiling extends down from Z = {hi_Z}, // and that the beam is {sz_Y} wide, starting at {lo_Z}. // // The free faces are inset by {2*eps} so as not to interfere with // crossing columns. // Can be mirrored in Y to generate a beam embedded into a wall // on the north side. #local lo_Y = 0; #local hi_Y = sz_Y; box{ < lo_X+b_eps, lo_Y+b_eps, lo_Z+2*eps >, < hi_X-b_eps, hi_Y-2*eps, hi_Z-b_eps > } #end // ====================================================================== // SINGLE CONCRETE SUPPORTS #macro un4_single_W_concrete_support(sz1_X,sz2_X,sz_Y, lo_Z,md_Z,hi_Z) // Generates a support coming out of a pillar on the west side. // Assumes that the pillar extends east nominally from X = 0 to some thickness. // // The support is {sz_Y} wide in the north-south direction, and centered in Y. // It begins at height {lo_Z} with width {sz1_X}, tapers // to width {sz2_X} at height {md_Z}, then contiues with that width // to height {hi_Z}. // // The free faces are inset by {3*eps} so as not to interfere with // the surfaces of the pillar or of crossing columns. The west face // is inset by {2*p_eps+b_eps} for the same reason // Can be mirrored in X to generate a support embedded into a pillar // on the east side, and rotated to generate a support on north or // south sides. #local lo_X = 0; #local md_X = sz1_X; #local hi_X = sz2_X; #local lo_Y = -sz_Y/2; #local hi_Y = +sz_Y/2; #local s_eps = 2*p_eps+b_eps; prism{ linear_spline lo_Y+3*eps, hi_Y-3*eps, 6, < lo_X+s_eps, lo_Z+3*eps >, < md_X-3*eps, lo_Z+3*eps >, < hi_X-3*eps, md_Z+eps >, < hi_X-3*eps, hi_Z-3*eps >, < lo_X+s_eps, hi_Z-3*eps >, < lo_X+s_eps, lo_Z+3*eps > } #end #macro un4_single_SW_concrete_support(sz1_X,sz2_X,sz_Y, lo_Z,md_Z,hi_Z) // Generates a support coming out of a pillar on the southwest corner. // Assumes that the pillar extends east nominally from X = 0 to some thickness. // // The support is {sz_Y} wide in the north-south direction, and centered in Y. // It begins at height {lo_Z} with width {sz1_X}, tapers // to width {sz2_X} at height {md_Z}, then contiues with that width // to height {hi_Z}. // // The free faces are inset by {3*eps} so as not to interfere with // the surfaces of the pillar or of crossing columns. The south and // west faces are inset by {2*p_eps+b_eps} for the same reason // Can be mirrored in X to generate a support embedded into a pillar // on the east side, and rotated to generate a support on north or // south sides. #local lo_X = 0; #local md_X = sz1_X; #local hi_X = sz2_X; #local lo_Y = -sz_Y/2; #local hi_Y = +sz_Y/2; #local s_eps = 2*p_eps+b_eps; prism{ linear_spline lo_Y+s_eps, hi_Y-3*eps, 6, < lo_X+s_eps, lo_Z+3*eps >, < md_X-3*eps, lo_Z+3*eps >, < hi_X-3*eps, md_Z+eps >, < hi_X-3*eps, hi_Z-3*eps >, < lo_X+s_eps, hi_Z-3*eps >, < lo_X+s_eps, lo_Z+3*eps > } #end