메뉴 건너뛰기

A11Y

지난 시간에는 맥미니 모양의 네모나고 모서리가 둥근 상자를 함께 만들어 보았습니다. 오늘은 이 상자에 생명을 불어넣는 작업을 해볼 겁니다. 바로, 전원 케이블을 꽂을 구멍과 전원 상태를 알려주는 작은 LED 불빛이 들어갈 구멍을 뚫는 작업이죠.

오늘 우리가 새로 배울 명령어는 rotate(), 즉 '회전하기'입니다.

핵심 명령어: rotate() 살펴보기

rotate() 명령어는 말 그대로 물체를 회전시키는 역할을 합니다. 이렇게 사용합니다.


rotate([x회전각도, y회전각도, z회전각도]) { 회전시킬 물체 }
        

여기서 잠깐, 3강에서 배웠던 '오른손 법칙'을 떠올려 볼까요? 오른손으로 주먹을 쥐고 특정 축 방향으로 엄지손가락을 가리켰을 때, 나머지 네 손가락이 감기는 방향이 바로 양수(+) 회전 방향입니다.

예를 들어, 우리가 cylinder() 명령어로 물체를 만들면, 보통은 바닥에 세워둔 음료수 캔처럼 위(Z축 방향)를 향해 서 있습니다.

만약 이 캔을 앞으로 넘어뜨리고 싶다면 어떻게 해야 할까요?
오른손의 엄지손가락을 오른쪽(X축 방향)으로 향하게 해보세요. 그럼 나머지 네 손가락은 위에서 앞으로, 그리고 아래로 감기는 방향을 가리킬 겁니다. 이게 바로 X축의 양수(+) 회전입니다.

따라서 코드를 이렇게 작성하면,


rotate([90, 0, 0]) cylinder(r=10, h=10);
        

서 있던 음료수 캔이 정면을 향해 누워있는 모양이 되는 것입니다. 오늘 우리가 구멍을 뚫을 때 바로 이 원리를 사용할 겁니다. 마치 드릴 비트를 눕혀서 벽에 구멍을 뚫는 것처럼 말이죠.

전체 코드 살펴보기

자, 그럼 전체 코드를 살펴보며 어떻게 구멍을 뚫는지 단계별로 알아보겠습니다. 코드의 앞부분은 지난 시간에 다룬 내용이므로, 오늘은 새롭게 추가된 부분에 집중해서 설명하겠습니다.

코드의 시작 <<<


// 1. 설계도를 위한 기본 치수 설정 (단위: mm)
// (지난 시간과 동일한 변수 설정 부분은 설명을 생략합니다)

mac_mini_size = 197;
mac_mini_height = 36;
corner_radius = 20;
bottom_foot_radius = 70;
bottom_foot_depth = 1.5;

// 후면 패널의 두께 (구멍을 뚫을 깊이)
back_panel_thickness = 5;

// LED 구멍 정보
led_radius = 1; // LED 구멍 반지름
led_x_pos = 80; // 중심에서의 X축 위치 (오른쪽)
led_z_pos = 18; // 바닥에서의 Z축 높이

// 전원 포트 정보
power_radius = 4; // 전원 포트 구멍 반지름
power_x_pos = -70; // 중심에서의 X축 위치 (왼쪽)
power_z_pos = 18; // 바닥에서의 Z축 높이

$fn = 100;

// ======================================================
// 2. 실제 맥미니 본체 및 후면 포트 구멍 만들기
// ======================================================

// 'difference()' 명령으로 '깎아내기' 작업을 시작합니다.
difference() {
    
    // 첫 번째 물체: 깎아낼 대상이 되는 기본 몸체 (지난 시간에 만든 맥미니 상자)
    hull() {
        offset = mac_mini_size / 2 - corner_radius;
        translate([offset, offset, 0]) cylinder(h = mac_mini_height, r = corner_radius);
        translate([-offset, offset, 0]) cylinder(h = mac_mini_height, r = corner_radius);
        translate([offset, -offset, 0]) cylinder(h = mac_mini_height, r = corner_radius);
        translate([-offset, -offset, 0]) cylinder(h = mac_mini_height, r = corner_radius);
    }
    
    // -------------------------------------------------------------------
    // 이제부터 나오는 물체들은 구멍을 뚫기 위한 '드릴 비트'들입니다.
    // -------------------------------------------------------------------

    // 두 번째 물체: 바닥의 원형 받침대 (지난 시간에 만든 부분)
    translate([0, 0, -1])
        cylinder(h = bottom_foot_depth + 2, r = bottom_foot_radius);


    // 세 번째 물체: 전원 LED 구멍을 뚫을 드릴 비트
    // 상자의 뒤쪽(-Y 방향)에 작은 구멍을 냅니다.
    translate([led_x_pos, -(mac_mini_size/2) - 1, led_z_pos]) {
        // 드릴 비트를 눕히기 위해 X축 기준으로 90도 회전시킵니다.
        rotate([90, 0, 0])
            cylinder(h = back_panel_thickness + 2, r = led_radius);
    }

    // 네 번째 물체: 전원 포트 구멍을 뚫을 드릴 비트
    // LED와 같은 방식으로, 더 굵은 드릴 비트로 구멍을 냅니다.
    translate([power_x_pos, -(mac_mini_size/2) - 1, power_z_pos]) {
        // X축 기준으로 90도 회전
        rotate([90, 0, 0])
            cylinder(h = back_panel_thickness + 2, r = power_radius);
    }
}
        

>>> 코드의 끝

새로운 코드 해설: 구멍 뚫기 과정

우리의 작업은 difference()라는 커다란 틀 안에서 이루어집니다. 첫 번째로 만든 맥미니 본체라는 '찰흙 덩어리'에서, 이후에 만드는 모양들을 '조각칼'처럼 사용해 파내는 과정이라고 상상하시면 됩니다.

1. 전원 LED 구멍 (세 번째 물체)

먼저 아주 작은 LED 구멍부터 뚫어보겠습니다.

  1. 드릴 비트 만들기: cylinder() 명령어로 길고 가는 원기둥을 만듭니다. 이것이 우리의 '드릴 비트'입니다. 변수에 설정한 대로 반지름은 led_radius인 1mm, 길이는 back_panel_thickness인 5mm보다 조금 더 긴 7mm로 만듭니다.
  2. 드릴 비트 눕히기: 방금 만든 드릴 비트는 Z축 방향, 즉 하늘을 향해 서 있습니다. 우리는 상자의 뒷면에 구멍을 뚫어야 하므로 이 드릴 비트를 눕혀야 합니다. 이때 rotate([90, 0, 0]) 명령을 사용합니다. 오른손 법칙에 따라 X축을 기준으로 90도 회전시키면, 위를 향하던 드릴 비트가 이제 Y축 방향을 향해 눕게 됩니다.
  3. 정확한 위치로 이동하기: 이제 눕혀진 드릴 비트를 구멍 뚫을 위치로 옮겨야 합니다. translate() 명령어가 이 역할을 합니다.
    • x 좌표는 led_x_pos, 즉 오른쪽으로 80mm 이동합니다.
    • y 좌표는 -(mac_mini_size/2) - 1 입니다. -(mac_mini_size/2)는 상자의 가장 뒷면까지 이동하라는 뜻입니다. 여기에 -1을 더한 이유는, 드릴 비트가 벽에 딱 붙어 있으면 계산 오류가 날 수 있으니, 벽을 살짝 뚫고 들어가서 확실하게 구멍을 내기 위함입니다.
    • z 좌표는 led_z_pos, 즉 바닥에서 18mm 위로 띄웁니다.

이렇게 이동한 드릴 비트가 difference() 명령어에 의해 맥미니 본체에서 빠지면서, 그 자리에 깔끔한 원형 구멍이 생기게 됩니다.

2. 전원 포트 구멍 (네 번째 물체)

전원 케이블을 꽂을 구멍을 뚫는 과정은 LED 구멍을 뚫는 것과 완전히 똑같습니다. 단지 드릴 비트의 굵기와 위치만 다를 뿐입니다.

  1. 더 굵은 드릴 비트 만들기: 이번에는 power_radius 변수에 설정된 4mm 반지름을 가진, 더 굵은 cylinder를 만듭니다.
  2. 드릴 비트 눕히기: LED 때와 마찬가지로 rotate([90, 0, 0])을 사용해 Y축을 향하도록 눕힙니다.
  3. 다른 위치로 이동하기:
    • x 좌표는 power_x_pos, 즉 왼쪽으로 -70mm 이동합니다.
    • yz 좌표는 LED 구멍과 동일한 원리로, 상자 뒷면의 같은 높이에 위치시킵니다.

이 굵은 드릴 비트 역시 difference()에 의해 본체에서 빠지면서, 더 큰 전원 포트 구멍을 만들게 됩니다.

이렇게 difference() 블록 안에 빼내고 싶은 모양, 즉 '조각칼'이나 '드릴 비트' 역할을 하는 객체들을 계속해서 추가하면, 아무리 복잡한 모양이라도 정교하게 만들어낼 수 있습니다.

오늘 우리는 rotate 명령어를 사용해 물체를 원하는 방향으로 돌리고, 이를 이용해 상자에 구멍을 뚫는 방법을 배워보았습니다. 직접 변수들의 값을 바꿔보면서 구멍의 위치나 크기를 조절해 보세요.

번호 제목 날짜 조회 수
36 About: MSAA, Microsoft Active Accessibility 2024.09.05 671
35 센스리더에서 지원하는 SSML 2024.09.05 956
34 About: Microsoft Windows IUIAutomation Interface 2024.09.06 658
33 윈도우 접근성 기술: MSAA와 UIAutomation 비교 2024.09.09 671
32 시각장애인 접근성 향상을 위한 응용프로그램 조작 인터페이스 2024.09.11 720
31 접근성 역할에서 "link"와 "button"의 차이 2024.09.24 1120
30 시각장애인을 위한 음성 접근성 정보 제공 방법 2024.09.25 690
29 시각장애인 접근성 음성 정보의 맹점 2024.10.02 713
28 시각장애인을 위한 소리 정보 제공 시 기본 파형 사용 주의사항 2024.10.02 712
27 센스리더의 "기능 검색" 기능에 대하여 2024.10.08 911
26 센스리더의 브라우저 탭키 환경과 가상커서 탭키 환경 2024.10.11 1062
25 시각장애인과의 협업을 위한 특수문자 발음의 이해 2024.10.18 721
24 여러 단계로 이루어진 서비스 제공시 시각장애인 접근성 개선 방안 2024.10.22 734
23 [세미나] 시각장애 개발자와 함께 하는 아이디어 마이닝 #1. 목적 2024.11.11 769
22 시각장애 개발자와 함께하는 아이디어 마이닝 #2. 텍스트와 오디오 2024.11.12 842
21 시각장애 개발자와 함께하는 아이디어 마이닝 #3. 이미지 2024.11.13 712
20 시각장애 개발자와 함께하는 아이디어 마이닝 #4. 의사 코드 2024.11.14 694
19 시각장애 개발자와 함께하는 아이디어 마이닝 #5. HTML 2024.11.18 798
18 시각장애 개발자와 함께하는 아이디어 마이닝 #6. 스크립트 언어 2024.11.19 819
17 시각장애 개발자와 함께하는 아이디어 마이닝 #7. 스크립트 예시, CMD 2024.11.20 775