Esempio n. 1
0
	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
Esempio n. 2
0
    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