Browsed by
Tag: helix

Tool Cutting

Tool Cutting

Requires Wizoscript 2.66 or later.

Simulates a cylinder being cut into by another cylinder (e.g. an endmill). The “cutting tool” follows a helical path around the stock.

# cylinder dimensions
Diameter = 20
Length = 100

# cutter dimensions
CutterDiameter = 5

# angle to increase by on each pass of the cutter, in degrees
# must be a whole divisor of 180
StepAngle = 10

# total angle of cutting around the cylinder
TotalAngle = 1440

# starting distance from end of cylinder
StartX = 10

# create the cylinder
P = Part("Cylinder")
CylPlane = P.GetPlane("XY-Plane")
CrossSection = P.AddSketch("Cross-Section", CylPlane)
CrossSection.AddCircle(0,0, Diameter, False)
P.AddExtrudeBoss("Cylinder", CrossSection, Length, False)

# create the planes
Planes = []
NumPlanes = 180 / StepAngle
for PlaneIndex in range(0, NumPlanes):
  Angle = PlaneIndex * StepAngle
  Pl = P.AddPlane("P" + str(Angle), P.GetPlane("YZ-Plane"), P.GetAxis("Z-Axis"), Angle)
  Planes.append(Pl)
for PlaneIndex in range(0, NumPlanes):
  Planes.append(Planes[PlaneIndex])
NumPlanes = NumPlanes * 2

# start of helix has no offset along cylinder
XStep = 0

# create circle sketches then extrude cut 'through all'
for Step in range(0, TotalAngle / StepAngle):
  Angle = Step * StepAngle
  NormalizedAngle = Angle % 360
  XStep += (Angle * 0.001)
  if NormalizedAngle < 90:
    X = -(StartX + XStep)
    Y = Diameter / 2.0
  elif NormalizedAngle == 90:
    X = -(Diameter / 2.0)
    Y = -(StartX + XStep)
  elif NormalizedAngle < 180:
    X = (StartX + XStep)
    Y = -(Diameter / 2.0)
  elif NormalizedAngle < 270:
    X = -(StartX + XStep)
    Y = -(Diameter / 2.0)
  elif NormalizedAngle == 270:
    X = (Diameter / 2.0)
    Y = -(StartX + XStep)
  else:
    X = (StartX + XStep)
    Y = Diameter / 2.0
  Sk = P.AddSketch("S" + str(Angle), Planes[Step % NumPlanes])
  Sk.AddCircle(X, Y, CutterDiameter, False)
  P.AddExtrudeCut("S" + str(Angle), Sk, 0, False, Part.EndCondition.ThroughAll, None, 0, Part.DirectionType.Normal, None, 0, False)