From f268b8dfe6aabeebaab14fea715ef4d068ce12ed Mon Sep 17 00:00:00 2001 From: easyw Date: Tue, 25 Feb 2020 16:18:48 +0100 Subject: [PATCH] improved Gui Annular, Positions, Snap --- AnnularChecker/AnnularDlg.fbp | 2 +- AnnularChecker/AnnularDlg.py | 2 +- AnnularChecker/annular-help.png | Bin 0 -> 6166 bytes AnnularChecker/annular-help.svg | 221 ++++++++++++ AnnularChecker/annular_checker.py | 4 +- FabricationPositions/PositionsDlg.fbp | 4 +- FabricationPositions/PositionsDlg.py | 4 +- .../fabrication-footprint-positions.png | Bin 0 -> 4679 bytes .../fabrication-footprint-positions.svg | 209 +++++++++++ FabricationPositions/fabrication_positions.py | 2 +- Snap2Grid/Snap2GridDlg.fbp | 118 +++--- Snap2Grid/Snap2GridDlg.py | 8 +- Snap2Grid/snap2grid-help.png | Bin 0 -> 4876 bytes Snap2Grid/snap2grid-help.svg | 243 +++++++++++++ Snap2Grid/snap2grid.py | 2 +- Snap2Grid/snap2grid.py.bak | 296 +++++++-------- Snap2Grid/snap2grid.svg | 341 +++++++++--------- 17 files changed, 1052 insertions(+), 404 deletions(-) create mode 100644 AnnularChecker/annular-help.png create mode 100644 AnnularChecker/annular-help.svg create mode 100644 FabricationPositions/fabrication-footprint-positions.png create mode 100644 FabricationPositions/fabrication-footprint-positions.svg create mode 100644 Snap2Grid/snap2grid-help.png create mode 100644 Snap2Grid/snap2grid-help.svg diff --git a/AnnularChecker/AnnularDlg.fbp b/AnnularChecker/AnnularDlg.fbp index e950dca..feb6204 100644 --- a/AnnularChecker/AnnularDlg.fbp +++ b/AnnularChecker/AnnularDlg.fbp @@ -107,7 +107,7 @@ Resizable 1 - + 180,114 ; ; forward_declare 0 diff --git a/AnnularChecker/AnnularDlg.py b/AnnularChecker/AnnularDlg.py index 8ade45d..41a13b4 100644 --- a/AnnularChecker/AnnularDlg.py +++ b/AnnularChecker/AnnularDlg.py @@ -23,7 +23,7 @@ class AnnularDlg ( wx.Dialog ): bSizer3 = wx.BoxSizer( wx.VERTICAL ) - self.m_bitmapAR = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_bitmapAR = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size( 180,114 ), 0 ) bSizer3.Add( self.m_bitmapAR, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 ) self.m_LabelTitle = wx.StaticText( self, wx.ID_ANY, u"Check annular ring", wx.DefaultPosition, wx.DefaultSize, 0 ) diff --git a/AnnularChecker/annular-help.png b/AnnularChecker/annular-help.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0b1b53c20c9d0219de95ca0263ed6038d66f2d GIT binary patch literal 6166 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 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DRILL + AR + + diff --git a/AnnularChecker/annular_checker.py b/AnnularChecker/annular_checker.py index 9a782d1..92a5cc3 100644 --- a/AnnularChecker/annular_checker.py +++ b/AnnularChecker/annular_checker.py @@ -126,7 +126,7 @@ class Annular_Dlg(AnnularDlg.AnnularDlg): #c1.Bind(wx.EVT_CHECKBOX, self.OntextMetric, c1) #self.m_checkBoxPHD.Bind(wx.EVT_CHECKBOX, self.OnClickCheck, self.m_checkBoxPHD) self.m_checkBoxPHD.Bind(wx.EVT_CHECKBOX, self.OnClickCheck) - self.m_bitmapAR.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./annular.png"))) + self.m_bitmapAR.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./annular-help.png"))) #self.Bind(wx.EVT_CHECKBOX, self.OnClickCheck) #self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick) @@ -185,7 +185,7 @@ class annular_check( pcbnew.ActionPlugin ): _pcbnew_frame = [x for x in wx.GetTopLevelWindows() if x.GetTitle().lower().startswith('pcbnew')][0] #aParameters = RoundTrackDlg(None) aParameters = Annular_Dlg(_pcbnew_frame) - aParameters.m_LabelTitle.SetLabel("Check annular ring: version: "+___version___) + aParameters.m_LabelTitle.SetLabel("version: "+___version___) aParameters.m_textCtrlARP.SetToolTip( wx.ToolTip(u"Annular Ring for Pads (mm)" )) aParameters.m_staticTextPHD.SetToolTip( wx.ToolTip(u"Drill extra margin (mm)" )) aParameters.m_textCtrlARV.SetToolTip( wx.ToolTip(u"Annular Ring for Vias (mm)" )) diff --git a/FabricationPositions/PositionsDlg.fbp b/FabricationPositions/PositionsDlg.fbp index 6eeb1cf..295d1c4 100644 --- a/FabricationPositions/PositionsDlg.fbp +++ b/FabricationPositions/PositionsDlg.fbp @@ -45,7 +45,7 @@ PositionsDlg - 499,296 + 499,377 wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER Generating Fab Positions @@ -168,7 +168,7 @@ Resizable 1 - + 180,90 ; ; forward_declare 0 diff --git a/FabricationPositions/PositionsDlg.py b/FabricationPositions/PositionsDlg.py index 36cd0c3..9d729a4 100644 --- a/FabricationPositions/PositionsDlg.py +++ b/FabricationPositions/PositionsDlg.py @@ -17,7 +17,7 @@ import wx.xrc class PositionsDlg ( wx.Dialog ): def __init__( self, parent ): - wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Generating Fab Positions", pos = wx.DefaultPosition, size = wx.Size( 499,296 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) + wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Generating Fab Positions", pos = wx.DefaultPosition, size = wx.Size( 499,377 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) @@ -28,7 +28,7 @@ class PositionsDlg ( wx.Dialog ): bSizer3.Add( self.m_comment, 0, wx.ALL|wx.EXPAND, 5 ) - self.m_bitmapFab = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_bitmapFab = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size( 180,90 ), 0 ) bSizer3.Add( self.m_bitmapFab, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 ) self.m_staticline2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) diff --git a/FabricationPositions/fabrication-footprint-positions.png b/FabricationPositions/fabrication-footprint-positions.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2d0d83fb71db6349479a39261424b7447254b4 GIT binary patch literal 4679 zcmYjVc{o(x8^89k#MsAfP$pT%GPY0#p@@koTiKe1>|551nBhCJgtBGNl2K&KP7#W1 z>1)ZBWXqo2gx~G={Qmfz=Q;O0_q^x5&wK9sc~`Reb;C0(f-C?4oG~`izX7f_;Ix4- zf=|w}_Q22LQ5H|4y2~5Pwr}Q^4QA%HP84o`0aDFAfL{43u~Ebn|m|^v211 z`Qo3iYYBqa=rJ*pV6nvN~N@qMR19!el+3?j9{xI z_PqZn-xM~6dq(%6{3`Z_aaieOr_QAxlV>Y07>L%(I4t^NySA`bHJK#c#kydR;x|jP zgwdVX#v*d4U)KBk`%MB*-jxmC55(Imm)&;N!P<82e6DE1?@kp{_g9!A$p0I&;;)|* zpNq5co2yjj$a6&Vsi~F}s5UoWx)nUe8S&iKm><77c(R~fSF0y8`i0Jzy0nbAu!2AFOS zRa>l5wV z7L-d6yP#;D*n)F35nZrb4sjdi*Z?`e68Gd*I&Pd`-yF210D+%pl4Z?s?oN0;(HO8| z-LlPVuw{bBm%y45-15&F7wpOp8qq#_SFI5%0OZ9%tFB`I#cEo1%JlxO7EQ#*4=;z2 zp#@7%7Mp+kIouuy*2>uz3;vnZ5wfuIplMFUw(9t@b?Q`XK@GfcIan3}o8wFDmP}1c zYb!Pk*VEHm_gn1u$j+9Bv|AY(cE^M~#atfjd#-koLqzju$ZBObySFg@W8ySYmxF_& zA~QXG$prDlv0Oz(r8(Q{B+00d9sU&gGTRN=HG$3_WWwQabcYKlRn-MS0fEDg@nx+6 z4%*A5%phFDbY}LaLssNQ^*FS5EYf;;M=laN=s8(PH;s~OT=%58$bVWz4_PC%M^g>udWzgEq!Ce_u!Ev&Y4UPI7ri>@Un63btu^6=c8PxkqBHKo7VLq%B}PXg zbi!^le~f(PMV*+2?@uo(mAbO~S#421rehX}HumVRa@XiR$0)#wW-l2w#_&9Y&VS-d z>)m~vl*DPKELL%a<->J`<-8t#xxBp|6 zTu7J%(OAQzkKx%o^xckJkadZ6RAG2cp(uAo#IrC)Jt!G2eLVBFvGJ&$LdlJfk4Jr~ zYQBoa<`gdj1{l$VIZq_p+}?V}68 z0XEa{QcimMfp*0xRS)o9!k(A}<(%Smp-SO({Ptm6;&7?uFo8J57{%)^@d%!yepZF% z&FZjU)-HFg%jx5zfBxuvOlT&Yo)m@dt!hAm{Uy(Et8}TmiU|Ujc?_fhJ5`FioSpn= znsE1;kdRR5GiWkYvyZNQ`_BXlg_;_NImR)>`Fv@kgA?IIsW?9<`YDAHR?eF(XbmV#D0i;xPM?kaQ9Qmp~8vi15Uj4%4%zY+e~Zd zxtB&XMDw+HpXljlK_uu_m_Jk8hI0on%BbR4y1h&zL%mAUF_;Q)fiB* zboL$)W#eLiQDL|S@o|XTW+9YOY%+e`LBd|qMx6GcytwBaVfQFSMf3Bisi}`c7TkaMe6-tf<)@cXnk09fozCorR};_qBwVoW+d&Hp zixIcca;%%S1qS0Yy!OD1+K;m?ZaX=0>&u8`k8$o<_GiRDbruj6Z545q<@arxdcn)f zdy?TADQ*|OGh}E_DJx?wBs`x)>JMgo4(^x!Bf=hoVkkp7WDSIYKj+dv`VvC5Io5C8 z$1ljq$qf$;fdSw+X=Y=l2sh{3Fg*!|f&u4IF~Xm%TvErZoQ*0LizV1&Fk8K2wSD)f zZQUR#mqMZV+ZQQuPcdZ6uZl?KZU)MT`N!Ek94cb(8f&!jc@ki;!fn$pE<#k^8{l%c z#MV})pB0J};&$gT&mTB(t@7>Zu@oAI8r5*Ra$X-dlNwu{sM{!s6o-jE`Eq-3xqVvk zH#4E+w{ABAWnYuCNsMXyD8js~Gs21&#|#1h+nc+%rE+?oo~K!s;Hz-u6Oc~6Bzz81 z0@6uP

%O0FE25Lt>lq@{RP?B@%f(@;d)sLXz2mZ7-9Ed zfap=uuSu(9pnXIQ2@U1%yYA)U64X{zRps9-obk3f7@{eeFHdj3GvAw*cBd`;_|V;5 zAM>Xi5$iJ{3qdSreE$_|OM{Dc&mX;RepXY9wszPd>#DJ9%Q+qIR z)B9fV_8e$DY-P79a#~M*_bSYOAb)sYFb#t*#n~)b9bBB~tXd8mROCxm_;$Y*9UQFj zMwV6d8=d_al`DswXPa{5t}662?euM5rIoCB6dN7R{@j?uuT*C=l&CJ0iqqA1y73$# zLM|KrtjR|UBEfj<;uZO_w&BA(XIXvwnvU6s3tyiVqUq{upS}Chxn)b3a94eTQCUuO zSWs53oLGYvx1aZbq8;iMwXo6({`~%`>-Bc+Gyj#TK%w!)3p!0r&8n*LDjcf{3RTpc z2&H}8$(1%TGQ#NL;i2*Gkjq~l+lTX9C;i12X15P1e93u!q{V9$}Aq;^N{mFP$6q`(bRX*LO~|umMIdV}U#VN?Hqby-5L&Q866$S3Oi1 zP$JxZWAmC{G;H&Ivs!>cKy-BU_s!XkH!edG_1pay9lgDwR;i{92rCX>t{Oz_e3H@6 z6DLjff^>1>)34U3D?UFyFhl8Sa)K8G4t|wYIDqF}GW$b?aB{KhMocM(dMbhpx=WjFLKjcZ=*!~3@$oTIT^#}dv)<~Cj5#^! zay4W}abn)<*Jt+Dr&t350s!DL=4t+gTXAmry`FT9ntd7R@4YU!hR-` zvDSywon1q*hxF2BIbUnWYh1bAztx<7SQOC3v!f-!MUEg@eQz!8B8DmU?X1DULNO_<2mi_7F z7t4)JO&d%RO}cZNlDbfNH55uD@%G=eH1LD>uMPkLcnb$UEH(`c+z-5K4sn5GE*_RC zd$5oMtQ0eD!A8(2-_^u9PGa_yeUZT-%-=G3n7RTqo_1Mm8M%2 zceKkX_rE-nLPJJJM-%(l{JbXKu6;i^I3N^Jm`sQ7E+m|iK7iPew1sn`jXXTotTORj zU+#&zVNBBRu%`r*G#*+iObEjS1S$*xsnFy%S8cFZDs`i+P4(GrQ`5eW z-)h}Zwo`|(;Cbl@JMX3`Fd^lCeok6CR4_fVyyrvnvs5jzyK3u|+%5g5FADbYz4Ncls6zqS0ABp@X`& z7CPlwcdD7n$HoYvuH?@_SnD$3LXX_3k^yEYUP!HVWN;9vgjcYj2enHZlyeKjPPkL8 z4U@C&Q2+D?X_APQEZ=2F63T6)xiWZrftBH^xPe%H)FAnff$~)uEFG&e_%rp>_io`?EuHaMprAM8Qi35I()NwYA~eJ%}s6gDbKa zwC&qWwDS;G>#+Sos_qB11B;<^?IczLEpT5?ufq+jBGg!FV;jFB@e|L0iMJjX&l=wl z==PZ{E-wCa%9_y)UWyZpNeO)cB3EgKdmWW3K9-VN*WOMr(tNM*FYj&Eh0<@>jXLIY zNiS_}`Cy@6#FUqO8^Yw%RxH0UnVPWO3k%coY+J6E?=HXHB%xv|)QC+XlkW_w$ZdS9 zy|8ZiT3uI?_)h^sjm1`uJ7va!2SpoU-CSiha2Wh2o0rfuI?0W zb2Gy&!5)NM2eLO#r)T7Yl#okiDz8Dq(DbxUocWJ()lAl(5ctcAibOFnF}34=&-o=x otlb11iez<@z`6eohJ{m_S9kX=?jifXf=wX6*x + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FabricationPositions/fabrication_positions.py b/FabricationPositions/fabrication_positions.py index 98c1eb3..6da3d70 100644 --- a/FabricationPositions/fabrication_positions.py +++ b/FabricationPositions/fabrication_positions.py @@ -291,7 +291,7 @@ class Positions_Dlg(PositionsDlg.PositionsDlg): PositionsDlg.PositionsDlg.__init__(self, parent) #self.GetSizer().Fit(self) self.SetMinSize(self.GetSize()) - self.m_bitmapFab.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./fabrication.png"))) + self.m_bitmapFab.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./fabrication-footprint-positions.png"))) # self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick) # self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick) # if wx.__version__ < '4.0': diff --git a/Snap2Grid/Snap2GridDlg.fbp b/Snap2Grid/Snap2GridDlg.fbp index 4371a0b..930c753 100644 --- a/Snap2Grid/Snap2GridDlg.fbp +++ b/Snap2Grid/Snap2GridDlg.fbp @@ -45,7 +45,7 @@ Snap2GridDlg - 499,491 + 499,584 wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER Snap to Grid @@ -119,6 +119,64 @@ -1 + + 5 + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_bitmapS2G + 1 + + + protected + 1 + + Resizable + 1 + 100,100 + ; ; forward_declare + 0 + + + + + + 5 @@ -254,64 +312,6 @@ - - 5 - wxALIGN_CENTER_VERTICAL|wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - 0 - - 1 - m_bitmapS2G - 1 - - - protected - 1 - - Resizable - 1 - - ; ; forward_declare - 0 - - - - - - diff --git a/Snap2Grid/Snap2GridDlg.py b/Snap2Grid/Snap2GridDlg.py index 7119dd9..0de6ae9 100644 --- a/Snap2Grid/Snap2GridDlg.py +++ b/Snap2Grid/Snap2GridDlg.py @@ -17,7 +17,7 @@ import wx.xrc class Snap2GridDlg ( wx.Dialog ): def __init__( self, parent ): - wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Snap to Grid", pos = wx.DefaultPosition, size = wx.Size( 499,491 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) + wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Snap to Grid", pos = wx.DefaultPosition, size = wx.Size( 499,584 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) @@ -28,6 +28,9 @@ class Snap2GridDlg ( wx.Dialog ): bSizer3.Add( self.m_comment, 0, wx.ALL|wx.EXPAND, 5 ) + self.m_bitmapS2G = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size( 100,100 ), 0 ) + bSizer3.Add( self.m_bitmapS2G, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + bSizer31 = wx.BoxSizer( wx.HORIZONTAL ) self.m_staticTextGrid = wx.StaticText( self, wx.ID_ANY, u"Grid", wx.DefaultPosition, wx.DefaultSize, 0 ) @@ -40,9 +43,6 @@ class Snap2GridDlg ( wx.Dialog ): self.m_comboBoxGrid.SetSelection( 0 ) bSizer31.Add( self.m_comboBoxGrid, 0, wx.ALL|wx.EXPAND, 5 ) - self.m_bitmapS2G = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0 ) - bSizer31.Add( self.m_bitmapS2G, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) - bSizer3.Add( bSizer31, 0, 0, 5 ) diff --git a/Snap2Grid/snap2grid-help.png b/Snap2Grid/snap2grid-help.png new file mode 100644 index 0000000000000000000000000000000000000000..61b3327bd277723370496939fcea2a8742002afc GIT binary patch literal 4876 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 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Snap2Grid/snap2grid.py b/Snap2Grid/snap2grid.py index 3f021ac..953f34b 100644 --- a/Snap2Grid/snap2grid.py +++ b/Snap2Grid/snap2grid.py @@ -56,7 +56,7 @@ class Snap2Grid_Dlg(Snap2GridDlg.Snap2GridDlg): Snap2GridDlg.Snap2GridDlg.__init__(self, parent) #self.GetSizer().Fit(self) self.SetMinSize(self.GetSize()) - self.m_bitmapS2G.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png"))) + self.m_bitmapS2G.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid-help.png"))) #self.SetIcon(wx.IconFromBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png")))) #self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick) #self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick) diff --git a/Snap2Grid/snap2grid.py.bak b/Snap2Grid/snap2grid.py.bak index 0d50bc7..15ecdfc 100644 --- a/Snap2Grid/snap2grid.py.bak +++ b/Snap2Grid/snap2grid.py.bak @@ -8,11 +8,7 @@ #import snaptogrid; import importlib; importlib.reload(snaptogrid) -### plugins errors -#import pcbnew -#pcbnew.GetWizardsBackTrace() - -__version__ = '1.0.2' +__version__ = '1.0.1' import sys, os import pcbnew import datetime @@ -21,11 +17,11 @@ from pcbnew import * use_grid_origin = True -gridReference = 0.1 #1.27 #mm pcbnew.FromMM(1.0) #0.1mm +gridReference = 2.54 #1.27 #mm pcbnew.FromMM(1.0) #0.1mm gridSizeMM = gridReference -from . import Snap2GridDlg +#from . import Send2GridDlg sys.path.append(os.path.dirname(__file__)) @@ -36,38 +32,36 @@ def wxLogDebug(msg,dbg): wx.LogMessage(msg) # -class Snap2Grid_Dlg(Snap2GridDlg.Snap2GridDlg): - # from https://github.com/MitjaNemec/Kicad_action_plugins - # hack for new wxFormBuilder generating code incompatible with old wxPython - # noinspection PyMethodOverriding - def SetSizeHints(self, sz1, sz2): - if wx.__version__ < '4.0': - self.SetSizeHintsSz(sz1, sz2) - else: - super(Snap2Grid_Dlg, self).SetSizeHints(sz1, sz2) - - # def onDeleteClick(self, event): - # return self.EndModal(wx.ID_DELETE) - # - # def onConnectClick(self, event): - # return self.EndModal(wx.ID_REVERT) - - def __init__(self, parent): - import wx - Snap2GridDlg.Snap2GridDlg.__init__(self, parent) - #self.GetSizer().Fit(self) - self.SetMinSize(self.GetSize()) - self.m_bitmapS2G.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png"))) - #self.SetIcon(wx.IconFromBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png")))) - #self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick) - #self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick) - #if wx.__version__ < '4.0': - # self.m_buttonReconnect.SetToolTipString( u"Select two converging Tracks to re-connect them\nor Select tracks including one round corner to be straighten" ) - # self.m_buttonRound.SetToolTipString( u"Select two connected Tracks to round the corner\nThen choose distance from intersection and the number of segments" ) - #else: - # self.m_buttonReconnect.SetToolTip( u"Select two converging Tracks to re-connect them\nor Select tracks including one round corner to be straighten" ) - # self.m_buttonRound.SetToolTip( u"Select two connected Tracks to round the corner\nThen choose distance from intersection and the number of segments" ) - +#class Snap2Grid_Dlg(Snap2GridDlg.Snap2GridDlg): +# # from https://github.com/MitjaNemec/Kicad_action_plugins +# # hack for new wxFormBuilder generating code incompatible with old wxPython +# # noinspection PyMethodOverriding +# def SetSizeHints(self, sz1, sz2): +# if wx.__version__ < '4.0': +# self.SetSizeHintsSz(sz1, sz2) +# else: +# super(RoundTrack_Dlg, self).SetSizeHints(sz1, sz2) +# +# # def onDeleteClick(self, event): +# # return self.EndModal(wx.ID_DELETE) +# # +# # def onConnectClick(self, event): +# # return self.EndModal(wx.ID_REVERT) +# +# def __init__(self, parent): +# import wx +# Send2GridDlg.Send2GridDlg.__init__(self, parent) +# #self.GetSizer().Fit(self) +# self.SetMinSize(self.GetSize()) +# #self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick) +# #self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick) +# #if wx.__version__ < '4.0': +# # self.m_buttonReconnect.SetToolTipString( u"Select two converging Tracks to re-connect them\nor Select tracks including one round corner to be straighten" ) +# # self.m_buttonRound.SetToolTipString( u"Select two connected Tracks to round the corner\nThen choose distance from intersection and the number of segments" ) +# #else: +# # self.m_buttonReconnect.SetToolTip( u"Select two converging Tracks to re-connect them\nor Select tracks including one round corner to be straighten" ) +# # self.m_buttonRound.SetToolTip( u"Select two connected Tracks to round the corner\nThen choose distance from intersection and the number of segments" ) +# # Python plugin stuff class snap_to_grid( pcbnew.ActionPlugin ): """ @@ -83,9 +77,9 @@ class snap_to_grid( pcbnew.ActionPlugin ): self.description should be a comprehensive description of the plugin """ - self.name = "Snap Selected Footprint(s) to Grid \nversion "+__version__ + self.name = "Snap Selected Module(s) to Grid\nversion "+__version__ self.category = "Modify PCB" - self.description = "Automaticaly Snap Selected Footprint Module(s) to Grid on an existing PCB" + self.description = "Automaticaly Snap Selected Module(s) to Grid on an existing PCB" #self.pcbnew_icon_support = hasattr(self, "show_toolbar_button") self.show_toolbar_button = True self.icon_file_name = os.path.join(os.path.dirname(__file__), './snap2grid.png') @@ -95,131 +89,111 @@ class snap_to_grid( pcbnew.ActionPlugin ): #self.pcb = GetBoard() import sys,os #mm_ius = 1000000.0 - _pcbnew_frame = [x for x in wx.GetTopLevelWindows() if x.GetTitle().lower().startswith('pcbnew')][0] - #aParameters = RoundTrackDlg(None) - aParameters = Snap2Grid_Dlg(_pcbnew_frame) - gridIndex = aParameters.m_comboBoxGrid.FindString('0.1mm (3.94mils)') - aParameters.m_comboBoxGrid.SetSelection(gridIndex) - #aParameters.m_comboBoxGrid.Append('0.1mm (3.94mils)') - aParameters.m_radioBtnGO.SetValue(True) - aParameters.Show() - modal_result = aParameters.ShowModal() - if modal_result == wx.ID_OK: - grid = aParameters.m_comboBoxGrid.GetStringSelection() - gridSizeMM = float(grid.split('mm')[0]) - if aParameters.m_radioBtnGO.GetValue(): - use_grid_origin = True - else: - use_grid_origin = False - snap2grid(gridSizeMM,use_grid_origin) - else: - None # Cancel -## - -def snap2grid(gridSizeMM,use_grid_origin): - - pcb = pcbnew.GetBoard() - gridOrigin = pcb.GetGridOrigin() - auxOrigin = pcb.GetAuxOrigin() - content='' - locked_fp='' - #wxPoint(77470000, 135890000) - for module in pcb.GetModules(): - if module.IsSelected(): - if use_grid_origin: - mpx = module.GetPosition().x - gridOrigin.x - mpy = module.GetPosition().y - gridOrigin.y - #print(mpx,mpy) - mpxOnG = int(mpx/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.x - mpyOnG = int(mpy/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.y - #print(mpxOnG,mpyOnG) - locked='' - if not module.IsLocked(): - module.SetPosition(wxPoint(mpxOnG,mpyOnG)) + pcb = pcbnew.GetBoard() + gridOrigin = pcb.GetGridOrigin() + auxOrigin = pcb.GetAuxOrigin() + content='' + locked_fp='' + #wxPoint(77470000, 135890000) + for module in pcb.GetModules(): + if module.IsSelected(): + if use_grid_origin: + mpx = module.GetPosition().x - gridOrigin.x + mpy = module.GetPosition().y - gridOrigin.y + print(mpx,mpy) + mpxOnG = int(mpx/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.x + mpyOnG = int(mpy/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.y + print(mpxOnG,mpyOnG) + locked='' + if not module.IsLocked(): + module.SetPosition(wxPoint(mpxOnG,mpyOnG)) + else: + locked='LOCKED' + X_POS=str(module.GetPosition().x) # - gridOrigin.x) + #X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - gridOrigin.x )) + X_POS="{0:<11}".format(X_POS) + Y_POS=str(module.GetPosition().y) # - gridOrigin.y) + Y_POS="{0:<11}".format(Y_POS) + ## mpOnGx = PutOnGridMM(module.GetPosition().x, gridSizeMM) + ## mpOnGy = PutOnGridMM(module.GetPosition().y, gridSizeMM) + ## module.SetPosition(wxPoint(mpOnGx,mpOnGy)) + #module.SetPosition(wxPoint(mpOnGx+FromMM(100.0),mpOnGy+FromMM(2.0))) + #module.SetOrientation(10) + #Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - gridOrigin.y)) + # else: + # mpx = module.GetPosition().x - auxOrigin().x + # mpy = module.GetPosition().y - auxOrigin().y + # X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - auxOrigin().x )) + # X_POS="{0:<11}".format(X_POS) + # Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - auxOrigin().y)) + # Y_POS="{0:<11}".format(Y_POS) + Reference="{0:<10}".format(str(module.GetReference())) + Value = str(module.GetValue()) + Value=(Value[:17] + '..') if len(Value) > 19 else Value + Value="{0:<20}".format(Value) + Rotation='{0:.1f}'.format((module.GetOrientation()/10)) + Rotation="{0:>6}".format(Rotation)+' ' + if module.GetLayer() == 0: + Layer=" top" else: - locked='LOCKED' - X_POS=str(module.GetPosition().x) # - gridOrigin.x) - #X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - gridOrigin.x )) - X_POS="{0:<11}".format(X_POS) - Y_POS=str(module.GetPosition().y) # - gridOrigin.y) - Y_POS="{0:<11}".format(Y_POS) - ## mpOnGx = PutOnGridMM(module.GetPosition().x, gridSizeMM) - ## mpOnGy = PutOnGridMM(module.GetPosition().y, gridSizeMM) - ## module.SetPosition(wxPoint(mpOnGx,mpOnGy)) - #module.SetPosition(wxPoint(mpOnGx+FromMM(100.0),mpOnGy+FromMM(2.0))) - #module.SetOrientation(10) - #Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - gridOrigin.y)) - else: # AuxOrigin - mpx = module.GetPosition().x - auxOrigin.x - mpy = module.GetPosition().y - auxOrigin.y - #print(mpx,mpy) - mpxOnG = int(mpx/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ auxOrigin.x - mpyOnG = int(mpy/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ auxOrigin.y - #print(mpxOnG,mpyOnG) - locked='' - if not module.IsLocked(): - module.SetPosition(wxPoint(mpxOnG,mpyOnG)) - else: - locked='LOCKED' - X_POS=str(module.GetPosition().x) # - gridOrigin.x) - #X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - gridOrigin.x )) - X_POS="{0:<11}".format(X_POS) - Y_POS=str(module.GetPosition().y) # - gridOrigin.y) - Y_POS="{0:<11}".format(Y_POS) - ## mpOnGx = PutOnGridMM(module.GetPosition().x, gridSizeMM) - ## mpOnGy = PutOnGridMM(module.GetPosition().y, gridSizeMM) - ## module.SetPosition(wxPoint(mpOnGx,mpOnGy)) - #module.SetPosition(wxPoint(mpOnGx+FromMM(100.0),mpOnGy+FromMM(2.0))) - #module.SetOrientation(10) - #Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - gridOrigin.y)) - Reference="{0:<10}".format(str(module.GetReference())) - Value = str(module.GetValue()) - Value=(Value[:17] + '..') if len(Value) > 19 else Value - Value="{0:<20}".format(Value) - Rotation='{0:.1f}'.format((module.GetOrientation()/10)) - Rotation="{0:>6}".format(Rotation)+' ' - if module.GetLayer() == 0: - Layer=" top" - else: - Layer=" bottom" - #Side="## Side :"+Layer+lsep - Layer="{0:<10}".format(Layer) - content+=Reference - if 'LOCKED' in locked: - locked_fp+=Reference + ' LOCKED'+'\n' #os.linesep - #content+=Value - content+=X_POS - content+=Y_POS - #content+=str(mpOnGx) - #content+=str(mpOnGy) - content+=str(mpxOnG) - content+=str(mpyOnG) - content+=Layer+'\n' #os.linesep - if len(content)>0: - content+=str(pcbnew.FromMM(gridSizeMM))+'\n' - info='Snapped to grid: '+str(gridSizeMM)+'mm\n' - if use_grid_origin: - content+="Using GridOrigin as Ref"+'\n' - info+="Using GridOrigin as Ref"+'\n' - else: - content+="Using AuxOrigin as Ref"+'\n' - info+="Using AuxOrigin as Ref"+'\n' - if debug: + Layer=" bottom" + #Side="## Side :"+Layer+lsep + Layer="{0:<10}".format(Layer) + content+=Reference + if 'LOCKED' in locked: + locked_fp+=Reference + ' LOCKED'+'\n' #os.linesep + #content+=Value + content+=X_POS + content+=Y_POS + #content+=str(mpOnGx) + #content+=str(mpOnGy) + content+=str(mpxOnG) + content+=str(mpyOnG) + content+=Layer+'\n' #os.linesep + if len(content)>0: + content+=str(pcbnew.FromMM(gridReference)) wxLogDebug(content,debug) - #else: - wxLogDebug(info,True) - if len (locked_fp)>0: - locked_fp+='\n'+'NOT Moved (Locked fp)' - locked_fp+='\n'+info - wxLogDebug(locked_fp,True) + if len (locked_fp)>0: + locked_fp+='\n'+'NOT Moved' + wxLogDebug(locked_fp,True) else: - wxLogDebug(info,True) - else: - wxLogDebug('No Modules Selected',True) - Refresh() - #return content + wxLogDebug('No Modules Selected',True) + Refresh() + #return content + #if 0: + # #from https://github.com/MitjaNemec/Kicad_action_plugins + # #hack wxFormBuilder py2/py3 + # _pcbnew_frame = [x for x in wx.GetTopLevelWindows() if x.GetTitle().lower().startswith('pcbnew')][0] + # #aParameters = RoundTrackDlg(None) + # aParameters = RoundTrack_Dlg(_pcbnew_frame) + # #aParameters = RoundTrack_DlgEx(_pcbnew_frame) + # aParameters.Show() + # #end hack + # aParameters.m_distanceMM.SetValue("5") + # aParameters.m_segments.SetValue("16") + # aParameters.m_bitmap1.SetBitmap(wx.Bitmap( os.path.join(os.path.dirname(os.path.realpath(__file__)), "round_track_help.png") ) ) + # modal_result = aParameters.ShowModal() + # segments = self.CheckSegmentsInput( + # aParameters.m_segments.GetValue(), "number of segments") + # distI = FromMM(self.CheckDistanceInput(aParameters.m_distanceMM.GetValue(), "distance from intersection")) + # if segments is not None and distI is not None: + # if modal_result == wx.ID_OK: + # Round_Selection(pcb, distI, segments) + # elif modal_result == wx.ID_DELETE: + # Delete_Segments(pcb) + # #wx.LogMessage('Round Segments on Track Net Deleted') + # elif modal_result == wx.ID_REVERT: + # wxLogDebug('Connecting Tracks',debug) + # Connect_Segments(pcb) + # else: + # None # Cancel + # else: + # None # Invalid input + # aParameters.Destroy() + + # wxLogDebug('showing Selected Tracks',debug) # wx.LogMessage('Select Tracks to calculate the Length\nor One Pad to select connected Tracks') # diff --git a/Snap2Grid/snap2grid.svg b/Snap2Grid/snap2grid.svg index 3875f66..b27798a 100644 --- a/Snap2Grid/snap2grid.svg +++ b/Snap2Grid/snap2grid.svg @@ -7,15 +7,15 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - height="26" - width="26" - version="1.1" - id="svg2" - inkscape:version="0.92.3 (2405546, 2018-03-11)" + inkscape:export-ydpi="553.84998" + inkscape:export-xdpi="553.84998" + inkscape:export-filename="C:\Users\userC\AppData\Roaming\kicad\scripting\plugins\kicad-action-tools\Snap2Grid\snap2grid.png" sodipodi:docname="snap2grid.svg" - inkscape:export-filename="/home/mau/.kicad_plugins/kicad-action-tools/Snap2Grid/snap2grid.png" - inkscape:export-xdpi="118.15385" - inkscape:export-ydpi="118.15385"> + inkscape:version="1.0beta2 (c8d5c0e, 2020-01-08)" + id="svg2" + version="1.1" + width="26" + height="26"> @@ -31,212 +31,213 @@ + inkscape:window-y="-7" + inkscape:window-x="-7" + inkscape:cy="20.096351" + inkscape:cx="12.998223" + inkscape:zoom="11.480769" + inkscape:snap-to-guides="true" + inkscape:snap-grids="true" + showgrid="true" + id="namedview68" + inkscape:window-height="1010" + inkscape:window-width="1920" + inkscape:pageshadow="2" + inkscape:pageopacity="0" + guidetolerance="10" + gridtolerance="10" + objecttolerance="10" + borderopacity="1" + bordercolor="#666666" + pagecolor="#ffffff"> + spacingy="0.5" + spacingx="0.5" + snapvisiblegridlinesonly="true" + enabled="true" + visible="true" + empspacing="1" + id="grid3049" + type="xygrid" /> - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + inkscape:connector-curvature="0" + style="fill:#333333;fill-rule:evenodd;fill-opacity:1" /> + id="g4164" + transform="matrix(0.67334578,0,0,0.67334578,6.072015,-0.80029514)"> + id="rect51" + inkscape:connector-curvature="0" /> + id="g3983" + transform="translate(-0.53360319)"> - + - + + y="18.488895" + width="6.0590835" + height="4.0659709" + transform="rotate(-90)" + style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + transform="translate(-0.53360319,16.090848)" + id="g3983-1"> - + - + + y="18.488895" + width="6.0590835" + height="4.0659709" + transform="rotate(-90)" + style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> - + - + id="path3815" + d="m 11,19 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" /> +