def zigZagLine(self, block, pos, du, dv, U, V, n, extra=0.): sgn = math.copysign(1.0, n) n = abs(n) # Make additional overcut/cuts to compensate for the # round edges in the inner teeths if self.r > 0.0: overcut = self.overcut #rd = (sqrt(2.)-1.0) * self.r rd = (1.0-1.0/sqrt(2.)) * (1.0+self.overcutAdd) * self.r else: overcut = None for i in range(n): # if sgn<0.0 and overcut=="U": # pos -= self.r*U # block.append(CNC.glinev(1, pos, self.feed)) # pos += self.r*U # block.append(CNC.glinev(1, pos)) x = du if sgn<0.0 and n>1: if 0 < i < n-1: x -= 2*self.r else: x -= self.r if i==0: x += extra elif i==n-1: x += extra pos += x*U if i==0: block.append(CNC.glinev(1, pos, self.feed)) else: block.append(CNC.glinev(1, pos)) # if sgn<0.0 and overcut=="U": # pos += self.r*U # block.append(CNC.glinev(1, pos)) # pos -= self.r*U # block.append(CNC.glinev(1, pos)) if self.r>0.0: if sgn<0.0: if i<n-1: if overcut == "V": pos -= sgn*self.r*V block.append(CNC.glinev(1, pos)) pos += sgn*dv*V elif overcut == "D": pos -= sgn*rd*(U+V) block.append(CNC.glinev(1, pos)) pos += sgn*rd*(U+V) block.append(CNC.glinev(1, pos)) pos += sgn*(dv-self.r)*V # else: # pos += sgn*(dv-self.r)*V block.append(CNC.glinev(1, pos)) ijk = self.r*U pos += sgn*self.r*V + self.r*U block.append(CNC.garcv(3, pos, ijk)) else: # ending ijk = self.r*V pos += self.r*V + self.r*U block.append(CNC.garcv(3, pos, ijk)) elif sgn>0.0: ijk = sgn*self.r*V pos += sgn*self.r*V + self.r*U block.append(CNC.garcv(3, pos, ijk)) if i<n-1: if overcut == "V": pos += sgn*dv*V block.append(CNC.glinev(1, pos)) if self.r > 0.0: pos -= sgn*self.r*V block.append(CNC.glinev(1, pos)) elif overcut == "D": pos += sgn*(dv-self.r)*V block.append(CNC.glinev(1, pos)) if self.r > 0.0: pos -= sgn*rd*(U-V) block.append(CNC.glinev(1, pos)) pos += sgn*rd*(U-V) block.append(CNC.glinev(1, pos)) # else: # pos += sgn*(dv-self.r)*V # block.append(CNC.glinev(1, pos)) elif i<n-1: pos += sgn*dv*V block.append(CNC.glinev(1, pos)) sgn = -sgn return pos
def zigZagLine(self, block, pos, du, dv, U, V, n, extra=0.): sgn = math.copysign(1.0, n) n = abs(n) # Make additional overcut/cuts to compensate for the # round edges in the inner teeth if self.r > 0.0: overcut = self.overcut #rd = (sqrt(2.)-1.0) * self.r rd = (1.0 - 1.0 / sqrt(2.)) * (1.0 + self.overcutAdd) * self.r else: overcut = None for i in range(n): # if sgn<0.0 and overcut=="U": # pos -= self.r*U # block.append(CNC.glinev(1, pos, self.feed)) # pos += self.r*U # block.append(CNC.glinev(1, pos)) x = du if sgn < 0.0 and n > 1: if 0 < i < n - 1: x -= 2 * self.r else: x -= self.r if i == 0: x += extra elif i == n - 1: x += extra pos += x * U if i == 0: block.append(CNC.glinev(1, pos, self.feed)) else: block.append(CNC.glinev(1, pos)) # if sgn<0.0 and overcut=="U": # pos += self.r*U # block.append(CNC.glinev(1, pos)) # pos -= self.r*U # block.append(CNC.glinev(1, pos)) if self.r > 0.0: if sgn < 0.0: if i < n - 1: if overcut == "V": pos -= sgn * self.r * V block.append(CNC.glinev(1, pos)) pos += sgn * dv * V elif overcut == "D": pos -= sgn * rd * (U + V) block.append(CNC.glinev(1, pos)) pos += sgn * rd * (U + V) block.append(CNC.glinev(1, pos)) pos += sgn * (dv - self.r) * V else: pos += sgn * (dv - self.r) * V block.append(CNC.glinev(1, pos)) ijk = self.r * U pos += sgn * self.r * V + self.r * U block.append(CNC.garcv(3, pos, ijk)) else: # ending ijk = self.r * V pos += self.r * V + self.r * U block.append(CNC.garcv(3, pos, ijk)) elif sgn > 0.0: ijk = sgn * self.r * V pos += sgn * self.r * V + self.r * U block.append(CNC.garcv(3, pos, ijk)) if i < n - 1: if overcut == "V": pos += sgn * dv * V block.append(CNC.glinev(1, pos)) if self.r > 0.0: pos -= sgn * self.r * V block.append(CNC.glinev(1, pos)) elif overcut == "D": pos += sgn * (dv - self.r) * V block.append(CNC.glinev(1, pos)) if self.r > 0.0: pos -= sgn * rd * (U - V) block.append(CNC.glinev(1, pos)) pos += sgn * rd * (U - V) block.append(CNC.glinev(1, pos)) else: pos += sgn * (dv - self.r) * V block.append(CNC.glinev(1, pos)) elif i < n - 1: pos += sgn * dv * V block.append(CNC.glinev(1, pos)) sgn = -sgn return pos