Me tomó un par de días para digerir toda esta información, pero terminé con 2 soluciones a este problema. Describiré ambas soluciones aquí.
Me gustaría agradecer a Lorenzo y Rob Gilliom del foro de usuarios de kicad, que me han proporcionado todas las ideas e información que necesitaba para reunir las soluciones a continuación ( enlace ).
= Opción 1 =
Si desea importar un solo segmento elíptico y diseñar el resto de la placa en KiCAD, este script de Ruby es probablemente la forma más fácil de hacerlo:
#
# 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 este script, simplemente guarde un archivo .kicad_pcb
en Kicad y luego inserte las líneas generadas por este script después de la última sección antes de la llave de cierre.
Abra el nuevo archivo de placa en KiCAD y disfrute de su elipse interpolada por segmentos de línea :). El uso de 256 puntos hace que la elipse sea tan suave que no se puede decir que consiste en líneas en KiCAD.
Si solo desea una parte de la elipse (un borde de su PCB, por ejemplo), es trivial agregar un cuadro delimitador al script anterior y descartar todos los puntos que se encuentran fuera del cuadro.
= Opción 2 =
Otro enfoque sería diseñar su tablero completamente en Inkscape (o cualquier otra cosa que pueda exportar gráficos vectoriales), y encontrar una manera de importarlo a KiCAD.
Lorenzo ha proporcionado una solución que puede ir de Inkscape a Gerber aquí: enlace
Entonces pude desarrollar la solución de Lorenzo para hacer un script Ruby que pase por alto la etapa de Gerber y genere líneas de archivos de la placa KiCAD directamente.
El proceso es así:
- Diseña tu tabla en Inkscape
- Exportar a HPGL
- Convierta HPGL en GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Generar líneas de archivo de placa:
gpt2pcbnew file.hpgl.gpt
Aquí está la fuente de 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]}")
}
}
Al igual que en la Opción 1, las líneas generadas van a un archivo de tablero en blanco guardado en KiCAD.
Esta solución aprovecha el hecho de que el formato HPGL es muy similar en su construcción a los archivos de Gerber, en el sentido de que es una serie de coordenadas con "pluma arriba" o "pluma abajo", que corresponde a los códigos D01 y D02. en gerber.
En este caso, todo el arduo trabajo de conversión de splines bezier a segmentos de línea lo realiza Inkscape.
= Limitaciones de la opción 2 =
Hay un par de limitaciones con este enfoque:
- Parece que Inkscape no puede exportar rectángulos a HPGL. Obviamente, puedes solucionar esto construyendo tus propios rectángulos.
- Actualmente no puedo obtener el tamaño correcto de los objetos exportados. Los objetos terminan aproximadamente el doble de grande en KiCAD. Estaré trabajando en una solución para esto pronto.