이 모든 정보를 요약하는 데 며칠이 걸렸지만이 문제에 대한 2 가지 해결책으로 끝났습니다. 여기에 두 솔루션을 모두 설명하겠습니다.
kicad 사용자 포럼의 Lorenzo와 Rob Gilliom에게 감사의 말씀을 전합니다.이 포럼에서 아래 솔루션을 구성하는 데 필요한 모든 아이디어와 정보를 제공했습니다 ( 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의 솔루션을 기반으로 Gerber 스테이지를 우회하고 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에 저장된 빈 보드 파일로 들어갑니다.
이 솔루션은 HPGL 형식이 Gerber 파일과 구성이 매우 유사하다는 사실을 활용합니다. 이는 Gerber의 D01 및 D02 코드에 해당하는 "펜업"또는 "펜 다운"과의 일련의 좌표라는 점에서 다릅니다.
따라서 베 지어 스플라인에서 선분으로 변환하는 모든 노력은 Inkscape에 의해 수행됩니다.
= 옵션 2 제한 사항 =
이 방법에는 몇 가지 제한 사항이 있습니다.
- Inkscape는 사각형을 HPGL로 내보낼 수없는 것 같습니다. 자신만의 직사각형을 구성 하여이 문제를 해결할 수 있습니다.
- 현재 내 보낸 객체의 크기를 올바르게 가져올 수 없습니다. KiCAD에서 객체의 크기는 대략 두 배입니다. 나는 이것에 대한 해결책을 곧 연구 할 것이다.