- Fix ViaStitching to follow change in python API
- Adding the circular zone tools
This commit is contained in:
55
CircularZone/CircularZone.py
Normal file
55
CircularZone/CircularZone.py
Normal 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()
|
Reference in New Issue
Block a user