Kilka dni zajęło mi przejrzenie wszystkich tych informacji, ale skończyłem z 2 rozwiązaniami tego problemu. Opiszę oba rozwiązania tutaj.
Chciałbym podziękować Lorenzo i Robowi Gilliomowi z forum użytkowników kicad, którzy dostarczyli mi wszystkie pomysły i informacje, których potrzebowałem, aby zebrać poniższe rozwiązania ( http://tech.groups.yahoo.com/ group / kicad-users / message / 15220 ).
= Opcja 1 =
Jeśli chcesz zaimportować pojedynczy segment eliptyczny i zaprojektować resztę płytki w KiCAD, ten skrypt Ruby jest prawdopodobnie najłatwiejszym sposobem:
#
# 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])
}
Aby użyć tego skryptu, po prostu zapisz pusty .kicad_pcb
plik w Kicad, a następnie wstaw linie wygenerowane przez ten skrypt po ostatniej sekcji przed nawiasem zamykającym.
Otwórz nowy plik planszy w KiCAD i ciesz się elipsą interpolowaną przez segmenty linii :). Użycie 256 punktów sprawia, że elipsa jest tak gładka, że nie można powiedzieć, że składa się z linii w KiCAD.
Jeśli chcesz tylko część elipsy (na przykład jedną krawędź płytki drukowanej), banalne jest dodanie ramki ograniczającej do powyższego skryptu i odrzucenie wszystkich punktów znajdujących się poza ramką.
= Opcja 2 =
Innym podejściem byłoby zaprojektowanie tablicy w całości w Inkscape (lub czegokolwiek innego, co może eksportować grafikę wektorową) i znaleźć sposób na jej zaimportowanie do KiCAD.
Lorenzo dostarczył rozwiązanie, które może przejść z Inkscape do Gerbera tutaj: http://tech.groups.yahoo.com/group/kicad-users/message/15229
Byłem wtedy w stanie wykorzystać rozwiązanie Lorenza, aby stworzyć skrypt Ruby, który omija etap Gerbera i generuje bezpośrednio wiersze pliku tablicy KiCAD.
Proces przebiega następująco:
- Zaprojektuj swoją tablicę w Inkscape
- Eksportuj do HPGL
- Konwertuj HPGL na GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Generuj wiersze pliku tablicy:
gpt2pcbnew file.hpgl.gpt
Oto źródło gpt2pcbnew
skryptu:
#
# 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]}")
}
}
Tak jak w Opcji 1, wygenerowane linie przechodzą do pustego pliku tablicy zapisanego w KiCAD.
To rozwiązanie wykorzystuje fakt, że format HPGL jest bardzo podobny w swojej konstrukcji do plików Gerber, w tym sensie, że jest to szereg współrzędnych z „pisakiem w górę” lub „pisakiem w dół”, co odpowiada kodom D01 i D02 w Gerber.
Tak więc w tym przypadku cała ciężka praca polegająca na konwersji splajnów Beziera na segmenty linii jest wykonywana przez Inkscape.
= Ograniczenia opcji 2 =
Podejście to ma kilka ograniczeń:
- Wygląda na to, że Inkscape nie może eksportować prostokątów do HPGL. Możesz oczywiście obejść ten problem, konstruując własne prostokąty.
- Obecnie nie jestem w stanie uzyskać prawidłowych rozmiarów eksportowanych obiektów. W KiCAD obiekty te są około dwa razy większe. Wkrótce będę pracował nad rozwiązaniem tego problemu.