Basic rendering of excellon works, but still has issues

This commit is contained in:
Garret Fick 2016-03-24 00:10:34 +08:00
parent a6c1862450
commit d12f6385a4
2 changed files with 29 additions and 9 deletions

View file

@ -116,6 +116,21 @@ class ExcellonTool(ExcellonStatement):
PLATED_YES = 'plated'
PLATED_NO = 'nonplated'
PLATED_OPTIONAL = 'optional'
@classmethod
def from_tool(cls, tool):
args = {}
args['depth_offset'] = tool.depth_offset
args['diameter'] = tool.diameter
args['feed_rate'] = tool.feed_rate
args['max_hit_count'] = tool.max_hit_count
args['number'] = tool.number
args['plated'] = tool.plated
args['retract_rate'] = tool.retract_rate
args['rpm'] = tool.rpm
return cls(None, **args)
@classmethod
def from_excellon(cls, line, settings, id=None, plated=None):
@ -196,8 +211,10 @@ class ExcellonTool(ExcellonStatement):
self.hit_count = 0
def to_excellon(self, settings=None):
fmt = self.settings.format
zs = self.settings.zero_suppression
if self.settings and not settings:
settings = self.settings
fmt = settings.format
zs = settings.zero_suppression
stmt = 'T%02d' % self.number
if self.retract_rate is not None:
stmt += 'B%s' % write_gerber_value(self.retract_rate, fmt, zs)

View file

@ -10,11 +10,12 @@ class ExcellonContext(GerberContext):
self.header = []
self.tool_def = []
self.body = []
self.start = [HeaderBeginStmt()]
self.end = [EndOfProgramStmt()]
self.handled_tools = set()
self.cur_tool = None
self.pos = (None, None)
self._pos = (None, None)
self.settings = settings
@ -25,7 +26,7 @@ class ExcellonContext(GerberContext):
@property
def statements(self):
return self.comments + self.header + self.body + self.end
return self.start + self.comments + self.header + self.body + self.end
def set_bounds(self, bounds):
pass
@ -61,15 +62,17 @@ class ExcellonContext(GerberContext):
def _render_drill(self, drill, color):
if not drill in self.handled_tools:
self.tool_def.append(drill.tool)
tool = drill.hit.tool
if not tool in self.handled_tools:
self.handled_tools.add(tool)
self.header.append(ExcellonTool.from_tool(tool))
if drill.tool != self.cur_tool:
self.body.append(ToolSelectionStmt(drill.tool.number))
if tool != self.cur_tool:
self.body.append(ToolSelectionStmt(tool.number))
point = self._simplify_point(drill.position)
self._pos = drill.position
self.body.append(CoordinateStmt.from_point())
self.body.append(CoordinateStmt.from_point(point))
def _render_inverted_layer(self):
pass