Your
commited on
Commit
·
09bcf95
1
Parent(s):
0327197
clear cache
Browse files- generated/result_script.py +90 -58
generated/result_script.py
CHANGED
|
@@ -1,72 +1,104 @@
|
|
| 1 |
import FreeCAD as App
|
| 2 |
import FreeCADGui as Gui
|
| 3 |
-
from FreeCAD import Vector
|
|
|
|
| 4 |
import math
|
| 5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
FLANGE_OUTER_DIAMETER = 100.0
|
| 11 |
-
FLANGE_THICKNESS = 7.5
|
| 12 |
-
BORE_INNER_DIAMETER = 50.0
|
| 13 |
-
NECK_HEIGHT = 15.0
|
| 14 |
-
NECK_OUTER_DIAMETER = 60.0
|
| 15 |
-
NUM_BOLT_HOLES = 6
|
| 16 |
-
BOLT_HOLE_DIAMETER = 12.0
|
| 17 |
-
PCD = 75.0
|
| 18 |
-
|
| 19 |
-
total_height = FLANGE_THICKNESS + NECK_HEIGHT
|
| 20 |
-
|
| 21 |
-
flange = doc.addObject("Part::Cylinder", "Flange")
|
| 22 |
-
flange.Radius = FLANGE_OUTER_DIAMETER / 2
|
| 23 |
-
flange.Height = FLANGE_THICKNESS
|
| 24 |
-
|
| 25 |
-
bore = doc.addObject("Part::Cylinder", "CentralBore")
|
| 26 |
-
bore.Radius = BORE_INNER_DIAMETER / 2
|
| 27 |
-
bore.Height = FLANGE_THICKNESS
|
| 28 |
-
bore_cut = doc.addObject("Part::Cut", "FlangeWithBore")
|
| 29 |
-
bore_cut.Base = flange
|
| 30 |
-
bore_cut.Tool = bore
|
| 31 |
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
neck_outer.Placement.Base = Vector(0, 0, FLANGE_THICKNESS)
|
| 36 |
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
|
|
|
| 45 |
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
|
| 50 |
-
|
| 51 |
-
bolt_radius = BOLT_HOLE_DIAMETER / 2
|
| 52 |
-
bolt_circle_radius = PCD / 2
|
| 53 |
|
| 54 |
-
for i in range(
|
| 55 |
-
angle_deg = 360 * i /
|
| 56 |
angle_rad = math.radians(angle_deg)
|
| 57 |
-
x =
|
| 58 |
-
y =
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
|
|
|
|
|
|
|
|
|
| 70 |
doc.recompute()
|
| 71 |
Gui.activeDocument().activeView().viewAxometric()
|
| 72 |
Gui.SendMsgToActiveView("ViewFit")
|
|
@@ -74,7 +106,7 @@ def createFlangeAssembly():
|
|
| 74 |
return doc
|
| 75 |
|
| 76 |
if __name__ == "__main__":
|
| 77 |
-
|
| 78 |
|
| 79 |
|
| 80 |
import FreeCADGui
|
|
|
|
| 1 |
import FreeCAD as App
|
| 2 |
import FreeCADGui as Gui
|
| 3 |
+
from FreeCAD import Vector, Placement, Rotation
|
| 4 |
+
import Part
|
| 5 |
import math
|
| 6 |
|
| 7 |
+
def createBearing():
|
| 8 |
+
doc = App.newDocument("Bearing")
|
| 9 |
+
|
| 10 |
+
INNER_RING_INNER_DIAMETER = 25.0
|
| 11 |
+
INNER_RING_OUTER_DIAMETER = 35.0
|
| 12 |
+
OUTER_RING_INNER_DIAMETER = 45.0
|
| 13 |
+
OUTER_RING_OUTER_DIAMETER = 52.0
|
| 14 |
+
BEARING_WIDTH = 15.0
|
| 15 |
+
BALL_DIAMETER = 7.0
|
| 16 |
+
NUMBER_OF_BALLS = 8
|
| 17 |
+
|
| 18 |
+
INNER_RING_RADIUS_INNER = INNER_RING_INNER_DIAMETER / 2
|
| 19 |
+
INNER_RING_RADIUS_OUTER = INNER_RING_OUTER_DIAMETER / 2
|
| 20 |
+
OUTER_RING_RADIUS_INNER = OUTER_RING_INNER_DIAMETER / 2
|
| 21 |
+
OUTER_RING_RADIUS_OUTER = OUTER_RING_OUTER_DIAMETER / 2
|
| 22 |
+
BALL_RADIUS = BALL_DIAMETER / 2
|
| 23 |
+
PCD_BALLS = (INNER_RING_RADIUS_OUTER + OUTER_RING_RADIUS_INNER) / 2
|
| 24 |
+
|
| 25 |
+
outer_ring_outer_cyl = doc.addObject("Part::Cylinder", "OuterRing_OuterCylinder")
|
| 26 |
+
outer_ring_outer_cyl.Radius = OUTER_RING_RADIUS_OUTER
|
| 27 |
+
outer_ring_outer_cyl.Height = BEARING_WIDTH
|
| 28 |
+
outer_ring_outer_cyl.Placement.Base = Vector(0, 0, 0)
|
| 29 |
+
|
| 30 |
+
outer_ring_inner_cyl = doc.addObject("Part::Cylinder", "OuterRing_InnerBore")
|
| 31 |
+
outer_ring_inner_cyl.Radius = OUTER_RING_RADIUS_INNER
|
| 32 |
+
outer_ring_inner_cyl.Height = BEARING_WIDTH
|
| 33 |
+
outer_ring_inner_cyl.Placement.Base = Vector(0, 0, 0)
|
| 34 |
+
|
| 35 |
+
outer_ring_cut = doc.addObject("Part::Cut", "OuterRing")
|
| 36 |
+
outer_ring_cut.Base = outer_ring_outer_cyl
|
| 37 |
+
outer_ring_cut.Tool = outer_ring_inner_cyl
|
| 38 |
+
|
| 39 |
+
inner_ring_outer_cyl = doc.addObject("Part::Cylinder", "InnerRing_OuterCylinder")
|
| 40 |
+
inner_ring_outer_cyl.Radius = INNER_RING_RADIUS_OUTER
|
| 41 |
+
inner_ring_outer_cyl.Height = BEARING_WIDTH
|
| 42 |
+
inner_ring_outer_cyl.Placement.Base = Vector(0, 0, 0)
|
| 43 |
+
|
| 44 |
+
inner_ring_inner_cyl = doc.addObject("Part::Cylinder", "InnerRing_InnerBore")
|
| 45 |
+
inner_ring_inner_cyl.Radius = INNER_RING_RADIUS_INNER
|
| 46 |
+
inner_ring_inner_cyl.Height = BEARING_WIDTH
|
| 47 |
+
inner_ring_inner_cyl.Placement.Base = Vector(0, 0, 0)
|
| 48 |
+
|
| 49 |
+
inner_ring_cut = doc.addObject("Part::Cut", "InnerRing")
|
| 50 |
+
inner_ring_cut.Base = inner_ring_outer_cyl
|
| 51 |
+
inner_ring_cut.Tool = inner_ring_inner_cyl
|
| 52 |
+
|
| 53 |
+
for i in range(NUMBER_OF_BALLS):
|
| 54 |
+
angle_deg = 360 * i / NUMBER_OF_BALLS
|
| 55 |
+
angle_rad = math.radians(angle_deg)
|
| 56 |
+
x = PCD_BALLS * math.cos(angle_rad)
|
| 57 |
+
y = PCD_BALLS * math.sin(angle_rad)
|
| 58 |
|
| 59 |
+
ball = doc.addObject("Part::Sphere", f"Ball_{i+1:02d}")
|
| 60 |
+
ball.Radius = BALL_RADIUS
|
| 61 |
+
ball.Placement.Base = Vector(x, y, BEARING_WIDTH / 2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
+
CAGE_THICKNESS = BALL_DIAMETER * 0.5
|
| 64 |
+
CAGE_INNER_RADIUS_EFFECTIVE = PCD_BALLS - CAGE_THICKNESS / 2
|
| 65 |
+
CAGE_OUTER_RADIUS_EFFECTIVE = PCD_BALLS + CAGE_THICKNESS / 2
|
|
|
|
| 66 |
|
| 67 |
+
cage_base_outer = doc.addObject("Part::Cylinder", "Cage_BodyOuter")
|
| 68 |
+
cage_base_outer.Radius = CAGE_OUTER_RADIUS_EFFECTIVE
|
| 69 |
+
cage_base_outer.Height = BEARING_WIDTH
|
| 70 |
+
cage_base_outer.Placement.Base = Vector(0, 0, 0)
|
| 71 |
|
| 72 |
+
cage_base_inner = doc.addObject("Part::Cylinder", "Cage_BodyInner")
|
| 73 |
+
cage_base_inner.Radius = CAGE_INNER_RADIUS_EFFECTIVE
|
| 74 |
+
cage_base_inner.Height = BEARING_WIDTH
|
| 75 |
+
cage_base_inner.Placement.Base = Vector(0, 0, 0)
|
| 76 |
|
| 77 |
+
cage_ring = doc.addObject("Part::Cut", "Cage_RingBase")
|
| 78 |
+
cage_ring.Base = cage_base_outer
|
| 79 |
+
cage_ring.Tool = cage_base_inner
|
| 80 |
|
| 81 |
+
current_cage_shape = cage_ring
|
|
|
|
|
|
|
| 82 |
|
| 83 |
+
for i in range(NUMBER_OF_BALLS):
|
| 84 |
+
angle_deg = 360 * i / NUMBER_OF_BALLS
|
| 85 |
angle_rad = math.radians(angle_deg)
|
| 86 |
+
x = PCD_BALLS * math.cos(angle_rad)
|
| 87 |
+
y = PCD_BALLS * math.sin(angle_rad)
|
| 88 |
+
|
| 89 |
+
pocket_radius = BALL_RADIUS * 1.05
|
| 90 |
+
pocket_height = BEARING_WIDTH * 1.1
|
| 91 |
+
|
| 92 |
+
ball_pocket = doc.addObject("Part::Cylinder", f"CagePocket_{i+1:02d}")
|
| 93 |
+
ball_pocket.Radius = pocket_radius
|
| 94 |
+
ball_pocket.Height = pocket_height
|
| 95 |
+
ball_pocket.Placement.Base = Vector(x, y, (BEARING_WIDTH - pocket_height) / 2)
|
| 96 |
+
|
| 97 |
+
cut_cage = doc.addObject("Part::Cut", f"Cage_Slotted_{i+1:02d}")
|
| 98 |
+
cut_cage.Base = current_cage_shape
|
| 99 |
+
cut_cage.Tool = ball_pocket
|
| 100 |
+
current_cage_shape = cut_cage
|
| 101 |
+
|
| 102 |
doc.recompute()
|
| 103 |
Gui.activeDocument().activeView().viewAxometric()
|
| 104 |
Gui.SendMsgToActiveView("ViewFit")
|
|
|
|
| 106 |
return doc
|
| 107 |
|
| 108 |
if __name__ == "__main__":
|
| 109 |
+
createBearing()
|
| 110 |
|
| 111 |
|
| 112 |
import FreeCADGui
|