def testCustomizedGearProfile(self):
     gear = InvoluteGearFeature.makeInvoluteGear('InvoluteGear')
     z = 12
     m = 1
     gear.NumberOfTeeth = z
     gear.Modules = f'{m} mm'
     gear.PressureAngle = '14.5 deg'
     self.assertSuccessfulRecompute(gear)
     self.assertClosedWire(gear.Shape)
     pitch_diameter = m * z
     default_addendum = 1
     default_dedendum = 1.25
     tip_diameter = pitch_diameter + 2 * default_addendum * m
     root_diameter = pitch_diameter - 2 * default_dedendum * m
     # the test purpose here is just to ensure the gear's parameters are used,
     # not super precise profile verification. Thus a lax delta is just file here.
     delta = 0.01
     self.assertIntersection(gear.Shape, makeCircle(pitch_diameter / 2),
                             "Expecting intersection at pitch circle")
     self.assertNoIntersection(gear.Shape,
                               makeCircle(tip_diameter / 2 + delta),
                               "Teeth extent beyond tip circle")
     self.assertNoIntersection(gear.Shape,
                               makeCircle(root_diameter / 2 - delta),
                               "Teeth extend below root circle")
Example #2
0
def cbeam_parallel_flange(params, document):
    # key = params['type']  # not used
    h = params["h"]
    b = params["b"]
    tf = params["tf"]
    tw = params["tw"]
    r = params["r"]
    le = params["l"]
    name = params["name"]

    # lower flange, starting at the end of web, going counter-clockwise
    Vlf1 = Vector(0, (-h / 2), 0)
    Vlf2 = Vector(b, -h / 2, 0)
    Vlf3 = Vector(b, -h / 2 + tf, 0)
    Vlf4 = Vector((tw + r), (-h / 2 + tf), 0)
    Llf1 = makeLine(Vlf1, Vlf2)
    Llf2 = makeLine(Vlf2, Vlf3)
    Llf3 = makeLine(Vlf3, Vlf4)

    # upper flange, starting at the right web fillet, going clockwise
    Vuf1 = Vector(tw + r, (h / 2 - tf), 0)
    Vuf2 = Vector(b, (h / 2 - tf), 0)
    Vuf3 = Vector(b, h / 2, 0)
    Vuf4 = Vector(0, h / 2, 0)
    Luf1 = makeLine(Vuf1, Vuf2)
    Luf2 = makeLine(Vuf2, Vuf3)
    Luf3 = makeLine(Vuf3, Vuf4)

    # web, starting right bottom, going counter-clockwise
    Vw1 = Vector(tw, (-h / 2 + tf + r), 0)
    Vw2 = Vector(tw, (h / 2 - tf - r), 0)
    Lw1 = makeLine(Vw1, Vw2)
    Lw2 = makeLine(Vuf4, Vlf1)

    # center of the fillets, starting right bottom, going up
    Vfc1 = Vector((tw + r), (-h / 2 + tf + r), 0)
    Vfc2 = Vector((tw + r), (h / 2 - tf - r), 0)
    normal = Vector(0, 0, 1)
    Cfc1 = makeCircle(r, Vfc1, normal, 180, 270)
    Cfc2 = makeCircle(r, Vfc2, normal, 90, 180)

    # putting the segments together make a wire, a face and extrude it
    W = Part.Wire([Llf1, Llf2, Llf3, Cfc1, Lw1, Cfc2, Luf1, Luf2, Luf3, Lw2])
    F = Part.Face(W)

    if params["arch"]:
        part = Arch.makeStructure(name=name)

        prof = document.addObject("Part::Feature", "Profile")
        prof.Shape = F
        part.Base = prof

        part.Height = le
    else:
        part = document.addObject("Part::Feature", "BOLTS_part")
        part.Label = name

        beam = F.extrude(Vector(0, 0, le))
        part.Shape = beam
Example #3
0
def cbeam_parallel_flange(params,document):
        key = params['type']
        h = params['h']
        b = params['b']
        tf = params['tf']
        tw = params['tw']
        r = params ['r']
        l = params['l']
        name = params['name']

        # lower flange, starting at the end of web, going counter-clockwise
        Vlf1 = Vector(0,(-h/2),0)
        Vlf2 = Vector(b,-h/2,0)
        Vlf3 = Vector(b,-h/2+tf,0)
        Vlf4 = Vector((tw+r),(-h/2+tf),0)
        Llf1 = makeLine(Vlf1,Vlf2)
        Llf2 = makeLine(Vlf2,Vlf3)
        Llf3 = makeLine(Vlf3,Vlf4)

        # upper flange, starting at the right web fillet, going clockwise
        Vuf1 = Vector(tw+r,(h/2-tf),0)
        Vuf2 = Vector(b,(h/2-tf),0)
        Vuf3 = Vector(b,h/2,0)
        Vuf4 = Vector(0,h/2,0)
        Luf1 = makeLine(Vuf1,Vuf2)
        Luf2 = makeLine(Vuf2,Vuf3)
        Luf3 = makeLine(Vuf3,Vuf4)

        # web, starting right bottom, going counter-clockwise
        Vw1 = Vector(tw,(-h/2+tf+r),0)
        Vw2 = Vector(tw,(h/2-tf-r),0)
        Lw1 = makeLine(Vw1,Vw2)
        Lw2 = makeLine(Vuf4 ,Vlf1)

        # center of the fillets, starting right bottom, going up
        Vfc1 = Vector((tw+r),(-h/2+tf+r),0)
        Vfc2 = Vector((tw+r),(h/2-tf-r),0)
        normal = Vector(0,0,1)
        Cfc1 = makeCircle(r,Vfc1,normal,180,270)
        Cfc2 = makeCircle(r,Vfc2,normal, 90,180)

        # putting the segments together make a wire, a face and extrude it
        W = Part.Wire([Llf1,Llf2,Llf3,Cfc1,Lw1,Cfc2,Luf1,Luf2,Luf3,Lw2])
        F = Part.Face(W)

        if params['arch']:
                part = Arch.makeStructure(name=name)

                prof = document.addObject("Part::Feature","Profile")
                prof.Shape = F
                part.Base = prof

                part.Height = l
        else:
                part = document.addObject("Part::Feature","BOLTS_part")
                part.Label = name

                beam = F.extrude(Vector(0,0,l))
                part.Shape = beam
Example #4
0
def lbeam_parallel_flange_unequal(params, document):
    # key = params["type"]
    a = params["a"]
    b = params["b"]
    t = params["t"]
    ri = params["r1"]
    ro = params["r2"]
    le = params["l"]
    name = params["name"]

    # points, starting at the left upper corner, going counter-clockwise
    V1 = Vector(0, 0, 0)
    V2 = Vector(b, 0, 0)
    V3 = Vector(b, t - ro, 0)
    V4 = Vector(b - ro, t, 0)
    V5 = Vector(t + ri, t, 0)
    V6 = Vector(t, t + ri, 0)
    V7 = Vector(t, a - ro, 0)
    V8 = Vector(t - ro, a, 0)
    V9 = Vector(0, a, 0)

    # circle center of the fillets, starting right bottom, going counter-clockwise
    Vc1 = Vector(b - ro, t - ro, 0)
    Vc2 = Vector(t + ri, t + ri, 0)
    Vc3 = Vector(t - ro, a - ro, 0)
    normal = Vector(0, 0, 1)

    # edges
    E1 = makeLine(V1, V2)
    E2 = makeLine(V2, V3)
    E3 = makeCircle(ro, Vc1, normal, 0, 90)
    E4 = makeLine(V4, V5)
    E5 = makeCircle(ri, Vc2, normal, 180, 270)
    E6 = makeLine(V6, V7)
    E7 = makeCircle(ro, Vc3, normal, 0, 90)
    E8 = makeLine(V8, V9)
    E9 = makeLine(V9, V1)

    # putting the segments together make a wire, a face and extrude it
    W = Part.Wire([E1, E2, E3, E4, E5, E6, E7, E8, E9])
    F = Part.Face(W)

    if params["arch"]:
        from ArchStructure import makeStructure

        part = makeStructure(name=name)

        prof = document.addObject("Part::Feature", "Profile")
        prof.Shape = F
        part.Base = prof

        part.Height = le
    else:
        part = document.addObject("Part::Feature", "BOLTS_part")
        part.Label = name

        beam = F.extrude(Vector(0, 0, le))
        part.Shape = beam
Example #5
0
def rectangle_hollow(params, document):
    h = params["h"]
    b = params["b"]
    t = params["t"]
    le = params["l"]
    name = params["name"]

    # Definition in EN standard
    ri = 1.0 * t
    ro = 1.5 * t

    # outer rectangle, going clockwise
    Vor1 = Vector((b / 2), (h / 2 - ro), 0)
    Vor2 = Vector((b / 2), (-h / 2 + ro), 0)
    Vor3 = Vector((b / 2 - ro), (-h / 2), 0)
    Vor4 = Vector((-b / 2 + ro), -h / 2, 0)
    Vor5 = Vector(-b / 2, (-h / 2 + ro), 0)
    Vor6 = Vector(-b / 2, (h / 2 - ro), 0)
    Vor7 = Vector((-b / 2 + ro), (h / 2), 0)
    Vor8 = Vector((b / 2 - ro), (h / 2), 0)
    Lor1 = makeLine(Vor1, Vor2)
    Lor2 = makeLine(Vor3, Vor4)
    Lor3 = makeLine(Vor5, Vor6)
    Lor4 = makeLine(Vor7, Vor8)

    # outer radius, going clockwise
    Voc1 = Vector((b / 2 - ro), (-h / 2 + ro), 0)
    Voc2 = Vector((-b / 2 + ro), (-h / 2 + ro), 0)
    Voc3 = Vector((-b / 2 + ro), (h / 2 - ro), 0)
    Voc4 = Vector((b / 2 - ro), (h / 2 - ro), 0)
    normal = Vector(0, 0, 1)
    Coc1 = makeCircle(ro, Voc1, normal, 270, 0)
    Coc2 = makeCircle(ro, Voc2, normal, 180, 270)
    Coc3 = makeCircle(ro, Voc3, normal, 90, 180)
    Coc4 = makeCircle(ro, Voc4, normal, 0, 90)

    # inner rectangle, going clockwise
    Vir1 = Vector((b / 2 - t), (h / 2 - t - ri), 0)
    Vir2 = Vector((b / 2 - t), (-h / 2 + t + ri), 0)
    Vir3 = Vector((b / 2 - t - ri), (-h / 2 + t), 0)
    Vir4 = Vector((-b / 2 + t + ri), (-h / 2 + t), 0)
    Vir5 = Vector((-b / 2 + t), (-h / 2 + t + ri), 0)
    Vir6 = Vector((-b / 2 + t), (h / 2 - t - ri), 0)
    Vir7 = Vector((-b / 2 + t + ri), (h / 2 - t), 0)
    Vir8 = Vector((b / 2 - t - ri), (h / 2 - t), 0)
    Lir1 = makeLine(Vir1, Vir2)
    Lir2 = makeLine(Vir3, Vir4)
    Lir3 = makeLine(Vir5, Vir6)
    Lir4 = makeLine(Vir7, Vir8)

    # inner radius, going clockwise
    Vic1 = Vector((b / 2 - t - ri), (-h / 2 + t + ri), 0)
    Vic2 = Vector((-b / 2 + t + ri), (-h / 2 + t + ri), 0)
    Vic3 = Vector((-b / 2 + t + ri), (h / 2 - t - ri), 0)
    Vic4 = Vector((b / 2 - t - ri), (h / 2 - t - ri), 0)
    normal = Vector(0, 0, 1)
    Cic1 = makeCircle(ri, Vic1, normal, 270, 0)
    Cic2 = makeCircle(ri, Vic2, normal, 180, 270)
    Cic3 = makeCircle(ri, Vic3, normal, 90, 180)
    Cic4 = makeCircle(ri, Vic4, normal, 0, 90)

    # putting the segments together, make wires, make faces, extrude them and cut them
    Wo = Part.Wire([
        Lor1,
        Coc1,
        Lor2,
        Coc2,
        Lor3,
        Coc3,
        Lor4,
        Coc4,
    ])
    Wi = Part.Wire([
        Lir1,
        Cic1,
        Lir2,
        Cic2,
        Lir3,
        Cic3,
        Lir4,
        Cic4,
    ])
    face = Part.makeFace([Wo, Wi], "Part::FaceMakerBullseye")

    if params["arch"]:
        from ArchStructure import makeStructure

        part = makeStructure(name=name)

        prof = document.addObject("Part::Feature", "Profile")
        prof.Shape = face
        part.Base = prof

        part.Height = le
    else:
        part = document.addObject("Part::Feature", "BOLTS_part")
        part.Label = name

        beam = face.extrude(Vector(0, 0, le))
        part.Shape = beam
Example #6
0
def zbeam(params, document):
        # key = params['type']
        h = params['h']
        c1 = params['c1']
        tw = params['tw']
        tf = params['tf']
        l = params['l']
        name = params['name']

        rf = tf / 2.0
        rw = tw

        # points, starting at the left upper corner, going counter-clockwise
        V1 = Vector(-0.5 * tw, 0, 0)
        V2 = Vector(-0.5 * tw + c1, 0, 0)
        V3 = Vector(-0.5 * tw + c1, tf - rf, 0)
        V4 = Vector(-0.5 * tw + c1 - rf, tf, 0)
        V5 = Vector(0.5 * tw + rw, tf, 0)
        V6 = Vector(0.5 * tw, tf + rw, 0)
        V7 = Vector(0.5 * tw, h, 0)
        V8 = Vector(0.5 * tw - c1, h, 0)
        V9 = Vector(0.5 * tw - c1, h - tf + rf, 0)
        V10 = Vector(0.5 * tw - c1 + rf, h - tf, 0)
        V11 = Vector(-0.5 * tw - rw, h - tf, 0)
        V12 = Vector(-0.5 * tw, h - tf - rw, 0)

        # circle center of the fillets, starting right bottom, going counter-clockwise
        Vc1 = Vector(-0.5 * tw + c1 - rf, tf - rf, 0)
        Vc2 = Vector(0.5 * tw + rw, tf + rw, 0)
        Vc3 = Vector(0.5 * tw - c1 + rf, h - tf + rf, 0)
        Vc4 = Vector(-0.5 * tw - rw, h - tf - rw, 0)
        normal = Vector(0, 0, 1)

        # edges
        E1 = makeLine(V1, V2)
        E2 = makeLine(V2, V3)
        E3 = makeCircle(rf, Vc1, normal, 0, 90)
        E4 = makeLine(V4, V5)
        E5 = makeCircle(rw, Vc2, normal, 180, 270)
        E6 = makeLine(V6, V7)
        E7 = makeLine(V7, V8)
        E8 = makeLine(V8, V9)
        E9 = makeCircle(rf, Vc3, normal, 180, 270)
        E10 = makeLine(V10, V11)
        E11 = makeCircle(rw, Vc4, normal, 0, 90)
        E12 = makeLine(V12, V1)

        # putting the segments together make a wire, a face and extrude it
        W = Part.Wire([E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12])
        F = Part.Face(W)

        if params['arch']:
                import Arch
                part = Arch.makeStructure(name=name)

                prof = document.addObject("Part::Feature", "Profile")
                prof.Shape = F
                part.Base = prof

                part.Height = l
        else:
                part = document.addObject("Part::Feature", "BOLTS_part")
                part.Label = name

                beam = F.extrude(Vector(0, 0, l))
                part.Shape = beam
Example #7
0
def rectangle_hollow(params,document):
        h = params['h']
        b = params['b']
        t = params['t']
        l = params['l']
        name = params['name']

        ## Definition in EN standard
        ri=1.0*t
        ro=1.5*t

        # outer rectangle, going clockwise
        Vor1 = Vector((b/2),(h/2-ro),0)
        Vor2 = Vector((b/2),(-h/2+ro),0)
        Vor3 = Vector((b/2-ro),(-h/2),0)
        Vor4 = Vector((-b/2+ro),-h/2,0)
        Vor5 = Vector(-b/2,(-h/2+ro),0)
        Vor6 = Vector(-b/2,(h/2-ro),0)
        Vor7 = Vector((-b/2+ro),(h/2),0)
        Vor8 = Vector((b/2-ro),(h/2),0)
        Lor1 = makeLine(Vor1,Vor2)
        Lor2 = makeLine(Vor3,Vor4)
        Lor3 = makeLine(Vor5,Vor6)
        Lor4 = makeLine(Vor7,Vor8)

        # outer radius, going clockwise
        Voc1 = Vector((b/2-ro),(-h/2+ro),0)
        Voc2 = Vector((-b/2+ro),(-h/2+ro),0)
        Voc3 = Vector((-b/2+ro),(h/2-ro),0)
        Voc4= Vector((b/2-ro),(h/2-ro),0)
        normal = Vector(0,0,1)
        Coc1 = makeCircle(ro,Voc1,normal,270,  0)
        Coc2 = makeCircle(ro,Voc2,normal,180,270)
        Coc3 = makeCircle(ro,Voc3,normal, 90,180)
        Coc4 = makeCircle(ro,Voc4,normal,  0, 90)

        # inner rectangle, going clockwise
        Vir1 = Vector((b/2-t),(h/2-t-ri),0)
        Vir2 = Vector((b/2-t),(-h/2+t+ri),0)
        Vir3 = Vector((b/2-t-ri),(-h/2+t),0)
        Vir4 = Vector((-b/2+t+ri),(-h/2+t),0)
        Vir5 = Vector((-b/2+t),(-h/2+t+ri),0)
        Vir6 = Vector((-b/2+t),(h/2-t-ri),0)
        Vir7 = Vector((-b/2+t+ri),(h/2-t),0)
        Vir8 = Vector((b/2-t-ri),(h/2-t),0)
        Lir1 = makeLine(Vir1,Vir2)
        Lir2 = makeLine(Vir3,Vir4)
        Lir3 = makeLine(Vir5,Vir6)
        Lir4 = makeLine(Vir7,Vir8)

        # inner radius, going clockwise
        Vic1 = Vector((b/2-t-ri),(-h/2+t+ri),0)
        Vic2 = Vector((-b/2+t+ri),(-h/2+t+ri),0)
        Vic3 = Vector((-b/2+t+ri),(h/2-t-ri),0)
        Vic4= Vector((b/2-t-ri),(h/2-t-ri),0)
        normal = Vector(0,0,1)
        Cic1 = makeCircle(ri,Vic1,normal,270,  0)
        Cic2 = makeCircle(ri,Vic2,normal,180,270)
        Cic3 = makeCircle(ri,Vic3,normal, 90,180)
        Cic4 = makeCircle(ri,Vic4,normal,  0, 90)

        # putting the segments together, make wires, make faces, extrude them and cut them
        Wo = Part.Wire([Lor1,Coc1,Lor2,Coc2,Lor3,Coc3,Lor4,Coc4,])
        Wi = Part.Wire([Lir1,Cic1,Lir2,Cic2,Lir3,Cic3,Lir4,Cic4,])
        face = Part.makeFace([Wo, Wi], "Part::FaceMakerBullseye")

        if params['arch']:
                part = Arch.makeStructure(name=name)

                prof = document.addObject("Part::Feature","Profile")
                prof.Shape = face
                part.Base = prof

                part.Height = l
        else:
                part = document.addObject("Part::Feature","BOLTS_part")
                part.Label = name

                beam = face.extrude(Vector(0,0,l))
                part.Shape = beam
Example #8
0
def zbeam(params, document):
    # key = params['type']
    h = params["h"]
    c1 = params["c1"]
    tw = params["tw"]
    tf = params["tf"]
    le = params["l"]
    name = params["name"]

    rf = tf / 2.0
    rw = tw

    # points, starting at the left upper corner, going counter-clockwise
    V1 = Vector(-0.5 * tw, 0, 0)
    V2 = Vector(-0.5 * tw + c1, 0, 0)
    V3 = Vector(-0.5 * tw + c1, tf - rf, 0)
    V4 = Vector(-0.5 * tw + c1 - rf, tf, 0)
    V5 = Vector(0.5 * tw + rw, tf, 0)
    V6 = Vector(0.5 * tw, tf + rw, 0)
    V7 = Vector(0.5 * tw, h, 0)
    V8 = Vector(0.5 * tw - c1, h, 0)
    V9 = Vector(0.5 * tw - c1, h - tf + rf, 0)
    V10 = Vector(0.5 * tw - c1 + rf, h - tf, 0)
    V11 = Vector(-0.5 * tw - rw, h - tf, 0)
    V12 = Vector(-0.5 * tw, h - tf - rw, 0)

    # circle center of the fillets, starting right bottom, going counter-clockwise
    Vc1 = Vector(-0.5 * tw + c1 - rf, tf - rf, 0)
    Vc2 = Vector(0.5 * tw + rw, tf + rw, 0)
    Vc3 = Vector(0.5 * tw - c1 + rf, h - tf + rf, 0)
    Vc4 = Vector(-0.5 * tw - rw, h - tf - rw, 0)
    normal = Vector(0, 0, 1)

    # edges
    E1 = makeLine(V1, V2)
    E2 = makeLine(V2, V3)
    E3 = makeCircle(rf, Vc1, normal, 0, 90)
    E4 = makeLine(V4, V5)
    E5 = makeCircle(rw, Vc2, normal, 180, 270)
    E6 = makeLine(V6, V7)
    E7 = makeLine(V7, V8)
    E8 = makeLine(V8, V9)
    E9 = makeCircle(rf, Vc3, normal, 180, 270)
    E10 = makeLine(V10, V11)
    E11 = makeCircle(rw, Vc4, normal, 0, 90)
    E12 = makeLine(V12, V1)

    # putting the segments together make a wire, a face and extrude it
    W = Part.Wire([E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12])
    F = Part.Face(W)

    if params["arch"]:
        from ArchStructure import makeStructure

        part = makeStructure(name=name)

        prof = document.addObject("Part::Feature", "Profile")
        prof.Shape = F
        part.Base = prof

        part.Height = le
    else:
        part = document.addObject("Part::Feature", "BOLTS_part")
        part.Label = name

        beam = F.extrude(Vector(0, 0, le))
        part.Shape = beam
Example #9
0
def ibeam_parallel_flange(params, document):
    key = params['type']
    h = params['h']
    b = params['b']
    tf = params['tf']
    tw = params['tw']
    r = params['r']
    l = params['l']
    name = params['name']

    # lower flange, starting at the left web fillet, going against clockwise
    Vlf1 = Vector((-tw / 2 - r), (-h / 2 + tf), 0)
    Vlf2 = Vector(-b / 2, (-h / 2 + tf), 0)
    Vlf3 = Vector(-b / 2, -h / 2, 0)
    Vlf4 = Vector(b / 2, -h / 2, 0)
    Vlf5 = Vector(b / 2, (-h / 2 + tf), 0)
    Vlf6 = Vector((tw / 2 + r), (-h / 2 + tf), 0)
    Llf1 = makeLine(Vlf1, Vlf2)
    Llf2 = makeLine(Vlf2, Vlf3)
    Llf3 = makeLine(Vlf3, Vlf4)
    Llf4 = makeLine(Vlf4, Vlf5)
    Llf5 = makeLine(Vlf5, Vlf6)

    # upper flange, starting at the rigth web fillet, going clockwise
    Vuf1 = Vector(tw / 2 + r, (h / 2 - tf), 0)
    Vuf2 = Vector(b / 2, (h / 2 - tf), 0)
    Vuf3 = Vector(b / 2, h / 2, 0)
    Vuf4 = Vector(-b / 2, h / 2, 0)
    Vuf5 = Vector(-b / 2, (h / 2 - tf), 0)
    Vuf6 = Vector((-tw / 2 - r), (h / 2 - tf), 0)
    Luf1 = makeLine(Vuf1, Vuf2)
    Luf2 = makeLine(Vuf2, Vuf3)
    Luf3 = makeLine(Vuf3, Vuf4)
    Luf4 = makeLine(Vuf4, Vuf5)
    Luf5 = makeLine(Vuf5, Vuf6)

    # web, starting rigth bottom, going against clockwise
    Vw1 = Vector(tw / 2, (-h / 2 + tf + r), 0)
    Vw2 = Vector(tw / 2, (h / 2 - tf - r), 0)
    Vw3 = Vector(-tw / 2, (h / 2 - tf - r), 0)
    Vw4 = Vector(-tw / 2, (-h / 2 + tf + r), 0)
    Lw1 = makeLine(Vw1, Vw2)
    Lw2 = makeLine(Vw3, Vw4)

    # center of the fillets, starting right bottom, going against clockwise
    Vfc1 = Vector((tw / 2 + r), (-h / 2 + tf + r), 0)
    Vfc2 = Vector((tw / 2 + r), (h / 2 - tf - r), 0)
    Vfc3 = Vector((-tw / 2 - r), (h / 2 - tf - r), 0)
    Vfc4 = Vector((-tw / 2 - r), (-h / 2 + tf + r), 0)
    normal = Vector(0, 0, 1)
    Cfc1 = makeCircle(r, Vfc1, normal, 180, 270)
    Cfc2 = makeCircle(r, Vfc2, normal, 90, 180)
    Cfc3 = makeCircle(r, Vfc3, normal, 0, 90)
    Cfc4 = makeCircle(r, Vfc4, normal, 270, 0)

    # putting the segments together make a wire, a face and extrude it
    W = Part.Wire([
        Llf1, Llf2, Llf3, Llf4, Llf5, Cfc1, Lw1, Cfc2, Luf1, Luf2, Luf3, Luf4,
        Luf5, Cfc3, Lw2, Cfc4
    ])
    F = Part.Face(W)

    if params['arch']:
        part = Arch.makeStructure(name=name)

        prof = document.addObject("Part::Feature", "Profile")
        prof.Shape = F
        part.Base = prof

        part.Height = l
    else:
        part = document.addObject("Part::Feature", "BOLTS_part")
        part.Label = name

        beam = F.extrude(Vector(0, 0, l))
        part.Shape = beam
Example #10
0
def ibeam_parallel_flange(params,document):
        key = params['type']
        h = params['h']
        b = params['b']
        tf = params['tf']
        tw = params['tw']
        r = params ['r']
        l = params['l']
        name = params['name']



        part = document.addObject("Part::Feature","BOLTS_part")
        part.Label = name

        # lower flange, starting at the left web fillet, going against clockwise
        Vlf1 = Vector((-tw/2-r),(-h/2+tf),0)
        Vlf2 = Vector(-b/2,(-h/2+tf),0)
        Vlf3 = Vector(-b/2,-h/2,0)
        Vlf4 = Vector(b/2,-h/2,0)
        Vlf5 = Vector(b/2,(-h/2+tf),0)
        Vlf6 = Vector((tw/2+r),(-h/2+tf),0)
        Llf1 = makeLine(Vlf1,Vlf2)
        Llf2 = makeLine(Vlf2,Vlf3)
        Llf3 = makeLine(Vlf3,Vlf4)
        Llf4 = makeLine(Vlf4,Vlf5)
        Llf5 = makeLine(Vlf5,Vlf6)

        # upper flange, starting at the rigth web fillet, going clockwise
        Vuf1 = Vector(tw/2+r,(h/2-tf),0)
        Vuf2 = Vector(b/2,(h/2-tf),0)
        Vuf3 = Vector(b/2,h/2,0)
        Vuf4 = Vector(-b/2,h/2,0)
        Vuf5 = Vector(-b/2,(h/2-tf),0)
        Vuf6 = Vector((-tw/2-r),(h/2-tf),0)
        Luf1 = makeLine(Vuf1,Vuf2)
        Luf2 = makeLine(Vuf2,Vuf3)
        Luf3 = makeLine(Vuf3,Vuf4)
        Luf4 = makeLine(Vuf4,Vuf5)
        Luf5 = makeLine(Vuf5,Vuf6)

        # web, starting rigth bottom, going against clockwise
        Vw1 = Vector(tw/2,(-h/2+tf+r),0)
        Vw2 = Vector(tw/2,(h/2-tf-r),0)
        Vw3 = Vector(-tw/2,(h/2-tf-r),0)
        Vw4 = Vector(-tw/2,(-h/2+tf+r),0)
        Lw1 = makeLine(Vw1,Vw2)
        Lw2 = makeLine(Vw3,Vw4)

        # center of the fillets, starting right bottom, going against clockwise
        Vfc1 = Vector((tw/2+r),(-h/2+tf+r),0)
        Vfc2 = Vector((tw/2+r),(h/2-tf-r),0)
        Vfc3 = Vector((-tw/2-r),(h/2-tf-r),0)
        Vfc4 = Vector((-tw/2-r),(-h/2+tf+r),0)
        normal = Vector(0,0,1)
        Cfc1 = makeCircle(r,Vfc1,normal,180,270)
        Cfc2 = makeCircle(r,Vfc2,normal, 90,180)
        Cfc3 = makeCircle(r,Vfc3,normal,  0, 90)
        Cfc4 = makeCircle(r,Vfc4,normal,270,  0)

        # putting the segments together make a wire, a face and extrude it
        W = Part.Wire([Llf1,Llf2,Llf3,Llf4,Llf5,Cfc1,Lw1,Cfc2,Luf1,Luf2,Luf3,Luf4,Luf5,Cfc3,Lw2,Cfc4])
        F = Part.Face(W)
        beam = F.extrude(Vector(0,0,l))
        part.Shape = beam
def rectangle_hollow(params, document):
    h = params['h']
    b = params['b']
    t = params['t']
    l = params['l']
    name = params['name']

    ## Definition in EN standard
    ri = 1.0 * t
    ro = 1.5 * t

    # outer rectangle, going clockwise
    Vor1 = Vector((b / 2), (h / 2 - ro), 0)
    Vor2 = Vector((b / 2), (-h / 2 + ro), 0)
    Vor3 = Vector((b / 2 - ro), (-h / 2), 0)
    Vor4 = Vector((-b / 2 + ro), -h / 2, 0)
    Vor5 = Vector(-b / 2, (-h / 2 + ro), 0)
    Vor6 = Vector(-b / 2, (h / 2 - ro), 0)
    Vor7 = Vector((-b / 2 + ro), (h / 2), 0)
    Vor8 = Vector((b / 2 - ro), (h / 2), 0)
    Lor1 = makeLine(Vor1, Vor2)
    Lor2 = makeLine(Vor3, Vor4)
    Lor3 = makeLine(Vor5, Vor6)
    Lor4 = makeLine(Vor7, Vor8)

    # outer radius, going clockwise
    Voc1 = Vector((b / 2 - ro), (-h / 2 + ro), 0)
    Voc2 = Vector((-b / 2 + ro), (-h / 2 + ro), 0)
    Voc3 = Vector((-b / 2 + ro), (h / 2 - ro), 0)
    Voc4 = Vector((b / 2 - ro), (h / 2 - ro), 0)
    normal = Vector(0, 0, 1)
    Coc1 = makeCircle(ro, Voc1, normal, 270, 0)
    Coc2 = makeCircle(ro, Voc2, normal, 180, 270)
    Coc3 = makeCircle(ro, Voc3, normal, 90, 180)
    Coc4 = makeCircle(ro, Voc4, normal, 0, 90)

    # inner rectangle, going clockwise
    Vir1 = Vector((b / 2 - t), (h / 2 - t - ri), 0)
    Vir2 = Vector((b / 2 - t), (-h / 2 + t + ri), 0)
    Vir3 = Vector((b / 2 - t - ri), (-h / 2 + t), 0)
    Vir4 = Vector((-b / 2 + t + ri), (-h / 2 + t), 0)
    Vir5 = Vector((-b / 2 + t), (-h / 2 + t + ri), 0)
    Vir6 = Vector((-b / 2 + t), (h / 2 - t - ri), 0)
    Vir7 = Vector((-b / 2 + t + ri), (h / 2 - t), 0)
    Vir8 = Vector((b / 2 - t - ri), (h / 2 - t), 0)
    Lir1 = makeLine(Vir1, Vir2)
    Lir2 = makeLine(Vir3, Vir4)
    Lir3 = makeLine(Vir5, Vir6)
    Lir4 = makeLine(Vir7, Vir8)

    # inner radius, going clockwise
    Vic1 = Vector((b / 2 - t - ri), (-h / 2 + t + ri), 0)
    Vic2 = Vector((-b / 2 + t + ri), (-h / 2 + t + ri), 0)
    Vic3 = Vector((-b / 2 + t + ri), (h / 2 - t - ri), 0)
    Vic4 = Vector((b / 2 - t - ri), (h / 2 - t - ri), 0)
    normal = Vector(0, 0, 1)
    Cic1 = makeCircle(ri, Vic1, normal, 270, 0)
    Cic2 = makeCircle(ri, Vic2, normal, 180, 270)
    Cic3 = makeCircle(ri, Vic3, normal, 90, 180)
    Cic4 = makeCircle(ri, Vic4, normal, 0, 90)

    # putting the segments together, make wires, make faces, extrude them and cut them
    Wo = Part.Wire([
        Lor1,
        Coc1,
        Lor2,
        Coc2,
        Lor3,
        Coc3,
        Lor4,
        Coc4,
    ])
    Wi = Part.Wire([
        Lir1,
        Cic1,
        Lir2,
        Cic2,
        Lir3,
        Cic3,
        Lir4,
        Cic4,
    ])
    face = Part.Face([Wo, Wi])

    if params['arch']:
        part = Arch.makeStructure(name=name)

        prof = document.addObject("Part::Feature", "Profile")
        prof.Shape = face
        part.Base = prof

        part.Height = l
    else:
        part = document.addObject("Part::Feature", "BOLTS_part")
        part.Label = name

        outer = Part.Face(Wo)
        inner = Part.Face(Wi)
        part.Shape = outer.cut(inner).extrude(Vector(0, 0, l))