add pygears/profile

This commit is contained in:
looooo
2020-04-07 15:03:46 +02:00
parent d2848a78a1
commit 7429c61a79
3 changed files with 42 additions and 2 deletions

View File

@@ -212,7 +212,7 @@ class InvoluteRack(object):
teeth[-1][0][0] = 0
teeth[-1][0][1] += a / 2
teeth = [v for t in teeth for v in t] # flattening
teeth = np.array([v for t in teeth for v in t]) # flattening
if self.add_endings:
ext1 = teeth[0] + np.array([0., a + b - pitch / 2])
ext2 = teeth[-1] - np.array([0., a + b - pitch / 2])

39
pygears/profile.py Normal file
View File

@@ -0,0 +1,39 @@
import numpy as np
from .involute_tooth import InvoluteTooth, InvoluteRack
from .bevel_tooth import BevelTooth
from .cycloide_tooth import CycloideTooth
from ._functions import rotation, rotation3D
class _GearProfile(object):
rot3D = False
def profile(self, num=10):
tooth = self.points(num=num)
tooth = [list(point) for wire in tooth for point in wire]
if self.rot3D:
rot = rotation3D( np.pi * 2 / self.z)
else:
rot = rotation(- np.pi * 2 / self.z)
profile = tooth
for i in range(self.z):
tooth = rot(tooth).tolist()
profile = profile + tooth
return np.array(profile)
class InvoluteProfile(InvoluteTooth, _GearProfile):
pass
class CycloideProfile(CycloideTooth, _GearProfile):
pass
class BevelProfile(BevelTooth, _GearProfile):
rot3D = True
pass
class InvoluteRackProfile(InvoluteRack):
def profile(self):
return self.points()

View File

@@ -11,4 +11,5 @@ setup(name='freecad.gears',
url="https://github.com/looooo/FCGear",
description="gears for FreeCAD",
install_requires=['numpy'],
include_package_data=True)
include_package_data=True
)