- µcad, Rust में इम्प्लीमेंट की गई CAD के लिए एक open source प्रोग्रामिंग भाषा है, और यह कोड के जरिए 2D स्केच व 3D ऑब्जेक्ट परिभाषित करके उन्हें STL·SVG में एक्सपोर्ट करने वाला text-based geometry system है
- भाषा के केंद्र में parametric geometric objects हैं, और बुनियादी आकृतियों को boolean operations से जोड़कर जटिल आकार बनाए जाते हैं तथा 3D printing·CNC machining के फॉर्मैट में render करने की संरचना दी गई है
- static type system और unit-based Quantity literals का उपयोग करके
50mm, 10°, 50% जैसे मानों से मॉडल परिभाषित किए जा सकते हैं, और geometry model tree बनाने के लिए Models type आधारित type system उपलब्ध है
- modules·functions·
part workbench·use statement, std::geo2d·std::geo3d जैसी standard libraries, और TOML डेटा इम्पोर्ट करने वाली std::import सुविधा के जरिए reusable design code और data-driven modeling तैयार की जा सकती है
- प्रोग्रामिंग-आधारित CAD workflow चाहने वाले users के लिए यह एक संदर्भ योग्य प्रोजेक्ट है, और इसके साथ examples·documentation·live coding सामग्री भी दी गई है
µcad परिचय
- µcad, कोड के जरिए 2D स्केच और 3D ऑब्जेक्ट परिभाषित व जनरेट करने वाली open source CAD प्रोग्रामिंग भाषा है
- इसका केंद्रीय कॉन्सेप्ट parametric geometric modeling है
- बुनियादी आकृतियों को जोड़कर जटिल आकार बनाए जा सकते हैं, और परिणाम को STL·SVG में render करके 3D printing या CNC कार्यों में इस्तेमाल किया जा सकता है
भाषा डिज़ाइन और मॉडलिंग तरीका
- µcad, parameters के साथ geometric definitions पर आधारित मॉडल संरचना बनाने वाली parametric modeling language है
- आकृतियाँ कोड में घोषित की जाती हैं, और सिर्फ parameters बदलकर कई तरह के variants बनाए जा सकते हैं
Sphere, Cube, Cylinder आदि को boolean संयोजनों से synthesize किया जाता है, और revolve·array·transform के जरिए 3D आकृतियाँ बनाई जाती हैं
CsgCube·Spirograph·Gears·Dome जैसे उदाहरणों के जरिए 2D स्केच-आधारित 3D generation, repetitive structure generation, gear profile जैसे कई modeling patterns दिखाए गए हैं
type system और unit literals
- µcad static type system का उपयोग करता है और variables immutable तरीके से काम करते हैं
- Quantity type के जरिए
mm, °, % units को सीधे इस्तेमाल करके मॉडल बनाया जा सकता है
10°·4m²·50% जैसे notation को सीधे मॉडल parameters के रूप में इस्तेमाल किया जा सकता है
- Models type, geometry model tree को दर्शाने वाली संरचना है, जो code-based CAD model की node structure को समेटती है
module system और standard libraries
mod, use, fn, part आदि का उपयोग कर बड़े डिज़ाइन को कई code units में बाँटने वाली module संरचना बनाई जा सकती है
std::geo2d, std::geo3d, std::math, std::ops जैसी standard libraries geometry operations·math·matrices·sketch construction को सपोर्ट करती हैं
part, sketch और 3D parts को बनाने व transform करने की इकाई के रूप में उपयोग होता है
डेटा इम्पोर्ट और debugging
std::import से TOML फ़ाइलों से parameters इम्पोर्ट करके उन्हें मॉडल में लागू किया जा सकता है
- तैयार पुर्ज़ों के specifications को मॉडल में आसानी से inject करने का यह तरीका है
std::debug::assert_eq आदि का उपयोग करके इम्पोर्ट किए गए मानों को verify किया जा सकता है
toolchain और installation
- Rust-आधारित CLI टूल
microcad-cli से मॉडल चलाए और render किए जा सकते हैं
cargo install microcad-cli से install किया जा सकता है
- यह अभी alpha चरण में है और लगातार features जोड़े जा रहे हैं
microcad-viewer के जरिए render किए गए परिणाम को visualize किया जा सकता है
- repository का विकास codeberg.org पर हो रहा है और वितरण crates.io के जरिए किया जा रहा है
उदाहरण और live coding सामग्री
- Spirograph, Lego Bricks, Gears, Dome आदि कई उदाहरण आधिकारिक ब्लॉग पर उपलब्ध हैं
- gear profile generation, spirograph modeling, dome structure generation जैसे programming CAD उपयोग के उदाहरण दिए गए हैं
- सभी उदाहरण code के साथ live coding वीडियो में भी उपलब्ध हैं, जिससे भाषा के उपयोग को चरणबद्ध तरीके से समझा जा सकता है
प्रोजेक्ट की स्थिति
- प्रोजेक्ट शुरुआती चरण में है और लगातार विस्तार किया जा रहा है
- “The µcad book” दस्तावेज़ीकरण के जरिए पूरी भाषा को व्यवस्थित रूप से संकलित किया जा रहा है
1 टिप्पणियां
Hacker News राय
वेबसाइट और उदाहरणों से LEGO का उल्लेख हटाना चाहिए
LEGO ट्रेडमार्क सुरक्षा को लेकर बहुत सख्त है, और नहीं चाहता कि तीसरे पक्ष उसके नाम का इस्तेमाल करें
वजह यह है कि ब्रांड के सामान्य संज्ञा बन जाने और ट्रेडमार्क अधिकार खोने का जोखिम रहता है
संबंधित लेख: "Lego sues Dutch firm over anti-terror blocks using name and shape" (archive लिंक)
अच्छा होगा अगर होमपेज की पहली स्क्रीन पर एक सरल code example और उससे बनी sketch तुरंत दिखाई जाए
मैंने zoo और उसकी भाषा KCL का इस्तेमाल करके boundary representation (BREP) आधारित CAD लिखा है
लगता है µcad का मकसद भी यही है
व्यक्तिगत रूप से मुझे KCL का pipeline तरीका ज़्यादा पसंद है
लेकिन zoo की यह बात खलती है कि वह cloud-only kernel को मजबूर करता है, जिससे vendor lock-in बहुत बढ़ जाता है
µcad इस समस्या को कैसे हल करता है, यह अभी साफ़ नहीं है
µcad, Manifold पर आधारित होने की वजह से mesh-centric है, इसलिए यह brep-आधारित KCL से अलग है
KCL को दूसरे kernel तक भी बढ़ाया जा सकता है
OpenSCAD की सबसे अच्छी बात यह है कि code save करते ही 3D view में result तुरंत देखा जा सकता है
जानना चाहता हूँ कि ucad में भी ऐसा त्वरित workflow संभव है या नहीं
यह वास्तविक 3D intersection calculation किए बिना 2D स्क्रीन पर तेज़ी से ड्रॉ करता है
OpenSCAD ने इस संरचना को AST के रूप में abstract किया, ताकि उसे OpenCSG, CGAL, Manifold जैसे अलग-अलग engine तक भेजा जा सके
सैद्धांतिक रूप से कोई भी CAD ऐसा कर सकता है, लेकिन इसे लागू करना कठिन है
मैंने OpenSCAD और CadQuery इस्तेमाल किए हैं, लेकिन UI और kernel की सीमाओं की वजह से असुविधा हुई
Onshape या Fusion 360 की तुलना में इनमें फ़ीचर कम हैं
FreeCAD भी काफ़ी बेहतर हुआ है, लेकिन फिर भी शुरुआती और मध्यम स्तर के उपयोगकर्ताओं के लिए इसे चलाना आसान नहीं है
उम्मीद है कि open source CAD कभी न कभी सच में एक मजबूत विकल्प बनेगा
Fornjot जैसे प्रोजेक्ट नए kernel आज़मा रहे हैं
इस प्रोजेक्ट में constraint solver नहीं है, या कम-से-कम उसकी योजना का दस्तावेज़ीकरण नहीं दिखता
साधारण constraints के लिए हर बार trigonometric functions को हाथ से संभालना नहीं चाहूँगा
यह कमी महसूस हुई कि Lego brick tutorial की तरह web notebook environment में सीधे चलने वाला version नहीं है
MachineBlocks का SCAD crash course की तरह अगर बिना install किए आज़माने का तरीका हो, तो अच्छा होगा
जानना चाहता हूँ कि क्या यह AutoCAD का विकल्प बनने के ज़्यादा करीब है
और क्या इसमें ऐसा file format compatibility है कि इसे Revit वगैरह में import किया जा सके
यह वाकई दिलचस्प प्रोजेक्ट है
एक ऐसे programmer के तौर पर जिसे हाथ से CAD चलाना पसंद नहीं, यह तरीका कहीं ज़्यादा intuitive लगता है
लेकिन gear example देखकर लगा कि library के basic primitives समझने के लिए documentation ध्यान से पढ़नी पड़ेगी
community बढ़ेगी तो शायद और ज़्यादा shapes जुड़ेंगी
मैं ऐसे CAD language की तलाश में था जो iteration को अच्छी तरह support करे
अपना घर डिज़ाइन करते समय मैंने सोचा था कि wall construction की बारीकियों को loop-based code से automate किया जा सके तो अच्छा होगा
लेकिन जब for loop ही नहीं था, तो ऐसा काम बहुत मुश्किल हो गया और आखिरकार मैंने छोड़ दिया