Try using the new twist sweep instead of the guide rail sweep, it's a lot more accurate and a lot faster
Here's my "twist calculator"
class TwistCalculator(object):
def __init__(self, helix_angle, pitch_radius):
self._c = math.tan(math.pi/2 - abs(helix_angle)) * pitch_radius if helix_angle != 0 else None
if helix_angle < 0:
self._c *= -1
def reverse(self):
self._c *= -1
def twist_over_displacement(self, displacement):
return displacement / self._c if self._c else 0
And then doing the sweep looks something like this
sweeps = self._component.features.sweepFeatures
si = sweeps.createInput(profile, self._path, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
si.twistAngle = adsk.core.ValueInput.createByReal(self._twist_calculator.twist_over_displacement(self._length))
sweep = sweeps.add(si)
Bevel Gears...
I'll have to look into tredgold approximation - I'm strait up computing the involute on a spherical surface. Then it's trivial to project (actually ray-cast from origin) that involute onto a plane so fusion has a profile to work with. I used this source for the spherical involute math if you're curios http://thermalprocessing.com/media/2017/201703/0317-Forging.pdf I really hate "math papers" - i swear they say stuff in ways intended to make understanding hard. It's not actually that complicated of a problem to calculate a spherical involute but everything I found on the subject sure made it hard to understand!