CADomatic / generated /result_script.py
Your
clear cache
09bcf95
Raw
History Blame Contribute Delete
4.29 kB
import FreeCAD as App
import FreeCADGui as Gui
from FreeCAD import Vector, Placement, Rotation
import Part
import math
def createBearing():
doc = App.newDocument("Bearing")
INNER_RING_INNER_DIAMETER = 25.0
INNER_RING_OUTER_DIAMETER = 35.0
OUTER_RING_INNER_DIAMETER = 45.0
OUTER_RING_OUTER_DIAMETER = 52.0
BEARING_WIDTH = 15.0
BALL_DIAMETER = 7.0
NUMBER_OF_BALLS = 8
INNER_RING_RADIUS_INNER = INNER_RING_INNER_DIAMETER / 2
INNER_RING_RADIUS_OUTER = INNER_RING_OUTER_DIAMETER / 2
OUTER_RING_RADIUS_INNER = OUTER_RING_INNER_DIAMETER / 2
OUTER_RING_RADIUS_OUTER = OUTER_RING_OUTER_DIAMETER / 2
BALL_RADIUS = BALL_DIAMETER / 2
PCD_BALLS = (INNER_RING_RADIUS_OUTER + OUTER_RING_RADIUS_INNER) / 2
outer_ring_outer_cyl = doc.addObject("Part::Cylinder", "OuterRing_OuterCylinder")
outer_ring_outer_cyl.Radius = OUTER_RING_RADIUS_OUTER
outer_ring_outer_cyl.Height = BEARING_WIDTH
outer_ring_outer_cyl.Placement.Base = Vector(0, 0, 0)
outer_ring_inner_cyl = doc.addObject("Part::Cylinder", "OuterRing_InnerBore")
outer_ring_inner_cyl.Radius = OUTER_RING_RADIUS_INNER
outer_ring_inner_cyl.Height = BEARING_WIDTH
outer_ring_inner_cyl.Placement.Base = Vector(0, 0, 0)
outer_ring_cut = doc.addObject("Part::Cut", "OuterRing")
outer_ring_cut.Base = outer_ring_outer_cyl
outer_ring_cut.Tool = outer_ring_inner_cyl
inner_ring_outer_cyl = doc.addObject("Part::Cylinder", "InnerRing_OuterCylinder")
inner_ring_outer_cyl.Radius = INNER_RING_RADIUS_OUTER
inner_ring_outer_cyl.Height = BEARING_WIDTH
inner_ring_outer_cyl.Placement.Base = Vector(0, 0, 0)
inner_ring_inner_cyl = doc.addObject("Part::Cylinder", "InnerRing_InnerBore")
inner_ring_inner_cyl.Radius = INNER_RING_RADIUS_INNER
inner_ring_inner_cyl.Height = BEARING_WIDTH
inner_ring_inner_cyl.Placement.Base = Vector(0, 0, 0)
inner_ring_cut = doc.addObject("Part::Cut", "InnerRing")
inner_ring_cut.Base = inner_ring_outer_cyl
inner_ring_cut.Tool = inner_ring_inner_cyl
for i in range(NUMBER_OF_BALLS):
angle_deg = 360 * i / NUMBER_OF_BALLS
angle_rad = math.radians(angle_deg)
x = PCD_BALLS * math.cos(angle_rad)
y = PCD_BALLS * math.sin(angle_rad)
ball = doc.addObject("Part::Sphere", f"Ball_{i+1:02d}")
ball.Radius = BALL_RADIUS
ball.Placement.Base = Vector(x, y, BEARING_WIDTH / 2)
CAGE_THICKNESS = BALL_DIAMETER * 0.5
CAGE_INNER_RADIUS_EFFECTIVE = PCD_BALLS - CAGE_THICKNESS / 2
CAGE_OUTER_RADIUS_EFFECTIVE = PCD_BALLS + CAGE_THICKNESS / 2
cage_base_outer = doc.addObject("Part::Cylinder", "Cage_BodyOuter")
cage_base_outer.Radius = CAGE_OUTER_RADIUS_EFFECTIVE
cage_base_outer.Height = BEARING_WIDTH
cage_base_outer.Placement.Base = Vector(0, 0, 0)
cage_base_inner = doc.addObject("Part::Cylinder", "Cage_BodyInner")
cage_base_inner.Radius = CAGE_INNER_RADIUS_EFFECTIVE
cage_base_inner.Height = BEARING_WIDTH
cage_base_inner.Placement.Base = Vector(0, 0, 0)
cage_ring = doc.addObject("Part::Cut", "Cage_RingBase")
cage_ring.Base = cage_base_outer
cage_ring.Tool = cage_base_inner
current_cage_shape = cage_ring
for i in range(NUMBER_OF_BALLS):
angle_deg = 360 * i / NUMBER_OF_BALLS
angle_rad = math.radians(angle_deg)
x = PCD_BALLS * math.cos(angle_rad)
y = PCD_BALLS * math.sin(angle_rad)
pocket_radius = BALL_RADIUS * 1.05
pocket_height = BEARING_WIDTH * 1.1
ball_pocket = doc.addObject("Part::Cylinder", f"CagePocket_{i+1:02d}")
ball_pocket.Radius = pocket_radius
ball_pocket.Height = pocket_height
ball_pocket.Placement.Base = Vector(x, y, (BEARING_WIDTH - pocket_height) / 2)
cut_cage = doc.addObject("Part::Cut", f"Cage_Slotted_{i+1:02d}")
cut_cage.Base = current_cage_shape
cut_cage.Tool = ball_pocket
current_cage_shape = cut_cage
doc.recompute()
Gui.activeDocument().activeView().viewAxometric()
Gui.SendMsgToActiveView("ViewFit")
return doc
if __name__ == "__main__":
createBearing()
import FreeCADGui
FreeCADGui.activeDocument().activeView().viewAxometric()
FreeCADGui.SendMsgToActiveView("ViewFit")