diff options
author | jaseg <git@jaseg.de> | 2023-04-20 00:46:30 +0200 |
---|---|---|
committer | jaseg <git@jaseg.de> | 2023-04-20 00:46:30 +0200 |
commit | 5ce88e4d1b06dcc846c94ec614fb00f64e85c125 (patch) | |
tree | 30cacf1ffb500c1deebc6b30e8c98d7ec474559a /gerbonara/cad/kicad | |
parent | 240e5569aa7521aed321b2607f78d198c36ed8b8 (diff) | |
download | gerbonara-5ce88e4d1b06dcc846c94ec614fb00f64e85c125.tar.gz gerbonara-5ce88e4d1b06dcc846c94ec614fb00f64e85c125.tar.bz2 gerbonara-5ce88e4d1b06dcc846c94ec614fb00f64e85c125.zip |
Fix a bunch of bugs on the way to electroniceel's protoboard layout
Diffstat (limited to 'gerbonara/cad/kicad')
-rw-r--r-- | gerbonara/cad/kicad/footprints.py | 10 | ||||
-rw-r--r-- | gerbonara/cad/kicad/graphical_primitives.py | 14 |
2 files changed, 13 insertions, 11 deletions
diff --git a/gerbonara/cad/kicad/footprints.py b/gerbonara/cad/kicad/footprints.py index 4b95d4e..8377961 100644 --- a/gerbonara/cad/kicad/footprints.py +++ b/gerbonara/cad/kicad/footprints.py @@ -22,7 +22,7 @@ from ... import graphic_primitives as gp from ... import graphic_objects as go from ... import apertures as ap from ...utils import MM -from ...aperture_macros.parse import GenericMacros +from ...aperture_macros.parse import GenericMacros, ApertureMacro @sexp_type('property') @@ -376,7 +376,7 @@ class Pad: dx, dy = self.rect_delta.x, self.rect_delta.y # Note: KiCad already uses MM units, so no conversion needed here. - return ApertureMacroInstance(GenericMacros.isosceles_trapezoid, + return ap.ApertureMacroInstance(GenericMacros.isosceles_trapezoid, [x+dx, y+dy, 2*max(dx, dy), 0, 0, # no hole @@ -385,7 +385,7 @@ class Pad: elif self.shape == Atom.roundrect: x, y = self.size.x, self.size.y r = min(x, y) * self.roundrect_rratio - return ApertureMacroInstance(GenericMacros.rounded_rect, + return ap.ApertureMacroInstance(GenericMacros.rounded_rect, [x, y, r, 0, 0, # no hole @@ -398,7 +398,7 @@ class Pad: for gn_obj in obj.render(): primitives += gn_obj._aperture_macro_primitives() # todo: precision params macro = ApertureMacro(primitives=primitives) - return ApertureMacroInstance(macro) + return ap.ApertureMacroInstance(macro) def render_drill(self): if not self.drill: @@ -548,6 +548,8 @@ class Footprint: for fe in obj.render(): fe.rotate(rotation) fe.offset(x, y, MM) + if isinstance(fe, go.Flash) and fe.aperture: + fe.aperture = fe.aperture.rotated(rotation) layer_stack[layer_map[layer]].objects.append(fe) for obj in self.pads: diff --git a/gerbonara/cad/kicad/graphical_primitives.py b/gerbonara/cad/kicad/graphical_primitives.py index ed40c96..0760342 100644 --- a/gerbonara/cad/kicad/graphical_primitives.py +++ b/gerbonara/cad/kicad/graphical_primitives.py @@ -8,7 +8,7 @@ from .primitives import * from ... import graphic_objects as go from ... import apertures as ap from ...newstroke import Newstroke -from ...utils import rotate_point +from ...utils import rotate_point, MM @sexp_type('layer') class TextLayer: @@ -84,7 +84,7 @@ class TextBox: if self.stroke.type not in (None, Atom.default, Atom.solid): raise ValueError('Dashed strokes are not supported on vector text') - yield from reg.outline_objects(aperture=CircleAperture(self.stroke.width, unit=MM)) + yield from reg.outline_objects(aperture=ap.CircleAperture(self.stroke.width, unit=MM)) yield reg @@ -137,7 +137,7 @@ class Rectangle: yield rect if self.width: - yield from rect.outline_objects(aperture=CircleAperture(self.width, unit=MM)) + yield from rect.outline_objects(aperture=ap.CircleAperture(self.width, unit=MM)) @sexp_type('gr_circle') @@ -177,7 +177,7 @@ class Arc: arc = go.Arc(x1, y1, x2, y2, cx-x1, cy-y1, unit=MM) if self.width: - arc.aperture = CircleAperture(self.width, unit=MM) + arc.aperture = ap.CircleAperture(self.width, unit=MM) yield arc if self.fill: @@ -189,14 +189,14 @@ class Polygon: pts: PointList = field(default_factory=PointList) layer: Named(str) = None width: Named(float) = None - fill: FillMode= False + fill: FillMode = True tstamp: Timestamp = None def render(self): reg = go.Region([(pt.x, pt.y) for pt in self.pts.xy], unit=MM) - if width: - yield from reg.outline_objects(aperture=CircleAperture(self.width, unit=MM)) + if self.width and self.width >= 0.005: + yield from reg.outline_objects(aperture=ap.CircleAperture(self.width, unit=MM)) if self.fill: yield reg |