Community코딩 & 개발github.com

3mf-to-fusion

3MF/STL 파일을 고급 수학적 분석을 통해 Autodesk Fusion 360의 완전한 파라메트릭 BRep 솔리드 바디로 역설계하는 엔진입니다.

3mf-to-fusion란 무엇인가요?

이 스킬은 3MF 또는 STL 메시 파일을 Autodesk Fusion 360에서 편집 가능한 네이티브 파라메트릭 솔리드 바디로 변환하는 고급 CAD 역설계 엔진입니다. 단순한 메시 변환과 달리, 이 파이프라인은 수학적 '슬라이스 앤 다이스' 분석을 통해 메시의 단면, 원형 구멍(외접원 반지름 사용), 슬롯, 육각 포켓, 선삭 프로파일, 패턴 배열을 추출합니다. 추출된 지오메트리 정보를 바탕으로 Fusion 360의 타임라인에서 스케치, 사용자 파라미터, 압출, 회전, 패턴 피처를 사용하여 100% 네이티브 솔리드 바디를 생성합니다. Fusion 360 MCP 서버와 통합되어 파라메트릭 설계 의도를 완전히 보존하면서도 깔끔하고 경량화된 모델을 제공합니다. 특히 메시를 직접 솔리드로 변환하면 발생하는 수만 개의 삼각형 평면과 뷰포트 프리징, 필렛/모따기 불가 문제를 방지합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Kamish76/To-Fusion-Skill-Sets/tree/HEAD/skills/3mf-to-fusion

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

3MF/STL → Fusion 360 분석적 역설계 스킬

.3mf 또는 .stl 파일을 Autodesk Fusion 360에서 복사, 역설계 또는 재생성하라는 요청을 받으면 다음 결정론적 분석 파이프라인을 따르십시오.

CAD 역설계 명령

[!IMPORTANT] 엄격히 금지: Fusion 360의 기본 제공 "메시를 솔리드로 변환" 기능(MeshToBREP 또는 bRepBodies.addByMesh)을 절대 사용하지 마십시오.

메시 패싯을 직접 BRep으로 변환하면 수만 개의 평면 삼각형 면이 생성되어 뷰포트가 멈추고, 필렛이나 모따기를 적용할 수 없으며, 후속 CAM/도면을 망가뜨리고 모든 파라메트릭 설계 의도를 파괴합니다.

필수: 메시를 수학적으로 분해("슬라이스 앤 다이스")하고, 2D 단면과 기하학적 기본 형상(슬롯, 외접원 구멍, 카운터보어, 선삭 프로파일, 직사각형 패턴)을 추출한 후, Fusion 360 타임라인에서 스케치, 구동 사용자 파라미터, 압출, 회전, 패턴 피처를 사용하여 100% 네이티브 파라메트릭 솔리드 바디를 구성하십시오.


0단계: 사전 안전 게이트 (필수)

파일을 처리하기 전에 Autodesk Fusion 360 및 해당 MCP 서버가 활성 상태인지 확인하십시오.

  1. 카나리 프로브: fusion-mcp 도구 execute_api_script를 호출합니다.

    def run(context):
        import adsk.core, adsk.fusion
        app = adsk.core.Application.get()
        if not app:
            raise RuntimeError("Autodesk Fusion 360 애플리케이션 인스턴스를 찾을 수 없습니다.")
        design = adsk.fusion.Design.cast(app.activeProduct)
        if not design:
            raise RuntimeError("활성 Fusion 360 설계 문서가 열려 있지 않습니다.")
        print("FUSION_MCP_READY")
    
  2. 즉시 중단 규칙:

    • 호출이 실패하거나 시간 초과되면 즉시 중단하십시오.
    • 추출 스크립트나 CAD 명령을 실행하지 마십시오.
    • 사용자에게 Fusion 360을 열고, 애드인이 시작되었는지 확인하고, 활성 문서를 열도록 안내하십시오.

1단계: 슬라이스 앤 다이스 및 분류 (계측 엔진)

[!IMPORTANT] 작업공간 격리 규칙: 추출 파일을 메인 저장소 루트(예: ./extracted_cad)에 절대 출력하지 마십시오. 항상 models/<NN>_<Model_Name>/ 아래에 전용 모델 폴더가 있는지 확인하고(새 폴더라면 scaffold_text_model.py "<Model_Name>"으로 생성), 모든 슬라이스/다이스 출력을 models/<NN>_<Model_Name>/workspace/extracted_cad로 라우팅하십시오.

  1. 모델의 격리된 작업공간에서 심층 계측 엔진을 실행합니다.

    python3 <path_to_skills>/3mf-to-fusion/scripts/inspect_3mf.py <path_to_file.3mf_or_stl> --out-dir models/<NN>_<Model_Name>/workspace/extracted_cad
    
  2. models/<NN>_<Model_Name>/workspace/extracted_cad/manifest.json을 읽습니다.

  3. 각 파트에 대해 archetype 및 감지된 피처를 확인합니다.

    • 유형 A: 프리즘/단차형 CAD: 평면 베이스 압출 + 포켓 컷 + 구멍 배열.
    • 유형 T: 선삭/축대칭: Z축을 따라 정렬된 동일선상 원형 단면. 단일 반쪽 프로필 스케치 + 360° RevolveFeature를 사용하여 모델링합니다.
    • 유형 B: 다중 계층 인클로저/쉘: 단차 구성 평면 + 얇은 벽 압출 + 쉘.
    • 유형 C: 유기적 자유형 조각: 높은 비평면 곡률($> 15$ 계층). 즉시 사용자에게 경고합니다.

      "이 부품은 이산적인 평면이나 프리즘 스케치가 없는 연속적인 유기적 조각품입니다. 평면 스케치로 재구성하면 부드러운 유기적 조각이 아닌 계단식 계단 근사치가 생성됩니다."

  4. 사용자에게 요약 테이블을 제시합니다.

    파트 ID아키타입경계 상자 ($X \times Y \times Z\text{ mm}$)계층감지된 주요 기본 형상/패턴

2단계: 계측 수학 및 규칙

  1. 단위 변환 (cm = mm / 10.0):
    • Fusion 360의 내부 데이터베이스(adsk.core.ValueInput.createByReal())는 엄격하게 센티미터 (cm) 를 사용합니다.
    • 모든 스크립트 상단에 정의합니다.
      def mm(val): return adsk.core.ValueInput.createByReal(float(val) / 10.0)
      
  2. 외접원 보상 (현 오차):
    • STL 테셀레이션은 원형 구멍을 현을 따라 안쪽으로 모서리가 깎인 내접 다각형으로 근사화합니다.
    • 내부 최소 직경을 절대 사용하지 마십시오. 항상 manifest.json["primitives"]["circles"]의 radius_mm(95번째 백분위수 외접원 반지름)을 가장 가까운 $0.05\text{ mm}$로 반올림하여 사용합니다.
  3. 슬롯/오브라운 인식:
    • 루프에 두 개의 평행한 직선과 두 개의 반원형 끝이 있는 경우, 다중 세그먼트 폴리곤 대신 시드 슬롯(sketchLines + sketchArcs)으로 모델링합니다.
  4. 패턴 인식(그리드/극좌표):
    • manifest.json["patterns"]가 규칙적인 피치($\Delta X, \Delta Y$)를 감지하면 하나의 마스터 시드 컷아웃을 모델링하고 comp.features.rectangularPatternFeatures를 사용하여 복제합니다. 반복적인 동일 지오메트리를 수동으로 그리지 마십시오.

3단계: 순수 파라메트릭 Fusion 360 재구성

execute_api_script를 통해 CAD 생성을 실행합니다. 깔끔한 타임라인 피처를 사용하여 각 파트를 재구성합니다.

1단계: 발생 및 사용자 파라미터

transform = adsk.core.Matrix3D.create()
occ = root.occurrences.addNewComponent(transform)
comp = occ.component
comp.name = part_name

# 구동 파라미터 추가
params = design.userParameters
params.add(f"{part_name}_width", mm(width_mm), "mm", "베이스 너비")
params.add(f"{part_name}_length", mm(length_mm), "mm", "베이스 길이")
params.add(f"{part_name}_height", mm(height_mm), "mm", "베이스 높이")

2단계: 기본 솔리드 지오메트리

  • 유형 T (선삭)인 경우: comp.xZConstructionPlane에 반쪽 프로필을 스케치하고 comp.features.revolveFeatures.add(prof, comp.zConstructionAxis, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)을 호출합니다.
  • 유형 A/B (프리즘)인 경우: comp.xYConstructionPlane에 베이스 외곽선을 스케치하고(원점 중심) 베이스 솔리드를 압출합니다.

3단계: 2차 컷아웃 및 패턴

  • 마스터 시드 컷아웃(슬롯, 카운터보어 또는 포켓)을 그립니다.
  • adsk.fusion.FeatureOperations.CutFeatureOperation과 함께 comp.features.extrudeFeatures.add를 적용합니다.
  • comp.xConstructionAxis 및 comp.yConstructionAxis 방향으로 comp.features.rectangularPatternFeatures.add를 적용합니다.

4단계: 마무리 작업

  • 모서리 필렛(comp.features.filletFeatures) 및 모따기(comp.features.chamferFeatures)를 적용합니다.

4단계: 참조 고스트 오버레이 및 인-캐드 검사

최종 모델을 오염시키지 않고 수학적 및 치수 정렬을 확인하려면 다음을 수행합니다.

  1. 고스트 참조 메시(선택 사항): 자세한 시각적 정렬이 필요한 경우 원시 메시를 별도의 임시 참조 발생체로 가져옵니다.
    # 참조 배경으로 메시 가져오기
    ref_occ = root.occurrences.addNewComponent(transform)
    ref_occ.component.name = "Reference_Mesh_Ghost"
    # 투명 시각적 스타일 설정
    
  2. 시각적 및 간섭 검사:
    • 파라메트릭 솔리드가 메시 외피를 완전히 감싸고 정렬되었는지 확인합니다.
    • 확인 후 ref_occ를 숨기거나 제거합니다.

5단계: 타임라인 건강 및 시각적 자체 검증 게이트

  1. 타임라인 피처 검증: 재구성된 파트에 메시 바디가 없는지 확인합니다.
    assert comp.bRepBodies.count > 0, "생성된 솔리드 바디가 없습니다!"
    assert comp.meshBodies.count == 0, "컴포넌트에서 금지된 MeshBody가 감지되었습니다!"
    assert comp.sketches.count > 0, "타임라인에서 스케치를 찾을 수 없습니다!"
    
  2. 시각적 검사: get_screenshot(view="iso-top-right", width=1024, height=1024)를 호출하여 깔끔한 파라메트릭 솔리드 모델과 깔끔한 타임라인 트리를 시각적으로 확인합니다.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

관련 스킬