From 92ccb766ab197157bba3c545cc721e7f20e46d2e Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 13 May 2019 13:02:58 +0200 Subject: [PATCH] Python fp wizards: fix a few issues in qrcode_footprint_wizard.py Fixes: lp:1828744 https://bugs.launchpad.net/kicad/+bug/1828744 --- .../python/plugins/qrcode_footprint_wizard.py | 55 ++++++++++++++----- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/pcbnew/python/plugins/qrcode_footprint_wizard.py b/pcbnew/python/plugins/qrcode_footprint_wizard.py index 8667ef9e6e..4ca33f6c87 100644 --- a/pcbnew/python/plugins/qrcode_footprint_wizard.py +++ b/pcbnew/python/plugins/qrcode_footprint_wizard.py @@ -29,8 +29,8 @@ class QRCodeWizard(FootprintWizardBase.FootprintWizard): GetValue = lambda self: self.module.Value().GetText() def GenerateParameterList(self): - self.AddParam("Barcode", "Pixel Width", self.uMM, 0.5, min_value=0.4) - self.AddParam("Barcode", "Border", self.uInteger, 0) + self.AddParam("Barcode", "Qr Pixel Width", self.uMM, 0.5, min_value=0.4) + self.AddParam("Barcode", "Border Margin (Px)", self.uInteger, 0) self.AddParam("Barcode", "Contents", self.uString, 'Example') self.AddParam("Barcode", "Negative", self.uBool, False) self.AddParam("Barcode", "Use SilkS layer", self.uBool, False) @@ -43,16 +43,19 @@ class QRCodeWizard(FootprintWizardBase.FootprintWizard): def CheckParameters(self): self.Barcode = str(self.parameters['Barcode']['Contents']) - self.X = self.parameters['Barcode']['Pixel Width'] + self.X = self.parameters['Barcode']['Qr Pixel Width'] self.negative = self.parameters['Barcode']['Negative'] self.UseSilkS = self.parameters['Barcode']['Use SilkS layer'] self.UseCu = self.parameters['Barcode']['Use Cu layer'] - self.border = int(self.parameters['Barcode']['Border']) + self.border = int(self.parameters['Barcode']['Border Margin (Px)']) self.textHeight = int(self.parameters['Caption']['Height']) self.textThickness = int(self.parameters['Caption']['Thickness']) self.textWidth = int(self.parameters['Caption']['Width']) self.module.Value().SetText(str(self.Barcode)) + if self.border < 0: + self.border = 0 + # Build Qrcode self.qr = qrcode.QRCode() self.qr.setTypeNumber(4) @@ -61,7 +64,7 @@ class QRCodeWizard(FootprintWizardBase.FootprintWizard): self.qr.addData(str(self.Barcode)) self.qr.make() - def drawSquareArea( self, layer, size, xposition, yposition): + def drawPixelSquareArea( self, layer, size, xposition, yposition): # creates a EDGE_MODULE of polygon type. The polygon is a square polygon = pcbnew.EDGE_MODULE(self.module) polygon.SetShape(pcbnew.S_POLYGON) @@ -76,23 +79,24 @@ class QRCodeWizard(FootprintWizardBase.FootprintWizard): return polygon - def _drawPixel(self, xposition, yposition): + def _drawQrPixel(self, xposition, yposition): # build a rectangular pad as a dot on copper layer, # and a polygon (a square) on silkscreen if self.UseCu: pad = pcbnew.D_PAD(self.module) pad.SetSize(pcbnew.wxSize(self.X, self.X)) - pad.SetPosition(pcbnew.wxPoint(xposition,yposition)) + pad_pos = pcbnew.wxPoint(xposition,yposition) + pad.SetPosition(pad_pos) + pad.SetPos0(pad_pos) pad.SetShape(pcbnew.PAD_SHAPE_RECT) pad.SetAttribute(pcbnew.PAD_ATTRIB_SMD) pad.SetName("") layerset = pcbnew.LSET() layerset.AddLayer(pcbnew.F_Cu) - layerset.AddLayer(pcbnew.F_Mask) pad.SetLayerSet( layerset ) self.module.Add(pad) if self.UseSilkS: - polygon=self.drawSquareArea(pcbnew.F_SilkS, self.X, xposition, yposition) + polygon=self.drawPixelSquareArea(pcbnew.F_SilkS, self.X, xposition, yposition) self.module.Add(polygon) @@ -102,6 +106,7 @@ class QRCodeWizard(FootprintWizardBase.FootprintWizard): sz = self.qr.modules.__len__() + (self.border * 2) arrayToDraw = [ [ 0 for a in range(sz) ] for b in range(sz) ] lineposition = self.border + for i in self.qr.modules: columnposition = self.border for j in i: @@ -114,9 +119,12 @@ class QRCodeWizard(FootprintWizardBase.FootprintWizard): # used many times... half_number_of_elements = arrayToDraw.__len__() / 2 + area_width = arrayToDraw.__len__()*self.X + self.border*2 # Center position of QrCode yposition = - int(half_number_of_elements * self.X) + area_height = arrayToDraw.__len__()*self.X + self.border*2 + for line in arrayToDraw: xposition = - int(half_number_of_elements * self.X) for pixel in line: @@ -130,19 +138,40 @@ class QRCodeWizard(FootprintWizardBase.FootprintWizard): # 1 | 1 | 0 # => Draw as Xor if self.negative != pixel: # Xor... - self._drawPixel(xposition, yposition) + self._drawQrPixel(xposition, yposition) xposition += self.X yposition += self.X - #int((5 + half_number_of_elements) * self.X)) + + # Add value field textPosition = int((self.textHeight) + ((1 + half_number_of_elements) * self.X)) - self.module.Value().SetPosition(pcbnew.wxPoint(0, - textPosition)) + pos = pcbnew.wxPoint(0, - textPosition) + self.module.Value().SetPosition(pos) + self.module.Value().SetPos0(pos) self.module.Value().SetTextHeight(self.textHeight) self.module.Value().SetTextWidth(self.textWidth) self.module.Value().SetThickness(self.textThickness) - self.module.Reference().SetPosition(pcbnew.wxPoint(0, textPosition)) + + # Add Reference field + pos = pcbnew.wxPoint(0, textPosition) + self.module.Reference().SetPosition(pos) + self.module.Reference().SetPos0(pos) self.module.Reference().SetTextHeight(self.textHeight) self.module.Reference().SetTextWidth(self.textWidth) self.module.Reference().SetThickness(self.textThickness) self.module.Value().SetLayer(pcbnew.F_SilkS) + #build the footprint courtyard + self.draw.SetLayer( pcbnew.F_CrtYd ) + self.draw.SetLineThickness( pcbnew.FromMM( 0.05 ) ) #Default per KLC F5.1 as of 12/2018 + cr_margin = pcbnew.FromMM( 0.1 ) + self.draw.Box(0, 0, area_width + cr_margin*2, area_height + cr_margin*2) + + #build the footprint solder mask: the solder mask covers all copper pads + if self.UseCu: + self.draw.SetLineThickness( 0 ) + sm_margin = pcbnew.FromMM( 0.05 ) + polygon=self.drawPixelSquareArea(pcbnew.F_Mask, area_width + sm_margin*2, 0, 0) + self.module.Add(polygon) + + QRCodeWizard().register()