Moved 'drawPoints' from gears.py and pulley.py into Boxes main class

This move makes it easier to use Cartesian points directly.

I tested both the gearbox and rotary generators (with default settings) to ensure that they both still work.
This commit is contained in:
caleb crome 2023-05-26 10:34:24 -07:00 committed by Florian Festi
parent 7459e133b2
commit c177728f0d
3 changed files with 23 additions and 34 deletions

View File

@ -39,6 +39,7 @@ from boxes import parts
from boxes import pulley
from boxes import svgutil
from boxes.Color import *
from boxes.vectors import kerf
import qrcode
from boxes.qrcode_factory import BoxesQrCodeFactory
@ -1560,6 +1561,24 @@ class Boxes:
y * 0.5 * holedistance,
0.5 * diameter)
def drawPoints(self, lines, kerfdir=1, close=True):
if not lines:
return
if kerfdir != 0:
lines = kerf(lines, self.burn*kerfdir, closed=close)
self.ctx.save()
self.ctx.move_to(*lines[0])
for x, y in lines[1:]:
self.ctx.line_to(x, y)
if close:
self.ctx.line_to(*lines[0])
self.ctx.restore()
def qrcode(self, content, box_size=1.0, color=Color.ETCHING, move=None):
q = qrcode.QRCode(image_factory=BoxesQrCodeFactory, box_size=box_size*10)
q.add_data(content)

View File

@ -385,24 +385,6 @@ class Gears():
dest="undercut_alert", default=False,
help="Let the user confirm a warning dialog if undercut occurs. This dialog also shows helpful hints against undercut")
def drawPoints(self, lines, kerfdir=1, close=True):
if not lines:
return
if kerfdir != 0:
lines = kerf(lines, self.boxes.burn*kerfdir, closed=close)
self.boxes.ctx.save()
self.boxes.ctx.move_to(*lines[0])
for x, y in lines[1:]:
self.boxes.ctx.line_to(x, y)
if close:
self.boxes.ctx.line_to(*lines[0])
self.boxes.ctx.restore()
def calc_circular_pitch(self):
"""We use math based on circular pitch."""
dimension = self.options.dimension
@ -628,8 +610,8 @@ class Gears():
self.boxes.moveTo(width/2.0, base_height+addendum, -180)
if base_height < 0:
points = points[1:-1]
self.drawPoints(points, close=base_height >= 0)
self.drawPoints(guide_points, kerfdir=0)
self.boxes.drawPoints(points, close=base_height >= 0)
self.boxes.drawPoints(guide_points, kerfdir=0)
self.boxes.move(width, height, move)
return
@ -660,7 +642,7 @@ class Gears():
if not teeth_only:
self.boxes.moveTo(width/2, height/2)
self.boxes.cc(callback, None, 0, 0)
self.drawPoints(points)
self.boxes.drawPoints(points)
# Spokes
if not teeth_only and not self.options.internal_ring: # only draw internals if spur gear
msg = self.generate_spokes(root_radius, spoke_width, spoke_count, mount_radius, mount_hole,

View File

@ -86,18 +86,6 @@ class Pulley:
def getProfiles(cls):
return list(sorted(cls.teeth.keys()))
def drawPoints(self, lines, kerfdir=1):
if kerfdir != 0:
lines = kerf(lines, self.boxes.burn * kerfdir)
self.boxes.ctx.save()
self.boxes.ctx.move_to(*lines[0])
for x, y in lines[1:]:
self.boxes.ctx.line_to(x, y)
self.boxes.ctx.line_to(*lines[0])
self.boxes.ctx.restore()
def diameter(self, teeth, profile):
if self.spacing[profile][0]:
return tooth_spaceing_curvefit(teeth, *self.spacing[profile][1:])
@ -149,5 +137,5 @@ class Pulley:
m = mmul(m, rotm(i * 2 * pi / teeth))
points.extend(vtransl(pt, m) for pt in self.teeth[profile][1:-1])
self.drawPoints(points, kerfdir=-1 if insideout else 1)
self.boxes.drawPoints(points, kerfdir=-1 if insideout else 1)
self.boxes.move(total_width, total_width, move)