2 pontos por GN⁺ 2025-11-25 | 1 comentários | Compartilhar no WhatsApp
  • µcad é uma linguagem de programação para CAD open source implementada em Rust, e um sistema de geometria baseado em texto que define esboços 2D e objetos 3D por código e os exporta para STL e SVG
  • No centro da linguagem estão objetos geométricos paramétricos, com uma estrutura que combina formas básicas por operações booleanas para criar geometrias complexas e renderizá-las em formatos para impressão 3D e usinagem CNC
  • Usa um sistema de tipos estático e literais Quantity baseados em unidades para definir modelos com valores como 50mm, 10°, 50%, além de oferecer uma hierarquia de tipos que organiza a árvore de modelos geométricos com o tipo Models
  • Por meio de módulos, funções, o workbench part, a sintaxe use, bibliotecas padrão como std::geo2d e std::geo3d, e o recurso std::import para importar dados TOML, permite compor código de projeto reutilizável e modelagem orientada a dados
  • É um projeto que pode servir de referência para quem busca um fluxo de trabalho CAD programável, com exemplos, documentação e materiais de live coding disponíveis

Visão geral do µcad

  • µcad é uma linguagem de programação CAD open source para definir e gerar esboços 2D e objetos 3D por código
    • O conceito central é a modelagem geométrica paramétrica
  • Combina formas básicas para criar geometrias complexas e renderiza o resultado em STL e SVG, permitindo uso em impressão 3D e trabalhos de CNC

Design da linguagem e forma de modelagem

  • µcad é uma linguagem de modelagem paramétrica que organiza a estrutura do modelo em torno de definições geométricas com parâmetros
    • As formas são declaradas em código, e várias variações podem ser geradas apenas alterando os parâmetros
  • Compõe Sphere, Cube, Cylinder etc. com combinações booleanas, e cria formas 3D por meio de revolve, arrays e transformações
  • Com exemplos como CsgCube, Spirograph, Gears e Dome, apresenta diversos padrões de modelagem, como geração 3D a partir de esboços 2D, criação de estruturas repetitivas e perfis de engrenagens

Sistema de tipos e literais com unidades

  • µcad usa um sistema de tipos estático, e as variáveis funcionam como imutáveis
  • Com o tipo Quantity, é possível usar diretamente unidades como mm, ° e % na composição do modelo
    • Notações como 10°, 4m² e 50% podem ser usadas diretamente como parâmetros do modelo
  • O tipo Models é uma estrutura que representa a árvore de modelos geométricos e contém a estrutura de nós de um modelo CAD baseado em código

Sistema de módulos e biblioteca padrão

  • Com uma composição modular usando mod, use, fn e part, grandes projetos podem ser divididos em várias unidades de código
  • Bibliotecas padrão como std::geo2d, std::geo3d, std::math e std::ops oferecem suporte a operações geométricas, matemática, matrizes e composição de esboços
  • part é usado como unidade para criar e transformar esboços e peças 3D

Importação de dados e depuração

  • Com std::import, é possível importar parâmetros de arquivos TOML e aplicá-los ao modelo
    • Uma forma de injetar facilmente no modelo especificações de peças prontas e similares
  • Também é possível validar os valores importados com std::debug::assert_eq e recursos afins

Cadeia de ferramentas e instalação

  • Execução e renderização de modelos são feitas com a ferramenta de CLI em Rust microcad-cli
    • Instalação com cargo install microcad-cli
    • Atualmente está em estágio alfa, com recursos sendo adicionados continuamente
  • O microcad-viewer permite visualizar os resultados renderizados
  • O desenvolvimento do repositório acontece em codeberg.org, com distribuição via crates.io

Exemplos e materiais de live coding

  • Vários exemplos como Spirograph, Lego Bricks, Gears e Dome estão publicados no blog oficial
    • Casos de uso de CAD programável incluem geração de perfis de engrenagens, modelagem de spirograph e criação de estruturas em domo
  • Todos os exemplos são fornecidos com código e vídeos de live coding, permitindo entender gradualmente como a linguagem é usada

Estado do projeto

  • O projeto ainda está em estágio inicial e segue em expansão
  • A documentação “The µcad book” está sendo desenvolvida para sistematizar toda a linguagem

1 comentários

 
GN⁺ 2025-11-25
Comentários do Hacker News
  • É preciso remover a menção a LEGO do site e dos exemplos
    A LEGO é muito rigorosa na proteção de marca registrada e não quer que terceiros usem o nome
    Isso porque teme que a marca vire um nome genérico e perca seus direitos sobre ela
    Artigo relacionado: "Lego sues Dutch firm over anti-terror blocks using name and shape" (link do archive)

  • Seria bom mostrar logo na primeira tela da página inicial um exemplo simples de código e o sketch gerado

  • Eu tenho escrito CAD baseado em boundary representation (BREP) usando o zoo e a linguagem KCL deles
    O µcad parece ter o mesmo objetivo
    Pessoalmente, gosto mais do estilo de pipeline do KCL
    Mas minha reclamação com o zoo é que ele força um kernel só de nuvem, criando uma forte dependência de fornecedor
    Ainda não está claro como o µcad resolve isso

  • A melhor coisa do OpenSCAD é poder ver o resultado imediatamente na visualização 3D logo após salvar o código
    Fico curioso se o ucad também permite esse tipo de fluxo de trabalho imediato

    • Essa resposta imediata existe graças ao OpenCSG usando o stencil buffer da GPU (opencsg.org)
      A ideia é desenhar rapidamente na tela 2D sem calcular de fato as interseções 3D
      O OpenSCAD abstraiu essa estrutura como uma AST para poder enviar para vários motores, como OpenCSG, CGAL e Manifold
      Em teoria, qualquer CAD poderia implementar isso, mas a dificuldade de implementação é alta
    • Parece haver um plugin com pré-visualização no VS Code (documentação relacionada)
    • Um visualizador/recurso de preview separado está em desenvolvimento e teria recebido apoio do Prototype Fund
  • Já usei OpenSCAD e CadQuery, mas achei desconfortável por causa das limitações da UI e do kernel
    Em comparação com Onshape ou Fusion 360, faltam recursos
    O FreeCAD também melhorou bastante, mas ainda é difícil de usar para pessoas de nível iniciante a intermediário
    Espero que algum dia o CAD open source se torne uma alternativa de verdade

    • A vantagem do OpenSCAD é permitir modelagem programática, e a desvantagem é exigir raciocínio matemático
      Há também projetos como o Fornjot, que tentam novos kernels
    • Se você quer uma ferramenta com GUI, recomendo SolveSpace ou Dune3D
    • A nova UI do FreeCAD e a versão com integração com OpenSCAD também são bem decentes
    • Mas, para quem usa desde 2020, os problemas fundamentais continuam os mesmos, e só o renderizador ficou um pouco mais bonito
  • Este projeto não tem um resolvedor de constraints ou pelo menos não há um plano documentado para isso
    Eu gostaria de evitar manter trigonometria manualmente até para constraints simples

  • É uma pena que não exista uma versão que rode diretamente em um ambiente de notebook web, como no tutorial de Lego brick
    Seria bom ter algo que desse para experimentar sem instalação, como o curso rápido de SCAD da MachineBlocks

  • Fico curioso se isso está mais próximo de ser um substituto do AutoCAD
    Também queria saber se há compatibilidade de formatos de arquivo para importar em Revit e afins

  • É um projeto realmente interessante
    Como programador que não gosta de mexer com CAD manualmente, essa abordagem parece muito mais intuitiva
    Mas, olhando o exemplo de engrenagens, parece que é preciso ler a documentação com atenção para entender as primitivas básicas da biblioteca
    Imagino que, conforme a comunidade crescer, mais formas serão adicionadas

  • Eu estava procurando uma linguagem de CAD com bom suporte a iteração
    Ao projetar minha casa, pensei que seria ótimo automatizar os detalhes construtivos das paredes com código baseado em loops
    Mas sem um for loop, esse tipo de tarefa fica difícil demais, e no fim eu desisti

    • O FreeCAD tem recursos de BIM (Building Information Modeling), então é adequado para projeto arquitetônico
    • Se você quer estruturas repetitivas, build123d pode ser uma boa opção