1 पॉइंट द्वारा GN⁺ 2024-05-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • CADmium का लक्ष्य ब्राउज़र में चलने वाला open source 3D parametric CAD बनना था, लेकिन फिलहाल यह बंद हो चुका है और GitHub repository archive के रूप में बची है
  • डिज़ाइन का केंद्र 2D constraint solver, b-rep kernel, history tracking, 3D UI और file format को नए तरीके से जोड़ना था, जबकि मौजूदा CAD users के लिए परिचित अनुभव बनाए रखना था
  • 2D constraint solving के लिए बड़े matrix को एक बार में solve करने के बजाय spring-mass-damper physics simulation की तरह iterative convergence वाला तरीका सोचा गया था
  • b-rep kernel के लिए Rust-आधारित open source Truck का उपयोग करने की योजना थी, और WebAssembly व JavaScript bindings की वजह से इसे browser execution के लिए उपयुक्त माना गया
  • file format के लिए JSON और JSON Lines आधारित text-centric format का लक्ष्य था, ताकि CLI, git-diff, script-based edits, collaboration और सहायक tools के ecosystem को ध्यान में रखा जा सके

प्रोजेक्ट की स्थिति और लक्ष्य

  • CADmium एक नया open source CAD program बनाने की कोशिश वाला project था
  • वर्तमान में project बंद हो चुका है, और GitHub repository archive के रूप में उपलब्ध है
    • deployment maintain नहीं किया जाता
    • PR स्वीकार नहीं किए जाते
    • Discord मौजूद है, लेकिन active नहीं है
  • लक्षित 3D parametric CAD components 5 थे
    • 2D constraint solver
    • b-rep kernel
    • history tracker
    • 3D user interface
    • file format

2D constraint solver approach

  • मौजूदा तरीका सभी unknowns को एक बड़े vector में बांधता है, हर constraint को linear equation के रूप में व्यक्त करता है, और इसे एक विशाल matrix equation के रूप में solve करता है
  • इस तरीके में inverse matrix निकालने के लिए matrix का square होना ज़रूरी होता है
    • constraints बहुत ज़्यादा हों तो matrix लंबा हो सकता है और fail हो सकता है
    • duplicate constraints आपस में compatible हों तब भी over-constraint की वजह से समस्या हो सकती है
    • constraints बहुत कम हों तो solution खोजने के लिए assumptions डाली जाती हैं, लेकिन modeler की अपेक्षा से अलग sketch elements दूर उड़ सकते हैं
  • unknowns बढ़ने पर बड़ी matrix equation slow हो जाती है, और इसी वजह से individual sketches को छोटा और simple रखने की practice बनी
  • CADmium का alternative 2D constraint problem को physics simulation की तरह treat करना है
    • हर point के पास mass और velocity होती है
    • हर constraint connected points पर force लगाने वाली spring की तरह काम करता है
    • velocity के proportional friction force होता है
    • छोटे time intervals में simulation चलाकर convergence कराई जाती है
  • पूरे problem को एक बार में solve करने के बजाय छोटे changes repeat करके springs की potential energy को 0 की ओर ले जाया जाता है
  • हर time step का runtime springs की संख्या और unknowns की संख्या के साथ linearly proportional होता है, इसलिए ज्यादा complex sketches संभालने की संभावना है
  • simulation approach parallelization के लिए अच्छी तरह fit बैठती है, और compute shader पर चलाने की गुंजाइश भी है
  • over-constraint problem में system अपने-आप consistent हो तो सही solve होता है, और inconsistent हो तो springs compromise point खोजती हैं
  • under-constraint problem में अनंत तक उड़ने के बजाय सबसे नज़दीकी valid configuration मिलती है
  • यह तरीका inequality constraints भी support कर सकता है
    • length को 1cm से ज़्यादा और 2cm से कम तक सीमित करना
    • sketch angle को 10 degree से 30 degree के बीच सीमित करना
  • बंद polygon के किसी खास area को pressure force की तरह treat करने जैसे दूसरे forces तक भी इसे extend किया जा सकता है
  • मूल लक्ष्य ऐसा experience देना है जो ज़्यादातर CAD users को familiar लगे, लेकिन 2D constraint solving में नए ideas लागू करने की गुंजाइश मानी गई

b-rep kernel और Truck

  • mechanical CAD में users को part के edges और faces को सीधे handle करना पड़ता है
  • parametric CAD part की boundary को data structure के रूप में सीधे represent करने वाली Boundary Representation, यानी b-rep approach का उपयोग करता है
    • cube को 6 Faces वाले Solid के रूप में represent किया जाता है
    • हर Face में 4 Edges होते हैं
    • हर Edge में 2 Points होते हैं
  • curved surfaces के लिए NURBS surfaces अक्सर इस्तेमाल होती हैं, जो freeform shape control और conic curves की accurate representation संभव बनाती हैं
  • b-rep केवल shape representation के रूप में भी कठिन है, और Union, Intersection, Subtraction जैसे boolean operations implement करते समय difficulty काफी बढ़ जाती है
  • ऐसी data और boolean operations को handle करने वाली library को b-rep kernel कहा जाता है
  • प्रमुख proprietary CAD companies ने अपने kernels दशकों में बनाए हैं, और proprietary kernels अच्छे लेकिन महंगे माने जाते हैं
  • open source CAD में OpenCascade को लगभग अकेला popular open source b-rep kernel माना जाता है
    • free है, लेकिन rough और unstable हो सकता है—ऐसा आकलन है
    • official build instructions screen पुराने Windows environment जैसी दिखती है—यह बात भी बताई गई
  • Truck नया develop हो रहा open source Rust b-rep kernel है
    • GitHub repository public है
    • Rust में लिखा गया है और WebAssembly compilation support अच्छा है
    • operating systems और browser में चल सकता है
    • JavaScript bindings और examples देता है
  • इसका मतलब यह नहीं कि Rust category-wise C++ से बेहतर है, लेकिन open source projects के लिए इसके कई अहम फायदे हैं
    • build tools powerful, convenient और अच्छी तरह documented हैं
    • centralized package management है
    • memory safety guarantees ज़्यादा हैं, जिससे parallelization आसान और सुरक्षित बनती है
    • compiler errors friendly हैं, जिससे refactoring आसान होती है
  • Truck करीब 4 साल पुराना project है और माना जाता है कि इसमें basic features पहले से मौजूद हैं
    • .step files पढ़ना और लिखना
    • fixed tolerance criteria पर surface triangulation
    • NURBS support
    • दो Solids का Intersection या Union, single Solid का Not operation
  • Truck छोटा और lightweight है, और Ricos नाम की company इसे develop कर रही है
  • NURBS में B का मतलब B-Splines है, लेकिन T-Splines support करने की संभावना भी है
    • T-Splines patent Autodesk के पास था, लेकिन कहा गया कि वह कुछ हफ्ते पहले expire हो गया
    • माना गया कि Truck में theoretically support जोड़ा जा सकता है

history tracking और version control की योजना

  • parametric CAD design की Feature History save करता है
    • sketch, extrude, revolve जैसे operations stack करके part बनाया जाता है
    • पिछले step पर लौटकर values बदली जा सकती हैं और features फिर run करके अलग part मिल सकता है
  • model में variables को input के रूप में inject करके और values बदलकर part update होता है, और model parameterized हो जाता है
  • यह approach सफल रही है, लेकिन Topological naming problem जैसी कमजोरियां हैं, और parametric CAD paradigm पर भी criticism है
  • fragility कम करने के approach के रूप में Resilient Modeling Strategy आया
    • chamfer और fillet edges को consume करते हैं, इसलिए उन्हें अंत में रखें
    • Detail feature, Core feature को refer कर सकता है, लेकिन आपस में एक-दूसरे को refer नहीं करते
  • अगर CAD program ऐसे patterns enforce करे तो शुरुआत में यह limitation जैसा लगेगा, लेकिन design को reuse और migrate करना आसान हो सकता है
  • sketches में भी feature history जोड़ने की योजना है
    • आज के CAD में circle, rectangle जैसे basic features draw किए जाते हैं और mirror, linear pattern, sketch fillet आदि से duplicate/modify किए जाते हैं
    • यह dependency graph बनाने वाले व्यक्ति के अलावा दूसरों के लिए समझना कठिन होता है, इसलिए कई बार sketch मिटाकर फिर से शुरू करना तेज़ पड़ता है
    • sketch features को भी feature tree में save/display किया जाए तो RMS ideas को एक single sketch पर भी लागू किया जा सकता है
  • सभी user events को append-only log के रूप में record करने का idea भी शामिल है
    • अगर log file का single source of truth हो तो time slider से किसी खास Feature History को reconstruct किया जा सकता है
    • file बंद करके फिर खोलने के बाद भी unlimited Undo/Redo संभव हो जाता है
    • past version से अलग दिशा में branch करके git history जैसी design exploration tree बनाई जा सकती है
  • लक्ष्य ऐसा CAD application है जिसमें हर valid document state आसानी से recover की जा सके
    • सभी trial-and-error
    • सभी “final” outputs
    • पुराने states जिनकी ज़रूरत का पहले पता नहीं था
  • यह structure हो तो parts की कई variants maintain की जा सकती हैं, और toolpath generation या FEA जैसे downstream processes चलाते समय की design state भी record की जा सकती है
  • अगर mechanical design के लिए git बनाया जा सकता है, तो mechanical design के लिए GitHub भी बनाया जा सकता है—योजना इस विचार तक जाती है

browser-based 3D user interface

  • CADmium browser में CAD करने के तरीके को target करता है
  • Onshape ने रास्ता खोला, लेकिन असल में इसे AWS के GPU-enabled cloud instances पर चलने और result को browser में stream करने के तरीके के रूप में explain किया गया
    • internet connection टूट जाए तो viewport rotate तक नहीं कर सकते
  • Truck को WebAssembly में compile किया जा सकता है, इसलिए CADmium browser के भीतर सभी काम handle करने वाला Local-First app बन सकता है
  • इस्तेमाल किया गया tech stack यह है
    • Three.js: 3D viewport
    • Svelte: state management और reactivity
    • Threlte: Svelte और Three.js को जोड़ना
    • UI और b-rep kernel के बीच message passing
    • Electron: local execution
    • TypeScript, TailwindCSS, Vite आदि
  • यह stack पूरे app को reactive और declarative तरीके से लिखने देता है, जिससे data changes mesh updates तक जुड़ते हैं
  • 3D CAD app सबसे complex UIs में से एक है, इसलिए छोटी team को अच्छा product बनाना हो तो framework को बहुत सा काम संभालना होगा
  • इस stack से working proof of concept बन चुका था, इसलिए माना गया कि CADmium की limiting factor यह हिस्सा नहीं है

JSON file format और CLI ecosystem

  • CADmium हर चीज़ के लिए JSON इस्तेमाल करना चाहता था
  • Operation Log के लिए JSON Lines इस्तेमाल करने की योजना थी
  • part design के बाद उसे अधिक simple exchange format में export किया जा सकना चाहिए—ऐसा माना गया
  • example format steps array में sketch, extrude जैसे operations रखने वाली JSON structure है
  • CADmium CLI से .cadmium file को .step या .stl में convert करने का usage example है
$ CADmium export my_part.cadmium --format stl
  • ecosystem बनाने के लिए दो जरूरी elements हैं
    • समझने में आसान simple file format
    • उस format को handle कर सकने वाला open source CLI
  • text editor से extrude depth या fillet radius बदलने का use case है
  • ISO 10303-21 जैसी complex specification पढ़े बिना script से सभी M5 screws को M6 screws में बदलने जैसे use cases भी संभव हैं
  • अगर mechanical design के लिए GitHub बनाया जाए और सच में इस्तेमाल हो, तो mechanical design के लिए GitHub Copilot की कल्पना भी की जा सकती है
  • आकलन यह है कि large language models complex proprietary binary formats की तुलना में simple और open text-based formats पर सबसे बेहतर काम करते हैं

आवश्यक मदद और रोके गए क्षेत्र

  • कौन से ideas सफल या असफल होंगे, यह पता नहीं, लेकिन इस area में छोटे groups के पास manufacturing पर बड़ा असर डालने का मौका है—ऐसा माना गया
  • आवश्यक मदद इस प्रकार है
    • Rust programming और general improvements
    • Truck patches के लिए computational geometry
    • Three.js support
      • नया camera controller
      • बेहतर lighting
      • post-processing
    • grants opportunities या wealthy sponsors ढूंढना
  • फिलहाल नहीं, लेकिन बाद में फिर देखना चाहेंगे ऐसे areas हैं
    • venture capital
    • toolpath generation, यानी CAM
    • Finite Element Analysis, यानी FEA
  • CADmium Discord server मौजूद है, लेकिन project status notice के अनुसार active नहीं है

1 टिप्पणियां

 
GN⁺ 2024-05-22
Hacker News की राय
  • Matt जो बना रहे हैं, उससे काफ़ी उम्मीदें हैं। दुनिया को SolidWorks जितनी आसान UI/UX वाला ओपन-सोर्स parametric CAD सच में चाहिए
    अब तक यह ठीक से न हो पाने की सबसे बड़ी वजह यह थी कि पर्याप्त ताकतवर parametric kernel नहीं था, और Matt जिस Truck का इस्तेमाल कर रहे हैं, वह बिल्कुल ज़रूरी तरह का प्रोजेक्ट लगता है। पहले OpenCascade लगभग अकेला विकल्प था जो पास आता था, लेकिन उसमें अहम फीचर्स की कमी है और bugs व instability बहुत हैं
    अगर Truck और CADmium स्थिर fillet हासिल कर लेते हैं, तो यह OpenCascade का सही उत्तराधिकारी और ओपन-सोर्स parametric CAD के भविष्य को बनाने वाला platform बन सकता है

    • मैं किसी प्रचारक जैसा नहीं लगना चाहता; बस एक अच्छा non-subscription, local-first CAD चाहिए
      हाल ही में मैं Alibre Atom3D पर गया हूँ; यह ओपन-सोर्स नहीं है, लेकिन एक बार 200 डॉलर देने पड़ते हैं। जब तक host OS में बहुत बड़ा बदलाव न हो, तब तक design खोलते रह सकते हैं, और यह ACIS kernel पर चलता है
      “browser-first” और README में “paid hosted version से monetization” जैसे वाक्य देखकर लगता है कि यह project या तो धीरे-धीरे खत्म हो जाएगा, या बड़ा होते-होते open-core/subscription-ज़रूरी product बन जाएगा, और installation dependencies व security features बढ़ते जाने से सच में local चलाना धीरे-धीरे मुश्किल होता जाएगा
    • मुझे लगता है FreeCAD weekly builds ने बहुत तरक्की की है। नए mainline weekly build में topological naming fix शामिल लगता है, और Ondsel भी अपनी branch का अच्छा काम वापस contribute कर रहा है
      मैंने weekly version और OpenDark theme इस्तेमाल करके देखा, और यह काफी polished लगा। ओपन-सोर्स CAD के लिए यह वाकई दिलचस्प समय लगता है
    • अगर “सबसे बड़ी वजह यह थी कि पर्याप्त ताकतवर parametric kernel नहीं था”, तो क्या Parasolid इसमें नहीं आता? Plasticity में देखे फीचर्स बहुत प्रभावशाली थे। या फिर बात सिर्फ free और open-source software की हो रही है, यह जानना चाहता हूँ
      जितना ज्यादा CAD platforms आज़माता हूँ, उतना ज्यादा लगता है कि general-purpose CAD की तुलना में किसी सीमित problem domain के लिए बनी dedicated applications कहीं अधिक उपयोगी हैं। SVG/DXF/DWG output एक फायदा है, लेकिन mass-production machine parts, one-off architecture, highways, 50-mile pipelines, circuits, urban transport planning और art—सब कुछ संभालने की कोशिश करने वाला drawing software मुझे गलत दिशा में जाता लगता है
      industry-standard road design software इस्तेमाल करने के बावजूद object model में “road” नाम की कोई चीज़ मौजूद नहीं है। horizontal, vertical और cross-section components एक-दूसरे से अलग नहीं हो सकते और interaction rules भी साफ़ हैं, फिर भी उन्हें अलग-अलग define किया जाता है। designers को कंप्यूटर को यह बताने में कम समय लगाना चाहिए कि चीज़ कैसे दिखानी है, और final result के बारे में ज़्यादा सोचना चाहिए
    • मुझे इन tools की बहुत जानकारी नहीं है, लेकिन home repair projects और diagrams/layouts बनाने के लिए मैंने QCAD इस्तेमाल किया है और उससे बहुत संतुष्ट रहा। यह काफी powerful लगता है और open source भी है। हालांकि browser-based नहीं है
      CAD tools या open source की बात होने पर HN पर QCAD का लगभग ज़िक्र क्यों नहीं होता, यह सोचता हूँ
      1 - https://www.qcad.org/
    • बात सही है। यह Rust के लिए बहुत अच्छी application है। क्योंकि यह domain complex और कठिन है, और इसमें चीज़ों का सही चलना ज़रूरी है
  • Solvespace के maintainers में से एक के तौर पर कुछ बातें जोड़ना चाहूँगा: केवल 2D constraints पर्याप्त नहीं हैं; 3D constraints बेहतर हैं। अगर C++ में लिख रहे हों, तो मैं कहता कि Dune3D ने जैसे Solvespace का constraint solver इस्तेमाल किया, वैसे ही ले लें; लेकिन अगर Rust पसंद है, तो Michael F Bryan ने Rust में जो काम किया और अपने blog पर लिखा, उसे देख सकते हैं
    https://adventures.michaelfbryan.com/posts/constraints-part-...
    geometry kernel की तरफ, Solvespace kernel में 3 तरह के bugs हैं जिन्हें मैं ठीक करना चाहता हूँ; वे ठीक हो जाएँ तो boolean operations को काफी स्थिर तरीके से संभाला जा सकेगा, लेकिन समय नहीं मिला। हमारा kernel 6 हजार lines से कम है, इसलिए सीखने के लिए बहुत कुछ होगा। इस विषय पर संपर्क करना चाहें तो इसी ID के gmail पर mail कर सकते हैं। Truck को मैंने कुछ समय से नहीं देखा और लगा था कि वह थोड़ा stagnate हो गया है। यह सचमुच कठिन समस्या है, इसलिए commercial दुनिया में भी विकल्प कम हैं। trimmed NURBS shells को triangulate करना भी tricky है
    history/feature tree FreeCAD की topological naming problem से गहराई से जुड़ा है। Solvespace हर entity को ज्ञात चीज़ों के set से generate करके handle करता है। अगर फिर से बनाने की कोशिश करें, तो नई entity बनाने के बजाय मौजूदा entity handle लौटा देता है। यानी हर entity “किसी चीज़ से आई है” और वह relationship याद रखती है। जहाँ हम topological naming संभालते हैं, वहाँ यह पूरी तरह काम करता है, लेकिन Solvespace के सभी हिस्से cover नहीं हैं। इसे शुरुआत से डालना पड़ता है; बाद में आसानी से जोड़ा नहीं जा सकता
    और यह भी जानना चाहूँगा कि CADmium को कहाँ try किया जा सकता है—कोई link है?

    • SolveSpace solver को wrap करने वाला Rust wrapper भी है। हालांकि इसे WebAssembly target के लिए compile करना कितना मुश्किल होगा, यह नहीं पता
      [1] https://github.com/thekakkun/rust_slvs
    • Solvespace वाकई शानदार है। मैंने कई tools आज़माए हैं, लेकिन इसका learning curve ठीक-ठाक है, खासकर non-mechanical engineers के लिए भी इस्तेमाल करने लायक है, और features, Linux support, zero cost, तथा hosting service risk से बचाव—इन सबका अच्छा balance देता है
    • 4 नंबर में मदद कर सकता हूँ
      Github:
      https://github.com/MattFerraro/CADmium
      यहाँ link है:
      https://mattferraro.github.io/CADmium/
    • आपने एक non-open-source project developer को GPL code उठा कर इस्तेमाल करने को कह दिया। यह तो लगभग copyright dispute की recipe है
  • मुझे यह वाकई कमाल का काम लगता है। अच्छा होगा अगर open source physical CAD भी उस स्तर तक पहुँच जाए जहाँ open source EDA पहुँच चुका है।
    कहा गया था कि ऐसी matrix equations को solve करना unknowns बढ़ने पर बहुत धीमा हो जाता है, इसलिए अलग-अलग sketches छोटे और सरल होने चाहिए—यह आम धारणा बन जाती है। लेकिन काफी गहराई से देखने पर असल में यह कोई बड़ी समस्या नहीं है।
    FreeCAD की constraint performance समस्या मुख्यतः redundant और अनावश्यक GUI layout algorithms से आती है, और कुछ सौ constraints होते ही यह टूटने लगता है। Eigen का sparse QR decomposition 2200 constraints पर करीब 18 सेकंड लेता है, जो बुरा नहीं है। ऐसी sparse QR decomposition libraries भी हैं जो 5 लाख~10 लाख constraints को लगभग 18 सेकंड में process कर देती हैं। CAD sketch में हजारों से ज़्यादा constraints होने की स्थिति की कल्पना करना मुश्किल है।
    [1]: https://github.com/FreeCAD/FreeCAD/issues/11498#issuecomment...

    • CAD के बारे में बिल्कुल न जानने वाले के रूप में, यह हैरानी की बात है कि लेखक ने ऐसे matrix solvers आज़माए नहीं। खासकर non-square matrix वाले मामलों को iterative methods से solve करना कई क्षेत्रों में आम है।
    • OndselSolver https://github.com/Ondsel-Development/OndselSolver पर है, और sparse matrices पर direct Gaussian elimination के ज़रिए redundant constraints removal और under-constrained systems को आसानी से handle कर सकता है।
      इसका इस्तेमाल FreeCAD और Ondsel ES की assembly constraints में हो रहा है।
  • बहुत पहले Autodesk Inventor से CAD सीखा था, और कुछ घंटे चलाकर समझ में आ जाने वाला इकलौता free modeling software Onshape था। इस क्षेत्र में usability सचमुच बहुत बड़ी समस्या लगती है।
    उदाहरण के लिए FreeCAD में ऐसा लगता था कि एक ही काम करने के अरबों तरीके हैं, लेकिन आखिर में असली तरीका सिर्फ एक ही होता था, और कुछ tutorials गलत model छोड़ जाते थे।
    शानदार काम है, और समस्या कठिन लगती है।
    Repo: https://github.com/MattFerraro/CADmium

    • SolveSpace अच्छा है। अब तक मिले free CAD tools में, remote तरीके से भी इस्तेमाल करने लायक मुझे यही इकलौता tool लगा। इसमें FreeCAD भी शामिल है। हालांकि इसमें bevel और fillet जैसी काफी बड़ी features नहीं हैं।
    • FreeCAD के साथ मेरा love-hate relationship है।
      मैं लगभग सिर्फ Part Design, Sketcher, Spreadsheet workbenches ही इस्तेमाल करता हूँ। ये तीनों आम तौर पर साथ में ठीक काम करते हैं। Workbenches के बीच interoperability खराब है, इसलिए दूसरी तरफ विस्तार करने से डर लगता है। कभी-कभी Part workbench भी इस्तेमाल करता हूँ, लेकिन उसे Part Design में इस्तेमाल करने के लिए internal format conversion दो बार करनी पड़ती है, इसलिए यह बहुत झंझट भरा है।
      उम्मीद है कि कई open source CAD projects में से कोई एक किसी दिन FreeCAD की जगह लेगा।
    • Onshape performance और usability के लिहाज़ से बेहतरीन tool है। मैं बिल्कुल beginner था, फिर भी 3D-printed joints वाली सचमुच चलने वाली robot arm design कर पाया, motors और layout वगैरह बना पाया, और movement तक animation में देख पाया।
      Practical तो नहीं था, लेकिन phone पर भी model चलता था।
    • SolidWorks का काफी अनुभव है और Creo व NX भी कुछ हद तक इस्तेमाल किए हैं; इस नज़रिए से Onshape एकमात्र "free" CAD है जो उनके बराबर user experience देता है। हालांकि Onshape का "free" option खास अच्छा नहीं है, और paid options hobby users वाले price पर नहीं हैं—यह अफसोस की बात है।
      Fusion360 भी इस्तेमाल किया जा सकता है, लेकिन जिन commercial packages को मैंने इस्तेमाल किया है उनकी तुलना में इसका user experience काफी भयानक है।
      free CAD से मेरी उम्मीद यह है कि कोई Creo की robustness और speed लाए और उसे SolidWorks की friendliness के साथ जोड़ दे। शुरुआत में features काफी सीमित हों तो भी ठीक है।
    • मुझे लगा था कि FreeCAD की दिक्कत मेरी नासमझी की वजह से है, लेकिन अच्छा लगा कि दूसरे लोग भी इसी निष्कर्ष पर पहुँचे। हाल में लगभग हर शाम 1~2 घंटे, 3 हफ्तों तक, मैं print करने के लिए एक ऐसा object बनाने की कोशिश करता रहा जिसे मैंने सरल समझा था।
      प्रक्रिया यह थी: ऐसा tutorial follow करना जो 80% तक ले जाता है, बाकी somehow जोड़ने की कोशिश करना, फिर समझना कि उस basic tutorial ने project को इस तरह structure किया है कि बचा हुआ 20% पूरा नहीं किया जा सकता, और जब पिछले step को modify करने की कोशिश करो तो पूरा project टूट जाता है। यही बार-बार दोहराया।
      CAD में आम तौर पर operation order इतना महत्वपूर्ण होता है क्या? मैंने सोचा था कि object सरल है और FreeCAD कितना मुश्किल होगा, यही सोचकर कूद पड़ा, लेकिन असल में यह बहुत कठिन निकला।
  • इस क्षेत्र में कोई नया entrant आना, और खास तौर पर नया kernel बनाने की कोशिश करना दिलचस्प है, लेकिन सफलता की संभावना कम लगती है। industry के top kernels वे हैं जिन्हें automotive और aerospace कंपनियों की funding मिली है और जिन्हें CAGD PhD और programmers ने दशकों तक develop किया है। बुनियादी तौर पर competitive feature set तक पहुँचने में भी लंबा समय लगेगा
    यह भी सवाल है कि वे कौन-सी user problem हल करना चाहते हैं। CAD users को open source की अनिवार्य जरूरत नहीं होती। budget constraints होंगे, लेकिन इस क्षेत्र में open source शायद developer tools की तरह user को सीधे दिखने वाला feature नहीं है। Plasticity ने दिखाया है कि Parasolid को license करके भी low price range में पैसा कमाया जा सकता है
    मैं 30 साल से ज्यादा समय से parametric CAD tools इस्तेमाल कर रहा हूँ, और Onshape, Creo या SolidWorks में मौजूद कई समस्याओं का काफी शानदार समाधान है। data खोता नहीं, file system नहीं बल्कि शुरुआत से database-based बना, unlimited undo वाला collaborative CAD के लिए Google Docs जैसा environment जिंदगी बदल देने जैसा है। हालांकि modeling features अभी भी दूसरे tools को catch up कर रहे हैं
    Onshape, Creo, SolidWorks की बड़ी कमी यह है कि उनका structure 2D sketch से शुरू होकर 3D object में extrude, revolve, loft करने वाला है। 3D tools मूल structure के add-on और बाद में सोची गई चीज के करीब हैं। Plasticity, Rhino, Alias कहीं ज्यादा 3D-first हैं
    Onshape का FeatureScript बहुत cool और powerful है, लेकिन CAD users के अपने tools बनाने के लिए यह Rhino के Grasshopper जितना अच्छा नहीं है
    CADmium को किस market में paid/free alternatives से बेहतर CAD tool बनना है, और किस user problem को हल करना है, इस पर focus करना चाहिए। development की शुरुआत ही क्यों न हो, user needs समझने के लिए यह कभी बहुत जल्दी नहीं होता। open source अपने-आप में goal नहीं है

    • browser engine के बारे में भी मैंने बहुत बार सुना है कि पहले ही इतने absurdly ज्यादा man-hours लग चुके हैं कि scratch से शुरू करके catch up करना असंभव है, लेकिन Ladybird browser वास्तव में जबरदस्त progress दिखा रहा है
      modern tools, पुराने engines से मिली सीख, और entry debt न होना—इनके साथ छोटी team भी 30 साल पुराने software के बराबर या उससे बेहतर चीज बना सकती है
      मुझे लगता है कि छोटी और committed team नया parametric kernel और CAD package बना सकती है। खासकर अगर वह open source हो, तो और भी संभव है
    • नए CAD users एक अच्छे open source alternative का स्वागत करेंगे। ऊपर से दुनिया विविध है, और सभी के पास एक जैसे type या scale का पैसा नहीं है
      CAD users को अच्छे open source alternative से बड़ा फायदा मिल सकता है
    • open source development में मुश्किलें हैं, यह सही है, लेकिन open source software का इस्तेमाल करने में अपने-आप में कोई नुकसान नहीं है। जिसे इसका मतलब नहीं पता, या जिसे परवाह नहीं, उसके लिए भी यह उतना ही अच्छा काम करता है
      इसके उलट proprietary software से बचने के कई कारण हैं, और SaaS हो तो वे और मजबूत हो जाते हैं। आजकल चीजें तेजी से SaaS की ओर जा रही हैं और यह मामला भी ऐसा ही है। CAD software ऐसा क्षेत्र है जहाँ कई users ने पहले ही सैकड़ों घंटे सीखने और इस्तेमाल करने में लगा दिए, फिर proprietary systems ने terms बदलकर उन्हें जला दिया
      मुझे पता है कि हम कम लोग होंगे, लेकिन मेरे लिए open source अपने-आप में absolute goal है। बहुत लंबे समय से मैं सिर्फ open source software ही इस्तेमाल करता आया हूँ
    • Onshape, Creo, SolidWorks एक ही kernel इस्तेमाल करते हैं, इसलिए UI/UX का मिलना-जुलना भी हैरानी की बात नहीं। Onshape के बारे में अंदाजा है, लेकिन company history देखते हुए इसकी संभावना ज्यादा है। Rhino जैसे tools CAD के ऊपर 3D graphics side के लिए बने हैं, इसलिए freeform surface modeler-first होना भी अजीब नहीं है
      फिर भी यह हिस्सा मुझे साफ नहीं लगता कि open source goal नहीं हो सकता। यह KiCAD और Altium के रिश्ते जैसा है। अगर Onshape जो देता है उसका 90% open source में दिया जा सके, तो मुझे लगता है लोग उसे इस्तेमाल कर सकते हैं
      cost वाला नजरिया समझता हूँ। SolidWorks license लगभग 3,000–5,000 dollars के आसपास है, इसलिए ज्यादातर companies proven tool के लिए पैसा देकर इस्तेमाल करेंगी
      संदर्भ के लिए, Onshape को 3 साल के भीतर MVP बनाने तक 10 million dollars से कम में बनाया गया था। मुझे नहीं लगता कि आज नया CAD program बनाने के लिए दशकों के बराबर PhD manpower जरूरी है
    • commercial CAD industry का ज्यादातर हिस्सा Parasolid जैसे एक proprietary kernel और exchange file formats पर निर्भर है, यह मुझे healthy नहीं लगता
  • CAD kernel ecosystem का बेहतरीन summary दिया है
    खास तौर पर यह वाक्य पसंद आया: "एकमात्र लोकप्रिय open source B-rep kernel OpenCascade है, जो B-rep kernels की दुनिया का Pontiac Aztek है। बदसूरत है, सिर्फ basic features हैं और टूट भी सकता है, लेकिन चलता है और मुफ्त में मिल जाता है"
    बिल्कुल सही बात है

    • tuk-tuk वाली तुलना पर खूब हँसी आई
  • अगर local-first है, तो यह browser में ही क्यों होना चाहिए, यह जानने की उत्सुकता है
    Solvespace का फायदा यह है कि यह एक single download/executable file है
    साथ ही उसका constraint solver CADsketcher और Dune 3D जैसे projects में इस्तेमाल हुआ है: https://github.com/dune3d/dune3d
    लेखक ने कहा कि wrapper code ज़रूरी सभी features expose नहीं करता था, इसलिए उन्होंने Solvespace के solver को सीधे इस्तेमाल किया, और वे जिस तरह की equations generate कर रहे थे उन्हें पर्याप्त तेज़ बनाने के लिए जहाँ लागू हो सके वहाँ equations को symbolic तरीके से solve करने के लिए solver को patch करना पड़ा
    यह https://github.com/jay3sh/cadmium से संबंधित है या नहीं, यह भी जानने की उत्सुकता है
    CAD kernel के रूप में Manifold का भी ज़िक्र नहीं था: https://github.com/elalish/manifold/wiki/Manifold-Library मेरी समझ में इसमें OpenCASCADE जैसी कई कमियाँ हैं, फिर भी इसका ज़िक्र करने लायक लगता है
    इस kernel पर पहले यहाँ भी चर्चा हुई थी: https://news.ycombinator.com/item?id=35071317
    पूरा history और editability खास तौर पर दिलचस्प और promising लगते हैं। अगर उस history को किसी open/close किए जा सकने वाले panel में सूचीबद्ध किया जा सके, और completed elements को hide करने के लिए expand triangle जोड़ा जा सके ताकि current work पर focus किया जा सके, तो मेरे लिए यह सपना सच होने जैसा होगा। हालांकि शर्त यह है कि मैं 3D side समझ पाऊँ। अब तक मैंने BRL-CAD, FreeCAD, Solvespace, Alibre Atom आदि में कोशिश की और सबमें असफल रहा; सफलता सिर्फ OpenSCAD जैसे code-based tools में मिली

    • browser की ज़रूरत इसलिए है क्योंकि web browser ने वह काम कर दिखाया है जिसमें system developers कम-से-कम 60 साल तक नाकाम रहे। उसने ऐसा platform बनाया है जिस पर कई devices में बस चलने वाली applications डाली जा सकती हैं
    • अगर यह browser में चलता है, तो आप Linux, Mac, Windows, ChromeOS, iPad या phone—कुछ भी इस्तेमाल करें—यह काम करेगा
      घर पर part design करना, office में उसे modify करना, और makerspace में उपलब्ध equipment से बनाना हो, तब कुछ install न करना पड़े—यह बड़ा फायदा है
    • Manifold एक triangle mesh library है। CAD को NURBS surfaces इस्तेमाल करनी चाहिए और rendering के समय ही triangulate करना चाहिए
      Solvespace के triangle mesh code को Manifold से बदलने पर कभी विचार किया था, लेकिन काम बहुत ज़्यादा है, और असल में ज़रूरत NURBS bugs ठीक करने की है ताकि mesh code पर निर्भरता कम हो
      संदर्भ के लिए, Solvespace constraint solver FreeCAD के Assembly 3 workbench में भी इस्तेमाल होता है। आजकल यह कई जगह फैल रहा है
  • मैं सहमत हूँ कि 3D CAD apps के UI सबसे जटिल UI में से होते हैं
    हालांकि इस बात को लेकर संदेह है कि अच्छी 3D CAD छोटी team बना सके, इसके लिए framework को बहुत-सा काम संभालना होगा। मुझे शक है कि general-purpose UI framework 3D CAD का long-term solution बन सकता है या नहीं
    अच्छी UX के लिए कभी-कभी parametric 3D model, mesh approximation, hidden-surface removal के बाद lines और patches में projection, frame buffer के pixels, और UI widgets—सबको साथ में consider करना पड़ता है। frameworks बहुत ज़्यादा यह मान लेते हैं कि information आसानी से अलग-अलग बाँटी जा सकती है और उसका size भी सीमित होता है
    prototyping में मदद मिल सकती है, लेकिन project बड़ा होने पर core 3D viewport interactions में अंततः framework छोड़कर OpenGL या मिलती-जुलती चीज़ और mouse/keyboard events के बीच का ज़्यादातर हिस्सा अपने code से भरना पड़ेगा
    buttons या lists जैसे frameworks ठीक होंगे, लेकिन ऐसे elements भी average app की तुलना में 3D CAD में कहीं ज़्यादा dynamic होते हैं

    • असली solution सिर्फ imgui है
  • सच में उम्मीद है कि CADmium मुझे OpenSCAD से आगे निकलने में मदद करेगा। OpenSCAD में शुरुआत में बहुत बड़ा सोचने की ज़रूरत नहीं होती, बस simple language में modules के ऊपर modules बनाते जाते हैं
    समस्या यह है कि OpenSCAD में solver नहीं है। variables हैं, लेकिन constraints नहीं। बदलाव करते-करते अचानक constraints को manually solve करने के लिए बहुत दिमाग लगाना पड़ता है और errors डालना आसान हो जाता है
    फिर भी समस्या इतनी गंभीर नहीं कि किसी और tool पर चला जाऊँ। क्योंकि model शुरू करने के चरण में OpenSCAD अब तक इस्तेमाल किए किसी भी tool से कहीं आसान लगता है

    • अच्छा हो अगर Solvespace और OpenSCAD मिल जाएँ, ताकि दोनों worlds की खूबियाँ मिल सकें
    • Ondsel ने LGPL 3D assembly solver develop किया है
      https://github.com/Ondsel-Development/OndselSolver
      यह FreeCAD और Ondsel ES में इस्तेमाल हो रहा है
    • FreeCAD में built-in OpenSCAD engine है
      शुरुआत में मैंने OpenSCAD से शुरू किया था, लेकिन असली 3D objects बनाते समय FreeCAD कहीं ज़्यादा productive लगा। कभी-कभी आप rectangle से शुरू करके एक line हटाना और semicircle जोड़ना चाहते हैं, लेकिन sketch शुरू करने से पहले आपको यह पता नहीं होता
      OpenSCAD में ऐसा लगता है कि ज़रूरी shape primitives और उन्हें ठीक-ठीक कैसे modify करना है, यह पहले से जानना पड़ता है; और 2D पर extrude/rotate लगाने के बजाय 3D primitives को encourage करना भी व्यक्तिगत रूप से मुझे खटकता था
    • क्या आपने Build123D देखा है, यह जानने की उत्सुकता है
    • एक और विकल्प OpenSCAD के लिए BOSL2 library है। इसमें align, attach, anchor operations और कई उपयोगी operations व parts हैं
  • यह देखकर अच्छा लगता है कि दूसरे लोग open source CAD में अपना समय और talent लगा रहे हैं। Ondsel में हम मानते हैं कि open source CAD बहुत महत्वपूर्ण है, और इस क्षेत्र में innovation देखकर खुशी होती है

    • मैं Ondsel के बारे में देख रहा हूँ, लेकिन organization और product को पूरी तरह समझ नहीं पा रहा। क्या Ondsel और FreeCAD का संबंध CodeWeavers और Wine जैसा है?