CirclePack.py

Python Example:


import wx
from MplCirclePack import *


class CircleFrame(wx.Frame):

   def __init__(self, parent, id, title, size):
      wx.Frame.__init__(self, parent, id, title, size=size)
      self.CreateButton('Solve', (18, 60), (80, 25), self.Solve)
      self.CreateButton('Clear', (18, 95), (80, 25), self.Clear)
      wx.StaticText(self, -1, "Number of Circles:", (18, 18))
      self.txtCircles = wx.TextCtrl(self, -1, value="3", pos=wx.Point(125, 15), size=wx.Size(50, 20))
      self.panel = wx.Panel(self, -1, size=(503,503), pos=(125,60), style=wx.BORDER_SUNKEN)

   def CreateButton(self, label, pos, size, cmd):
      button = wx.Button(self, -1, label, pos, size)
      button.Bind(wx.EVT_BUTTON, cmd)
      return button

   def Clear(self, event):
      self.panel.Refresh()

   def Solve(self, event):
      circlesStr = self.txtCircles.GetValue()
      try:
         circles = int(circlesStr)
      except ValueError:
         print("Please enter a valid integer value for Number of Circles")
         return
      circlePack = MplCirclePack()
      result = circlePack.SolveModel("LGO", circles)
      if result == False:
         print("There is no solution available with this input.\n" +
            "The solver returned the following message:\n" +
            str(circlePack.ResultString))
         return
      self.DrawCircles(circlePack.SolXVal, circlePack.SolYVal, circlePack.SolRadius, 250)


   def DrawCircles(self, xVal, yVal, radius, size):
      count = len(xVal)
      dc = wx.ClientDC(self.panel)
      dc.SetPen(wx.Pen("#000000", 1, wx.SOLID))
      dc.SetBrush(wx.Brush('#f08080'))
      for i in range(count):
         dc.DrawCircle((xVal[i] + 1.0) * size, (yVal[i] + 1.0) * size, radius * size)


if __name__ == '__main__':
   app = wx.PySimpleApp()
   frame = CircleFrame(None, -1, 'CirclePack', (680, 630))
   frame.Center()
   frame.Show()
   app.MainLoop()


        

Back To Top | Maximal Home Page | List of Samples | Previous Page | Next Page