Tüm bu bilgileri sindirmek birkaç günümü aldı, ancak bu soruna 2 çözüm buldum. Burada her iki çözümü de anlatacağım.
Aşağıdaki çözümleri bir araya getirmem için gereken tüm fikirleri ve bilgileri bana sağlayan kicad kullanıcıları forumundan Lorenzo ve Rob Gilliom'a teşekkür etmek istiyorum ( http://tech.groups.yahoo.com/ grup / kicad kullanıcıları / ileti / 15220 ).
= Seçenek 1 =
Tek bir eliptik segmenti içe aktarmak ve panonun geri kalanını KiCAD'de tasarlamak istiyorsanız, bu Ruby betiği muhtemelen en kolay yoldur:
#
# 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])
}
Bu komut dosyasını kullanmak için, boş bir .kicad_pcb
dosyayı Kicad'a kaydedin ve sonra bu komut dosyası tarafından oluşturulan satırları kapanış ayraçından önceki son bölümden sonra ekleyin.
KiCAD'de yeni tahta dosyasını açın ve çizgi parçalarının enterpolasyonlu elipsin tadını çıkarın :). 256 puan kullanmak elipsi o kadar pürüzsüz hale getirir ki KiCAD'deki çizgilerden oluştuğunu söyleyemezsiniz.
Elipsin yalnızca bir kısmını (örneğin PCB'nizin bir kenarı) istiyorsanız, yukarıdaki komut dosyasına bir sınırlayıcı kutu eklemek ve kutunun dışında kalan tüm noktaları atmak önemsizdir.
= Seçenek 2 =
Başka bir yaklaşım, tahtanızı tamamen Inkscape'te (veya vektör grafikleri dışa aktarabilecek herhangi bir şey) tasarlamak ve KiCAD'e aktarmak için bir yol bulmak olacaktır.
Lorenzo, Inkscape'ten Gerber'e buradan gidebilecek bir çözüm sundu: http://tech.groups.yahoo.com/group/kicad-users/message/15229
Daha sonra Gerber sahnesini atlayan ve doğrudan KiCAD tahta dosya satırları üreten bir Ruby senaryosu yapmak için Lorenzo'nun çözümünü geliştirebildim.
Süreç şöyle gider:
- Inkscape'de tahtanızı tasarlayın
- HPGL'ye aktar
- Dönüştürmek HPGL GnuPlot Ascii:
hp2xx -t -m gpt file.hpgl
- Pano dosya satırları oluşturun:
gpt2pcbnew file.hpgl.gpt
gpt2pcbnew
Komut dosyasının kaynağı şöyledir :
#
# 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]}")
}
}
Tıpkı Seçenek 1'de olduğu gibi, oluşturulan satırlar KiCAD'e kaydedilen bir boş tahta dosyasına gider.
Bu çözüm, HPGL formatının yapımında Gerber dosyalarına çok benzer olması gerçeğinden yararlanmaktadır, bir anlamda Gerber'deki D01 ve D02 kodlarına karşılık gelen "kalem yukarı" veya "kalem aşağı" içeren bir dizi koordinattır.
Bu nedenle bezier spline'lardan çizgi segmentlerine dönüştürmenin tüm zor işleri Inkscape tarafından bu durumda yapılır.
= Seçenek 2 Sınırlamalar =
Bu yaklaşımla ilgili birkaç sınırlama vardır:
- Inkscape'in dikdörtgenleri HPGL'ye aktaramayacağı anlaşılıyor. Kendi dikdörtgenlerinizi oluşturarak bunu geçici olarak çözebilirsiniz.
- Şu anda dışa aktarılan nesnelerin boyutlarını doğru olarak alamıyorum. Nesneler KiCAD'de kabaca iki kat daha büyüktür. Yakında buna bir çözüm üzerinde çalışacağım.