설명서:전통적인 모델링, CSG 방식
- Introduction
- Discovering FreeCAD
- Working with FreeCAD
- Python scripting
- The community
CSG는 Constructive Solid Geometry의 약자로, 솔리드 3D 기하를 다루는 기본적인 작업 방식을 설명합니다. 이는 합집합, 차집합, 교집합과 같은 불리언 연산을 사용하여 솔리드에 형상을 추가하거나 제거함으로써 복잡한 객체를 생성하는 방법입니다.
앞서 이 매뉴얼에서 설명했듯이, FreeCAD는 다양한 유형의 기하를 지원합니다. 그러나 FreeCAD에서 실제 세계의 3D 객체를 설계하는 데 가장 선호되고 실용적인 기하 유형은 주로 Part 작업대(Workbench)에서 다루는 솔리드 BREP 기하입니다. BREP는 3D 객체를 그 공간적 경계를 정의함으로써 표현합니다. BREP의 핵심 요소에는 다음이 포함됩니다. 면(face)은 객체의 표면 요소이며, 모서리(edge)는 두 면이 만나는 경계선이고, 꼭짓점(vertex)은 모서리들이 만나는 점입니다.
BREP는 여러 가지 장점을 제공합니다. 먼저, 수학적 방정식을 사용해 표면을 정의하므로 매우 정밀하고 정확한 모델링이 가능합니다. 이러한 정밀도는 정확한 치수가 요구되는 공학적 응용 분야에서 특히 중요합니다. 또한 BREP는 곡면을 면 조각으로 근사하는 폴리곤 메시와 달리, 부드럽고 세밀한 표면을 제공합니다. 이는 확대해도 품질 저하가 없는 벡터 이미지와, 확대 시 픽셀화되어 보일 수 있는 비트맵 이미지의 차이에 비유할 수 있습니다. BREP는 면, 모서리, 꼭짓점 간의 관계를 포함한 객체의 위상(topological) 정보를 완전하게 유지하므로, 불리언 연산이나 필렛과 같은 복잡한 작업을 수행하는 데 필수적입니다.
왼쪽은 메시 표현이고 오른쪽은 BREP 표현
폴리곤 메시는 삼각형 또는 사각형을 이루는 꼭짓점, 모서리, 면으로 구성됩니다. 메시는 렌더링이 간단하고 빠르지만 정밀도가 부족합니다. 확대해서 보거나 큰 축척으로 출력할 경우, 매끄러운 곡면 대신 각진 면들이 드러나게 됩니다. 반면 BREP는 수학적으로 정의된 곡선과 표면을 사용하여 훨씬 뛰어난 정확성과 매끄러움을 제공합니다. 이러한 이유로 BREP 모델은 정밀도가 요구되는 CAD 응용 분야에 더 적합합니다.
FreeCAD에서 BREP 기반 기하는 오픈소스 소프트웨어 라이브러리인 OpenCascade에 의해 관리됩니다. FreeCAD와 OpenCascade 커널 사이의 주요 인터페이스는 Part 작업대(Workbench)로, 대부분의 다른 작업대의 기반이 되며 BREP 객체를 생성하고 조작하기 위한 핵심 도구들을 제공합니다. Part 작업대에는 박스, 원통, 구와 같은 기본 형상의 프리미티브를 생성하는 도구가 포함되어 있습니다. 또한 형상을 결합(Fuse), 교차(Common), 절단(Cut)하는 불리언 연산 도구와 함께, 객체를 이동, 회전, 스케일, 복제(클론)하는 도구들도 제공됩니다.
PartDesign 작업대(workbench)나 Surface 작업대(workbench)와 같이 보다 고급 기하 생성 및 편집 도구를 제공하는 다른 FreeCAD 작업대들도 내부적으로는 Part 작업대(workbench)에 의존합니다. 따라서 Part 객체가 내부적으로 어떻게 동작하는지를 이해하고, 기본적인 Part 도구들을 능숙하게 사용하는 것은 매우 유용합니다. 많은 경우, 이러한 단순한 도구들이 더 복잡한 도구로는 효과적으로 해결하지 못하는 문제를 해결해 주기도 합니다.
Part 작업대(workbench)의 사용 예를 보여 주기 위해, 이 테이블을 오직 CSG 연산만을 사용하여 모델링할 것입니다(나사는 애드온 중 하나를 사용하고, 치수는 다음 장에서 다룰 예정입니다):
테이블 설계를 위해 새 문서를 하나 생성합니다(Ctrl+N 또는 메뉴 파일 → 새로 만들기). 문서는 처음에 콤보 뷰(Combo View) 패널의 모델(Model) 탭에서 “Unnamed”라는 이름으로 표시됩니다. 문서를 “table.FCStd”라는 이름으로 저장하면(Ctrl+Shift+S 또는 메뉴 파일 → 다른 이름으로 저장), 문서 이름이 “table”로 변경되어 프로젝트를 더 명확하게 식별할 수 있게 됩니다. 길이 단위는 밀리미터(mm)를 사용하겠습니다. 단위는 필요에 따라 화면 오른쪽 하단에 있는 메뉴를 사용하여 자유롭게 변경할 수 있습니다.
이제 Part 작업대(workbench)로 전환하여 첫 번째 테이블 다리를 생성할 수 있습니다.
Cube 버튼을 누릅니다.
- 큐브를 선택한 다음, 데이터(Data) 탭에서 다음 속성을 설정합니다:
- 길이(Length): 80 mm
- 너비(Width): 80 mm
- 높이(Height): 750 mm
- Ctrl+C 후 Ctrl+V를 눌러 큐브를 복제합니다(또는 메뉴 편집 → 복사 및 붙여넣기). 두 번째 객체가 첫 번째 객체와 정확히 겹쳐 있기 때문에 3D 뷰에서는 변화가 보이지 않습니다. 하지만 트리 뷰(Tree view)에 “Cube001”이라는 객체가 새로 나타난 것을 통해 붙여넣기가 되었음을 확인할 수 있습니다.
- 트리 뷰에서 Cube001을 선택합니다.
- 데이터(Data) 탭에서 배치(Placement) 속성을 편집하여 Cube001의 위치를 변경합니다(위치(Position) 옆의 화살표를 클릭해 확장):
- Position x: 8 mm
- Position y: 8 mm
이제 X 및 Y 방향으로 각각 8 mm씩 이동된 두 개의 길쭉한 큐브가 보일 것입니다:
- 이제 한 큐브에서 다른 큐브를 빼서 L자 형태의 테이블 다리를 만들 수 있습니다. 먼저 Cut 연산 후에도 남을 원래 큐브를 선택합니다. 그런 다음 Ctrl 키를 누른 상태에서 첫 번째 큐브에서 제거될 Cube001을 선택합니다. 선택 순서에 따라 Cut 연산의 결과가 달라진다는 점에 유의하세요. 마지막으로
Cut 버튼을 누릅니다.
새로 생성된 객체인 “Cut”에는 연산에 사용된 두 개의 큐브가 포함되어 있습니다. 실제로 이 두 큐브는 문서에서 삭제된 것이 아니라, 트리 뷰에서 숨겨진 상태로 Cut 객체 아래에 그룹화되어 있을 뿐입니다. Cut 객체 옆의 화살표를 확장하면 여전히 이 큐브들을 선택할 수 있습니다. 원한다면, 객체 이름 옆의 눈(eye) 아이콘을 클릭하거나, 우클릭 메뉴를 사용하거나, 속성을 변경하여 다시 보이게 할 수도 있습니다.
Boolean 도구를 사용해서도 Cut을 비롯한 다른 불리언 연산을 수행할 수 있습니다.
- 이제 나머지 세 개의 테이블 다리를 만들기 위해, 원래 큐브를 여섯 개 더 복사합니다. 큐브가 아직 클립보드에 복사된 상태이므로 Ctrl+V를 6번 누르기만 하면 됩니다. 그런 다음 각 새 큐브의 위치를 다음과 같이 변경합니다:
- Cube002: x: 0, y: 800 mm
- Cube003: x: 8 mm, y: 792 mm
- Cube004: x: 1200 mm, y: 0
- Cube005: x: 1192 mm, y: 8 mm
- Cube006: x: 1200 mm, y: 800 m
- Cube007: x: 1192 mm, y: 792 mm
이제 “호스트(host)” 큐브를 먼저 선택한 다음, 잘려 나갈 큐브를 선택하여 추가로 세 번의 Cut 연산을 수행합니다. 이렇게 하면 총 네 개의 Cut 객체가 만들어집니다.
기본 큐브를 여섯 번 복제하는 대신, 앞에서 처음 두 개의 큐브로 만든 Cut 객체를 복사하여 세 번 붙여넣고, 각 잘린 다리를 올바른 방향으로 회전시키는 방법도 사용할 수 있었습니다. FreeCAD에서는 같은 결과를 얻기 위한 여러 가지 방법이 존재하는 경우가 많습니다. 이는 상황에 따라 서로 다른 기법이 더 쉽거나 더 효율적일 수 있으므로, 항상 염두에 두어야 할 중요한 점입니다.
이제 동일한 Cut 연산을 사용하여 나사 구멍을 만들겠습니다. 각 다리에 2개씩, 총 8개의 구멍이 필요하므로 감산할 객체를 8개 만들 수도 있습니다. 하지만 다른 방법을 살펴보겠습니다. 각 원통이 두 개의 다리를 관통하도록 하여, 총 4개의 원통을 만드는 방식입니다. 따라서 Cylinder 도구를 사용해 원통을 생성합니다. 원통 하나를 만든 뒤 세 번 복제하면 됩니다. 각 원통의 반지름은 6 mm로 설정합니다. 이번에는 데이터(Data) 탭의 배치(Placement) 속성을 사용해 원통을 회전시켜야 합니다
(참고: 각도(Angle)를 설정하기 전에 반드시 축(Axis) 속성을 먼저 변경해야 하며, 그렇지 않으면 회전이 적용되지 않습니다):
- Cylinder: 높이(height): 1300 mm, 각도(angle): 90°, 축(axis): x: 0, y: 1, z: 0, 위치(position): x: -10 mm, y: 40 mm, z: 720 mm
- Cylinder001: 높이(height): 1300 mm, 각도(angle): 90°, 축(axis): x: 0, y: 1, z: 0, 위치(position): x: -10 mm, y: 840 m, z: 720 mm
- Cylinder002: 높이(height): 900 mm, 각도(angle): 90°, 축(axis): x: -1, y: 0, z: 0, 위치(position): x: 40 mm, y: -10 mm, z: 700 m
- Cylinder003: 높이(height): 900 mm, 각도(angle): 90°, 축(axis): x: -1, y: 0, z: 0, 위치(position): x: 1240 mm, y: -10 mm, z: 700 mm
원통이 테이블 다리보다 바깥으로 길게 돌출되어 있는 것을 확인할 수 있을 것입니다. 이는 모든 솔리드 기반 3D 애플리케이션과 마찬가지로, FreeCAD에서도 객체의 면이 서로 동일한 평면(co-planar)에 있을 경우 불리언 연산이 실패하는 일이 있기 때문입니다. 이러한 잠재적인 오류를 피하기 위해, 원통의 끝부분을 다리의 표면 밖으로 나오도록 배치한 것입니다.
- 이제 테이블 다리에 구멍을 만들기 위해 감산 연산을 수행하겠습니다. 첫 번째 다리를 선택한 다음, Ctrl 키를 누른 상태에서 그 다리를 관통하는 원통 하나를 선택하고 Cut 버튼을 누릅니다. 다리에 구멍이 생성되며, 사용된 원통은 숨겨집니다. 이 원통은 다리의 새 Cut 객체 옆에 있는 화살표를 확장하면 트리 뷰에서 확인할 수 있습니다.
- 해당 원통이 관통하는 다른 다리를 선택하고 같은 작업을 반복합니다. 이때 원통은 3D 뷰에서 보이지 않으므로, 트리 뷰에서 원통을 선택해야 합니다. (또는 원통을 다시 보이게 한 뒤 3D 뷰에서 선택해도 됩니다.) 이 과정을 다른 다리들에 대해서도 반복하여, 각 다리에 두 개의 구멍이 생기도록 합니다.
보시다시피, 이제 각 다리는 트리 뷰에서 여러 연산이 중첩된 구조로 표현됩니다. 우리가 생성한 모든 기하는 파라메트릭 상태로 유지되며, 언제든지 이전 연산들의 어떤 매개변수라도 변경할 수 있습니다. FreeCAD에서는 이러한 연산들의 연속을 우리가 수행한 작업의 이력을 기록한다는 의미에서 “모델링 히스토리(modeling history)”라고 부릅니다.
FreeCAD의 또 다른 특징은 3D 객체라는 개념과 3D 연산이라는 개념이 서로 분리되지 않고 하나로 섞여 있다는 점입니다. 예를 들어 “Cut”은 하나의 연산을 의미함과 동시에, 그 연산의 결과로 생성된 3D 객체를 가리키기도 합니다. FreeCAD에서는 이러한 개념을 “객체(object)”나 “연산(operation)”보다는, 흔히 “피처(feature)”라고 부르기도 합니다.
이제 테이블 상판을 모델링해 보겠습니다. 단순한 직육면체가 될 것이므로, 또 하나의 Cube를 만든 다음 데이터(Data) 탭에서 치수를 다음과 같이 변경합니다:
- Box: 길이(length): 1260 mm, 너비(width): 860 mm, 높이(height): 80 mm, 위치(position): x: 10 mm, y: 10 mm, z: 670 mm
보기(View) 탭에서는 Shape Appearance 속성을 변경하여 갈색 계열의 나무 재질처럼 보이도록 색상을 지정할 수 있습니다.
이제 다섯 개의 부품이 모두 완성되었으므로, “Cut015”와 같은 이름 대신 더 의미 있는 이름을 붙일 좋은 시점입니다. 트리 뷰에서 각 객체를 마우스 오른쪽 버튼으로 클릭하거나(또는 객체를 선택한 상태에서 F2를 눌러) 이름을 변경할 수 있습니다. 객체에 적절한 이름을 붙이는 것은 모델링 방식만큼이나 중요할 수 있습니다.
- 이제 애드온을 사용하여 나사를 삽입해 보겠습니다. Fasteners는 FreeCAD 커뮤니티 구성원이 개발한 매우 유용한 애드온입니다. 이 애드온은 FreeCAD addons 저장소에서 찾을 수 있습니다. 애드온 작업대(workbench)를 설치하는 것은 매우 간단합니다! 자세한 내용은 Addon manager를 참고하세요.
- Fasteners 작업대(workbench)를 설치하고 FreeCAD를 다시 시작한 뒤, 작업대(workbench) 선택 드롭다운 목록에서 Fasteners를 선택합니다. 이제 앞에서 만든 구멍 중 하나에 나사를 추가해 보겠습니다. 먼저 테이블 다리 중 하나에 있는 구멍의 원형 모서리를 선택합니다.
- 그런 다음 Fasteners 작업대(workbench)에서 제공되는 나사 중 하나를 선택합니다. 이 예제에서는 EN 1665 Hexagon bolt with flanges, heavy series를 사용하겠습니다. 나사는 구멍 안에 배치되며 자동으로 정렬되고, 지름도 구멍의 크기에 맞게 자동으로 설정됩니다. 경우에 따라 나사의 방향을 Invert 속성을 사용해 뒤집어야 할 수도 있습니다.
- 나머지 일곱 개의 구멍에 대해서도 이 작업을 반복하면, 테이블이 완성됩니다!
앞서 언급했듯이, 서로 다른 단계들을 통해서도 동일한 결과를 얻을 수 있습니다. 이를 보여 주기 위해, 이번에는 다른 방법론을 사용하여 같은 테이블을 만들어 보겠습니다. 기억하세요. 옳고 그른 방법은 없으며, 각자의 창의적인 접근 방식이 있을 뿐입니다.
앞선 방법과 비슷하게 시작하되, 다음과 같은 치수를 가진 큐브를 생성합니다: 길이 80 mm, 너비 8 mm, 높이 750 mm
Cube 버튼을 선택하여 큐브를 생성하고, 데이터(Data) 탭에서 다음 속성을 설정합니다:
- 길이(Length): 80 mm
- 너비(Width): 8 mm
- 높이(Height): 750 mm
- 다음으로
Cylinder를 생성하고, 다음 속성을 설정합니다:
- 반지름(radius): 6 mm, 높이(height): 100 mm, 각도(angle): 90°, 축(axis): x: 1, y: 0, z: 0, 위치(position): x: 40 mm, y: 40 mm, z: 720 mm
- 다음으로 Cut 연산을 적용합니다. 큐브를 먼저 선택한 다음 Ctrl 키를 누른 상태에서 원통을 선택합니다. 어떤 객체가 남는지는 선택 순서에 따라 결정된다는 점을 기억하세요. 그런 다음
Cut 버튼을 누릅니다.
- 이후 Ctrl+C와 Ctrl+V를 눌러 Cut 객체를 복사하여 붙여넣습니다(또는 메뉴 편집 → 복사 및 붙여넣기):
- 각도(angle): 90°, 축(axis): x: 0, y: 0, z: 1, 위치(position): x: 8 mm
- 두 객체를 모두 선택한 다음
Fuse 도구를 적용합니다. 이제 두 객체가 결합되어 L자 형태의 테이블 다리가 됩니다.
- 결합된 다리를 복사하여 붙여넣고, 다음과 같이 위치를 설정합니다:
- 각도(angle): 90°, 축(axis): x: 0, y: 0, z: -1, 위치(position): y: 800 mm
- 두 개의 다리를 선택한 뒤
Compound를 생성합니다.
- 생성된 컴파운드를 복사하여 붙여넣고, 다음과 같이 위치를 설정합니다:
- 각도(angle): 180°, 축(axis): x: 0, y: 0, z: 1, 위치(position): x: 1200 mm, y: 800 mm
이렇게 해서 테이블 다리가 완성됩니다. 이제 테이블 상판을 만들어 보겠습니다.
- Cube를 하나 생성하고, 다음과 같이 속성을 편집합니다:
- 길이(Length): 1184 mm
- 너비(Width): 784 mm
- 높이(Height): 80 mm
- 위치(position): x: 8 mm, y: 8 mm, z: 670 mm
이후에는 앞서와 동일하게 Fasteners 작업대(workbench)를 사용하여 나사를 추가하면 됩니다.
Part 객체의 내부 구조
앞에서 살펴본 것처럼, FreeCAD에서는 전체 객체뿐만 아니라 그 일부(예: 나사 구멍의 원형 모서리)도 선택할 수 있습니다. 지금은 Part 객체가 내부적으로 어떻게 구성되어 있는지 간단히 살펴보기에 좋은 시점입니다. Part 형상을 생성하는 모든 작업대(workbench)는 다음과 같은 기본 요소들을 기반으로 합니다:
- Vertices: 꼭짓점은 (보통 끝점에 해당하는) 점으로, 다른 모든 요소가 이 위에 구축됩니다. 예를 들어, 선 하나에는 두 개의 꼭짓점이 있습니다.
- Edges: 모서리는 선, 원호, 타원 또는 NURBS 곡선의 형태를 가질 수 있습니다. 일반적으로 두 개의 꼭짓점을 가지지만, 닫힌 원과 같이 하나만 가지는 특수한 경우도 있습니다.
- Wires: 와이어는 끝점으로 서로 연결된 모서리들의 연속입니다. 와이어에는 어떤 유형의 모서리든 포함될 수 있으며, 닫혀 있을 수도 있고 열려 있을 수도 있습니다.
- Faces: 면은 평면일 수도 있고 곡면일 수도 있습니다. 하나의 닫힌 와이어로 면의 경계를 정의할 수도 있고, 면에 구멍이 있는 경우에는 여러 개의 와이어로 정의될 수도 있습니다.
- Shells: 셸은 모서리로 서로 연결된 면들의 집합입니다. 열려 있을 수도 있고 닫혀 있을 수도 있습니다.
- Solids: 닫힌 셸은 솔리드로 변환될 수 있습니다. 솔리드는 내부와 외부의 개념을 가지며, 많은 작업대(workbench)들이 이를 기반으로 생성된 객체가 실제 세계에서 제작 가능한지를 보장합니다.
- Compounds: 컴파운드는 하나 이상의 유형에 속하는 다른 형상들을 하나의 객체로 결합한 것입니다.
3D 뷰에서는 개별 꼭짓점(vertices), 모서리(edges) 또는 면(faces)을 선택할 수 있습니다. 이들 중 하나를 선택하면, 해당 요소가 속한 전체 객체도 함께 선택됩니다.
공동 설계에 대한 참고 사항
위의 테이블을 보고 설계가 그다지 좋지 않다고 느낄 수도 있습니다. 다리가 상판에 그다지 튼튼하게 고정된 것처럼 보이지 않기 때문입니다. 보강 부품을 추가하고 싶을 수도 있고, 그 밖에 다른 개선 아이디어가 떠오를 수도 있습니다. 바로 이런 점에서 공유의 가치가 드러납니다. 아래 링크에서 이 예제에서 만든 파일을 다운로드한 뒤, 이를 수정하여 더 나은 설계로 개선할 수 있습니다. 그리고 그렇게 개선된 파일을 다시 공유한다면, 다른 사람들이 그것을 더욱 발전시키거나, 잘 설계된 여러분의 테이블을 자신의 프로젝트에 활용할 수도 있을 것입니다. 여러분의 설계가 또 다른 사람들에게 새로운 아이디어를 주고, 어쩌면 세상을 조금 더 나은 방향으로 만드는 데 기여하게 될지도 모릅니다.
다운로드
Read more









