๋ถ๋ฅ:๊ทธ๋ํฝ ํด
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
OpenSCAD๋ 3D ๋ชจ๋ธ์ ๋ง๋๋ ํ๋ฆฌ์จ์ด์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ GUI๊ธฐ๋ฐ์ ๋ชจ๋ธ๋ฌ๋ค๊ณผ ๋ฌ๋ฆฌ C์ธ์ด์ ์ ์ฌํ ํํ์ ์คํฌ๋ฆฝํธ์ CSG[1]๋ฅผ ์ด์ฉํด์ ๋ชจ๋ธ์ ๋ง๋ ๋ค. ์๋์ฐ, ๋ฆฌ๋
์ค, ๋งฅ์์ ๋ชจ๋ ์ด์ฉํ ์ ์๋ ์คํ์์ค ์ํํธ์จ์ด๋ค.
GPLv2 ๋ผ์ด์ ์ค๋ฅผ ์ด์ฉํ๊ณ ์๋ค.
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] ๋ช ๋ น์ ๊ตฐ๋ฐ๊ตฐ๋ฐ ๋ฐฐ์นํจ์ผ๋ก์ ์ฌ์ฉ์๊ฐ ์ง์ ์ต์ ํ๋ฅผ ํ ์๋ ์์ง๋ง ์ ์๊ฐํด์ ๋ฐฐ์นํ์ง ์์ผ๋ฉด ๊ฑฐ๊พธ๋ก ๋๋ ค์ง๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ธฐ๋ ํ๋ค.
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์์๋ ๋ณ์๋ผ ๋ถ๋ฅด๋ฉฐ, ์ด๋ ํจ์ํ ์ธ์ด๋ ์ํ์์์ ๋ณ์์ ๊ฐ๊ณ , ์ ์ฐจ์ ์ธ์ด์์์ ์์์ ๋์๋๋ค.
[5] ํ์์ ์ค๋ธ์ ํธ์ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ฅํด๋๊ณ ๋ค์ ๋ ๋๋ง ๋ ์ด๋ฅผ ํ์ฉํ๋ค