Macro Geneva Wheel: Difference between revisions
(Creation of Page) |
(Added Code) |
||
Line 1: | Line 1: | ||
{{Macro|Icon=Text-x-python|Name=MacroGeneva_Wheel|Description=Allows the user to create a Geneva wheel mechanism from scratch. Must edit values within the Macro to alter the size of the object.|Author=drei}} |
{{Macro|Icon=Text-x-python|Name=MacroGeneva_Wheel|Description=Allows the user to create a Geneva wheel mechanism from scratch. Must edit values within the Macro to alter the size of the object.|Author=drei}} |
||
<syntaxhighlight> |
|||
#Creation of a Geneva Wheel with Parametric values By: Isaac Ayala |
|||
#This Macro creates the main parts of a Geneva Wheel Mechanism |
|||
#It depends on six values that must be altered in the following code |
|||
#The variables are a, b, n, p, t and h. |
|||
#Definition for each variable |
|||
# Input |
|||
#a = Drive Crank Radius |
|||
#b = Geneva Wheel Radius |
|||
#n = Driven Slot Quantity |
|||
#p = Drive Pin Diameter |
|||
#t = Tolerance |
|||
#h = Height |
|||
# Output |
|||
#c = Distance Between Centers |
|||
#s = Slot Center Width |
|||
#w = Slot Width |
|||
#y = Stop Arc Radius |
|||
#z = Stop Disc Radius |
|||
#v = Clearance Arc |
|||
#Please note that you can alter the code so it depends on five values exclusively |
|||
#Just replace c, and either a or b with the following |
|||
# Keep value for a |
|||
#c = a/math.sin(math.pi/n) |
|||
#b = math.sqrt((math.pow(c,2))-(math.pow(a,2))) |
|||
# Keep value for b |
|||
#c = b/math.cos(math.pi/n) |
|||
#a = math.sqrt((math.pow(c,2))-(math.pow(b,2))) |
|||
from __future__ import division |
|||
import time |
|||
import math |
|||
from PySide import QtCore, QtGui |
|||
from FreeCAD import Base |
|||
import Part |
|||
#Inputs |
|||
a = 25.0 |
|||
b = 60.0 |
|||
n = 6 |
|||
p = 4 |
|||
t = 0.01 |
|||
h = 5 |
|||
T = 60 |
|||
#Outputs |
|||
c = math.sqrt(pow(a,2) + pow(b,2)) |
|||
s = a + b - c |
|||
w = p + t |
|||
y = a - (1.5 * p) |
|||
z = y - t |
|||
v = (b * z)/a |
|||
# Create the Drive Crank (Will be placed on the origin) |
|||
driveCrank = Part.makeCylinder(z, h) |
|||
driveCrank.translate(Base.Vector(0,0,0)) |
|||
genevaWheelClearanceCut = Part.makeCylinder(b, h) |
|||
genevaWheelClearanceCut.translate(Base.Vector(-c,0,0)) |
|||
driveCrank = driveCrank.cut(genevaWheelClearanceCut) |
|||
driveCrankBase = Part.makeCylinder((1.5*a), h) |
|||
driveCrankBase.translate(Base.Vector(0,0,-h)) |
|||
driveCrank = driveCrank.fuse(driveCrankBase) |
|||
drivePin = Part.makeCylinder(p,h) |
|||
drivePin.translate(Base.Vector(-a,0,0)) |
|||
driveCrank = driveCrank.fuse(drivePin) |
|||
# Create the Geneva Wheel (Will be placed on the x-axis on the left side) |
|||
genevaWheel = Part.makeCylinder(b,h) |
|||
genevaWheel.translate(Base.Vector(-c,0,0)) |
|||
stopArc = Part.makeCylinder(y, h) |
|||
stopArc.translate(Base.Vector(((y-(b/2)),0,0))) |
|||
stopArc.rotate(Base.Vector(-c,0,0),Base.Vector(0,0,1),30) |
|||
for i in range(6): |
|||
stopArc.rotate(Base.Vector(-c,0,0),Base.Vector(0,0,1),60) |
|||
genevaWheel = genevaWheel.cut(stopArc) |
|||
slotLength = Part.makeBox(s,(2*w),h) |
|||
slotLength.translate(Base.Vector(-a,-w,0)) |
|||
slotRadius = Part.makeCylinder(w,h) |
|||
slotRadius.translate(Base.Vector(-a,0,0)) |
|||
slot=slotLength.fuse(slotRadius) |
|||
for i in range(6): |
|||
slot.rotate(Base.Vector(-c,0,0),Base.Vector(0,0,1),60) |
|||
genevaWheel = genevaWheel.cut(slot) |
|||
# Display Result |
|||
Part.show(driveCrank) |
|||
Part.show(genevaWheel) |
|||
</syntaxhighlight> |
Revision as of 19:31, 21 September 2014
File:Text-x-python MacroGeneva_Wheel |
Description |
---|
Allows the user to create a Geneva wheel mechanism from scratch. Must edit values within the Macro to alter the size of the object. Author: drei |
Author |
drei |
Download |
None |
Links |
Macros recipes How to install macros How to customize toolbars |
Macro Version |
1.0 |
Date last modified |
None |
FreeCAD Version(s) |
None |
Default shortcut |
None |
See also |
None |
#Creation of a Geneva Wheel with Parametric values By: Isaac Ayala
#This Macro creates the main parts of a Geneva Wheel Mechanism
#It depends on six values that must be altered in the following code
#The variables are a, b, n, p, t and h.
#Definition for each variable
# Input
#a = Drive Crank Radius
#b = Geneva Wheel Radius
#n = Driven Slot Quantity
#p = Drive Pin Diameter
#t = Tolerance
#h = Height
# Output
#c = Distance Between Centers
#s = Slot Center Width
#w = Slot Width
#y = Stop Arc Radius
#z = Stop Disc Radius
#v = Clearance Arc
#Please note that you can alter the code so it depends on five values exclusively
#Just replace c, and either a or b with the following
# Keep value for a
#c = a/math.sin(math.pi/n)
#b = math.sqrt((math.pow(c,2))-(math.pow(a,2)))
# Keep value for b
#c = b/math.cos(math.pi/n)
#a = math.sqrt((math.pow(c,2))-(math.pow(b,2)))
from __future__ import division
import time
import math
from PySide import QtCore, QtGui
from FreeCAD import Base
import Part
#Inputs
a = 25.0
b = 60.0
n = 6
p = 4
t = 0.01
h = 5
T = 60
#Outputs
c = math.sqrt(pow(a,2) + pow(b,2))
s = a + b - c
w = p + t
y = a - (1.5 * p)
z = y - t
v = (b * z)/a
# Create the Drive Crank (Will be placed on the origin)
driveCrank = Part.makeCylinder(z, h)
driveCrank.translate(Base.Vector(0,0,0))
genevaWheelClearanceCut = Part.makeCylinder(b, h)
genevaWheelClearanceCut.translate(Base.Vector(-c,0,0))
driveCrank = driveCrank.cut(genevaWheelClearanceCut)
driveCrankBase = Part.makeCylinder((1.5*a), h)
driveCrankBase.translate(Base.Vector(0,0,-h))
driveCrank = driveCrank.fuse(driveCrankBase)
drivePin = Part.makeCylinder(p,h)
drivePin.translate(Base.Vector(-a,0,0))
driveCrank = driveCrank.fuse(drivePin)
# Create the Geneva Wheel (Will be placed on the x-axis on the left side)
genevaWheel = Part.makeCylinder(b,h)
genevaWheel.translate(Base.Vector(-c,0,0))
stopArc = Part.makeCylinder(y, h)
stopArc.translate(Base.Vector(((y-(b/2)),0,0)))
stopArc.rotate(Base.Vector(-c,0,0),Base.Vector(0,0,1),30)
for i in range(6):
stopArc.rotate(Base.Vector(-c,0,0),Base.Vector(0,0,1),60)
genevaWheel = genevaWheel.cut(stopArc)
slotLength = Part.makeBox(s,(2*w),h)
slotLength.translate(Base.Vector(-a,-w,0))
slotRadius = Part.makeCylinder(w,h)
slotRadius.translate(Base.Vector(-a,0,0))
slot=slotLength.fuse(slotRadius)
for i in range(6):
slot.rotate(Base.Vector(-c,0,0),Base.Vector(0,0,1),60)
genevaWheel = genevaWheel.cut(slot)
# Display Result
Part.show(driveCrank)
Part.show(genevaWheel)