- µcad, Rust ile geliştirilmiş, kodla 2D eskizler ve 3D nesneler tanımlayıp bunları STL·SVG olarak dışa aktarabilen açık kaynaklı bir CAD programlama dili ve metin tabanlı geometri sistemi
- Dilin merkezinde parametrik geometrik nesneler yer alıyor; temel şekiller Boolean işlemleriyle birleştirilerek karmaşık formlar oluşturuluyor ve 3D baskı·CNC işleme formatlarında render ediliyor
- Statik bir tip sistemi ve birim tabanlı Quantity literalleri kullanarak modeller
50mm, 10°, 50% gibi değerlerle tanımlanabiliyor; ayrıca geometrik model ağacını kurmak için Models tipi sunuluyor
- Modüller·fonksiyonlar·
part workbench'i·use ifadesi, std::geo2d·std::geo3d gibi standart kütüphaneler ve TOML verisini içe aktaran std::import özelliği sayesinde yeniden kullanılabilir tasarım kodu ve veri odaklı modelleme kurulabiliyor
- Programlama yaklaşımıyla CAD iş akışı isteyen kullanıcıların inceleyebileceği bir proje; örnekler, dokümantasyon ve canlı kodlama materyalleri birlikte sunuluyor
µcad genel bakış
- µcad, 2D eskizleri ve 3D nesneleri kodla tanımlayıp üreten açık kaynak bir CAD programlama dili
- Temel kavram parametrik geometrik modelleme
- Temel şekilleri birleştirerek karmaşık formlar oluşturabilir, sonucu STL·SVG olarak render edip 3D baskı veya CNC çalışmalarında kullanabilirsiniz
Dil tasarımı ve modelleme yaklaşımı
- µcad, parametreli geometrik tanımları merkeze alarak model yapısını kuran bir parametrik modelleme dili
- Şekiller kodla tanımlanır ve yalnızca parametreleri değiştirerek farklı varyasyonlar üretilebilir
Sphere, Cube, Cylinder gibi nesneler Boolean birleşimleriyle sentezlenir; revolve·dizi·dönüşüm işlemleriyle 3D formlar oluşturulur
CsgCube·Spirograph·Gears·Dome gibi örnekler üzerinden 2D eskiz tabanlı 3D üretim, tekrar eden yapıların oluşturulması ve dişli profilleri gibi farklı modelleme kalıpları gösteriliyor
Tip sistemi ve birim literalleri
- µcad statik bir tip sistemi kullanır ve değişkenler değiştirilemezdir
- Quantity tipi sayesinde
mm, °, % birimleri doğrudan model oluşturmada kullanılabilir
10°·4m²·50% gibi gösterimler doğrudan model parametresi olarak kullanılabilir
- Models tipi, geometrik model ağacını ifade eden bir yapı olup kod tabanlı CAD modelinin düğüm yapısını taşır
Modül sistemi ve standart kütüphaneler
mod, use, fn, part gibi yapılarla modül düzeni kurularak büyük tasarımlar birden fazla kod birimine ayrılabilir
std::geo2d, std::geo3d, std::math, std::ops gibi standart kütüphaneler geometri işlemleri·matematik·matrisler·eskiz oluşturmayı destekler
part, eskiz ve 3D parçalar oluşturup dönüştürmek için kullanılan birimdir
Veri içe aktarma ve hata ayıklama
std::import ile TOML dosyalarından parametreler alınarak modele yansıtılabilir
- Hazır parça ölçülerini ve standartlarını modele kolayca enjekte etme yöntemi
std::debug::assert_eq gibi araçlarla içe aktarılan değerler doğrulanabilir
Araç zinciri ve kurulum
- Rust tabanlı CLI aracı
microcad-cli ile modeller çalıştırılabilir ve render alınabilir
- Kurulum:
cargo install microcad-cli
- Şu anda alfa aşamasında ve işlevler eklenmeye devam ediyor
microcad-viewer ile render sonuçları görselleştirilebilir
- Geliştirme codeberg.org üzerindeki depoda sürdürülüyor ve dağıtım crates.io üzerinden yapılıyor
Örnekler ve canlı kodlama materyalleri
- Spirograph, Lego Bricks, Gears, Dome gibi çeşitli örnekler resmî blogda yayımlanmış durumda
- Dişli profili üretimi, spirograph modelleme, kubbe yapısı oluşturma gibi programlamalı CAD kullanım örnekleri sunuluyor
- Tüm örnekler, dilin kullanım biçimini adım adım anlamayı sağlayacak şekilde kod ve canlı kodlama videolarıyla birlikte sunuluyor
Proje durumu
- Proje erken aşamada ve genişlemeyi sürdürüyor
- “The µcad book” dokümantasyon çalışmasıyla dilin tamamı sistemli biçimde belgeleniyor
1 yorum
Hacker News yorumları
Web sitesinden ve örneklerden LEGO ifadesi kaldırılmalı
LEGO, marka koruması konusunda çok katıdır ve üçüncü tarafların bu adı kullanmasını istemez
Bunun nedeni, markanın jenerikleşip ticari marka hakkını kaybetme riskinden endişe etmeleridir
İlgili haber: "Lego sues Dutch firm over anti-terror blocks using name and shape" (archive bağlantısı)
Ana sayfanın ilk ekranında basit bir kod örneği ve üretilen eskizin doğrudan gösterilmesi iyi olurdu
zoo ve onun dili KCL ile boundary representation (BREP) tabanlı CAD yazıyordum
µcad de aynı amaca sahip gibi görünüyor
Kişisel olarak KCL'nin pipeline yaklaşımını daha çok beğeniyorum
Ancak zoo'nun yalnızca bulut tabanlı bir kernel dayatması, ciddi bir vendor lock-in sorunu yaratıyor ve bundan hoşlanmıyorum
µcad'in bunu nasıl çözdüğü ise henüz net değil
µcad, Manifold tabanlı olduğu için mesh merkezli; bu da onu brep tabanlı KCL'den farklı kılıyor
KCL ise başka kernel'lere de genişletilebiliyor
OpenSCAD'in en iyi yanı, kodu kaydettikten hemen sonra sonucu 3D görünümde anında görebilmeniz
ucad'de de böyle anlık bir iş akışının mümkün olup olmadığını merak ediyorum
Gerçek 3D kesişim hesapları yapmadan, 2D ekrana hızlı çizim yapılmasını sağlıyor
OpenSCAD bunu AST ile soyutlayarak OpenCSG, CGAL, Manifold gibi farklı motorlara iletebilir hale getirdi
Teorik olarak her türlü CAD bunu uygulayabilir, ancak uygulaması zordur
OpenSCAD ve CadQuery kullandım ama arayüz ve kernel kısıtları nedeniyle rahatsız ediciydi
Onshape veya Fusion 360 ile karşılaştırıldığında özellikleri yetersiz kalıyor
FreeCAD de çok gelişti ama hâlâ başlangıç ve orta seviye kullanıcılar için kullanması zor
Açık kaynak CAD'in bir gün gerçekten düzgün bir alternatif olmasını umuyorum
Fornjot gibi yeni kernel'ler deneyen projeler de var
Bu projede bir constraint solver yok ya da buna dair planlar belgelenmemiş
Basit kısıtlar için sürekli trigonometrik hesapları elle sürdürmek istemiyorum
Lego brick eğitimi gibi web notebook ortamında doğrudan çalıştırılabilen bir sürümün olmaması üzücü
MachineBlocks'un SCAD hızlandırılmış kursu gibi, kurulum olmadan denenebilen bir biçim güzel olurdu
Bunun AutoCAD'e alternatif sayılabilecek bir şey olup olmadığını merak ediyorum
Revit vb. araçlara aktarımı mümkün kılacak dosya formatı uyumluluğu da var mı, bilmek isterim
Gerçekten ilginç bir proje
CAD ile elle uğraşmaktan hoşlanmayan bir programcı olarak bu yaklaşım çok daha sezgisel geliyor
Yine de gear örneğine bakınca, kütüphanenin temel primitiflerini anlamak için belgeleri dikkatle okumak gerekecek gibi
Topluluk büyüdükçe daha fazla şeklin ekleneceğini düşünüyorum
İterasyonu iyi destekleyen bir CAD dili arıyordum
Kendi evimi tasarlarken, duvar üretim detaylarını loop tabanlı kodla otomatikleştirebilmenin güzel olacağını düşünmüştüm
Ama for döngüsü olmayınca bu tür işler fazla zorlaşıyor ve sonunda vazgeçtim