1 poin oleh GN⁺ 2024-05-22 | Belum ada komentar. | Bagikan ke WhatsApp

CADmium: program CAD local-first yang berjalan di browser

21 Mei 2024

Kami sedang mengembangkan program CAD open-source baru. Proyek ini sudah cukup maju, tetapi kami membutuhkan bantuan Anda. Jika Anda ingin berpartisipasi dalam proyek ini, silakan bergabung ke Discord!

Apa yang dibutuhkan?

Hal-hal yang diperlukan untuk membuat program CAD parametrik 3D:

  • penyelesai kendala 2D
  • kernel B-rep
  • pelacak riwayat
  • antarmuka pengguna 3D
  • format berkas

Mari kita bahas masing-masing!

Penyelesai kendala 2D

Penyelesai kendala 2D berfungsi untuk menjaga agar garis tetap paralel atau tegak lurus, atau agar dua lingkaran memiliki jari-jari yang sama.

  • Pendekatan umum adalah menggabungkan semua variabel tak diketahui ke dalam vektor besar x, lalu mengekspresikan semua kendala sebagai persamaan linear dan menyusunnya menjadi persamaan matriks besar Mx = b.
  • Secara teori, cukup membalik M. x = M^-1 b
  • Dalam praktiknya, dibutuhkan banyak optimisasi. Namun pendekatan ini memiliki kelemahan.
    • M hanya bisa dibalik jika merupakan matriks persegi.
    • Jika kendalanya terlalu banyak, M menjadi terlalu besar sehingga pendekatan ini gagal.
    • Jika kendalanya terlalu sedikit, ini bisa diatasi dengan penyisipan asumsi, tetapi hasilnya mungkin tidak sesuai dengan harapan pemodel.
    • Menyelesaikan persamaan matriks ini menjadi sangat lambat ketika ada banyak variabel tak diketahui.

Pendekatan alternatif:

  • Merumuskan masalah sebagai simulator fisika 2D:
    • Setiap titik memiliki massa m dan kecepatan v.
    • Setiap kendala adalah pegas yang memberikan gaya F pada titik-titik yang terhubung.
    • Gaya gesek sebanding dengan kecepatan.
    • Simulasi dijalankan maju dengan dt kecil dan diulang sampai konvergen.
  • Pendekatan ini membuat banyak perubahan kecil untuk menurunkan energi potensial pegas menjadi 0.
  • Pada setiap langkah waktu, runtime bersifat linear terhadap jumlah pegas dan jumlah variabel tak diketahui.
  • Pendekatan ini cocok untuk paralelisasi sehingga dalam praktiknya bisa sangat cepat.
  • Masalah over-constrained tidak "mengeluh" tentang kelebihan kendala: sistem yang konsisten akan diselesaikan dengan normal, dan pada sistem yang tidak konsisten pegas akan berkompromi.
  • Masalah under-constrained tidak akan melayang ke tak terhingga, tetapi akan mencari konfigurasi valid terdekat.
  • Pendekatan ini dapat mendukung kendala pertidaksamaan.

Kernel B-rep

Dalam CAD mekanik, pengguna harus dapat berinteraksi langsung dengan tepi dan permukaan komponen.

  • Semua program CAD parametrik secara langsung merepresentasikan batas komponen sebagai struktur data.
  • Kubus direpresentasikan sebagai solid yang terdiri dari 6 permukaan, setiap permukaan memiliki 4 tepi, dan setiap tepi memiliki 2 titik. Pendekatan ini disebut boundary representation (B-rep).
  • Untuk permukaan lengkung, digunakan permukaan NURBS, yaitu generalisasi spline, yang memungkinkan kontrol artistik atas bentuk bebas sekaligus representasi tepat untuk irisan kerucut.
  • Merepresentasikan geometri dengan cara ini itu sulit, dan menjadi lebih sulit lagi saat mencoba mengimplementasikan operasi boolean seperti union, intersection, dan difference.
  • Pustaka yang menangani data semacam ini dan menjalankan operasi boolean disebut kernel B-rep, dan sangat sulit untuk dibuat.

Pasar CAD saat ini:

  • Perusahaan CAD besar masing-masing menulis kernel B-rep mereka sendiri, dan itu memerlukan waktu puluhan tahun.
  • Kernel B-rep yang paling penting adalah Parasolid, yang mendukung banyak produk industri.
  • Di pasar CAD open-source, OpenCascade adalah satu-satunya kernel B-rep populer.

Kernel B-rep open-source baru:

  • Sebuah kernel B-rep open-source baru bernama Truck sedang dikembangkan.
  • Ditulis dalam Rust, yang memberi keunggulan seperti jaminan keamanan memori, kemudahan paralelisasi, dan dukungan kompilasi ke WebAssembly.
  • Truck berukuran kecil dan ringan, serta mendukung pembacaan/penulisan berkas .step, triangulasi permukaan, dukungan NURBS, dan operasi intersection/union/difference pada solid.

Pelacak riwayat

Program CAD parametrik menyimpan riwayat fitur dari desain.

  • Komponen diselesaikan melalui operasi seperti sketch, extrude, dan revolve.
  • "Parametrik" berarti Anda dapat kembali ke langkah sebelumnya, mengubahnya, lalu memutar ulang fitur untuk mendapatkan komponen yang sedikit berbeda.
  • Model dapat diparameterkan melalui penyuntikan variabel.

Pendekatan untuk mengatasi rapuhnya CAD parametrik:

  • Resilient modeling strategy (RMS): sekumpulan aturan untuk merancang komponen.
  • Menambahkan riwayat fitur ke sketch: fitur sketch dapat disimpan dan ditampilkan di pohon fitur sehingga ide RMS bisa diterapkan pada satu sketch.
  • Mencatat semua event pengguna ke log append-only untuk menyediakan fungsi undo/redo tanpa batas.

Antarmuka pengguna 3D

Saya menyukai gagasan menjalankan CAD di browser.

  • Onshape berjalan di browser, tetapi sebenarnya dijalankan pada instance cloud AWS dengan dukungan GPU.
  • CADmium menggunakan Truck yang dikompilasi ke WebAssembly sehingga semua pekerjaan dapat dilakukan di browser. Ini adalah aplikasi local-first.

Tumpukan teknologi:

  • Three.js: viewport 3D
  • Svelte: manajemen status/reaktivitas
  • Threlte: jembatan antara Svelte dan Three.js
  • Pengiriman pesan antara UI dan kernel B-rep
  • Electron: eksekusi lokal
  • Teknologi standar lainnya: Typescript, TailwindCSS, Vite, dll.

Format berkas

CADmium menggunakan JSON untuk semuanya.

  • Log pekerjaan terdiri dari baris-baris JSON.
  • Mendukung ekspor komponen yang dirancang ke format pertukaran yang lebih sederhana.
  • Contoh: { "steps": [ { "type": "sketch", "id": "Sketch-01", "data": { ... } }, { "type": "extrude", "id": "Extrude-01", "data": { "distance": "10mm", "sketch": "Sketch-01", "faces": [0], "type": "new" } } ] }
  • Dengan menggunakan command-line interface (CLI) CADmium, dapat dikonversi ke .step atau .stl: $ CADmium export my_part.cadmium --format stl

Kesimpulan

Kita belum tahu ide mana yang disebutkan di sini yang akan berhasil, dan mana yang akan gagal, tetapi di suatu tempat dalam ruang ini ada peluang bagi tim kecil untuk memberi dampak besar pada industri manufaktur.

Bantuan yang dibutuhkan:

  1. Pemrograman Rust (peningkatan umum)
  2. Geometri komputasional (patch Truck)
  3. Bantuan Three.js (pengontrol kamera baru, pencahayaan yang lebih baik, post-processing)
  4. Mencari peluang hibah atau sponsor kaya

Hal-hal yang belum dibahas sekarang tetapi ingin dikunjungi kembali nanti:

  1. Modal ventura
  2. Pembuatan toolpath (CAM)
  3. Analisis elemen hingga (FEA)

Jika ide ini terdengar menarik, silakan bergabung ke server Discord CADmium untuk berdiskusi!

Opini GN⁺

  1. Keunggulan Rust: Rust sangat cocok untuk proyek open-source berkat keamanan memorinya dan kemudahan paralelisasi. Ini akan sangat membantu meningkatkan stabilitas dan performa CADmium.
  2. Pemanfaatan WebAssembly: Menggunakan WebAssembly untuk menjalankan pekerjaan CAD langsung di browser sangat inovatif. Ini memungkinkan pekerjaan tetap berlanjut bahkan di lingkungan dengan koneksi internet yang tidak stabil.
  3. Penyederhanaan format berkas: Format berkas berbasis JSON mudah dipahami, dan dapat diedit langsung di editor teks sehingga sangat berguna. Ini mempermudah kolaborasi dan manajemen versi.
  4. Pentingnya riwayat fitur: Menyediakan fungsi undo/redo tanpa batas melalui riwayat fitur dapat sangat meningkatkan pengalaman pengguna. Ini memungkinkan kesalahan dalam proses desain diperbaiki dengan mudah.
  5. Kekuatan komunitas open-source: Proyek open-source dapat berkembang cepat melalui partisipasi dan kontribusi komunitas. CADmium juga dapat berkembang lebih jauh melalui keterlibatan banyak pengembang dan pengguna.

Belum ada komentar.

Belum ada komentar.