Mi ci sono voluti un paio di giorni per digerire tutte queste informazioni, ma ho concluso con 2 soluzioni a questo problema. Descriverò entrambe le soluzioni qui.
Vorrei ringraziare Lorenzo e Rob Gilliom dal forum degli utenti di kicad, che mi hanno fornito tutte le idee e le informazioni di cui avevo bisogno per mettere insieme le soluzioni di seguito ( http://tech.groups.yahoo.com/ group / kicad-users / message / 15220 ).
= Opzione 1 =
Se vuoi importare un singolo segmento ellittico e progettare il resto della tavola in KiCAD, allora questo script Ruby è probabilmente il modo più semplice per andare:
#
# Generates an ellipse for Kicad. You have to copy the
# generated lines into an existing template inside a .kicad_pcb file
#
Xo = 200.0
Yo = 150.0
MAJOR = 60.0
MINOR = 40.0
N = 256 # Number of points on the ellipse
TEMPLATE = "(gr_line (start %.2f %.2f) (end %.2f %.2f) (layer Edge.Cuts) (width 0.15))\n"
step = Math::PI * 2 / N
points = Array.new
# Calculate coordinates for all N points
(0..N).each {|s|
x = Xo + MAJOR * Math::cos(step * s)
y = Yo - MINOR * Math::sin(step * s)
points << [x, y]
}
# For each pair of points, print a gr_line
points.each_cons(2) { |line|
printf(TEMPLATE, line[0][0], line[0][1], line[1][0], line[1][1])
}
Per utilizzare questo script, salva un .kicad_pcb
file vuoto in Kicad e inserisci le righe generate da questo script dopo l'ultima sezione prima del controvento di chiusura.
Apri il nuovo file della scheda in KiCAD e goditi la tua ellisse interpolata dai segmenti di linea :). L'uso di 256 punti rende l'ellisse così fluida che non si può dire che è composta da linee in KiCAD.
Se vuoi solo una parte dell'ellisse (un bordo del tuo PCB, per esempio), è banale aggiungere un rettangolo di selezione allo script sopra e scartare tutti i punti che si trovano al di fuori del riquadro.
= Opzione 2 =
Un altro approccio sarebbe quello di progettare la tua tavola interamente in Inkscape (o qualsiasi altra cosa che possa esportare grafica vettoriale) e trovare un modo per importarla in KiCAD.
Lorenzo ha fornito una soluzione che può andare da Inkscape a Gerber qui: http://tech.groups.yahoo.com/group/kicad-users/message/15229
Sono stato quindi in grado di basarmi sulla soluzione di Lorenzo per creare uno script Ruby che bypassa lo stage Gerber e genera direttamente le righe del file della scheda KiCAD.
Il processo procede in questo modo:
- Progetta la tua tavola in Inkscape
- Esporta in HPGL
- Convertire HPGL in GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Genera linee di file di bordo:
gpt2pcbnew file.hpgl.gpt
Ecco la fonte per lo gpt2pcbnew
script:
#
# Convert a GPT file created by hp2xx to Pcbnew gr_lines
#
# That's the line we'll write into the board file
TEMPLATE = "(gr_line (start %.5f %.5f) (end %.5f %.5f) (layer Edge.Cuts) (width 0.15))\n"
gpt_file = ARGV.shift
segments = Array.new
File.open(gpt_file, "r") do |file|
# Start a new segment
segment = Array.new
while (line = file.gets)
unless ( line.strip! =~ /^#/ ) # Skip comments
if ( line =~ /([0-9.]+) *([0-9.]+)/ )
# Found coordinates. Save this point in the current segment
#
segment << line.split
else
# No numbers on a line means that we are done drawing the segment,
# so we need to "lift up the pen" and move to the next segment
#
# Add current segment to the list of segments
segments << segment unless segment.empty?
# Start a new segment
segment = Array.new
end
end
end
# Add the last segment we read
segments << segment unless segment.empty?
end
# Print out gr_lines for all the segments
segments.each { |segment|
# For each pair of points print a line
segment.each_cons(2) { |line|
printf(TEMPLATE, line[0][0], "-#{line[0][1]}", line[1][0], "-#{line[1][1]}")
}
}
Proprio come nell'Opzione 1, le linee generate vanno in un file di scheda vuoto salvato in KiCAD.
Questa soluzione sfrutta il fatto che il formato HPGL è molto simile nella sua costruzione ai file Gerber, nel senso che è una serie di coordinate con "pen up" o "pen down", che corrisponde ai codici D01 e D02 in Gerber.
In questo caso, quindi, tutto il duro lavoro di conversione da spline di Bezier a segmenti di linea viene svolto da Inkscape.
= Limitazioni dell'opzione 2 =
Ci sono un paio di limitazioni con questo approccio:
- Sembra che Inkscape non possa esportare rettangoli in HPGL. Ovviamente puoi ovviare a questo problema costruendo i tuoi rettangoli.
- Al momento non sono in grado di ottenere correttamente le dimensioni degli oggetti esportati. Gli oggetti finiscono all'incirca due volte più grandi in KiCAD. Lavorerò presto su una soluzione a questo.