Tarayıcı için yerel öncelikli CAD programı CADmium
(mattferraro.dev)CADmium: Tarayıcıda çalışan yerel öncelikli CAD programı
21 Mayıs 2024
Yeni bir açık kaynaklı CAD programı geliştiriyoruz. Oldukça ilerledik, ancak yardımınıza ihtiyacımız var. Bu projeye katılmak istiyorsanız lütfen Discord'a katılın!
Neye ihtiyaç var?
3D parametrik bir CAD programı yapmak için gerekenler:
- 2D kısıt çözücü
- B-rep çekirdeği
- geçmiş izleyici
- 3D kullanıcı arayüzü
- dosya biçimi
Her birinden bahsedelim!
2D kısıt çözücü
2D kısıt çözücü; çizgilerin paralel ya da dik kalmasını sağlamak, iki çemberin aynı yarıçapa sahip olmasını sağlamak gibi işler yapar.
- Yaygın yaklaşım, tüm bilinmeyenleri büyük bir
xvektöründe birleştirmek ve tüm kısıtları doğrusal denklemler olarak ifade ederek büyük birMx = bmatris denklemine dönüştürmektir. - Teoride tek yapılması gereken
M'in tersini almaktır.x = M^-1 b - Pratikte çok sayıda optimizasyon gerekir. Ancak bu yaklaşımın bazı dezavantajları vardır.
- Ters alma işlemi yalnızca
Mkare matris olduğunda mümkündür. - Kısıt çok fazlaysa
Mçok büyür ve yaklaşım başarısız olur. - Kısıt çok azsa bunu varsayım ekleyerek çözebilirsiniz, ancak bu modelleyicinin beklentileriyle uyuşmayabilir.
- Çok sayıda bilinmeyen olduğunda bu matris denklemini çözmek çok yavaştır.
- Ters alma işlemi yalnızca
Alternatif yaklaşım:
- Problemi 2D fizik simülatörü olarak formüle etmek:
- Her noktanın bir kütlesi
mve hızıvvardır. - Her kısıt, bağlı noktalara kuvvet
Fuygulayan bir yaydır. - Sürtünme kuvveti hızla orantılıdır.
- Simülasyon küçük
dtadımlarıyla ileri yürütülür ve yakınsayana kadar tekrarlanır.
- Her noktanın bir kütlesi
- Bu yaklaşım, yayın potansiyel enerjisini 0'a indiren çok sayıda küçük değişiklik yapar.
- Her zaman adımındaki çalışma süresi, yay sayısı ve bilinmeyen sayısıyla doğrusal olarak orantılıdır.
- Bu yaklaşım paralelleştirmeye uygundur, dolayısıyla pratikte çok hızlı olabilir.
- Aşırı kısıtlı problemler aşırı kısıtlar hakkında şikâyet etmez: tutarlı sistemler düzgün çözülür, tutarsız sistemlerde ise yaylar uzlaşır.
- Yetersiz kısıtlı problemler sonsuza uçup gitmez, en yakın geçerli yapılandırmayı bulur.
- Bu yaklaşım eşitsizlik kısıtlarını da destekleyebilir.
B-rep çekirdeği
Mekanik CAD'de kullanıcıların parçanın kenarları ve yüzeyleriyle doğrudan etkileşime girmesi gerekir.
- Tüm parametrik CAD programları, parçanın sınırını doğrudan bir veri yapısı olarak temsil eder.
- Bir küp; 6 yüzü olan, her yüzü 4 kenardan, her kenarı da 2 noktadan oluşan bir katı olarak ifade edilir. Bu yaklaşıma sınır temsili (B-rep) denir.
- Eğri yüzeyler için, spline'ın genellemesi olan NURBS yüzeyleri kullanılarak serbest biçimli şekiller üzerinde sanatsal kontrol sağlanabilir ve konik eğriler tam olarak ifade edilebilir.
- Şekli bu şekilde temsil etmek zordur; birleşim, kesişim ve fark gibi Boolean işlemlerini uygulamaya çalıştığınızda ise daha da zorlaşır.
- Bu veriyi işleyen ve Boolean işlemlerini gerçekleştiren kütüphaneye B-rep çekirdeği denir ve bunu yapmak çok zordur.
Mevcut CAD pazarı:
- Büyük CAD şirketleri kendi B-rep çekirdeklerini yazdı ve bu onlarca yıl sürdü.
- En önemli B-rep çekirdeği, birçok endüstriyel ürünü destekleyen Parasolid'dir.
- Açık kaynaklı CAD pazarında OpenCascade, popüler olan tek B-rep çekirdeğidir.
Yeni açık kaynaklı B-rep çekirdeği:
- Truck adlı yeni bir açık kaynaklı B-rep çekirdeği geliştiriliyor.
- Rust ile yazılmıştır; bunun bellek güvenliği garantisi, paralelleştirme kolaylığı ve WebAssembly derleme desteği gibi avantajları vardır.
- Truck küçük ve hafiftir;
.stepdosyalarını okuma/yazma, yüzey üçgenleme, NURBS desteği ve katılar üzerinde kesişim/birleşim/fark işlemlerini destekler.
geçmiş izleyici
Parametrik CAD programları, tasarımın özellik geçmişini saklar.
- Parça; skeç, ekstrüzyon, döndürme gibi işlemlerle tamamlanır.
- "Parametrik" olması, önceki bir adıma geri dönüp değişiklik yaptıktan sonra özellikleri yeniden oynatarak biraz farklı bir parça elde edebileceğiniz anlamına gelir.
- Değişken enjekte ederek modeli parametreleştirebilirsiniz.
Parametrik CAD'in kırılganlığını çözmeye yönelik yaklaşımlar:
- Esnek modelleme stratejisi (RMS): bir parçanın nasıl tasarlanacağına ilişkin kurallar kümesi.
- Skeçlere özellik geçmişi eklemek: skeç özelliklerini özellik ağacında saklayıp göstererek RMS fikrini tek bir skeçe uygulamak mümkün olur.
- Tüm kullanıcı olaylarını yalnızca eklemeye açık bir günlükte kaydederek sınırsız geri al/yinele işlevi sağlamak.
3D kullanıcı arayüzü
CAD'i tarayıcıda çalıştırma fikrini seviyorum.
- Onshape tarayıcıda çalışır, ancak gerçekte AWS üzerindeki GPU destekli bulut örneklerinde çalışmaktadır.
- CADmium, WebAssembly'ye derlenmiş Truck kullanarak her şeyi tarayıcıda yapabilir. Yerel öncelikli bir uygulamadır.
Teknoloji yığını:
- Three.js: 3D görüntüleme alanı
- Svelte: durum yönetimi/reaktivite
- Threlte: Svelte ile Three.js arasında köprü görevi
- UI ile B-rep çekirdeği arasında mesajlaşma
- Electron: yerel çalıştırma
- Diğer standart teknolojiler: Typescript, TailwindCSS, Vite vb.
Dosya biçimi
CADmium her şey için JSON kullanır.
- İşlem günlüğü JSON satırlarından oluşur.
- Tasarlanan parçayı daha basit bir değişim biçimine aktarmayı destekler.
- Örnek:
{ "steps": [ { "type": "sketch", "id": "Sketch-01", "data": { ... } }, { "type": "extrude", "id": "Extrude-01", "data": { "distance": "10mm", "sketch": "Sketch-01", "faces": [0], "type": "new" } } ] } .stepveya.stlbiçimine dönüştürmek için CADmium komut satırı arayüzünü (CLI) kullanabilirsiniz:$ CADmium export my_part.cadmium --format stl
Sonuç
Burada bahsedilen fikirlerden hangilerinin başarılı olacağını, hangilerinin başarısız olacağını bilmiyorum; ancak bu alanda bir yerlerde, küçük bir ekibin üretim sektöründe büyük etki yaratabileceği bir fırsat var.
Gereken yardım:
- Rust programlama (genel iyileştirmeler)
- Hesaplamalı geometri (Truck yamaları)
- Three.js yardımı (yeni kamera denetleyicisi, daha iyi aydınlatma, post-processing)
- Hibe fırsatları veya varlıklı sponsorlar bulma
Şimdilik ele alınmayan ama sonra geri dönmek istenen konular:
- Girişim sermayesi
- Takım yolu üretimi (CAM)
- Sonlu eleman analizi (FEA)
Bu fikir ilginizi çektiyse, sohbet etmek için CADmium Discord sunucusuna katılın!
GN⁺ görüşü
- Rust'un avantajları: Rust, bellek güvenliği ve paralelleştirme kolaylığı sayesinde açık kaynak projeler için çok uygundur. Bu da CADmium'un kararlılığını ve performansını artırmada büyük fayda sağlayacaktır.
- WebAssembly kullanımı: WebAssembly kullanarak CAD işlemlerini doğrudan tarayıcıda gerçekleştirebilmek oldukça yenilikçidir. Bu, internet bağlantısının kararsız olduğu ortamlarda bile çalışmaya devam etmeyi mümkün kılar.
- Dosya biçiminin sadeleştirilmesi: JSON tabanlı dosya biçimi anlaşılması kolaydır ve bir metin düzenleyicide doğrudan düzenlenebilir; bu da oldukça kullanışlıdır. Bu, iş birliğini ve sürüm kontrolünü kolaylaştırır.
- Özellik geçmişinin önemi: Özellik geçmişi üzerinden sınırsız geri al/yinele sağlamak, kullanıcı deneyimini ciddi biçimde iyileştirebilir. Bu, tasarım sürecindeki hataların kolayca düzeltilmesini sağlar.
- Açık kaynak topluluğunun gücü: Açık kaynak projeler, topluluğun katılımı ve katkılarıyla hızla gelişebilir. CADmium da çok sayıda geliştirici ve kullanıcının katılımıyla daha da gelişebilir.
Henüz yorum yok.