- some PEP8 corrections
This commit is contained in:
@@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing.
|
||||
|
||||
=================================================
|
||||
|
||||
15.07.2019
|
||||
|
||||
- some PEP8 corrections
|
||||
|
||||
13.07.2019
|
||||
|
||||
- fixed a possible issue in Gerber Object class
|
||||
|
||||
@@ -42,9 +42,9 @@ class ToolCalculator(FlatCAMTool):
|
||||
""")
|
||||
self.layout.addWidget(title_label)
|
||||
|
||||
#################### ##
|
||||
# ## Units Calculator # ##
|
||||
#################### ##
|
||||
# #####################
|
||||
# ## Units Calculator #
|
||||
# #####################
|
||||
|
||||
self.unists_spacer_label = QtWidgets.QLabel(" ")
|
||||
self.layout.addWidget(self.unists_spacer_label)
|
||||
@@ -53,14 +53,14 @@ class ToolCalculator(FlatCAMTool):
|
||||
units_label = QtWidgets.QLabel("<font size=3><b>%s</b></font>" % self.unitsName)
|
||||
self.layout.addWidget(units_label)
|
||||
|
||||
#Grid Layout
|
||||
# Grid Layout
|
||||
grid_units_layout = QtWidgets.QGridLayout()
|
||||
self.layout.addLayout(grid_units_layout)
|
||||
|
||||
inch_label = QtWidgets.QLabel("INCH")
|
||||
mm_label = QtWidgets.QLabel("MM")
|
||||
grid_units_layout.addWidget(mm_label, 0, 0)
|
||||
grid_units_layout.addWidget( inch_label, 0, 1)
|
||||
grid_units_layout.addWidget(inch_label, 0, 1)
|
||||
|
||||
self.inch_entry = FCEntry()
|
||||
# self.inch_entry.setFixedWidth(70)
|
||||
@@ -75,11 +75,9 @@ class ToolCalculator(FlatCAMTool):
|
||||
grid_units_layout.addWidget(self.mm_entry, 1, 0)
|
||||
grid_units_layout.addWidget(self.inch_entry, 1, 1)
|
||||
|
||||
|
||||
########################## ##
|
||||
# ## V-shape Tool Calculator # ##
|
||||
########################## ##
|
||||
|
||||
# ##############################
|
||||
# ## V-shape Tool Calculator ###
|
||||
# ##############################
|
||||
self.v_shape_spacer_label = QtWidgets.QLabel(" ")
|
||||
self.layout.addWidget(self.v_shape_spacer_label)
|
||||
|
||||
@@ -96,32 +94,31 @@ class ToolCalculator(FlatCAMTool):
|
||||
# self.tipDia_entry.setFixedWidth(70)
|
||||
self.tipDia_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.tipDia_label.setToolTip(_('This is the diameter of the tool tip.\n'
|
||||
'The manufacturer specifies it.'))
|
||||
'The manufacturer specifies it.'))
|
||||
|
||||
self.tipAngle_label = QtWidgets.QLabel(_("Tip Angle:"))
|
||||
self.tipAngle_entry = FCEntry()
|
||||
# self.tipAngle_entry.setFixedWidth(70)
|
||||
self.tipAngle_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.tipAngle_label.setToolTip(_("This is the angle of the tip of the tool.\n"
|
||||
"It is specified by manufacturer."))
|
||||
"It is specified by manufacturer."))
|
||||
|
||||
self.cutDepth_label = QtWidgets.QLabel(_("Cut Z:"))
|
||||
self.cutDepth_entry = FCEntry()
|
||||
# self.cutDepth_entry.setFixedWidth(70)
|
||||
self.cutDepth_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.cutDepth_label.setToolTip(_("This is the depth to cut into the material.\n"
|
||||
"In the CNCJob is the CutZ parameter."))
|
||||
"In the CNCJob is the CutZ parameter."))
|
||||
|
||||
self.effectiveToolDia_label = QtWidgets.QLabel(_("Tool Diameter:"))
|
||||
self.effectiveToolDia_entry = FCEntry()
|
||||
# self.effectiveToolDia_entry.setFixedWidth(70)
|
||||
self.effectiveToolDia_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.effectiveToolDia_label.setToolTip(_("This is the tool diameter to be entered into\n"
|
||||
"FlatCAM Gerber section.\n"
|
||||
"In the CNCJob section it is called >Tool dia<."))
|
||||
"FlatCAM Gerber section.\n"
|
||||
"In the CNCJob section it is called >Tool dia<."))
|
||||
# self.effectiveToolDia_entry.setEnabled(False)
|
||||
|
||||
|
||||
form_layout.addRow(self.tipDia_label, self.tipDia_entry)
|
||||
form_layout.addRow(self.tipAngle_label, self.tipAngle_entry)
|
||||
form_layout.addRow(self.cutDepth_label, self.cutDepth_entry)
|
||||
@@ -132,16 +129,15 @@ class ToolCalculator(FlatCAMTool):
|
||||
# self.calculate_button.setFixedWidth(70)
|
||||
self.calculate_vshape_button.setToolTip(
|
||||
_("Calculate either the Cut Z or the effective tool diameter,\n "
|
||||
"depending on which is desired and which is known. ")
|
||||
"depending on which is desired and which is known. ")
|
||||
)
|
||||
self.empty_label = QtWidgets.QLabel(" ")
|
||||
|
||||
form_layout.addRow(self.empty_label, self.calculate_vshape_button)
|
||||
|
||||
|
||||
################################## ##
|
||||
# ## ElectroPlating Tool Calculator # ##
|
||||
################################## ##
|
||||
# ####################################
|
||||
# ## ElectroPlating Tool Calculator ##
|
||||
# ####################################
|
||||
|
||||
self.plate_spacer_label = QtWidgets.QLabel(" ")
|
||||
self.layout.addWidget(self.plate_spacer_label)
|
||||
@@ -150,7 +146,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
plate_title_label = QtWidgets.QLabel("<font size=3><b>%s</b></font>" % self.eplateName)
|
||||
plate_title_label.setToolTip(
|
||||
_("This calculator is useful for those who plate the via/pad/drill holes,\n"
|
||||
"using a method like grahite ink or calcium hypophosphite ink or palladium chloride.")
|
||||
"using a method like grahite ink or calcium hypophosphite ink or palladium chloride.")
|
||||
)
|
||||
self.layout.addWidget(plate_title_label)
|
||||
|
||||
@@ -175,15 +171,14 @@ class ToolCalculator(FlatCAMTool):
|
||||
# self.cdensity_entry.setFixedWidth(70)
|
||||
self.cdensity_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.cdensity_label.setToolTip(_("Current density to pass through the board. \n"
|
||||
"In Amps per Square Feet ASF."))
|
||||
|
||||
"In Amps per Square Feet ASF."))
|
||||
|
||||
self.growth_label = QtWidgets.QLabel(_("Copper Growth:"))
|
||||
self.growth_entry = FCEntry()
|
||||
# self.growth_entry.setFixedWidth(70)
|
||||
self.growth_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.growth_label.setToolTip(_("How thick the copper growth is intended to be.\n"
|
||||
"In microns."))
|
||||
"In microns."))
|
||||
|
||||
# self.growth_entry.setEnabled(False)
|
||||
|
||||
@@ -192,7 +187,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
# self.cvaluelabel.setFixedWidth(70)
|
||||
self.cvalue_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.cvaluelabel.setToolTip(_('This is the current intensity value\n'
|
||||
'to be set on the Power Supply. In Amps.'))
|
||||
'to be set on the Power Supply. In Amps.'))
|
||||
self.cvalue_entry.setDisabled(True)
|
||||
|
||||
self.timelabel = QtWidgets.QLabel(_("Time:"))
|
||||
@@ -200,7 +195,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
# self.timelabel.setFixedWidth(70)
|
||||
self.time_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.timelabel.setToolTip(_('This is the calculated time required for the procedure.\n'
|
||||
'In minutes.'))
|
||||
'In minutes.'))
|
||||
self.time_entry.setDisabled(True)
|
||||
|
||||
plate_form_layout.addRow(self.pcblengthlabel, self.pcblength_entry)
|
||||
@@ -214,8 +209,8 @@ class ToolCalculator(FlatCAMTool):
|
||||
self.calculate_plate_button = QtWidgets.QPushButton(_("Calculate"))
|
||||
# self.calculate_button.setFixedWidth(70)
|
||||
self.calculate_plate_button.setToolTip(
|
||||
_("Calculate the current intensity value and the procedure time,\n "
|
||||
"depending on the parameters above")
|
||||
_("Calculate the current intensity value and the procedure time,\n"
|
||||
"depending on the parameters above")
|
||||
)
|
||||
self.empty_label_2 = QtWidgets.QLabel(" ")
|
||||
|
||||
@@ -223,6 +218,8 @@ class ToolCalculator(FlatCAMTool):
|
||||
|
||||
self.layout.addStretch()
|
||||
|
||||
self.units = ''
|
||||
|
||||
# ## Signals
|
||||
self.cutDepth_entry.textChanged.connect(self.on_calculate_tool_dia)
|
||||
self.cutDepth_entry.editingFinished.connect(self.on_calculate_tool_dia)
|
||||
@@ -305,7 +302,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
tip_diameter = float(self.tipDia_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -316,7 +313,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
half_tip_angle = float(self.tipAngle_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
half_tip_angle /= 2
|
||||
|
||||
@@ -328,7 +325,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
cut_depth = float(self.cutDepth_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
|
||||
tool_diameter = tip_diameter + (2 * cut_depth * math.tan(math.radians(half_tip_angle)))
|
||||
@@ -343,7 +340,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
mm_val = float(self.mm_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
self.inch_entry.set_value('%.6f' % (mm_val / 25.4))
|
||||
|
||||
@@ -356,7 +353,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
inch_val = float(self.inch_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
self.mm_entry.set_value('%.6f' % (inch_val * 25.4))
|
||||
|
||||
@@ -370,7 +367,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
length = float(self.pcblength_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -381,7 +378,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
width = float(self.pcbwidth_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -392,7 +389,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
density = float(self.cdensity_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -403,7 +400,7 @@ class ToolCalculator(FlatCAMTool):
|
||||
copper = float(self.growth_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
|
||||
calculated_current = (length * width * density) * 0.0021527820833419
|
||||
@@ -412,4 +409,4 @@ class ToolCalculator(FlatCAMTool):
|
||||
self.cvalue_entry.set_value('%.2f' % calculated_current)
|
||||
self.time_entry.set_value('%.1f' % calculated_time)
|
||||
|
||||
# end of file
|
||||
# end of file
|
||||
|
||||
@@ -354,7 +354,7 @@ class CutOut(FlatCAMTool):
|
||||
dia = float(self.dia.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Tool diameter value is missing or wrong format. "
|
||||
"Add it and retry."))
|
||||
"Add it and retry."))
|
||||
return
|
||||
|
||||
if 0 in {dia}:
|
||||
@@ -369,7 +369,7 @@ class CutOut(FlatCAMTool):
|
||||
margin = float(self.margin.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Margin value is missing or wrong format. "
|
||||
"Add it and retry."))
|
||||
"Add it and retry."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -380,7 +380,7 @@ class CutOut(FlatCAMTool):
|
||||
gapsize = float(self.gapsize.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Gap size value is missing or wrong format. "
|
||||
"Add it and retry."))
|
||||
"Add it and retry."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -391,7 +391,7 @@ class CutOut(FlatCAMTool):
|
||||
|
||||
if gaps not in ['LR', 'TB', '2LR', '2TB', '4', '8']:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8. "
|
||||
"Fill in a correct value and retry. "))
|
||||
"Fill in a correct value and retry. "))
|
||||
return
|
||||
|
||||
if cutout_obj.multigeo is True:
|
||||
@@ -523,7 +523,7 @@ class CutOut(FlatCAMTool):
|
||||
dia = float(self.dia.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Tool diameter value is missing or wrong format. "
|
||||
"Add it and retry."))
|
||||
"Add it and retry."))
|
||||
return
|
||||
|
||||
if 0 in {dia}:
|
||||
@@ -538,7 +538,7 @@ class CutOut(FlatCAMTool):
|
||||
margin = float(self.margin.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Margin value is missing or wrong format. "
|
||||
"Add it and retry."))
|
||||
"Add it and retry."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -549,7 +549,7 @@ class CutOut(FlatCAMTool):
|
||||
gapsize = float(self.gapsize.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Gap size value is missing or wrong format. "
|
||||
"Add it and retry."))
|
||||
"Add it and retry."))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -560,13 +560,13 @@ class CutOut(FlatCAMTool):
|
||||
|
||||
if gaps not in ['LR', 'TB', '2LR', '2TB', '4', '8']:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Gaps value can be only one of: 'lr', 'tb', '2lr', '2tb', 4 or 8. "
|
||||
"Fill in a correct value and retry. "))
|
||||
"Fill in a correct value and retry. "))
|
||||
return
|
||||
|
||||
if cutout_obj.multigeo is True:
|
||||
self.app.inform.emit(_("[ERROR]Cutout operation cannot be done on a multi-geo Geometry.\n"
|
||||
"Optionally, this Multi-geo Geometry can be converted to Single-geo Geometry,\n"
|
||||
"and after that perform Cutout."))
|
||||
"Optionally, this Multi-geo Geometry can be converted to Single-geo Geometry,\n"
|
||||
"and after that perform Cutout."))
|
||||
return
|
||||
|
||||
# Get min and max data for each object as we just cut rectangles across X or Y
|
||||
@@ -643,7 +643,6 @@ class CutOut(FlatCAMTool):
|
||||
geo_obj.solid_geometry = deepcopy(solid_geo)
|
||||
geo_obj.options['cnctooldia'] = str(dia)
|
||||
|
||||
|
||||
outname = cutout_obj.options["name"] + "_cutout"
|
||||
self.app.new_object('geometry', outname, geo_init)
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@ from PyQt5 import QtCore
|
||||
|
||||
import gettext
|
||||
import FlatCAMTranslation as fcTranslate
|
||||
import builtins
|
||||
|
||||
fcTranslate.apply_language('strings')
|
||||
import builtins
|
||||
if '_' not in builtins.__dict__:
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -52,8 +52,8 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.mirror_gerber_button = QtWidgets.QPushButton(_("Mirror"))
|
||||
self.mirror_gerber_button.setToolTip(
|
||||
_("Mirrors (flips) the specified object around \n"
|
||||
"the specified axis. Does not create a new \n"
|
||||
"object, but modifies it.")
|
||||
"the specified axis. Does not create a new \n"
|
||||
"object, but modifies it.")
|
||||
)
|
||||
self.mirror_gerber_button.setFixedWidth(60)
|
||||
|
||||
@@ -76,8 +76,8 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.mirror_exc_button = QtWidgets.QPushButton(_("Mirror"))
|
||||
self.mirror_exc_button.setToolTip(
|
||||
_("Mirrors (flips) the specified object around \n"
|
||||
"the specified axis. Does not create a new \n"
|
||||
"object, but modifies it.")
|
||||
"the specified axis. Does not create a new \n"
|
||||
"object, but modifies it.")
|
||||
)
|
||||
self.mirror_exc_button.setFixedWidth(60)
|
||||
|
||||
@@ -100,8 +100,8 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.mirror_geo_button = QtWidgets.QPushButton(_("Mirror"))
|
||||
self.mirror_geo_button.setToolTip(
|
||||
_("Mirrors (flips) the specified object around \n"
|
||||
"the specified axis. Does not create a new \n"
|
||||
"object, but modifies it.")
|
||||
"the specified axis. Does not create a new \n"
|
||||
"object, but modifies it.")
|
||||
)
|
||||
self.mirror_geo_button.setFixedWidth(60)
|
||||
|
||||
@@ -133,8 +133,8 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.axloc_label = QtWidgets.QLabel(_("Axis Ref:"))
|
||||
self.axloc_label.setToolTip(
|
||||
_("The axis should pass through a <b>point</b> or cut\n "
|
||||
"a specified <b>box</b> (in a FlatCAM object) through \n"
|
||||
"the center.")
|
||||
"a specified <b>box</b> (in a FlatCAM object) through \n"
|
||||
"the center.")
|
||||
)
|
||||
# grid_lay.addRow("Axis Location:", self.axis_location)
|
||||
grid_lay1.addWidget(self.axloc_label, 8, 0)
|
||||
@@ -152,17 +152,17 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.pb_label = QtWidgets.QLabel("<b>%s</b>" % _('Point/Box Reference:'))
|
||||
self.pb_label.setToolTip(
|
||||
_("If 'Point' is selected above it store the coordinates (x, y) through which\n"
|
||||
"the mirroring axis passes.\n"
|
||||
"If 'Box' is selected above, select here a FlatCAM object (Gerber, Exc or Geo).\n"
|
||||
"Through the center of this object pass the mirroring axis selected above.")
|
||||
"the mirroring axis passes.\n"
|
||||
"If 'Box' is selected above, select here a FlatCAM object (Gerber, Exc or Geo).\n"
|
||||
"Through the center of this object pass the mirroring axis selected above.")
|
||||
)
|
||||
|
||||
self.add_point_button = QtWidgets.QPushButton(_("Add"))
|
||||
self.add_point_button.setToolTip(
|
||||
_("Add the coordinates in format <b>(x, y)</b> through which the mirroring axis \n "
|
||||
"selected in 'MIRROR AXIS' pass.\n"
|
||||
"The (x, y) coordinates are captured by pressing SHIFT key\n"
|
||||
"and left mouse button click on canvas or you can enter the coords manually.")
|
||||
"selected in 'MIRROR AXIS' pass.\n"
|
||||
"The (x, y) coordinates are captured by pressing SHIFT key\n"
|
||||
"and left mouse button click on canvas or you can enter the coords manually.")
|
||||
)
|
||||
self.add_point_button.setFixedWidth(60)
|
||||
|
||||
@@ -188,15 +188,14 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.box_combo.hide()
|
||||
self.box_combo_type.hide()
|
||||
|
||||
|
||||
# ## Alignment holes
|
||||
self.ah_label = QtWidgets.QLabel("<b>%s</b>" % _('Alignment Drill Coordinates:'))
|
||||
self.ah_label.setToolTip(
|
||||
_( "Alignment holes (x1, y1), (x2, y2), ... "
|
||||
"on one side of the mirror axis. For each set of (x, y) coordinates\n"
|
||||
"entered here, a pair of drills will be created:\n\n"
|
||||
"- one drill at the coordinates from the field\n"
|
||||
"- one drill in mirror position over the axis selected above in the 'Mirror Axis'.")
|
||||
_("Alignment holes (x1, y1), (x2, y2), ... "
|
||||
"on one side of the mirror axis. For each set of (x, y) coordinates\n"
|
||||
"entered here, a pair of drills will be created:\n\n"
|
||||
"- one drill at the coordinates from the field\n"
|
||||
"- one drill in mirror position over the axis selected above in the 'Mirror Axis'.")
|
||||
)
|
||||
self.layout.addWidget(self.ah_label)
|
||||
|
||||
@@ -208,12 +207,12 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.add_drill_point_button = QtWidgets.QPushButton(_("Add"))
|
||||
self.add_drill_point_button.setToolTip(
|
||||
_("Add alignment drill holes coords in the format: (x1, y1), (x2, y2), ... \n"
|
||||
"on one side of the mirror axis.\n\n"
|
||||
"The coordinates set can be obtained:\n"
|
||||
"- press SHIFT key and left mouse clicking on canvas. Then click Add.\n"
|
||||
"- press SHIFT key and left mouse clicking on canvas. Then CTRL+V in the field.\n"
|
||||
"- press SHIFT key and left mouse clicking on canvas. Then RMB click in the field and click Paste.\n"
|
||||
"- by entering the coords manually in the format: (x1, y1), (x2, y2), ...")
|
||||
"on one side of the mirror axis.\n\n"
|
||||
"The coordinates set can be obtained:\n"
|
||||
"- press SHIFT key and left mouse clicking on canvas. Then click Add.\n"
|
||||
"- press SHIFT key and left mouse clicking on canvas. Then CTRL+V in the field.\n"
|
||||
"- press SHIFT key and left mouse clicking on canvas. Then RMB click in the field and click Paste.\n"
|
||||
"- by entering the coords manually in the format: (x1, y1), (x2, y2), ...")
|
||||
)
|
||||
self.add_drill_point_button.setFixedWidth(60)
|
||||
|
||||
@@ -224,7 +223,7 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.dt_label = QtWidgets.QLabel("<b>%s</b>:" % _('Alignment Drill Diameter'))
|
||||
self.dt_label.setToolTip(
|
||||
_("Diameter of the drill for the "
|
||||
"alignment holes.")
|
||||
"alignment holes.")
|
||||
)
|
||||
self.layout.addWidget(self.dt_label)
|
||||
|
||||
@@ -235,7 +234,7 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.dd_label = QtWidgets.QLabel(_("Drill diam.:"))
|
||||
self.dd_label.setToolTip(
|
||||
_("Diameter of the drill for the "
|
||||
"alignment holes.")
|
||||
"alignment holes.")
|
||||
)
|
||||
hlay.addWidget(self.dd_label)
|
||||
hlay.addWidget(self.drill_dia)
|
||||
@@ -247,8 +246,8 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.create_alignment_hole_button = QtWidgets.QPushButton(_("Create Excellon Object"))
|
||||
self.create_alignment_hole_button.setToolTip(
|
||||
_("Creates an Excellon Object containing the\n"
|
||||
"specified alignment holes and their mirror\n"
|
||||
"images.")
|
||||
"specified alignment holes and their mirror\n"
|
||||
"images.")
|
||||
)
|
||||
hlay2.addWidget(self.create_alignment_hole_button)
|
||||
|
||||
@@ -325,7 +324,7 @@ class DblSidedTool(FlatCAMTool):
|
||||
px, py = self.point_entry.get_value()
|
||||
except TypeError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] 'Point' reference is selected and 'Point' coordinates "
|
||||
"are missing. Add them and retry."))
|
||||
"are missing. Add them and retry."))
|
||||
return
|
||||
else:
|
||||
selection_index = self.box_combo.currentIndex()
|
||||
@@ -361,7 +360,7 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.drill_dia.set_value(dia)
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Tool diameter value is missing or wrong format. "
|
||||
"Add it and retry."))
|
||||
"Add it and retry."))
|
||||
return
|
||||
|
||||
if dia is '':
|
||||
@@ -372,7 +371,8 @@ class DblSidedTool(FlatCAMTool):
|
||||
# holes = self.alignment_holes.get_value()
|
||||
holes = eval('[{}]'.format(self.alignment_holes.text()))
|
||||
if not holes:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] There are no Alignment Drill Coordinates to use. Add them and retry."))
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] There are no Alignment Drill Coordinates to use. "
|
||||
"Add them and retry."))
|
||||
return
|
||||
|
||||
drills = []
|
||||
@@ -418,7 +418,7 @@ class DblSidedTool(FlatCAMTool):
|
||||
px, py = self.point_entry.get_value()
|
||||
except TypeError:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] 'Point' coordinates missing. "
|
||||
"Using Origin (0, 0) as mirroring reference."))
|
||||
"Using Origin (0, 0) as mirroring reference."))
|
||||
px, py = (0, 0)
|
||||
|
||||
else:
|
||||
@@ -462,7 +462,7 @@ class DblSidedTool(FlatCAMTool):
|
||||
except Exception as e:
|
||||
log.debug("DblSidedTool.on_mirror_geo() --> %s" % str(e))
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] There are no Point coordinates in the Point field. "
|
||||
"Add coords and try again ..."))
|
||||
"Add coords and try again ..."))
|
||||
return
|
||||
else:
|
||||
selection_index_box = self.box_combo.currentIndex()
|
||||
@@ -553,8 +553,4 @@ class DblSidedTool(FlatCAMTool):
|
||||
self.box_combo.setCurrentIndex(0)
|
||||
self.box_combo_type.setCurrentIndex(0)
|
||||
|
||||
|
||||
self.drill_values = ""
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ from PyQt5 import QtGui, QtCore, QtWidgets
|
||||
|
||||
import gettext
|
||||
import FlatCAMTranslation as fcTranslate
|
||||
import builtins
|
||||
|
||||
fcTranslate.apply_language('strings')
|
||||
import builtins
|
||||
if '_' not in builtins.__dict__:
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -56,9 +56,9 @@ class Film(FlatCAMTool):
|
||||
self.tf_type_obj_combo_label = QtWidgets.QLabel(_("Object Type:"))
|
||||
self.tf_type_obj_combo_label.setToolTip(
|
||||
_("Specify the type of object for which to create the film.\n"
|
||||
"The object can be of type: Gerber or Geometry.\n"
|
||||
"The selection here decide the type of objects that will be\n"
|
||||
"in the Film Object combobox.")
|
||||
"The object can be of type: Gerber or Geometry.\n"
|
||||
"The selection here decide the type of objects that will be\n"
|
||||
"in the Film Object combobox.")
|
||||
)
|
||||
tf_form_layout.addRow(self.tf_type_obj_combo_label, self.tf_type_obj_combo)
|
||||
|
||||
@@ -89,9 +89,9 @@ class Film(FlatCAMTool):
|
||||
self.tf_type_box_combo_label = QtWidgets.QLabel(_("Box Type:"))
|
||||
self.tf_type_box_combo_label.setToolTip(
|
||||
_("Specify the type of object to be used as an container for\n"
|
||||
"film creation. It can be: Gerber or Geometry type."
|
||||
"The selection here decide the type of objects that will be\n"
|
||||
"in the Box Object combobox.")
|
||||
"film creation. It can be: Gerber or Geometry type."
|
||||
"The selection here decide the type of objects that will be\n"
|
||||
"in the Box Object combobox.")
|
||||
)
|
||||
tf_form_layout.addRow(self.tf_type_box_combo_label, self.tf_type_box_combo)
|
||||
|
||||
@@ -104,23 +104,23 @@ class Film(FlatCAMTool):
|
||||
self.tf_box_combo_label = QtWidgets.QLabel(_("Box Object:"))
|
||||
self.tf_box_combo_label.setToolTip(
|
||||
_("The actual object that is used a container for the\n "
|
||||
"selected object for which we create the film.\n"
|
||||
"Usually it is the PCB outline but it can be also the\n"
|
||||
"same object for which the film is created.")
|
||||
"selected object for which we create the film.\n"
|
||||
"Usually it is the PCB outline but it can be also the\n"
|
||||
"same object for which the film is created.")
|
||||
)
|
||||
tf_form_layout.addRow(self.tf_box_combo_label, self.tf_box_combo)
|
||||
|
||||
# Film Type
|
||||
self.film_type = RadioSet([{'label': 'Positive', 'value': 'pos'},
|
||||
{'label': 'Negative', 'value': 'neg'}])
|
||||
{'label': 'Negative', 'value': 'neg'}])
|
||||
self.film_type_label = QtWidgets.QLabel(_("Film Type:"))
|
||||
self.film_type_label.setToolTip(
|
||||
_("Generate a Positive black film or a Negative film.\n"
|
||||
"Positive means that it will print the features\n"
|
||||
"with black on a white canvas.\n"
|
||||
"Negative means that it will print the features\n"
|
||||
"with white on a black canvas.\n"
|
||||
"The Film format is SVG.")
|
||||
"Positive means that it will print the features\n"
|
||||
"with black on a white canvas.\n"
|
||||
"Negative means that it will print the features\n"
|
||||
"with white on a black canvas.\n"
|
||||
"The Film format is SVG.")
|
||||
)
|
||||
tf_form_layout.addRow(self.film_type_label, self.film_type)
|
||||
|
||||
@@ -130,13 +130,13 @@ class Film(FlatCAMTool):
|
||||
self.boundary_label = QtWidgets.QLabel(_("Border:"))
|
||||
self.boundary_label.setToolTip(
|
||||
_("Specify a border around the object.\n"
|
||||
"Only for negative film.\n"
|
||||
"It helps if we use as a Box Object the same \n"
|
||||
"object as in Film Object. It will create a thick\n"
|
||||
"black bar around the actual print allowing for a\n"
|
||||
"better delimitation of the outline features which are of\n"
|
||||
"white color like the rest and which may confound with the\n"
|
||||
"surroundings if not for this border.")
|
||||
"Only for negative film.\n"
|
||||
"It helps if we use as a Box Object the same \n"
|
||||
"object as in Film Object. It will create a thick\n"
|
||||
"black bar around the actual print allowing for a\n"
|
||||
"better delimitation of the outline features which are of\n"
|
||||
"white color like the rest and which may confound with the\n"
|
||||
"surroundings if not for this border.")
|
||||
)
|
||||
tf_form_layout.addRow(self.boundary_label, self.boundary_entry)
|
||||
|
||||
@@ -144,8 +144,8 @@ class Film(FlatCAMTool):
|
||||
self.film_scale_label = QtWidgets.QLabel(_("Scale Stroke:"))
|
||||
self.film_scale_label.setToolTip(
|
||||
_("Scale the line stroke thickness of each feature in the SVG file.\n"
|
||||
"It means that the line that envelope each SVG feature will be thicker or thinner,\n"
|
||||
"therefore the fine features may be more affected by this parameter.")
|
||||
"It means that the line that envelope each SVG feature will be thicker or thinner,\n"
|
||||
"therefore the fine features may be more affected by this parameter.")
|
||||
)
|
||||
tf_form_layout.addRow(self.film_scale_label, self.film_scale_entry)
|
||||
|
||||
@@ -157,9 +157,9 @@ class Film(FlatCAMTool):
|
||||
self.film_object_button = QtWidgets.QPushButton(_("Save Film"))
|
||||
self.film_object_button.setToolTip(
|
||||
_("Create a Film for the selected object, within\n"
|
||||
"the specified box. Does not create a new \n "
|
||||
"FlatCAM object, but directly save it in SVG format\n"
|
||||
"which can be opened with Inkscape.")
|
||||
"the specified box. Does not create a new \n "
|
||||
"FlatCAM object, but directly save it in SVG format\n"
|
||||
"which can be opened with Inkscape.")
|
||||
)
|
||||
hlay.addWidget(self.film_object_button)
|
||||
|
||||
@@ -221,13 +221,13 @@ class Film(FlatCAMTool):
|
||||
def on_film_creation(self):
|
||||
try:
|
||||
name = self.tf_object_combo.currentText()
|
||||
except:
|
||||
except Exception as e:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] No FlatCAM object selected. Load an object for Film and retry."))
|
||||
return
|
||||
|
||||
try:
|
||||
boxname = self.tf_box_combo.currentText()
|
||||
except:
|
||||
except Exception as e:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] No FlatCAM object selected. Load an object for Box and retry."))
|
||||
return
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ from PyQt5 import QtGui, QtWidgets
|
||||
|
||||
import gettext
|
||||
import FlatCAMTranslation as fcTranslate
|
||||
import builtins
|
||||
|
||||
fcTranslate.apply_language('strings')
|
||||
import builtins
|
||||
if '_' not in builtins.__dict__:
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -52,8 +52,8 @@ class ToolImage(FlatCAMTool):
|
||||
|
||||
self.tf_type_obj_combo_label = QtWidgets.QLabel(_("Object Type:"))
|
||||
self.tf_type_obj_combo_label.setToolTip(
|
||||
_( "Specify the type of object to create from the image.\n"
|
||||
"It can be of type: Gerber or Geometry.")
|
||||
_("Specify the type of object to create from the image.\n"
|
||||
"It can be of type: Gerber or Geometry.")
|
||||
|
||||
)
|
||||
ti_form_layout.addRow(self.tf_type_obj_combo_label, self.tf_type_obj_combo)
|
||||
@@ -62,7 +62,7 @@ class ToolImage(FlatCAMTool):
|
||||
self.dpi_entry = IntEntry()
|
||||
self.dpi_label = QtWidgets.QLabel(_("DPI value:"))
|
||||
self.dpi_label.setToolTip(
|
||||
_( "Specify a DPI value for the image.")
|
||||
_("Specify a DPI value for the image.")
|
||||
)
|
||||
ti_form_layout.addRow(self.dpi_label, self.dpi_entry)
|
||||
|
||||
@@ -77,11 +77,11 @@ class ToolImage(FlatCAMTool):
|
||||
|
||||
# Type of image interpretation
|
||||
self.image_type = RadioSet([{'label': 'B/W', 'value': 'black'},
|
||||
{'label': 'Color', 'value': 'color'}])
|
||||
{'label': 'Color', 'value': 'color'}])
|
||||
self.image_type_label = QtWidgets.QLabel("<b>%s:</b>" % _('Image type'))
|
||||
self.image_type_label.setToolTip(
|
||||
_("Choose a method for the image interpretation.\n"
|
||||
"B/W means a black & white image. Color means a colored image.")
|
||||
"B/W means a black & white image. Color means a colored image.")
|
||||
)
|
||||
ti2_form_layout.addRow(self.image_type_label, self.image_type)
|
||||
|
||||
@@ -90,11 +90,11 @@ class ToolImage(FlatCAMTool):
|
||||
self.mask_bw_label = QtWidgets.QLabel("%s <b>B/W</b>:" % _('Mask value'))
|
||||
self.mask_bw_label.setToolTip(
|
||||
_("Mask for monochrome image.\n"
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.\n"
|
||||
"0 means no detail and 255 means everything \n"
|
||||
"(which is totally black).")
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.\n"
|
||||
"0 means no detail and 255 means everything \n"
|
||||
"(which is totally black).")
|
||||
)
|
||||
ti2_form_layout.addRow(self.mask_bw_label, self.mask_bw_entry)
|
||||
|
||||
@@ -103,9 +103,9 @@ class ToolImage(FlatCAMTool):
|
||||
self.mask_r_label = QtWidgets.QLabel("%s <b>R:</b>" % _('Mask value'))
|
||||
self.mask_r_label.setToolTip(
|
||||
_("Mask for RED color.\n"
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.")
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.")
|
||||
)
|
||||
ti2_form_layout.addRow(self.mask_r_label, self.mask_r_entry)
|
||||
|
||||
@@ -114,9 +114,9 @@ class ToolImage(FlatCAMTool):
|
||||
self.mask_g_label = QtWidgets.QLabel("%s <b>G:</b>" % _('Mask value'))
|
||||
self.mask_g_label.setToolTip(
|
||||
_("Mask for GREEN color.\n"
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.")
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.")
|
||||
)
|
||||
ti2_form_layout.addRow(self.mask_g_label, self.mask_g_entry)
|
||||
|
||||
@@ -125,9 +125,9 @@ class ToolImage(FlatCAMTool):
|
||||
self.mask_b_label = QtWidgets.QLabel("%s <b>B:</b>" % _('Mask value'))
|
||||
self.mask_b_label.setToolTip(
|
||||
_("Mask for BLUE color.\n"
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.")
|
||||
"Takes values between [0 ... 255].\n"
|
||||
"Decides the level of details to include\n"
|
||||
"in the resulting geometry.")
|
||||
)
|
||||
ti2_form_layout.addRow(self.mask_b_label, self.mask_b_entry)
|
||||
|
||||
@@ -191,27 +191,27 @@ class ToolImage(FlatCAMTool):
|
||||
mask = []
|
||||
self.app.log.debug("on_file_importimage()")
|
||||
|
||||
filter = "Image Files(*.BMP *.PNG *.JPG *.JPEG);;" \
|
||||
"Bitmap File (*.BMP);;" \
|
||||
"PNG File (*.PNG);;" \
|
||||
"Jpeg File (*.JPG);;" \
|
||||
"All Files (*.*)"
|
||||
_filter = "Image Files(*.BMP *.PNG *.JPG *.JPEG);;" \
|
||||
"Bitmap File (*.BMP);;" \
|
||||
"PNG File (*.PNG);;" \
|
||||
"Jpeg File (*.JPG);;" \
|
||||
"All Files (*.*)"
|
||||
try:
|
||||
filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import IMAGE"),
|
||||
directory=self.app.get_last_folder(), filter=filter)
|
||||
directory=self.app.get_last_folder(), filter=_filter)
|
||||
except TypeError:
|
||||
filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Import IMAGE"), filter=filter)
|
||||
|
||||
filename = str(filename)
|
||||
type = self.tf_type_obj_combo.get_value().lower()
|
||||
type_obj = self.tf_type_obj_combo.get_value().lower()
|
||||
dpi = self.dpi_entry.get_value()
|
||||
mode = self.image_type.get_value()
|
||||
mask = [self.mask_bw_entry.get_value(), self.mask_r_entry.get_value(),self.mask_g_entry.get_value(),
|
||||
mask = [self.mask_bw_entry.get_value(), self.mask_r_entry.get_value(), self.mask_g_entry.get_value(),
|
||||
self.mask_b_entry.get_value()]
|
||||
|
||||
if filename == "":
|
||||
self.app.inform.emit(_("Open cancelled."))
|
||||
else:
|
||||
self.app.worker_task.emit({'fcn': self.app.import_image,
|
||||
'params': [filename, type, dpi, mode, mask]})
|
||||
'params': [filename, type_obj, dpi, mode, mask]})
|
||||
# self.import_svg(filename, "geometry")
|
||||
|
||||
@@ -14,9 +14,9 @@ from math import sqrt
|
||||
|
||||
import gettext
|
||||
import FlatCAMTranslation as fcTranslate
|
||||
import builtins
|
||||
|
||||
fcTranslate.apply_language('strings')
|
||||
import builtins
|
||||
if '_' not in builtins.__dict__:
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -40,7 +40,6 @@ class Measurement(FlatCAMTool):
|
||||
form_layout = QtWidgets.QFormLayout()
|
||||
self.layout.addLayout(form_layout)
|
||||
|
||||
|
||||
self.units_label = QtWidgets.QLabel(_("Units:"))
|
||||
self.units_label.setToolTip(_("Those are the units in which the distance is measured."))
|
||||
self.units_value = QtWidgets.QLabel("%s" % str({'mm': "METRIC (mm)", 'in': "INCH (in)"}[self.units]))
|
||||
@@ -73,12 +72,10 @@ class Measurement(FlatCAMTool):
|
||||
self.distance_x_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.distance_x_entry.setToolTip(_("This is the distance measured over the X axis."))
|
||||
|
||||
|
||||
self.distance_y_entry = FCEntry()
|
||||
self.distance_y_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.distance_y_entry.setToolTip(_("This is the distance measured over the Y axis."))
|
||||
|
||||
|
||||
self.total_distance_entry = FCEntry()
|
||||
self.total_distance_entry.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
|
||||
self.total_distance_entry.setToolTip(_("This is the point to point Euclidian distance."))
|
||||
@@ -110,6 +107,8 @@ class Measurement(FlatCAMTool):
|
||||
self.rel_point2 = None
|
||||
|
||||
self.active = False
|
||||
self.clicked_meas = None
|
||||
self.meas_line = None
|
||||
|
||||
self.original_call_source = 'app'
|
||||
|
||||
@@ -312,7 +311,7 @@ class Measurement(FlatCAMTool):
|
||||
# update utility geometry
|
||||
if len(self.points) == 1:
|
||||
self.utility_geometry(pos=pos)
|
||||
except:
|
||||
except Exception as e:
|
||||
self.app.ui.position_label.setText("")
|
||||
self.app.ui.rel_position_label.setText("")
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@ from copy import copy
|
||||
|
||||
import gettext
|
||||
import FlatCAMTranslation as fcTranslate
|
||||
import builtins
|
||||
|
||||
fcTranslate.apply_language('strings')
|
||||
import builtins
|
||||
if '_' not in builtins.__dict__:
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -97,7 +97,7 @@ class ToolMove(FlatCAMTool):
|
||||
pos_canvas = self.app.plotcanvas.vispy_canvas.translate_coords(event.pos)
|
||||
|
||||
# if GRID is active we need to get the snapped positions
|
||||
if self.app.grid_status() == True:
|
||||
if self.app.grid_status() is True:
|
||||
pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1])
|
||||
else:
|
||||
pos = pos_canvas
|
||||
@@ -117,7 +117,7 @@ class ToolMove(FlatCAMTool):
|
||||
self.delete_shape()
|
||||
|
||||
# if GRID is active we need to get the snapped positions
|
||||
if self.app.grid_status() == True:
|
||||
if self.app.grid_status() is True:
|
||||
pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1])
|
||||
else:
|
||||
pos = pos_canvas
|
||||
@@ -143,11 +143,11 @@ class ToolMove(FlatCAMTool):
|
||||
|
||||
try:
|
||||
sel_obj.replotApertures.emit()
|
||||
except:
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
# Update the object bounding box options
|
||||
a,b,c,d = sel_obj.bounds()
|
||||
a, b, c, d = sel_obj.bounds()
|
||||
sel_obj.options['xmin'] = a
|
||||
sel_obj.options['ymin'] = b
|
||||
sel_obj.options['xmax'] = c
|
||||
@@ -181,7 +181,7 @@ class ToolMove(FlatCAMTool):
|
||||
pos_canvas = self.app.plotcanvas.vispy_canvas.translate_coords(event.pos)
|
||||
|
||||
# if GRID is active we need to get the snapped positions
|
||||
if self.app.grid_status() == True:
|
||||
if self.app.grid_status() is True:
|
||||
pos = self.app.geo_editor.snap(pos_canvas[0], pos_canvas[1])
|
||||
else:
|
||||
pos = pos_canvas
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
# ########################################################## ##
|
||||
|
||||
from FlatCAMTool import FlatCAMTool
|
||||
from copy import copy,deepcopy
|
||||
from copy import copy, deepcopy
|
||||
from ObjectCollection import *
|
||||
import time
|
||||
|
||||
import gettext
|
||||
import FlatCAMTranslation as fcTranslate
|
||||
from shapely.geometry import base
|
||||
import builtins
|
||||
|
||||
fcTranslate.apply_language('strings')
|
||||
import builtins
|
||||
if '_' not in builtins.__dict__:
|
||||
_ = gettext.gettext
|
||||
|
||||
@@ -72,7 +72,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
self.tools_table_label = QtWidgets.QLabel('<b>%s</b>' % _('Tools Table'))
|
||||
self.tools_table_label.setToolTip(
|
||||
_("Tools pool from which the algorithm\n"
|
||||
"will pick the ones used for copper clearing.")
|
||||
"will pick the ones used for copper clearing.")
|
||||
)
|
||||
self.tools_box.addWidget(self.tools_table_label)
|
||||
|
||||
@@ -87,33 +87,33 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
|
||||
self.tools_table.horizontalHeaderItem(0).setToolTip(
|
||||
_("This is the Tool Number.\n"
|
||||
"Non copper clearing will start with the tool with the biggest \n"
|
||||
"diameter, continuing until there are no more tools.\n"
|
||||
"Only tools that create NCC clearing geometry will still be present\n"
|
||||
"in the resulting geometry. This is because with some tools\n"
|
||||
"this function will not be able to create painting geometry.")
|
||||
"Non copper clearing will start with the tool with the biggest \n"
|
||||
"diameter, continuing until there are no more tools.\n"
|
||||
"Only tools that create NCC clearing geometry will still be present\n"
|
||||
"in the resulting geometry. This is because with some tools\n"
|
||||
"this function will not be able to create painting geometry.")
|
||||
)
|
||||
self.tools_table.horizontalHeaderItem(1).setToolTip(
|
||||
_("Tool Diameter. It's value (in current FlatCAM units) \n"
|
||||
"is the cut width into the material."))
|
||||
"is the cut width into the material."))
|
||||
|
||||
self.tools_table.horizontalHeaderItem(2).setToolTip(
|
||||
_("The Tool Type (TT) can be:<BR>"
|
||||
"- <B>Circular</B> with 1 ... 4 teeth -> it is informative only. Being circular, <BR>"
|
||||
"the cut width in material is exactly the tool diameter.<BR>"
|
||||
"- <B>Ball</B> -> informative only and make reference to the Ball type endmill.<BR>"
|
||||
"- <B>V-Shape</B> -> it will disable de Z-Cut parameter in the resulting geometry UI form "
|
||||
"and enable two additional UI form fields in the resulting geometry: V-Tip Dia and "
|
||||
"V-Tip Angle. Adjusting those two values will adjust the Z-Cut parameter such "
|
||||
"as the cut width into material will be equal with the value in the Tool Diameter "
|
||||
"column of this table.<BR>"
|
||||
"Choosing the <B>V-Shape</B> Tool Type automatically will select the Operation Type "
|
||||
"in the resulting geometry as Isolation."))
|
||||
"- <B>Circular</B> with 1 ... 4 teeth -> it is informative only. Being circular, <BR>"
|
||||
"the cut width in material is exactly the tool diameter.<BR>"
|
||||
"- <B>Ball</B> -> informative only and make reference to the Ball type endmill.<BR>"
|
||||
"- <B>V-Shape</B> -> it will disable de Z-Cut parameter in the resulting geometry UI form "
|
||||
"and enable two additional UI form fields in the resulting geometry: V-Tip Dia and "
|
||||
"V-Tip Angle. Adjusting those two values will adjust the Z-Cut parameter such "
|
||||
"as the cut width into material will be equal with the value in the Tool Diameter "
|
||||
"column of this table.<BR>"
|
||||
"Choosing the <B>V-Shape</B> Tool Type automatically will select the Operation Type "
|
||||
"in the resulting geometry as Isolation."))
|
||||
|
||||
self.empty_label = QtWidgets.QLabel('')
|
||||
self.tools_box.addWidget(self.empty_label)
|
||||
|
||||
#### Add a new Tool ## ##
|
||||
# ### Add a new Tool ####
|
||||
hlay = QtWidgets.QHBoxLayout()
|
||||
self.tools_box.addLayout(hlay)
|
||||
|
||||
@@ -134,7 +134,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
self.addtool_btn = QtWidgets.QPushButton(_('Add'))
|
||||
self.addtool_btn.setToolTip(
|
||||
_("Add a new tool to the Tool Table\n"
|
||||
"with the diameter specified above.")
|
||||
"with the diameter specified above.")
|
||||
)
|
||||
|
||||
# self.copytool_btn = QtWidgets.QPushButton('Copy')
|
||||
@@ -146,12 +146,12 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
self.deltool_btn = QtWidgets.QPushButton(_('Delete'))
|
||||
self.deltool_btn.setToolTip(
|
||||
_("Delete a selection of tools in the Tool Table\n"
|
||||
"by first selecting a row(s) in the Tool Table.")
|
||||
"by first selecting a row(s) in the Tool Table.")
|
||||
)
|
||||
|
||||
grid2.addWidget(self.addtool_btn, 0, 0)
|
||||
# grid2.addWidget(self.copytool_btn, 0, 1)
|
||||
grid2.addWidget(self.deltool_btn, 0,2)
|
||||
grid2.addWidget(self.deltool_btn, 0, 2)
|
||||
|
||||
self.empty_label_0 = QtWidgets.QLabel('')
|
||||
self.tools_box.addWidget(self.empty_label_0)
|
||||
@@ -165,14 +165,14 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
nccoverlabel = QtWidgets.QLabel(_('Overlap Rate:'))
|
||||
nccoverlabel.setToolTip(
|
||||
_("How much (fraction) of the tool width to overlap each tool pass.\n"
|
||||
"Example:\n"
|
||||
"A value here of 0.25 means 25% from the tool diameter found above.\n\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be cleared are still \n"
|
||||
"not cleared.\n"
|
||||
"Lower values = faster processing, faster execution on PCB.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
"Example:\n"
|
||||
"A value here of 0.25 means 25% from the tool diameter found above.\n\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be cleared are still \n"
|
||||
"not cleared.\n"
|
||||
"Lower values = faster processing, faster execution on PCB.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
)
|
||||
grid3.addWidget(nccoverlabel, 1, 0)
|
||||
self.ncc_overlap_entry = FCEntry()
|
||||
@@ -190,9 +190,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
methodlabel = QtWidgets.QLabel(_('Method:'))
|
||||
methodlabel.setToolTip(
|
||||
_("Algorithm for non-copper clearing:<BR>"
|
||||
"<B>Standard</B>: Fixed step inwards.<BR>"
|
||||
"<B>Seed-based</B>: Outwards from seed.<BR>"
|
||||
"<B>Line-based</B>: Parallel lines.")
|
||||
"<B>Standard</B>: Fixed step inwards.<BR>"
|
||||
"<B>Seed-based</B>: Outwards from seed.<BR>"
|
||||
"<B>Line-based</B>: Parallel lines.")
|
||||
)
|
||||
grid3.addWidget(methodlabel, 3, 0)
|
||||
self.ncc_method_radio = RadioSet([
|
||||
@@ -206,7 +206,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
pathconnectlabel = QtWidgets.QLabel(_("Connect:"))
|
||||
pathconnectlabel.setToolTip(
|
||||
_("Draw lines between resulting\n"
|
||||
"segments to minimize tool lifts.")
|
||||
"segments to minimize tool lifts.")
|
||||
)
|
||||
grid3.addWidget(pathconnectlabel, 4, 0)
|
||||
self.ncc_connect_cb = FCCheckBox()
|
||||
@@ -215,7 +215,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
contourlabel = QtWidgets.QLabel(_("Contour:"))
|
||||
contourlabel.setToolTip(
|
||||
_("Cut around the perimeter of the polygon\n"
|
||||
"to trim rough edges.")
|
||||
"to trim rough edges.")
|
||||
)
|
||||
grid3.addWidget(contourlabel, 5, 0)
|
||||
self.ncc_contour_cb = FCCheckBox()
|
||||
@@ -224,12 +224,12 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
restlabel = QtWidgets.QLabel(_("Rest M.:"))
|
||||
restlabel.setToolTip(
|
||||
_("If checked, use 'rest machining'.\n"
|
||||
"Basically it will clear copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to clear areas of copper that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper to clear or there are no more tools.\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
"Basically it will clear copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to clear areas of copper that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper to clear or there are no more tools.\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
)
|
||||
grid3.addWidget(restlabel, 6, 0)
|
||||
self.ncc_rest_cb = FCCheckBox()
|
||||
@@ -238,7 +238,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
self.generate_ncc_button = QtWidgets.QPushButton(_('Generate Geometry'))
|
||||
self.generate_ncc_button.setToolTip(
|
||||
_("Create the Geometry Object\n"
|
||||
"for non-copper routing.")
|
||||
"for non-copper routing.")
|
||||
)
|
||||
self.tools_box.addWidget(self.generate_ncc_button)
|
||||
|
||||
@@ -344,8 +344,9 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
|
||||
try:
|
||||
dias = [float(eval(dia)) for dia in self.app.defaults["tools_ncctools"].split(",") if dia != '']
|
||||
except:
|
||||
log.error("At least one tool diameter needed. Verify in Edit -> Preferences -> TOOLS -> NCC Tools.")
|
||||
except Exception as e:
|
||||
log.error("At least one tool diameter needed. "
|
||||
"Verify in Edit -> Preferences -> TOOLS -> NCC Tools. %s" % str(e))
|
||||
return
|
||||
|
||||
self.tooluid = 0
|
||||
@@ -393,10 +394,10 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
for tooluid_key, tooluid_value in self.ncc_tools.items():
|
||||
if float('%.4f' % tooluid_value['tooldia']) == tool_sorted:
|
||||
tool_id += 1
|
||||
id = QtWidgets.QTableWidgetItem('%d' % int(tool_id))
|
||||
id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
|
||||
id_ = QtWidgets.QTableWidgetItem('%d' % int(tool_id))
|
||||
id_.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
|
||||
row_no = tool_id - 1
|
||||
self.tools_table.setItem(row_no, 0, id) # Tool name/id
|
||||
self.tools_table.setItem(row_no, 0, id_) # Tool name/id
|
||||
|
||||
# Make sure that the drill diameter when in MM is with no more than 2 decimals
|
||||
# There are no drill bits in MM with more than 3 decimals diameter
|
||||
@@ -478,7 +479,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
tool_dia = float(self.addtool_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
if tool_dia is None:
|
||||
self.build_ui()
|
||||
@@ -486,7 +487,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
return
|
||||
|
||||
if tool_dia == 0:
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Please enter a tool diameter with non-zero value, in Float format."))
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Please enter a tool diameter with non-zero value, "
|
||||
"in Float format."))
|
||||
return
|
||||
|
||||
# construct a list of all 'tooluid' in the self.tools
|
||||
@@ -568,7 +570,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
break
|
||||
restore_dia_item = self.tools_table.item(row, 1)
|
||||
restore_dia_item.setText(str(old_tool_dia))
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Edit cancelled. New diameter value is already in the Tool Table."))
|
||||
self.app.inform.emit(_("[WARNING_NOTCL] Edit cancelled. "
|
||||
"New diameter value is already in the Tool Table."))
|
||||
self.build_ui()
|
||||
|
||||
def on_tool_delete(self, rows_to_delete=None, all=None):
|
||||
@@ -625,13 +628,13 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
over = float(self.ncc_overlap_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
over = over if over else self.app.defaults["tools_nccoverlap"]
|
||||
|
||||
if over >= 1 or over < 0:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Overlap value must be between "
|
||||
"0 (inclusive) and 1 (exclusive), "))
|
||||
"0 (inclusive) and 1 (exclusive), "))
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -642,7 +645,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
margin = float(self.ncc_margin_entry.get_value().replace(',', '.'))
|
||||
except ValueError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
|
||||
"use a number."))
|
||||
"use a number."))
|
||||
return
|
||||
margin = margin if margin else self.app.defaults["tools_nccmargin"]
|
||||
|
||||
@@ -662,13 +665,14 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
# Get source object.
|
||||
try:
|
||||
self.ncc_obj = self.app.collection.get_by_name(self.obj_name)
|
||||
except:
|
||||
except Exception as e:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] Could not retrieve object: %s") % self.obj_name)
|
||||
return "Could not retrieve object: %s" % self.obj_name
|
||||
|
||||
# Prepare non-copper polygons
|
||||
try:
|
||||
bounding_box = self.ncc_obj.solid_geometry.envelope.buffer(distance=margin, join_style=base.JOIN_STYLE.mitre)
|
||||
bounding_box = self.ncc_obj.solid_geometry.envelope.buffer(distance=margin,
|
||||
join_style=base.JOIN_STYLE.mitre)
|
||||
except AttributeError:
|
||||
self.app.inform.emit(_("[ERROR_NOTCL] No Gerber file available."))
|
||||
return
|
||||
@@ -679,7 +683,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
empty = MultiPolygon([empty])
|
||||
|
||||
# clear non copper using standard algorithm
|
||||
if clearing_method == False:
|
||||
if clearing_method is False:
|
||||
self.clear_non_copper(
|
||||
empty=empty,
|
||||
over=over,
|
||||
@@ -736,7 +740,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
area = empty.buffer(-offset)
|
||||
try:
|
||||
area = area.difference(cleared)
|
||||
except:
|
||||
except Exception as e:
|
||||
continue
|
||||
|
||||
# Transform area to MultiPolygon
|
||||
@@ -758,8 +762,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
overlap=over, contour=contour, connect=connect)
|
||||
if cp:
|
||||
cleared_geo += list(cp.get_objects())
|
||||
except:
|
||||
log.warning("Polygon can not be cleared.")
|
||||
except Exception as e:
|
||||
log.warning("Polygon can not be cleared. %s" % str(e))
|
||||
app_obj.poly_not_cleared = True
|
||||
continue
|
||||
|
||||
@@ -850,7 +854,7 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
tool = sorted_tools.pop(0)
|
||||
self.app.inform.emit(_('[success] Non-Copper Rest Clearing with ToolDia = %s started.') % str(tool))
|
||||
|
||||
tool_used = tool - 1e-12
|
||||
tool_used = tool - 1e-12
|
||||
cleared_geo[:] = []
|
||||
|
||||
# Area to clear
|
||||
@@ -973,4 +977,3 @@ class NonCopperClear(FlatCAMTool, Gerber):
|
||||
|
||||
def reset_fields(self):
|
||||
self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user