Skip to content
odb_data.py 1.77 KiB
Newer Older
nats's avatar
nats committed
import os
import sys

from pcbnew import *

def gen_data_file(b):
nats's avatar
nats committed
    
    # We get all layer
    b.SetVisibleAlls()
    ls = b.GetVisibleLayers()
    
    # Use awful black magic things you shouldn't see
    compat = NewApiCompat()
    layers_list = compat._from_LayerSet(ls)
    
    s_layers = "LYR "
    for l in layers_list:
        s_layers = s_layers + l + " "
    
def gen_comp_file(b):
	# We get Component file
	modules = b.GetModules()
	for m in modules:
		pos = m.GetPosition()
		ori = m.GetOrientation()
		ref = m.GetReference()
		nb_pads = m.GetPadCount()
		pads = m.Pads()
		print ref
		print nb_pads
		print pos
		print ori
		for p in pads:
			print p.GetPosition()
		
nats's avatar
nats committed

class NewApiCompat:
    #Please remove this code when new kicad python API will be the standard
    #Please DO NOT USE THIS CLASS IN OTHER SCRIPT WITHOUT ASKING
    #Ask on IRC if not sure.
    def __init__(self):
        self.layer_dict = {BOARD_GetStandardLayerName(n):n for n in range(LAYER_ID_COUNT)}
        self.layer_names = {s:n for n, s in self.layer_dict.iteritems()}
nats's avatar
nats committed
        for l in self.layer_dict:
            print l
        #self.layer_odb_name = 
nats's avatar
nats committed

    def _get_layer(self,s):
        """Get layer id from layer name"""
        return self.layer_dict[s]

    def _to_LayerSet(self,layers):
        """Create LayerSet used for defining pad layers"""
        bitset = 0
        for l in layers:
            bitset |= 1 << self._get_layer(l)
        hexset = '{0:013x}'.format(bitset)
        lset = pcbnew.LSET()
        lset.ParseHex(hexset, len(hexset))
        return lset

    def _from_LayerSet(self,layerset):
        mask = [c for c in layerset.FmtBin() if c in ('0','1')]
        mask.reverse()
        ids = [i for i, c in enumerate(mask) if c == '1']
        return tuple(self.layer_names[i] for i in ids)