Пример #1
0
 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),
         )
     )
Пример #2
0
    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()
Пример #3
0
 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),
         )
     )
Пример #4
0
 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
             )
         )
Пример #5
0
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 )
Пример #6
0
 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
         )
     )
Пример #7
0
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 )
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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) )
Пример #11
0
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 ) )