Implemented issue #137

This commit is contained in:
phdussud 2015-05-26 16:48:09 -07:00
parent 51d6216361
commit bc524684ab
4 changed files with 55 additions and 15 deletions

View File

@ -181,6 +181,7 @@ class App(QtCore.QObject):
"gerber_isotooldia": self.defaults_form.gerber_group.iso_tool_dia_entry,
"gerber_isopasses": self.defaults_form.gerber_group.iso_width_entry,
"gerber_isooverlap": self.defaults_form.gerber_group.iso_overlap_entry,
"gerber_combine_passes": self.defaults_form.gerber_group.combine_passes_cb,
"gerber_cutouttooldia": self.defaults_form.gerber_group.cutout_tooldia_entry,
"gerber_cutoutmargin": self.defaults_form.gerber_group.cutout_margin_entry,
"gerber_cutoutgapsize": self.defaults_form.gerber_group.cutout_gap_entry,
@ -296,6 +297,7 @@ class App(QtCore.QObject):
"gerber_isotooldia": self.options_form.gerber_group.iso_tool_dia_entry,
"gerber_isopasses": self.options_form.gerber_group.iso_width_entry,
"gerber_isooverlap": self.options_form.gerber_group.iso_overlap_entry,
"gerber_combine_passes": self.options_form.gerber_group.combine_passes_cb,
"gerber_cutouttooldia": self.options_form.gerber_group.cutout_tooldia_entry,
"gerber_cutoutmargin": self.options_form.gerber_group.cutout_margin_entry,
"gerber_cutoutgapsize": self.options_form.gerber_group.cutout_gap_entry,
@ -332,6 +334,7 @@ class App(QtCore.QObject):
"gerber_isotooldia": 0.016,
"gerber_isopasses": 1,
"gerber_isooverlap": 0.15,
"gerber_combine_passes": True,
"gerber_cutouttooldia": 0.07,
"gerber_cutoutmargin": 0.1,
"gerber_cutoutgapsize": 0.15,
@ -2098,7 +2101,8 @@ class App(QtCore.QObject):
types = {'dia': float,
'passes': int,
'overlap': float,
'outname': str}
'outname': str,
'combine': int}
for key in kwa:
if key not in types:
@ -2394,10 +2398,11 @@ class App(QtCore.QObject):
'isolate': {
'fcn': isolate,
'help': "Creates isolation routing geometry for the given Gerber.\n" +
"> isolate <name> [-dia <d>] [-passes <p>] [-overlap <o>]\n" +
"> isolate <name> [-dia <d>] [-passes <p>] [-overlap <o>] [-combine 0|1]\n" +
" name: Name of the object\n"
" dia: Tool diameter\n passes: # of tool width\n" +
" overlap: Fraction of tool diameter to overlap passes"
" overlap: Fraction of tool diameter to overlap passes" +
" combine: combine all passes into one geometry"
},
'cutout': {
'fcn': cutout,

View File

@ -405,6 +405,12 @@ class GerberOptionsGroupUI(OptionsGroupUI):
grid1.addWidget(overlabel, 2, 0)
self.iso_overlap_entry = FloatEntry()
grid1.addWidget(self.iso_overlap_entry, 2, 1)
self.combine_passes_cb = FCCheckBox(label='Combine Passes')
self.combine_passes_cb.setToolTip(
"Combine all passes into one object"
)
grid1.addWidget(self.combine_passes_cb, 3, 0)
## Board cuttout
self.board_cutout_label = QtGui.QLabel("<b>Board cutout:</b>")

View File

@ -262,6 +262,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
"isotooldia": 0.016,
"isopasses": 1,
"isooverlap": 0.15,
"combine_passes": True,
"cutouttooldia": 0.07,
"cutoutmargin": 0.2,
"cutoutgapsize": 0.15,
@ -298,6 +299,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
"isotooldia": self.ui.iso_tool_dia_entry,
"isopasses": self.ui.iso_width_entry,
"isooverlap": self.ui.iso_overlap_entry,
"combine_passes":self.ui.combine_passes_cb,
"cutouttooldia": self.ui.cutout_tooldia_entry,
"cutoutmargin": self.ui.cutout_margin_entry,
"cutoutgapsize": self.ui.cutout_gap_entry,
@ -415,7 +417,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
# TODO: Do something if this is None. Offer changing name?
self.app.new_object("geometry", follow_name, follow_init)
def isolate(self, dia=None, passes=None, overlap=None, outname=None):
def isolate(self, dia=None, passes=None, overlap=None, outname=None, combine=None):
"""
Creates an isolation routing geometry object in the project.
@ -425,36 +427,55 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
:param outname: Base name of the output object
:return: None
"""
if dia is None:
dia = self.options["isotooldia"]
if passes is None:
passes = int(self.options["isopasses"])
if overlap is None:
overlap = self.options["isooverlap"] * dia
overlap = self.options["isooverlap"]
if combine is None:
combine = self.options["combine_passes"]
else:
combine = bool(combine)
base_name = self.options["name"] + "_iso"
base_name = outname or base_name
for i in range(passes):
offset = (2 * i + 1) / 2.0 * dia - i * overlap
if passes > 1:
iso_name = base_name + str(i + 1)
else:
iso_name = base_name
if (combine):
iso_name = base_name
# TODO: This is ugly. Create way to pass data into init function.
def iso_init(geo_obj, app_obj):
# Propagate options
geo_obj.options["cnctooldia"] = self.options["isotooldia"]
geo_obj.solid_geometry = self.isolation_geometry(offset)
geo_obj.solid_geometry = []
for i in range(passes):
offset = (2 * i + 1) / 2.0 * dia - i * overlap * dia
geo_obj.solid_geometry.append(self.isolation_geometry(offset))
app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"])
# TODO: Do something if this is None. Offer changing name?
self.app.new_object("geometry", iso_name, iso_init)
else:
for i in range(passes):
offset = (2 * i + 1) / 2.0 * dia - i * overlap * dia
if passes > 1:
iso_name = base_name + str(i + 1)
else:
iso_name = base_name
# TODO: This is ugly. Create way to pass data into init function.
def iso_init(geo_obj, app_obj):
# Propagate options
geo_obj.options["cnctooldia"] = self.options["isotooldia"]
geo_obj.solid_geometry = self.isolation_geometry(offset)
app_obj.info("Isolation geometry created: %s" % geo_obj.options["name"])
# TODO: Do something if this is None. Offer changing name?
self.app.new_object("geometry", iso_name, iso_init)
def on_plot_cb_click(self, *args):
if self.muted_ui:
return

View File

@ -560,6 +560,14 @@ class GerberObjectUI(ObjectUI):
self.iso_overlap_entry = FloatEntry()
grid1.addWidget(self.iso_overlap_entry, 2, 1)
# combine all passes CB
self.combine_passes_cb = FCCheckBox(label='Combine Passes')
self.combine_passes_cb.setToolTip(
"Combine all passes into one object"
)
grid1.addWidget(self.combine_passes_cb, 3, 0)
self.generate_iso_button = QtGui.QPushButton('Generate Geometry')
self.generate_iso_button.setToolTip(
"Create the Geometry Object\n"