add pygears/profile
This commit is contained in:
@@ -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
39
pygears/profile.py
Normal 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()
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user