def handrail(self): self.args = stairs.handrail_height(**self.args) print( "Handrail height above nosing..{B:8.2f} {unit.name} {B_ft:s}".format( B=convert(self.args.B, stairs.INCH, self.unit), unit=self.unit, B_ft=convert(self.args.B, stairs.INCH, stairs.FOOT_INCH_FRAC), ) )
def write(self): self.headroom() print("{B:^72s}".format(B=self.B)) print() print(self.picture) print() self.p_value() self.n_value() print("Pitch Angle...............cdb={A:8.2f}°".format(A=self.args.A)) self.risers_2() print( "Spread.....................SP={L:8.2f} {unit.name} {L_ft:s}".format( L=convert(self.args.L, stairs.INCH, self.unit), unit=self.unit, L_ft=convert(self.args.L, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) print( "Height.....................HT={H:8.2f} {unit.name} {H_ft:s}".format( H=convert(self.args.H, stairs.INCH, self.unit), unit=self.unit, H_ft=convert(self.args.H, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) if self.f_hr_sw: print( "Floor thickness............FL={F:8.2f} {unit.name} {F_ft:s}".format( F=convert(self.args.F, stairs.INCH, self.unit), unit=self.unit, F_ft=convert(self.args.F, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) print( "Headroom clearance.........HR={HR:8.2f} {unit.name} {HR_ft:s}".format( HR=convert(self.args.HR, stairs.INCH, self.unit), unit=self.unit, HR_ft=convert(self.args.HR, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) print( "Stairwell minimum length...SW={SW:8.2f} {unit.name} {SW_ft:s}".format( SW=convert(self.args.SW, stairs.INCH, self.unit), unit=self.unit, SW_ft=convert(self.args.SW, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) self.handrail() self.bottom_rung() self.range_check()
def risers_2(self): print( "Run........................cd={T:8.2f} {unit.name} {T_ft:s}".format( T=convert(self.args.T, stairs.INCH, self.unit), unit=self.unit, T_ft=convert(self.args.T, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) print( "Rise.......................bc={R:8.2f} {unit.name} {R_ft:s}".format( R=convert(self.args.R, stairs.INCH, self.unit), unit=self.unit, R_ft=convert(self.args.R, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) print( "String.....................bd={X:8.2f} {unit.name} {X_ft:s}".format( X=convert(self.args.X, stairs.INCH, self.unit), unit=self.unit, X_ft=convert(self.args.X, stairs.INCH, stairs.FOOT_INCH_FRAC), ) ) print( "Stringer length............ae={Y:8.2f} {unit.name} {Y_ft:s}".format( Y=convert(self.args.Y, stairs.INCH, self.unit), unit=self.unit, Y_ft=convert(self.args.Y, stairs.INCH, stairs.FOOT_INCH_FRAC), ) )
def range_check(self): max_code = convert(8, stairs.INCH, self.unit) max_comfort = convert(7.5, stairs.INCH, self.unit) if self.args.R > 8: print( "NOTE: Rises in excess of {0:.1f} {1:s} are not permitted by most building codes.".format( max_code, self.unit.name ) ) elif self.args.R > 7.5: print( "NOTE: Rises over {0:.1f} {1:s} tend to result in steep uncomfortable stairways.".format( max_comfort, self.unit.name ) )
def solve(): A= input_float("ENTER: c.c. Distance across mesh opening.......(in.)? ") D= input_float("ENTER: Wire diameter...........................(in.)? ") SA=input_float("ENTER: Screen area.............................(ft²)? ") template = """\ ENTER: {0:.<45s} {1:8.3f} in. {2:8.1f} mm ENTER: {3:.<45s} {4:8.3f} in. {5:8.1f} mm ENTER: {6:.<45s} {7:8.3f} ft² {8:8.1f} m² """ print( template.format( "c.c. Distance across mesh opening", A, convert(A,INCH,MILLIMETRE), "Wire diameter", D, convert(D,INCH,MILLIMETRE), "Screen area", SA, convert(SA,SQ_FOOT,SQ_METRE), ) ) display( A, D, SA )
def bottom_rung(self): print( "Bottom to lowest rung.......B={TBR:8.2f} {unit.name}".format( TBR=convert(self.args.TBR, stairs.INCH, self.unit), unit=self.unit ) ) print( "Rise.......................bc={R:8.2f} {unit.name}".format( R=convert(self.args.R, stairs.INCH, self.unit), unit=self.unit ) ) print( "Top to highest rung.........T={TBR:8.2f} {unit.name}".format( TBR=convert(self.args.TBR, stairs.INCH, self.unit), unit=self.unit ) )
def equivalent( value, unit ): """Converts a value in the given units to a series of other units. :param value: Measurement :param unit: Source unit class. :return: Tuple with pressure in mb, atm, cm_hg, in_hg, m_w, in_w, ft_w, psi, psf, bar, kpa. """ return convert( value, unit, MB, ATM, CM_Hg, IN_Hg, M_W, IN_W, FT_W, PSI, PSF, BAR, KPA )
def table( kpa_start=95.5, kpa_stop=106.5, kpa_step=0.5 ): """Yields a sequence of values from 95.5 kPa to 106 kPa in .5 kPa steps. :return: tuple of kPa, in.hg, lb/in², mb, atm """ for i in range( int((kpa_stop-kpa_start)/kpa_step) ): v_kpa= i*kpa_step+kpa_start v_in_hg, v_psi, v_mb, v_atm= convert( v_kpa, KPA, IN_Hg, PSI, MB, ATM ) yield v_kpa, v_in_hg, v_psi, v_mb, v_atm
def force( A, D, SA, W_k=None, W_mph=None, W_kph=None, W_b=None ): """Compute force on a wire mesh for a given windspeed in knots, kph, mph or on the Beaufort scale. This relies an in internal table that has forces for knots between 10 and 60, where :math:`10 \\leq 5(x+1) \\leq 60`. This value of *x* is an integer :math:`1 \\leq x \\leq 11`. Therefore, wind speeds are rounded up to the nearest 5 knots. :param A: Center-to-center distance across mesh opening (in) :param D: Wire diameter (in) :param SA: Screen area (ft²) :returns: dict with mesh values plus force values. """ results= mesh( A, D, SA ) if W_k is not None: # The standard case. results.W_k= W_k elif W_mph is not None: # Make knots from MPH results.W_k= convert( W_mph, MPH, KNOT ) elif W_kph is not None: # Make knots from KPH results.W_k= convert( W_kph, KPH, KNOT ) elif W_b is not None: # Make knots from Beaufort Scale winds results.W_k= convert( W_kph, Beaufort, KNOT ) else: raise NoSolutionError( "No windspeed given" ) results.W_mph, results.W_kph, results.W_b = convert( results.W_k, KNOT, MPH, KPH, Beaufort ) results.Y_lb = wind_force( results.W_k )*results.FA results.Y_n = convert( results.Y_lb, POUND_FORCE, KILOGRAM_FORCE ) return results
def display( A, D, SA ): wm= wiremesh.mesh( A, D, SA ) summary= """\ Weight of this area of mesh: aluminum wire... {0:5.1f} lb. {1:8.1f} kg steel wire...... {2:5.1f} lb. {3:8.1f} kg copper wire..... {4:5.1f} lb. {5:8.1f} kg Percent of screen area filled by wire........ {6:6.1%} Wind vane area (screen area filled by wire).. {7:5.1f} ft² {8:8.1f} m² """ print( summary.format( wm.TV*wiremesh.Al_lb_cu_in, convert(wm.TV*wiremesh.Al_lb_cu_in, POUND_MASS, KILOGRAM), wm.TV*wiremesh.Cu_lb_cu_in, convert(wm.TV*wiremesh.Cu_lb_cu_in, POUND_MASS, KILOGRAM), wm.TV*wiremesh.S_lb_cu_in, convert(wm.TV*wiremesh.S_lb_cu_in, POUND_MASS, KILOGRAM), wm.FF, wm.FA, convert(wm.FA, SQ_FOOT, SQ_METRE), ) ) print("Wind load on this area of vertical mesh at various wind speeds:") detail= " @ {W_k:2.0f} knots = {W_mph:2.0f} mph = {W_kph:3.0f} km/hr = Beaufort {W_b:2.0f}... {Y_lb:6.1f} lb. {Y_n:6.1f} kg" for x in range(1,12): k = (x+1)*5 f = wiremesh.force( A=A, D=D, SA=SA, W_k= k ) print( detail.format(**f) )
def display( B=None, A=None, G=None, D=None, F=None ): """Compute and display results. Note that partial results are possible. :param F: Aperture, ƒ/ :param G: Guide number in feet :param A: Film speed, ISO :param B: Beam Candle Power Seconds :param D: Subject distance in feet """ results= elflash.flash( B=B, A=A, G=G, D=D, F=F ) results.D_m= METRE.from_std( FOOT.to_std( results.D ) ) if results.F is not None: if abs(results.F-int(results.F)) > .01: print( "Aperture ...................... ƒ/{F:<4.1f}".format(**results) ) else: print( "Aperture ...................... ƒ/{F:<4.0f}".format(**results) ) if results.G is not None: results.G_m= METRE.from_std( FOOT.to_std( results.G ) ) print( "Guide Number (metres) ......... {G_m:7.1f}".format(**results) ) print( "Guide Number (feet) ........... {G:7.1f}".format(**results) ) if results.A is not None: print( "Film speed .................ISO {A:5.0f}".format(**results) ) if results.B is not None: print( "Beam Candle Power Seconds ..... {B:5.0f}".format(**results) ) if results.D is not None: print( "Subject distance (metres) ..... {D_m:7.1f}".format(**results) ) print( "Subject distance (feet) ....... {D:7.1f}".format(**results) ) if results.G is not None: f_template_1= "Use ƒ/{F:.<4.1f}...........{D_m:5.1f} m. ({D_f:5.1f} ft.)" f_template_0= "Use ƒ/{F:.<4.0f}...........{D_m:5.1f} m. ({D_f:5.1f} ft.)" for F, D_f in elflash.aperture_iter( results.G ): D_m = convert( D_f, FOOT, METRE ) if abs(F-int(F)) > .01: print( f_template_1.format( D_m=D_m, D_f=D_f, F=F ) ) else: print( f_template_0.format( D_m=D_m, D_f=D_f, F=F ) )