[{"data":1,"prerenderedAt":283},["ShallowReactive",2],{"blog-/blog/promax-cnc-do-csv-ao-gcode":3},{"id":4,"title":5,"body":6,"date":268,"description":269,"extension":270,"meta":271,"navigation":272,"path":273,"seo":274,"stem":275,"tags":276,"__hash__":282},"blog/blog/promax-cnc-do-csv-ao-gcode.md","Promax CNC: do CSV ao G-code otimizado",{"type":7,"value":8,"toc":257},"minimark",[9,13,16,21,36,49,55,58,65,69,72,75,94,98,101,104,110,114,117,120,126,129,133,136,139,146,152,158,164,167,171,174,244,247,251,254],[10,11,12],"p",{},"Semana passada comecei a desenvolver a Promax CNC, uma nova empresa em sociedade com meu primo. A ideia é uma plataforma completa pra fábricas de corte CNC. Importa o desenho das peças, encaixa na chapa, otimiza o corte e gera o arquivo pronto pra máquina.",[10,14,15],{},"Vou explicar como cada etapa funciona por dentro.",[17,18,20],"h2",{"id":19},"leitura-do-csv-de-peças","Leitura do CSV de peças",[10,22,23,24,28,29,28,32,35],{},"Marceneiros usam o Promob pra projetar móveis. O Promob exporta um CSV com a lista completa de peças do projeto. O parser da Promax detecta automaticamente o formato Promob pelas colunas (",[25,26,27],"code",{},"PEÇA ID",", ",[25,30,31],{},"OPERAÇÕES",[25,33,34],{},"BORDA FACE FRENTE",") e o delimitador (vírgula, ponto-e-vírgula ou pipe).",[10,37,38,39,28,42,28,45,48],{},"São mais de 30 colunas mapeadas: geometria (",[25,40,41],{},"ALTURA",[25,43,44],{},"PROF",[25,46,47],{},"ESPESSURA","), material, operações, bordas por face, sentido do veio da madeira, cliente, código do projeto, ambiente.",[10,50,51,52,54],{},"A parte mais interessante é o campo ",[25,53,31],{},". Dentro de uma célula CSV, vem um JSON com furos e rasgos definidos por coordenada, diâmetro, profundidade e face normal. A face normal indica em qual lado da peça fica o furo: topo, base, esquerda, direita, frente ou fundo.",[10,56,57],{},"O parser agrupa peças por material e espessura, calcula a área total em m² e estima quantas chapas serão necessárias. Itens comprados (dobradiças, corrediças) são separados automaticamente.",[10,59,60],{},[61,62],"img",{"alt":63,"src":64},"Resumo de materiais parseado do CSV Promob","/blog/csv-lista-pecas.png",[17,66,68],{"id":67},"montagem-do-dxf","Montagem do DXF",[10,70,71],{},"O DXF é o formato padrão de desenho técnico. O parser lê o arquivo ASCII par a par (código + valor), extrai a seção ENTITIES e suporta POLYLINE, LWPOLYLINE, CIRCLE, LINE e ARC.",[10,73,74],{},"Polilíneas com bulge (curvatura) são convertidas em arcos. O valor de bulge é a tangente do ângulo incluso dividido por 4. Positivo é sentido anti-horário, negativo é horário.",[10,76,77,78,81,82,85,86,89,90,93],{},"O sistema de classificação de layers é inteligente. O nome do layer define a intenção: ",[25,79,80],{},"PECAS"," são perfis de corte, ",[25,83,84],{},"CHAPA"," é o contorno do material, ",[25,87,88],{},"FUROS_8_12"," significa furos de 8mm de diâmetro com 12mm de profundidade, ",[25,91,92],{},"SOBRAS"," são áreas de reaproveitamento. Tudo inferido pelo nome, sem metadados externos.",[17,95,97],{"id":96},"visualização-2d","Visualização 2D",[10,99,100],{},"O preview 2D é SVG puro em React. A peça é escalada pro viewport com padding automático. Furos aparecem como círculos em ciano (filtrados pela face do topo), rasgos como retângulos em verde, e bordas como linhas âmbar em cada lado aplicado.",[10,102,103],{},"Leve e rápido. Serve pra validação rápida antes de mandar pro 3D.",[10,105,106],{},[61,107],{"alt":108,"src":109},"Nesting 2D com 17 peças encaixadas na chapa, 94.2% de aproveitamento","/blog/dfx-visualizacao-2d.png",[17,111,113],{"id":112},"visualização-3d","Visualização 3D",[10,115,116],{},"O 3D usa Three.js com React Three Fiber. Cada tipo de movimento tem cor diferente: rápidos em vermelho (30% de opacidade), cortes em ciano, arcos em roxo, rampas em laranja, tabs em verde.",[10,118,119],{},"As coordenadas CNC (Z pra cima) são convertidas pro sistema do Three.js (Y pra cima). Um wireframe mostra o envelope de trabalho da máquina. OrbitControls pra rotacionar e um gizmo de orientação.",[10,121,122],{},[61,123],{"alt":124,"src":125},"Visualização 3D da chapa com extrusão da espessura real do material","/blog/dfx-visualizacao-3d.png",[10,127,128],{},"Também tem um motor de montagem de móveis. Ele classifica cada peça por função (lateral, topo, fundo, prateleira, porta, gaveta) usando pattern matching em 18 tipos de role. Com as dimensões inferidas dos painéis laterais, posiciona cada peça no espaço 3D e monta o móvel completo.",[17,130,132],{"id":131},"nesting-encaixando-peças-na-chapa","Nesting: encaixando peças na chapa",[10,134,135],{},"O nesting é o coração da plataforma. O objetivo é encaixar o máximo de peças na chapa desperdiçando o mínimo de material.",[10,137,138],{},"Pra peças retangulares, o algoritmo MAXRECTS roda em 4 fases:",[10,140,141,145],{},[142,143,144],"strong",{},"Fase 1",": 25 combinações determinísticas. 5 estratégias de ordenação (por área, altura, largura, perímetro, maior lado) multiplicadas por 5 heurísticas de posicionamento (menor sobra curta, menor sobra longa, menor área desperdiçada, canto inferior esquerdo, máximo contato com bordas).",[10,147,148,151],{},[142,149,150],{},"Fase 2",": 3.000 permutações aleatórias com shuffle Fisher-Yates e RNG semeado. Explora o espaço de soluções que as heurísticas determinísticas não alcançam.",[10,153,154,157],{},[142,155,156],{},"Fase 3",": Refinamento 2-opt nas 15 melhores soluções. Troca posições de duas peças e verifica se melhorou. Até 500 trocas por candidato.",[10,159,160,163],{},[142,161,162],{},"Fase 4",": Seleciona a melhor solução pelo score: primeiro minimiza peças não encaixadas, depois minimiza chapas usadas, depois maximiza aproveitamento.",[10,165,166],{},"Pra peças com formas complexas (L, T, perfis irregulares), o sistema rasteriza o polígono numa grade de 10mm e usa um grid packer estilo Tetris. A peça é testada em 4 rotações (0, 90, 180, 270 graus) e posicionada pela heurística bottom-left.",[17,168,170],{"id":169},"_11-otimizações-de-g-code","11 otimizações de G-code",[10,172,173],{},"Depois do nesting, o G-code passa por 11 passes de otimização em sequência:",[175,176,177,184,190,196,202,208,214,220,226,232,238],"ol",{},[178,179,180,183],"li",{},[142,181,182],{},"Remoção de colineares",". Pontos intermediários em linhas retas são eliminados. Reduz o tamanho do programa.",[178,185,186,189],{},[142,187,188],{},"Arc fitting",". Sequências de movimentos lineares (G1) que formam uma curva são substituídas por um único arco (G2/G3). O algoritmo calcula o círculo que passa por 3 pontos e verifica se todos os pontos intermediários estão dentro da tolerância.",[178,191,192,195],{},[142,193,194],{},"Eliminação de redundância",". Remove movimentos duplicados ou quase duplicados que softwares CAM costumam gerar.",[178,197,198,201],{},[142,199,200],{},"Ramp entry",". Em vez de descer perpendicular na peça (que força a ferramenta), faz uma rampa linear ou helicoidal. Aumenta a vida útil da ferramenta e melhora o acabamento.",[178,203,204,207],{},[142,205,206],{},"Lead in/out",". Adiciona arcos de aproximação e saída nos contornos. Evita marcas de ferramenta no ponto de entrada do corte.",[178,209,210,213],{},[142,211,212],{},"Tabs",". Identifica contornos fechados, calcula o perímetro e distribui tabs (pontes de material) uniformemente. Cada tab é uma sequência de 4 movimentos: sobe, avança, desce. Impede que a peça se solte durante o corte.",[178,215,216,219],{},[142,217,218],{},"Otimização de cantos",". Arredonda cantos agudos com raio configurável (padrão 3mm) e reduz o feed rate. Previne quebra de ferramenta e melhora o acabamento.",[178,221,222,225],{},[142,223,224],{},"Smart retract",". Quando o próximo corte está perto (menos de 50mm), reduz a altura de retração. Troca segurança por velocidade em layouts densos.",[178,227,228,231],{},[142,229,230],{},"Otimização de rápidos",". Remove posicionamentos rápidos intermediários desnecessários.",[178,233,234,237],{},[142,235,236],{},"Onion skin",". Em bolsões com múltiplos passes (zigzag/espiral), adapta a profundidade de aproximação nos passes subsequentes. Se o canal já foi cortado, não precisa descer com cautela.",[178,239,240,243],{},[142,241,242],{},"Ciclos de furação",". Converte séries de movimentos de mergulho em ciclos G81/G82/G83. Reduz drasticamente o tamanho do arquivo pra peças com muitos furos.",[10,245,246],{},"No final, um passe de validação verifica se os feed rates estão dentro dos limites da máquina e emite warnings pra movimentos suspeitos.",[17,248,250],{"id":249},"o-resultado","O resultado",[10,252,253],{},"O pipeline completo: CSV do Promob entra, o sistema parseia as peças, gera os DXFs, encaixa na chapa, otimiza o G-code em 11 passes e entrega o arquivo .nc pronto pra máquina. O que antes era manual e demorado agora é automatizado.",[10,255,256],{},"A Promax ainda tá em desenvolvimento. Falta fechar o catálogo de materiais e o módulo de orçamento. Mas o core funciona e os resultados de nesting e otimização já são consistentes.",{"title":258,"searchDepth":259,"depth":259,"links":260},"",2,[261,262,263,264,265,266,267],{"id":19,"depth":259,"text":20},{"id":67,"depth":259,"text":68},{"id":96,"depth":259,"text":97},{"id":112,"depth":259,"text":113},{"id":131,"depth":259,"text":132},{"id":169,"depth":259,"text":170},{"id":249,"depth":259,"text":250},"2026-03-05","Como funciona a leitura de peças, montagem de DXF, visualização 2D/3D e as 11 otimizações de G-code da plataforma que estou construindo.","md",{},true,"/blog/promax-cnc-do-csv-ao-gcode",{"title":5,"description":269},"blog/promax-cnc-do-csv-ao-gcode",[277,278,279,280,281],"promax","cnc","gcode","nesting","three.js","dr5cJ0cVWeQIPO3aRt8_GMh8VCoaRCyepRKsrCe1jlw",1772834006002]