From eb20595e00bdc59daa31392eaca559ab36f59a5c Mon Sep 17 00:00:00 2001 From: jaseg Date: Fri, 21 Jul 2023 20:55:35 +0200 Subject: WIP --- gerbonara/cad/kicad/base_types.py | 25 +++++++++++++++++++------ gerbonara/cad/kicad/schematic.py | 19 ++++++++++--------- gerbonara/cad/kicad/symbols.py | 16 ++++++++-------- gerbonara/newstroke.py | 2 -- 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/gerbonara/cad/kicad/base_types.py b/gerbonara/cad/kicad/base_types.py index 6c0526f..518200d 100644 --- a/gerbonara/cad/kicad/base_types.py +++ b/gerbonara/cad/kicad/base_types.py @@ -344,18 +344,31 @@ class TextMixin: font = Newstroke.load() text = string.Template(self.text).safe_substitute(variables) aperture = ap.CircleAperture(self.line_width or 0.2, unit=MM) - if text == 'H3LIS100DL': - print(text, self.rotation, self.at, self.effects) + rot = self.rotation + h_align = self.h_align + mx, my = self.mirrored + if rot in (90, 270): + rot = (rot+180)%360 + elif rot == 180: + rot = 0 + h_align = {'left': 'right', 'right': 'left'}.get(h_align, h_align) + + if my and rot in (0, 180): + h_align = {'left': 'right', 'right': 'left'}.get(h_align, h_align) + rot = (rot+180)%360 + if mx and rot in (90, 270): + h_align = {'left': 'right', 'right': 'left'}.get(h_align, h_align) + rot = (rot+180)%360 + yield font.render_svg(text, size=self.size or 1.27, - h_align=self.h_align, + h_align=h_align, v_align=self.effects.justify.v or self.default_v_align, stroke=color, stroke_width=f'{self.line_width:.3f}', scale=(1,1), - rotation=self.rotation, - mirror=self.mirrored, - transform=f'translate({self.at.x:.3f} {self.at.y:.3f})', + rotation=0, + transform=f'translate({self.at.x:.3f} {self.at.y:.3f}) rotate({rot})', ) @property diff --git a/gerbonara/cad/kicad/schematic.py b/gerbonara/cad/kicad/schematic.py index 6ef306e..c09ed71 100644 --- a/gerbonara/cad/kicad/schematic.py +++ b/gerbonara/cad/kicad/schematic.py @@ -79,8 +79,9 @@ class NoConnect: def to_svg(self, colorscheme=Colorscheme.KiCad): r = 0.635 - yield Tag('path', d=f'M {-r:.3f} {-r:.3f} L {r:.3f} {r:.3f} M {-r:.3f} {r:.3f} L {r:.3f} {-r:.3f}', - fill='none', stroke_width='0.1', stroke=colorscheme.no_connect) + x, y = self.at.x, self.at.y + yield Tag('path', d=f'M {x-r:.3f} {y-r:.3f} L {x+r:.3f} {y+r:.3f} M {x-r:.3f} {y+r:.3f} L {x+r:.3f} {y-r:.3f}', + fill='none', stroke_width='0.254', stroke=colorscheme.no_connect) @sexp_type('bus_entry') @@ -312,11 +313,14 @@ class DrawnProperty(TextMixin): @property def h_align(self): - return self.effects.justify.h_str + align = self.effects.justify.h_str + if self.rotation in (90, 270): + align = {'left': 'right', 'right': 'left'}.get(align, align) + return align @property def rotation(self): - rot = -self.at.rotation + rot = self.at.rotation rot += getattr(self.parent.at, 'rotation', 0) return rot%360 @@ -397,9 +401,6 @@ class SymbolInstance: units = [unit for unit in sym.units if unit.unit_global or unit.unit_index == self.unit] - if self.reference in ('U18',): - print(self.reference, self.unit, self.at, self.mirror, units) - at_xform = xform = f'translate({self.at.x:.3f} {self.at.y:.3f})' if self.mirror.y: xform += f'scale(-1 -1)' @@ -416,8 +417,8 @@ class SymbolInstance: children = [foo for unit in units for pin in unit.pins for foo in pin.to_svg(colorscheme, self.mirror, rot)] yield Tag('g', children=children, transform=at_xform, fill=colorscheme.fill, stroke=colorscheme.lines) - #for prop in self.properties: - # yield from prop.to_svg() + for prop in self.properties: + yield from prop.to_svg() @sexp_type('path') diff --git a/gerbonara/cad/kicad/symbols.py b/gerbonara/cad/kicad/symbols.py index 17ca719..df65710 100644 --- a/gerbonara/cad/kicad/symbols.py +++ b/gerbonara/cad/kicad/symbols.py @@ -151,13 +151,13 @@ class Pin: ax, ay = self.length+0.2, 0 ax, ay = rotate_point(ax, ay, math.radians(-self.at.rotation)) - lx, ly = self.at.x, -self.at.y - lx, ly = rotate_point(lx, ly, math.radians(p_rotation)) - if p_mirror.y: - lx, ly = -lx, ly - elif p_mirror.x: - lx, ly = lx, -ly - yield Tag('circle', cx=lx, cy=ly, r='0.5', stroke='blue', stroke_width='0.1', fill='none', z_index='100') + #lx, ly = self.at.x, -self.at.y + #lx, ly = rotate_point(lx, ly, math.radians(p_rotation)) + #if p_mirror.y: + # lx, ly = -lx, ly + #elif p_mirror.x: + # lx, ly = lx, -ly + #yield Tag('circle', cx=lx, cy=ly, r='0.5', stroke='blue', stroke_width='0.1', fill='none', z_index='100') lx, ly = self.at.x + ax, -self.at.y - ay lx, ly = rotate_point(lx, ly, math.radians(p_rotation)) @@ -165,7 +165,7 @@ class Pin: lx, ly = -lx, ly elif p_mirror.x: lx, ly = lx, -ly - yield Tag('circle', cx=lx, cy=ly, r='0.5', stroke='red', stroke_width='0.1', fill='none', z_index='100') + #yield Tag('circle', cx=lx, cy=ly, r='0.5', stroke='red', stroke_width='0.1', fill='none', z_index='100') h_align = 'left' if p_mirror.y: diff --git a/gerbonara/newstroke.py b/gerbonara/newstroke.py index d45598d..ac203ec 100644 --- a/gerbonara/newstroke.py +++ b/gerbonara/newstroke.py @@ -37,8 +37,6 @@ class Newstroke: sx, sy = scale mx, my = mirror x = 0 - if text in ('VDDA', 'PA9', 'VSS', 'FB3'): - print(text, x0, y0, rotation, h_align, v_align, scale) if rotation >= 180: rotation -= 180 -- cgit