示例#1
0
def remove_back_keepout(pattern, corners):
    """ Remove keepout area from under the pads.
        @param pattern not used
        @param corners number of corners in approximate circle
    """
    remove_areas = []
    board = pcbnew.GetBoard()
    for i in range(board.GetAreaCount()):
        area = board.GetArea(i)
        if area.GetNumCorners() == corners:
            remove_areas.append(area)
    for area in remove_areas:
        board.Remove(area)
示例#2
0
    def Run(self):
        dlg = SVG2GraphicDialog()
        res = dlg.ShowModal()

        if res == wx.ID_OK:
            print("ok")

            # do it.
            SVG2Graphic(dlg.file_picker.value,
                     pcbnew.GetBoard(),
                     dlg.basic_layer.valueint)
        else:
            print("cancel")
示例#3
0
 def Run(self):
     pcb = pcbnew.GetBoard()
     tracks = pcb.GetTracks()
     tracks_cp = list(tracks)
     l = len(tracks_cp)
     #for track in tracks_cp:
     for i in range(l):
         if tracks_cp[i].Type() == pcbnew.PCB_VIA_T:
             #if track.Type() == pcbnew.PCB_VIA_T:
             #pcb.RemoveNative(track)
             pcb.RemoveNative(tracks_cp[i])
             #pcb.DeleteNative(tracks_cp[i]) #this is making 'Segmentation fault (core dumped)' on k 5.99
     pcbnew.Refresh()
def GetSelectedDrawings():
    """Retrieves only the selected drawings

    Returns:
        List of drawings:
    """
    selected = []
    drawings = pcbnew.GetBoard().GetDrawings()
    for idx,drawing in enumerate(drawings):
        if drawing.IsSelected():
            selected.append(drawing)
    LogDebug("Getting {} selected objects".format(idx))
    return selected
示例#5
0
 def loadset(self,e):
     """Load a viewset based on the object (e) clicked."""
     # self._message.SetLabel("m1")
     # return
     # The widget is the object that was clicked.
     widget = e.GetEventObject()
     #wx.MessageDialog(widget,widget.GetLabel(),style=wx.OK).ShowModal()
     # Find that widget in the layersetstack.
     element = filter (lambda x: x[2]==widget,self._layersetstack)
     if not element:
         element = filter (lambda x: x[2]==widget,self._layersetsaved)
     element = element[0]
     # The the visible layers according to that element in the stack.        
     if element[0] is not None:
         pcbnew.GetBoard().SetVisibleLayers(element[0])
     if element[1] is not None:
         pcbnew.GetBoard().SetVisibleElements(element[1])
     try:
         pcbnew.UpdateUserInterface()
         self._message.SetLabel(element[2].GetLabel())
     except:
         self._message.SetLabel("Change Canvas to view")
示例#6
0
    def Run(self):
        #self.pcb = GetBoard()
        pcb = pcbnew.GetBoard()
        ln = 0.
        pads = []
        tracks = getSelTracks(pcb)
        if len(tracks) > 0:  #selected tracks >0
            for item in tracks:
                ln += (item.GetLength())
        else:
            for item in pcb.GetPads():
                if item.IsSelected():
                    pads.append(item)
            if len(pads) == 1:
                tracks = []
                tracks = find_Tracks_inNet_Pad(pcb, pads[0])
                c_tracks = get_contiguous_tracks(pcb, tracks, pads[0])
                tracks = c_tracks
                # selectListTracks(pcb,tracks) # this seems not to allow deselecting
                ln = getTracksListLength(pcb, tracks)
                selectListTracks(pcb, tracks)
                pcbnew.Refresh()

            #else:
            #    wx.LogMessage("Solder Mask Expander:\nSelect Tracks\nor One Pad to select connected Tracks")
        if ln > 0:
            #wx.LogMessage('Selected Traces Length: {0:.3f} mm'.format(ToMM(ln)))
            wxLogDebug('showing Selected Tracks', debug)
            #wx.LogMessage('debug'+str(debug))
            msg = u"Selected Tracks Length:\n{0:.3f} mm \u2714".format(
                ToMM(ln))
            if len(tracks) == 1:
                angle = (math.degrees(getTrackAngleRadians(tracks[0])))
                msg += u"\nTrack Angle: {0:.1f} deg \u2714".format(angle)
            #selectListTracks(pcb,tracks)
            #pcbnew.Refresh()
            wdlg = wx.MessageDialog(None, msg, 'Info message',
                                    wx.OK | wx.ICON_INFORMATION)
            result = wdlg.ShowModal()
            if result == wx.ID_OK:
                pass
            clearListTracks(pcb, tracks, True)
            #timer = threading.Timer(1000, clearListTracks(pcb,tracks,True))
            #timer.start()
            #blocking dialogw
            #wx.MessageBox("showing selection", 'Info', wx.OK | wx.ICON_INFORMATION)
            #clearListTracks(pcb,tracks)
        elif len(pads) != 1:
            wx.LogMessage(
                'Select Tracks to calculate the Length\nor One Pad to select connected Tracks'
            )
示例#7
0
def createZip(
        pcbServiceName,
        useAuxOrigin,
        excellonFormat,
        gerberProtelExtensions,
        layerRenameRules,
        drillMergeNpth,
        drillExtensionRenameTo,
        drillMinimalHeader
):
    board = pcbnew.GetBoard()
    boardFileName = board.GetFileName()
    boardDirPath = os.path.dirname(boardFileName)
    boardProjectName = (os.path.splitext(os.path.basename(boardFileName)))[0]

    outputDirPath = '%s/%s' % (boardDirPath, outputDirName)
    gerberDirName = '%s_for_%s' % (boardProjectName, pcbServiceName)
    gerberDirPath = '%s/%s' % (outputDirPath, gerberDirName)
    # timeStamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
    # zipFilePath = '%s/%s_%s.zip' % (outputDirPath, timeStamp, gerberDirName)
    zipFilePath = '%s/%s.zip' % (outputDirPath, gerberDirName)

    if not os.path.exists(outputDirPath):
        makeDir(outputDirPath)
    removeDirIfExists(gerberDirPath)
    makeDir(gerberDirPath)

    plotLayers(
        board = board,
        gerberDirPath = gerberDirPath,
        useAuxOrigin = useAuxOrigin,
        gerberProtelExtensions = gerberProtelExtensions,
        layerRenameRules = layerRenameRules,
        boardProjectName = boardProjectName,
    )

    plotDrill(
        board = board,
        gerberDirPath = gerberDirPath,
        boardProjectName = boardProjectName,
        excellonFormat = excellonFormat,
        useAuxOrigin = useAuxOrigin,
        drillMinimalHeader = drillMinimalHeader,
        drillMergeNpth = drillMergeNpth,
        drillExtensionRenameTo = drillExtensionRenameTo,
    )

    removeFileIfExists(zipFilePath)
    shutil.make_archive(os.path.splitext(zipFilePath)[0], 'zip', outputDirPath, gerberDirName)

    return zipFilePath
示例#8
0
    def Run(self):
        # load board
        board = pcbnew.GetBoard()

        # go to the project folder - so that log will be in proper place
        os.chdir(os.path.dirname(os.path.abspath(board.GetFileName())))

        # Remove all handlers associated with the root logger object.
        for handler in logging.root.handlers[:]:
            logging.root.removeHandler(handler)

        # set up logger
        logging.basicConfig(
            level=logging.DEBUG,
            filename="length_stats.log",
            filemode='w',
            format='%(asctime)s %(name)s %(lineno)d:%(message)s',
            datefmt='%m-%d %H:%M:%S')
        logger = logging.getLogger(__name__)
        logger.info("Plugin executed on: " + repr(sys.platform))
        logger.info("Plugin executed with python version: " +
                    repr(sys.version))
        logger.info("KiCad build version: " + BUILD_VERSION)
        logger.info("Length stats plugin version: " + VERSION + " started")

        stdout_logger = logging.getLogger('STDOUT')
        sl_out = StreamToLogger(stdout_logger, logging.INFO)
        sys.stdout = sl_out

        stderr_logger = logging.getLogger('STDERR')
        sl_err = StreamToLogger(stderr_logger, logging.ERROR)
        sys.stderr = sl_err

        _pcbnew_frame = [
            x for x in wx.GetTopLevelWindows()
            if x.GetTitle().lower().startswith('pcbnew')
        ][0]

        # find all selected tracks and pads
        nets = set()
        selected_tracks = [x for x in board.GetTracks() if x.IsSelected()]

        nets.update([track.GetNetname() for track in selected_tracks])

        modules = board.GetModules()
        for mod in modules:
            pads = mod.Pads()
            nets.update([pad.GetNetname() for pad in pads if pad.IsSelected()])

        dlg = LenghtStatsDialog(_pcbnew_frame, board, list(nets), logger)
        dlg.Show()
示例#9
0
    def Run(self):
        #import pcbnew
        #pcb = pcbnew.GetBoard()
        # net_name = "GND"
        #aParameters = SolderExpanderDlg(None)
        _pcbnew_frame = [
            x for x in wx.GetTopLevelWindows()
            if x.GetTitle().lower().startswith('pcbnew')
        ][0]
        aParameters = SolderExpander_Dlg(_pcbnew_frame)
        aParameters.m_clearanceMM.SetValue("0.2")
        aParameters.m_bitmap1.SetBitmap(
            wx.Bitmap(
                os.path.join(os.path.dirname(os.path.realpath(__file__)),
                             "soldermask_clearance_help.png")))
        modal_result = aParameters.ShowModal()
        clearance = FromMM(
            self.CheckInput(aParameters.m_clearanceMM.GetValue(),
                            "extra clearance from track width"))
        if clearance is not None:
            pcb = pcbnew.GetBoard()
            if modal_result == wx.ID_OK:
                #pcb = pcbnew.GetBoard()
                tracks = getSelTracks(pcb)
                if len(tracks) > 0:  #selected tracks >0
                    solderExpander(pcb, tracks, clearance)
                else:
                    pads = []
                    for item in pcb.GetPads():
                        if item.IsSelected():
                            pads.append(item)
                    if len(pads) == 1:
                        tracks = []
                        tracks = find_Tracks_inNet_Pad(pcb, pads[0])
                        c_tracks = get_contiguous_tracks(pcb, tracks, pads[0])
                        solderExpander(pcb, c_tracks, clearance)
                    else:
                        wx.LogMessage(
                            "Solder Mask Expander:\nSelect Tracks\nor One Pad to select connected Tracks"
                        )

                #solderExpander(clearance)
            elif modal_result == wx.ID_DELETE:
                Delete_Segments(pcb)
                #wx.LogMessage('Solder Mask Segments on Track Net Deleted')
            else:
                None  # Cancel
        else:
            None  # Invalid input
        aParameters.Destroy()
示例#10
0
    def Run(self):
        from ..version import version
        self.version = version
        config = Config(self.version)
        board = pcbnew.GetBoard()
        pcb_file_name = board.GetFileName()

        logger = ibom.Logger()
        if not pcb_file_name:
            logger.error('Please save the board file before generating BOM.')
            return

        parser = PcbnewParser(pcb_file_name, config, logger, board)
        ibom.run_with_dialog(parser, config, logger)
示例#11
0
 def _conv_fill(fill, net_code):
     conv_pts = list(map(ToPCB._conv_point, fill.points))
     area = pcb.GetBoard().InsertArea(net_code,
                                      pcb.GetBoard().GetAreaCount(),
                                      fill.layer, conv_pts[0].x,
                                      conv_pts[0].y,
                                      pcb.CPolyLine.DIAGONAL_EDGE)
     area.SetPadConnection(pcb.PAD_ZONE_CONN_THERMAL if fill.
                           thermal else pcb.PAD_ZONE_CONN_FULL)
     outline = area.Outline()
     for pt in conv_pts[1:]:
         if getattr(outline, 'AppendCorner', None) is None:
             # Kicad nightly
             outline.Append(pt.x, pt.y)
         else:
             outline.AppendCorner(pt.x, pt.y)
     if getattr(outline, 'CloseLastContour', None) is not None:
         outline.CloseLastContour()
     if fill.fillet_radius is not None and fill.fillet_radius > 0.:
         area.SetCornerSmoothingType(pcb.ZONE_SETTINGS.SMOOTHING_FILLET)
         area.SetCornerRadius(int(fill.fillet_radius))
     # area.BuildFilledSolidAreasPolygons(pcb.GetBoard())
     area.FillSegments()
示例#12
0
def Layout():
    board = pcbnew.GetBoard()
    fname = path.join(path.dirname(board.GetFileName()), "layout.tsv")
    with open(fname) as f:
        r = csv.reader(f, delimiter='\t')
        data = [row for row in r]
    for d in data:
        m = board.FindModuleByReference(d[0])
        if m is not None:
            p = pcbnew.wxPointMM(float(d[1]), float(d[2]))
            m.SetPosition(p)
            if len(d) >= 4:
                m.SetOrientation(float(d[3]) * 10)
    pcbnew.Refresh()
示例#13
0
    def Run(self):
        global delete_before_connect
        #self.pcb = GetBoard()
        # net_name = "GND"
        pcb = pcbnew.GetBoard()

        #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)
        if hasattr(pcb, 'm_Uuid'):
            aParameters.m_buttonDelete.Disable()
            aParameters.m_checkBoxDelete.Disable()
        #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 aParameters.m_checkBoxDelete.IsChecked():
            delete_before_connect = True
        else:
            delete_before_connect = False
        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()
示例#14
0
文件: test.py 项目: Pokour/kicad
def write_text():

    board = pcbnew.GetBoard()
    layertable = get_layertable()
    x = 0
    for y in range(0, 100 * SCALE, SCALE * 10):
        text = pcbnew.TEXTE_PCB(board)
        text.SetText("HOLA: %d, %d" % (x, y))
        text.SetPosition(pcbnew.wxPoint(x, y))
        text.SetTextSize(pcbnew.wxSize(SCALE * 8, SCALE * 8))
        text.SetThickness(SCALE * 1)
        text.SetLayer(layertable["F.SilkS"])
        board.Add(text)
    pcbnew.Refresh()
示例#15
0
 def __init__(self, board):
     """Init the brand new instance"""
     super(AddNetDialog, self).__init__(None)
     self.SetTitle("AddNet v{0}".format(__version__))
     self.Bind(wx.EVT_CLOSE, self.onCloseWindow)
     self.m_cbModule.Bind(wx.EVT_COMBOBOX, self.onModuleSelect)
     self.m_cbPad.Bind(wx.EVT_COMBOBOX, self.onPadSelect)
     self.m_btnCancel.Bind(wx.EVT_BUTTON, self.onCloseWindow)
     self.m_btnOk.Bind(wx.EVT_BUTTON, self.onProcessAction)
     self.board = pcbnew.GetBoard()
     self.modules = self.board.GetModules()
     self.SelectedModule = None
     self.SelectedPad = None
     self.PopulateModules()
示例#16
0
文件: test.py 项目: Pokour/kicad
def add_module(x, y):

    io = pcbnew.PCB_IO()
    board = pcbnew.GetBoard()
    layertable = get_layertable()

    footprint_lib = "/home/mattvenn/work/nfc-ring/python/fp.pretty"

    mod = io.FootprintLoad(footprint_lib, "matt")
    pt = pcbnew.wxPoint(x, y)
    mod.SetPosition(pt)
    board.Add(mod)

    pcbnew.Refresh()
    def Run(self):
        _pcbnew_frame = \
            filter(lambda w: w.GetTitle().lower().startswith('pcbnew'),
                   wx.GetTopLevelWindows()
                   )[0]

        # load board
        board = pcbnew.GetBoard()
                    
        # check if there is anything selected
        all_tracks = board.GetTracks()
        selected_tracks = filter(lambda x: x.IsSelected(), all_tracks)
        
        all_zones = []
        for zoneid in range(board.GetAreaCount()):
            all_zones.append(board.GetArea(zoneid))
        selected_zones = filter(lambda x: x.IsSelected(), all_zones)
        
        all_modules = board.GetModules()
        selected_modules = filter(lambda x: x.IsSelected(), all_modules)

        # if anything is selected
        if len(selected_tracks) > 0 or len(selected_zones) > 0 or len(selected_modules) > 0:
            # show dialog
            dlg = DeleteLayoutDialog(_pcbnew_frame)
            res = dlg.ShowModal()
            
            # if user clicked OK
            if res == wx.ID_OK:
                if dlg.chkbox_tracks.GetValue():
                    for track in selected_tracks:
                        board.RemoveNative(track)
                        
                if dlg.chkbox_zones.GetValue():
                    for zone in selected_zones:
                        board.RemoveNative(zone)
                
                if dlg.chkbox_modules.GetValue():
                    for mod in selected_modules:
                        board.RemoveNative(mod)

        # if nothing is selected a messagebox
        else:
            caption = 'Delete selected'
            message = "Nothing is selected !"
            dlg = wx.MessageDialog(_pcbnew_frame, message, caption, wx.OK | wx.ICON_INFORMATION)
            dlg.ShowModal()
            dlg.Destroy()

        pass
示例#18
0
 def Run(self):
     #self.pcb = GetBoard()
     pcbObj = pcbnew.GetBoard()
     wx.LogMessage("ciao1")
     viaOffset = pcbnew.FromMM(2)
     viaPitch =  pcbnew.FromMM(1)
     netId = pcbObj.GetHighLightNetCode()
     wx.LogMessage(str(netId))
     layertable = {}
     numlayers = pcbnew.PCB_LAYER_ID_COUNT
     for i in range(numlayers):
         layertable[pcbnew.GetBoard().GetLayerName(i)] = i
     toplayer    = layertable['F.Cu']
     bottomlayer = layertable['B.Cu']
 
     if (netId != -1):
         netTracks = pcbObj.TracksInNet(netId)
         wx.LogMessage("ciao1")
         trackList = [ [[t.GetStart()[0], t.GetStart()[1]], [t.GetEnd()[0], t.GetEnd()[1]]] for t in netTracks ]
         viaPoints = generateViaFence(trackList, viaOffset, viaPitch)
         for track in trackList:
             ## plt.plot(np.array(track).T[0], np.array(track).T[1], linewidth=1)
             #print track
             wx.LogMessage(str(track))
         for via in viaPoints:
             ## plt.plot(via[0], via[1], 'o', markersize=10)
             newvia = pcbnew.VIA(pcbObj)
             pcbObj.Add(newvia)
             #newvia.SetNet(netId)
             #nc = net.GetNetClass()
             #newvia.SetWidth(nc.GetViaDiameter())
             newvia.SetPosition(wxPoint(via[0],via[1]))   #pad.GetCenter())
             newvia.SetLayerPair(toplayer, bottomlayer)
             newvia.SetViaType(pcbnew.VIA_THROUGH)
             wx.LogMessage("via @: "+str(via[0])+";"+str(via[1]))
             #print via[0]; print via[1])
         wx.LogMessage("ciao4")
示例#19
0
def remove_gnd_tracks(pattern):
    """ Remove GND tracks between GND pads in each modules.
        @param pattern not used
    """
    board = pcbnew.GetBoard()
    center_gnd_positions = [(sw.GetPosition().x, sw.GetPosition().y)
                            for sw in ref_iter(board, pattern)]
    remove_tracks = []
    for track in board.GetTracks():
        pos = track.GetStart()
        start_pos = pos.x, pos.y
        if start_pos in center_gnd_positions:
            remove_tracks.append(track)
    for track in remove_tracks:
        board.Remove(track)
 def OnFnished(self,event):
     board = pcbnew.GetBoard()
     ox,oy = board.GetAuxOrigin()
     for row in self.selected_attribute_parser:
         mod = board.FindModuleByReference(row["ref"])
         if mod is not None:
             mod.SetPosition(pcbnew.wxPoint(int(ox+(1000000*row["x"])),int(oy+(-1000000*row["y"]))))
             mod.SetOrientationDegrees(row["rotation"])
             if mod.IsFlipped():
                 if row["side"] == pick_place.attribute_parser.Side.TOP:
                     mod.Flip(mod.GetPosition())
             else:
                 if row["side"] == pick_place.attribute_parser.Side.BOTTOM:
                     mod.Flip(mod.GetPosition())
     pcbnew.Refresh()
示例#21
0
def CopyCourtyard(refs = None, brd = None, layer = pcbnew.F_Paste):
    ''' Copy board modules courtyard to the destination layer
    '''
    if not brd:
        brd = pcbnew.GetBoard()
    if not refs:
        for m in brd.GetModules():
            if m.GetReference().find('J') == -1:
                CopyModuleCourtyard(m, brd, layer)
    else:
        for ref in MakeRefs(refs):
            m = brd.FindModuleByReference(ref)
            if m:
                CopyModuleCourtyard(m, brd, layer)
    pcbnew.Refresh()
 def __init__(self,fname=None):
     if fname == None:
         self.pcb = pcbnew.GetBoard()
     else:
         self.pcb=pcbnew.LoadBoard(fname)
     # Create new pcb layout with suffix "front-panel"
     self.panelFname=self.pcb.GetFileName().split(".kicad_pcb")[0]+"-front-panel.kicad_pcb"
     with open(self.pcb.GetFileName(),"r") as f:
         firstLine=f.readline()+")"
     #"x" --> No overwrite
     #"w" --> Overwrite
     with open(self.panelFname,"w") as f:
         f.write(firstLine)
     self.fp=pcbnew.LoadBoard(self.panelFname)
     self.getDimensions()
    def Run(self):
        msg = "Loading Board\n"
        board = pcbnew.GetBoard()

        bbox = find_pcb_outline_bbox(board)
        center = bbox.Centre()

        # gndnet = find_net("GND")
        #remove all other nets
        #remove_all_nets_but("GND")

        msg += convert_and_delete_modules(center.x, pcbnew.F_Cu, board)

        msg += "\n"
        msg += "You may need to refresh the display now. Select Legacy mode, then Modern mode" + "\n"
示例#24
0
文件: test.py 项目: Pokour/kicad
def add_vias():
    board = pcbnew.GetBoard()
    layertable = get_layertable()

    layertable = get_layertable()
    for x in range(0, 10 * SCALE, SCALE * 2):
        for y in range(0, 10 * SCALE, SCALE * 2):
            newvia = pcbnew.VIA(board)
            board.Add(newvia)
            newvia.SetLayerPair(layertable["F.Cu"], layertable["B.Cu"])
            newvia.SetPosition(pcbnew.wxPoint(x, y))
            newvia.SetViaType(pcbnew.VIA_THROUGH)
            newvia.SetWidth(1 * SCALE)

    pcbnew.Refresh()
示例#25
0
def PlaceHoleCenter(typex=1, dim_cor=10):
    global g_startx
    global g_starty
    global g_width
    global g_height
    global hole_type
    x_coord = [0, 0]
    y_coord = [0, 0]
    if typex == 1:
        horizont = 1
        vertic = 1
    elif typex == 2:
        horizont = 1
        vertic = 0
    else:
        horizont = 0
        vertic = 1

    #horizontal holes
    board = pcbnew.GetBoard()
    global footprint_lib
    io = pcbnew.PCB_IO()
    point = pcbnew.wxPoint(0, 0)

    x_coord[0] = g_startx + g_width / 2
    y_coord[0] = g_starty + dim_cor
    y_coord[1] = g_starty + g_height - dim_cor
    if horizont == 1:
        for yy in y_coord:
            mod = io.FootprintLoad(footprint_lib, hole_type)
            point.x = GetCoordinates(x_coord[0])
            point.y = GetCoordinates(yy)
            mod.SetPosition(point)
            board.Add(mod)

    #vertical holes
    x_coord[0] = g_startx + dim_cor
    x_coord[1] = g_startx + g_width - dim_cor
    y_coord[0] = g_starty + g_height / 2
    if vertic == 1:
        for xx in x_coord:
            mod = io.FootprintLoad(footprint_lib, hole_type)
            point.x = GetCoordinates(xx)
            point.y = GetCoordinates(y_coord[0])
            mod.SetPosition(point)
            board.Add(mod)

    pcbnew.Refresh()
示例#26
0
def CollectItemByName(filename=None):
    try:
        brd = pcbnew.LoadBoard(filename)
    except IOError:
        print 'Can not open ', filename
        filename = os.path.split(
            pcbnew.GetBoard().GetFileName())[0] + '\\' + filename
        print 'Try to open ', filename
    try:
        brd = pcbnew.LoadBoard(filename)
    except IOError:
        print 'Can not open ', filename
        return None
    bi = BoardItems()
    bi.Collect(brd)
    return bi
示例#27
0
def GetOtherBoard(brd):
    r = brd
    curbrd = pcbnew.GetBoard()
    s = curbrd.GetFileName()
    if not brd:
        brd = curbrd
    elif type(brd) == str:
        if os.path.exists(brd):
            brd = pcbnew.LoadBoard(brd)
        elif os.path.exists(s[0:s.rfind('/')] + '/' + brd):
            brd = pcbnew.LoadBoard(s[0:s.rfind('/')] + '/' + brd)
        else:
            return None
    else:
        return brd
    return brd
示例#28
0
def draw():
    board = pcbnew.GetBoard()
    drawing = board.GetDrawings()
    offset = 1000000
    for s, j in [(-1, 0), (1, offset / 2)]:
        for i in range(10):
            arc = pcbnew.DRAWSEGMENT(board)
            board.Add(arc)
            arc.SetShape(pcbnew.S_ARC)
            arc.SetCenter(pcbnew.wxPoint(j, 0))
            arc.SetArcStart(pcbnew.wxPoint(s * (1000000 + offset * i), 0))
            arc.SetAngle(1800)
            arc.SetLayer(0)
            arc.SetWidth(200000)
    board.Save(board.GetFileName())
    pcbnew.Refresh()
示例#29
0
    def OnSMDpos(self, evt):
        num = self.list.GetCount()
        self.listData = []

        for i in range(num):
            listvalue = self.list.GetString(i)
            self.listData.append(listvalue)

        board = pcbnew.GetBoard()
        posinfo, headinfo = KC().generalPosition(board)
        posinfo_filter = IgnoreHandle(self.listData, posinfo, VAL)

        KC().save_placement_info(board, posinfo_filter, headinfo, 'SMT')
        dlg = wx.MessageDialog(self, "完成", "aa", style=wx.OK)
        dlg.ShowModal()
        dlg.Destroy()
def MoveToLayer(pcb,layerId):
    found_selected=False
    for drw in pcb.GetDrawings():
        if drw.IsSelected():
            drw.SetLayer(layerId)
            found_selected=True
    
    if found_selected!=True:
        LogMsg="select drawings to be moved to new layer\n"
        LogMsg+="use GAL for selecting lines"
        wx.LogMessage(LogMsg)
    else:
        pcbnew.Refresh()
        layerName = pcbnew.GetBoard().GetLayerName(layerId)
        LogMsg="selected drawings moved to "+layerName+" layer"
        wx.LogMessage(LogMsg)