Automação no Rhino3D com Python: Como Gerar Entregáveis de Fabricação em Segundos

Aprenda a criar scripts em Python para automatizar a extração de desenhos 2D, planificações e arquivos DXF de manufatura no Rhino3D com precisão.

O gargalo entre o modelo 3D e o chão de fábrica

Em projetos de engenharia, arquitetura e design industrial desenvolvidos no Rhino3D, a transição entre o modelo paramétrico final e os entregáveis para produção costuma ser o estágio mais suscetível a erros. Extrair manualmente vistas ortográficas 2D, planificar superfícies (unrolling), alinhar geometrias em planos de corte, aplicar etiquetas de identificação e exportar dezenas de arquivos DXF ou STEP consome horas produtivas que deveriam ser dedicadas ao refinamento técnico.

Além da ineficiência temporal, o processo manual introduz falhas críticas: peças esquecidas, divergência de tolerâncias dimensionais e inconsistência na nomeação de arquivos. A solução para eliminar essas falhas reside na automação direta do núcleo geométrico do software utilizando a integração nativa de Python no Rhino (RhinoCommon e rhinoscriptsyntax).

A arquitetura de automação no Rhino3D via Python

Para construir um pipeline confiável de geração de entregáveis, estruturamos o script em quatro camadas operacionais:

  1. Varredura e Metadados: Leitura das geometrias a partir de camadas (layers) específicas ou atributos de usuário (User Text / UserStrings), identificando espessura, material e código da peça.
  2. Processamento Geométrico: Operações de planificação de superfícies desenvolvíveis, extração de contornos ou geração de vistas 2D (Make2D programático).
  3. Padronização e Anotação: Inserção automática de identificadores de peças (tags), marcas de dobra e cotas de referência.
  4. Exportação em Lote: Geração automatizada de arquivos vetoriais (DXF/DWG) e documentação tabular (BOM em CSV).

Exemplo prático: Automação de planificação e exportação

O exemplo abaixo demonstra como processar sólidos ou superfícies de chapa, planificá-los no plano XY e prepará-los para corte CNC sem intervenção manual:

import rhinoscriptsyntax as rs
import scriptcontext as sc
import Rhino
import os

def automatizar_entregaveis_fabricacao(diretorio_saida):
    # Otimização de performance: desativa a atualização de tela durante a execução
    rs.EnableRedraw(False)

    try:
        # Seleciona objetos na camada designada de fabricação
        objetos = rs.ObjectsByLayer("Pecas_Fabricacao")
        if not objetos:
            print("Nenhum objeto encontrado na camada especificada.")
            return

        deslocamento_x = 0

        for i, obj_id in enumerate(objetos):
            # Obtém metadados de fabricação da peça
            codigo_peca = rs.GetUserText(obj_id, "PartNumber") or "Peca_{}".format(i + 1)

            # Converte para geometria RhinoCommon para operações avançadas
            brep = rs.coercebrep(obj_id)
            if not brep:
                continue

            # Executa a planificação (Unroll)
            unroller = Rhino.Geometry.Unroller(brep)
            unroller.AbsoluteTolerance = sc.doc.ModelAbsoluteTolerance
            unroller.RelativeTolerance = sc.doc.ModelAngleToleranceDegrees

            curvas_unroll, pontos_unroll, pontos_texto = unroller.PerformUnroll()

            if curvas_unroll:
                # Agrupa e posiciona a geometria planificada com espaçamento definido
                ids_criados = [sc.doc.Objects.AddCurve(c) for c in curvas_unroll]
                caixa = rs.BoundingBox(ids_criados)
                largura = caixa[1][0] - caixa[0][0]

                # Move a peça para o layout de corte no plano XY
                ponto_origem = caixa[0]
                ponto_destino = [deslocamento_x, 0, 0]
                rs.MoveObjects(ids_criados, rs.VectorCreate(ponto_destino, ponto_origem))

                # Exporta o contorno isolado para arquivo DXF de corte CNC
                rs.SelectObjects(ids_criados)
                caminho_arquivo = os.path.join(diretorio_saida, "{}.dxf".format(codigo_peca))
                rs.Command('-_Export "{}" _Scheme "R12 Natural" _Enter _Enter'.format(caminho_arquivo), False)

                deslocamento_x += largura + 50.0  # Espaçamento de 50mm entre peças

        print("Entregáveis gerados com sucesso no diretório de destino.")

    finally:
        # Restaura a renderização do viewport
        rs.EnableRedraw(True)

# Execução do script
# automatizar_entregaveis_fabricacao("C:/Projetos/Fabricacao/CNC_Out/")

Princípios de performance em scripts para RhinoCommon

Quando lidamos com montagens contendo centenas de componentes, pequenos descuidos no script podem degradar o tempo de execução de segundos para dezenas de minutos. Pontos essenciais de otimização incluem:

  • Controle de Redraw: Utilizar rs.EnableRedraw(False) evita que a GPU recalcule o viewport a cada curva adicionada, gerando ganhos exponenciais de velocidade.
  • Manipulação direta na memória: Sempre que possível, utilize as classes nativas do Rhino.Geometry antes de registrar o objeto na tabela de documentos (sc.doc.Objects.Add). Criar e deletar entidades temporárias no documento é computacionalmente caro.
  • Consistência de tolerância: Alinhe as tolerâncias dos métodos analíticos (como Unroller ou Brep.CreateContourCurves) com a precisão exigida pela máquina de manufatura (plasma, laser, router), evitando subdivisões excessivas de nós de curva.

Como especialista em IA e engenharia de software aplicada a fluxos CAD/CAM, observo que integrar validações automatizadas de código reduz não apenas o tempo de preparação técnica em até 80%, mas também viabiliza integrações futuras com algoritmos de otimização de corte (nesting inteligente) e estimativas dinâmicas de custo.

Pronto para transformar seus entregáveis técnicos em um fluxo automatizado?

Se a sua equipe ainda gasta tempo operacional preparando arquivos para fabricação ou sofrendo com inconsistências entre o Rhino3D e as máquinas industriais, a automação sob medida é a solução definitiva.

Entre em contato com Thiago Programador para desenvolver scripts customizados, plugins em Python ou pipelines de automação CAD/CAM de alta precisão desenhados especificamente para a sua operação industrial.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.