kopia lustrzana https://github.com/inkstitch/inkstitch
change pull_compensation_rails to a continuous balance and fix some edge cases.
rodzic
4285a6fb7f
commit
3aa92ba7b7
|
|
@ -136,14 +136,13 @@ class SatinColumn(EmbroideryElement):
|
||||||
@param(
|
@param(
|
||||||
'pull_compensation_percent',
|
'pull_compensation_percent',
|
||||||
_('Pull compensation percentage'),
|
_('Pull compensation percentage'),
|
||||||
tooltip=_('pull compensation in percentage'),
|
tooltip=_('Additional pull compensation which varries as a percentage of stitch width.'),
|
||||||
unit='%',
|
unit='%',
|
||||||
type='int',
|
type='float',
|
||||||
default=0)
|
default=0)
|
||||||
def pull_compensation_percent(self):
|
def pull_compensation_percent(self):
|
||||||
# pull compensation as a percentage of the width
|
# pull compensation as a percentage of the width
|
||||||
return max(self.get_int_param("pull_compensation_percent", 0), 0)
|
return self.get_float_param("pull_compensation_percent", 0)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@param(
|
@param(
|
||||||
'pull_compensation_mm',
|
'pull_compensation_mm',
|
||||||
|
|
@ -161,15 +160,14 @@ class SatinColumn(EmbroideryElement):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@param(
|
@param(
|
||||||
'pull_compensation_rails',
|
'pull_compensation_balance',
|
||||||
_('Apply pull compensation to '),
|
_('Pull compensation balance'),
|
||||||
tooltip=_('decide wether the pull compensations should be applied to both side or only to a given one'),
|
tooltip=_('Percentage of pull compensation which gets applied to second rail (50% is centered).'),
|
||||||
type='dropdown',
|
unit='%',
|
||||||
options=[_("Both rails"), _("First rail only"), _("Second rail only")],
|
type='float',
|
||||||
default=0)
|
default=50)
|
||||||
def pull_compensation_rails(self):
|
def pull_compensation_balance(self):
|
||||||
# 0=Both | 1 = First Rail | 2 = Second Rail
|
return min(100, max(0, self.get_float_param("pull_compensation_balance", 50)))
|
||||||
return self.get_int_param("pull_compensation_rails", 0)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@param('contour_underlay', _('Contour underlay'), type='toggle', group=_('Contour Underlay'))
|
@param('contour_underlay', _('Contour underlay'), type='toggle', group=_('Contour Underlay'))
|
||||||
|
|
@ -643,41 +641,31 @@ class SatinColumn(EmbroideryElement):
|
||||||
center_walk, _ = self.plot_points_on_rails(self.zigzag_spacing, -100000)
|
center_walk, _ = self.plot_points_on_rails(self.zigzag_spacing, -100000)
|
||||||
return shgeo.LineString(center_walk)
|
return shgeo.LineString(center_walk)
|
||||||
|
|
||||||
def offset_points(self, pos1, pos2, offset, offset_percent=0, offset_rails=0):
|
def offset_points(self, pos1, pos2, offset_px, offset_prop=0, offset_balance=0.5):
|
||||||
# Expand or contract two points about their midpoint. This is
|
# Expand or contract two points about their midpoint. This is
|
||||||
# useful for pull compensation and insetting underlay.
|
# useful for pull compensation and insetting underlay.
|
||||||
|
|
||||||
distance = (pos1 - pos2).length()
|
distance = (pos1 - pos2).length()
|
||||||
offset_px = 0
|
|
||||||
if offset:
|
|
||||||
offset_px += offset
|
|
||||||
if offset_percent:
|
|
||||||
offset_px += ((offset_percent / 100) * distance)
|
|
||||||
|
|
||||||
if distance < 0.0001:
|
if distance < 0.0001:
|
||||||
# if they're the same point, we don't know which direction
|
# if they're the same point, we don't know which direction
|
||||||
# to offset in, so we have to just return the points
|
# to offset in, so we have to just return the points
|
||||||
return pos1, pos2
|
return pos1, pos2
|
||||||
|
|
||||||
|
# calculate the offset for each side
|
||||||
|
offset_total = offset_px + (offset_prop * distance)
|
||||||
|
inv_offset_balance = 1 - offset_balance
|
||||||
|
offset1 = offset_total * inv_offset_balance
|
||||||
|
offset2 = offset_total * offset_balance
|
||||||
|
|
||||||
# don't contract beyond the midpoint, or we'll start expanding
|
# don't contract beyond the midpoint, or we'll start expanding
|
||||||
if offset_px < -distance / 2.0:
|
if offset1 < -distance * inv_offset_balance:
|
||||||
offset_px = -distance / 2.0
|
offset1 = -distance * inv_offset_balance
|
||||||
|
if offset2 < -distance * offset_balance:
|
||||||
|
offset2 = -distance * offset_balance
|
||||||
|
|
||||||
# chose how to apply on the rails
|
pos1 = pos1 + (pos1 - pos2).unit() * offset1
|
||||||
|
pos2 = pos2 + (pos2 - pos1).unit() * offset2
|
||||||
coeff1 = 1
|
|
||||||
coeff2 = 1
|
|
||||||
|
|
||||||
if offset_rails == 1:
|
|
||||||
coeff1 = 2
|
|
||||||
coeff2 = 0
|
|
||||||
|
|
||||||
if offset_rails == 2:
|
|
||||||
coeff1 = 0
|
|
||||||
coeff2 = 2
|
|
||||||
|
|
||||||
pos1 = pos1 + (pos1 - pos2).unit() * offset_px * coeff1
|
|
||||||
pos2 = pos2 + (pos2 - pos1).unit() * offset_px * coeff2
|
|
||||||
|
|
||||||
return pos1, pos2
|
return pos1, pos2
|
||||||
|
|
||||||
|
|
@ -714,13 +702,13 @@ class SatinColumn(EmbroideryElement):
|
||||||
distance_remaining -= segment_length
|
distance_remaining -= segment_length
|
||||||
pos = segment_end
|
pos = segment_end
|
||||||
|
|
||||||
def plot_points_on_rails(self, spacing, offset, offset_percent=0, offset_rails=0):
|
def plot_points_on_rails(self, spacing, offset_px=0, offset_prop=0, offset_balance=0.5):
|
||||||
# Take a section from each rail in turn, and plot out an equal number
|
# Take a section from each rail in turn, and plot out an equal number
|
||||||
# of points on both rails. Return the points plotted. The points will
|
# of points on both rails. Return the points plotted. The points will
|
||||||
# be contracted or expanded by offset using self.offset_points().
|
# be contracted or expanded by offset using self.offset_points().
|
||||||
|
|
||||||
def add_pair(pos0, pos1):
|
def add_pair(pos0, pos1):
|
||||||
pos0, pos1 = self.offset_points(pos0, pos1, offset, offset_percent, offset_rails)
|
pos0, pos1 = self.offset_points(pos0, pos1, offset_px, offset_prop, offset_balance)
|
||||||
points[0].append(pos0)
|
points[0].append(pos0)
|
||||||
points[1].append(pos1)
|
points[1].append(pos1)
|
||||||
|
|
||||||
|
|
@ -878,8 +866,10 @@ class SatinColumn(EmbroideryElement):
|
||||||
# print >> dbg, "satin", self.zigzag_spacing, self.pull_compensation
|
# print >> dbg, "satin", self.zigzag_spacing, self.pull_compensation
|
||||||
|
|
||||||
patch = StitchGroup(color=self.color)
|
patch = StitchGroup(color=self.color)
|
||||||
sides = self.plot_points_on_rails(self.zigzag_spacing, self.pull_compensation, self.pull_compensation_percent,
|
|
||||||
self.pull_compensation_rails)
|
# pull compensation is automatically converted from mm to pixels by get_float_param
|
||||||
|
sides = self.plot_points_on_rails(self.zigzag_spacing, self.pull_compensation, self.pull_compensation_percent/100,
|
||||||
|
self.pull_compensation_balance/100)
|
||||||
|
|
||||||
if self.max_stitch_length:
|
if self.max_stitch_length:
|
||||||
return self.do_split_stitch(patch, sides)
|
return self.do_split_stitch(patch, sides)
|
||||||
|
|
@ -909,7 +899,7 @@ class SatinColumn(EmbroideryElement):
|
||||||
|
|
||||||
patch = StitchGroup(color=self.color)
|
patch = StitchGroup(color=self.color)
|
||||||
|
|
||||||
sides = self.plot_points_on_rails(self.zigzag_spacing, self.pull_compensation, self.pull_compensation_percent, self.pull_compensation_rails)
|
sides = self.plot_points_on_rails(self.zigzag_spacing, self.pull_compensation, self.pull_compensation_percent/100, self.pull_compensation_balance/100)
|
||||||
|
|
||||||
# "left" and "right" here are kind of arbitrary designations meaning
|
# "left" and "right" here are kind of arbitrary designations meaning
|
||||||
# a point from the first and second rail respectively
|
# a point from the first and second rail respectively
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ inkstitch_attribs = [
|
||||||
'e_stitch',
|
'e_stitch',
|
||||||
'pull_compensation_mm',
|
'pull_compensation_mm',
|
||||||
'pull_compensation_percent',
|
'pull_compensation_percent',
|
||||||
'pull_compensation_rails',
|
'pull_compensation_balance',
|
||||||
'stroke_first',
|
'stroke_first',
|
||||||
# stitch_plan
|
# stitch_plan
|
||||||
'invisible_layers',
|
'invisible_layers',
|
||||||
|
|
|
||||||
Ładowanie…
Reference in New Issue