- Fix ViaStitching to follow change in python API

- Adding the circular zone tools
This commit is contained in:
Jean-Samuel Reynaud
2017-06-26 11:50:45 +02:00
parent 31626d6dcd
commit 35f89092d2
11 changed files with 993 additions and 4 deletions

View File

@ -0,0 +1,55 @@
from math import *
import pcbnew
from CircularZoneDlg import CircularZoneDlg
import wx
class CircularZone(pcbnew.ActionPlugin):
def defaults(self):
self.name = "Create a circular zone"
self.category = "Undefined"
self.description = ""
def build(self, center_x, center_y, radius, keepout):
sp = pcbnew.SHAPE_POLY_SET()
sp.NewOutline()
cnt = 100
for i in range(cnt):
x = int(center_x + radius * cos(i * 2 * pi / cnt))
y = int(center_y + radius * sin(i * 2 * pi / cnt))
sp.Append(x, y)
# sp.OutlineCount()
sp.thisown = 0
zone = pcbnew.ZONE_CONTAINER(self.pcb)
zone.SetOutline(sp)
zone.SetLayer(pcbnew.F_Cu)
zone.SetIsKeepout(keepout)
zone.thisown = 0
self.pcb.Add(zone)
def Run(self):
self.pcb = pcbnew.GetBoard()
a = CircularZoneDlg(None)
x = 0
y = 0
reference = None
for module in self.pcb.GetModules():
if module.IsSelected():
x = module.GetPosition().x
y = module.GetPosition().y
reference = module.GetReference()
break
if reference is None:
a.m_comment.SetLabel("No reference position: start at origin")
else:
a.m_comment.SetLabel("Using %s as position reference" % reference)
a.m_radiusMM.SetValue("10")
modal_result = a.ShowModal()
if modal_result == wx.ID_OK:
self.build(x, y, pcbnew.FromMM(
int(a.m_radiusMM.GetValue())), a.m_radio_out.GetValue())
else:
print "Cancel"
a.Destroy()