CADomatic / generated /result_script.py
Your
clear cache
09bcf95
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")