summaryrefslogtreecommitdiff
path: root/gerbonara/cad/kicad/footprints.py
diff options
context:
space:
mode:
Diffstat (limited to 'gerbonara/cad/kicad/footprints.py')
-rw-r--r--gerbonara/cad/kicad/footprints.py29
1 files changed, 15 insertions, 14 deletions
diff --git a/gerbonara/cad/kicad/footprints.py b/gerbonara/cad/kicad/footprints.py
index b24e004..9debaa9 100644
--- a/gerbonara/cad/kicad/footprints.py
+++ b/gerbonara/cad/kicad/footprints.py
@@ -220,7 +220,7 @@ class Arc:
cy = ((x1 * x1 + y1 * y1) * (mx - x2) + (x2 * x2 + y2 * y2) * (x1 - mx) + (mx * mx + my * my) * (x2 - x1)) / d
# KiCad only has clockwise arcs.
- arc = go.Arc(x1, -y1, x2, -y2, cx-x1, -(cy-y1), clockwise=False, aperture=aperture, unit=MM)
+ arc = go.Arc(x1, -y1, x2, -y2, cx-x1, -(cy-y1), clockwise=True, aperture=aperture, unit=MM)
if dasher.solid:
yield arc
@@ -249,13 +249,14 @@ class Polygon:
dasher = Dasher(self)
start = self.pts.xy[0]
- dasher.move(start.x, -start.y)
+ dasher.move(start.x, start.y)
for point in self.pts.xy[1:]:
dasher.line(point.x, point.y)
- aperture = ap.CircleAperture(dasher.width, unit=MM)
- for x1, y1, x2, y2 in dasher:
- yield go.Line(x1, -y1, x2, -y2, aperture=aperture, unit=MM)
+ if dasher.width > 0:
+ aperture = ap.CircleAperture(dasher.width, unit=MM)
+ for x1, y1, x2, y2 in dasher:
+ yield go.Line(x1, -y1, x2, -y2, aperture=aperture, unit=MM)
if self.fill == Atom.solid:
yield go.Region([(pt.x, -pt.y) for pt in self.pts.xy], unit=MM)
@@ -466,10 +467,10 @@ class Pad:
0, 0, # no hole
rotation), unit=MM)
else:
- return ap.RectangleAperture(self.size.x+2*margin, self.size.y+2*margin, unit=MM).rotated(rotation)
+ return ap.RectangleAperture(self.size.x+2*margin, self.size.y+2*margin, unit=MM).rotated(-rotation)
elif self.shape == Atom.oval:
- return ap.ObroundAperture(self.size.x+2*margin, self.size.y+2*margin, unit=MM).rotated(rotation)
+ return ap.ObroundAperture(self.size.x+2*margin, self.size.y+2*margin, unit=MM).rotated(-rotation)
elif self.shape == Atom.trapezoid:
# KiCad's trapezoid aperture "rect_delta" param is just weird to the point that I think it's probably
@@ -495,14 +496,14 @@ class Pad:
(x+dy+2*margin*math.cos(alpha), y+2*margin,
2*dy,
0, 0, # no hole
- rotation), unit=MM)
+ -rotation + math.pi), unit=MM)
else:
return ap.ApertureMacroInstance(GenericMacros.rounded_isosceles_trapezoid,
(x+dy, y,
2*dy, margin,
0, 0, # no hole
- rotation), unit=MM)
+ -rotation + math.pi), unit=MM)
elif self.shape == Atom.roundrect:
x, y = self.size.x, self.size.y
@@ -514,7 +515,7 @@ class Pad:
0, 0, # no hole
rotation), unit=MM)
else:
- return ap.RectangleAperture(x+margin, y+margin, unit=MM).rotated(rotation)
+ return ap.RectangleAperture(x+margin, y+margin, unit=MM).rotated(-rotation)
elif self.shape == Atom.custom:
primitives = []
@@ -556,7 +557,7 @@ class Pad:
elif self.options.anchor == Atom.circle and self.size.x > 0:
primitives.append(amp.Circle(MM, 1, self.size.x+2*margin, 0, 0, 0))
- macro = ApertureMacro(primitives=tuple(primitives)).rotated(rotation)
+ macro = ApertureMacro(primitives=tuple(primitives)).rotated(-rotation)
return ap.ApertureMacroInstance(macro, unit=MM)
def render_drill(self):
@@ -881,7 +882,7 @@ class Footprint:
for text in self.texts:
text.at.rotation = (text.at.rotation + delta) % 360
- def objects(self, text=False, pads=True, groups=True):
+ def objects(self, text=False, pads=True, groups=True, zones=True):
return chain(
(self.texts if text else []),
(self.text_boxes if text else []),
@@ -893,7 +894,7 @@ class Footprint:
self.curves,
(self.dimensions if text else []),
(self.pads if pads else []),
- self.zones,
+ (self.zones if zones else []),
self.groups if groups else [])
def render(self, layer_stack, layer_map, x=0, y=0, rotation=0, text=False, flip=False, variables={}, cache=None):
@@ -901,7 +902,7 @@ class Footprint:
y += self.at.y
rotation += math.radians(self.at.rotation)
- for obj in self.objects(pads=False, text=text):
+ for obj in self.objects(pads=False, text=text, zones=False):
if not (layer := layer_map.get(obj.layer)):
continue