kopia lustrzana https://github.com/vilemduha/blendercam
82 wiersze
2.1 KiB
Python
82 wiersze
2.1 KiB
Python
################################################################################
|
|
# drag knife.py
|
|
#
|
|
# NC code creator for attaching Z coordinates to a surface
|
|
#
|
|
# Dan Heeks 26th April 2012
|
|
|
|
import area
|
|
import nc
|
|
from kurve_funcs import cut_curve as cut_curve
|
|
from . import recreator
|
|
|
|
dragging = False
|
|
|
|
################################################################################
|
|
|
|
|
|
class Creator(recreator.Redirector):
|
|
def __init__(self, original, drag_distance):
|
|
recreator.Redirector.__init__(self, original)
|
|
|
|
self.drag_distance = drag_distance
|
|
self.path = None
|
|
|
|
def cut_path(self):
|
|
if self.path == None:
|
|
return
|
|
|
|
print(self.drag_distance)
|
|
self.path.OffsetForward(self.drag_distance, False)
|
|
|
|
nc.creator = nc.creator.original
|
|
|
|
if self.path.getNumVertices() > 0:
|
|
v = self.path.FirstVertex()
|
|
nc.creator.feed(v.p.x, v.p.y)
|
|
|
|
cut_curve(self.path)
|
|
nc.creator = self
|
|
|
|
self.path = area.Curve()
|
|
|
|
def feed(self, x=None, y=None, z=None, a=None, b=None, c=None):
|
|
px = self.x
|
|
py = self.y
|
|
pz = self.z
|
|
recreator.Redirector.feed(self, x, y, z, a, b, c)
|
|
if self.x == None or self.y == None or self.z == None:
|
|
return
|
|
if px == self.x and py == self.y:
|
|
return
|
|
|
|
# add a line to the path
|
|
if self.path == None:
|
|
self.path = area.Curve()
|
|
self.path.append(area.Point(self.x, self.y))
|
|
|
|
def arc(self, x=None, y=None, z=None, i=None, j=None, k=None, r=None, ccw=True):
|
|
recreator.Redirector.arc(self, x, y, z, i, j, k, r, ccw)
|
|
|
|
# add an arc to the path
|
|
if self.path == None:
|
|
self.path = area.Curve()
|
|
self.path.append(
|
|
area.Vertex(1 if ccw else -1, area.Point(self.x, self.y), area.Point(i, j))
|
|
)
|
|
|
|
|
|
def drag_begin(drag_distance):
|
|
global dragging
|
|
if dragging == True:
|
|
drag_end()
|
|
nc.creator = Creator(nc.creator, drag_distance)
|
|
dragging = True
|
|
|
|
|
|
def drag_end():
|
|
global dragging
|
|
nc.creator.cut_path()
|
|
nc.creator = nc.creator.original
|
|
attached = False
|