Habilidade de Reconstrução de Mídia (Imagem / Vídeo / Pacote de Referência) para Fusion 360
Quando o usuário fornecer uma foto, uma pasta de referência multiângulo ou um vídeo (.mp4, .mov, .png, .jpg, .webp) e pedir para recriar o objeto no Autodesk Fusion 360, siga este fluxo de trabalho de engenharia determinístico de 6 fases.
MANDAMENTO CAD ESTRITO:
- Nunca pule diretamente para a escrita de extrusões MCP do Fusion sem executar
process_media.py, estabelecer um datum de escala em milímetros do mundo real e escrever uma Lista de Materiais (BOM) Cinemática. - Cada componente deve ser reconstruído usando Sketches nativos, Planos de Construção, Linhas/Arcos/Círculos de Sketch, Parâmetros de Usuário e Recursos de Extrusão/Filete/Junta na linha do tempo do Fusion 360. Nunca gere corpos de malha brutos (
root.meshBodies.add).
Fase 0: Portão de Segurança Pré-Voo e Ambiente Monorepo (Obrigatório)
Antes de criar geometria CAD no Fusion 360, alinhe seu espaço de trabalho e verifique a conectividade MCP ao vivo:
-
Alinhamento do Monorepo CAD:
- Espaço de trabalho principal: Monorepo CAD ativo ou raiz do projeto (por exemplo,
CAD_MONOREPO_ROOTou espaço de trabalho atual). - Garantia de Isolamento Estrito: Nunca crie arquivos temporários, scripts ou renders na raiz do repositório nem mude
shared/. - Armazene novos modelos em
models/<NN>_<Model_Name>/(ex:models/02_Modular_Desk_Organizer/). Se estiver iniciando um novo modelo, crie o esqueleto comscaffold_text_model.py "<Model_Name>". - Importe ajudantes CAD universais de
shared/(fusion_client,cad_primitives,hardware_library,scene_animator). - Leia a memória de referência de domínio antes de escrever scripts:
references/kinematic-archetypes.md(equações de mecanismos verificadas)references/fdm-hardware-tolerances.md(folgas de impressão e rebaixos para fixadores)references/fusion-api-gotchas.md(animação de alta velocidade e correções de API)
- Espaço de trabalho principal: Monorepo CAD ativo ou raiz do projeto (por exemplo,
-
Sonda Canário: Chame a ferramenta
fusion-mcpexecute_api_scriptcom:def run(context): import adsk.core, adsk.fusion app = adsk.core.Application.get() if not app: raise RuntimeError("Instância do aplicativo Autodesk Fusion 360 não encontrada.") design = adsk.fusion.Design.cast(app.activeProduct) if not design: raise RuntimeError("Nenhum documento de design ativo do Fusion 360 aberto.") print("FUSION_MCP_READY") -
Regra de Falha Rápida:
- Você pode executar as Fases 1-3 de metrologia de mídia enquanto o Fusion 360 está fechado, mas se
FUSION_MCP_READYfalhar antes da Fase 4, PARE antes de enviar scripts de construção CAD e instrua o usuário a abrir o Fusion 360 com um documento de design ativo.
- Você pode executar as Fases 1-3 de metrologia de mídia enquanto o Fusion 360 está fechado, mas se
Fase 1: Ingestão de Mídia e Extração de Keyframe / Contorno
[!IMPORTANT] Regra de Isolamento do Espaço de Trabalho: Nunca gere arquivos de processamento de mídia na raiz principal do repositório (por exemplo,
./media_workspaceé proibido). Sempre garanta que exista uma pasta de modelo dedicada emmodels/<NN>_<Model_Name>/e direcione todo o processamento de mídia paramodels/<NN>_<Model_Name>/workspace/media.
- Execute o motor de pré-processamento e metrologia na imagem, vídeo ou diretório de entrada no espaço de trabalho isolado do modelo:
python3 <caminho_para_skills>/media-to-fusion/scripts/process_media.py "<caminho_da_mídia_ou_pasta>" --out-dir models/<NN>_<Model_Name>/workspace/media - Inspecione
models/<NN>_<Model_Name>/workspace/media/media_manifest.jsone visualize os artefatos visuais gerados comread_file:- Para Pastas de Referência: Veja
dataset_overview.pngprimeiro, depois inspecione sub-espaços de trabalho individuais (models/<NN>_<Model_Name>/workspace/media/<slug>/). - Para Vídeos: Veja
contact_sheet.pnge arquivos individuaiskeyframe_XX_grid.png(filtrados automaticamente para rejeitar fade-ins pretos, desfoque de movimento e passagens de mão, capturando estados cinemáticos colapsados, intermediários e implantados). - Para Imagens: Veja
annotated_grid.png(grade de régua de pixels de contraste duplo: 100px maior / 50px menor) econtours_preview.png(contornos Canny detectados + centroides de furos/ranhuras e passo mediano de pixels na mesma linha). - Verificação de Tela Dividida: Verifique
viewport_layout.is_splitemmedia_manifest.json(por exemplo, vistas ortográficas Frontal e Direita lado a lado em uma única imagem) para que as extensões de pixel sejam medidas dentro de cada sub-viewport independentemente.
- Para Pastas de Referência: Veja
Fase 2: Calibração de Escala em Múltiplos Níveis (Encontrando o "Datum Áureo")
Antes de modelar qualquer coisa, estabeleça a escala em milímetros do mundo real (mm_per_px) usando esta hierarquia de prioridades estrita:
- Prioridade 1 — Indicações de Dimensão Explícitas ou Restrições de Base de Impressão na Mídia:
- Verifique as imagens de referência em busca de setas de indicação de dimensão (por exemplo, largura total
35 cm / 350 mm, altura63 cm / 630 mm, profundidade32 cm / 320 mmou indicações de bandeja interna como330 x 100 x 70 mm). - Verifique as indicações de base de impressão 3D (por exemplo,
"PARA IMPRESSORAS 220 x 220 mm"→ largura/comprimento máximo de peça única é tipicamente200–210 mm).
- Verifique as imagens de referência em busca de setas de indicação de dimensão (por exemplo, largura total
- Prioridade 2 — Ecossistema Padrão e Características de Hardware Visíveis no Quadro:
- Padrão de Painel Pegboard IKEA Skådis:
- Passo horizontal de ranhuras na mesma linha (centro a centro):
40,0 mm - Passo vertical linha a linha:
20,0 mm(linhas alternadas deslocadas horizontalmente em20,0 mm) - Dimensões da ranhura:
5,0 mmde largura ×15,0 mmde altura (ranhura estadual/oblonga:10,0 mmde centro a centro vertical reto comR = 2,5 mmde extremidades totalmente arredondadas) - Espessura padrão da placa:
5,0 mm(3,2 mm – 4,0 mmem painéis pegboard modulares impressos em 3D)
- Passo horizontal de ranhuras na mesma linha (centro a centro):
- Eletrônicos e Hardware Mecânico:
- Recorte de switch MX de teclado mecânico:
14,0 x 14,0 mm(passo de tecla 1u =19,05 mm) - Largura padrão de smartphone (por exemplo, quando mostrado apoiado em um suporte):
~71,5 mm - Abertura do receptáculo USB-C:
8,94 x 3,26 mm - Fixadores: diâmetro da cabeça do parafuso M3 =
5,5 mm(furo de folga =3,2–3,4 mm), cabeça M4 =7,0 mm
- Recorte de switch MX de teclado mecânico:
- Padrão de Painel Pegboard IKEA Skådis:
- Prioridade 3 — Referência Ergonômica / Mão:
- Se mãos humanas seguram a peça e não existe datum de hardware, use a largura média do polegar adulto (
~20,0 mm) ou a largura da palma (~85,0 mm), e exponha a largura total como um Parâmetro de Usuário mestre do Fusion (Tray_Width) para que o usuário possa redimensionar com um clique.
- Se mãos humanas seguram a peça e não existe datum de hardware, use a largura média do polegar adulto (
Fase 3: Decomposição Cinemática e Estrutural (BOM)
Decomponha a montagem em uma Lista de Materiais (BOM) de Componentes estruturada antes de escrever qualquer script MCP do Fusion:
- Classifique Componentes Fixos vs. Móveis:
- Componentes de Base / Estrutura Fixos: por exemplo,
Top_Anchor_Tray,Rear_Support_Legs(estendendo-se até o plano do solo $Z = 0$) eBackboard_Pegboard_Panels. - Componentes Acionados / Acopladores: por exemplo,
Stepped_Trays(Nível 2..N), gavetas deslizantes ou portas giratórias. - Componentes de Ligação / Restrição: por exemplo,
Parallel_Link_Bars,Side_Joiner_Clips(clipes H unindo metades de pegboard divididas),Pivot_Pins. - Inserções Modulares / Acessórios: por exemplo,
Divider_Sub_Trays(largura $1/3$, $1/2$ ou $1/1$ com 1–3 compartimentos),Skadis_Hooks.
- Componentes de Base / Estrutura Fixos: por exemplo,
- Aplique Leis Cinemáticas sobre Ruído de Pixel de Perspectiva:
- Lei do Paralelogramo de Pinos Múltiplos em Escalonamento Coplanar (Barras de Camada Única Não Sobrepostas):
Antes de modelar qualquer ligação, conte o número exato de barras e pinos por barra nas vistas ortográficas/de perspectiva lateral:
- Nunca presuma que barras de ligação compartilham pinos ponta a ponta em camadas laterais sobrepostas se a referência mostra barras coplanares paralelas e não sobrepostas (por exemplo, 4 barras paralelas organizadas em escalonamento:
Barra 1= barra curta de 2 pinos,Barra 2= barra longa de 3 pinos,Barra 3= barra longa de 3 pinos,Barra 4= barra curta de 2 pinos). - Em uma ligação coplanar escalonada de $N$ níveis, cada bandeja $t \in {0, \dots, N-1}$ tem estações de pino horizontais $s \in {0, 1, 2}$ espaçadas por
Pin_Station_Pitch$\Delta y_{\text{station}}$ ao longo da profundidade da bandeja (Estação Afrontal,Estação Bmédia,Estação Ctraseira), e cada barra conecta (Bandeja $t$, Estação $s$) $\longrightarrow$ (Bandeja $t+1$, Estação $s+1$) com passo de furo de nível único $L_{\text{step}} = \sqrt{\Delta y_{\text{station}}^2 + \Delta Z_{\text{colapsado}}^2}$:Barra 1 (2 pinos, comprimento L_step):(Bandeja 0, Estação B) -> (Bandeja 1, Estação C)Barra 2 (3 pinos, comprimento 2*L_step):(Bandeja 0, Estação A) -> (Bandeja 1, Estação B) -> (Bandeja 2, Estação C)Barra 3 (3 pinos, comprimento 2*L_step):(Bandeja 1, Estação A) -> (Bandeja 2, Estação B) -> (Bandeja 3, Estação C)Barra 4 (2 pinos, comprimento L_step):(Bandeja 2, Estação A) -> (Bandeja 3, Estação B)
- No ângulo da barra $\theta$ a partir da vertical, a translação bandeja a bandeja é:
$$\Delta Y_{\text{bandeja}}(\theta) = -L_{\text{step}}\sin(\theta) - \Delta y_{\text{station}}, \qquad \Delta Z_{\text{bandeja}}(\theta) = -L_{\text{step}}\cos(\theta)$$
- No Estado Colapsado ($\theta_{\text{col}} = -\arcsin(\Delta y_{\text{station}} / L_{\text{step}})$), $\Delta Y_{\text{bandeja}} = + \Delta y_{\text{station}} - \Delta y_{\text{station}} = 0\text{ mm}$ (as bandejas empilham 100% verticalmente enquanto as barras estão em $-\theta_{\text{col}}$, e as paredes traseiras das bandejas ficam rentes à frente das pernas de suporte traseiras).
- No Estado Aberto ($\theta_{\text{open}} = +\arcsin(\Delta y_{\text{station}} / L_{\text{step}})$), as mesmas barras balançam através da vertical para $+\theta_{\text{open}}$, avançando cada bandeja em $\Delta Y_{\text{bandeja}} = -2 \Delta y_{\text{station}}$, mantendo todas as 4 barras em uma única camada coplanar com zero pinos compartilhados!
- Nunca presuma que barras de ligação compartilham pinos ponta a ponta em camadas laterais sobrepostas se a referência mostra barras coplanares paralelas e não sobrepostas (por exemplo, 4 barras paralelas organizadas em escalonamento:
- Lei do Paralelogramo de Pinos Múltiplos em Escalonamento Coplanar (Barras de Camada Única Não Sobrepostas):
Antes de modelar qualquer ligação, conte o número exato de barras e pinos por barra nas vistas ortográficas/de perspectiva lateral:
- Regra de Modularidade da Base de Impressão:
- Se um painel plano (como uma placa traseira Skådis alta) exceder a altura da base da impressora de destino (por exemplo,
> 210 mm), divida-o horizontalmente emUpper_PaneleLower_Panele gere clipes de união de perfil H laterais correspondentes (folga deslizante de0,20 mm).
- Se um painel plano (como uma placa traseira Skådis alta) exceder a altura da base da impressora de destino (por exemplo,
- Dewarping de Homografia de Perspectiva Opcional (
--rectify):- Para fotos anguladas de placas padronizadas planas ou silhuetas 2D complexas, execute:
~/.gemini/antigravity/skills/media-to-fusion/scripts/process_media.py "<caminho_da_imagem>" \ --out-dir ./media_workspace \ --rectify "x1,y1,x2,y2,x3,y3,x4,y4" \ --real-w <largura_mm> --real-h <altura_mm> process_media.pyordena automaticamente os 4 cantos no sentido horário (SE, SD, ID, IE), dewarpa o plano pararectified_ortho.pnga0,1 mm/px, exportarectified_contour.dxfe salva loops de polígono fechado simplificados (points_xy_mm) dentro demedia_manifest.json.
- Para fotos anguladas de placas padronizadas planas ou silhuetas 2D complexas, execute:
Fase 4: Modelagem Paramétrica via Fusion 360 MCP
Construa a montagem CAD de forma limpa no Fusion 360 através de execute_api_script:
- Conversão Obrigatória para Centímetros (
cm = mm / 10.0):- A API interna do Fusion 360 (
adsk.core.ValueInput.createByReal(),adsk.core.Point3D.create()) usa estritamente centímetros (cm). - Sempre defina
def cm(mm_val): return mm_val / 10.0no topo de cadaexecute_api_script.
- A API interna do Fusion 360 (
- Registre Parâmetros Mestre de Usuário (
design.userParameters): Crie parâmetros editáveis em milímetros/graus primeiro para que o usuário possa reconfigurar escala, número de níveis ou estado de dobra a qualquer momento:Parâmetros recomendados para montagens dobráveis/modulares:def set_user_param(design, name, expr_str, units="mm", comment=""): existing = design.userParameters.itemByName(name) if existing: existing.expression = expr_str return existing return design.userParameters.add( name, adsk.core.ValueInput.createByString(expr_str), units, comment )Tray_Width,Tray_Depth,Tray_Height,Wall_Thickness(padrão2.4 mm)Link_Step_Pitch,Link_Width,Link_Thickness(padrão3.5 mm)Deploy_Angle_Deg(por exemplo,40 degpara estado Aberto/Implantado,0 degpara pilha vertical Colapsada)Clearance(padrão0.25 mm)
- Folgas Mecânicas para Impressão 3D:
- Pinos pivotantes rotativos / furos de ligação: folga radial de
0,25 mm(0,50 mmdiametral), com um lábio de0,8 mmou furo de fixador M3 para que as ligações permaneçam retidas. - Clipes de união deslizantes / inserções de divisória removíveis: folga de
0,20 mmpor lado (0,40 mmde dedução total de largura/profundidade em bandejas de inserção). - Ergonomia da Bandeja Inferior e Pernas de Suporte Traseiras:
- Inclua recortes de alça lateral oblongos arredondados na bandeja mais baixa se visíveis na mídia de referência.
- Garanta que
Rear_Support_Legsalcancem desde a bandeja de ancoragem superior até o plano do solo ($Z = Z_{\text{chão_bandeja_inferior}}$) para que a montagem fique nivelada quando implantada.
- Pinos pivotantes rotativos / furos de ligação: folga radial de
Fase 5: Verificação Visual e de Interferência em Malha Fechada
Nunca conclua após uma execução cega de script. Realize a verificação visual e matemática:
- Comparação Visual Multiângulo (
get_screenshot):- Chame a ferramenta
fusion-mcpget_screenshotcom:view="iso-top-right", width=1024, height=1024view="right", width=1024, height=1024(crucial para inspecionar alinhamento da barra de ligação, ângulo de escada e contato das pernas traseiras com o solo!)view="front", width=1024, height=1024(crucial para inspecionar simetria da grade de slots Skådis e proporções das divisórias!)
- Compare as capturas de tela renderizadas lado a lado com os keyframes/fotos de referência (
keyframe_XX_grid.png/annotated_grid.png).
- Chame a ferramenta
- Verificação Automatizada de Timeline e Interferência:
Execute uma passagem de verificação via
execute_api_scriptpara afirmar a geometria sólida nativa e verificar colisões físicas entre componentes:def run(context): import adsk.core, adsk.fusion app = adsk.core.Application.get() design = adsk.fusion.Design.cast(app.activeProduct) root = design.rootComponent assert root.sketches.count > 0, "Nenhum sketch nativo encontrado!" assert root.features.extrudeFeatures.count > 0, "Nenhum recurso de extrusão encontrado!" assert root.meshBodies.count == 0, "Objetos MeshBody proibidos detectados!" # Coletar todos os corpos sólidos visíveis em ocorrências e raiz bodies = adsk.core.ObjectCollection.create() for b in root.bRepBodies: if b.isVisible: bodies.add(b) for occ in root.allOccurrences: for b in occ.bRepBodies: if b.isVisible: bodies.add(b)
Fase 6: Finalização & Ajuste de Parâmetros de Usuário (ID da Ferramenta: media-to-fusion)
- Relatório do Modelo — Gere um resumo conciso do modelo para o usuário:
- Número de componentes na montagem
- Parâmetros de usuário expostos (com explicações curtas)
- Relação de transmissão cinemática (se aplicável)
- Avaliação de adequação para impressão 3D (destacar quaisquer saliências >45°, pontes ou áreas que exigem suportes)
- Toque Final — Se solicitado ou se melhorar a estética:
- Adicione filetes/chanfros em cantos externos (raio
1.0 mm – 2.0 mm) - Aplique uma Aparência simples (por exemplo,
"Plastic - Matte"para impressão 3D,"Paint - Matte"para peças usinadas)
- Adicione filetes/chanfros em cantos externos (raio
- Fluxo de Trabalho de Finalização da Ferramenta:
- Defina
finalizado = True - Saia com uma mensagem clara para o usuário:
"Modelo reconstruído em models/<NN>_<Model_Name>/. Os parâmetros de usuário no Fusion 360 (Tray_Width, Tray_Depth, etc.) podem ser ajustados a qualquer momento."
- Defina