diff --git a/AnnularChecker/AnnularDlg.fbp b/AnnularChecker/AnnularDlg.fbp index 0b33042..e950dca 100644 --- a/AnnularChecker/AnnularDlg.fbp +++ b/AnnularChecker/AnnularDlg.fbp @@ -45,7 +45,7 @@ AnnularDlg - 380,317 + 533,529 wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER Annular Ring Checker diff --git a/AnnularChecker/AnnularDlg.py b/AnnularChecker/AnnularDlg.py index 98a071c..8ade45d 100644 --- a/AnnularChecker/AnnularDlg.py +++ b/AnnularChecker/AnnularDlg.py @@ -17,7 +17,7 @@ import wx.xrc class AnnularDlg ( wx.Dialog ): def __init__( self, parent ): - wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Annular Ring Checker", pos = wx.DefaultPosition, size = wx.Size( 380,317 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) + wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Annular Ring Checker", pos = wx.DefaultPosition, size = wx.Size( 533,529 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) diff --git a/AnnularChecker/AnnularResultDlg.fbp b/AnnularChecker/AnnularResultDlg.fbp index 5b31e95..995a72d 100644 --- a/AnnularChecker/AnnularResultDlg.fbp +++ b/AnnularChecker/AnnularResultDlg.fbp @@ -45,8 +45,8 @@ AnnularResultDlg - 383,521 - wxDEFAULT_DIALOG_STYLE + 539,659 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ; forward_declare Annular Checker @@ -69,7 +69,7 @@ none 5 - wxALL + wxALL|wxEXPAND 0 1 @@ -163,14 +163,14 @@ 0 - + -1,-1 0 -1,400 1 m_richTextResult 1 - + -1,-1 protected 1 @@ -192,7 +192,7 @@ 5 - wxEXPAND + wxALIGN_TOP|wxEXPAND 1 2 diff --git a/AnnularChecker/AnnularResultDlg.py b/AnnularChecker/AnnularResultDlg.py index 71d10a4..ba7d882 100644 --- a/AnnularChecker/AnnularResultDlg.py +++ b/AnnularChecker/AnnularResultDlg.py @@ -18,7 +18,7 @@ import wx.richtext class AnnularResultDlg ( wx.Dialog ): def __init__( self, parent ): - wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Annular Checker", pos = wx.DefaultPosition, size = wx.Size( 383,521 ), style = wx.DEFAULT_DIALOG_STYLE ) + wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Annular Checker", pos = wx.DefaultPosition, size = wx.Size( 539,659 ), style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) @@ -29,7 +29,7 @@ class AnnularResultDlg ( wx.Dialog ): self.m_staticTitle = wx.StaticText( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_staticTitle.Wrap( -1 ) - bSizer2.Add( self.m_staticTitle, 0, wx.ALL, 5 ) + bSizer2.Add( self.m_staticTitle, 0, wx.ALL|wx.EXPAND, 5 ) self.m_richTextResult = wx.richtext.RichTextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_READONLY|wx.VSCROLL|wx.HSCROLL|wx.NO_BORDER|wx.WANTS_CHARS ) self.m_richTextResult.SetMinSize( wx.Size( -1,400 ) ) @@ -45,7 +45,7 @@ class AnnularResultDlg ( wx.Dialog ): gSizer3.Add( self.copy_btn, 0, wx.ALL, 5 ) - bSizer2.Add( gSizer3, 1, wx.EXPAND, 5 ) + bSizer2.Add( gSizer3, 1, wx.ALIGN_TOP|wx.EXPAND, 5 ) bSizer1.Add( bSizer2, 1, wx.EXPAND, 5 ) diff --git a/AnnularChecker/annular_checker.py b/AnnularChecker/annular_checker.py index 25254e6..bab4637 100644 --- a/AnnularChecker/annular_checker.py +++ b/AnnularChecker/annular_checker.py @@ -15,7 +15,7 @@ global mm_ius, DRL_EXTRA, AR_SET, AR_SET_V, DRL_EXTRA_ius, MIN_AR_SIZE, MIN_AR_SIZE_V, found_violations, LogMsg, ___version___ -___version___="1.6.3" +___version___="1.6.4" #wx.LogMessage("My message") mm_ius = 1000000.0 diff --git a/Snap2Grid/Snap2GridDlg.fbp b/Snap2Grid/Snap2GridDlg.fbp index 723beb8..4371a0b 100644 --- a/Snap2Grid/Snap2GridDlg.fbp +++ b/Snap2Grid/Snap2GridDlg.fbp @@ -45,7 +45,7 @@ Snap2GridDlg - 499,394 + 499,491 wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER Snap to Grid @@ -500,6 +500,70 @@ + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Top Left (0,0) + + 0 + + + 0 + + 1 + m_radioBtnZero + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + 0 + + + + + 5 wxEXPAND | wxALL diff --git a/Snap2Grid/Snap2GridDlg.py b/Snap2Grid/Snap2GridDlg.py index a870395..7119dd9 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,394 ), 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,491 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER ) self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) @@ -55,6 +55,9 @@ class Snap2GridDlg ( wx.Dialog ): self.m_radioBtnAO = wx.RadioButton( self, wx.ID_ANY, u"AuxOrigin reference", wx.DefaultPosition, wx.DefaultSize, 0 ) bSizer3.Add( self.m_radioBtnAO, 0, wx.ALL, 5 ) + self.m_radioBtnZero = wx.RadioButton( self, wx.ID_ANY, u"Top Left (0,0)", wx.DefaultPosition, wx.DefaultSize, 0 ) + bSizer3.Add( self.m_radioBtnZero, 0, wx.ALL, 5 ) + self.m_staticline2 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) bSizer3.Add( self.m_staticline2, 0, wx.EXPAND |wx.ALL, 5 ) diff --git a/Snap2Grid/snap2grid.py b/Snap2Grid/snap2grid.py index 9c68e7d..3f021ac 100644 --- a/Snap2Grid/snap2grid.py +++ b/Snap2Grid/snap2grid.py @@ -9,10 +9,9 @@ #import snaptogrid; import importlib; importlib.reload(snaptogrid) ### plugins errors -#import pcbnew -#pcbnew.GetWizardsBackTrace() +#import pcbnew;pcbnew.GetWizardsBackTrace() -__version__ = '1.0.2' +__version__ = '1.1.0' import sys, os import pcbnew import datetime @@ -109,15 +108,17 @@ class snap_to_grid( pcbnew.ActionPlugin ): grid = aParameters.m_comboBoxGrid.GetStringSelection() gridSizeMM = float(grid.split('mm')[0]) if aParameters.m_radioBtnGO.GetValue(): - use_grid_origin = True + use_grid = 'gridorigin' + elif aParameters.m_radioBtnAO.GetValue(): + use_grid = 'auxorigin' else: - use_grid_origin = False - snap2grid(gridSizeMM,use_grid_origin) + use_grid = 'topleft' + snap2grid(gridSizeMM,use_grid) else: None # Cancel ## -def snap2grid(gridSizeMM,use_grid_origin): +def snap2grid(gridSizeMM,use_grid): pcb = pcbnew.GetBoard() gridOrigin = pcb.GetGridOrigin() @@ -127,7 +128,7 @@ def snap2grid(gridSizeMM,use_grid_origin): #wxPoint(77470000, 135890000) for module in pcb.GetModules(): if module.IsSelected(): - if use_grid_origin: + if 'grid' in use_grid: mpx = module.GetPosition().x - gridOrigin.x mpy = module.GetPosition().y - gridOrigin.y #print(mpx,mpy) @@ -150,7 +151,7 @@ def snap2grid(gridSizeMM,use_grid_origin): #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 + elif 'aux' in use_grid: # AuxOrigin mpx = module.GetPosition().x - auxOrigin.x mpy = module.GetPosition().y - auxOrigin.y #print(mpx,mpy) @@ -173,6 +174,20 @@ def snap2grid(gridSizeMM,use_grid_origin): #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 + mpxOnG = int(mpx/FromMM(gridSizeMM))*FromMM(gridSizeMM) #+ auxOrigin.x + mpyOnG = int(mpy/FromMM(gridSizeMM))*FromMM(gridSizeMM) #+ auxOrigin.y + locked='' + if not module.IsLocked(): + module.SetPosition(wxPoint(mpxOnG,mpyOnG)) + else: + locked='LOCKED' + X_POS=str(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) Reference="{0:<10}".format(str(module.GetReference())) Value = str(module.GetValue()) Value=(Value[:17] + '..') if len(Value) > 19 else Value @@ -199,12 +214,15 @@ def snap2grid(gridSizeMM,use_grid_origin): if len(content)>0: content+=str(pcbnew.FromMM(gridSizeMM))+'\n' info='Snapped to grid: '+str(gridSizeMM)+'mm\n' - if use_grid_origin: + if 'grid' in use_grid: content+="Using GridOrigin as Ref"+'\n' info+="Using GridOrigin as Ref"+'\n' - else: + elif 'aux' in use_grid: content+="Using AuxOrigin as Ref"+'\n' info+="Using AuxOrigin as Ref"+'\n' + else: + content+="Using Top Left Origin as Ref"+'\n' + info+="Using Top Left Origin as Ref"+'\n' if debug: wxLogDebug(content,debug) #else: diff --git a/Snap2Grid/snap2grid.py.bak b/Snap2Grid/snap2grid.py.bak index 15ecdfc..0d50bc7 100644 --- a/Snap2Grid/snap2grid.py.bak +++ b/Snap2Grid/snap2grid.py.bak @@ -8,7 +8,11 @@ #import snaptogrid; import importlib; importlib.reload(snaptogrid) -__version__ = '1.0.1' +### plugins errors +#import pcbnew +#pcbnew.GetWizardsBackTrace() + +__version__ = '1.0.2' import sys, os import pcbnew import datetime @@ -17,11 +21,11 @@ from pcbnew import * use_grid_origin = True -gridReference = 2.54 #1.27 #mm pcbnew.FromMM(1.0) #0.1mm +gridReference = 0.1 #1.27 #mm pcbnew.FromMM(1.0) #0.1mm gridSizeMM = gridReference -#from . import Send2GridDlg +from . import Snap2GridDlg sys.path.append(os.path.dirname(__file__)) @@ -32,36 +36,38 @@ 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(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" ) -# +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" ) + # Python plugin stuff class snap_to_grid( pcbnew.ActionPlugin ): """ @@ -77,9 +83,9 @@ class snap_to_grid( pcbnew.ActionPlugin ): self.description should be a comprehensive description of the plugin """ - self.name = "Snap Selected Module(s) to Grid\nversion "+__version__ + self.name = "Snap Selected Footprint(s) to Grid \nversion "+__version__ self.category = "Modify PCB" - self.description = "Automaticaly Snap Selected Module(s) to Grid on an existing PCB" + self.description = "Automaticaly Snap Selected Footprint 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') @@ -89,111 +95,131 @@ 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() - 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: - 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) - if len (locked_fp)>0: - locked_fp+='\n'+'NOT Moved' - wxLogDebug(locked_fp,True) + 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: - wxLogDebug('No Modules Selected',True) - Refresh() - #return content + None # Cancel +## - #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() - +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)) + 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: + 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) + else: + wxLogDebug(info,True) + else: + wxLogDebug('No Modules Selected',True) + Refresh() + #return content + # wxLogDebug('showing Selected Tracks',debug) # wx.LogMessage('Select Tracks to calculate the Length\nor One Pad to select connected Tracks') #