diff --git a/freecad/gears/features.py b/freecad/gears/features.py index 43891da..1b5eeeb 100644 --- a/freecad/gears/features.py +++ b/freecad/gears/features.py @@ -131,7 +131,7 @@ class InvoluteGear(BaseGear): "App::PropertyBool", "properties_from_tool", "gear_parameter", "if beta is given and properties_from_tool is enabled, \ gear parameters are internally recomputed for the rotated gear") obj.addProperty("App::PropertyFloat", "head_fillet", "gear_parameter", "a fillet for the tooth-head, radius = head_fillet x module") - obj.addProperty("App::PropertyFloat", "root_fillet", "gear_parameter", "a fillet for the tooth-foot, radius = foot_fillet x module") + obj.addProperty("App::PropertyFloat", "root_fillet", "gear_parameter", "a fillet for the tooth-root, radius = root_fillet x module") obj.addProperty("App::PropertyPythonObject", "gear", "gear_parameter", "test") obj.addProperty("App::PropertyLength", "dw", @@ -156,7 +156,7 @@ class InvoluteGear(BaseGear): obj.reversed_backlash = False obj.properties_from_tool = False obj.head_fillet = 0 - obj.foot_fillet = 0 + obj.root_fillet = 0 self.obj = obj obj.Proxy = self @@ -195,32 +195,32 @@ class InvoluteGear(BaseGear): # head-fillet: r_head = float(fp.head_fillet * fp.module) - r_foot = float(fp.foot_fillet * fp.module) - if fp.undercut and r_foot != 0.: - r_foot = 0. - App.Console.PrintWarning("foot fillet is not allowed if undercut is computed") + r_root = float(fp.root_fillet * fp.module) + if fp.undercut and r_root != 0.: + r_root = 0. + App.Console.PrintWarning("root fillet is not allowed if undercut is computed") if len(tooth.Edges) == 11: pos_head = [1, 3, 9] - pos_foot = [6, 8] + pos_root = [6, 8] edge_range = [2, 12] else: pos_head = [0, 2, 6] - pos_foot = [4, 6] + pos_root = [4, 6] edge_range = [1, 9] for pos in pos_head: edges = insert_fillet(edges, pos, r_head) - for pos in pos_foot: + for pos in pos_root: try: - edges = insert_fillet(edges, pos, r_foot) + edges = insert_fillet(edges, pos, r_root) except RuntimeError: edges.pop(8) edges.pop(6) edge_range = [2, 10] - pos_foot = [5, 7] - for pos in pos_foot: - edges = insert_fillet(edges, pos, r_foot) + pos_root = [5, 7] + for pos in pos_root: + edges = insert_fillet(edges, pos, r_root) break edges = edges[edge_range[0]:edge_range[1]] edges = [e for e in edges if e is not None] @@ -280,7 +280,7 @@ class InvoluteGearRack(BaseGear): obj.addProperty( "App::PropertyFloat", "head", "gear_parameter", "head * module = additional length of head") obj.addProperty( - "App::PropertyFloat", "clearance", "gear_parameter", "clearance * module = additional length of foot") + "App::PropertyFloat", "clearance", "gear_parameter", "clearance * module = additional length of root") obj.addProperty( "App::PropertyBool", "properties_from_tool", "gear_parameter", "if beta is given and properties_from_tool is enabled, \ gear parameters are internally recomputed for the rotated gear") @@ -327,6 +327,7 @@ class InvoluteGearRack(BaseGear): fp.rack._update() pts = fp.rack.points() pol = Wire(makePolygon(list(map(fcvec, pts)))) + if fp.height.Value == 0: fp.Shape = pol elif fp.beta.Value == 0: @@ -502,7 +503,7 @@ class CycloidGear(BaseGear): obj.addProperty( "App::PropertyLength", "backlash", "gear_parameter", "backlash in mm") obj.addProperty("App::PropertyFloat", "head_fillet", "gear_parameter", "a fillet for the tooth-head, radius = head_fillet x module") - obj.addProperty("App::PropertyFloat", "root_fillet", "gear_parameter", "a fillet for the tooth-foot, radius = foot_fillet x module") + obj.addProperty("App::PropertyFloat", "root_fillet", "gear_parameter", "a fillet for the tooth-root, radius = root_fillet x module") obj.addProperty( "App::PropertyFloat", "head", "gear_parameter", "head_value * modul_value = additional length of head") obj.addProperty("App::PropertyPythonObject", "gear", @@ -520,7 +521,7 @@ class CycloidGear(BaseGear): obj.double_helix = False obj.head = 0 obj.head_fillet = 0 - obj.foot_fillet = 0 + obj.root_fillet = 0 obj.Proxy = self def execute(self, fp): @@ -542,17 +543,17 @@ class CycloidGear(BaseGear): edges = tooth.Edges r_head = float(fp.head_fillet * fp.module) - r_foot = float(fp.foot_fillet * fp.module) + r_root = float(fp.root_fillet * fp.module) pos_head = [0, 2, 6] - pos_foot = [4, 6] + pos_root = [4, 6] edge_range = [1, 9] for pos in pos_head: edges = insert_fillet(edges, pos, r_head) - for pos in pos_foot: - edges = insert_fillet(edges, pos, r_foot) + for pos in pos_root: + edges = insert_fillet(edges, pos, r_root) edges = edges[edge_range[0]:edge_range[1]] edges = [e for e in edges if e is not None] @@ -627,6 +628,9 @@ class BevelGear(BaseGear): fp.gear.module = fp.module.Value fp.gear.pressure_angle = (90 - fp.pressure_angle.Value) * np.pi / 180. fp.gear.pitch_angle = fp.pitch_angle.Value * np.pi / 180 + max_height = fp.gear.module * fp.teeth / 2 / np.tan(fp.gear.pitch_angle) + if fp.height >= max_height: + App.Console.PrintWarning("height must be smaller than {}".format(max_height)) fp.gear.backlash = fp.backlash.Value scale = fp.module.Value * fp.gear.z / 2 / \ np.tan(fp.pitch_angle.Value * np.pi / 180) @@ -729,7 +733,7 @@ class WormGear(BaseGear): obj.addProperty( "App::PropertyFloat", "head", "gear_parameter", "head * module = additional length of head") obj.addProperty( - "App::PropertyFloat", "clearance", "gear_parameter", "clearance * module = additional length of foot") + "App::PropertyFloat", "clearance", "gear_parameter", "clearance * module = additional length of root") obj.addProperty( "App::PropertyBool", "reverse_pitch", "gear_parameter", "reverse rotation of helix") obj.teeth = 3