12 ms·
A New Era for Mechanical CAD
- skybrian 5y agoOnshape is briefly mentioned. Yes, it’s online only, but it’s also free if you make your designs public, and as a hobbyist tinkering with 3D printing, I find it a good tradeoff. The constraint system is elegant but took some learning since there’s a geometric puzzle aspect to it. I find it nice for making simple revisions like changes in dimensions. (For more extensive revising, it seems easier to delete that part of the sketch and redraw it.)
- dekhn 5y agoThere's a whole subquestion the article mentioned mostly as an aside: version control systems don't facilitate multi-way merging of binary/complex file formats. I don't know that anybody has developed a good solution to this (that scales to large numbers of different formats), and "just use a text file format" doesn't really work for complex models where changes don't appear like minimal diffs. I invested fully in FreeCAD, it does support pointers and instances for many ops, but the reality is that you have to instantiate all the instances in 3-space if you want to do complex geometry conflict checking.
- HPsquared 5y agoLots of programs have an "undo" feature, perhaps the history of this could be saved along with the files. EDIT: that is, saving all user inputs used to generate the binary files in a text format.
- someguy321 5y agoI'm a mechanical engineer. The version control software that we use (I'm most familiar with Windchill, and just a wee bit familiar with SolidWorks PDM) is dumb. It's a B2B market with fat margins that is ripe to be disrupted. Typically in Windchill, a part has a part number, and can be checked out and checked in, iterated, and revised, in operations that are non-intuitive and difficult to reverse. If you ever wanted to build an assembly using older versions of current parts, the process to figure it out might take 100 clicks, or might not be possible depending on how your system administrator set things up. Merging (in the style of git) is generally a completely foreign concept, and engineers generally avoid collaborating on a single part or assembly file for that reason. Dividing up the interior of a vehicle's engine bay, for example, is best done as separate assembly files that are only later brought together as a parent assembly. Communicating about the volumetric boundaries of these assemblies is complicated. I'm often aware that I could be more productive and adaptable using a git repo (or similar) containing my parts, assemblies, and drawings than I currently am with Windchill's specialized system. Haven't ever seen it in the wild, though.
- frontiersummit 5y agoI've used Windchill extensively and I've set up a Vault instance (the Autodesk equivalent). I completely agree with what you are saying. At most companies, there is a "Emperor's Clothes" scenario where even the expert users and administrators have no idea what's going on under the hood, or how to execute advanced operations. (granted, Git has the same issue sometimes, let's face it) To make matters worse, Windchill has quite possibly the worst UI of any software I use --- first off, it runs in an instance of Internet Explorer embedded in the Creo CAD package. Few icons are labeled, and the UI is not discoverable at all. Google is often no help, since it is relatively niche BTB software. Doing what the parent suggests, using old versions of parts in new assemblies, is only reliable when saving the old versions out as a "dumb solid" like a STEP and re-importing them into Windchill. Part of the issue is that version control and databased file systems as a mental model do not align very well with how the human brain operates. The hierarchical structure rules the day in the end, because it aligns well with how we think.
- bobjordan 5y agoI met the founder of Grabcad when he made a trip to Shenzhen China around 2012. I took away that he was trying to build the "github for CAD". We tried the Grabcad system out in our office for a while and it was useful but didn't really meet that vision. I haven't tried it since the company was acquired by Stratasys in like 2014 but a quick login looks like it hasn't changed much.
- ryegar 5y agoCompletely agree, there is a lot of opportunity here. I have extensive experience using Solidworks, its PDM and another vault software (Adept, don't get me started). Collaboration on reasonably complex assemblies is rarely worth the effort, it's easier to communicate in other channels and link up at the end. File versioning is needlessly complicated and often frustrating, especially for less tech-savvy designers.
- SV_BubbleTime 5y agoI deployed PDM at my company. It works fine, and even for people who don’t really know what version control is. Multiple downsides though… cost, only really wants Solidworks files (although does handle everything as binaries), but the worst and most unforgivable issue… They keep full versions of every file, at every check in… forever. If you have a 500MB file, change the color, and check it it, you now have 1GB of file space taken up, with no clear way to cut that down! Coupled with the fact that deleted files don’t delete until someone manually does a destroy operation, it’s a storage space murderer.
- GloriousKoji 5y agoI'm not sure what method it's using (if any) but Perforce is the prevalent version control system for most industries with large files. I think most programmers have heard about it from it's integration with the Unreal engine but as a hardware guy I know it's used at a lot of semiconductor companies for things like managing versions of the various CAD required (layout, schematic, HDL, etc.)
- angry_octet 5y agoIt has the great advantage of being a company you can pay to fix problems. I don't know who you can pay to implement some custom git system for handling huge files and repos. GitHub/Atlassian/GitLab are not interested in working on your company specific workflow.
- ofrzeta 5y agoThis might be possible if the binary format encodes a sequence / tree of CSG operations. A binary blob might be difficult to merge / conflict-resolve for humans.
- krapht 5y agoEven if you had that representation, resolving merge conflicts would be a huge headache. Imagine resolving code conflicts by resolving things at the AST level. Forget CAD, we don't even have a good way to version control images, something programmers work with every day, besides "use Git LFS and pretend an image is just a pointer". edit: just saw GumTree mentioned above. Guess I have something to check out...
- ofrzeta 5y agoOf course not possible with images as a binary blob but it could be possible with a series of operations on a (vector) image ("event log").
- dTal 5y ago>Imagine resolving code conflicts by resolving things at the AST level. This sounds extremely nice actually. The more semantically aware the version control system is, the more likely it can gracefully handle merge conflicts. A textual diff is a very low level transformation primitive; composing them doesn't guarantee very much at the higher level.
- zokier 5y agoGumTree does AST level diffing, hypothetically one could build VCS on top of that. That would work for binary files as long as they are parseable to some sort of sensible AST. https://github.com/GumTreeDiff/gumtree https://github.com/GumTreeDiff/gumtree
- aardvark179 5y agoI worked on this type of problem in the context of structured data in a version managed database, and you need more than just an AST. These types of systems have lots of extra cross dependencies and complexities so to resolve changes you need enough to effectively replay changes from one branch onto another. You’ll find points where this will not work and at that point you need to be able to present the user with self consistent alternatives to choose between, and a way to safely save and recover the other data while they do this. That goes through the entire application stack and UI. The stuff I worked on all worked, but every application and customer that built on our core needed to develop custom rules for their work flows, and I’m not sure many ever did.
- zokier 5y ago> you need to be able to present the user with self consistent alternatives to choose between That seems very high bar to aim for compared to git (and other traditional VCS), which do not ensure that the end-result of a merge (or rebase) is in any way sensible.
- aardvark179 5y agoIt is a high bar, but consider what happens when you get an inconstant merge. With text representing a program you get a compiler or interpreter error and can view and edit the text to fix things up. With something like a CAD drawing you may not be able to open the file, or it might be almost incomprehensible to the user (if you broke coordinate transforms or accidentally combined sub assemblies or something). If you are really unlucky you end up with something that looks okay but subtly breaks the application in a way you will not notice for a long time, and then it’s going to be hard to fix. Oh, and you need to implement this for every file type.
- regularfry 5y agoComing at it from the other end, you may or may not already be aware that one of realthunder's branches (can't remember which right now but probably LinkStage3 since that's where the action seems to be) lets you save the .FCstd file as a directory so that you can commit it to git. I've not tried it myself yet to see how useful the diffs are, but it's not unfeasible to think there's some value there.
- gopalv 5y ago> Just as I would use Vim for side projects as well as professional jobs, I would expect my CAD tool to work just as well for building a toy for fun as it would for a complex project. Not picking on the specific editor there, but that's a high skill tool we're talking about which is full of repeated memory effort (or "muscle memory"), with layers in it. The reference to Jai in this context is probably equivalent, since it is a programmer's tool for a programmer's need to automate/repeat the same operation. The best thing in this whole article is that as more programmers work on problems which require CAD, the more likely they are to solve the problems they run into, but in ways that works for them directly (think Linus, git and emails). The second part was always the hardest (the "make") at the toy project level. In the bay area, the death of TechShop is unfortunate though, where getting a CNC machine time (& my python madness with printf of g-code) meant things went from patterns to real. Like, I'd love a 3-d equivalent to graphviz's dot for representing a 3-d scene in a minimal way for navigation through it, but not for actual manufacture (though things like SPICE went both ways in the end for me).
- Haemm0r 5y agoI work with NX and Teamcenter(central data storage amd PLM software) daily and find the single threading during almost all the design work annoying (except for FE, drawings and maybe a few other things). On the other hand the backwards compatibility is exceptional, opening 20 year old models exactly as they are and rendering the drawings exactly as 20y ago is quite useful (using the renderer of the version it was created with, sometimes with the ols bugs too ;) ). Expanding NX with custom features and custom scripts is quite easy (plugs into MS VS). Afaik as i know you could use C, C++, C.net, python or even Vjsual Basic to access/modify the data.
- etaioinshrdlu 5y agoI suspect another breakthrough will be of a completely different nature: having the computer reverse engineer voxel or polygon models back into a tree of features (something like solidworks). The user gains much easier editing an object as a series of understandable steps instead of a blob of polygons. This is a pretty crazy difficult CS problem! There's a bunch of research papers using deep learning to solve this, and it is starting to work, although in very limited domain. (Relatively prismatic objects.)
- frontiersummit 5y agoUser of 3D CAD here. The reason this is so hard is that a part's geometry will be governed by a different set of parameters, depending on its function, and the software will not know the function of the part, unless is was written by a domain-specific expert. I'll give the simple example of a hex-headed nut: how will the software know that the flat-to-flat measurement is critical (since it corresponds to the wrench/spanner needed to drive it) rather than the point-to-point measurement? In less trivial examples, questions like this need to be though out when creating models, and require domain-specific knowledge that a ML model will not have.
- jjk166 5y agoThis is something I've given some thought to recently. I'm surprised that no CAD software (or at least none that I've used) has a, for lack of better terminology, "functionality markup." There's extensive infrastructure for mating parts in assemblies and validating designs with simulations, you'd think that someone could think up a good way of going in reverse, at least for common use cases. There should be a way to feed in some abstraction of the design requirements and get a design tree that meets those requirements. For example in the case of the hex head nut, there should be a way to describe a wrench as a combination of mates and simulated loads such that a CAD program can figure out that the flat-to-flat measurement on the nut is critical, and I should be able to open up a model of a nut and mark it up in such a way as to communicate "this gets turned by a wrench." While probably useless for such a trivial case, one can easily imagine a case where multiple very different geometries might be appropriate for a task depending on the value of some other parameters, for example maybe I have a design with everything on one side to make machining easier, but the moment I have to add a feature to the other side it makes sense to switch a bunch of those features to the other side as well.
- nickpinkston 5y agoThere are a few problems with making new CAD, especially open source: - CAD math is hard and severely limits contributors. Unlike many open source projects, you need a pretty big core team to make something worth using. FreeCAD/OpenCASCADE, etc. have remained hobbyist CAD, where we've seen the success of open source in software. - Another core problem is that MechE's can't easily edit the tool they're using when they run into a bug/feature they want to work on, unlike open source software where the users can more easily be contributors. - High switching costs: there are four big CAD companies: Dassault, Autodesk, Siemens, PTC, and once a company commits to one ecosystem, it's very hard to change. Ex: Boeing isn't putting the CAD for the 787 in OnShape - ever. There also aren't that many new huge hardware companies, meaning that folks like OnShape get SMEs, but virtually all enterprise is taken. This has essentially led to an oligopoly in mechanical CAD, and slow pace of innovation in the space. I believe CAD tools have 50x less $ investment (including big companies) than software dev tools. - InterOp is also hard, file formats are complex/proprietary/inconsistently implemented. There are kernels like ParaSolid with import/export/conversion systems, but they're not trustworthy enough to really put the 787 into new CAD without so many bugs that you'd lose a year fixing them and likely be paranoid forever wondering if you got them all. - Folks like nTopology have done a good job side stepping these concerns as they built a CAD tool that does a specific function (generative design) that can't be done in traditional CAD kernels and can be sold for very high value-add situations - ie designs that need very high performance from the uniquely optimized geometries that they're able to generate, and export files that play nice with regular CAD. This means Boeing can have some fancy nTopology-created parts in their planes without having to blow up their CAD/PLM systems.
- jbay808 5y agoSometimes closed source software gets open sourced for business reasons, and backed by a big consortium, rather than being written from the ground up by hobbyists. I wonder if big aerospace and defense companies like Boeing, and automakers, and heavy industry, and so on, might decide it's in their interests to collectively buy and open-source an existing commercial CAD package rather than risk being held hostage to the vendors that gatekeep their engineering.
- paddy_m 5y agoI have been working to script Autodesk Fusion 360 with python recently. Programming against this environment is tough and frustrating. A couple of things I have noticed 1. Using the API is far from intuitive. There are many objects that you have to use from the API that have no named corollary in the UI. I know BReps are a thing (probably faces) but there is no way to name a face in the UI and find that via the debugger. I have to poke and prod to try to create the objects to build the things I want to. 2. Limited documentation. The APIs and object tree are documented, but examples are often limited 3. Poor programming environment. It is nice that there is a debugger mode that works with vscode, but this debugger connection frequently breaks, requiring tabbing back into fusion, restarting the debugger, tabbing back to vs-code, restarting the debugger... 4. Most examples are written by non-programmers. I have seen a couple of examples of object graph printout programs, instead of building up a list of lists or objects, these programs intertwine navigating through the tree with print indentation. That said, I just found this repo [1] which looks well written. On the other hand, CAD software is much more complicated than most systems I interact with. CAD platforms are one of the few remaining software systems that are written for experts. Experienced practioners are very productive [2]. So programming these systems will also be complicated. FWIW I'm trying to template a bunch of part imports and their layouts. I'm surprised that this isn't built into the system. You can edit variables for almost (almost) every input in the system, you can name variables and elevate them to file wide variables - all without touching programming. I wish importing was parameterized such that upon import I got a chance to edit the filewide variables as parameters in the new document. [1]https://github.com/JesusFreke/fscad/blob/master/src/fscad/fscad.py https://github.com/JesusFreke/fscad/blob/master/src/fscad/fs... [2]https://youtu.be/G3rho-24DWQ?t=184 https://youtu.be/G3rho-24DWQ?t=184
- phkahler 5y ago>> Most parametric CAD operations are single-threaded; however, the open-source project SolveSpace [solvespace.com], which uses NURBS (nonuniform rational basis splines), has some parallel operations. Current Solvespace maintainer here if you have questions on that. I did most of the work on making NURBS boolean operations use OpenMP for parallel operations. The code is highly functional, so that was mostly adding the appropriate #pragmas, but some things needed fixes, and some required tricky critical sections. https://solvespace.com/ https://solvespace.com/
- wlesieutre 5y ago3.0 is out, congrats on the release! I'd built that myself to try it out earlier this year, IIRC the previous stable build was 5 years old. Guessing I didn't have the OpenMP version from my build, so this should be a performance boost. Unrelated to parallelism, is there a way to lock the vertical axis for orbit, what blender calls "turntable" style rather than "trackball"? Coming from an AutoCAD and Blender background, I'm a lot more comfortable in that mode.
- phkahler 5y ago>> Guessing I didn't have the OpenMP version from my build, so this should be a performance boost. The performance in 3.0 is dramatically better, not just from the OpenMP. We still have a lot of code that doesn't scale well because it's O(n^2) but what is there is much faster. There's also a post-3.0 improvement already in one slow area, and we hope to get Eigen in there to speed up the constraint solver. >> is there a way to lock the vertical axis for orbit, what blender calls "turntable" style rather than "trackball"? Oh man I forget. You might want to comment on this pull request: https://github.com/solvespace/solvespace/pull/956 https://github.com/solvespace/solvespace/pull/956 We obviously can't implement every option under the sun, but I think turntable is more asked for than the one implemented in the PR (which I haven't even had time to test properly).
- wlesieutre 5y agoNever mind, I found it! Turntable already exists, it's in the second block of checkboxes on the config screen, between "enable automatic line constraints" and "edit newly added dimensions." I think that issue is looking for a toggle like Apple's "natural scroll direction" where it's a question of whether you want the metaphor that pushing your scroll wheel is pushing the content up and down or moving the scroll bar grip which makes the content go the opposite direction.
- hrdwdmrbl 5y agoInnovators dilemma. I have worked at Autodesk on a project to do exactly this and seen it happen.
- grumblenum 5y agoOpenSCAD exists, is perfectly usable, is very cool, and stores CAD models 'as code' which is git-friendly. Professionals don't use it. I like it, but I would never standardize on it at work. I'm sure a more point-and-click front-end is certainly possible, but that nobody has tried something quite so obvious probably speaks to its incompatibility with use common use cases. I use Autodesk software daily, and merely representing 3D objects is a very small part of the utility it provides. The software is undoubtedly an unstable mess, but feature parity with Revit or just Fusion 360 is far beyond a pizza-box team of 'disruptors'. There is also a culture of professionalism and practicality in AEC that I don't see folks used to coastal VC/startup playgrounds doing well in. I also find it pretty hard to take the contents of an article seriously when there's name-dropping of celebrity-developers whose business appears to be self-promotion. "I use vim, btw ;)" really puts the nail in the coffin for me. I'm sure CAD-but-on-electron would look great on a slide deck, though.
- jstanley 5y agoOpenSCAD is cool and I do use it when it is the most convenient tool, but I find it to be incredibly slow, and if you don't want the output to be all blocky polygons (which you can only achieve by increasing $fn AFAIK) then it gets even slower. It also suffers from not having any general-case way to fillet or chamfer edges, which means you have to bear your fillets/chamfers in mind throughout the entire design if you want any (which is why most OpenSCAD designs don't bother).
- dTal 5y agoThere is actually a general-purpose way to do fillets in OpenSCAD, using a slightly Rube-Goldberg combination of booleans and minkowski sums. Unfortunately it is, again, far too slow to be usable in 3d at anything like an acceptable resolution. It works great in 2D however. http://www.scorchworks.com/Blog/openscad-modules-for-automatic-fillets-and-radii/ http://www.scorchworks.com/Blog/openscad-modules-for-automat...
- ur-whale 5y ago> it is, again, far too slow It also fails miserably as soon as the geometry you're trying to fillet is complicated.
- rurban 5y agoSo Jessie is looking for people building KittyCAD. I'd rather improve SolveSpace, because this is open source and already operational. Solvespace branded as VsCode with collaboration tools? Ok, why not. I think OpenMP is back in again, but the database format is important, agreed. In her vision I miss the importance of CSG, where the brep surfaces are created dynamically. Looks like she thinks the history and construction of the solid can be thrown away, but with thin shells (3d printing!) Lost precision will haunt you. You need CSG. This is not modern, this is antique.
- wrnr 5y agoI've been trying to build a CAD system, where the node's of a model are stored in a content addressable network, a bit like glTF but with CSG or BREP instead of meshes.
- contingencies 5y agoThis article smells like a software person looking at CAD from a technical standpoint without significant experience with complex product development or production. The reality is, the processes around CAD (namely R&D iteration, tooling production, fabrication and assembly process iteration, management thereof) cost far more than CAD does. In short: who cares if something is single threaded when you are paying literally 100 times that person's salary per day in idle equipment, space and so forth? It's a rounding error. Buy a faster machine. The industry broadly agrees with the author that greater integration between factory floor equipment and digital models is desirable and/or coming (Industry 4.0, etc.) however the complexity of this space is staggering. To briefly explain: every fabrication process (or 'unit' operation in process management terms) has theoretical abilities in terms of part generation, modification or assembly but these are limited by equipment at hand (speeds, tolerances, tooling compatibility, maximum and minimum dimensions, etc.), time, knowledge/training, material and other inputs. Furthermore, equipment-specific maintenance schedules, power requirements, failure modes, consumable replacements and environmental parameters cannot be ignored. And that's before you have to look at aggregate tolerances, lasting effects of these processes on part materials, variations caused due to environmental conditions, temporary storage and movement of parts and inventory during production, secondary processes, human error, regulatory ingress, supply chain complexities, etc. Typical products may include somewhere between 5-100 unit operations to produce, some can take 1000s or 10s of 1000s, especially if you include electronics fabrication, packaging and testing. Individual tooling assemblies often take months to produce, even years if multiple iterations are required. It's not something you use a single program to plan for. You need an experienced team, time, money and a plethora of systems.
- johnwalkr 5y agoI was going to write a similar comment. The CAD part of mechanical engineering is usually a really small part of the overall process. Furthermore, there are really good tools in existing CAD to act as "pointers", they just aren't necessarily how a computer scientist would invent them. They are usually called configurations and indeed they can be automated. Normally "32 instances of a part" would not need to be manually updated either, one update would do it. Finally, it's naive to think simulation is analogous to CI. In some cases it can be pretty close to automated, but normally there is a lot of expertise and interpretation required to get useful results and there are a lot of steps between or instead of simply inputting geometry to the simulation program. It's true that interoperability and version control should be improved, but configuration control is more important and engineers like the author are the ones that try to parameterize too much and cause hidden mistakes and extra work for everyone else.
- aj7 5y agoWe are talking here about a mature technology. Not a bleeding edge area. Modeling a part, making a drawing of the model, and creating a fabrication strategy and code are all problems solved by multiple competing vendors who interact with customers on a daily basis. It’s sufficiently hard to do WELL that open source, or free solutions are mostly for hobbyists.
- jjk166 5y agoThere's a difference between well established and mature. I've been using CAD software for nearly two decades and even now hardly a day goes by when I don't curse solidworks for doing something stupid or making something unnecessarily complicated, and it's one of the more user friendly options out there. I think most engineers would describe CAD as slow and tedious, even if they are experienced users. If you look at things like writing or digital art software, experienced users can utilize those to express the ideas in their heads about as quickly and easily as they could with pen and paper, whereas modeling even simple things takes way longer in CAD than a beer-napkin sketch, and there are plenty of cases where I can imagine a geometry but I have no idea how I would model it in CAD. Beyond making things more intuitive, version control is decades behind that of software, constructing parametric models in a way that they don't break immediately with minor changes requires significant skill on the part of the user, task automation is essentially nonexistent, and collaboration tools are a joke. The field is ripe for disruption by whatever clever team figures out a good way to address these many pain points.