From e126ace7a25f585d3b853c62613f1f4a70e062fa Mon Sep 17 00:00:00 2001 From: jaseg Date: Thu, 13 Aug 2020 17:27:25 +0200 Subject: foo --- plugin/main_dialog.fbp | 2272 ++++++++++++++++++++++++++---------------- plugin/mesh_dialog.py | 38 +- plugin/mesh_plugin.py | 51 +- plugin/mesh_plugin_dialog.py | 282 +++--- 4 files changed, 1634 insertions(+), 1009 deletions(-) diff --git a/plugin/main_dialog.fbp b/plugin/main_dialog.fbp index 8edcf80..1d687aa 100644 --- a/plugin/main_dialog.fbp +++ b/plugin/main_dialog.fbp @@ -1,6 +1,6 @@ - + ; Python @@ -14,7 +14,6 @@ mesh_plugin_dialog 1000 none - 0 MeshPlugin @@ -45,873 +44,1396 @@ MainDialog - 455,283 - wxDEFAULT_DIALOG_STYLE + 496,258 + wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSTAY_ON_TOP ; ; forward_declare Security Mesh Generator Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bSizer1 wxVERTICAL none - 15 - wxALL|wxEXPAND + 5 + wxEXPAND | wxALL 1 - - 2 - wxVERTICAL - 1 - 0,4 - 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 - fgSizer1 - wxFLEX_GROWMODE_SPECIFIED - none - 3 - 0 - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - - - 5 - wxEXPAND - 1 - - 0 - protected - 0 + 1 + m_scrolledWindow1 + 1 + + + protected + 1 + + Resizable + 5 + 5 + 1 + + + 0 + + + + wxHSCROLL|wxVSCROLL + + + + + + + + + + + + + + + + + + + + + + + + + 2 + wxVERTICAL + 1 + + 0 + + fgSizer1 + wxFLEX_GROWMODE_SPECIFIED + none + 3 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Mesh net name prefix + + 0 + + + 0 + + 1 + m_staticText1 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Mesh net name prefix - 0 - - 0 - - - 0 - - 1 - m_staticText1 - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND + 2 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_net_prefix + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + mesh- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxEXPAND - 1 - - - bSizer3 - wxVERTICAL - none - - 5 - wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND - 2 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - - 0 - - 1 - m_net_prefix - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - wxFILTER_NONE - wxDefaultValidator - - mesh- - - - - + + 5 + wxEXPAND + 1 + + 0 + protected + 0 - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - 0 - - - 0 - - 1 - m_netLabel - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 - + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + 0 matching nets + + 0 + + + 0 + + 1 + m_netLabel + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxALIGN_RIGHT|wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Mesh angle - 0 - - 0 - - - 0 - - 1 - m_staticText3 - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Mesh angle + + 0 + + + 0 + + 1 + m_staticText3 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxEXPAND - 1 - - - bSizer4 - wxHORIZONTAL - none - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 2 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - 1 - 0.000000 - 360 - - 0 - - 0 - - 0 - - 1 - m_angleSpin - 1 - - - protected - 1 - - Resizable - 1 - - wxSP_ARROW_KEYS|wxSP_WRAP - ; ; forward_declare - 0 - - deg - - - + + 5 + wxEXPAND + 1 + + + bSizer4 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_angleInput + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0.00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - ° (deg) - 0 - - 0 - - - 0 - - 1 - m_staticText5 - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + ° (deg) + + 0 + + + 0 + + 1 + m_staticText5 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxALIGN_RIGHT|wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Trace width - 0 - - 0 - - - 0 - - 1 - m_staticText4 - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Trace width + + 0 + + + 0 + + 1 + m_staticText4 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxEXPAND - 1 - - - bSizer5 - wxHORIZONTAL - none - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 3 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - 1 - 0.127 - 100 - - 0 - - 0 - - 0 - - 1 - m_traceSpin - 1 - - - protected - 1 - - Resizable - 1 - - wxSP_ARROW_KEYS - ; ; forward_declare - 0 - - - - - + + 5 + wxEXPAND + 1 + + + bSizer5 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_traceInput + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0.127 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - mm - 0 - - 0 - - - 0 - - 1 - m_staticText6 - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_traceSpin + 1 + + + protected + 1 + + Resizable + 1 + + wxSP_VERTICAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + mm + + 0 + + + 0 + + 1 + m_staticText6 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxALIGN_RIGHT|wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Space width - 0 - - 0 - - - 0 - - 1 - m_staticText7 - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Space width + + 0 + + + 0 + + 1 + m_staticText7 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxEXPAND - 1 - - - bSizer6 - wxHORIZONTAL - none - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 3 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - 1 - 0.127 - 10000 - - 0 - - 0 - - 0 - - 1 - m_spaceSpin - 1 - - - protected - 1 - - Resizable - 1 - - wxSP_ARROW_KEYS - ; ; forward_declare - 0 - - - - - + + 5 + wxEXPAND + 1 + + + bSizer6 + wxHORIZONTAL + none + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_spaceInput + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0.127 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - mm - 0 - - 0 - - - 0 - - 1 - m_staticText8 - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - - - -1 + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_spaceSpin + 1 + + + protected + 1 + + Resizable + 1 + + wxSP_VERTICAL + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + mm + + 0 + + + 0 + + 1 + m_staticText8 + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - 3 wxALL|wxEXPAND 0 - - wxWRAPSIZER_DEFAULT_FLAGS + - wSizer1 + bSizer99 wxHORIZONTAL none @@ -929,31 +1451,25 @@ - 1 0 1 1 - 0 0 - Dock 0 Left 1 1 - 0 0 wxID_ANY Cancel - - 0 0 @@ -968,8 +1484,6 @@ protected 1 - - Resizable 1 @@ -984,6 +1498,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -1011,31 +1549,25 @@ - 1 0 1 1 - 0 0 - Dock 0 Left 1 1 - 0 0 wxID_ANY Remove Mesh Traces - - 0 0 @@ -1050,8 +1582,6 @@ protected 1 - - Resizable 1 @@ -1066,6 +1596,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -1083,31 +1637,25 @@ - 1 0 1 1 - 0 0 - Dock 0 Left 1 1 - 0 0 wxID_ANY Generate - - 0 0 @@ -1122,8 +1670,6 @@ protected 1 - - Resizable 1 @@ -1138,6 +1684,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugin/mesh_dialog.py b/plugin/mesh_dialog.py index 59af670..84e2fd8 100644 --- a/plugin/mesh_dialog.py +++ b/plugin/mesh_dialog.py @@ -2,6 +2,7 @@ import wx import mesh_plugin_dialog import pcbnew from collections import defaultdict +import pyclipper # Implementing MainDialog class MeshPluginMainDialog(mesh_plugin_dialog.MainDialog): @@ -13,6 +14,10 @@ class MeshPluginMainDialog(mesh_plugin_dialog.MainDialog): self.m_removeButton.Bind(wx.EVT_BUTTON, self.tearup_mesh) self.m_generateButton.Bind(wx.EVT_BUTTON, self.generate_mesh) self.m_net_prefix.Bind(wx.EVT_TEXT, self.update_net_label) + self.m_traceSpin.Bind(wx.EVT_SPIN_UP, lambda evt: self.spin(self.m_traceInput, 1.0)) + self.m_traceSpin.Bind(wx.EVT_SPIN_DOWN, lambda evt: self.spin(self.m_traceInput, -1.0)) + self.m_spaceSpin.Bind(wx.EVT_SPIN_UP, lambda evt: self.spin(self.m_spaceInput, 1.0)) + self.m_spaceSpin.Bind(wx.EVT_SPIN_DOWN, lambda evt: self.spin(self.m_spaceInput, -1.0)) self.tearup_confirm_dialog = wx.MessageDialog(self, "", style=wx.YES_NO | wx.NO_DEFAULT) @@ -21,6 +26,14 @@ class MeshPluginMainDialog(mesh_plugin_dialog.MainDialog): self.SetMinSize(self.GetSize()) + def spin(self, le_input, delta): + try: + current = float(le_input.Value) + current += delta + le_input.Value = '{:.03f}'.format(current) + except ValueError: + pass + def get_matching_nets(self): prefix = self.m_net_prefix.Value return { net for net in self.nets if net.startswith(prefix) } @@ -72,22 +85,37 @@ class MeshPluginMainDialog(mesh_plugin_dialog.MainDialog): return wx.MessageDialog(self, "Error: More than two connection pads found for net {}.".format(net)).ShowModal() eco1_id = self.board.GetLayerID('Eco1.User') - mesh_zones = {} + mesh_zones = [] for drawing in self.board.GetDrawings(): if drawing.GetLayer() == eco1_id: - mesh_zones[drawing] = [] + mesh_zones.append(drawing) - if len(mesh_zones) == 0: + if not mesh_zones: return wx.MessageDialog(self, "Error: Could not find any mesh zones on the Eco1.User layer.").ShowModal() for zone in mesh_zones: + anchors = [] for module in self.board.GetModules(): for foo in module.GraphicalItems(): if not isinstance(foo, pcbnew.TEXTE_MODULE): continue - if foo.GetText() == " - # find mesh area on eco1, check connection pads are within target area + if foo.GetText() == "mesh_anchor": + anchors.append(module) + break + + if not anchors: + return wx.MessageDialog(self, "Error: No anchor found for mesh zone centered on {:.3f}, {:.3f} mm".format( + zone.GetCenter().x / pcbnew.IU_PER_MM, zone.GetCenter().y / pcbnew.IU_PER_MM + )).ShowModal() + if len(anchors) > 1: + return wx.MessageDialog(self, "Error: Currently, only a single anchor is supported.").ShowModal() + + self.generate_mesh(zone, anchors) + + def generate_mesh(self, zone, anchors): + anchor, = anchors + def update_net_label(self, evt): self.m_netLabel.SetLabel('{} matching nets'.format(len(self.get_matching_nets()))) diff --git a/plugin/mesh_plugin.py b/plugin/mesh_plugin.py index 1b302b4..2208297 100644 --- a/plugin/mesh_plugin.py +++ b/plugin/mesh_plugin.py @@ -1,17 +1,60 @@ -import os.path +from os import path +import subprocess +import sys + +import wx import pcbnew -from .mesh_dialog import show_dialog +def check_requirements(*packages): + missing = [] + for pkg in packages: + try: + __import__(pkg) + except ImportError: + missing.append(pkg) + + if missing: + if 'win' not in sys.platform: + wx.MessageDialog(None, "Error: Missing python dependencies {}.".format(', '.join(missing)), + "Missing Dependencies").ShowModal() + return False + + else: + msg = 'The following python dependencies are missing:\n\n' + '\n'.join(missing) +\ + '\n\nShould we go ahead and install these missing dependencies into the plugin directory?' + dialog = wx.MessageDialog(None, msg, caption='Error: Missing dependencies', style=wx.YES_NO | wx.NO_DEFAULT) + dialog.SetYesNoLabels("Install missing dependencies", "Cancel") + if dialog.ShowModal() == wx.ID_YES: + for dep in packages: + proc = subprocess.Popen( + "pip install --target deps {} --no-use-pep517 --only-binary :all: --platform win_amd64"\ + .format(dep).split(), + cwd=path.dirname(__file__), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + (stdout, stderr) = proc.communicate() + if proc.returncode != 0: + wx.MessageDialog(None, "Error installing dependencies:\n\n{}\n{}".format(stdout, stderr), + "Installation Error").ShowModal() + return False + + sys.path.append(path.abspath(path.join(path.dirname(__file__), 'deps'))) + + else: + return True class MeshPlugin(pcbnew.ActionPlugin): def defaults(self): self.name = 'Mesh generator' self.category = 'Modify PCB' self.description = 'Creates security mesh traces on a PCB' - self.icon_file_name = os.path.join(os.path.dirname(__file__), 'mesh_plugin_icon.png') + self.icon_file_name = path.join(path.dirname(__file__), 'mesh_plugin_icon.png') self.show_toolbar_button = True def Run(self): - import pcbnew + if not check_requirements('pyclipper'): + return + + from .mesh_dialog import show_dialog show_dialog(pcbnew.GetBoard()) diff --git a/plugin/mesh_plugin_dialog.py b/plugin/mesh_plugin_dialog.py index 2ec6bd2..51bf936 100644 --- a/plugin/mesh_plugin_dialog.py +++ b/plugin/mesh_plugin_dialog.py @@ -1,149 +1,133 @@ -# -*- coding: utf-8 -*- - -########################################################################### -## Python code generated with wxFormBuilder (version Oct 26 2018) -## http://www.wxformbuilder.org/ -## -## PLEASE DO *NOT* EDIT THIS FILE! -########################################################################### - -import wx -import wx.xrc - -########################################################################### -## Class MainDialog -########################################################################### - -class MainDialog ( wx.Dialog ): - - def __init__( self, parent ): - wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Security Mesh Generator Plugin", pos = wx.DefaultPosition, size = wx.Size( 455,283 ), style = wx.DEFAULT_DIALOG_STYLE ) - - self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) - - bSizer1 = wx.BoxSizer( wx.VERTICAL ) - - fgSizer1 = wx.FlexGridSizer( 3, 2, 0, 0 ) - fgSizer1.AddGrowableCol( 1 ) - fgSizer1.AddGrowableRow( 0 ) - fgSizer1.AddGrowableRow( 4 ) - fgSizer1.SetFlexibleDirection( wx.VERTICAL ) - fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED ) - - - fgSizer1.Add( ( 0, 0), 1, wx.EXPAND, 5 ) - - - fgSizer1.Add( ( 0, 0), 1, wx.EXPAND, 5 ) - - self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"Mesh net name prefix", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText1.Wrap( -1 ) - - fgSizer1.Add( self.m_staticText1, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) - - bSizer3 = wx.BoxSizer( wx.VERTICAL ) - - self.m_net_prefix = wx.TextCtrl( self, wx.ID_ANY, u"mesh-", wx.DefaultPosition, wx.DefaultSize, 0 ) - bSizer3.Add( self.m_net_prefix, 2, wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, 5 ) - - self.m_netLabel = wx.StaticText( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_netLabel.Wrap( -1 ) - - bSizer3.Add( self.m_netLabel, 0, wx.ALL, 5 ) - - - fgSizer1.Add( bSizer3, 1, wx.EXPAND, 5 ) - - self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"Mesh angle", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText3.Wrap( -1 ) - - fgSizer1.Add( self.m_staticText3, 0, wx.ALIGN_RIGHT|wx.ALL, 5 ) - - bSizer4 = wx.BoxSizer( wx.HORIZONTAL ) - - self.m_angleSpin = wx.SpinCtrlDouble( self, wx.ID_ANY, u"deg", wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS|wx.SP_WRAP, 0, 360, 0.000000, 1 ) - self.m_angleSpin.SetDigits( 2 ) - bSizer4.Add( self.m_angleSpin, 0, wx.ALL, 5 ) - - self.m_staticText5 = wx.StaticText( self, wx.ID_ANY, u"° (deg)", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText5.Wrap( -1 ) - - bSizer4.Add( self.m_staticText5, 0, wx.ALL, 5 ) - - - fgSizer1.Add( bSizer4, 1, wx.EXPAND, 5 ) - - self.m_staticText4 = wx.StaticText( self, wx.ID_ANY, u"Trace width", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText4.Wrap( -1 ) - - fgSizer1.Add( self.m_staticText4, 0, wx.ALIGN_RIGHT|wx.ALL, 5 ) - - bSizer5 = wx.BoxSizer( wx.HORIZONTAL ) - - self.m_traceSpin = wx.SpinCtrlDouble( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 100, 0.127, 1 ) - self.m_traceSpin.SetDigits( 3 ) - bSizer5.Add( self.m_traceSpin, 0, wx.ALL, 5 ) - - self.m_staticText6 = wx.StaticText( self, wx.ID_ANY, u"mm", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText6.Wrap( -1 ) - - bSizer5.Add( self.m_staticText6, 0, wx.ALL, 5 ) - - - fgSizer1.Add( bSizer5, 1, wx.EXPAND, 5 ) - - self.m_staticText7 = wx.StaticText( self, wx.ID_ANY, u"Space width", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText7.Wrap( -1 ) - - fgSizer1.Add( self.m_staticText7, 0, wx.ALIGN_RIGHT|wx.ALL, 5 ) - - bSizer6 = wx.BoxSizer( wx.HORIZONTAL ) - - self.m_spaceSpin = wx.SpinCtrlDouble( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, 0, 10000, 0.127, 1 ) - self.m_spaceSpin.SetDigits( 3 ) - bSizer6.Add( self.m_spaceSpin, 0, wx.ALL, 5 ) - - self.m_staticText8 = wx.StaticText( self, wx.ID_ANY, u"mm", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticText8.Wrap( -1 ) - - bSizer6.Add( self.m_staticText8, 0, wx.ALL, 5 ) - - - fgSizer1.Add( bSizer6, 1, wx.EXPAND, 5 ) - - - fgSizer1.Add( ( 0, 0), 1, wx.EXPAND, 5 ) - - - fgSizer1.Add( ( 0, 0), 1, wx.EXPAND, 5 ) - - - bSizer1.Add( fgSizer1, 1, wx.ALL|wx.EXPAND, 15 ) - - wSizer1 = wx.WrapSizer( wx.HORIZONTAL, wx.WRAPSIZER_DEFAULT_FLAGS ) - - self.m_cancelButton = wx.Button( self, wx.ID_ANY, u"Cancel", wx.DefaultPosition, wx.DefaultSize, 0 ) - wSizer1.Add( self.m_cancelButton, 0, wx.ALL, 5 ) - - - wSizer1.Add( ( 0, 0), 1, wx.EXPAND, 5 ) - - self.m_removeButton = wx.Button( self, wx.ID_ANY, u"Remove Mesh Traces", wx.DefaultPosition, wx.DefaultSize, 0 ) - wSizer1.Add( self.m_removeButton, 0, wx.ALL, 5 ) - - self.m_generateButton = wx.Button( self, wx.ID_ANY, u"Generate", wx.DefaultPosition, wx.DefaultSize, 0 ) - wSizer1.Add( self.m_generateButton, 0, wx.ALL, 5 ) - - - bSizer1.Add( wSizer1, 0, wx.ALL|wx.EXPAND, 3 ) - - - self.SetSizer( bSizer1 ) - self.Layout() - - self.Centre( wx.BOTH ) - - def __del__( self ): - pass - - +# -*- coding: utf-8 -*- + +########################################################################### +## Python code generated with wxFormBuilder (version Jun 17 2015) +## http://www.wxformbuilder.org/ +## +## PLEASE DO "NOT" EDIT THIS FILE! +########################################################################### + +import wx +import wx.xrc + +########################################################################### +## Class MainDialog +########################################################################### + +class MainDialog ( wx.Dialog ): + + def __init__( self, parent ): + wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Security Mesh Generator Plugin", pos = wx.DefaultPosition, size = wx.Size( 496,258 ), style = wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.MINIMIZE_BOX|wx.RESIZE_BORDER|wx.STAY_ON_TOP ) + + self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize ) + + bSizer1 = wx.BoxSizer( wx.VERTICAL ) + + self.m_scrolledWindow1 = wx.ScrolledWindow( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL ) + self.m_scrolledWindow1.SetScrollRate( 5, 5 ) + fgSizer1 = wx.FlexGridSizer( 3, 2, 0, 0 ) + fgSizer1.AddGrowableCol( 1 ) + fgSizer1.SetFlexibleDirection( wx.VERTICAL ) + fgSizer1.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED ) + + self.m_staticText1 = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"Mesh net name prefix", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText1.Wrap( -1 ) + fgSizer1.Add( self.m_staticText1, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + self.m_net_prefix = wx.TextCtrl( self.m_scrolledWindow1, wx.ID_ANY, u"mesh-", wx.DefaultPosition, wx.DefaultSize, 0 ) + fgSizer1.Add( self.m_net_prefix, 2, wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, 5 ) + + + fgSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 ) + + self.m_netLabel = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"0 matching nets", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_netLabel.Wrap( -1 ) + fgSizer1.Add( self.m_netLabel, 0, wx.ALL, 5 ) + + self.m_staticText3 = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"Mesh angle", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText3.Wrap( -1 ) + fgSizer1.Add( self.m_staticText3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + bSizer4 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_angleInput = wx.TextCtrl( self.m_scrolledWindow1, wx.ID_ANY, u"0.00", wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer4.Add( self.m_angleInput, 0, wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.m_staticText5 = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"° (deg)", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText5.Wrap( -1 ) + bSizer4.Add( self.m_staticText5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + + fgSizer1.Add( bSizer4, 1, wx.EXPAND, 5 ) + + self.m_staticText4 = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"Trace width", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText4.Wrap( -1 ) + fgSizer1.Add( self.m_staticText4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + bSizer5 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_traceInput = wx.TextCtrl( self.m_scrolledWindow1, wx.ID_ANY, u"0.127", wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer5.Add( self.m_traceInput, 0, wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.m_spinBtn1 = wx.SpinButton( self.m_scrolledWindow1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.SP_VERTICAL ) + bSizer5.Add( self.m_spinBtn1, 0, wx.ALL, 5 ) + + self.m_staticText6 = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"mm", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText6.Wrap( -1 ) + bSizer5.Add( self.m_staticText6, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + + fgSizer1.Add( bSizer5, 1, wx.EXPAND, 5 ) + + self.m_staticText7 = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"Space width", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText7.Wrap( -1 ) + fgSizer1.Add( self.m_staticText7, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL, 5 ) + + bSizer6 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_spaceInput = wx.TextCtrl( self.m_scrolledWindow1, wx.ID_ANY, u"0.127", wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer6.Add( self.m_spaceInput, 0, wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.m_spinBtn2 = wx.SpinButton( self.m_scrolledWindow1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.SP_VERTICAL ) + bSizer6.Add( self.m_spinBtn2, 0, wx.ALL, 5 ) + + self.m_staticText8 = wx.StaticText( self.m_scrolledWindow1, wx.ID_ANY, u"mm", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticText8.Wrap( -1 ) + bSizer6.Add( self.m_staticText8, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + + + fgSizer1.Add( bSizer6, 1, wx.EXPAND, 5 ) + + + self.m_scrolledWindow1.SetSizer( fgSizer1 ) + self.m_scrolledWindow1.Layout() + fgSizer1.Fit( self.m_scrolledWindow1 ) + bSizer1.Add( self.m_scrolledWindow1, 1, wx.EXPAND |wx.ALL, 5 ) + + bSizer99 = wx.BoxSizer( wx.HORIZONTAL ) + + self.m_cancelButton = wx.Button( self, wx.ID_ANY, u"Cancel", wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer99.Add( self.m_cancelButton, 0, wx.ALL, 5 ) + + + bSizer99.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 ) + + self.m_removeButton = wx.Button( self, wx.ID_ANY, u"Remove Mesh Traces", wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer99.Add( self.m_removeButton, 0, wx.ALL, 5 ) + + self.m_generateButton = wx.Button( self, wx.ID_ANY, u"Generate", wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer99.Add( self.m_generateButton, 0, wx.ALL, 5 ) + + + bSizer1.Add( bSizer99, 0, wx.ALL|wx.EXPAND, 3 ) + + + self.SetSizer( bSizer1 ) + self.Layout() + + self.Centre( wx.BOTH ) + + def __del__( self ): + pass + + -- cgit