Мне потребовалось несколько дней, чтобы переварить всю эту информацию, но я закончил с двумя решениями этой проблемы. Я опишу оба решения здесь.
Я хотел бы поблагодарить Лоренцо и Роба Гиллиома с форума пользователей kicad, которые предоставили мне все идеи и информацию, в которых я нуждался, чтобы собрать решения ниже ( http://tech.groups.yahoo.com/ group / kicad-users / message / 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, который обходит стадию Gerber и генерирует строки файла платы 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 очень похож по своей структуре на файлы Gerber, в том смысле, что он представляет собой серию координат с «пером вверх» или «пером вниз», что соответствует кодам D01 и D02 в Gerber.
Таким образом, в этом случае Inkscape выполняет всю сложную работу по преобразованию из более простых сплайнов в отрезки.
= Вариант 2 Ограничения =
У этого подхода есть пара ограничений:
- Похоже, что Inkscape не может экспортировать прямоугольники в HPGL. Очевидно, вы можете обойти это, создав собственные прямоугольники.
- В настоящее время я не могу правильно определить размеры экспортируемых объектов. Объекты заканчиваются примерно в два раза больше в KiCAD. Я буду работать над решением этой проблемы в ближайшее время.