mirror of
https://github.com/Denvi/FlatCAM.git
synced 2026-03-25 01:27:17 +01:00
Merged jpcgt/flatcam into master
This commit is contained in:
@@ -1637,7 +1637,7 @@ class App(QtCore.QObject):
|
||||
raise IOError('Failed to open file: ' + filename)
|
||||
|
||||
except ParseError, e:
|
||||
app_obj.inform.emit("[error] Failed to parse file: " + filename)
|
||||
app_obj.inform.emit("[error] Failed to parse file: " + filename + ". " + e[0])
|
||||
app_obj.progress.emit(0)
|
||||
self.log.error(str(e))
|
||||
raise
|
||||
|
||||
@@ -457,6 +457,11 @@ class FCPolygon(FCShapeTool):
|
||||
self.geometry = DrawToolShape(Polygon(self.points))
|
||||
self.complete = True
|
||||
|
||||
def on_key(self, key):
|
||||
if key == 'backspace':
|
||||
if len(self.points) > 0:
|
||||
self.points = self.points[0:-1]
|
||||
|
||||
|
||||
class FCPath(FCPolygon):
|
||||
"""
|
||||
@@ -468,13 +473,18 @@ class FCPath(FCPolygon):
|
||||
self.complete = True
|
||||
|
||||
def utility_geometry(self, data=None):
|
||||
if len(self.points) > 1:
|
||||
if len(self.points) > 0:
|
||||
temp_points = [x for x in self.points]
|
||||
temp_points.append(data)
|
||||
return DrawToolUtilityShape(LineString(temp_points))
|
||||
|
||||
return None
|
||||
|
||||
def on_key(self, key):
|
||||
if key == 'backspace':
|
||||
if len(self.points) > 0:
|
||||
self.points = self.points[0:-1]
|
||||
|
||||
|
||||
class FCSelect(DrawTool):
|
||||
def __init__(self, draw_app):
|
||||
@@ -1001,6 +1011,7 @@ class FlatCAMDraw(QtCore.QObject):
|
||||
self.active_tool.make()
|
||||
if self.active_tool.complete:
|
||||
self.on_shape_complete()
|
||||
self.app.info("Done.")
|
||||
return
|
||||
|
||||
### Abort the current action
|
||||
@@ -1027,12 +1038,14 @@ class FlatCAMDraw(QtCore.QObject):
|
||||
self.move_btn.setChecked(True)
|
||||
self.on_tool_select('move')
|
||||
self.active_tool.set_origin(self.snap(event.xdata, event.ydata))
|
||||
self.app.info("Click on target point.")
|
||||
|
||||
### Copy
|
||||
if event.key == 'c':
|
||||
self.copy_btn.setChecked(True)
|
||||
self.on_tool_select('copy')
|
||||
self.active_tool.set_origin(self.snap(event.xdata, event.ydata))
|
||||
self.app.info("Click on target point.")
|
||||
|
||||
### Snap
|
||||
if event.key == 'g':
|
||||
|
||||
@@ -300,6 +300,7 @@ class FlatCAMInfoBar(QtGui.QWidget):
|
||||
|
||||
self.text = QtGui.QLabel(self)
|
||||
self.text.setText("Hello!")
|
||||
self.text.setToolTip("Hello!")
|
||||
|
||||
layout.addWidget(self.text)
|
||||
|
||||
@@ -307,6 +308,7 @@ class FlatCAMInfoBar(QtGui.QWidget):
|
||||
|
||||
def set_text_(self, text):
|
||||
self.text.setText(text)
|
||||
self.text.setToolTip(text)
|
||||
|
||||
def set_status(self, text, level="info"):
|
||||
level = str(level)
|
||||
|
||||
@@ -85,15 +85,19 @@ class LengthEntry(QtGui.QLineEdit):
|
||||
|
||||
def get_value(self):
|
||||
raw = str(self.text()).strip(' ')
|
||||
match = self.format_re.search(raw)
|
||||
# match = self.format_re.search(raw)
|
||||
|
||||
if not match:
|
||||
return None
|
||||
try:
|
||||
if match.group(2) is not None and match.group(2).upper() in self.scales:
|
||||
return float(eval(match.group(1)))*float(self.scales[self.output_units][match.group(2).upper()])
|
||||
else:
|
||||
return float(eval(match.group(1)))
|
||||
units = raw[-2:]
|
||||
units = self.scales[self.output_units][units.upper()]
|
||||
value = raw[:-2]
|
||||
return float(eval(value))*units
|
||||
except IndexError:
|
||||
value = raw
|
||||
return float(eval(value))
|
||||
except KeyError:
|
||||
value = raw
|
||||
return float(eval(value))
|
||||
except:
|
||||
log.warning("Could not parse value in entry: %s" % str(raw))
|
||||
return None
|
||||
|
||||
28
camlib.py
28
camlib.py
@@ -14,6 +14,8 @@ from numpy import arctan2, Inf, array, sqrt, pi, ceil, sin, cos, dot, float32, \
|
||||
from numpy.linalg import solve, norm
|
||||
from matplotlib.figure import Figure
|
||||
import re
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
import collections
|
||||
import numpy as np
|
||||
@@ -2054,9 +2056,12 @@ class Gerber (Geometry):
|
||||
self.solid_geometry = self.solid_geometry.difference(new_poly)
|
||||
|
||||
except Exception, err:
|
||||
ex_type, ex, tb = sys.exc_info()
|
||||
traceback.print_tb(tb)
|
||||
#print traceback.format_exc()
|
||||
|
||||
log.error("PARSING FAILED. Line %d: %s" % (line_num, gline))
|
||||
raise ParseError("%s\nLine %d: %s" % (repr(err), line_num, gline))
|
||||
raise ParseError("Line %d: %s" % (line_num, gline), repr(err))
|
||||
|
||||
@staticmethod
|
||||
def create_flash_geometry(location, aperture):
|
||||
@@ -2733,6 +2738,9 @@ class CNCjob(Geometry):
|
||||
:param append:
|
||||
:param tooldia:
|
||||
:param tolerance:
|
||||
:param multidepth: If True, use multiple passes to reach
|
||||
the desired depth.
|
||||
:param depthpercut: Maximum depth in each pass.
|
||||
:return: None
|
||||
"""
|
||||
assert isinstance(geometry, Geometry), \
|
||||
@@ -2800,6 +2808,7 @@ class CNCjob(Geometry):
|
||||
if pt != geo.coords[0] and pt == geo.coords[-1]:
|
||||
geo.coords = list(geo.coords)[::-1]
|
||||
|
||||
#---------- Single depth/pass --------
|
||||
if not multidepth:
|
||||
# G-code
|
||||
# Note: self.linear2gcode() and self.point2gcode() will
|
||||
@@ -2819,14 +2828,17 @@ class CNCjob(Geometry):
|
||||
depth = 0
|
||||
reverse = False
|
||||
while depth > self.z_cut:
|
||||
depth -= depthpercut
|
||||
log.debug("DEPTH: %f" % depth)
|
||||
# TODO: Working...
|
||||
# G-code
|
||||
# Note: self.linear2gcode() and self.point2gcode() will
|
||||
# lower and raise the tool every time.
|
||||
|
||||
# Cut at specific depth and do not leave the tool.
|
||||
# Increase depth. Limit to z_cut.
|
||||
depth -= depthpercut
|
||||
if depth < self.z_cut:
|
||||
depth = self.z_cut
|
||||
|
||||
# Cut at specific depth and do not lift the tool.
|
||||
# Note: linear2gcode() will use G00 to move to the
|
||||
# first point in the path, but it should be already
|
||||
# at the first point if the tool is down (in the material).
|
||||
# So, an extra G00 should show up but is inconsequential.
|
||||
if type(geo) == LineString or type(geo) == LinearRing:
|
||||
self.gcode += self.linear2gcode(geo, tolerance=tolerance,
|
||||
zcut=depth,
|
||||
|
||||
Reference in New Issue
Block a user