Skip to content
odb_data.py 1.88 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):
nats's avatar
nats committed
	# Generate the component file and package file
nats's avatar
nats committed
	modules = b.GetModules()
	for m in modules:
nats's avatar
nats committed
		print m.GetName()
		create_package(m)
nats's avatar
nats committed
		create_component(m)

def create_component(m):
	# Create module section in file
	
nats's avatar
nats committed
def create_package(m):
	# Add package entry to EDA file
	# Need to get the footprint name / size / pad
	# Check if already existing
	# If not create it
	# return the dict entry
	return
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']
nats's avatar
nats committed
        return tuple(self.layer_names[i] for i in ids)