Ich habe ein paar Tage gebraucht, um all diese Informationen zu verarbeiten, aber ich endete mit zwei Lösungen für dieses Problem. Ich werde hier beide Lösungen beschreiben.
Ich möchte Lorenzo und Rob Gilliom vom Kicad-User-Forum danken, die mir alle Ideen und Informationen zur Verfügung gestellt haben, die ich brauchte, um die folgenden Lösungen zusammenzustellen ( http://tech.groups.yahoo.com/). group / kicad-users / message / 15220 ).
= Option 1 =
Wenn Sie ein einzelnes elliptisches Segment importieren und den Rest der Karte in KiCAD entwerfen möchten, ist dieses Ruby-Skript wahrscheinlich der einfachste Weg:
#
# 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])
}
Um dieses Skript zu verwenden, speichern Sie einfach eine leere .kicad_pcb
Datei in Kicad und fügen Sie die von diesem Skript generierten Zeilen nach dem letzten Abschnitt vor der schließenden Klammer ein.
Öffnen Sie die neue Board-Datei in KiCAD und genießen Sie Ihre durch Liniensegmente interpolierte Ellipse :). Durch die Verwendung von 256 Punkten wird die Ellipse so glatt, dass Sie nicht erkennen können, dass sie in KiCAD aus Linien besteht.
Wenn Sie nur einen Teil der Ellipse möchten (z. B. eine Kante Ihrer Leiterplatte), ist es trivial, dem obigen Skript einen Begrenzungsrahmen hinzuzufügen und alle Punkte zu verwerfen, die außerhalb des Rahmens liegen.
= Option 2 =
Ein anderer Ansatz wäre, Ihr Board vollständig in Inkscape (oder irgendetwas anderem, das Vektorgrafiken exportieren kann) zu entwerfen und einen Weg zu finden, dies in KiCAD zu importieren.
Lorenzo hat hier eine Lösung bereitgestellt, die von Inkscape zu Gerber wechseln kann: http://tech.groups.yahoo.com/group/kicad-users/message/15229
Ich konnte dann auf Lorenzos Lösung aufbauen, um ein Ruby-Skript zu erstellen, das die Gerber-Phase umgeht und KiCAD-Board-Dateizeilen direkt generiert.
Der Prozess läuft folgendermaßen ab:
- Gestalten Sie Ihr Board in Inkscape
- Export nach HPGL
- Konvertieren Sie HPGL in GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Board-Dateizeilen generieren:
gpt2pcbnew file.hpgl.gpt
Hier ist die Quelle für das gpt2pcbnew
Skript:
#
# 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]}")
}
}
Genau wie in Option 1 werden die generierten Zeilen in eine in KiCAD gespeicherte leere Board-Datei verschoben.
Diese Lösung nutzt die Tatsache, dass das HPGL-Format in seiner Konstruktion Gerber-Dateien sehr ähnlich ist, in dem Sinne, dass es sich um eine Reihe von Koordinaten handelt, die entweder "Stift hoch" oder "Stift runter" sind, was den Codes D01 und D02 in Gerber entspricht.
In diesem Fall erledigt Inkscape die ganze harte Arbeit beim Konvertieren von Bezier-Splines in Liniensegmente.
= Option 2 Einschränkungen =
Bei diesem Ansatz gibt es einige Einschränkungen:
- Es scheint, dass Inkscape keine Rechtecke in HPGL exportieren kann. Sie können dies natürlich umgehen, indem Sie Ihre eigenen Rechtecke erstellen.
- Ich bin derzeit nicht in der Lage, die Größe der exportierten Objekte richtig zu bestimmen. Die Objekte sind in KiCAD ungefähr doppelt so groß. Ich werde bald an einer Lösung dafür arbeiten.