์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

1. ๊ฐœ์š”2. ํŠน์ง•3. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•4. ๋‹ค์šด๋กœ๋“œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

OpenSCAD๋Š” 3D ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ํ”„๋ฆฌ์›จ์–ด์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” GUI๊ธฐ๋ฐ˜์˜ ๋ชจ๋ธ๋Ÿฌ๋“ค๊ณผ ๋‹ฌ๋ฆฌ C์–ธ์–ด์™€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์˜ ์Šคํฌ๋ฆฝํŠธ์™€ CSG[1]๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋ธ์„ ๋งŒ๋“ ๋‹ค. ์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค, ๋งฅ์—์„œ ๋ชจ๋‘ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด๋‹ค.

GPLv2 ๋ผ์ด์„ ์Šค๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค.

2. ํŠน์ง•[ํŽธ์ง‘]

๋ชจ๋“  3D์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฝ”๋“œ๋กœ ๊ธฐ์ˆ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ˜‘์—…๊ณผ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค. ๋•Œ๋ฌธ์— ์˜คํ”ˆ์†Œ์Šค 3Dํ”„๋ฆฐํ„ฐ ํ”„๋กœ์ ํŠธ์ธ RepRap์ง„์˜์—์„œ ๊ฐ€์žฅ ์‚ฌ๋ž‘๋ฐ›๋Š” CAD ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

OpenSCAD ์–ธ์–ด์—๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†๋‹ค.[2][3] ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ํ•˜๊ณ ์ž ํ•˜๋ฉด ๋ฃจํ”„์™€ ์ƒํƒœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ˆœ์ˆ˜ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์—์„œ ํ•˜๋“ฏ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์งœ์•ผํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•จ์ˆ˜ํ˜•์–ธ์–ด๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์—†๋Š” ๊ฒƒ์ด, ๋žŒ๋‹คํ‘œํ˜„์‹๋„ ์—†๊ณ , ํ•จ์ˆ˜๊ฐ„ ์—ฐ์‚ฐ๋„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ List Comprehension์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์Šค์ผˆ๋“ฑ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ์ข€ ๋ถˆํŽธํ•˜๊ธด ํ•ด๋„ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ๋Œ€๋ถ€๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.[4]

CGAL์˜ ๋ž˜ํผ(wrapper)์ด๊ธฐ๋„ ํ•˜๋‹ค. CGAL์€ ๋ฐฉ๋Œ€ํ•œ ํฌ๊ธฐ์˜ ๊ธฐํ•˜ํ•™ ๊ณ„์‚ฐ์šฉ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๋ฐ ๊ทธ์ค‘ CSG๋ถ€๋ถ„๋งŒ์„ ๋”ฐ ์™€์„œ ๊ฐ„๋žตํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ ๊ฒƒ. ์‹ค์ œ๋กœ ๊ตฌํ˜„์€ OpenSCAD์Šคํฌ๋ฆฝํŠธ๋ฅผ CGAL์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” C์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ ํ•˜๊ณ  CGAL์„ ํ†ตํ•ด STLํŒŒ์ผ์„ ์–ป๋Š” ์‹์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ๋•๋ถ„์— OpenSCAD์˜ ์„ฑ๋Šฅ์€ CGAL์„ ๋”ฐ๋ผ๊ฐ„๋‹ค.

๋А๋ฆฌ๋‹ค. ์ด๋Š” ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์€ ์ปค๋…• ๋ฉ€ํ‹ฐ์ฝ”์–ด๋„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” CGALํƒ“์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์ž‘์—…๋ฌผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋†“๊ณ  ์ˆ˜์ •์‚ฌํ•ญ๋งŒ ๋ฐ˜์˜ํ•˜๋ฉฐ ์ง„ํ–‰ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ CAD์™€๋Š” ๋‹ฌ๋ฆฌ, ๋ Œ๋”๋ง ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ์ฒ˜์Œ๋ถ€ํ„ฐ 3D์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. render()[5] ๋ช…๋ น์„ ๊ตฐ๋ฐ๊ตฐ๋ฐ ๋ฐฐ์น˜ํ•จ์œผ๋กœ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ž˜ ์ƒ๊ฐํ•ด์„œ ๋ฐฐ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฑฐ๊พธ๋กœ ๋А๋ ค์ง€๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ๊ธฐ๋„ ํ•œ๋‹ค.

3. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•[ํŽธ์ง‘]


4. ๋‹ค์šด๋กœ๋“œ[ํŽธ์ง‘]

ํ™ˆํŽ˜์ด์ง€์—์„œ ์šด์˜์ฒด์ œ๋ณ„๋กœ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
[1] CSG๋Š” Constructive solid geometry์˜ ์•ฝ์ž๋กœ ํ•ฉ, ์ฐจ, ๊ต์ง‘ํ•ฉ์˜ ๊ฐœ๋…์„ ์ด์šฉํ•ด์„œ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค. ์˜๋ฌธ ์œ„ํ‚ค CSG ํ•ญ๋ชฉ
[2] ์ƒ์ˆ˜๋Š” ์žˆ๋‹ค. x=0;์€ x๋ฅผ 0์œผ๋กœ ์ •์˜ํ•˜๋Š” ์ ๋ฒ•ํ•œ ๋ฌธ์žฅ์ด์ง€๋งŒ, x=x+1; ๋˜๋Š” x=1;x=2; ๋Š” ํ‹€๋ฆฐ ๋ฌธ์žฅ.
[3] C์™€ ๊ฐ™์€ ์ ˆ์ฐจ์  ์–ธ์–ด์˜ ๋ณ€์ˆ˜์— ๋Œ€์‘ํ•˜๋Š” ๊ฐœ๋…์ด ์—†๋‹ค๋Š” ๋œป. ์–ด๋– ํ•œ ๊ฐ’์ด๋“  ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ํ•œ๋ฒˆ ๊ฐ’์ด ์ •ํ•ด์ง€๋ฉด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์ฝ˜ํ…Œ์ด๋„ˆ๋ฅผ OpenSCAD์—์„œ๋Š” ๋ณ€์ˆ˜๋ผ ๋ถ€๋ฅด๋ฉฐ, ์ด๋Š” ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋‚˜ ์ˆ˜ํ•™์—์„œ์˜ ๋ณ€์ˆ˜์™€ ๊ฐ™๊ณ , ์ ˆ์ฐจ์  ์–ธ์–ด์—์„œ์˜ ์ƒ์ˆ˜์— ๋Œ€์‘๋œ๋‹ค.
[4] ํ•œ๋™์•ˆ C++๋งŒ ์“ฐ๋‹ค๊ฐ€ C๋ฅผ ์“ธ ๋•Œ์™€ ๋น„์Šทํ•œ ๋А๋‚Œ์ด๋‹ค.
[5] ํ•˜์œ„์˜ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฌผ์„ ์ €์žฅํ•ด๋†“๊ณ  ๋‹ค์Œ ๋ Œ๋”๋ง ๋•Œ ์ด๋ฅผ ํ™œ์šฉํ•œ๋‹ค