diff --git a/freecad/gears/bevelgear.py b/freecad/gears/bevelgear.py index 91dd2ac..0862ccd 100644 --- a/freecad/gears/bevelgear.py +++ b/freecad/gears/bevelgear.py @@ -106,21 +106,21 @@ def __init__(self, obj): ) obj.addProperty( "App::PropertyAngle", - "beta", + "helix_angle", "helical", QT_TRANSLATE_NOOP("App::Property", "angle used for spiral bevel-gears"), ) obj.addProperty( "App::PropertyLength", - "dw", + "pitch_diameter", "computed", QT_TRANSLATE_NOOP("App::Property", "The pitch diameter."), ) obj.setExpression( - "dw", "num_teeth * module" + "pitch_diameter", "num_teeth * module" ) # calculate via expression to ease usage for placement obj.setEditorMode( - "dw", 1 + "pitch_diameter", 1 ) # set read-only after setting the expression, else it won't be visible. bug? obj.addProperty( "App::PropertyAngle", @@ -132,7 +132,7 @@ def __init__(self, obj): ), ) obj.setExpression( - "angular_backlash", "backlash / dw * 360° / pi" + "angular_backlash", "backlash / pitch_diameter * 360° / pi" ) # calculate via expression to ease usage for placement obj.setEditorMode( "angular_backlash", 1 @@ -147,11 +147,42 @@ def __init__(self, obj): obj.numpoints = 20 obj.backlash = "0.00 mm" obj.clearance = 0.1 - obj.beta = "0 deg" + obj.helix_angle = "0 deg" obj.reset_origin = True self.obj = obj obj.Proxy = self + def onDocumentRestored(self, obj): + """ + backward compatibility functions + """ + if hasattr(obj, "dw"): + pitch_diameter = getattr(obj, "dw") + obj.addProperty( + "App::PropertyLength", + "pitch_diameter", + "computed", + QT_TRANSLATE_NOOP("App::Property", "The pitch diameter."), + 1, + ) + obj.pitch_diameter = pitch_diameter + obj.removeProperty("dw") + obj.setExpression( + "angular_backlash", "backlash / pitch_diameter * 360° / pi" + ) + + # replace beta with helix_angle + if hasattr(obj, "beta"): + helix_angle = getattr(obj, "beta") + obj.addProperty( + "App::PropertyAngle", + "helix_angle", + "helical", + QT_TRANSLATE_NOOP("App::Property", "helix angle"), + ) + obj.helix_angle = helix_angle + obj.removeProperty("beta") + def generate_gear_shape(self, fp): fp.gear.z = fp.num_teeth fp.gear.module = fp.module.Value @@ -189,7 +220,7 @@ def generate_gear_shape(self, fp): else: # starting with version 0.0.2 scale_0 = scale - fp.height.Value scale_1 = scale - if fp.beta.Value == 0: + if fp.helix_angle.Value == 0: wires.append(make_bspline_wire([scale_0 * p for p in pts])) wires.append(make_bspline_wire([scale_1 * p for p in pts])) else: @@ -198,7 +229,7 @@ def generate_gear_shape(self, fp): # rot = rotation3D(- beta_i) # points = [rot(pt) * scale_i for pt in pts] angle = ( - fp.beta.Value + fp.helix_angle.Value * np.pi / 180.0 * np.sin(np.pi / 4) diff --git a/freecad/gears/connector.py b/freecad/gears/connector.py index 573f579..f27aa18 100644 --- a/freecad/gears/connector.py +++ b/freecad/gears/connector.py @@ -115,9 +115,9 @@ def onChanged(self, fp, prop): angle_master = fp.master_gear.Placement.Rotation.Angle * sum( fp.master_gear.Placement.Rotation.Axis ) - dw_master = fp.master_gear.dw - dw_slave = fp.slave_gear.dw - dist = (dw_master + dw_slave) / 2 + pitch_diameter_master = fp.master_gear.pitch_diameter + pitch_diameter_slave = fp.slave_gear.pitch_diameter + dist = (pitch_diameter_master + pitch_diameter_slave) / 2 if fp.master_gear.shift != 0 or fp.slave_gear.shift != 0: dist, alpha_w = compute_shifted_gears( fp.master_gear.module, @@ -132,8 +132,8 @@ def onChanged(self, fp, prop): trans = app.Vector(dist) mat0.move(trans) rot = app.Rotation(app.Vector(0, 0, 1), fp.angle1).toMatrix() - angle2 = dw_master / dw_slave * fp.angle1.Value - angle4 = dw_master / dw_slave * np.rad2deg(angle_master) + angle2 = pitch_diameter_master / pitch_diameter_slave * fp.angle1.Value + angle4 = pitch_diameter_master / pitch_diameter_slave * np.rad2deg(angle_master) rot2 = app.Rotation(app.Vector(0, 0, 1), angle2).toMatrix() angle3 = abs(fp.slave_gear.num_teeth % 2 - 1) * 180.0 / fp.slave_gear.num_teeth rot3 = app.Rotation(app.Vector(0, 0, 1), angle3).toMatrix() @@ -148,9 +148,9 @@ def onChanged(self, fp, prop): angle_master = fp.master_gear.Placement.Rotation.Angle * sum( fp.master_gear.Placement.Rotation.Axis ) - dw_master = fp.master_gear.dw - dw_slave = fp.slave_gear.dw - dist = (dw_master - dw_slave) / 2 + pitch_diameter_master = fp.master_gear.pitch_diameter + pitch_diameter_slave = fp.slave_gear.pitch_diameter + dist = (pitch_diameter_master - pitch_diameter_slave) / 2 if fp.master_gear.shift != 0 or fp.slave_gear.shift != 0: dist, alpha_w = compute_shifted_gears( fp.master_gear.module, @@ -165,8 +165,8 @@ def onChanged(self, fp, prop): trans = app.Vector(dist) mat0.move(trans) rot = app.Rotation(app.Vector(0, 0, 1), fp.angle1).toMatrix() - angle2 = -dw_master / dw_slave * fp.angle1.Value - angle4 = -dw_master / dw_slave * np.rad2deg(angle_master) + angle2 = -pitch_diameter_master / pitch_diameter_slave * fp.angle1.Value + angle4 = -pitch_diameter_master / pitch_diameter_slave * np.rad2deg(angle_master) rot2 = app.Rotation(app.Vector(0, 0, 1), angle2).toMatrix() angle3 = abs(fp.slave_gear.num_teeth % 2 - 1) * 180.0 / fp.slave_gear.num_teeth rot3 = app.Rotation(app.Vector(0, 0, 1), angle3).toMatrix() @@ -185,15 +185,15 @@ def onChanged(self, fp, prop): angle_master = fp.master_gear.Placement.Rotation.Angle * sum( fp.master_gear.Placement.Rotation.Axis ) - dw_master = fp.master_gear.dw.Value - dw_slave = 0 - dist = -(dw_master + dw_slave) / 2 + pitch_diameter_master = fp.master_gear.pitch_diameter.Value + pitch_diameter_slave = 0 + dist = -(pitch_diameter_master + pitch_diameter_slave) / 2 mat0 = app.Matrix() # unity matrix mat0.move(app.Vector(dist, 0, 0)) mat1 = app.Matrix() - mat1.move(app.Vector(0, np.deg2rad(fp.angle1.Value) * dw_master / 2, 0)) + mat1.move(app.Vector(0, np.deg2rad(fp.angle1.Value) * pitch_diameter_master / 2, 0)) mat2 = app.Matrix() - mat2.move(app.Vector(0, -np.deg2rad(fp.angle2.Value) * dw_master / 2, 0)) + mat2.move(app.Vector(0, -np.deg2rad(fp.angle2.Value) * pitch_diameter_master / 2, 0)) rot = app.Rotation(app.Vector(0, 0, 1), fp.angle1).toMatrix() mat3 = rot * mat2 * mat1 * mat0 mat3.move(fp.master_gear.Placement.Base) @@ -205,15 +205,15 @@ def onChanged(self, fp, prop): angle_master = fp.master_gear.Placement.Rotation.Angle * sum( fp.master_gear.Placement.Rotation.Axis ) - dw_master = fp.master_gear.dw - dw_slave = fp.slave_gear.dw - dist = (dw_master + dw_slave) / 2 + pitch_diameter_master = fp.master_gear.pitch_diameter + pitch_diameter_slave = fp.slave_gear.pitch_diameter + dist = (pitch_diameter_master + pitch_diameter_slave) / 2 mat0 = app.Matrix() # unity matrix trans = app.Vector(dist, 0, 0) mat0.move(trans) rot = app.Rotation(app.Vector(0, 0, 1), fp.angle1).toMatrix() - angle2 = dw_master / dw_slave * fp.angle1.Value - angle4 = dw_master / dw_slave * np.rad2deg(angle_master) + angle2 = pitch_diameter_master / pitch_diameter_slave * fp.angle1.Value + angle4 = pitch_diameter_master / pitch_diameter_slave * np.rad2deg(angle_master) rot2 = app.Rotation(app.Vector(0, 0, 1), angle2).toMatrix() angle3 = abs(fp.slave_gear.num_teeth % 2 - 1) * 180.0 / fp.slave_gear.num_teeth rot3 = app.Rotation(app.Vector(0, 0, 1), angle3).toMatrix()