6 điểm bởi GN⁺ 2025-12-22 | 2 bình luận | Chia sẻ qua WhatsApp
  • Một ví dụ khám phá các khái niệm cơ bản của CAD dựa trên mã bằng cách thiết kế một giá đỡ pin đơn giản với OpenSCAD
  • Trước đây đã tạo một hộp tham số hóa cho pin AA·AAA bằng Autodesk Fusion, sau đó tái hiện lại bằng OpenSCAD để học cách sử dụng
  • Chỉ cần thay đổi các biến như numRows, numColumns, batteryType trong mã là có thể tạo ra giá đỡ tùy chỉnh, và đạt cùng kết quả mà không cần phần mềm CAD đắt tiền
  • Cấu trúc sử dụng difference()translate() để lặp lại việc tạo và loại bỏ hộp cùng các lỗ, là một cách thiết kế đơn giản nhưng hiệu quả
  • Dù có giới hạn với các mô hình phức tạp, công cụ này vẫn được đánh giá là hữu ích để tạo các cấu trúc hình học đơn giản như spacer và bearing drift

Thiết kế giá đỡ pin bằng OpenSCAD

  • Sau khi thiết kế một khay tổ chức dạng hộp cơ bản cho pin AA và AAA trong Autodesk Fusion, tác giả đã triển khai lại nó bằng OpenSCAD
    • Mô hình Fusion ban đầu có cấu trúc tham số hóa cho phép thay đổi kích thước pin cũng như số hàng và cột bằng cách điều chỉnh biến
    • Mô hình hoàn chỉnh đã được tải lên Printables
  • OpenSCAD là công cụ CAD tạo đối tượng 3D bằng cách viết mã, phù hợp để học các mô hình có cấu trúc đơn giản
    • Tác giả tham khảo một phần tutorial OpenSCAD và thực hành trong khoảng một giờ
    • Kết quả được công khai dưới dạng tệp battery_holder_generator.scad

Cấu trúc mã và cách hoạt động

  • Các biến chính gồm AA, AAA, heightCompartment, thicknessWall, numRows, numColumns, batteryType
    • widthBox, lengthBox, depthBox được tính từ tổ hợp của các biến này
  • Dùng hàm difference() để tạo hộp cơ bản (cube), sau đó lặp lại việc trừ đi các lỗ pin ở bên trong
    • Sử dụng vòng lặp fortranslate() để tính vị trí các lỗ, rồi tạo từng lỗ bằng cube()
    • Tác giả cho biết phần phải dùng let() để định nghĩa startColumn, startRow bên trong vòng lặp hơi gây bối rối

So sánh OpenSCAD và Fusion

  • Tạo cùng một mô hình bằng Fusion và OpenSCAD, rồi so sánh trong slicer
    • Kết quả in ra về cơ bản là giống nhau, còn OpenSCAD cho phép chỉnh sửa nhanh nhờ cách tiếp cận nhẹ và dựa trên mã
    • Có thể đạt được mức kết quả tương đương mà không cần phần mềm CAD giá cao

Khả năng ứng dụng và giới hạn

  • Không phù hợp với thiết kế phức tạp, nhưng rất hữu ích để tạo các cấu trúc hình học đơn giản như spacer và bearing drift
    • Đặc biệt mạnh ở việc tự động hóa chế tạo các chi tiết đơn giản thường cần trong đời sống hằng ngày
  • Phương thức thiết kế lấy mã làm trung tâm của OpenSCAD rất hiệu quả trong việc tạo ra các cấu trúc lặp lại và có quy luật

Kết luận

  • OpenSCAD được đánh giá là công cụ CAD dựa trên mã có thể tạo nhanh các mô hình 3D đơn giản
    • Tác giả mô tả rằng “chỉ là vẽ một cái hộp rồi đục lỗ thôi, nhưng khá thú vị”
    • Trong các tác vụ thiết kế đơn giản sau này, OpenSCAD có thể thực dụng hơn Fusion

2 bình luận

 
ahwjdekf 2025-12-22

Tôi cực kỳ đề xuất FreeCAD.

 
GN⁺ 2025-12-22
Ý kiến trên Hacker News
  • OpenSCAD là công cụ CAD rất hợp với tư duy của lập trình viên
    Mọi thành phần đều có thể tham số hóa, nên với một vỏ dự án đã làm sẵn, chỉ cần đổi vài biến là có thể tạo ra nhiều phiên bản khác nhau
    Nếu bật backend Manifold trong bản nightly mới nhất thì tốc độ render giảm từ mức tính bằng phút xuống còn tính bằng giây
    Bản phát hành chính thức 2021 đã quá cũ nên khá khó dùng
    Thư viện BOSL2 bổ sung các tính năng như fillet, bo tròn, gắn kết, giúp OpenSCAD từ mức đồ chơi trở thành công cụ thiết kế thực dụng
    Nó cũng rất thân thiện với Git, vì khác biệt trong file .scad dễ so sánh hơn nhiều so với file nhị phân của Fusion 360

  • Vì cảm thấy giới hạn của OpenSCAD, tôi đã tự tạo thư viện sinh mesh 3D dựa trên SDF (hàm khoảng cách có dấu) bằng Python là sdf
    Có thể tận dụng logic linh hoạt của Python để dựng model, đồng thời nhập mesh 3D có sẵn để thực hiện các thao tác như xói mòn, mở rộng, cắt, làm rỗng
    Dự án này vẫn còn nhiều việc phải làm, nhưng tôi nghĩ lĩnh vực này rất đáng quan tâm

    • Tôi tò mò nó khác gì với các công cụ dựng hình dựa trên Python khác như Build123d hay CadQuery
      STL lưu tọa độ tam giác như bitmap, còn STEP lưu lệnh tạo model như vector art
      Phần lớn CAD GUI đều dựa trên STEP nên khả năng tương thích tốt
      Nếu SDF chỉ tạo được STL, thì xét về tương thích với CAD GUI, có lẽ học Build123d hay CadQuery sẽ hợp lý hơn
      Build123d có khái niệm phác thảo 2D rồi chuyển sang 3D giống Fusion360 hay FreeCAD, nên thuận tiện khi qua lại giữa GUI và CAD dựa trên code
    • Tôi hy vọng thư viện này có thể giải quyết được bài toán đường xoắn ốc côn với bước biến thiên
    • PythonSCAD cũng hỗ trợ SDF thông qua libfive — hãy tìm “sdf” ở khoảng giữa trang ví dụ
    • Điều đặc biệt ấn tượng là nó có thể dễ dàng triển khai kiểu blending metaball (blobby)
    • Tính năng nhập file STL có sẵn để khoan lỗ hoặc hợp nhất với vật thể khác rất thú vị
      Các công cụ như Meshlab cho thông báo lỗi quá khó hiểu nên tôi từng thất bại, còn cách này có vẻ trực quan hơn nhiều
  • Gần đây tôi bắt đầu dùng OpenSCAD, và trong khi đa số CAD buộc bạn phải học vô số tính năng thì OpenSCAD có thể giải thích bằng một tờ cheat sheet cỡ A4
    Nếu dùng bản git master thay vì bản phát hành 2021 thì sẽ có tốc độ nhanh hơn nhiều và dùng được tính năng mới
    Dùng thư viện BOSL2 thì không cần tự triển khai các tính năng phức tạp của CAD truyền thống, mà còn thú vị vì có thể xem cách nó được hiện thực bên trong

    • Nhờ OpenSCAD mà tôi cũng đạt được độ chính xác trong thiết kế in 3D
      Trong CAD GUI, chỉ một chỉnh sửa 0.25mm cũng khiến tôi phải căn lại tất cả lỗ và cutout, rất nản; cách tiếp cận bằng code giúp tránh được vấn đề đó
      Giá trị mặc định center origin của BOSL2 giúp việc biến đổi dễ hơn nhiều
    • Bản git master render nhanh hơn bản cũ hàng chục lần
    • Có người xin link cheat sheet
    • Nhưng các thao tác như loại bỏ cạnh sắc vẫn còn khó, đó vẫn là một giới hạn
    • BOSL2 thực sự là thư viện rất mạnh và hữu ích
  • Tôi thấy tiếc vì OpenSCAD không có khái niệm object, nên không thể truy cập kiểu box1.width
    Tôi đã thử Build123d nhưng thấy nhiều bug và tài liệu còn thiếu. Hy vọng sau này sẽ được cải thiện

  • Ưu điểm của OpenSCAD là dễ dựng hình bằng cách kết hợp toán học giữa hình cầu, hình trụ và hình lập phương
    Nhược điểm là giới hạn dựng hình cũng bị ràng buộc bởi chính khả năng kết hợp toán học đó
    Bản fork PythonSCAD có hỗ trợ Python dự kiến sẽ sớm được tích hợp vào bản phát hành chính

    • OpenSCAD dựa trên tọa độ tuyệt đối nên khó biểu diễn bố trí tương đối hay quan hệ giữa các khối rắn
      Để tạo model như bu-lông, phải làm riêng từng phần rồi chồng chúng lên nhau
      Nếu muốn căn chỉnh với linh kiện thật thì cần rất nhiều tính toán thủ công, và các kích thước hard-code cũng khó sửa
      Trình render của bản beta mới nhất nhanh hơn rất nhiều nên rất đáng thử
    • OpenSCAD cũng có hulltổng Minkowski, nên nếu thành thạo thì đây là công cụ rất mạnh
    • Cũng có phiên bản JavaScript chạy trong trình duyệt là OpenJSCAD
      Xem kho lưu trữ GitHub
    • Cũng đề xuất Bowler Studio viết bằng Java. Nó có hỗ trợ Clojure và tích hợp sẵn mô phỏng vật lý
    • Cũng có thể tự định nghĩa tọa độ điểm để tạo hình phức tạp, nhưng thứ tự rất khó nhằn, cảm giác như bài kiểm tra MENSA
  • Tôi thích sự đơn giản của OpenSCAD như một trình dựng hình 3D gọn nhẹ
    Thay vì CAD GUI khổng lồ, có thể tạo model chỉ bằng các hình cơ bản và phép biến đổi, giống như lập trình đồ họa
    Dù lâu ngày mở lại code, chỉ cần nhìn vài dòng là hiểu ngay

    • Trước đây tôi dùng OpenSCAD nhiều, nhưng thực tế thấy CAD truyền thống thường trực quan hơn
      Với các ràng buộc cần tính toán, chức năng sketch của CAD GUI đơn giản hơn nhiều
      CAD cho phép quay lại từng bước để xem cấu trúc, nên không cần phải giải mã script
  • OpenSCAD có thể dùng trình soạn thảo ngoài thay cho editor tích hợp
    Khi lưu trong trình soạn thảo ngoài, phần preview sẽ tự động cập nhật
    Hướng dẫn cấu hình trình soạn thảo ngoài

  • Trước đây tôi từng viết tutorial nhập môn OpenSCAD về “10 khái niệm cốt lõi
    Link tutorial

  • Mẹo: có thể đặt biến $fn để điều chỉnh độ phân giải
    $fn = $preview ? 32 : 64;

    • Tuy nhiên, khi xuất để phân tích FEM thì dùng giá trị $fn quá cao có thể làm giảm hiệu năng mesh
      Độ chính xác phân tích quan trọng hơn độ mượt thị giác, nên khoảng 32~64 là phù hợp
  • Để tạo ra model thực sự hữu ích thì vẫn cần nhiều công sức, nhưng việc có thể biểu diễn một model tham số hoàn chỉnh bằng file văn bản 2KB là điều cực kỳ hấp dẫn
    Git diff cũng hoạt động có ý nghĩa, và bảng customizer cho phép chỉnh model như một ứng dụng
    Hiệu quả hơn nhiều so với các file XML khổng lồ của FreeCAD

    • Tôi chủ yếu hay chỉnh sửa hoặc biến thể một chi tiết đơn lẻ, và dùng Python khiến các tác vụ lặp đi lặp lại này dễ hơn nhiều
    • Với tôi, mô tả model bằng toán học là cách tự nhiên hơn
      Tuy nhiên, các tính năng như vát mép (chamfer) hay bo tròn không có sẵn mặc định, nên phải dùng phép toán minkowski với cone hoặc sphere để tự làm, khá bất tiện