ब्राउज़र के लिए लोकल-फ़र्स्ट CAD प्रोग्राम CADmium
(mattferraro.dev)CADmium: ब्राउज़र में चलने वाला लोकल-फ़र्स्ट CAD प्रोग्राम
21 मई 2024
हम एक नया ओपन सोर्स CAD प्रोग्राम विकसित कर रहे हैं। इस पर काफ़ी प्रगति हो चुकी है, लेकिन हमें आपकी मदद चाहिए। अगर आप इस प्रोजेक्ट में शामिल होना चाहते हैं, तो Discord में शामिल हों!
क्या-क्या चाहिए?
3D parametric CAD प्रोग्राम बनाने के लिए ज़रूरी चीज़ें:
- 2D constraint solver
- B-rep kernel
- history tracker
- 3D user interface
- file format
आइए हर बिंदु पर बात करें!
2D constraint solver
2D constraint solver यह सुनिश्चित करता है कि रेखाएँ समानांतर या लंबवत बनी रहें, या दो वृत्तों का radius एक जैसा हो, आदि।
- सामान्य तरीका यह है कि सभी unknowns को एक बड़े vector
xमें जोड़ दिया जाए, और सभी constraints को linear equations के रूप में व्यक्त करके एक बड़ी matrix equationMx = bबनाई जाए। - सिद्धांत में, बस
Mका inverse निकालना होता है।x = M^-1 b - व्यवहार में, बहुत-सी optimizations की ज़रूरत होती है। लेकिन इस तरीके की कमियाँ हैं।
- inverse केवल तब निकाला जा सकता है जब
Mएक square matrix हो। - अगर constraints बहुत ज़्यादा हों, तो
Mइतना बड़ा हो जाता है कि यह तरीका विफल हो जाता है। - अगर constraints बहुत कम हों, तो assumptions डालकर इसे हल किया जा सकता है, लेकिन यह modeller की अपेक्षाओं से मेल नहीं खा सकता।
- जब unknowns बहुत अधिक हों, तो इस matrix equation को solve करना बहुत धीमा हो जाता है।
- inverse केवल तब निकाला जा सकता है जब
वैकल्पिक तरीका:
- समस्या को 2D physics simulator के रूप में formulate करें:
- हर point का mass
mऔर velocityvहोती है। - हर constraint एक spring है जो जुड़े हुए points पर force
Fलगाता है। - friction force, velocity के proportional होती है।
- simulation को छोटे
dtके साथ आगे बढ़ाते हुए convergence तक दोहराएँ।
- हर point का mass
- यह तरीका बहुत-से छोटे बदलाव करके spring की potential energy को 0 तक लाता है।
- हर time step पर runtime, springs की संख्या और unknowns की संख्या के अनुपात में linear होता है।
- यह तरीका parallelization के लिए उपयुक्त है, इसलिए व्यवहार में बहुत तेज़ हो सकता है।
- over-constrained समस्याओं में यह over-constraints की शिकायत नहीं करता: consistent system सामान्य रूप से solve हो जाता है, और inconsistent system में springs समझौता कर लेते हैं।
- under-constrained समस्याएँ अनंत तक नहीं उड़तीं, बल्कि सबसे नज़दीकी valid configuration ढूँढ़ती हैं।
- यह तरीका inequality constraints को भी support कर सकता है।
B-rep kernel
मशीन CAD में उपयोगकर्ता को part की edges और faces के साथ सीधे इंटरैक्ट करना होता है।
- सभी parametric CAD प्रोग्राम part की boundary को सीधे एक data structure के रूप में दर्शाते हैं।
- एक cube को 6 faces वाले solid के रूप में दर्शाया जाता है, जहाँ हर face में 4 edges होती हैं और हर edge के 2 points होते हैं। इस तरीके को boundary representation (B-rep) कहा जाता है।
- curved surfaces के लिए NURBS surfaces का उपयोग किया जाता है, जो splines का generalization हैं और freeform shapes पर artistic control तथा conic sections का सटीक representation देते हैं।
- इस तरह geometry को represent करना कठिन है, और जब union, intersection, तथा difference जैसे boolean operations लागू करने हों, तो यह और भी कठिन हो जाता है।
- ऐसे data को संभालने और boolean operations करने वाली library को B-rep kernel कहा जाता है, और इसे बनाना बहुत कठिन है।
मौजूदा CAD बाज़ार:
- प्रमुख CAD कंपनियों ने अपना-अपना B-rep kernel लिखा है, और इसमें दशकों लग गए।
- सबसे महत्वपूर्ण B-rep kernel Parasolid है, जो कई industrial products को support करता है।
- ओपन सोर्स CAD बाज़ार में OpenCascade ही एकमात्र लोकप्रिय B-rep kernel है।
नया ओपन सोर्स B-rep kernel:
- Truck नाम का एक नया ओपन सोर्स B-rep kernel विकसित किया जा रहा है।
- यह Rust में लिखा गया है, जिससे memory safety guarantees, आसान parallelization, और WebAssembly compilation support जैसे फ़ायदे मिलते हैं।
- Truck छोटा और हल्का है, और .step files को पढ़ने/लिखने, surface triangulation, NURBS support, तथा solids के intersection/union/difference operations को support करता है।
history tracker
Parametric CAD प्रोग्राम डिज़ाइन की feature history को संग्रहीत करते हैं।
- sketch, extrude, revolve आदि operations के माध्यम से part पूरा किया जाता है।
- "parametric" का मतलब है कि आप पहले के किसी चरण पर वापस जाकर बदलाव कर सकते हैं और फिर features को replay करके थोड़ा अलग part पा सकते हैं।
- variable injection के ज़रिए model को parameterize किया जा सकता है।
Parametric CAD की नाज़ुकता से निपटने के तरीके:
- resilient modeling strategy (RMS): part डिज़ाइन करने के लिए नियमों का एक सेट।
- sketches में feature history जोड़ना: sketch features को feature tree में save और display करके RMS विचारों को एक ही sketch पर लागू किया जा सकता है।
- सभी user events को append-only log में रिकॉर्ड करना, ताकि unlimited undo/redo functionality मिल सके।
3D user interface
मुझे ब्राउज़र में CAD चलाने का विचार पसंद है।
- Onshape ब्राउज़र में चलता है, लेकिन वास्तव में यह AWS की GPU-enabled cloud instances पर चलता है।
- CADmium WebAssembly में compiled Truck का उपयोग करता है, इसलिए ब्राउज़र में ही सारा काम कर सकता है। यह एक local-first app है।
तकनीकी स्टैक:
- Three.js: 3D viewport
- Svelte: state management/reactivity
- Threlte: Svelte और Three.js के बीच पुल
- UI और B-rep kernel के बीच message passing
- Electron: local execution
- अन्य standard technologies: Typescript, TailwindCSS, Vite आदि
file format
CADmium हर चीज़ के लिए JSON का उपयोग करता है।
- operation log, JSON lines से बना होता है।
- डिज़ाइन किए गए parts को अधिक सरल exchange format में export करने का support है।
- उदाहरण:
{ "steps": [ { "type": "sketch", "id": "Sketch-01", "data": { ... } }, { "type": "extrude", "id": "Extrude-01", "data": { "distance": "10mm", "sketch": "Sketch-01", "faces": [0], "type": "new" } } ] } - CADmium command-line interface (CLI) का उपयोग करके .step या .stl में convert किया जा सकता है:
$ CADmium export my_part.cadmium --format stl
निष्कर्ष
यहाँ बताई गई कौन-सी बातें सफल होंगी और कौन-सी विफल, यह पता नहीं, लेकिन इस क्षेत्र में कहीं न कहीं किसी छोटी टीम के लिए manufacturing industry पर बड़ा प्रभाव डालने का अवसर है।
ज़रूरी मदद:
- Rust programming (सामान्य सुधार)
- computational geometry (Truck patches)
- Three.js सहायता (नया camera controller, बेहतर lighting, post-processing)
- grant opportunities या किसी समृद्ध sponsor की तलाश
ऐसी चीज़ें जिन पर अभी बात नहीं कर रहे, लेकिन बाद में लौटना चाहेंगे:
- venture capital
- toolpath generation (CAM)
- finite element analysis (FEA)
अगर यह विचार आपको रोचक लगे, तो CADmium Discord server में शामिल होकर बातचीत करें!
GN⁺ की राय
- Rust के फ़ायदे: Rust, memory safety और आसान parallelization की वजह से ओपन सोर्स प्रोजेक्ट्स के लिए बहुत उपयुक्त है। इससे CADmium की स्थिरता और performance बेहतर करने में बड़ी मदद मिल सकती है।
- WebAssembly का उपयोग: WebAssembly का इस्तेमाल करके सीधे ब्राउज़र में CAD कार्य करना बेहद अभिनव है। इससे अस्थिर internet connection वाले वातावरण में भी काम जारी रखा जा सकता है।
- file format का सरलीकरण: JSON आधारित file format समझने में आसान है, और इसे text editor में सीधे संशोधित भी किया जा सकता है, जो बहुत उपयोगी है। इससे collaboration और version control आसान हो जाता है।
- feature history का महत्व: feature history के माध्यम से unlimited undo/redo functionality देना user experience को काफ़ी बेहतर बना सकता है। इससे डिज़ाइन प्रक्रिया के दौरान हुई गलतियों को आसानी से सुधारा जा सकता है।
- ओपन सोर्स community की ताकत: ओपन सोर्स प्रोजेक्ट community की भागीदारी और contributions के ज़रिए तेज़ी से आगे बढ़ सकते हैं। CADmium भी कई developers और users की भागीदारी से और बेहतर बन सकता है।
अभी कोई टिप्पणी नहीं है.