2 puntos por GN⁺ 2025-11-25 | 1 comentarios | Compartir por WhatsApp
  • µcad es un lenguaje de programación para CAD de código abierto implementado en Rust, y un sistema de geometría basado en texto que permite definir bocetos 2D y objetos 3D con código y exportarlos como STL y SVG
  • En el centro del lenguaje están los objetos geométricos paramétricos, con una estructura que combina formas básicas mediante operaciones booleanas para crear figuras complejas y renderizarlas en formatos para impresión 3D y mecanizado CNC
  • Usa un sistema de tipos estático y literales Quantity basados en unidades para definir modelos con valores como 50mm, 10°, 50%, y ofrece un sistema de tipos que construye árboles de modelos geométricos con el tipo Models
  • Mediante módulos, funciones, el workbench part, la sintaxis use, bibliotecas estándar como std::geo2d y std::geo3d, y la función std::import para traer datos TOML, permite crear código de diseño reutilizable y modelado basado en datos
  • Es un proyecto que puede servir de referencia para quienes buscan un flujo de trabajo CAD programático, y además incluye ejemplos, documentación y material de live coding

Resumen de µcad

  • µcad es un lenguaje de programación CAD open source para definir y generar bocetos 2D y objetos 3D con código
    • Su concepto central es el modelado geométrico paramétrico
  • Permite combinar formas básicas para crear figuras complejas y renderizar el resultado como STL y SVG para usarlo en impresión 3D o trabajos CNC

Diseño del lenguaje y forma de modelado

  • µcad es un lenguaje de modelado paramétrico que organiza la estructura del modelo alrededor de definiciones geométricas con parámetros
    • Las formas se declaran con código, y es posible generar múltiples variantes solo cambiando los parámetros
  • Compone Sphere, Cube, Cylinder y otros elementos mediante combinaciones booleanas, y genera formas 3D a través de revolución (revolve), arreglos y transformaciones
  • A través de ejemplos como CsgCube, Spirograph, Gears y Dome, muestra distintos patrones de modelado, incluyendo generación 3D basada en bocetos 2D, estructuras repetitivas y perfiles de engranes

Sistema de tipos y literales con unidades

  • µcad usa un sistema de tipos estático y las variables funcionan como inmutables
  • Con el tipo Quantity se pueden usar directamente unidades como mm, ° y % al construir modelos
    • Notaciones como 10°, 4m² y 50% pueden usarse tal cual como parámetros del modelo
  • El tipo Models es una estructura que representa el árbol de modelos geométricos y encapsula la estructura de nodos de un modelo CAD basado en código

Sistema de módulos y biblioteca estándar

  • Con una organización modular que aprovecha mod, use, fn y part, es posible dividir diseños grandes en varias unidades de código
  • Bibliotecas estándar como std::geo2d, std::geo3d, std::math y std::ops brindan soporte para operaciones geométricas, matemáticas, matrices y construcción de bocetos
  • part se usa como unidad para crear y transformar bocetos y partes 3D

Importación de datos y depuración

  • Con std::import se pueden traer parámetros desde archivos TOML y aplicarlos al modelo
    • Es una forma sencilla de inyectar en el modelo especificaciones de piezas prefabricadas, entre otras cosas
  • También se pueden validar los valores importados con std::debug::assert_eq y similares

Toolchain e instalación

  • Incluye la herramienta CLI basada en Rust microcad-cli para ejecutar y renderizar modelos
    • Se instala con cargo install microcad-cli
    • Actualmente está en etapa alfa y se siguen agregando funciones
  • microcad-viewer permite visualizar los resultados renderizados
  • El desarrollo del repositorio se lleva a cabo en codeberg.org y la distribución se hace a través de crates.io

Ejemplos y material de live coding

  • En el blog oficial hay disponibles varios ejemplos como Spirograph, Lego Bricks, Gears y Dome
    • Ofrecen casos de uso de CAD programático, como generación de perfiles de engranes, modelado de espirógrafos y creación de estructuras tipo domo
  • Todos los ejemplos se ofrecen junto con su código y videos de live coding, lo que permite entender paso a paso cómo se usa el lenguaje

Estado del proyecto

  • El proyecto está en una etapa temprana y sigue expandiéndose
  • Se está organizando de forma sistemática todo el lenguaje a través del trabajo de documentación de “The µcad book”

1 comentarios

 
GN⁺ 2025-11-25
Comentarios en Hacker News
  • Hay que eliminar la mención de LEGO del sitio web y de los ejemplos
    LEGO es muy estricto con la protección de marca registrada y no quiere que terceros usen su nombre
    Les preocupa que la marca se vulgarice y pierda sus derechos marcarios
    Artículo relacionado: "Lego sues Dutch firm over anti-terror blocks using name and shape" (enlace de archive)

  • Estaría bien mostrar de inmediato en la portada un ejemplo simple de código y el sketch generado

  • He estado escribiendo CAD basado en representación de fronteras (BREP) con zoo y su lenguaje KCL
    µcad parece tener el mismo objetivo
    Personalmente, me gusta más el enfoque de pipeline de KCL
    Pero me molesta que zoo fuerce un kernel solo en la nube, lo que genera mucha dependencia del proveedor
    Todavía no está claro cómo resuelve µcad este problema

  • Lo mejor de OpenSCAD es que, al guardar el código, puedes ver el resultado de inmediato en la vista 3D
    Me pregunto si en ucad también es posible un flujo de trabajo con esa inmediatez

    • Esa inmediatez es posible gracias a OpenCSG usando el stencil buffer de la GPU (opencsg.org)
      Es una forma de dibujar rápido en una pantalla 2D sin calcular intersecciones 3D reales
      OpenSCAD abstrajo esta estructura como un AST para poder enviarla a distintos motores como OpenCSG, CGAL, Manifold, etc.
      En teoría, cualquier CAD podría implementarlo, pero la dificultad de implementación es alta
    • Parece que hay un plugin con vista previa en VS Code (documentación relacionada)
    • Se está desarrollando un visor/función de preview independiente, y al parecer recibió apoyo de Prototype Fund
  • He usado OpenSCAD y CadQuery, pero me resultaron incómodos por las limitaciones de la UI y del kernel
    Comparados con Onshape o Fusion 360, les faltan funciones
    FreeCAD también ha mejorado mucho, pero todavía sigue siendo difícil de usar para usuarios de nivel básico e intermedio
    Ojalá algún día el CAD de código abierto se convierta en una alternativa de verdad

    • La ventaja de OpenSCAD es que permite modelado programático, y la desventaja es que exige cierta forma de pensar matemática
      También existen proyectos que prueban kernels nuevos, como Fornjot
    • Si quieres una herramienta con GUI, recomiendo SolveSpace o Dune3D
    • La nueva UI de FreeCAD y su versión con integración de OpenSCAD también están bastante bien
    • Pero, desde la perspectiva de alguien que lo usa desde 2020, los problemas de fondo siguen igual, y lo único es que el renderizador ahora se ve un poco mejor
  • Este proyecto no tiene un solver de restricciones (Constraint), o al menos no hay planes documentados al respecto
    Me gustaría evitar tener que mantener manualmente funciones trigonométricas para restricciones simples

  • Es una lástima que no exista una versión que se pueda ejecutar directamente en un entorno de notebook web, como el tutorial de Lego brick
    Estaría bien algo que se pueda probar sin instalación, como el curso rápido de SCAD de MachineBlocks

  • Me pregunto si esto está más cerca de ser un reemplazo de AutoCAD
    También quisiera saber si tiene compatibilidad de formatos de archivo para poder importarlo en Revit y similares

  • Es un proyecto realmente interesante
    Como programador al que no le gusta trabajar con CAD a mano, este enfoque me parece mucho más intuitivo
    Aun así, viendo el ejemplo de engranajes, parece que para entender las primitivas básicas de la biblioteca habría que leer la documentación con atención
    Si la comunidad crece, imagino que se agregarán más formas

  • Estaba buscando un lenguaje CAD que soportara bien la repetición (iteration)
    Mientras diseñaba mi casa, pensé que sería genial poder automatizar los detalles de construcción de muros con código basado en loops
    Pero si no hay bucles for, ese tipo de trabajo se vuelve demasiado difícil, así que al final lo dejé

    • FreeCAD tiene funciones de BIM (modelado de información de construcción), así que es adecuado para diseño arquitectónico
    • Si quieres estructuras repetitivas, build123d podría ser una buena opción