この情報をすべて消化するのに数日かかりましたが、この問題に対する2つの解決策で終わりました。ここでは両方のソリューションについて説明します。
以下の解決策をまとめるために必要なすべてのアイデアと情報を提供してくれたkicad-usersフォーラムのLorenzoとRob Gilliomに感謝します(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の線で構成されていることがわかりません。
楕円の一部のみ(たとえば、PCBの1つのエッジ)が必要な場合は、上記のスクリプトに境界ボックスを追加して、ボックスの外側にあるすべてのポイントを破棄するのは簡単です。
=オプション2 =
もう1つのアプローチは、ボード全体をInkscape(またはベクターグラフィックスをエクスポートできるもの)で設計し、それをKiCADにインポートする方法を見つけることです。
LorenzoはInkscapeからGerberに移動できるソリューションをここに提供しました:http : //tech.groups.yahoo.com/group/kicad-users/message/15229
その後、ロレンソのソリューションを構築して、ガーバーステージをバイパスし、KiCADボードファイルの行を直接生成するRubyスクリプトを作成することができました。
プロセスは次のようになります。
- 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に保存された空のボードファイルに入ります。
このソリューションは、構造がガーバーファイルと非常によく似ているという事実を利用しています。これは、ガーバーのD01およびD02コードに対応する「ペンアップ」または「ペンダウン」のいずれかの一連の座標であるという意味です。
したがって、この場合、ベジェスプラインからラインセグメントへの変換のハードワークはすべてInkscapeによって行われます。
=オプション2の制限=
このアプローチにはいくつかの制限があります。
- Inkscapeは長方形をHPGLにエクスポートできないようです。独自の長方形を作成することにより、明らかにこれを回避できます。
- 現在、エクスポートされたオブジェクトのサイズを正しく取得できません。オブジェクトは、最終的にKiCADで約2倍の大きさになります。私はすぐにこれの解決策に取り組みます。