Il m'a fallu quelques jours pour digérer toutes ces informations, mais j'ai terminé avec 2 solutions à ce problème. Je décrirai les deux solutions ici.
Je voudrais remercier Lorenzo et Rob Gilliom du forum des utilisateurs de kicad, qui m'ont fourni toutes les idées et informations dont j'avais besoin pour rassembler les solutions ci-dessous ( http://tech.groups.yahoo.com/ groupe / kicad-users / message / 15220 ).
= Option 1 =
Si vous souhaitez importer un seul segment elliptique et concevoir le reste de la carte dans KiCAD, alors ce script Ruby est probablement le moyen le plus simple:
#
# 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])
}
Pour utiliser ce script, enregistrez simplement un .kicad_pcb
fichier vierge dans Kicad puis insérez les lignes générées par ce script après la dernière section avant l'accolade fermante.
Ouvrez le nouveau fichier de carte dans KiCAD et profitez de votre ellipse interpolée par des segments de ligne :). L'utilisation de 256 points rend l'ellipse si lisse que vous ne pouvez pas dire qu'elle est constituée de lignes dans KiCAD.
Si vous ne voulez qu'une partie de l'ellipse (un bord de votre PCB, par exemple), il est trivial d'ajouter une boîte englobante au script ci-dessus et de supprimer tous les points qui se trouvent en dehors de la boîte.
= Option 2 =
Une autre approche serait de concevoir votre carte entièrement dans Inkscape (ou tout autre élément pouvant exporter des graphiques vectoriels) et de trouver un moyen d'importer cela dans KiCAD.
Lorenzo a fourni une solution qui peut passer d'Inkscape à Gerber ici: http://tech.groups.yahoo.com/group/kicad-users/message/15229
J'ai ensuite pu m'appuyer sur la solution de Lorenzo pour créer un script Ruby qui contourne l'étape Gerber et génère directement les lignes de fichiers de la carte KiCAD.
Le processus se déroule comme suit:
- Concevez votre tableau dans Inkscape
- Exporter vers HPGL
- Convertir HPGL en GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Générez des lignes de fichier de carte:
gpt2pcbnew file.hpgl.gpt
Voici la source du 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]}")
}
}
Tout comme dans l'option 1, les lignes générées vont dans un fichier de carte vierge enregistré dans KiCAD.
Cette solution exploite le fait que le format HPGL est très similaire dans sa construction aux fichiers Gerber, en ce sens qu'il s'agit d'une série de coordonnées avec "stylo vers le haut" ou "stylo vers le bas", ce qui correspond aux codes D01 et D02 dans Gerber.
Ainsi, tout le travail acharné de conversion des splines de Bézier en segments de ligne est effectué par Inkscape dans ce cas.
= Limitations de l'option 2 =
Il y a quelques limites à cette approche:
- Il semble qu'Inkscape ne puisse pas exporter de rectangles dans HPGL. Vous pouvez évidemment contourner cela en construisant vos propres rectangles.
- Je ne suis actuellement pas en mesure d'obtenir les bonnes tailles des objets exportés. Les objets se retrouvent environ deux fois plus gros dans KiCAD. Je vais bientôt travailler sur une solution.