Levei alguns dias para digerir todas essas informações, mas terminei com duas soluções para esse problema. Vou descrever as duas soluções aqui.
Gostaria de agradecer a Lorenzo e Rob Gilliom, do fórum kicad-users, que me forneceram todas as idéias e informações necessárias para reunir as soluções abaixo ( http://tech.groups.yahoo.com/ group / kicad-users / message / 15220 ).
= Opção 1 =
Se você deseja importar um único segmento elíptico e projetar o restante do quadro no KiCAD, esse script Ruby é provavelmente o caminho mais fácil:
#
# 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])
}
Para usar esse script, salve um .kicad_pcb
arquivo em branco no Kicad e insira as linhas geradas por esse script após a última seção antes da chave de fechamento.
Abra o novo arquivo de quadro no KiCAD e aproveite sua elipse interpolada por segmentos de linha :). Usar 256 pontos torna a elipse tão suave que você não pode dizer que consiste em linhas no KiCAD.
Se você deseja apenas uma parte da elipse (uma borda da sua PCB, por exemplo), é trivial adicionar uma caixa delimitadora ao script acima e descartar todos os pontos que estão fora da caixa.
= Opção 2 =
Outra abordagem seria projetar sua placa inteiramente no Inkscape (ou qualquer outra coisa que possa exportar gráficos vetoriais) e encontrar uma maneira de importá-la para o KiCAD.
Lorenzo forneceu uma solução que pode ir do Inkscape para o Gerber aqui: http://tech.groups.yahoo.com/group/kicad-users/message/15229
Eu fui capaz de desenvolver a solução de Lorenzo para criar um script Ruby que ignora o estágio Gerber e gera diretamente as linhas de arquivo da placa KiCAD.
O processo é assim:
- Crie sua prancha no Inkscape
- Exportar para HPGL
- Converta HPGL para GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Gere linhas de arquivo da placa:
gpt2pcbnew file.hpgl.gpt
Aqui está a fonte do 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]}")
}
}
Assim como na Opção 1, as linhas geradas entram em um arquivo de quadro em branco salvo no KiCAD.
Essa solução aproveita o fato de o formato HPGL ser muito semelhante em sua construção aos arquivos Gerber, no sentido de que é uma série de coordenadas com "caneta para cima" ou "caneta para baixo", o que corresponde aos códigos D01 e D02 no Gerber.
Portanto, todo o trabalho árduo de converter splines de bezier em segmentos de linha é feito pelo Inkscape nesse caso.
= Limitações da opção 2 =
Existem algumas limitações nessa abordagem:
- Parece que o Inkscape não pode exportar retângulos para o HPGL. Obviamente, você pode contornar isso construindo seus próprios retângulos.
- No momento, não consigo acertar os tamanhos dos objetos exportados. Os objetos terminam com o dobro do tamanho do KiCAD. Estarei trabalhando em uma solução para isso em breve.