Щоб перетравити всю цю інформацію, мені знадобилося пару днів, але я закінчив два рішення цієї проблеми. Я опишу тут обидва рішення.
Я хотів би подякувати Лоренцо та Роб Гілліому з форуму користувачів кікадів, які надали мені всі ідеї та інформацію, які мені потрібні, щоб зібрати рішення нижче ( http://tech.groups.yahoo.com/ група / користувачі-кікади / повідомлення / 15220 ).
= Варіант 1 =
Якщо ви хочете імпортувати один еліптичний сегмент і спроектувати решту плати в KiCAD, то цей сценарій Ruby є, мабуть, найпростішим способом:
#
# 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])
}
Для того, щоб використовувати цей скрипт, просто збережіть порожній .kicad_pcb
файл у Kicad, а потім вставте рядки, згенеровані цим сценарієм після останнього розділу перед заключним дужкою.
Відкрийте новий файл дошки в KiCAD і насолоджуйтесь своїм еліпсом, інтерпольованим по сегментах рядків :). Використання 256 точок робить еліпс настільки гладким, що ви не можете сказати, що він складається з ліній в KiCAD.
Якщо ви хочете лише частину еліпса (наприклад, один край вашої друкованої плати), тривіально додати обмежувальне поле до сценарію вище та відкинути всі точки, що лежать поза полем.
= Варіант 2 =
Інший підхід полягає в тому, щоб повністю розробити плату в Inkscape (або що-небудь інше, що може експортувати векторну графіку), і знайти спосіб імпортувати її в KiCAD.
Лоренцо запропонував рішення, яке може перейти від Inkscape до Гербера тут: http://tech.groups.yahoo.com/group/kicad-users/message/15229
Тоді я зміг побудувати на рішенні Лоренцо, щоб зробити сценарій Ruby, який обходить стадію Гербера і безпосередньо генерує файлові рядки файлів KiCAD безпосередньо.
Процес йде так:
- Дизайн дошки в Inkscape
- Експорт до HPGL
- Перетворити HPGL в GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Створити рядки файлів дошки:
gpt2pcbnew file.hpgl.gpt
Ось джерело gpt2pcbnew
сценарію:
#
# 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]}")
}
}
Як і в варіанті 1, згенеровані рядки переходять у файл пустої дошки, збережений у KiCAD.
Це рішення використовує той факт, що формат HPGL дуже схожий за своєю побудовою на файли Гербера, в тому сенсі, що це ряд координат або "pen up", або "pen down", що відповідає кодам D01 і D02 в Gerber.
Таким чином, вся кропітка робота з перетворення безірських сплайнів на сегменти рядків у цьому випадку виконується Inkscape.
= Варіант 2 Обмеження =
При такому підході є кілька обмежень:
- Схоже, Inkscape не може експортувати прямокутники в HPGL. Очевидно, це можна вирішити, побудувавши власні прямокутники.
- Наразі я не в змозі правильно визначити розміри експортованих об'єктів. Об'єкти закінчуються приблизно вдвічі більше в KiCAD. Я незабаром буду працювати над вирішенням цього питання.