본문 바로가기
  • You find inspiration to create your own path !
업무 자동화/FreeCAD

FreeCAD] 파이썬 파일로 모델만들기 #2

by ToolBOX01 2025. 8. 30.
반응형
box = doc.addObject("Part::Box", "myBox")

box = doc.addObject("Part::Box", "myBox") 명령어는 새로운 3D 박스 객체를 문서에 추가하는 역할을 합니다. 간단하게 설명하면 다음과 같습니다.

  • doc.addObject: FreeCAD에게 문서에 새로운 객체를 추가하라고 명령합니다.
  • Part::Box: 만들 객체의 타입을 지정합니다. 이 경우, 3D 박스 객체입니다.
  • "myBox": 새로 만들어진 객체에 "myBox"라는 이름을 부여합니다.
                    이 이름으로 나중에 객체를 더 쉽게 찾고 참조할 수 있습니다.

이 명령어를 실행하면, box라는 변수에는 새로 생성된 박스 객체에 대한 참조(reference)가 저장됩니다.
이 참조를 통해 나중에 박스의 속성을 수정하거나 조작할 수 있습니다.

객체는 트리 뷰(Tree View)에는 나타나지만, 3D 뷰에서는 아직 보이지 않습니다. 왜냐하면 파이썬 스크립트로 작업할 때는 문서가 자동으로 재계산(recompute)되지 않기 때문입니다. 객체를 화면에 표시하거나 변경 사항을 반영하려면 필요할 때마다 수동으로 재계산 명령을 실행해야 합니다.

doc.recompute()

이제 우리가 만든 박스가 3D 뷰에 나타났습니다. FreeCAD 툴바의 버튼들이 객체를 추가할 때, 실제로는 두 가지 작업을 수행합니다. 객체를 추가하는 작업화면을 재계산하는 작업입니다.

예를 들어, Part 워크벤치에서 구(sphere)를 추가하는 버튼을 눌러보세요. 그러면 파이썬 콘솔에 두 줄의 파이썬 코드가 한 줄씩 자동으로 실행되는 것을 볼 수 있습니다.

doc.addObject("Part::Sphere", "mySphere"): 구 객체를 문서에 추가하는 명령어

doc.recompute(): 추가된 객체를 화면에 표시하기 위해 문서를 재계산하는 명령어

이처럼 FreeCAD의 GUI 버튼은 사용자의 편의를 위해 객체 생성과 재계산 과정을 한 번에 처리해주며, 이를 통해 우리는 파이썬 코드로 모델링할 때 doc.recompute() 명령어를 직접 실행해야 하는 이유를 이해할 수 있습니다.


Vectors and Placements

3D 애플리케이션에서 벡터(Vector)는 매우 중요한 개념입니다. 벡터는 기본적으로 3개의 숫자(x, y, z) 목록으로, 3D 공간에서 점, 위치, 또는 방향을 나타냅니다. 벡터는 3D 환경에서 형상을 정의하고, 변형(translations), 회전(rotations), 크기 조정(scaling) 같은 변환 작업을 수행하는 데 핵심적인 역할을 합니다.

FreeCAD에서 벡터는 객체를 생성하고 조작하는 데 광범위하게 사용됩니다. 벡터를 이용해 덧셈, 뺄셈, 외적(cross products), 내적(dot products), 투영(projections) 등 다양한 수학적 연산을 수행할 수 있습니다. 이러한 연산을 통해 거리, 각도, 방향을 계산하거나 공간 내 객체들의 관계를 정의할 수 있습니다.

따라서 FreeCAD에서 스크립팅과 사용자 정의 작업을 효과적으로 하려면 벡터의 개념과 작동 방식을 이해하는 것이 필수적입니다. 예를 들어, 객체의 위치를 지정하거나, 방향을 정의하거나, 스윕(sweeps) 또는 로프트(lofts) 같은 복잡한 작업의 경로를 계산할 때 벡터가 사용됩니다.

FreeCAD에서 벡터는 Vector 클래스로 표현되며, 이 클래스는 연산을 수행하고 각 요소를 참조하기 위한 다양한 메서드와 속성을 제공합니다. 이 기능을 익히면 FreeCAD의 3D 환경을 코드로 다루는 능력이 크게 향상될 것입니다. FreeCAD에서 벡터는 다음과 같이 작동합니다.

myvec = FreeCAD.Vector(2, 0, 0)
print(myvec)
print(myvec.x)
print(myvec.y)
othervec = FreeCAD.Vector(0, 3, 0)
sumvec = myvec.add(othervec)

위 명령어를 간단히 정리하면 다음과 같습니다.

  • myvec = FreeCAD.Vector(2,0,0): X가 2, Y와 Z가 0인 벡터 myvec를 생성합니다.
  • print(myvec): 벡터 myvec를 그 구성 요소(X, Y, Z)와 함께 출력합니다.
  • print(myvec.x): myvec의 X 구성 요소를 출력합니다.
  • print(myvec.y): myvec의 Y 구성 요소를 출력합니다.
  • othervec = FreeCAD.Vector(0,3,0): X가 0, Y가 3, Z가 0인 두 번째 벡터 othervec를 생성합니다.
  • sumvec = myvec.add(othervec): myvec와 othervec를 더해 각 구성 요소의 합을 담고 있는 새로운 벡터 sumvec를 만듭니다.

 

  • print(myvec)의 값은 **(2, 0, 0)**입니다. 이 값은 myvec = FreeCAD.Vector(2,0,0) 명령어로 생성된 벡터의 각 구성 요소(X, Y, Z)를 나타냅니다.
  • print(myvec.x)의 값은 **2**입니다. 이는 myvec 벡터의 X축 구성 요소만 출력하라는 명령어이기 때문입니다
  • print(myvec.y) 의 값은 **0**입니다. 이는 myvec 벡터의 Y축 구성 요소만 출력하라는 명령어이기 때문입니다
print(box.Placement)
print(box.Placement.Base)
box.Placement.Base = sumvec
otherpla = FreeCAD.Placement()
otherpla.Base = FreeCAD.Vector(5, 5, 0)
box.Placement = otherpla

객체의 배치(Placement)와 위치(Base) 조작

  • print(box.Placement): 박스 객체의 배치(Placement) 정보를 출력합니다. 이 정보에는 3D 공간에서의 객체 위치(position), 회전(rotation), 방향(orientation) 등이 모두 포함됩니다.
  • print(box.Placement.Base): 박스 객체의 위치(Base) 정보만 출력합니다. Base는 3D 공간에서의 객체 위치를 나타내는 벡터입니다.
  • box.Placement.Base = sumvec: 박스의 기본 위치를 sumvec 벡터의 값으로 설정합니다. 이 명령을 통해 박스가 sumvec이 나타내는 새로운 위치로 이동합니다.
  • otherpla = FreeCAD.Placement(): otherpla라는 이름의 새로운 배치(Placement) 객체를 만듭니다.
  • otherpla.Base = FreeCAD.Vector(5,5,0): otherpla 객체의 기본 위치를 좌표 (5, 5, 0)인 벡터로 설정합니다.
  • box.Placement = otherpla: otherpla 객체의 모든 배치 정보(위치와 방향)를 박스에 적용합니다. 이 명령으로 박스는 otherpla에 정의된 새로운 위치와 방향으로 업데이트됩니다.

 


FreeCAD 외부에서 직접 파이썬 스크립트를 작성하고 실행하는 방법도 있습니다. Vim과 같은 원하는 편집기를 사용해 스크립트를 만든 후, .py 확장자로 저장하면 됩니다. 이렇게 저장한 스크립트를 FreeCAD에서 실행하려면 다음 단계를 따르세요.

  1. FreeCAD에서 **파일(File) → 열기(Open)**를 클릭해 작성한 .py 파일을 엽니다.
  2. 스크립트는 메인 뷰(Main view) 영역에 새 탭으로 열립니다.
  3. 툴바에 있는 매크로 실행(Execute macro) 버튼을 클릭하여 스크립트를 실행합니다.
  4. 스크립트 실행 중 발생하는 오류나 출력 내용은 **리포트 뷰(Report view)**에 표시됩니다.

스크립트를 이미 FreeCAD에 불러온 상태에서 외부 편집기로 수정하고 저장하면, "수정된 스크립트를 다시 불러오겠습니까?"라는 대화 상자가 나타납니다. FreeCAD 스크립트 기초 페이지나 파워 유저 허브에서 관련 페이지를 참고하여 더 자세한 내용을 학습할 수 있습니다.

▣ Macro를 사용하여 파이썬 코드 실행 하기

import FreeCAD as App
import Part

def create_rectangular_box(length, width, height):
    """
    Creates a rectangular box (solid) with the specified dimensions.
    
    Args:
        length (float): The length of the box.
        width (float): The width of the box.
        height (float): The height of the box.
        
    Returns:
        The created Part::Feature object.
    """
    # Create a new document.
    doc = App.newDocument("RectangularBox")
    
    # Create the box shape using the Part workbench.
    box_shape = Part.makeBox(length, width, height)
    
    # Add the shape to the document as a feature and name it.
    box_object = doc.addObject("Part::Feature", "MyBox")
    box_object.Shape = box_shape
    
    # Recompute the document to show the box in the 3D view.
    doc.recompute()
    
    print(f"Rectangular box created with dimensions: {length}x{width}x{height} mm.")
    return box_object

# --- Main script execution ---
# Define the dimensions for the box.
box_length = 10.0
box_width = 20.0
box_height = 30.0

# Call the function to create the box.
my_box = create_rectangular_box(box_length, box_width, box_height)

by korealionkk@gmail.com


반응형