Ejemplo n.º 1
0
    def _findSubpath(self, path, A, B):
        print("finding", A, B)

        sub = None
        for i in xrange(0, len(path) * 2):  #iterate twice with wrap around
            j = i % len(path)
            seg = path[j]

            if eq(seg.A, A): sub = Path("subp")
            print("seg", sub is None, seg)
            if sub is not None: sub.append(seg)
            if eq(seg.B, B): break

        print("found", sub)
        return sub
Ejemplo n.º 2
0
	def _findSubpath(self, path,A,B):
		print("finding", A, B)

		sub = None
		for i in xrange(0,len(path)*2): #iterate twice with wrap around
			j = i%len(path)
			seg = path[j]

			if eq(seg.A,A): sub = Path("subp")
			print("seg", sub is None, seg)
			if sub is not None: sub.append(seg)
			if eq(seg.B,B): break

		print("found", sub)
		return sub
Ejemplo n.º 3
0
    def execute(self, app):
        dragoff = self.fromMm("offset")
        angleth = self["angle"]
        swivelz = self.fromMm("swivelz")
        initdir = self["initdir"]
        CNC.vars["cutfeed"] = self.fromMm("feed")
        simulate = self["simulate"]
        simpreci = self["simpreci"]

        def initPoint(P, dir, offset):
            P = Vector(P[0], P[1])

            if dir == 'X+':
                P[0] += offset
            elif dir == 'X-':
                P[0] -= offset
            elif dir == 'Y+':
                P[1] += offset
            elif dir == 'Y-':
                P[1] -= offset
            return P

        blocks = []
        for bid in app.editor.getSelectedBlocks():
            if len(app.gcode.toPath(bid)) < 1: continue

            opath = app.gcode.toPath(bid)[0]
            npath = Path("dragknife %s: %s" % (dragoff, app.gcode[bid].name()))

            if not simulate:

                #Entry vector
                ventry = Segment(Segment.LINE,
                                 initPoint(opath[0].A, initdir, -dragoff),
                                 opath[0].A)

                #Exit vector
                vexit = Segment(Segment.LINE, opath[-1].B,
                                initPoint(opath[-1].B, initdir, dragoff))
                opath.append(vexit)

                prevseg = ventry
                #Generate path with tangential lag for dragknife operation
                for i, seg in enumerate(opath):
                    #Get adjacent tangential vectors in this point
                    TA = prevseg.tangentEnd()
                    TB = seg.tangentStart()

                    #Compute difference between tangential vectors of two neighbor segments
                    angle = degrees(acos(TA.dot(TB)))

                    #Compute swivel direction
                    arcdir = (TA[0] * TB[1]) - (TA[1] * TB[0])
                    if arcdir < 0:
                        arcdir = Segment.CW
                    else:
                        arcdir = Segment.CCW

                    #Append swivel if needed (also always do entry/exit)
                    if abs(angle) > angleth or (abs(angle) > 1 and
                                                (i == 0
                                                 or i == len(opath) - 1)):
                        arca = Segment(arcdir,
                                       prevseg.tangentialOffset(dragoff).B,
                                       seg.tangentialOffset(dragoff).A,
                                       prevseg.B)

                        if swivelz != 0: arca._inside = [swivelz]
                        npath.append(arca)

                    #Append segment with tangential offset
                    if i < len(opath) - 1:
                        npath.append(seg.tangentialOffset(dragoff))

                    prevseg = seg

            elif simulate:

                opath = opath.linearize(simpreci, True)
                prevknife = initPoint(opath[0].A, initdir, -dragoff)
                for seg in opath:
                    dist = sqrt((seg.B[0] - prevknife[0])**2 +
                                (seg.B[1] - prevknife[1])**2)
                    move = (seg.B - prevknife).unit() * (dist - dragoff)
                    newknife = prevknife + move
                    if not eq(newknife, prevknife):
                        npath.append(Segment(Segment.LINE, prevknife,
                                             newknife))
                    prevknife = newknife

            eblock = app.gcode.fromPath(npath)
            blocks.append(eblock)

        #active = app.activeBlock()
        #if active == 0: active+=1
        active = -1  #add to end
        app.gcode.insBlocks(
            active, blocks,
            "Dragknife")  #<<< insert blocks over active block in the editor
        app.refresh()  #<<< refresh editor
        app.setStatus(_("Generated: Dragknife"))  #<<< feed back result
Ejemplo n.º 4
0
	def execute(self, app):
		dragoff = self.fromMm("offset")
		angleth = self["angle"]
		swivelz = self.fromMm("swivelz")
		initdir = self["initdir"]
		CNC.vars["cutfeed"] = self.fromMm("feed")
		simulate = self["simulate"]
		simpreci = self["simpreci"]

		def initPoint(P, dir, offset):
			P = Vector(P[0], P[1])

			if dir == 'X+':
				P[0]+=offset
			elif dir == 'X-':
				P[0]-=offset
			elif dir == 'Y+':
				P[1]+=offset
			elif dir == 'Y-':
				P[1]-=offset
			return P

		blocks  = []
		for bid in app.editor.getSelectedBlocks():
			if len(app.gcode.toPath(bid)) < 1: continue

			opath = app.gcode.toPath(bid)[0]
			npath = Path("dragknife %s: %s"%(dragoff,app.gcode[bid].name()))

			if not simulate:

				#Entry vector
				ventry = Segment(Segment.LINE, initPoint(opath[0].A, initdir, -dragoff), opath[0].A)

				#Exit vector
				vexit = Segment(Segment.LINE, opath[-1].B, initPoint(opath[-1].B, initdir, dragoff))
				opath.append(vexit)

				prevseg = ventry
				#Generate path with tangential lag for dragknife operation
				for i,seg in enumerate(opath):
					#Get adjacent tangential vectors in this point
					TA = prevseg.tangentEnd()
					TB = seg.tangentStart()

					#Compute difference between tangential vectors of two neighbor segments
					angle = degrees(acos(TA.dot(TB)))

					#Compute swivel direction
					arcdir = ( TA[0] * TB[1] ) - ( TA[1] * TB[0] )
					if arcdir < 0:
						arcdir = Segment.CW
					else:
						arcdir = Segment.CCW

					#Append swivel if needed (also always do entry/exit)
					if abs(angle) > angleth or (abs(angle) > 1 and ( i == 0 or i == len(opath)-1 )):
						arca = Segment(arcdir, prevseg.tangentialOffset(dragoff).B, seg.tangentialOffset(dragoff).A, prevseg.B)

						if swivelz !=0: arca._inside = [swivelz]
						npath.append(arca)

					#Append segment with tangential offset
					if i < len(opath)-1:
						npath.append(seg.tangentialOffset(dragoff))

					prevseg = seg

			elif simulate:

				opath = opath.linearize(simpreci, True)
				prevknife = initPoint(opath[0].A, initdir, -dragoff)
				for seg in opath:
					dist = sqrt((seg.B[0]-prevknife[0])**2+(seg.B[1]-prevknife[1])**2)
					move = ( seg.B - prevknife ).unit() * ( dist - dragoff )
					newknife = prevknife + move
					if not eq(newknife, prevknife):
						npath.append(Segment(Segment.LINE, prevknife, newknife))
					prevknife = newknife


			eblock = app.gcode.fromPath(npath)
			blocks.append(eblock)



		#active = app.activeBlock()
		#if active == 0: active+=1
		active=-1 #add to end
		app.gcode.insBlocks(active, blocks, "Dragknife") #<<< insert blocks over active block in the editor
		app.refresh()                                                                                           #<<< refresh editor
		app.setStatus(_("Generated: Dragknife"))                           #<<< feed back result