ฉันใช้เวลาสองสามวันในการย่อยข้อมูลทั้งหมดนี้ แต่ฉันสิ้นสุดด้วยวิธีแก้ไขปัญหา 2 ข้อ ฉันจะอธิบายวิธีแก้ปัญหาทั้งสองที่นี่
ฉันอยากจะขอบคุณ Lorenzo และ Rob Gilliom จากฟอรั่มผู้ใช้ kicad ที่ให้ความคิดและข้อมูลทั้งหมดที่ฉันต้องรวบรวมโซลูชั่นด้านล่าง ( http://tech.groups.yahoo.com/) กลุ่ม / 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 ของคุณ) มันเป็นเรื่องไม่สำคัญที่จะเพิ่มกล่องขอบเขตลงในสคริปต์ด้านบนและละทิ้งทุกจุดที่อยู่ด้านนอกกล่อง
= ตัวเลือก 2 =
อีกวิธีคือการออกแบบบอร์ดของคุณทั้งหมดใน Inkscape (หรืออะไรก็ได้ที่สามารถส่งออกกราฟิกแบบเวกเตอร์) และหาวิธีที่จะนำเข้าสิ่งนั้นลงใน KiCAD
Lorenzo ได้จัดหาวิธีแก้ไขปัญหาที่สามารถเปลี่ยนจาก Inkscape ไปยัง Gerber ได้ที่นี่: http://tech.groups.yahoo.com/group/kicad-users/message/15229
จากนั้นฉันก็สามารถสร้างโซลูชันของ Lorenzo เพื่อสร้างสคริปต์ 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 ในแง่ที่ว่ามันเป็นชุดของพิกัดที่มีทั้ง "pen up" หรือ "pen down" ซึ่งสอดคล้องกับรหัส D01 และ D02 ใน Gerber
ดังนั้นการทำงานอย่างหนักของการแปลงจาก bezier splines เป็นส่วนของเส้นจึงทำได้โดย Inkscape ในกรณีนี้
= ข้อ จำกัด 2 ตัวเลือก =
มีข้อ จำกัด สองสามประการเกี่ยวกับวิธีการนี้:
- ดูเหมือนว่า Inkscape ไม่สามารถส่งออกสี่เหลี่ยมไปยัง HPGL คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยสร้างรูปสี่เหลี่ยมผืนผ้าของคุณเอง
- ขณะนี้ฉันไม่สามารถรับขนาดของวัตถุที่ส่งออกได้ถูกต้อง วัตถุมีขนาดใหญ่เป็นสองเท่าใน KiCAD ฉันจะแก้ไขปัญหานี้ในไม่ช้า