- 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() và 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
for và translate() để 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
Tôi cực kỳ đề xuất FreeCAD.
Ý 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
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
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
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
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
Để 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ử
Xem kho lưu trữ GitHub
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
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;Độ 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
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