- µcad adalah bahasa pemrograman untuk CAD open-source yang diimplementasikan dengan Rust, serta merupakan sistem geometri berbasis teks yang mendefinisikan sketsa 2D dan objek 3D lewat kode lalu mengekspornya ke STL·SVG
- Di pusat bahasanya terdapat objek geometri parametrik, dengan struktur yang menggabungkan bentuk dasar melalui operasi boolean untuk membuat bentuk kompleks dan merendernya ke format untuk pencetakan 3D·pemesinan CNC
- Menggunakan sistem tipe statis dan literal Quantity berbasis satuan untuk mendefinisikan model dengan nilai seperti
50mm,10°,50%, serta menyediakan sistem tipe yang menyusun pohon model geometri melalui tipe Models - Melalui modul·fungsi·workbench
part·sintaksuse, pustaka standar sepertistd::geo2d·std::geo3d, serta fiturstd::importuntuk mengambil data TOML, µcad membangun kode desain yang dapat digunakan ulang dan pemodelan berbasis data - Ini adalah proyek yang dapat dijadikan referensi oleh pengguna yang menginginkan alur kerja CAD bergaya pemrograman, dengan contoh·dokumentasi·materi live coding yang disediakan bersama
Ikhtisar µcad
- µcad adalah bahasa pemrograman CAD open-source untuk mendefinisikan dan membuat sketsa 2D serta objek 3D lewat kode
- Konsep intinya adalah pemodelan geometri parametrik
- Dengan menggabungkan bentuk dasar untuk membuat bentuk kompleks, hasilnya dapat dirender ke STL·SVG untuk digunakan dalam pencetakan 3D atau pekerjaan CNC
Desain bahasa dan pendekatan pemodelan
- µcad adalah bahasa pemodelan parametrik yang menyusun struktur model dengan definisi geometri berparameter sebagai pusatnya
- Bentuk dideklarasikan lewat kode, dan berbagai variasi dapat dibuat hanya dengan mengubah parameternya
Sphere,Cube,Cylinderdan lainnya dapat disintesis melalui kombinasi boolean, lalu membentuk geometri 3D melalui revolve, array, dan transformasi- Melalui contoh seperti
CsgCube·Spirograph·Gears·Dome, µcad menunjukkan berbagai pola pemodelan seperti pembuatan 3D berbasis sketsa 2D, pembuatan struktur berulang, dan profil roda gigi
Sistem tipe dan literal satuan
- µcad menggunakan sistem tipe statis dan variabel bekerja secara immutable
- Melalui tipe Quantity, satuan seperti
mm,°,%dapat digunakan langsung untuk menyusun model- Notasi seperti
10°·4m²·50%dapat dipakai apa adanya sebagai parameter model
- Notasi seperti
- Tipe Models adalah struktur yang merepresentasikan pohon model geometri, memuat struktur node dari model CAD berbasis kode
Sistem modul dan pustaka standar
- Dengan komposisi modul menggunakan
mod,use,fn,part, rancangan besar dapat dipecah menjadi beberapa unit kode - Pustaka standar seperti
std::geo2d,std::geo3d,std::math,std::opsmendukung operasi geometri·matematika·matriks·penyusunan sketsa partdigunakan sebagai unit untuk membuat dan mentransformasikan sketsa serta part 3D
Impor data dan debugging
- Dengan
std::import, parameter dapat diambil dari file TOML lalu diterapkan ke model- Cara ini memudahkan memasukkan spesifikasi komponen siap pakai ke dalam model
- Nilai yang diimpor dapat diverifikasi menggunakan
std::debug::assert_eqdan sejenisnya
Toolchain dan instalasi
- Menjalankan dan merender model dilakukan dengan alat CLI berbasis Rust
microcad-cli- Instalasi dengan
cargo install microcad-cli - Saat ini masih berada pada tahap alpha dan fitur terus ditambahkan
- Instalasi dengan
- Hasil render dapat divisualisasikan melalui
microcad-viewer - Pengembangan repositori berlangsung di codeberg.org dan distribusinya melalui crates.io
Contoh dan materi live coding
- Berbagai contoh seperti Spirograph, Lego Bricks, Gears, Dome dipublikasikan di blog resmi
- Menyediakan contoh penggunaan CAD pemrograman seperti pembuatan profil roda gigi, pemodelan spirograph, dan pembuatan struktur kubah
- Semua contoh disediakan bersama kode dan video live coding sehingga cara penggunaan bahasa dapat dipahami secara bertahap
Status proyek
- Proyek ini masih dalam tahap awal dan terus dikembangkan
- Dokumentasi “The µcad book” sedang disusun untuk menata keseluruhan bahasa secara sistematis
1 komentar
Komentar Hacker News
Penyebutan LEGO sebaiknya dihapus dari situs web dan contoh
LEGO sangat ketat dalam melindungi merek dagang, dan tidak ingin pihak ketiga menggunakan namanya
Alasannya, mereka khawatir mereknya menjadi kata umum dan kehilangan hak merek dagang
Artikel terkait: "Lego sues Dutch firm over anti-terror blocks using name and shape" (tautan archive)
Akan bagus jika halaman depan situs langsung menampilkan contoh kode sederhana dan sketsa yang dihasilkan
Saya telah menulis CAD berbasis boundary representation (BREP) menggunakan zoo dan bahasanya, KCL
Sepertinya µcad juga punya tujuan yang sama
Secara pribadi saya lebih menyukai gaya pipeline di KCL
Namun, saya kurang suka karena zoo memaksa kernel khusus cloud sehingga ketergantungan vendor-nya tinggi
Masih belum jelas bagaimana µcad menyelesaikan masalah ini
µcad berbasis Manifold sehingga berpusat pada mesh, jadi berbeda dari KCL yang berbasis brep
KCL juga bisa diperluas ke kernel lain
Hal terbaik dari OpenSCAD adalah setelah menyimpan kode, kita bisa langsung melihat hasilnya secara instan di tampilan 3D
Saya penasaran apakah workflow seinstan ini juga memungkinkan di ucad
Metodenya menggambar cepat ke layar 2D tanpa menghitung irisan 3D yang sebenarnya
OpenSCAD mengabstraksikan struktur ini sebagai AST agar bisa dikirim ke berbagai engine seperti OpenCSG, CGAL, dan Manifold
Secara teori, CAD apa pun bisa diimplementasikan, tetapi tingkat kesulitannya tinggi
Saya pernah memakai OpenSCAD dan CadQuery, tetapi terasa tidak nyaman karena keterbatasan UI dan kernel
Dibandingkan Onshape atau Fusion 360, fiturnya masih kurang
FreeCAD juga sudah banyak berkembang, tetapi tetap sulit digunakan bagi pengguna tingkat pemula hingga menengah
Saya berharap CAD open source suatu hari bisa menjadi alternatif yang benar-benar layak
Ada juga proyek seperti Fornjot yang mencoba kernel baru
Proyek ini tampaknya belum memiliki solver Constraint, atau setidaknya rencananya belum didokumentasikan
Saya ingin menghindari harus menjaga perhitungan trigonometri secara manual hanya untuk constraint sederhana
Sayang sekali tidak ada versi yang bisa langsung dijalankan di lingkungan notebook web seperti tutorial Lego brick
Akan bagus jika ada bentuk yang bisa dicoba tanpa instalasi seperti SCAD crash course milik MachineBlocks
Saya penasaran apakah ini lebih dekat ke pengganti AutoCAD
Saya juga ingin tahu apakah ada kompatibilitas format file agar bisa diimpor ke Revit dan sebagainya
Ini proyek yang sangat menarik
Sebagai programmer yang tidak suka mengerjakan CAD secara manual, pendekatan seperti ini terasa jauh lebih intuitif
Namun, melihat contoh gear-nya, sepertinya kita tetap perlu membaca dokumentasi dengan saksama untuk memahami primitive dasar library
Jika komunitasnya membesar, kemungkinan akan ada lebih banyak bentuk yang ditambahkan
Saya sedang mencari bahasa CAD yang mendukung iterasi dengan baik
Saat merancang rumah tinggal sendiri, saya sempat berpikir akan bagus jika detail pembuatan dinding bisa diotomatisasi dengan kode berbasis loop
Tetapi tanpa for loop, pekerjaan seperti ini terlalu sulit, jadi akhirnya saya menyerah