- Gerber Editor: fixed units conversion for obj.apertures keys that require it
This commit is contained in:
@@ -1428,6 +1428,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
x_formatted, y_formatted = lz_format(coord[0], coord[1], factor)
|
x_formatted, y_formatted = lz_format(coord[0], coord[1], factor)
|
||||||
gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted,
|
gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted,
|
||||||
yform=y_formatted)
|
yform=y_formatted)
|
||||||
|
# gerber_code += "D02*\n"
|
||||||
|
|
||||||
if 'clear' in geo_elem:
|
if 'clear' in geo_elem:
|
||||||
gerber_code += '%LPC*%\n'
|
gerber_code += '%LPC*%\n'
|
||||||
@@ -1461,7 +1462,8 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
|
|||||||
else:
|
else:
|
||||||
x_formatted, y_formatted = lz_format(coord[0], coord[1], factor)
|
x_formatted, y_formatted = lz_format(coord[0], coord[1], factor)
|
||||||
gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted,
|
gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted,
|
||||||
yform=y_formatted)
|
yform=y_formatted)
|
||||||
|
# gerber_code += "D02*\n"
|
||||||
gerber_code += '%LPD*%\n'
|
gerber_code += '%LPD*%\n'
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ CAD program, and create G-Code for Isolation routing.
|
|||||||
- moved the self.apertures[aperture]['geometry'] processing for clear_geometry (geometry made with Gerber LPC command) in Gerber Editor
|
- moved the self.apertures[aperture]['geometry'] processing for clear_geometry (geometry made with Gerber LPC command) in Gerber Editor
|
||||||
- Gerber Editor: fixed the Poligonize Tool to work with new geometric structure and took care of a special case
|
- Gerber Editor: fixed the Poligonize Tool to work with new geometric structure and took care of a special case
|
||||||
- Gerber Export is fixed to work with the new Gerber object data structure and it now works also for Gerber objects edited in Gerber Editor
|
- Gerber Export is fixed to work with the new Gerber object data structure and it now works also for Gerber objects edited in Gerber Editor
|
||||||
|
- Gerber Editor: fixed units conversion for obj.apertures keys that require it
|
||||||
|
|
||||||
12.05.2019
|
12.05.2019
|
||||||
|
|
||||||
|
|||||||
22
camlib.py
22
camlib.py
@@ -1936,6 +1936,9 @@ class Gerber (Geometry):
|
|||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
# store the file units here:
|
||||||
|
self.gerber_units = 'IN'
|
||||||
|
|
||||||
# aperture storage
|
# aperture storage
|
||||||
self.apertures = {}
|
self.apertures = {}
|
||||||
|
|
||||||
@@ -2173,7 +2176,7 @@ class Gerber (Geometry):
|
|||||||
path = []
|
path = []
|
||||||
|
|
||||||
# store the file units here:
|
# store the file units here:
|
||||||
gerber_units = 'IN'
|
self.gerber_units = 'IN'
|
||||||
|
|
||||||
# this is for temporary storage of solid geometry until it is added to poly_buffer
|
# this is for temporary storage of solid geometry until it is added to poly_buffer
|
||||||
geo_s = None
|
geo_s = None
|
||||||
@@ -2323,8 +2326,8 @@ class Gerber (Geometry):
|
|||||||
# Example: %MOIN*%
|
# Example: %MOIN*%
|
||||||
match = self.mode_re.search(gline)
|
match = self.mode_re.search(gline)
|
||||||
if match:
|
if match:
|
||||||
gerber_units = match.group(1)
|
self.gerber_units = match.group(1)
|
||||||
log.debug("Gerber units found = %s" % gerber_units)
|
log.debug("Gerber units found = %s" % self.gerber_units)
|
||||||
# Changed for issue #80
|
# Changed for issue #80
|
||||||
self.convert_units(match.group(1))
|
self.convert_units(match.group(1))
|
||||||
continue
|
continue
|
||||||
@@ -2344,8 +2347,8 @@ class Gerber (Geometry):
|
|||||||
"D-no zero suppression)" % self.gerber_zeros)
|
"D-no zero suppression)" % self.gerber_zeros)
|
||||||
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
|
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
|
||||||
|
|
||||||
gerber_units = match.group(1)
|
self.gerber_units = match.group(1)
|
||||||
log.debug("Gerber units found = %s" % gerber_units)
|
log.debug("Gerber units found = %s" % self.gerber_units)
|
||||||
# Changed for issue #80
|
# Changed for issue #80
|
||||||
self.convert_units(match.group(5))
|
self.convert_units(match.group(5))
|
||||||
continue
|
continue
|
||||||
@@ -2370,8 +2373,8 @@ class Gerber (Geometry):
|
|||||||
"D-no zerosuppressionn)" % self.gerber_zeros)
|
"D-no zerosuppressionn)" % self.gerber_zeros)
|
||||||
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
|
log.debug("Gerber format found. Coordinates type = %s (Absolute or Relative)" % absolute)
|
||||||
|
|
||||||
gerber_units = match.group(1)
|
self.gerber_units = match.group(1)
|
||||||
log.debug("Gerber units found = %s" % gerber_units)
|
log.debug("Gerber units found = %s" % self.gerber_units)
|
||||||
# Changed for issue #80
|
# Changed for issue #80
|
||||||
self.convert_units(match.group(5))
|
self.convert_units(match.group(5))
|
||||||
continue
|
continue
|
||||||
@@ -3123,7 +3126,7 @@ class Gerber (Geometry):
|
|||||||
|
|
||||||
# TODO: make sure to keep track of units changes because right now it seems to happen in a weird way
|
# TODO: make sure to keep track of units changes because right now it seems to happen in a weird way
|
||||||
# find out the conversion factor used to convert inside the self.apertures keys: size, width, height
|
# find out the conversion factor used to convert inside the self.apertures keys: size, width, height
|
||||||
file_units = gerber_units if gerber_units else 'IN'
|
file_units = self.gerber_units if self.gerber_units else 'IN'
|
||||||
app_units = self.app.defaults['units']
|
app_units = self.app.defaults['units']
|
||||||
|
|
||||||
conversion_factor = 25.4 if file_units == 'IN' else (1/25.4) if file_units != app_units else 1
|
conversion_factor = 25.4 if file_units == 'IN' else (1/25.4) if file_units != app_units else 1
|
||||||
@@ -3136,9 +3139,6 @@ class Gerber (Geometry):
|
|||||||
# this treats the case when we are storing geometry as solids
|
# this treats the case when we are storing geometry as solids
|
||||||
log.warning("Joining %d polygons." % len(poly_buffer))
|
log.warning("Joining %d polygons." % len(poly_buffer))
|
||||||
|
|
||||||
for td in self.apertures:
|
|
||||||
print(td, self.apertures[td])
|
|
||||||
|
|
||||||
if len(poly_buffer) == 0:
|
if len(poly_buffer) == 0:
|
||||||
log.error("Object is not Gerber file or empty. Aborting Object creation.")
|
log.error("Object is not Gerber file or empty. Aborting Object creation.")
|
||||||
return 'fail'
|
return 'fail'
|
||||||
|
|||||||
@@ -2603,6 +2603,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||||
self.editor_active = False
|
self.editor_active = False
|
||||||
|
|
||||||
|
self.conversion_factor = 1
|
||||||
|
|
||||||
self.set_ui()
|
self.set_ui()
|
||||||
|
|
||||||
def pool_recreated(self, pool):
|
def pool_recreated(self, pool):
|
||||||
@@ -2712,8 +2714,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if self.storage_dict[ap_code]['size'] is not None:
|
if self.storage_dict[ap_code]['size'] is not None:
|
||||||
ap_size_item = QtWidgets.QTableWidgetItem('%.4f' %
|
ap_size_item = QtWidgets.QTableWidgetItem('%.4f' % float(
|
||||||
float(self.storage_dict[ap_code]['size']))
|
self.storage_dict[ap_code]['size']))
|
||||||
else:
|
else:
|
||||||
ap_size_item = QtWidgets.QTableWidgetItem('')
|
ap_size_item = QtWidgets.QTableWidgetItem('')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -3266,6 +3268,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
self.gerber_obj = orig_grb_obj
|
self.gerber_obj = orig_grb_obj
|
||||||
self.gerber_obj_options = orig_grb_obj.options
|
self.gerber_obj_options = orig_grb_obj.options
|
||||||
|
|
||||||
|
file_units = self.gerber_obj.gerber_units if self.gerber_obj.gerber_units else 'IN'
|
||||||
|
app_units = self.app.defaults['units']
|
||||||
|
|
||||||
|
self.conversion_factor = 25.4 if file_units == 'IN' else (1 / 25.4) if file_units != app_units else 1
|
||||||
|
|
||||||
# Hide original geometry
|
# Hide original geometry
|
||||||
orig_grb_obj.visible = False
|
orig_grb_obj.visible = False
|
||||||
|
|
||||||
@@ -3280,6 +3287,23 @@ class FlatCAMGrbEditor(QtCore.QObject):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.debug("FlatCAMGrbEditor.edit_fcgerber() --> %s" % str(e))
|
log.debug("FlatCAMGrbEditor.edit_fcgerber() --> %s" % str(e))
|
||||||
|
|
||||||
|
# apply the conversion factor on the obj.apertures
|
||||||
|
conv_apertures = deepcopy(self.gerber_obj.apertures)
|
||||||
|
for apid in self.gerber_obj.apertures:
|
||||||
|
for key in self.gerber_obj.apertures[apid]:
|
||||||
|
if key == 'width':
|
||||||
|
conv_apertures[apid]['width'] = self.gerber_obj.apertures[apid]['width'] * self.conversion_factor
|
||||||
|
elif key == 'height':
|
||||||
|
conv_apertures[apid]['height'] = self.gerber_obj.apertures[apid]['height'] * self.conversion_factor
|
||||||
|
elif key == 'diam':
|
||||||
|
conv_apertures[apid]['diam'] = self.gerber_obj.apertures[apid]['diam'] * self.conversion_factor
|
||||||
|
elif key == 'size':
|
||||||
|
conv_apertures[apid]['size'] = self.gerber_obj.apertures[apid]['size'] * self.conversion_factor
|
||||||
|
else:
|
||||||
|
conv_apertures[apid][key] = self.gerber_obj.apertures[apid][key]
|
||||||
|
|
||||||
|
self.gerber_obj.apertures = conv_apertures
|
||||||
|
|
||||||
# ###############################################################
|
# ###############################################################
|
||||||
# APPLY CLEAR_GEOMETRY on the SOLID_GEOMETRY
|
# APPLY CLEAR_GEOMETRY on the SOLID_GEOMETRY
|
||||||
# ###############################################################
|
# ###############################################################
|
||||||
|
|||||||
Reference in New Issue
Block a user