메뉴 건너뛰기

A11Y

'사출'이란 무엇일까요?

지난 시간에 이야기한 것 처럼, 오늘은 사출 명령인 linear_extrude, rotate_extrude 명령에 대해 배워보겠습니다.

'사출'이라는 말이 조금 어려울 수 있지만, 원리는 아주 간단합니다. 혹시 찰흙으로 만들기 놀이를 해보셨나요? 바닥에 동그랗고 납작한 찰흙을 놓고, 그 모양 그대로 위로 쭉 잡아당기면 원기둥이 되죠. 또, 뱅글뱅글 돌아가는 물레 위에서 흙을 잡아 늘려 도자기를 만드는 모습을 상상해 보세요.

이처럼, 납작한 2차원 도형을 3차원 입체 도형으로 만드는 모든 과정을 '사출'이라고 부릅니다. OpenSCAD에는 크게 두 가지 사출 방식이 있습니다.

1. linear_extrude (선형 사출)
2D 도형을 위로 곧장 잡아 늘려 기둥 같은 모양을 만듭니다. 마치 쿠키 반죽 위에 틀을 올려놓고 꾹 눌러서, 틀 모양 그대로 입체적인 쿠키를 만들어내는 것과 같습니다.
2. rotate_extrude (회전 사출)
2D 도형을 하나의 축을 중심으로 빙글 돌려서 도넛이나 항아리 같은 모양을 만듭니다. 회전하는 물레 위에서 도자기를 빚는 원리와 똑같습니다.

1. linear_extrude() - 위로 곧게 잡아 늘리기

이 명령은 2D 도형에 높이를 부여하여 3D 입체로 만드는 가장 기본적인 사출 방식입니다.

명령어 사용법

linear_extrude 명령어 다음에 괄호 ()를 열어 높이와 같은 여러 가지 설정을 해줍니다. 그리고 중괄호 {} 안에는 우리가 늘리고 싶은 2D 도형 명령어를 넣어주면 됩니다.

주요 설정값 (파라미터)

  • height: 가장 중요한 값으로, 2D 도형을 얼마나 높이 잡아 늘릴지, 즉 Z축 방향의 길이를 정합니다.
  • center: 이 값을 true로 설정하면, 도형의 높이 중심이 원점(0, 0, 0)에 맞춰집니다. false(기본값)이면 Z=0 평면에서 위로 자라나고, true이면 Z=0 평면을 기준으로 위아래로 자라납니다.
  • twist: 젖은 수건을 짜는 것처럼 도형을 비틀면서 늘리는 기능입니다. 값은 각도를 의미하며, 예를 들어 twist = 90 이라고 하면, 도형이 90도 비틀어진 기둥이 만들어집니다.
  • scale: 위로 늘어나면서 도형의 크기를 조절합니다. scale = 0.5로 설정하면, 위로 갈수록 크기가 50%로 점점 줄어들어 뿔 모양이 됩니다.

사출을 위한 기본 2D 도형

linear_extrude를 사용하려면, 먼저 늘릴 2D 도형이 있어야겠죠? 가장 기본이 되는 square(사각형)와 circle(원)을 먼저 알아보겠습니다. 이 도형들은 XY 평면, 즉 바닥에 그려지는 납작한 도형입니다.

1.1 square() - 사각형 그리기
  • 정사각형: square(10); 처럼 숫자 하나만 넣으면 가로, 세로 길이가 10인 정사각형이 만들어집니다.
  • 직사각형: square([10, 20]); 처럼 대괄호 [] 안에 숫자 두 개를 넣으면 가로 10, 세로 20인 직사각형을 만들 수 있습니다.
  • center: square(10, center = true); 처럼 center 값을 true로 설정하면, 도형의 중심이 원점(0, 0)에 오도록 배치됩니다.
1.2 circle() - 원 그리기
  • 반지름으로 그리기: circle(r = 10); 처럼 r 값을 주면 반지름이 10인 원이 만들어집니다.
  • 지름으로 그리기: circle(d = 20); 처럼 d 값을 주면 지름이 20인 원이 만들어집니다.
  • 해상도 조절하기 ($fn): 컴퓨터는 완벽한 곡선을 그리지 못하고, 아주 짧은 직선들을 여러 개 이어 붙여 원처럼 보이게 만듭니다. 이때 사용되는 직선의 개수를 $fn(달러 기호 fn)으로 조절할 수 있습니다. $fn=6이면 육각형, $fn=100이면 매우 부드러운 원이 됩니다.

linear_extrude 예제 코드


// 예제 1: 원을 높이 10만큼 늘려 원기둥 만들기
// 가장 기본적인 형태로, 동전 여러 개를 쌓아 올린 모습을 상상해 보세요.
linear_extrude(height = 10) {
    circle(r = 5);
}

// 예제 2: 사각형을 90도 비틀면서 높이 20으로 늘리기
// translate는 다른 도형과 겹치지 않도록 옆으로 옮겨주는 역할입니다.
// 마치 꽈배기 과자 같은 모양이 만들어집니다.
translate([20, 0, 0]) {
    linear_extrude(height = 20, twist = 90) {
        square(10, center = true);
    }
}

// 예제 3: 원을 높이 20으로 늘리면서 끝부분이 뾰족해지게 만들기 (원뿔)
// 위로 올라갈수록 크기가 0.1배로 줄어들도록 scale을 설정했습니다.
translate([-20, 0, 0]) {
    linear_extrude(height = 20, scale = 0.1) {
        circle(r = 5, $fn = 50);
    }
}
                

2. rotate_extrude() - 축을 중심으로 회전시키기

이번에는 2D 도형을 빙글 돌려서 입체 도형을 만드는 rotate_extrude에 대해 알아보겠습니다.

가장 중요한 규칙: 회전시킬 2D 도형은 반드시 회전의 중심축(Z축)에서 약간 떨어져 있어야 합니다. 즉, 도형이 중심축의 한쪽 편(X>0 또는 X<0)에만 있어야 합니다. 만약 도형이 축을 가로지르거나 축에 걸쳐 있으면, 회전하면서 자기 자신과 겹쳐 모양이 깨질 수 있습니다.

명령어 사용법 및 주요 설정값

  • angle: 도형을 몇 도나 회전시킬지 정합니다. 기본값은 360으로, 한 바퀴를 완전히 돌려줍니다. angle = 180으로 하면 반만 만들어진 모양이 됩니다.
  • $fn: 회전체의 부드러움을 결정합니다. circle에서처럼, 이 값이 클수록 더 매끄러운 곡면을 가진 회전체가 만들어집니다.

rotate_extrude 예제 코드


// 예제 1: 원을 회전시켜 도넛(토러스) 만들기
// 상상해보세요: 허공에 작은 원 하나를 띄웁니다. (translate)
// 그리고 그 원을 중심축을 기준으로 360도 빙글 돌립니다.
// 그러면 가운데가 뚫린 맛있는 도넛 모양이 만들어집니다.
// 여기서 translate([15, 0, 0])가 바로 원을 중심축에서 15만큼 떨어뜨리는 핵심적인 역할을 합니다.
rotate_extrude($fn = 100) {
    translate([15, 0, 0]) {
        circle(r = 5);
    }
}

// 예제 2: 사각형을 270도만 회전시키기
// 마치 피자 한 조각이 빠진 도넛 같은 모양이 됩니다.
// 사각형을 중심축에서 10만큼 떨어뜨린 후, 270도만 회전시켰습니다.
translate([-30, 0, 0]) {
    rotate_extrude(angle = 270, $fn = 100) {
        translate([10, 0, 0]) {
            square([4, 10], center = true);
        }
    }
}
                

마무리하며

오늘은 2D 도형을 3D 입체로 만드는 두 가지 강력한 사출 명령, linear_extruderotate_extrude에 대해 배웠습니다.

  • linear_extrude는 2D 도형을 위로 쭉 늘려 기둥, 꽈배기, 뿔 같은 모양을 만들었습니다.
  • rotate_extrude는 2D 도형을 빙글 돌려 도넛, 항아리, 컵 같은 모양을 만들 수 있었습니다.
번호 제목 날짜 조회 수
41 About: MSAA, Microsoft Active Accessibility 2024.09.05 716
40 센스리더에서 지원하는 SSML 2024.09.05 1031
39 About: Microsoft Windows IUIAutomation Interface 2024.09.06 725
38 윈도우 접근성 기술: MSAA와 UIAutomation 비교 2024.09.09 696
37 시각장애인 접근성 향상을 위한 응용프로그램 조작 인터페이스 2024.09.11 825
36 접근성 역할에서 "link"와 "button"의 차이 2024.09.24 1209
35 시각장애인을 위한 음성 접근성 정보 제공 방법 2024.09.25 766
34 시각장애인 접근성 음성 정보의 맹점 2024.10.02 772
33 시각장애인을 위한 소리 정보 제공 시 기본 파형 사용 주의사항 2024.10.02 804
32 센스리더의 "기능 검색" 기능에 대하여 2024.10.08 1009
31 센스리더의 브라우저 탭키 환경과 가상커서 탭키 환경 2024.10.11 1124
30 시각장애인과의 협업을 위한 특수문자 발음의 이해 2024.10.18 792
29 여러 단계로 이루어진 서비스 제공시 시각장애인 접근성 개선 방안 2024.10.22 792
28 [세미나] 시각장애 개발자와 함께 하는 아이디어 마이닝 #1. 목적 2024.11.11 843
27 시각장애 개발자와 함께하는 아이디어 마이닝 #2. 텍스트와 오디오 2024.11.12 929
26 시각장애 개발자와 함께하는 아이디어 마이닝 #3. 이미지 2024.11.13 764
25 시각장애 개발자와 함께하는 아이디어 마이닝 #4. 의사 코드 2024.11.14 761
24 시각장애 개발자와 함께하는 아이디어 마이닝 #5. HTML 2024.11.18 888
23 시각장애 개발자와 함께하는 아이디어 마이닝 #6. 스크립트 언어 2024.11.19 904
22 시각장애 개발자와 함께하는 아이디어 마이닝 #7. 스크립트 예시, CMD 2024.11.20 835