2 điểm bởi GN⁺ 2025-11-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • µcad là ngôn ngữ lập trình dành cho CAD mã nguồn mở được triển khai bằng Rust, đồng thời là hệ thống hình học dựa trên văn bản cho phép định nghĩa phác thảo 2D và đối tượng 3D bằng mã rồi xuất ra STL·SVG
  • Ở trung tâm của ngôn ngữ là các đối tượng hình học tham số, với cấu trúc kết hợp các hình cơ bản bằng phép toán boolean để tạo ra hình dạng phức tạp và render sang định dạng dùng cho in 3D·gia công CNC
  • Sử dụng hệ thống kiểu tĩnh và literal Quantity dựa trên đơn vị để định nghĩa mô hình bằng các giá trị như 50mm, 10°, 50%, đồng thời cung cấp hệ kiểu với kiểu Models để xây dựng cây mô hình hình học
  • Thông qua module·hàm·workbench part·câu lệnh use, thư viện chuẩn như std::geo2d·std::geo3d và tính năng std::import để nhập dữ liệu TOML, µcad hỗ trợ xây dựng mã thiết kế có thể tái sử dụng và mô hình hóa dựa trên dữ liệu
  • Đây là dự án đáng tham khảo cho những người muốn workflow CAD theo hướng lập trình, đi kèm ví dụ·tài liệu·tài liệu live coding

Tổng quan về µcad

  • µcad là ngôn ngữ lập trình CAD mã nguồn mở dùng để định nghĩa và tạo phác thảo 2D cùng đối tượng 3D bằng mã
    • Khái niệm trung tâm là mô hình hóa hình học tham số
  • Có thể kết hợp các hình cơ bản để tạo hình dạng phức tạp, rồi render kết quả ra STL·SVG để dùng cho in 3D hoặc công việc CNC

Thiết kế ngôn ngữ và cách mô hình hóa

  • µcad là ngôn ngữ mô hình hóa tham số xây dựng cấu trúc mô hình xoay quanh các định nghĩa hình học có tham số
    • Hình dạng được khai báo bằng mã, và có thể tạo nhiều biến thể chỉ bằng cách thay đổi tham số
  • Kết hợp Sphere, Cube, Cylinder bằng phép boolean, đồng thời tạo hình 3D thông qua revolve, mảng lặp và biến đổi
  • Thông qua các ví dụ như CsgCube, Spirograph, Gears, Dome, ngôn ngữ này trình bày nhiều pattern mô hình hóa như tạo 3D từ phác thảo 2D, tạo cấu trúc lặp và biên dạng bánh răng

Hệ thống kiểu và literal đơn vị

  • µcad sử dụng hệ thống kiểu tĩnh và biến hoạt động theo hướng bất biến
  • Thông qua kiểu Quantity, có thể dùng trực tiếp các đơn vị mm, °, % để cấu thành mô hình
    • Các biểu diễn như 10°·4m²·50% có thể được dùng nguyên dạng làm tham số mô hình
  • Kiểu Models là cấu trúc biểu diễn cây mô hình hình học, chứa cấu trúc node của mô hình CAD dựa trên mã

Hệ thống module và thư viện chuẩn

  • Với cấu trúc module dùng mod, use, fn, part, có thể tách một thiết kế lớn thành nhiều đơn vị mã
  • Thư viện chuẩn như std::geo2d, std::geo3d, std::math, std::ops hỗ trợ phép toán hình học·toán học·ma trận·xây dựng sketch
  • part được dùng như đơn vị để tạo và biến đổi sketch·part 3D

Nhập dữ liệu và gỡ lỗi

  • Với std::import, có thể lấy tham số từ tệp TOML và áp dụng vào mô hình
    • Đây là cách dễ dàng đưa các quy cách linh kiện có sẵn vào mô hình
  • Có thể kiểm chứng các giá trị đã nhập bằng std::debug::assert_eq v.v.

Toolchain và cài đặt

  • Chạy và render mô hình bằng công cụ CLI nền Rust microcad-cli
    • Cài đặt bằng cargo install microcad-cli
    • Hiện đang ở giai đoạn alpha và liên tục được bổ sung tính năng
  • Có thể trực quan hóa kết quả render thông qua microcad-viewer
  • Kho lưu trữ được phát triển trên codeberg.org và phân phối qua crates.io

Ví dụ và tài liệu live coding

  • Nhiều ví dụ như Spirograph, Lego Bricks, Gears, Dome được công bố trên blog chính thức
    • Cung cấp các trường hợp ứng dụng CAD lập trình như tạo biên dạng bánh răng, mô hình hóa spirograph, tạo cấu trúc mái vòm
  • Tất cả ví dụ đều được cung cấp cùng mã và video live coding, giúp người dùng nắm cách sử dụng ngôn ngữ theo từng bước

Trạng thái dự án

  • Dự án vẫn ở giai đoạn đầu và đang tiếp tục được mở rộng
  • Công việc tài liệu hóa “The µcad book” đang được tiến hành để hệ thống hóa toàn bộ ngôn ngữ

1 bình luận

 
GN⁺ 2025-11-25
Ý kiến trên Hacker News
  • Cần gỡ bỏ việc nhắc đến LEGO khỏi website và các ví dụ
    LEGO rất nghiêm khắc trong việc bảo vệ thương hiệu, và không muốn bên thứ ba sử dụng tên này
    Vì họ lo ngại thương hiệu sẽ trở thành danh từ chung và làm mất quyền nhãn hiệu
    Bài liên quan: "Lego sues Dutch firm over anti-terror blocks using name and shape" (liên kết archive)

  • Sẽ rất tốt nếu ngay màn hình đầu của trang chủ có thể hiển thị một ví dụ mã đơn giản cùng bản phác thảo được tạo ra

  • Tôi đã dùng zoo và ngôn ngữ KCL của họ để viết CAD dựa trên boundary representation (BREP)
    Có vẻ µcad cũng nhắm đến cùng mục tiêu
    Cá nhân tôi thích cách tiếp cận pipeline của KCL hơn
    Tuy vậy, tôi không hài lòng vì zoo ép dùng kernel chỉ chạy trên cloud, khiến vendor lock-in rất nặng
    Hiện vẫn chưa rõ µcad giải quyết vấn đề này như thế nào

  • Điểm hay nhất của OpenSCAD là sau khi lưu mã, bạn có thể xem ngay kết quả trong chế độ xem 3D
    Tôi muốn biết liệu ucad có hỗ trợ kiểu workflow tức thời như vậy không

    • Tính tức thời này có được nhờ OpenCSG dùng stencil buffer của GPU (opencsg.org)
      Đây là cách vẽ nhanh lên màn hình 2D mà không cần tính toán giao cắt 3D thực sự
      OpenSCAD đã trừu tượng hóa cấu trúc này bằng AST để có thể gửi sang nhiều engine như OpenCSG, CGAL, Manifold, v.v.
      Về lý thuyết có thể triển khai bất kỳ CAD nào, nhưng độ khó triển khai rất cao
    • Có vẻ có plugin cho phép xem trước trong VS Code (tài liệu liên quan)
    • Một trình xem/xem trước riêng đang được phát triển và được Prototype Fund hỗ trợ
  • Tôi đã dùng OpenSCAD và CadQuery nhưng thấy bất tiện vì các ràng buộc của UI và kernel
    So với Onshape hay Fusion 360 thì thiếu nhiều tính năng
    FreeCAD cũng đã tiến bộ nhiều, nhưng với người mới đến trung cấp thì vẫn còn khó dùng
    Tôi hy vọng CAD mã nguồn mở rồi sẽ trở thành một lựa chọn thay thế thật sự

    • Ưu điểm của OpenSCAD là có thể mô hình hóa bằng lập trình, còn nhược điểm là đòi hỏi tư duy toán học
      Cũng có những dự án thử kernel mới như Fornjot
    • Nếu muốn công cụ GUI, tôi khuyên dùng SolveSpace hoặc Dune3D
    • Phiên bản FreeCAD với UI mới và tích hợp OpenSCAD cũng khá ổn
    • Nhưng từ góc nhìn của người đã dùng từ năm 2020, các vấn đề nền tảng vẫn y nguyên, chỉ là renderer nhìn đẹp hơn đôi chút
  • Dự án này không có constraint solver, hoặc ít nhất là chưa có kế hoạch nào được tài liệu hóa
    Tôi muốn tránh phải tự duy trì từng công thức lượng giác chỉ để xử lý các ràng buộc đơn giản

  • Hơi tiếc là không có phiên bản chạy trực tiếp trong môi trường notebook trên web như hướng dẫn Lego brick
    Sẽ hay hơn nếu có dạng trải nghiệm không cần cài đặt như SCAD crash course của MachineBlocks

  • Tôi tò mò không biết cái này có gần với một giải pháp thay thế AutoCAD hay không
    Cũng muốn biết nó có khả năng tương thích định dạng tệp để nhập vào Revit v.v. hay không

  • Đây thực sự là một dự án rất thú vị
    Với một lập trình viên ghét phải thao tác CAD bằng tay như tôi, cách tiếp cận này trực quan hơn nhiều
    Tuy vậy, nhìn vào ví dụ bánh răng thì có vẻ để hiểu được các primitive cơ bản của thư viện, vẫn phải đọc tài liệu khá kỹ
    Khi cộng đồng lớn hơn, có lẽ sẽ có thêm nhiều hình dạng hơn

  • Tôi đã tìm một ngôn ngữ CAD hỗ trợ tốt cho lặp (iteration)
    Khi thiết kế nhà ở riêng, tôi từng nghĩ sẽ rất hay nếu có thể tự động hóa chi tiết thi công tường bằng mã dựa trên vòng lặp
    Nhưng nếu không có vòng lặp for thì những việc như vậy quá khó, nên cuối cùng tôi đã bỏ cuộc

    • FreeCAD có chức năng BIM (Building Information Modeling) nên phù hợp cho thiết kế kiến trúc
    • Nếu muốn cấu trúc lặp, build123d có thể là lựa chọn phù hợp