주말 레크 빌드: 3D 프린트 추정기

발행: (2025년 12월 8일 오후 01:27 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Introduction

이 프로젝트는 형제의 간단한 질문에서 시작되었습니다:

“필라멘트가 얼마나 필요하고, 걸리는 시간은 얼마인가요?”

그는 확인해야 할 개별 STL 파일이 약 100개 정도 있었습니다. 슬라이서가 추정치를 제공할 수는 있지만, 파일을 열고, 슬라이스하고, 통계를 읽는 작업을 반복하면 금세 지루해집니다.

What the 3D Print Estimator Does

STL 파일을 직접 스캔하고 다음과 같은 비교적 정확한 수치를 제공하는 독립형, 슬라이서에 구애받지 않는 유틸리티입니다:

  • 필라멘트 길이
  • 필라멘트 무게
  • 출력 시간

명령줄에서 사용하거나 가벼운 웹 인터페이스를 통해 사용할 수 있습니다.
GitHub repository – 3D‑Print‑Estimator

How It Works

Geometry Analysis

이 추정기는 바이너리와 ASCII STL 파일 모두를 읽고 메쉬의 모든 삼각형을 순회하면서 다음을 업데이트합니다:

  • 부피 (부호가 있는 사면체 부피를 이용)
  • 표면적
  • 경계 상자 치수

estimator.py의 핵심 함수:

# estimator.py
def read_stl(...):
    # parses STL file
    ...

def accumulate_triangle_stats(...):
    # updates bounds, area, volume
    ...

Material & Time Estimation

기하학 정보가 확보되면 estimate() 함수가 이를 출력 가능한 재료와 시간 추정치로 변환합니다.

Shell Calculation

shell_thickness = settings.perimeter_count * settings.nozzle_diameter_mm
shell_volume = stats.surface_area_mm2 * shell_thickness

Infill Calculation

internal_volume = max(stats.volume_mm3 - shell_volume, 0.0)
infill_volume = internal_volume * settings.infill_density

Filament Length & Mass

import math

filament_cross_section = math.pi * (settings.filament_diameter_mm / 2) ** 2
filament_length = total_extrusion_volume / filament_cross_section
filament_mass = (total_extrusion_volume / 1000) * settings.filament_density_g_cm3

세 가지 속도가 사용됩니다:

  • perimeter_speed_mm_s
  • infill_speed_mm_s
  • travel_speed_mm_s

이 도구는 G‑code 수준의 정밀도보다는 근사치를 제공하지만, 휴리스틱은 놀라울 정도로 잘 작동합니다.

Usage

Command‑Line Interface

python estimator.py --config printer-config.json
  • 현재 폴더의 모든 .stl 파일을 스캔합니다.
  • 기본적으로 CSV를 출력합니다 (옵션: JSON, XLSX).
  • XLSX 모드는 총합 및 시/분 형식(build_workbook())을 위한 수식을 추가합니다.

Web Interface

python estimator.py --serve --port 5000
  • 열기.
  • 단일 STL 파일 또는 STL ZIP 파일을 업로드합니다.
  • 데이터 URI 형태로 생성된 CSV, JSON, XLSX 다운로드 링크가 포함된 깔끔한 결과 테이블을 받습니다.

웹 UI는 WEB_TEMPLATE에 정의된 Flask‑렌더링 HTML 문자열을 사용해 자체 포함됩니다.

Configuration

프린터별 설정은 모두 printer-config.json에 있습니다. 예시:

{
  "layer_height_mm": 0.2,
  "nozzle_diameter_mm": 0.4,
  "perimeter_count": 2,
  "top_layers": 4,
  "bottom_layers": 4,
  "infill_density": 0.25,
  "perimeter_speed_mm_s": 40.0,
  "infill_speed_mm_s": 60.0,
  "travel_speed_mm_s": 120.0,
  "filament_diameter_mm": 1.75,
  "filament_density_g_cm3": 1.24,
  "travel_factor": 0.1
}

프린터, 재료, 혹은 원하는 출력 환경에 맞게 값을 조정하면 추정기가 자동으로 업데이트됩니다.

What It Is Not

  • 슬라이서를 대체하는 도구가 아님
  • 분 단위로 정확한 출력 시간을 예측하는 도구가 아님
  • 가변 레이어 높이, 리트랙션, 코스팅, 가속도, 기계별 특수 기능 등을 처리하는 도구가 아님

Primary Benefits

  • “필라멘트가 충분한가?” 라는 질문에 빠르게 답변
  • 출력 소요 시간을 대략적으로 추정
  • 어떤 STL이 주말 프로젝트에 적합하고, 어떤 것이 빠른 출력인지 식별

Future Improvements

  • 모델별 설정 오버라이드 기능
  • 실제 모델 + 실제 출력 시간을 입력해 휴리스틱을 보정하는 옵션형 실측 보정
  • 보다 다듬어진 웹 UI
  • 다양한 출력 설정에 따른 비용을 비교하는 배치 모드

이 프로젝트는 실험과 성장을 위한 충분한 여지를 남기면서도, 즐겁게 유지될 수 있을 만큼 작게 유지됩니다.

Back to Blog

관련 글

더 보기 »

기여할 오픈 소스 프로젝트 찾기

오픈 소스 프로젝트에 기여할 프로젝트를 찾는 것은 보통 사람들이 말하는 것보다 더 어렵습니다. 대부분의 기사들은 같은 표준 조언을 제공합니다— “good first …” 를 검색하라.