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")
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
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
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
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
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
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
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
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
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))