本文整理汇总了Python中CNC.Block.append方法的典型用法代码示例。如果您正苦于以下问题:Python Block.append方法的具体用法?Python Block.append怎么用?Python Block.append使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CNC.Block
的用法示例。
在下文中一共展示了Block.append方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: joinBlocks
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def joinBlocks(self, event=None):
if not self._items: return
all_items = self._items
sel_items = list(map(int,self.curselection()))
change = True
bl = Block(self.gcode[sel_items[0]].name())
for bid in sel_items:
for line in self.gcode[bid]:
bl.append(line)
bl.append("( ---------- cut-here ---------- )")
del bl[-1]
self.gcode.addUndo(self.gcode.addBlockUndo(bid+1,bl))
if change: self.fill()
self.deleteBlock()
self.winfo_toplevel().event_generate("<<Modified>>")
示例2: make
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def make(self):
d = self.thick
# Convert to external dimensions
if self.dx<0:
dx = -self.dx - d*2 # external to internal
else:
dx = self.dx
if self.dy<0:
dy = -self.dy - d*2 # external to internal
else:
dy = self.dy
if self.dz<0:
dz = -self.dz - d*2 # external to internal
else:
dz = self.dz
blocks = []
block = Block("%s-Bottom"%(self.name))
block.append("(Box: %g x %g x %g)"%(self.dx,self.dy,self.dz))
block.append("(Fingers: %d x %d x %d)"%(self.nx,self.ny,self.nz))
self._rectangle(block, 0.,-d, dx,dy, self.nx,-self.ny, 0,d)
blocks.append(block)
block = Block("%s-Left"%(self.name))
self._rectangle(block, -(dz+5*d),-d, dz,dy, self.nz,self.ny, d,d)
blocks.append(block)
block = Block("%s-Right"%(self.name))
self._rectangle(block, dx+3*d,-d, dz,dy, self.nz,self.ny, d,d)
blocks.append(block)
block = Block("%s-Front"%(self.name))
self._rectangle(block, 0,-(dz+4*d), dx,dz, -self.nx,-self.nz, 0,0)
blocks.append(block)
block = Block("%s-Back"%(self.name))
self._rectangle(block, 0,dy+4*d, dx,dz, -self.nx,-self.nz, 0,0)
blocks.append(block)
block = Block("%s-Top"%(self.name))
self._rectangle(block, dx+dz+8*d,-d, dx,dy, self.nx,-self.ny, 0,d)
blocks.append(block)
return blocks
示例3: insertBlock
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def insertBlock(self, event=None):
active = self.index(ACTIVE)
if self._items:
bid, lid = self._items[active]
bid += 1
else:
bid = 0
block = Block()
block.expand = True
block.append("G0 X0 Y0")
block.append("G1 Z0")
block.append(CNC.zsafe())
self.gcode.addUndo(self.gcode.addBlockUndo(bid,block))
self.selection_clear(0,END)
self.fill()
# find location of new block
while active < self.size():
if self._items[active][0] == bid:
break
active += 1
self.selection_set(active)
self.see(active)
self.activate(active)
self.edit()
self.app.event_generate("<<Modified>>")
示例4: splitBlocks
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def splitBlocks(self, event=None):
if not self._items: return
all_items = self._items
sel_items = list(map(int,self.curselection()))
change = True
newblocks = []
for bid in sel_items:
bl = Block(self.gcode[bid].name())
for line in self.gcode[bid]:
if line == "( ---------- cut-here ---------- )":
#newblocks.append(bl)
#self.insertBlock(bl)
self.gcode.addUndo(self.gcode.addBlockUndo(bid+1,bl))
bl = Block(self.gcode[bid].name())
else:
bl.append(line)
self.gcode.addUndo(self.gcode.addBlockUndo(bid+1,bl))
#newblocks.append(bl)
#self.gcode.extend(newblocks)
if change: self.fill()
self.deleteBlock()
self.winfo_toplevel().event_generate("<<Modified>>")
示例5: slice
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def slice(self, verts, faces, z, zout=None, axis='z'):
tags = '[slice]'
if axis=='z': tags = '[slice,minz:%f]'%(float(z))
block = Block("slice %s%f %s"%(axis,float(z),tags))
#FIXME: slice along different axes
if axis == 'x':
plane_orig = (z, 0, 0)
plane_norm = (1, 0, 0)
elif axis == 'y':
plane_orig = (0, z, 0)
plane_norm = (0, 1, 0)
else:
plane_orig = (0, 0, z) #z height to slice
plane_norm = (0, 0, 1)
#Crosscut
contours = meshcut.cross_section(verts, faces, plane_orig, plane_norm)
#Flatten contours
if zout is not None:
for contour in contours:
for segment in contour:
segment[2] = zout
#Contours to G-code
for contour in contours:
#print(contour)
gtype = 0
for segment in contour:
block.append("g%s x%f y%f z%f"%(gtype, segment[0],segment[1],segment[2]))
gtype = 1
block.append("g1 x%f y%f z%f"%(contour[0][0],contour[0][1],contour[0][2])) #Close shape
block.append("( ---------- cut-here ---------- )")
if block: del block[-1]
if not block: block = None
return block
示例6: make
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def make(self,n = 2, size = 100, depth = 0):
self.n = n
self.size = size
self.depth = depth
blocks = []
block = Block(self.name)
xi,yi = zip(*(self.hilbert(0.0,0.0,size,0.0,0.0,size,n)))
block.append(CNC.zsafe())
block.append(CNC.grapid(xi[0],yi[0]))
currDepth = 0.
stepz = CNC.vars['stepz']
if stepz==0 : stepz=0.001 #avoid infinite while loop
while True:
currDepth -= stepz
if currDepth < self.depth : currDepth = self.depth
block.append(CNC.zenter(currDepth))
block.append(CNC.gcode(1, [("f",CNC.vars["cutfeed"])]))
for x,y in zip(xi,yi):
block.append(CNC.gline(x,y))
if currDepth <= self.depth : break
block.append(CNC.zsafe())
blocks.append(block)
return blocks
示例7: execute
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def execute(self, app):
#Get inputs
fontSize = self.fromMm("FontSize")
depth = self.fromMm("Depth")
textToWrite = self["Text"]
fontFileName = self["FontFile"]
imageFileName = self["ImageToAscii"]
charsWidth = self["CharsWidth"]
#Check parameters!!!
if fontSize <=0:
app.setStatus(_("Text abort: please input a Font size > 0"))
return
if fontFileName == "":
app.setStatus(_("Text abort: please select a font file"))
return
if imageFileName != "":
try:
textToWrite = self.asciiArt(imageFileName,charsWidth)
except:
pass
if textToWrite == "":
textToWrite = "Nel mezzo del cammin di nostra vita..."
return
#Init blocks
blocks = []
n = self["name"]
if not n or n == "default": n = "Text"
block = Block(n)
if(u'\n' in textToWrite):
block.append("(Text:)")
for line in textToWrite.splitlines():
block.append("(%s)" % line)
else:
block.append("(Text: %s)" % textToWrite)
try:
import ttf
font = ttf.TruetypeInfo(fontFileName)
except:
app.setStatus(_("Text abort: That embarrassing, I can't read this font file!"))
return
cmap = font.get_character_map()
kern = None
try:
kern = font.get_glyph_kernings()
except:
pass
adv = font.get_glyph_advances()
xOffset = 0
yOffset = 0
glyphIndxLast = cmap[' ']
for c in textToWrite:
#New line
if c == u'\n':
xOffset = 0.0
yOffset -= 1#offset for new line
continue
if c in cmap:
glyphIndx = cmap[c]
if (kern and (glyphIndx,glyphIndxLast) in kern):
k = kern[(glyphIndx,glyphIndxLast)] #FIXME: use kern for offset??
#Get glyph contours as line segmentes and draw them
gc = font.get_glyph_contours(glyphIndx)
if(not gc):
gc = font.get_glyph_contours(0)#standard glyph for missing glyphs (complex glyph)
if(gc and not c==' '): #FIXME: for some reason space is not mapped correctly!!!
self.writeGlyphContour(block, font, gc, fontSize, depth, xOffset, yOffset)
if glyphIndx < len(adv):
xOffset += adv[glyphIndx]
else:
xOffset += 1
glyphIndxLast = glyphIndx
#Remeber to close Font
font.close()
#Gcode Zsafe
block.append(CNC.zsafe())
blocks.append(block)
active = app.activeBlock()
if active==0: active=1
app.gcode.insBlocks(active, blocks, "Text")
app.refresh()
app.setStatus("Generated Text")
示例8: calc
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def calc(self, N, phi, Pc):
N = abs(N)
# Pitch Circle
D = N * Pc / math.pi
R = D / 2.0
# Diametrical pitch
Pd = N / D
# Base Circle
Db = D * math.cos(phi)
Rb = Db / 2.0
# Addendum
a = 1.0 / Pd
# Outside Circle
Ro = R + a
Do = 2.0 * Ro
# Tooth thickness
T = math.pi*D / (2*N)
# undercut?
U = 2.0 / (math.sin(phi) * (math.sin(phi)))
needs_undercut = N < U
# sys.stderr.write("N:%s R:%s Rb:%s\n" % (N,R,Rb))
# Clearance
c = 0.0
# Dedendum
b = a + c
# Root Circle
Rr = R - b
Dr = 2.0*Rr
two_pi = 2.0*math.pi
half_thick_angle = two_pi / (4.0*N)
pitch_to_base_angle = self.involute_intersect_angle(Rb, R)
pitch_to_outer_angle = self.involute_intersect_angle(Rb, Ro) # pitch_to_base_angle
points = []
for x in range(1,N+1):
c = x * two_pi / N
# angles
pitch1 = c - half_thick_angle
base1 = pitch1 - pitch_to_base_angle
outer1 = pitch1 + pitch_to_outer_angle
pitch2 = c + half_thick_angle
base2 = pitch2 + pitch_to_base_angle
outer2 = pitch2 - pitch_to_outer_angle
# points
b1 = self.point_on_circle(Rb, base1)
p1 = self.point_on_circle(R, pitch1)
o1 = self.point_on_circle(Ro, outer1)
o2 = self.point_on_circle(Ro, outer2)
p2 = self.point_on_circle(R, pitch2)
b2 = self.point_on_circle(Rb, base2)
if Rr >= Rb:
pitch_to_root_angle = pitch_to_base_angle - self.involute_intersect_angle(Rb, Rr)
root1 = pitch1 - pitch_to_root_angle
root2 = pitch2 + pitch_to_root_angle
r1 = self.point_on_circle(Rr, root1)
r2 = self.point_on_circle(Rr, root2)
points.append(r1)
points.append(p1)
points.append(o1)
points.append(o2)
points.append(p2)
points.append(r2)
else:
r1 = self.point_on_circle(Rr, base1)
r2 = self.point_on_circle(Rr, base2)
points.append(r1)
points.append(b1)
points.append(p1)
points.append(o1)
points.append(o2)
points.append(p2)
points.append(b2)
points.append(r2)
first = points[0]
del points[0]
blocks = []
block = Block(self.name)
blocks.append(block)
block.append(CNC.grapid(first.x(), first.y()))
block.append(CNC.zenter(0.0))
#print first.x(), first.y()
for v in points:
block.append(CNC.gline(v.x(), v.y()))
#.........这里部分代码省略.........
示例9: execute
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def execute(self, app):
if Image is None:
app.setStatus(_("Halftone abort: This plugin requires PIL/Pillow to read image data"))
return
n = self["name"]
if not n or n=="default": n="Halftone"
#Calc desired size
channel = self["Channel"]
invert = self["Invert"]
drawSize = self["DrawSize"]
cellSize = self["CellSize"]
dMax = self["DiameterMax"]
dMin = self["DiameterMin"]
angle = self["Angle"]
drawBorder = self["DrawBorder"]
depth = self["Depth"]
conical = self["Conical"]
#Check parameters
if drawSize < 1:
app.setStatus(_("Halftone abort: Size too small to draw anything!"))
return
if dMin > dMax:
app.setStatus(_("Halftone abort: Minimum diameter must be minor then Maximum"))
return
if dMax < 1:
app.setStatus(_("Halftone abort: Maximum diameter too small"))
return
if cellSize < 1:
app.setStatus(_("Halftone abort: Cell size too small"))
return
tool = app.tools["EndMill"]
tool_shape = tool["shape"]
if conical:
if tool_shape== "V-cutting":
try:
v_angle = float(tool["angle"])
except:
app.setStatus(_("Halftone abort: Angle in V-Cutting end mill is missing"))
return
else:
app.setStatus(_("Halftone abort: Conical path need V-Cutting end mill"))
return
#Open picture file
fileName = self["File"]
try:
img = Image.open(fileName)
except:
app.setStatus(_("Halftone abort: Can't read image file"))
return
#Create a scaled image to work faster with big image and better with small ones
squareNorm = True
if channel == 'Blue(sqrt)':
img = img.convert('RGB')
img = img.split()[0]
elif channel == 'Green(sqrt)':
img = img.convert('RGB')
img = img.split()[1]
elif channel == 'Red(sqrt)':
img = img.convert('RGB')
img = img.split()[2]
else:
img = img.convert ('L') #to calculate luminance
squareNorm = False
#flip image to ouput correct coordinates
img = img.transpose(Image.FLIP_TOP_BOTTOM)
#Calc divisions for halftone
divisions = drawSize / cellSize
#Get image size
self.imgWidth, self.imgHeight = img.size
if (self.imgWidth > self.imgHeight):
scale = drawSize / float(self.imgWidth)
sample = int(self.imgWidth / divisions)
else:
scale = drawSize / float(self.imgHeight)
sample = int(self.imgHeight / divisions)
self.ratio = scale
#Halftone
circles = self.halftone(img, sample, scale, angle, squareNorm, invert)
#Init blocks
blocks = []
#Border block
if drawBorder:
block = Block("%s-border"%(self.name))
block.append(CNC.zsafe())
block.append(CNC.grapid(0,0))
block.append(CNC.zenter(depth))
#.........这里部分代码省略.........
示例10: execute
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def execute(self, app):
try:
from PIL import Image
except:
app.setStatus(_("Pyrograph abort: This plugin requires PIL/Pillow"))
return
n = self["name"]
if not n or n=="default": n="Pyrograph"
#Calc desired size
toolSize = self.fromMm("ToolSize")
maxSize = self.fromMm("MaxSize")
feedMin = self["FeedMin"]
feedMax = self["FeedMax"]
depth = self.fromMm("Depth")
direction = self["Direction"]
drawBorder = self["DrawBorder"]
#Check parameters
if direction is "":
app.setStatus(_("Pyrograph abort: please define a scan Direction"))
return
if toolSize <=0:
app.setStatus(_("Pyrograph abort: Tool Size must be > 0"))
return
if feedMin <=0 or feedMax <=0 :
app.setStatus(_("Pyrograph abort: Please check feed rate parameters"))
return
#divisions
divisions = maxSize / toolSize
fileName = self["File"]
try:
img = Image.open(fileName)
img = img.convert ('RGB') #be sure to have color to calculate luminance
except:
app.setStatus(_("Pyrograph abort: Can't read image file"))
return
iWidth,iHeight = img.size
newWidth = iWidth
newHeight = iHeight
ratio = 1
if (iWidth > iHeight):
ratio = float(iWidth) / float(iHeight)
newWidth = int(divisions)
newHeight = int(divisions / ratio)
else:
ratio = float(iHeight) / float(iWidth)
newWidth = int(divisions / ratio)
newHeight = int(divisions)
#Create a thumbnail image to work faster
img.thumbnail((newWidth,newHeight), Image.ANTIALIAS)
newWidth,newHeight = img.size
#img.save("thumb.png")
pixels = list(img.getdata())
#Extract luminance
gMap = []
for x in range(0,newWidth):
gRow = []
for y in range(0,newHeight):
R,G,B = pixels[(y * newWidth) + x ]
L = (0.299*R + 0.587*G + 0.114*B) #Luminance (Rec. 601 standard)
gRow.append(L)
gMap.append(gRow)
#Init blocks
blocks = []
block = Block(self.name)
block.append("(Pyrograph W=%g x H=%g x D=%g)" %
(newWidth * toolSize , newHeight * toolSize , depth))
#Create points for vertical scan
xH = []
yH = []
fH = []
if (direction=="Vertical" or direction=="Both"):
r = range(0,newHeight)
for x in range(0,newWidth):
r = r[::-1]
fPrec = -1
for y in r:
f = int(feedMin + ((feedMax - feedMin) * gMap[x][y] / 255.0))
if(f != fPrec or y==0 or y==newHeight-1):
xH.append(x * toolSize)
yH.append((newHeight-y) * toolSize)
fH.append(f)
fPrec = f
#Create points for horizontal scan
xV = []
yV = []
fV = []
#.........这里部分代码省略.........
示例11: execute
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def execute(self, app):
name = self['name']
if not name or name == 'default':
name = 'Function'
# Initialize blocks that will contain our gCode
blocks = []
block = Block(name)
#Variable definitions
formula = self['form']
res = self['res'] # X resolution
ran = [self['ranX'], self['ranY']] # Range of X,Y, from -10, to 10 range is 20
cent = [self['centX'], self['centY']] # Coordinates X,Y of the center from bottom left of the coordinate system
dim = [self['dimX'], self['dimY']] # Real dimensions in gcode units
spacX = self['spacX'] # Spacing of X axis lines
spacY = self['spacY'] # Spacing of Y axis lines
lin = self['lin'] # Small value - length of a line in gcode units
draw = self['draw'] # Draw the coordinate system
block.append("(Generated with a script by kswiorek)\n")
block.append("(Equation: " + formula +")\n")
block.append("(Resolution: " + str(res) +")\n")
block.append("(Range: " + str(ran) +")\n")
block.append("(Center: " + str(cent) +")\n")
block.append("(Dimensions: " + str(dim) +")\n")
block.append("(SpacingXY: " + str(spacX) +", " + str(spacY) +")\n")
def mapc(var, axis): #Map coordinate systems
return (var * (dim[axis]/ran[axis]))
#Define coordinate system mins and maxes
minX = -cent[0]
maxX = ran[0]-cent[0]
minY = -cent[1]
maxY = ran[1]-cent[1]
#Define domain and codomain
X = []
Y = []
e_old = "" #Store old exception to comapre
#Calculate values for arguments with a resolution
for i in range(0, int(ran[0]/res+1)): #Complaints about values beeing floats
x = i*res + minX #Iterate x
X.append(x)
try:
Y.append(eval(formula))
except Exception as exc: #Append None, not to loose sync with X
Y.append(None)
e = str(exc)
if e != e_old: #If there is a different exception - display it
print("Warning: " + str(e))
app.setStatus(_("Warning: " + str(e)))
e_old = e
raised = True # Z axis is raised at start
#Clip values out of bounds, replace with None, not to loose sync with X
for i, item in enumerate(Y):
y = Y[i]
if not y is None and (y < minY or y > maxY):
Y[i] = None
#Y without "None", min() and max() can't compare them
Ynn = [] #Y no Nones
for i, item in enumerate(Y):
if not Y[i] is None:
Ynn.append(Y[i])
block.append(CNC.gcode(1, [("f",CNC.vars["cutfeed"])])) #Set feedrate
if draw: #If the user selected to draw the coordinate system
#X axis
block.append(CNC.grapid(z=3))
block.append(CNC.grapid(0, mapc(cent[1], 1))) #1st point of X axis line
block.append(CNC.grapid(z=0))
block.append(CNC.gline(dim[0] + lin*1.2, mapc(cent[1], 1))) #End of X axis line + a bit more for the arrow
block.append(CNC.gline(dim[0] - lin/2, mapc(cent[1], 1) - lin / 2)) #bottom part of the arrow
block.append(CNC.grapid(z=3))
block.append(CNC.grapid(dim[0] + lin*1.2, mapc(cent[1], 1), 0)) #End of X axis line
block.append(CNC.grapid(z=0))
block.append(CNC.gline(dim[0] - lin/2, mapc(cent[1], 1) + lin / 2)) #top part of the arrow
block.append(CNC.grapid(z=3))
#Y axis, just inverted x with y
block.append(CNC.grapid(z=3))
block.append(CNC.grapid(mapc(cent[0], 0), 0)) #1st point of Y axis line
block.append(CNC.grapid(z=0))
block.append(CNC.gline(mapc(cent[0], 0), dim[1] + lin*1.2)) #End of Y axis line + a bit more for the arrow
#.........这里部分代码省略.........
示例12: execute
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
#.........这里部分代码省略.........
#Create holes locations
# allHoles=[]
for bidSegment in allSegments:
if len(bidSegment)==0:
continue
blocks = []
# n = self["name"]
# if not n or n=="default": n="Trochoidal_3D"
# newname = Block.operationName(path.name)
n="Troch3d"
tr_block = Block(n)
phi=oldphi=0# oldadaptativephi=0
oldsegm=[[0,0,0],[0,0,0]]
# segments ---------------------------------------------
for idx, segm in enumerate(bidSegment):
if idx >= 0:
if cw:
u = 1
arc = "G2"
else:
u = -1
arc = "G3"
# ////////////---------------------------------------------------------------------
# information: ---------------------------------------------------------------------
segLength = self.calcSegmentLength(segm)
# ---------------------------------------------
# tr_block.append("(seg length "+str(round(segLength,4))+" )")
# -----------------------------------------------------------------------------
# ////////----------------------------------------------------------------------
if idx == 0:
# tr_block.append("(-------------- PARAMETERS ------------------------)")
tr_block.append("(Cut diam "+str( cutradius*2 )+" (troch "+str(radius*2.0)+"+End mill "+str(toolRadius*2.0)+" ) Advance "+str(atot)+" )")
# tr_block.append("(Cut diam "+str(CNC.vars["trochcutdiam"])+" (troch "+str(radius*2.0)+" + End mill " + str(toolRadius*2.0)+" ) Advance "+str(atot)+" )")
# tr_block.append("(Min troch "+str(int(CNC.vars["mintrochdiam"]))+"% = "+str(minimradius*2.0)+"mm , min cut diam "+str(2*(minimradius+toolRadius))+"mm )")
tr_block.append("(Feed "+str(feed)+" Plunge feed "+ str(zfeed)+" )")
#tr_block.append("(Helical diam "+str(round((helicalRadius+toolRadius)*2,2))+" ( helical diam "+str(helicalRadius*2.0)+"+End mill "+str(toolRadius*2.0)+" )")
tr_block.append("(Helical descent angle " + str(round(helicalangle,2)) +" cut diam " + str(round(helicalRadius*2.0,3))+" drop by lap "\
+ str(round(downPecking,2)) + " )")
tr_block.append("(--------------------------------------------------)")
tr_block.append("(M06 T0 "+str(toolRadius*2.0)+" mm)")
tr_block.append("M03")
tr_block.append("S "+str(rpm))
tr_block.append("F "+str(feed))
# phi = atan2(segm[1][1]-segm[0][1], segm[1][0]-segm[0][0])
# oldphi=phi #<< declare initial angle
# l = self.pol2car(radius, phi+radians(90*u))
# r = self.pol2car(radius, phi+radians(-90*u))
# B = segm[1][0],segm[1][1],segm[1][2]
# bl = self.pol2car(radius, phi+radians(90*u), B)
# br = self.pol2car(radius, phi+radians(-90*u), B)
tr_block.append("( Seg: "+str(idx)+" length "+str(round(segLength,4))+" phi "+str(round(degrees(phi),2))+" )")#+ " oldphi "+str(round(oldphi*57.29,2))+" )")
tr_block.append("(Starting point)")
if (round(segm[1][1]-segm[0][1],4)==0 and round(segm[1][0]-segm[0][0],4)==0):
phi=1234567890
tr_block.append("(The original first movement is vertical)")
else:
tr_block.append("(The original first movement is not vertical)")
tr_block.append(CNC.zsafe())
# tr_block.append("g0 x "+str(B[0])+" y"+str(B[1])+" )")#" z "+str(B[2])+" )")
# tr_block.append(arc+" x"+str(bl[0])+" y"+str(bl[1])+" R "+str(radius/2.0)+" z"+str(B[2]))
# tr_block.append(arc+" x"+str(br[0])+" y"+str(br[1])+" i"+str(r[0]/2.0)+" j"+str(r[1]/2.0)) #<< as cutting
# tr_block.append(("g1 x "+str(br[0])+" y"+str(br[1])+" z"+str(B[2])))
# tr_block.append(arc+" x"+str(bl[0])+" y"+str(bl[1])+" i"+str(l[0])+" j"+str(l[1]))
# tr_block.append(arc+" x"+str(br[0])+" y"+str(br[1])+" i"+str(r[0])+" j"+str(r[1])+" z"+str(round(B[2],5))) #<< as cutting
示例13: execute
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
#.........这里部分代码省略.........
cutFeedMax = CNC.vars["cutfeed"] #<<< Get cut feed XY for the current material
# ------------------------------------------------------------------------------------------------------------------
# Get selected blocks from editor
selBlocks = app.editor.getSelectedBlocks()
if not selBlocks:
app.editor.selectAll()
selBlocks = app.editor.getSelectedBlocks()
if not selBlocks:
if sel_Blocks == 1:
app.setStatus(_("Helical abort: Please select some path"))
return
# ------------------------------------------------------------------------------------------------------------------
# Get selected blocks from editor
if sel_Blocks == 1:
selBlocks = app.editor.getSelectedBlocks()
if not selBlocks:
app.editor.selectAll()
selBlocks = app.editor.getSelectedBlocks()
#Get all segments from gcode
allSegments = self.extractAllSegments(app,selBlocks)
#Create holes locations
allHoles=[]
for bidSegment in allSegments:
if len(bidSegment)==0:
continue
bidHoles = []
for idx, anchor in enumerate(bidSegment):
if idx ==2:
newHolePoint = (anchor[0][0],anchor[0][1],anchor[0][2])
bidHoles.append(newHolePoint)
#Add bidHoles to allHoles
allHoles.append(bidHoles)
# ------------------------------------------------------------------------------------------------------------------
holesCount = 0
for bid in allHoles:
for xH,yH,zH in bid:
x = xH
y = yH
# ------------------------------------------------------------------------------------------------------------------
# Init: Adjust feed and rapid move to Z safe
if Mult_F_Z is"":
Mult_F_Z = 1
if Mult_F_Z == 0:
Mult_F_Z = 1
if Mult_F_Z * cutFeed > cutFeedMax:
cutFeed = cutFeedMax
else:
cutFeed = cutFeed*Mult_F_Z
block.append(CNC.zsafe()) #<<< Move rapid Z axis to the safe height in Stock Material
# Move rapid to X and Y coordinate
if helicalCut == "Helical Cut" or helicalCut == "Internal Right Thread" or helicalCut == "Internal Left Thread":
if entry == "Center":
block.append(CNC.grapid(x,y))
示例14: create_block
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def create_block(self, holes, name):
targetDepth = self.fromMm("TargetDepth")
peck = self.fromMm("Peck")
dwell = self["Dwell"]
block = Block(name)
holesCount = 0
for bid in holes:
for xH,yH,zH in bid:
holesCount += 1
block.append(CNC.zsafe())
block.append(CNC.grapid(xH,yH))
if (peck != 0) :
z = 0
while z > targetDepth:
z = max(z-peck, targetDepth)
block.append(CNC.zenter(zH + z))
block.append(CNC.zsafe())
block.append(CNC.zenter(zH + targetDepth))
#dwell time only on last pass
if dwell != 0:
block.append(CNC.gcode(4, [("P",dwell)]))
#Gcode Zsafe on finish
block.append(CNC.zsafe())
return (block,holesCount)
示例15: calc
# 需要导入模块: from CNC import Block [as 别名]
# 或者: from CNC.Block import append [as 别名]
def calc(self, D, res, pocket):
blocks = []
block = Block(self.name)
# Load tool and material settings
toolDiam = CNC.vars['diameter']
toolRadius = toolDiam/2.
stepz = CNC.vars['stepz']
stepxy = toolDiam*(CNC.vars['stepover']/100.)
if toolDiam <= 0 or stepxy <= 0 or stepz <= 0 or D <= 0 or res <= 0:
return blocks
currDepth = 0.
def setCutFeedrate():
block.append(CNC.gcode(1, [("f",CNC.vars["cutfeed"])]))
def addCircumference(radius):
block.append(CNC.garc(2,radius, 0., i=-radius))
# Mills a circle, pocketing it if needed
def addSingleCircle(radius, depth):
if pocket:
block.append(CNC.grapid(0., 0.))
block.append(CNC.zenter(depth))
setCutFeedrate()
currRadius = 0.
while radius > currRadius+stepxy:
currRadius += stepxy
block.append(CNC.gline(currRadius, 0))
addCircumference(currRadius)
if radius-currRadius > 0:
block.append(CNC.gline(radius, 0))
addCircumference(radius)
else:
block.append(CNC.grapid(radius, 0.))
block.append(CNC.zenter(depth))
setCutFeedrate()
addCircumference(radius)
# Mills a circle in steps of height "stepz"
def addCircle(radius, depth, currDepth):
while depth < currDepth-stepz:
currDepth -= stepz
addSingleCircle(radius, currDepth)
if currDepth-depth > 0:
addSingleCircle(radius, depth)
return depth
block.append(CNC.zsafe())
r = D/2.
r -= toolRadius # Removes offset of ball-end tool
angleInc = res
currAngle = 0.
angle = math.pi/2. # 90 degrees
while angle > currAngle+angleInc:
currAngle += angleInc
radius = r * math.cos(-currAngle)
depth = r * math.sin(-currAngle) - toolRadius # Removes vertical offset (centers the ball tool in Z=0, rather than the tip)
currDepth = addCircle(radius, depth, currDepth)
if angle-currAngle > 0:
radius = r * math.cos(-angle)
depth = r * math.sin(-angle) - toolRadius
currDepth = addCircle(radius, depth, currDepth)
blocks.append(block)
return blocks