From 933d962dc64d1edfe1b3624d4ba0062f3cff7d08 Mon Sep 17 00:00:00 2001 From: bevin Date: Tue, 25 Aug 2020 21:47:30 +0200 Subject: [PATCH] WIP for hypocycloid disk creation --- freecad/gears/commands.py | 9 +++++- freecad/gears/features.py | 28 +++++++++++++++++ freecad/gears/icons/hypocycloidgear.svg | 41 +++++++++++++++++++++++++ freecad/gears/init_gui.py | 6 +++- 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 freecad/gears/icons/hypocycloidgear.svg diff --git a/freecad/gears/commands.py b/freecad/gears/commands.py index 0760ce6..aa47249 100644 --- a/freecad/gears/commands.py +++ b/freecad/gears/commands.py @@ -23,7 +23,7 @@ import os import FreeCAD import FreeCADGui as Gui from .features import ViewProviderGear, InvoluteGear, InvoluteGearRack -from .features import CycloideGear, BevelGear, CrownGear, WormGear, TimingGear, LanternGear +from .features import CycloideGear, BevelGear, CrownGear, WormGear, TimingGear, LanternGear, HypoCycloidGear class BaseCommand(object): @@ -110,6 +110,13 @@ class CreateBevelGear(BaseCommand): MenuText = 'Bevel gear' ToolTip = 'Create a Bevel gear' +class CreateHypoCycloidGear(BaseCommand): + NAME = "hypocycloidgear" + GEAR_FUNCTION = HypoCycloidGear + Pixmap = os.path.join(BaseCommand.ICONDIR, 'hypocycloidgear.svg') + MenuText = 'HypoCycloid gear' + ToolTip = 'Create a HypoCycloid gear with its pins' + class CreateWormGear(BaseCommand): NAME = "wormgear" diff --git a/freecad/gears/features.py b/freecad/gears/features.py index bba1821..cc97dd0 100644 --- a/freecad/gears/features.py +++ b/freecad/gears/features.py @@ -943,7 +943,35 @@ class LanternGear(object): def __setstate__(self, state): pass +class HypoCycloidGear(object): + """parameters: + pressure_angle: pressureangle, 10-30° + pitch_angle: cone angle, 0 < pitch_angle < pi/4 + """ + + def __init__(self, obj): + obj.addProperty("App::PropertyFloat","pin_circle_diameter", "gear_parameter","Pin bold circle diameter(overrides Tooth Pitch") + obj.addProperty("App::PropertyFloat","roller_diameter", "gear_parameter","Roller Diameter") + obj.addProperty("App::PropertyFloat","eccentricity", "gear_parameter","Eccentricity") + obj.addProperty("App::PropertyAngle","pressure_angle_lim", "gear_parameter","Pressure angle limit") + obj.addProperty("App::PropertyFloat","pressure_angle_offset", "gear_parameter","Offset in pressure angle") + obj.addProperty("App::PropertyInteger","teeth_number", "gear_parameter","Number of teeth in Cam") + + obj.addProperty( + "App::PropertyLength", "height", "gear_parameter", "height") + + obj.pin_circle_diameter = 92 + obj.roller_diameter = 6 + obj.eccentricity = 3 + obj.pressure_angle_lim = '50.0 deg' + obj.pressure_angle_offset = 0.01 + obj.teeth_number = 20 + obj.height = '5. mm' + self.obj = obj + obj.Proxy = self + + def execute(self, fp): def part_arc_from_points_and_center(p_1, p_2, m): p_1, p_12, p_2 = arc_from_points_and_center(p_1, p_2, m) diff --git a/freecad/gears/icons/hypocycloidgear.svg b/freecad/gears/icons/hypocycloidgear.svg new file mode 100644 index 0000000..aa4f3ce --- /dev/null +++ b/freecad/gears/icons/hypocycloidgear.svg @@ -0,0 +1,41 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + diff --git a/freecad/gears/init_gui.py b/freecad/gears/init_gui.py index 8e7f967..056ce1a 100644 --- a/freecad/gears/init_gui.py +++ b/freecad/gears/init_gui.py @@ -46,7 +46,8 @@ class GearWorkbench(Workbench): "CreateCrownGear", "CreateWormGear", "CreateTimingGear", - "CreateLanternGear"] + "CreateLanternGear", + "CreateHypoCycloidGear"] def GetClassName(self): return "Gui::PythonWorkbench" @@ -55,6 +56,8 @@ class GearWorkbench(Workbench): from .commands import CreateCycloideGear, CreateInvoluteGear from .commands import CreateBevelGear, CreateInvoluteRack, CreateCrownGear from .commands import CreateWormGear, CreateTimingGear, CreateLanternGear + from .commands import CreateHypoCycloidGear + self.appendToolbar("Gear", self.commands) self.appendMenu("Gear", self.commands) # Gui.addIconPath(App.getHomePath()+"Mod/gear/icons/") @@ -66,6 +69,7 @@ class GearWorkbench(Workbench): Gui.addCommand('CreateWormGear', CreateWormGear()) Gui.addCommand('CreateTimingGear', CreateTimingGear()) Gui.addCommand('CreateLanternGear', CreateLanternGear()) + Gui.addCommand('CreateHypoCycloidGear', CreateHypoCycloidGear()) def Activated(self): pass