[HN Gopher] OpenSCAD: The Programmer's Solid 3D CAD Modeller
___________________________________________________________________
OpenSCAD: The Programmer's Solid 3D CAD Modeller
Author : LorenDB
Score : 434 points
Date : 2024-09-14 22:02 UTC (1 days ago)
(HTM) web link (openscad.org)
(TXT) w3m dump (openscad.org)
| zimpenfish wrote:
| I've made a bunch of stuff in OpenSCAD and it can be really nice
| to work with but... it does have a bunch of weirdnesses like not
| being to find the size of a compound object, having to micro-
| manage your objects to avoid the spinning beach ball render,
| fillets/chamfers/rounded edges/etc. are dark arts, etc.
|
| If you're basically sticking simple shapes together or cutting
| simple shapes out of other shapes, it's fine enough.
| arghwhat wrote:
| Yeah, it has its charms but... Good luck making a filet or a
| chamfer between two faces whose intersection has a non-trivial
| placement.
|
| Being able to easily reference existing edges and faces for
| future operations is one of the things that make other CAD so
| simple.
| traverseda wrote:
| I have an openscad-alike that supports fillets/chamfers, but
| unfortunately getting it to support importing any third party
| file formats (DXF, SVG, STL) is a bit beyond me right now.
|
| https://github.com/traverseda/PySdfScad
|
| I'd also love to find the time to rewrite the geometry kernel
| in something like taichi (python DSL running on GPU) or maybe
| JAX instead of numpy. And of course it doesn't yet pass most
| of openscad's test cases.
| zimpenfish wrote:
| > Being able to easily reference existing edges and faces for
| future operations
|
| God, yes. Allegedly the BOSL library has some support for
| this kind of thing but I've not got around to trying it yet.
| timschmidt wrote:
| Don't miss the https://github.com/nophead/NopSCADlib library for
| OpenSCAD, which includes a tremendous amount of useful shapes,
| functions, and the ability to produce exploded diagrams, assembly
| instructions, etc.
| spiritplumber wrote:
| thank you!
| derkades wrote:
| I use this library in almost all of my projects:
| https://github.com/BelfrySCAD/BOSL2
| aeonik wrote:
| And here I thought BOSL2 was the pinnacle of OpenSCAD
| libraries.
|
| Great library, thanks for sharing!
|
| https://github.com/BelfrySCAD/BOSL2
| janice1999 wrote:
| Wow, looks like the project might still be alive. Hopefully we
| get a new release year.
| ta988 wrote:
| it is still alive yes the repo is active.
| janice1999 wrote:
| There hasn't been a release in 3 years and no news updates in
| 2 years until the recent GSoC announcement. Modern linux
| distros are still shipping a version from 2021 on a older
| version of Qt, unless you get a nightly unofficial release
| from the snap store. That's not a great sign even if there
| are commits happening. I used OpenSCAD a lot in college and I
| really hope it has a future. I'm glad to see it's getting
| sponsors now.
| ta988 wrote:
| I understand that but a project can still be active even if
| there are no releases. A lot of software doesn't even get
| published as packages in distros.
| h2odragon wrote:
| the "manifold" renderer makes possible some stunts that couldn't
| be done before. for example, i made this "usa counties" outline
| from a _png_ : https://www.printables.com/model/895723-usa-
| counties
|
| its under the "features" preference, doesn't work for everything
| yet, but is worth investigating if you haven't.
| derekp7 wrote:
| I ran into rendering limitations when modeling a multi cyclonic
| add on for my shop vac, and manifold saved this project. I used
| one of the nightly builds for this.
| le-mark wrote:
| The manifold geometry kernel library is a truly impressive
| piece of work imo; well worth checking out;
|
| https://github.com/elalish/manifold
| randomghost1 wrote:
| What are people's thoughts on CAD generation with LLMs for
| OpenSCAD and other proprietary GUI-based softwares? I imagine
| soon we will also be able to "autocomplete" or "semantically
| edit" feature trees in SolidWorks, Fusion, etc.
| stavros wrote:
| I made some simple stuff using Claude with OpenSCAD, it was
| eminently decent. LLMs really have made the start of all
| learning curves flat.
| seveibar wrote:
| The problem with most CAD tools is they don't represent "design
| intent" or high-level components well, and I believe this is
| mostly due to the language's not being sophisticated enough
|
| e.g. a human says "these holes need to be separated by 2mm",
| but when we program in OpenSCAD and other CAD languages we
| usually specify x={-1} for one component and x={1} for the
| other (just an example of how design intent is being lost)
|
| When we can represent design intent well, we'll have something
| that LLMs can really grab hold of and build higher level
| components
| throwgfgfd25 wrote:
| > e.g. a human says "these holes need to be separated by
| 2mm", but when we program in OpenSCAD and other CAD languages
| we usually specify x={-1} for one component and x={1} for the
| other (just an example of how design intent is being lost)
|
| What you mean there is constraints, I suppose?
|
| And yes -- there's some work to add constraints to CadQuery
| sketches/cqparts, but it's early.
|
| https://cadquery.readthedocs.io/en/latest/assy.html https://c
| adquery.readthedocs.io/en/latest/sketch.html#constr...
|
| I suppose the logic has always been that if you control the
| placement of parts in code, you can build your own quasi-
| constraint logic to make reactive, parametric designs. And
| you might argue that "having complete control over this in
| code" is its own kind of "design intent" with its own
| potential justifications.
|
| Specifying constraints in the way the CadQuery development
| does may not be natural.
|
| But both CadQuery and Build123D have kernel-based tools like
| face finders, vertex finders etc., that are capable of things
| that OpenSCAD definitionally cannot do at kernel level.
|
| Replicad (a JS OpenCascade environment) has face and vertex
| finders, face-based sketching, etc.
| number2inATW wrote:
| Nice work y'all
| pbronez wrote:
| OpenSCAD has been great for simple projects. It's very easy to
| get productive with if you know basic programming concepts.
| However, I've run into frustrating limitations on more complex
| projects. The core geometry engine is skittish.
|
| I still use OpenSCAD, but I'm diving into the OCCT ecosystem. It
| has a steeper learning curve, but seems to be significantly more
| robust.
|
| https://dev.opencascade.org/
| kiba wrote:
| I think if you want to do complex things in OpenSCAD, you have
| to use someone's library or write your own.
|
| For example, I wrote centering code that basically work for
| arbitrary length, which then become a frequently used part of
| the codebase. Then when I faced the limitation of the centering
| code, I wrote more code for arbitrary subdivision of elements.
|
| I haven't extracted the new arbitrary subdivision of elements
| out into a module for my library, but I will eventually.
| dgroshev wrote:
| If you find yourself doing a lot of OpenSCAD, you might want to
| check out what you're missing from more traditional CAD systems:
|
| A few examples of simple fillets in SOLIDWORKS:
| https://www.youtube.com/watch?v=f78gblpqxHc
|
| Higher level continuity:
| https://www.youtube.com/watch?v=h5QN40d02cw
|
| A good example of nontrivial surfacing:
| https://www.youtube.com/watch?v=cujS1icUTtg (the entire channel
| is a goldmine of surfacing tutorials)
|
| Not every part needs G3 smooth curves, but being able use those
| tools when appropriate is a superpower.
| fn-mote wrote:
| Yes, it's a wonderful tool. This post kind of upset me; it's
| comparing totally different classes of program.
|
| SolidWorks is subscription based, so your $50 buys access this
| year and probably you won't want to use the model again next
| year, right?
|
| OpenSCAD is free software, and that matters.
|
| Hopefully readers know it's decades behind and very rough to
| use. Your example of "superpower modern CAD" could have been a
| whole lot simpler... probably some simple 2D geometric
| construction would be enough to show a big gap.
|
| SolidWorks is locked to Windows - out in the real world that
| might be 95% of the users but here it's probably 50%.
|
| To finish my defense of OpenSCAD: there's a place and an upside
| to all-text source and coding parameterized with traditional
| variables that you can change in your editor and recompile just
| like any other code. No GUI is only 80% bad.
| wlesieutre wrote:
| Your $50 buys you nothing from Solidworks, expect to pay
| multiple thousands for that
| dgroshev wrote:
| SOLIDWORKS for Makers includes a full copy of SOLIDWORKS
| and costs $48/year
| https://www.solidworks.com/solution/3dexperience-
| solidworks-...
| wlesieutre wrote:
| For non-commercial use, files are watermarked and can't
| be opened later in a commercial or academic licensed
| version
| dgroshev wrote:
| Sure, but I believe the majority of OpenSCAD users are
| fine with non-commercial use.
| kiba wrote:
| Generally people who preferred niche apps like OpenSCAD
| preferred not to be restricted in how they can use the
| app.
| WillAdams wrote:
| If they were, they would probably be using TinkerCAD.
| Qwertious wrote:
| There's a difference between noncommercial and barely
| commercial; if you model something on OpenSCAD and sell a
| single copy for $5, is that commercial? Lawyers say yes.
| But no amount of productivity from Solidworks will make
| spending $3000/year be worthwhile here.
| wlesieutre wrote:
| Solidworks says noncommercial but then gives you $2000
| leeway on commercial use before you need a commercial
| license. I'm not sure how they square that with later
| saying the watermarked files you've created don't work in
| a commercial version.
|
| And it leaves you with an awkward gap where you sell
| $2000 and need a commercial license, but even ignoring
| income tax you don't have enough revenue to afford that
| license.
| dgroshev wrote:
| First of all, I'm sorry I upset you! That was definitely not
| intended.
|
| I'm not comparing the two, I want to show what's possible. I
| often see people finding OpenSCAD, getting comfortable with
| it because it's all code, and stopping there. But there's so
| much more to solid body modelling, it's not too complicated
| to learn, and a bit more advanced CAD really expands the
| range of physical objects we can create! This is why I chose
| those slightly more complex examples, I'm not trying to
| gotcha OpenSCAD, I tried to show why one might want to branch
| out, despite all the downsides (subscription, non-code source
| files, Windows*, etc) you mentioned.
|
| Fwiw I dream of a good open source CAD that syncs code and
| GUI (like KittyCAD) but doesn't fall into the trap of
| "procedural" modelling like OpenSCAD or KittyCAD. The
| combination of sketches+constraints+3D operations+projections
| is perfectly representable as code, it's just much more work
| than raw CSG, requires a geometric kernel, and is more mind
| bending. Still, I hope we will get one some day.
|
| *: it does run perfectly well in Parallels though, so between
| Mac and native Windows I suspect it's more like 80% here
| KMnO4 wrote:
| You had me tricked into thinking Solidworks was $50/year.
|
| I was about to impulse purchase a license and switch over
| from Fusion. That would be an incredibly attractive hobby
| license and would probably take a lot of money from Autodesk.
|
| All I see is closer to $3000/year :(
| dgroshev wrote:
| It is, check out the sibling reply. Dassault's web
| 3DEXPERIENCE stuff is weird and unnecessary, but can be
| abstracted away behind a desktop shortcut.
| the__alchemist wrote:
| Imagine being new to the CAD landscape. There are so many
| technologies, and approaches. Different resources talk about
| the merits of the individual techs.
|
| I would rather someone just flat-out tell me that OpenSCAD
| etc is ineffective for most projects compared to SolidWorks,
| Fusion etc; save the trouble of finding out the hard way.
| Your points are all great, but I don't mind the post you're
| replying to for this reason.
| lowkey wrote:
| I work out of a local Hackerspace here in Austin and we happen to
| have one of the core contributors to OpenSCAD here. He re-wrote
| much of the code in C++ to optimize the core algorithms and
| significantly improve performance using OpenGL.
|
| He is actively looking for gig-work or potentially something more
| significant, so if anyone on HN is looking to get something
| 3D-cad related or even some advanced training, please reach out
| to me (email is on my profile). I will happily make an intro.
|
| OpenSCAD is an ideal tool for adding flexible 3D wizardry to a
| website or app programatically.
| throwgfgfd25 wrote:
| If you want to do code-CAD for anything substantial and you
| haven't yet developed a significant dependency on OpenSCAD, do
| your brain a favour and spend at least _some_ time with CadQuery,
| Build123D or (if you prefer JS to Python) Replicad.
|
| As impressive as NopSCADlib and BOSL2 are _(and OMG they are,
| when you consider what they have to work with!)_ , OpenSCAD is a
| one-way, declarative CSG environment that essentially only
| outputs mesh formats. It's really not that much better than
| working with three-dimensional pixels. You won't really be able
| to analyse, iterate over or measure your models, easily build on
| faces, do easy chamfers or fillets, export STEP files, make use
| of constraint-based designs, model assemblies, or so many other
| things that "CAD" means in the 21st century. All the tools that
| help you do this on OpenSCAD are layers and layers of task-
| specific hacks and clever bodges.
|
| I totally get wanting to make models with version-controlled text
| files instead of GUI CAD (which can be a sort of weird battle to
| learn for a programmer), and I get wanting to avoid FreeCAD. I
| just don't really get wanting to limit oneself to such a limited
| concept of a 3D "model"!
|
| The three alternative systems I mention are all based around
| bindings to (or in Replicad's case, cross-compilation of)
| OpenCASCADE, which is a bRep CAD kernel capable of much richer
| interactions. It is not without its faults, but arguably code-CAD
| spares you from some of the inscrutability that trips up
| FreeCAD's interactive model.
| ajross wrote:
| That is... a weird post to be making from a throwaway account.
| Do you work for Big OpenSCAD or something? :)
|
| But that said, this is all correct. OpenSCAD is actually an
| extremely limited environment and much more expressive tools
| exist in the same "code-based 3D modelling" space.
| IBCNU wrote:
| That's my experience trying to use OpenSCAD from the cli for
| some home remodeling projects, there I was, neo-vim open,
| trying to do 3d with pure text files. But at the end of the
| day the platform felt very limited. Also "Big OpenSCAD" is
| hilarious.
| abetusk wrote:
| The operative word being "open". Much more expressive tools
| exist but the condition on libre/free/open reduces the size
| of that list substantially.
|
| OpenSCAD also has a lower barrier to entry in that the
| programming language and environment is familiar without
| needing a lot of training or context.
| throwgfgfd25 wrote:
| The three I suggested above are absolutely as open as
| OpenSCAD.
|
| (With the addition of developer openness: directly meshing
| with Python or JS libraries)
| abetusk wrote:
| Nice, my bad!
| throwgfgfd25 wrote:
| This is a totally reasonable question! I am using a throwaway
| to limit my HN usage, to be honest. I wish I had a better way
| to manage my addictive social media behaviour than torching
| accounts after a few discussions. But I do not.
|
| I saw this thread only because it's clearly a followup to the
| FreeCAD discussion the other day that I have contributed to.
|
| --
|
| People do get oddly grumpy when you criticise OpenSCAD; there
| is an element of the "I can do maths and refuse to believe
| CAD needs to be any more than this" militancy about it.
|
| I absolutely don't hate it -- OpenSCAD's mere existence is
| what unlocked my ability to even reason in 3D, actually. But
| that quasi-militant tendency is holding back a fascinating,
| liberating software field.
| nrp wrote:
| This viewpoint resonates for me. OpenSCAD is a useful tool
| for hacking together 3D parts quickly, but an excellent
| tool for exercising the shape rotating parts of your brain.
| throwgfgfd25 wrote:
| It's also good if your aim is to visualise maths.
| WillAdams wrote:
| There is actually a book on geometry which takes
| advantage of this:
|
| https://www.goodreads.com/book/show/58059196-make
|
| which has since become a series including:
|
| Trigonometry:
| https://www.goodreads.com/book/show/123127774-make
|
| Calculus:
| https://www.goodreads.com/book/show/61739368-make
|
| Currently working through a library using the new Python-
| enabled OpenPythonSCAD, and at the end of it, hope to
| work on a project which requires conic sections (which
| I'm still researching, so if anyone has any good
| resources on that I'd be glad of them).
| throwgfgfd25 wrote:
| Yes - I haven't bought these yet but I do intend to,
| because I need to brush up on all three (well, I don't
| think I ever really learned calculus, to be honest).
|
| Joan Horvath is a superhero -- I've seen a few interviews
| now.
|
| I will very happily use OpenSCAD for that because it
| seems like a well-chosen tool for the job.
| chefandy wrote:
| > People do get oddly grumpy when you criticise OpenSCAD
|
| Most of us don't realize how much our comfort with familiar
| concepts affects our ability to objectively evaluate them.
| Moving from dev to being a tech artist, I see the same
| exact sort of irrational biases, hang-ups and endemic
| misconceptions with completely different tool chains and
| types of complexity. When I first started using Houdini, I
| tried to turn every task into a Python coding problem
| because that's what I was comfortable with-- Python is
| amazing in Houdini but it's definitely not the best way to
| accomplish most tasks.
| WillAdams wrote:
| The great thing about OpenSCAD is that it makes creating
| models which may be described
| mathematically/programmatically easy.
|
| The awful thing about OpenSCAD is that what one can create
| in it is strongly bounded by one's facility with and
| fluency in mathematics.
|
| I'm curious how the new Python-enabled (I really hope it
| gets added in to the program itself) will affect this.
| throwgfgfd25 wrote:
| You said this so much more succinctly than me.
| coryrc wrote:
| The awful thing is that you can only export triangles, so
| you can't make any true curves. If it was capable to true
| circles it would do everything I have ever needed to
| make.
| asveikau wrote:
| I don't understand this. You can make triangles small
| enough that you can't tell the difference, and define
| them mathematically in terms of curves..? Isn't this how
| any rendering will ultimately work? The primitive is
| triangles.
| WillAdams wrote:
| Yes, but the representation as arcs allows one to defer
| the conversion to polylines/triangles until a later time.
|
| As an example, if doing V carving, the appearance will be
| smoother if the geometry is imported so as to have
| arcs/curves, deferring the conversion to
| polylines/straight line movements until the last possible
| moment on the machine.
|
| Arcs/Curves are also easier to work with if one needs to
| edit, and are more efficient in terms of
| representation/disk space/storage.
| ddingus wrote:
| All true. Great comment.
| ddingus wrote:
| There is a big world out there beyond rendering.
|
| CAM people, for example drive numerically controlled
| machines and robots. (CNC machines) These machines are
| driven by lines, arcs, higher order analytic curves, such
| as the conic, and recent controllers will accept
| bsplines.
|
| Having path planning done with real geometric entities
| brings a lot of benefits along for the ride! Accuracy
| without a bazillion entities for the look ahead system to
| manage and for program buffers to drip feed (DNC) to a
| machine that probably does not have a large enough
| program memory to deal with that bazillion entities.
|
| In many cases, derivative or extrapolated curves do not
| convey the right shape or path or are difficult and time
| consuming to force conformance.
|
| We ended up with the big geometry kernels, such as
| Parasolid, precisely so that CAD could create a brep
| (boundary representation model) of sufficient fidelity to
| make other tasks, such as CAM and simulation, as well as
| derivative designs possible, practical, repeatable.
|
| Those big code bodies have so damn many man hours of
| development in them it is very hard to replace it all.
| And that means we are stuck with some things, like many
| operations being single threaded, which caps CAD design
| to be a function of sequential compute speeds.
|
| There are ways to build models to eliminate some
| dependencies, and the same goes for assemblies, so that
| multi-processing of some sort is possible. That brings
| our multi-core CPUs into the game.
|
| But those are hard to teach, a lot of software does not
| yet support multi-threading anywhere near enough to fully
| exploit the model work, and, and, and...
|
| In the CAD / CAM world, the primitive is the b-spline,
| and the surfaces it can represent.
|
| Those generate faces, trim boundaries and sets of those
| create boundary representation models.
|
| And still those can cause grief. They might be open, or
| just a surface representation. Or, they may self
| intersect...
|
| Basically, every edge, which boils down to a b-spline
| curve that matches up to another b-spline curve serving
| as a trim boundary of a surface, must be shared by two
| and only two surfaces or the model is not representative
| of a real world, manufacturable thing.
|
| Another great observation regarding real world objects is
| there are no edges, just radii, if only a single molecule
| big. Just an interesting and perhaps useful aside.
|
| And b-splines are constrained to conform to the
| properties of lower order entities, such as lines, arcs,
| and the like. This is a part of why wireframe entities
| are all called "curves" or "sketch curves." They
| literally are all b-splines constrained by number and or
| placement of control points.
| coryrc wrote:
| Well, you could export enough triangles to get less than
| 0.0005" variance, but in practice actual CAM software
| will choke on it is my impression; I sent some circular
| objects out to be machined, but they just treated by
| OpenSCAD-exported files as a secondary reference for them
| redoing it in real software.
| imtringued wrote:
| >You can make triangles small enough that you can't tell
| the difference, and define them mathematically in terms
| of curves..?
|
| This doesn't work if you already have a mesh. You need to
| generate your triangles on demand from the BREP data.
|
| Alternatively you need to use tesselation, but then you
| need to design your models with tesselation in mind, such
| as people do in blender.
|
| >Isn't this how any rendering will ultimately work? The
| primitive is triangles.
|
| Uhm no. 3D printing and CAM do not work with triangles.
| The slicer and CAM software generate tool paths in gcode.
|
| Importing STEP files into OrcaSlicer/BambuSlicer gives me
| better quality results and better print speeds than using
| STL files.
|
| I have personally never understood the love for STL files
| in the 3D printing community for anything that isn't the
| result of a blender export. Like, is it really that fun
| to constantly export different versions of STL files set
| to different quality levels? Rescaling a print in the
| slicer is not recommended with STL. You have to re-export
| the model from blender where the tesselation happens.
| WillAdams wrote:
| I added the ability to export to arcs/circles when
| writing out DXFs using PythonSCAD in the library:
|
| https://github.com/WillAdams/gcodepreview
|
| See:
|
| https://github.com/WillAdams/gcodepreview/blob/main/expor
| t.d...
| coryrc wrote:
| You call out 2d and mention mills and routers, so after
| reading the page I'm thinking I wouldn't be able to
| design a piece to be put in a CNC lathe ala the hub in
| the lower right of https://canev.com/cdn/shop/products/CE
| V5205_1024x1024@2x.png..., which has multiple holes
| (sometimes threaded), including threaded setscrew holes
| tangential to the primary axis.
| WillAdams wrote:
| Not as-of-yet --- it's 3-axis at the moment --- hoping to
| eventually add support for additional axis/axes.
|
| Have you looked at grblgru.com ? Not opensource, but does
| have CNC lathe support.
| coryrc wrote:
| It's not a serious problem I have, just saying I like
| OpenSCAD, I have been able to generate every shape I've
| ever needed to create, and it would do everything I want
| if it was possible to generate true curves (because I
| farm out the manufacturing).
| WillAdams wrote:
| Do you have a sample DXF (which uses arcs) which
| describes a lathe project?
| RobotToaster wrote:
| OpenSCAD has it's origins in 3d printing (specifically
| the reprap project IIRC). Most 3d printing slicers[0] and
| firmware don't do curves[1].
|
| [0] Some will import them now but convert them to
| triangles, cura can use a plugin to convert those
| triangles back to G2-G3 arcs or circles.
|
| [1] at least by default, marlin has optional support for
| arcs that can be enabled at compile time.
| parski wrote:
| I think that sounds like a healthy approach to social ad
| platforms and the like.
| wiw2 wrote:
| I poked around with CadQuery and Build123D.
|
| The learning curve required a paradigm shifted in abstraction.
| That was too much.
|
| I just want OpenSCAD simplicity, but with modern programming
| language syntax.
|
| I ended up settling with PythonScad. I was able to hit the
| ground running and leverage what I already know about python
| within a day.
|
| It's new, but the author is extremely active and collaborative
| on github (https://github.com/gsohler/openscad) and reddit
| (https://www.reddit.com/r/pythonscad/). The author actually
| pushed for merging this into OpenSCAD mainline, but got
| gatekeeped out since OpenSCAD maintainers believed Python went
| against OpenSCAD's mantra of being 'secure'.
|
| I recommend PythonSCAD to anyone that liked OpenSCAD simplicity
| in abstraction but feel handicapped by the lack of
| expressiveness.
| throwgfgfd25 wrote:
| > The learning curve required a paradigm shifted in
| abstraction.
|
| This is true! And I think that brute-force simplicity of
| OpenSCAD is the appeal. I am still ultimately a CAD greenhorn
| but it got me started, and I don't blame you.
|
| But I guess the point I am getting to is, that paradigm shift
| is where you really want to be. It's certainly where I think
| most competent programmers who want to really build in 3D
| should want to be.
|
| Because it unlocks the ability to reason about the shapes
| you're creating, within the code that creates them. You can
| for example place a feature in the centre of a face of an
| object you just created, without having to recalculate the
| location of the centre of the face or the normal etc.
|
| You can write code that is truly parametric with real
| encapsulations, and without a battery of variable definitions
| and calculations for every single element -- because you can
| reflect on what you've already made.
|
| (You can also export STEP files to other packages, import
| STEP files and reason about/analyse those as objects rather
| than meshes.)
| wiw2 wrote:
| Thankfully I have been able to do what I want to do without
| learning the complexity that comes with Build123d etc.
|
| Perhaps someday, but I havent had the need to get there
| thus far.
|
| Also: Encapsulation etc was achievable with Python, which
| is something I already know. PythonSCAD checked all the
| boxes for me without the learning curve.
| photonthug wrote:
| Another option in this space is using python to directly
| generate openscad code, which is a fun exercise to sort
| of quickly visualize simple recursive algorithms in a 3d
| world and play with tilings, space filling curves, etc.
| of course building what amounts to a transpiler will be
| fun for some, or a distraction, depending on how focused
| you want to be on the 3d part.
|
| But openscad is a cool and minimal instruction set for
| such experiments, and doing this in a language with
| better meta programming support would be even more fun.
| WillAdams wrote:
| That is such a popular thing that back when I was
| maintaining the Shapeoko wiki there was a separate
| section for that sort of thing and it was hard to keep
| up:
|
| https://web.archive.org/web/20211123185332/https://wiki.s
| hap...
|
| I really hope that OpenPythonSCAD becomes standard and
| that it can harness all that energy and creativity --- in
| particular note that it is now possible to upload a
| design for sharing using it.
| rollcat wrote:
| As someone who's dabbled a little bit with OpenSCAD,
| SolidWorks, etc:
|
| > Because it unlocks the ability to reason about the shapes
| you're creating, within the code that creates them. You can
| for example place a feature in the centre of a face of an
| object you just created, without having to recalculate the
| location of the centre of the face or the normal etc.
|
| I can definitely see the appeal of this; would it be
| possible to refit such capability back into OpenSCAD's
| model (even if it meant breaking some backwards
| compatibility)? Like, you're not just executing imperative
| "drawing" operations, but the models you've created become
| available as first-class objects to be further referenced &
| poked at?
| throwgfgfd25 wrote:
| > I can definitely see the appeal of this; would it be
| possible to refit such capability back into OpenSCAD's
| model
|
| This is where my understanding gets weak, but I think the
| answer in a practical sense is no. Not with the way that
| kernel works. It could be somewhat modelled on top, but
| then you have a layer around the kernel doing essentially
| the whole task of a bRep kernel.
| msephton wrote:
| I find it quite surprising that you're a self-proclaimed
| greenhorn, but very opinionated about what apps people
| should be using.
| Brian_K_White wrote:
| Whatever this is supposed to be criticizing exactly, is
| misplaced and doesn't matter, because they are right
| about the limitations of openscad and the real world
| problems that result from those limitations.
|
| You will discover these problems while still green, and
| their report is corroborated by anyone else who has used
| openscad.
|
| You could try it yourself and discover that what they
| said is true.
|
| If you've tried to use openscad to model more than a
| cube, then you have run in to the limitations. If you
| have gone on to spend years building models in openscad,
| then you know even more limitations and problems than you
| did while "green".
|
| Even people like myself who use openscad for as much as
| they can because they love being able to describe an open
| source model in about 1k of human readable, editable,
| parametric, gittable text instead of several megs of xml
| or binary, even we will say that this is all simply true.
| the more experienced you are, the more you know how true
| it is.
|
| I will still call myself green because I will simply call
| myself green about almost everything as simple facet of
| my character, regardless how many years or how much work
| I've done with something.
|
| Should such people not advise others on what they have
| learned? Do self-proclaimed experts largely give better
| advice than experts, or even mere practitioners, who
| don't like to self-aggrandize?
|
| Regardless, in this case their statements were all sound.
| As someone who has spent a lot of time figuring out
| methods to get things done that a new user would not know
| yet, I have no notes on this greenorns opinions.
| throwgfgfd25 wrote:
| It is a reasonable point. I am a greenhorn in the sense
| that I've been learning CAD for my own somewhat complex,
| multi-part projects for three years. And I am not an
| industrial designer. Or a mathematician! (I am
| opinionated.)
|
| The point for me is that, as a relative novice, I have
| got past some really important hurdles recently. So I can
| explain the benefits of getting past them to people who
| maybe don't know they are there.
|
| I started off using OpenSCAD because it convinced me I'd
| be able to make _something_ , quite quickly. My first two
| or three things were OpenSCAD things. It introduces you
| to stuff that isn't immediately obvious: the more complex
| booleans like difference of simple primitives, extrudes,
| lofts, sweeps, revolves. Great! I made things, I printed
| them, it was transformative.
|
| (There's also quite a good thread library -- Adrian
| Schlatter's threadlib -- that I do want to say is very
| helpful and I learned a lot from.)
|
| But it will likely hold back your development as a CAD
| user for even modestly complex things. Because you will
| never get access to the fundamentals of your objects --
| the faces, vertexes and edges. Putting aside BOSL and the
| like, it leaves you stuck with a lot of increasingly
| complex maths, when if you could use the generated
| geometry you would not have to be. You would have much
| simpler operations relative to faces and edges.
|
| This is why I said it would be worth spending at least
| _some_ time with these tools. So you know what is out
| there.
| guso78 wrote:
| This is not true anymore with PythonSCAD. There is a
| mesh() function which can yield the points and triangles
| from any Object. The User is free to modify these points
| and faces and finally create a new solid from it
| "polyhedron" You could use this to skew your model in a
| fancy way by altering the point coordinates but it might
| be more difficult to alter on the triangles.
| throwgfgfd25 wrote:
| By "faces" I don't mean triangles. I mean the true
| geometry of the object.
|
| Say for example a single six-sided die: six faces, twelve
| edges.
|
| But this would be twelve mesh triangles, right? None of
| which individually represent a face -- and six of the
| mesh edges are not edges in the true geometry.
|
| A _rounded_ six-sided die might have 26 faces (including
| the curved edges, rounded corners). 48 edges between
| them. etc. But the number of mesh triangles and edges
| will vary according to the precision.
|
| bRep kernels can give you the geometry information, not
| just the mesh information.
|
| https://en.wikipedia.org/wiki/Boundary_representation
| WillAdams wrote:
| The amazing thing to me is that PythonSCAD is useful just for
| allowing access to variables and being able to write out
| files --- and it allows encapsulating those capabilities in
| "normal" OpenSCAD so that it is then possible to use them in
| a supporting tool such as:
|
| https://github.com/derkork/openscad-graph-editor
|
| see:
|
| https://raw.githubusercontent.com/WillAdams/gcodepreview/mai.
| ..
|
| and the matching:
|
| https://raw.githubusercontent.com/WillAdams/gcodepreview/mai.
| ..
| RobotToaster wrote:
| There's also ImplicitCAD, which can use an OpenSCAD like
| language or Haskell https://github.com/Haskell-
| Things/ImplicitCAD
| philsnow wrote:
| > OpenSCAD is a one-way, declarative CSG environment that
| essentially only outputs mesh formats
|
| This is why such a basic-seeming thing as "how do i get the
| bounding box for this CSG frankenobject I've created?" comes up
| again and again on stackoverflow etc. it's apparently not
| possible without some hacks.
|
| I'll take a look at the alternatives you mentioned, thanks.
| criddell wrote:
| I'd recommend taking a look at SolidWorks. For hobbyist use,
| it's $50 / year or $15 for a month. You will save yourself so
| much time and headaches and develop a skill that could be
| useful for your resume.
| WillAdams wrote:
| If you're a U.S. (or Canadian) Veteran it's $20/year.
|
| BUT
|
| for these reduced price options, it's the educational
| version, and the files are watermarked, and the license
| precludes commercial use.
|
| That said, if your goal is to learn a CAD program and get a
| job --- in an industry/region which uses Solidworks_ (for
| some reason, CAD usage seems to be specific to either
| certain industries or regions, though SW is almost
| certainly the most widespread), that is definitely the way
| to go, along with a Community College course/degree and/or
| a training certificate:
|
| https://www.solidworks.com/solidworks-certification-program
| Filligree wrote:
| Or OnShape, which isn't quite as capable, but is free and
| probably easier to learn.
| avhon1 wrote:
| Siemens Solid Edge is also available in a free community
| edition. https://resources.sw.siemens.com/en-US/download-
| solid-edge-c...
| RobotToaster wrote:
| OpenSCAD is often said to be for programmers, but in some
| ways it's more for mathematicians. If you know the
| formula/code for the object, you can calculate the bounding
| box, but that isn't a way most programmers are used to
| thinking.
| junon wrote:
| Coming from freecad as my only frame of reference, even though
| I understand the concepts of build123d, I found it _wildly_
| difficult to express anything useful in it.
|
| Not saying it's not possible - I've seen what it can do - but
| even with my software background it was hard for me to really
| work with something that isn't based on constraints.
| throwgfgfd25 wrote:
| I ultimately went the other way, and got to FreeCAD from
| OpenSCAD via CadQuery; it was CadQuery that helped me
| understand important concepts.
|
| CadQuery may appeal to you? It does have (some) early support
| for constraints in 2D and 3D I believe.
|
| (CadQuery and Build123D ultimately share both OCP
| underpinnings and viewer tooling.)
| microtherion wrote:
| The alternatives you suggest look interesting and worth
| checking out. I certainly have my annoyances with OpenSCAD, but
| one reason I keep coming back to it is that many of my models
| have user adjustable parameters, and as far as I know, OpenSCAD
| is the only tool supported by the thingiverse customizer.
|
| Personally, I rather like the constraint based approach in
| FreeCAD and miss that a lot in OpenSCAD.
| throwgfgfd25 wrote:
| > and as far as I know, OpenSCAD is the only tool supported
| by the thingiverse customizer
|
| I am sure you are right that this is still the case. This is
| a big plus for OpenSCAD.
|
| One of the alternatives I mention takes customisation to a
| different level that makes me hopeful.
|
| Replicad can be used as a library in a web app:
|
| https://replicad.xyz/docs/use-as-a-library
|
| And they have a demo here (a React app):
|
| https://sample-app.replicad.xyz
| jdevy wrote:
| To add, there's a new CAD kernal that is in slow development
| called truck [1]. Is is written in Rust and you script/make
| models in Rust. It doesn't have any geometric constraints
| though.
|
| There was a very short attempt at starting to make a GUI for
| truck [2] but development has seemed to have halted. There was
| discussion and hype about this here a couple months ago [3].
|
| [1]: https://github.com/ricosjp/truck
|
| [2]: https://github.com/CADmium-Co/CADmium
|
| [3]: https://news.ycombinator.com/item?id=40428827
| throwgfgfd25 wrote:
| Ahh! That was the name, thanks. I was trying to remember it
| to find the blog post for [3] again. It is uncommonly well-
| written.
| IshKebab wrote:
| Ah these look so much nicer, thanks! OpenSCAD's willful
| disregard for the entire CAD industry's well established
| parametric modelling paradigm always annoyed me.
| WillAdams wrote:
| If you would like to point out a library which allows one to
| use the "CAD industry's well established modeling paradigm"
| in OpenSCAD, I would be glad to try it out.
|
| If that doesn't exist, why not?
| dvh wrote:
| As I suspected, none of the 3 tools you mentioned are in Ubuntu
| repository.
| throwgfgfd25 wrote:
| One of them is literally a browser-based client-side project;
| would you expect it to be?
|
| https://replicad.xyz/
|
| (N.B. the Replicad studio code editor on that site seems to
| be broken today, which is a bummer -- it wasn't when I last
| checked)
|
| CadQuery might not be in Ubuntu repositories on its own (same
| with Build123D -- these are python libraries really) but have
| you tried looking for cq-editor? (I think that's in Homebrew
| as well.)
|
| https://snapcraft.io/install/cadquery-editor/ubuntu
|
| To be fair I'd probably install the VSCode support for
| Build123D and CadQuery instead, because 1) this is code-CAD
| and you really manage it as such, and 2) I'm not that fond of
| the cq-editor environment.
|
| https://marketplace.visualstudio.com/items?itemName=bernhard.
| ..
|
| https://github.com/bernhard-42/vscode-ocp-cad-viewer
|
| This extension can install Build123D or CadQuery for you if
| you have a python setup for VSCode.
| hyperbrainer wrote:
| Fornjot[0][1] is also really impressive as a CAD kernel. It is
| written in Rust, and is still a WIP, but I think is turning out
| nicely.
|
| [0]https://www.fornjot.app/
| [1]https://github.com/hannobraun/fornjot
| mtndew4brkfst wrote:
| I was extremely excited about Fornjot for both personal and
| professional reasons, but the author has shared important
| updates that would deter me from using it outside of hobbyist
| contexts:
|
| May 2023 https://www.fornjot.app/blog/a-new-direction/
|
| _I don 't know how things will shake out long-term, but for
| now, I'm going to reduce my effort to one day per week..._
|
| _As of now, the goal of Fornjot is no longer to build a CAD
| application. From now on, Fornjot is a CAD kernel..._
|
| Last week: https://www.fornjot.app/blog/changes-to-the-
| development-proc...
|
| _There will be no more releases for the time being._
|
| _I will no longer submit pull requests for my own work._
| hereonout2 wrote:
| On the contrary if you're a coder doing anything non-
| substantial and only rarely need to do some basic 3d modelling
| I would say definitely look to openscad!
|
| I make models for my 3d printer just a few times a year. I find
| it much easier to get back into openscad than remember my way
| around a gui or wrestle with more advanced tools.
|
| There's nothing I've not managed to make with openscad yet,
| though the things I have made are embarrassingly simple (yet
| highly functional).
| throwgfgfd25 wrote:
| > There's nothing I've not managed to make with openscad yet,
| though the things I have made are embarrassingly simple (yet
| highly functional).
|
| It is workable if you have an extremely solid grasp of
| mathematics, and you don't mind objects that ultimately
| retain the feel of the combination of a few CSG primitives.
|
| But I make 3D-printed things that for a variety of reasons
| are little more than rings, plates, discs, and helixes, and
| I've already very clearly run into situations where the
| face/vertex/wire model of a proper CAD package is more or
| less the only way to keep control over a design.
| Brian_K_White wrote:
| You CAN get things done, but there is no getting around the
| fundamental problems expressed here.
|
| All my models are about 50% variable declarations and 50%
| inscrutable equations to express the relationships between
| the values. Sometimes huge ternary stacks because the
| language doesn't allow variable changes, so you can't have
| simple if/else/case to have a simple concept like a default
| value that maybe gets replaced based on some other condition.
|
| And the lack of things like fillets is simply impossibl. The
| things you have to do to attain the end result of a fillet
| without an actual fillet function is ridiculous, and even
| after doing the ridiculous things, you still have a limited
| crap result where no matter what you simply can't actually
| have a fillet wherever you want, but you can compromise and
| get at least the ones you really need if you're willing to
| live with a simple design.
|
| That is not a good tool. A good tool gives you the means to
| express whatever you need to express. Openscad gives you the
| power to express cubes and spheres and hulls and
| intersections of those, and even that only in a bafflingly
| limited way thanks to the language limitations.
|
| It's not a great tool. It's a great proof of concept for a
| great idea for a great tool.
| prabhu-yu wrote:
| Thank you for explaining why the CadQuery and its successor
| Build123D are better. Thank you for explaining mesh Vs BREP.
| jcgrillo wrote:
| The main complaint I have with CadQuery et. al. is the API
| verbs are all coming from the point of view of describing bRep
| shapes instead of thinking about the design from the standpoint
| of "how would I make this?".
|
| I think there's an opportunity for a code-first CAD API to
| incorporate GD&T and manufacturability information directly as
| part of the modeling process. For example, if I'm making a
| shaft I want to describe that operation as it will actually be
| performed in the shop e.g.: (1) select round
| stock of nominal dimension X (2) cut to rough length
| (3) chuck in 3-jaw chuck and drill center (4) flip around
| in 3-jaw chuck and drill the other center (5) mount
| between centers (6) turn to rough outer dimension
| (8) turn down to add the various bosses, threads, chamfers,
| other details, etc...
|
| With this kind of a process I get all kinds of GD&T information
| for free--for example, the precision of my 3-jaw chuck
| determines how much larger my nominal dimension X needs to be
| than my target rough outer dimension to be able to reliably
| achieve it.
|
| So I think these APIs are coming at the problem from the wrong
| point of view--they're all about driving the CAD kernel and
| telling it how to draw abstract shapes in a computer. Instead
| what I want is to tell the computer how I intend to make the
| thing and get an estimate of what the result will look like.
| throwgfgfd25 wrote:
| > So I think these APIs are coming at the problem from the
| wrong point of view--they're all about driving the CAD kernel
| and telling it how to draw abstract shapes in a computer.
| Instead what I want is to tell the computer how I intend to
| make the thing and get an estimate of what the result will
| look like.
|
| I have certainly learned over time that when you're looking
| at an object that exists in the real world, one way to start
| to figure out how to model it is to figure out how it -- or
| its injection-mould positive -- was physically made. Can it
| be cut with a mill? Was it glued together in parts?
|
| It absolutely is fun to try to work out how to come up with a
| shape subtractively from some giant primitive as if it was a
| block of steel. I often find myself visualising in terms of a
| scroll saw. I watched a couple of great videos about three-
| dimensional scroll-saw work and it weirdly affected my
| understanding of CAD!
| WillAdams wrote:
| Isn't that basically coding in G-code?
|
| The problem of course is that that limits one to straight
| lines and arc moves.
|
| Are there any really good G-code previewers for lathe work?
|
| For that matter, what is the best 3D G-code previewer which
| will allow one to see the surface of the cut part in 3D? I'm
| about to break down and buy tkcnc --- is there something
| better?
| jcgrillo wrote:
| > Isn't that basically coding in G-code?
|
| No, I think G-code is too prescriptive and low level for
| the modelling task. What I'd prefer is some way to specify
| operations in a fluent, object-oriented API e.g.:
| round_bar = RoundBar( alloy=1018,
| diameter=Dimension(1*Inch, error=0.010*Inch),
| length=Dimension(12*Inches, error=0.25*Inch) )
| 3_jaw = 3JawChuck(tolerance=0.005) between_centers =
| BetweenCenters() center_drill = CenterDrill(size=4)
| shaft = round_bar .chuck(configuration=3_jaw)
| .drill(bit=center_drill, depth=Dimension(0.250*Inch,
| error=0.02*Inch)) .unchuck()
| .rotate(axis=Y, degrees=180)
| .chuck(configuration=3_jaw)
| .drill(bit=center_drill, depth=Dimension(0.250*Inch,
| error=0.02*Inch)) .unchuck()
| .chuck(configuration=between_centers) .face()
| .turn( target_diameter=Dimension(0.750*Inch,
| error=0.001*Inch), length=Dimension(11.5*Inch,
| error=0.05*Inch, anchor=round_bar.tailstock_face()),
| finish=Rough ) .external_threads(
| class=ThreeA, nominal_size=FiveEighths_18,
| length=Dimension(1.25*Inch, error=0.020*Inch,
| anchor=round_bar.tailstock_face()),
| reverse=False,
| relief=DefaultRelief(FiveEighths_18) ) ...
| dbcurtis wrote:
| I can see where you are coming from, and I've thought
| about similar ideas. But ultimately, I think this fails
| for separation-of-concern reasons. Describing the part is
| different from describing how to make the part. The same
| part might be sent to 3D printing for a non-functional
| fit prototype, sent to a prototyping machine shop to make
| 5 or so units on basic CNC machines that require 3 set-
| ups to complete it, and after a few design iterations
| scaled to production on a multi-spindle Swiss-style lathe
| that drops finished parts into the basket all night long,
| lights-out. Those are wildly different programs and work
| flows.
|
| Something like you propose might be an interesting thing
| to explore for creating CAM posts. The actual Gcode that
| your API would emit is going to vary quite a lot even
| within super-similar machines -- a 3+1 axis job targeting
| a machine with a FANUC controller is going to be pretty
| different from the same job targeting a machine with a
| Heidenhain controller.
| jcgrillo wrote:
| > Describing the part is different from describing how to
| make the part. The same part might be sent to 3D printing
| for a non-functional fit prototype, sent to a prototyping
| machine shop to make 5 or so units on basic CNC machines
| that require 3 set-ups to complete it, and after a few
| design iterations scaled to production on a multi-spindle
| Swiss-style lathe that drops finished parts into the
| basket all night long, lights-out.
|
| I think you might have a point here, but I'm going to
| push back on the idea that these three parts are the
| "same part" because they'll all have wildly different
| mechanical properties, dimensions, and dimensional
| consistency. They are not all necessarily interchangeable
| (although they could be, we'd have to integration-test
| them in an assembly to find out!).
|
| My point is the "abstract part" isn't really a thing, and
| the real life characteristics of each concrete part are
| inextricable from the way it's made and what it's made
| of. I wonder if it would be helpful to force me, the
| designer, to think about it that way from the start?
|
| 3D printing is an odd case that tbh I hadn't really
| thought of. The things I make are all subtractively
| manufactured (except for welds which are addictive only
| in a degenerate sense), and I have no experience with 3D
| printing.
| nanolith wrote:
| I've never been comfortable drawing or drafting with GUIs. This
| is true for "drawing" graphics, laying out boards, or building 3D
| models for printing or CNC. OpenSCAD has been invaluable to me.
|
| Usually, I'll hand draw what I need, then work out the equations,
| then build the models. No need to figure out what certain icons
| mean or to learn accelerator commands. I've built some fairly
| intricate designs with OpenSCAD. CSG is quite intuitive.
| seveibar wrote:
| You might like the PCB constraint system we're building at
| tscircuit for laying out boards, the biggest issue with most
| systems imo is that you can't cleanly specify constraints. In
| tscircuit you can just use a <constraint /> component to lay
| out PCB elements
|
| https://github.com/tscircuit/cli/blob/main/example-project/s...
| nanolith wrote:
| That is really cool. I've been threatening to do something
| like this for years. Thanks for this!
| WillAdams wrote:
| One notable new development is the Python-enabled OpenPythonSCAD:
|
| https://pythonscad.org/
|
| which finally made it possible for me to finally have the ability
| to write out G-code (allowing one to use OpenSCAD as a CAM tool)
| and DXFs (allowing one to have fully control and to create not-
| closed/unconnected geometry, and to write out arcs rather than
| only polylines):
|
| https://github.com/WillAdams/gcodepreview
|
| For the current state see the latest preview of the current unit
| test:
|
| https://forum.makerforums.info/uploads/default/original/3X/1...
| wiw2 wrote:
| Thank you! I have seen your posts in the PythonSCAD subreddit.
| They have been very helpful!
| WillAdams wrote:
| My pleasure!
|
| I just hope we can get more folks using PythonOpenSCAD (or
| ideally, get it merged into the main branch).
|
| Just finished up unit tests for the current state of
| gcodepreview:
|
| https://raw.githubusercontent.com/WillAdams/gcodepreview/mai.
| ..
|
| as part of my reading
| https://www.goodreads.com/book/show/39996759-a-philosophy-
| of... and applying what I learn from each chapter to it --- a
| bit more than a third of the way through, and it has already
| helped immeasurably.
| seveibar wrote:
| For people interested in coding CAD in React, my team built a
| react fiber layer over jscad and are investing heavily into
| building an MIT-licensed 3d electronics library:
| https://github.com/tscircuit/jscad-fiber
|
| I don't think you need a custom language to declare CAD,
| typescript/python have heavily invested in type systems so I hope
| the world moves more toward using existing languages.
|
| The biggest limitation with code-CAD today is the lack of a
| constraint system (e.g. a clean way to say "these edges are 3mm
| apart") without X/Y coordinates everywhere. We're slowly building
| higher-level components that allow you to specify constraints so
| that you can write CAD in a way that more closely mimics the
| design intent, rather than a bunch of calculations.
|
| OpenSCAD started it all so we're very grateful, but it's also
| time for some innovation to bring the language closer to design
| intent
| leptons wrote:
| I've been using jscad for years. Love it, still using it
| actively almost every day. I also use React/JSX every day for
| work and personal projects. That said, I'm not sure I like the
| mash-up of jscad-fiber after taking a look at the github page.
| Maybe it just doesn't fit my use-case of building several
| complex parts that have to interface with each other. I'm sure
| there is a use case for it though. It doesn't seem like jscad-
| fiber supports things like measureBoundingBox or any lower
| level stuff. There's a lot of depth to jscad, it's an amazing
| project.
| spacecadet wrote:
| A few years ago I worked with some fellow artist to design a
| rubiks cube around a large steel ball bearing using OpenSCAD. We
| machined the pieces out of aluminum (using a sweet 5-axis mill)
| and glued magnets into them. https://vimeo.com/322284709
| joewalnes wrote:
| Love OpenSCAD! Here's a little library for generating "toy brick"
| compatible models for a 3D printer.
|
| Also written to be a follow along example to help understand how
| to think about writing OpenSCAD programs.
|
| https://github.com/joewalnes/toybrick
| jlarocco wrote:
| As cool as OpenSCAD is, it's just one way of writing code to work
| with CAD.
|
| The commercial CAD systems all have APIs to do the same kind of
| stuff, but they also have sophisticated UIs on top to make them
| easier to use visually. NX even lets the user record UI
| interactions as a function to make creating initial code faster.
|
| In fact, there's a whole niche of CAD programming.
| syntaxing wrote:
| I made macros for Solidworks and Catia v5 during my Mechanical
| Engineering days and Visual Basic for applications + most
| Windows program is so powerful. But at the same time, VBA can
| be such a painful language because some language behavior is
| not typical.
| WillAdams wrote:
| I bought into Plasticity in the hope that it would gain such
| facilities, but the dev said that that sort of thing was being
| pushed off to v3.
|
| Tried Dune3D and was moderately successful, but couldn't see
| where in the U.I. such numeric/programmatic access would be
| afforded and it doesn't seem to be on the roadmap there either.
|
| I suppose I should break down and buy Rhino 3D and use
| Grasshopper, or Moment of Inspiration and use its Node Editor,
| but for now, I've been using:
|
| https://github.com/derkork/openscad-graph-editor
| whiterknight wrote:
| > recording ui interactions, etc
|
| This is a sign that the software has grown to become its own
| operating system. They also have to add their own version
| control... remote editing, etc.
|
| Unix style versions of tools are interesting in their own right
| (photoshop vs imagemagick).
| omeid2 wrote:
| ImplicitCad is a competing project which I think is a lot more
| robust.
|
| https://news.ycombinator.com/item?id=41545100
| at_a_remove wrote:
| I haven't touched it in years.
|
| I didn't have problems, uh, _thinking in parametrics_ , but lordy
| was the rendering slow. I might try it again.
| WillAdams wrote:
| The new Manifold library is blindingly fast for most things ---
| even things which bring the previous renderer to its knees
| complete in a reasonable timeframe for Preview(ing), though
| Render(ing) can require a measurably long wait.
| exe34 wrote:
| i always thought I'd love openscad, being from a more coding
| background, but it turns out I'm not too fond of it. I eventually
| used freecad after watching some YouTube videos when I needed to
| make something.
| juancroldan wrote:
| OpenSCAD is amazing for thinking of 3d design as a coding
| workflow. Here's my minimal intro to it:
| https://jcarlosroldan.com/post/151/parametric-design-with-op...
| dschroer wrote:
| For those who are interested. I have been working on a similar
| CAD Modeler. I think of it as a spiritual successor to OpenSCAD.
|
| It has support for bidirectional modeling (ex: get the height and
| width of an object and use it later) and multi part workflows to
| design more complex works.
|
| https://www.dslcad.com/
| Qwertious wrote:
| This is really cool, does it fix OpenSCAD's need to spam
| epsilons everywhere to avoid Z-fighting?
| dschroer wrote:
| TBH I am not sure but I suspect the answer is yes. I use
| OpenCascade as the base CAD kernel and it handles things like
| Z-fighting a lot better. I built DSLCAD after completing
| porting OpenSCAD to wasm because I wanted a better
| programmatic CAD platform. It's development is really "as I
| need it" from then on.
| Rygian wrote:
| Discovering OpenSCAD via its official tutorial:
|
| > On the example above, the second cube sits exactly on top of
| the first cube. This is something that should be avoided as it's
| not clear to OpenSCAD whether the two cubes form one object
| together. This issue can be easily solved by always maintaining a
| small overlap of about 0.001 - 0.002 between the corresponding
| objects.
|
| This goes against the whole point of doing parametric design and
| should be logged as a bug. If the CAD software is unsure whether
| object spanning [0 to 1] and object spanning [1 to 2] are
| physically fused, that should be a bug. Mathematically they are
| fused.
| mkoubaa wrote:
| Wrong. Objects can overlap in computational geometry.
| Rygian wrote:
| Perhaps you misunderstand my comment.
|
| I am referring to the specific case of the tutorial, where
| second box is exactly on top of first box. By design, there
| is no overlap and there is no gap, just a continuum of solid.
|
| However, such continuum of solid can't be declared with exact
| coordinates in OpenSCAD, and instead one has to add
| intentional error to coordinates so that the solids overlap
| and the continuity is guaranteed.
| throwgfgfd25 wrote:
| It's really a floating-point rounding issue.
|
| It is a bug (well, a limitation), but AFAIR from my own
| designs, it generally only affects the low-precision, "fast"
| preview; in the final calculation it won't be an issue.
|
| Nevertheless it is one of the things that is annoying as hell
| with the OpenSCAD previewer; constantly having to over-join to
| avoid it just makes the code more painful.
|
| Coplanarity is generally a challenge in fast CAD previews.
| smartmic wrote:
| What should definitely be mentioned in this series is BRL-CAD, an
| Oldie but Goldie in solid modeling: https://brlcad.org/
| mglz wrote:
| OpenSCAD is amazing, especially for highly detailed geometry.
| Fusion360 was crashing when I modelled a honeycomb structure of
| ~2000 cells, while OpenSCAD easily handeled a similar model.
| rcarmo wrote:
| Nice to see this here. If anyone's interested, I collected a
| bunch of resources for it over the years:
| https://taoofmac.com/space/apps/openscad
| WillAdams wrote:
| Nice! Great to see (Open)PythonSCAD listed! (I know this sort
| of thing is hard to keep up with --- I was trying for a long
| while on the old Shapeoko wiki (see link elsethread)).
|
| (below has been edited to reflect my reading the entire page)
|
| A tool which I didn't find and thought wasn't included is:
|
| https://github.com/derkork/openscad-graph-editor
|
| (which I was expecting would fall under "GUI", but is instead
| near the end under "Wrappers")
| bvrmn wrote:
| I don't say it's impossible but I believe it's quite near to
| impossible for most of OpenSCAD users to model this relatively
| simple drawing[1]. It's a breeze in CAD with constraint solver.
| Also it's viable in code-first systems with access to shape
| coordinates (build123d) using only construction geometry and
| projections. OpenSCAD requires hard trigonometry and math skills
| to pull it out.
|
| OpenSCAD has amazing community though and part libraries
| celebrates human ingenuity despite tool restrictions.
|
| [1]:
| https://build123d.readthedocs.io/en/latest/_images/ttt-23-t-...
| timonoko wrote:
| 13 minutes. And I am very much at the lower end of the CAD
| skill scale $fn=100; difference(){
| union(){ cylinder(d=55,h=60);
| translate([125,0,0]) cylinder(d=30,h=32);
| linear_extrude(11)
| polygon([[0,25],[125,15],[125,-15],[0,-25]]);
| translate([0,5.5,0]) rotate([90,0,0])
| linear_extrude(11)
| polygon([[0,50],[125,40],[125,0],[0,0]]); }
| cylinder(d=35,h=70); translate([125,0,0])
| cylinder(d=20,h=40); translate([110,8,98])
| rotate([90,0,0]) cylinder(r=66,h=20); }
| throwgfgfd25 wrote:
| This is good -- but they aren't quite the same? [0]
|
| And the way they are not the same is (as the GP is saying)
| rather telling about the challenge of getting really precise
| things working in OpenSCAD without a pretty solid grasp of
| maths.
|
| _[0] they might be functionally equivalent in application,
| which is not nothing, of course_
| WillAdams wrote:
| Working on this in OpenSCAD (well, BlockSCAD) now:
|
| https://www.blockscad3d.com/community/projects/1814083
|
| Trying to work out the triangles/chords to get the radiuses
| positioned --- a workable approach should be to:
|
| - use a triangle to determine the position of the 8 degree
| rotation and position elements which define the top of the
| web offset by that distance
|
| - use a chord/triangle to determine the position of the
| circle for the smaller radius
|
| - chain another calculation from that to determine the
| position of the circle for the larger radius
|
| - chain one final calculation to get the flat element which
| makes the end of the web co-planar with the flat top of the
| small cylinder
|
| I need to go work in the yard for a bit, but I'll keep
| thinking this through and hopefully will finish it up this
| evening.
| WillAdams wrote:
| Couldn't let it go, but got everything except for the
| positioning of the small radius and maybe the height of
| the web slope is off (had to increase 2 to 2.05 to keep a
| gap from appearing).
|
| I think if one laid out the radius stuff flat and then
| rotated it things would be easier to visualize.
| LiamPowell wrote:
| This does not match the drawing. In addition it only took 4
| minutes to do it correctly in a normal CAD package [1].
| OpenSCAD is cool, but it's not at all a replacement for
| traditional 3D CAD and I wish people would try to sell it on
| its strengths instead of selling it as a replacement for
| traditional CAD.
|
| [1]: https://youtu.be/aL5KLXNV-FI
| ddingus wrote:
| OpenSCAD is really neat! It comes at the model
| representation process in a very different way.
|
| In it's current form, it will never replace CAD as we know
| it today.
|
| People have a hard enough time breaking an object they can
| see into features they can draw and combine, or modify as
| is done today. Add in the need to work with 2D drawings,
| sketches, photos, and it gets a bit harder for them still.
|
| I have been training people to use CAD since the days of
| serious transition away from drafting boards. Very few of
| them would be able to author the descriptive text examples
| up thread.
|
| And to be fair, parametric CAD, with or without history is
| powerful, but hard enough for plenty of people to really
| struggle, but that difficulty seems a couple orders below
| what we are discussing here.
|
| Frankly, a better developed OpenSCAD could become a very
| powerful tool to be used in tandem with traditional CAD. It
| could even make use of the mature geometry kernels that way
| too. Those make more complex object and feature create
| actually work well because they have solutions for the
| almost innumerable corner and edge cases which always come
| up.
|
| It is possible to create things largely OpenSCAD style in
| some CAD programs too. NX has a variety of programming
| interfaces, one being essentially Visual Basic with CAD
| appropriate functions.[2] (NX SNAP, as I recall)
|
| You get entity create, query, rename, transform (full
| transform, scale, translate, rotate), modify like adding a
| fillet to an edge, boolean cut, join, intersect, split,
| add, partition... and a whole lot more! (It may not support
| partition, but it is supposed to for SDRC compatability,
| and that isn't the point anyway, so... yeah)
|
| And there is the general purpose programming environment.
| Useful in all the obvious ways we here know well.
|
| The main point is one can take an entirely analytical
| approach to model create, while also having the robust 3D
| and on NX 3D stereo[1] even, GUI to evaluate, debug, and
| all the other good CAD stuff!
|
| To me, that is the OpenSCAD strength. The team can take a
| peek at the tools I just mentioned, add features and Open
| Cascade will do way more geometry cases than people think,
| and now you have model and entity create that can really
| work for some tough use cases:
|
| --catalog parts with conditional features
|
| --simulation and or analytically driven model shapes, many
| of which could be used as base features to be finished into
| manufacturable things
|
| --coupled with an LLM trained on geometry, could result in
| Star Trek like plain language model create
|
| There is more.
|
| But the actual engineering, product design and
| manufacturing use cases are not going this way at all. It
| is too obtuse. People need to see, and I would argue
| benefit from haptics for interrogation, assembly and more.
|
| Don't get me wrong here. All the open CAD tools are
| awesome. Open CAD is important and we just don't have much
| yet, and more is better. We do not have much yet because
| CAD is really hard, and the robust, mature geometry kernels
| out there have gazillions of man dev hours in them. Open
| Cascade is actually quite impressive to be for how well it
| really does work Given the tiny fraction of dev hours it
| has by comparison.
|
| And what this means is CAD inertia is a problem likely an
| order harder than say the replace C code inertial some feel
| is worth doing.
|
| Best bang for the dev hour investment us to augment and
| compliment traditional CAD, IMHO of course!
|
| [1] All you need is a stereo capable GPU and display. I
| used my laptop with nVidia Quadro series and a fast Samsung
| 3D plasma TV for huge stereo modeling. Frankly, it was
| crazy good for evaluating technical surfaces and complex,
| think airplane internals, assembly was down right fun!
| Recommended and I am unsure why this is not more widely
| done.
|
| [2] I used SNAP to convert bitmaps into voxel objects,
| where each voxel was a cube, and from those, combine them
| into larger voxel objects that were the basis for tooling
| models to make the desired shape. The retro pixel look you
| are picturing was desired and I wish I could show the
| finished project. Neat!
|
| Have also used it to make plenum and manifolds driven by
| simulation output or area / flow equations.
|
| Both cases would be torture using the traditional CAD model
| create UX. OpenSCAD is aligned well here if you ask me.
| bvrmn wrote:
| I appreciate your attempt and time spent. It's an amazing
| showcase how simple things could be easily expressed in
| OpenSCAD. But the part in question sadly is not that simple.
| All tangents are wrong.
| WillAdams wrote:
| Getting the tangents right is a hull() operation.
|
| The balance is a bit more involved --- I'll see if I can
| find time to model this in a couple of ways....
| timonoko wrote:
| Erh? Are you complaining about some minor adjustment, so
| that lines are not meeting the curves smoothly? I did not
| even understand what TANGENT means, cause I know much
| nothing about CAD.
| throwgfgfd25 wrote:
| I have been exactly where you are right now :-)
|
| You are right on a precipice between what you know, and
| falling into a deep, deep trough of CAD knowledge!
|
| https://en.wikipedia.org/wiki/Tangent_lines_to_circles
|
| You absolutely don't need to get into the maths to get
| value from this idea. The maths terrifies me. Just know
| this core concept: a tangent line meets a circle only
| once and is at right angles to the radius when it does.
|
| Here's why this is valuable in CAD environments that
| properly support it: once you know how a tangent line
| works, and see how a constraint-based modeller represents
| them, it is possible to understand how to model a whole
| set of smoothly rounded features that the CAD package can
| automatically adjust to changes made to core
| measurements, retaining this perfect "join". Rounded
| slots, curved rounded slots, fillets, all sorts of
| interesting motion components, etc.
| bvrmn wrote:
| Yes. Lines should touch circles in a smooth way. There
| could be many arguments why it's kinda important. Like
| fit to other parts in a final assembly or production
| complexity. But even for DIY purposes this minor
| adjustments would suck a lot of blood in prototype phase,
| it's a way more simpler to constraint it to be smooth
| (tangent) and forget about all tweaks needed after
| dimension changes.
| LiamPowell wrote:
| I've overlaid your part on the correct part (as best I
| can when working with the mesh files that come out of
| OpenSCAD). Your part is drawn in red:
| https://i.imgur.com/12y5q1t.png
| bvrmn wrote:
| To be fair this is my attempt in build123d.
| r1, r2 = 55/2, 30/2 cd = 125 # construct
| rib profile, start with slope and oversized arc #
| reposition line to be constrained on arc center height and Y
| axis l = build_line(O, op_line(-8, 30, name='l1'),
| op_arc(30, -90, name='a1')) l.move(Vector(77-r1*2, 0)
| - l.a1.center_point) ip, = intersections(l.l1,
| Axis.Y) l.move(Y(50 - ip.Y)) # Now we
| know first arc center and could project it on a second arc
| center # axis with known distance and get tangent
| point. Use point to trim oversized fist arc # and
| create second tangent arc. a2c =
| point_on_axis_with_dist(l.a1.center_point, Axis.X.offset((0,
| 66+32)), 66+30) ip, = intersections(l.a1,
| axis_from_points(l.a1.center_point, a2c))
| l.append(op_trim(ip), op_arc(to=(a2c.X, 32)), XA(cd-r1),
| YA(0), (l.s.X, 0)).close() # Convex hull of base
| cylinders would have correct tangents base_sk =
| make_hull((X(cd) * Circle(r2) + Circle(r1)).edges())
| # Contruct final part obj = extrude(X(r1) * RX(90) *
| l.face(), 11/2, both=True) + extrude(base_sk, 11) obj
| += Cylinder(r1, 60, align=A.d) obj += X(cd) *
| Cylinder(r2, 32, align=A.d) obj -= Cylinder(35/2, 60,
| align=A.d) obj -= X(cd) * Cylinder(20/2, 32,
| align=A.d)
|
| It took 15 minutes and I used my helpers to aid rib profile
| construction. With stock build123d it's quite a chore.
| wiw2 wrote:
| This was my impression with build123d and Cadquery.
|
| On paper they have a better abstraction than OpenScad. Yet,
| the code to express the same output is more bloated.
|
| I was never able to get over the yak shaving learning curve
| to be proficient. Openscad mental model is a lot simpler to
| sustain momentum to go build something.
|
| How did you get around to prefer Cadquery/build123d?
| bvrmn wrote:
| > Yet, the code to express the same output is more
| bloated.
|
| But it's trivially ready to be parameterized and reused.
| Model is easy to change, you could think about relations
| between features not absolute entities.
|
| It's my 3rd attempt to use code-CAD to be honest.
| OpenSCAD -> CadQuery -> Build123d. I have past experience
| with SolveSpace and OnShape. GUI CAD approach with
| drafting in 2D and making solids as late as possible
| works perfectly well and you could transfer spatial
| thinking as-is to model coding.
|
| I have somewhat frustrating experience with OpenSCAD and
| CadQuery. OpenSCAD is perfect for simple things but gap
| to complex parameterized models was to big for me.
| CadQuery looks great in examples, but I could not grasp
| how to use it for my tasks. State tracking is crazy hard.
|
| There are three major factors it clicked for me with
| build123d.
|
| First is explicit algebra mode. My little coder brain
| could not comprehend large object trees from OpenSCAD or
| hardcore chain dance of cadquery. But I know what an
| object and mutability are. Build123d is amazingly
| intuitive and has tight primitive set large enough for
| complex things and small enough to be memorized by heart.
| Also Build123d has nice docstrings and type hints. I
| mainly use IDE help instead of online docs.
|
| Second is a good interactive visualizer. I use yet-
| another-cad-viewer[1]. It allows to quickly debug issues
| and use my favorite editor. It's crucial to have visual
| representation and ability to know object bindings to
| variable name in source code. Killer features for me are
| on-hand access to per-object transparency setting and
| selection tool to measure distances between features. It
| really helps during learning.
|
| Third is I actually sat down and spent around 10h with
| TTT practice models[2] :))
|
| I believe I'm already effective with Build123d on the
| same level as with OnShape.
|
| There is a major weak thing with code-CADs though. It's
| edge selection for fillets. I think about custom filters
| to narrow edge location. But now it's largely a guess
| work with edge visualization on fail.
|
| [1]: https://github.com/yeicor-3d/yet-another-cad-viewer
| [2]: https://www.tootalltoby.com/practice/
| wiw2 wrote:
| Looking back at your build123d code, it looks like the
| biggest differentiator compare to OpenSCAD and CadQuery
| is the expressiveness to assign shapes to variables,
| right?
|
| I was able to check that box with PythonSCAD thus far, so
| that's "solved" for me.
|
| Otherwise, I see a lot of vector/coordinate manipulation
| that isn't too different from OpenSCAD/PythonSCAD.
|
| However, I can see there's some additional abstraction
| primitives with arc and tangents that looks nice. That
| doesn't quite exist in any OpenSCAD based or similar
| engine since there's no built-in way to get info out of
| the shapes in a reflection-like way.
|
| Maybe I will give Build123d another go and see if I can
| sustain some sort of momentum.
| cpitman wrote:
| The best thing about the challenges from 3d CAD
| Speedmodelling is that they needed a quick way to validate
| submissions, so they do it by validating the mass of the
| design. The density to use is included in the problem. The
| answer is on this page: https://build123d.readthedocs.io/en/l
| atest/tttt.html#t-24-cu...
| WillAdams wrote:
| Took a swing at this myself, please see:
|
| https://www.blockscad3d.com/community/projects/1814083
|
| which is mostly parametric --- only the placement of the
| rounding of the last radius is hard-coded/fudged.
| lucasoshiro wrote:
| Nice to see OpenSCAD getting relevance.
|
| Last January I offered a course on OpenSCAD in my university,
| perhaps the first one in Brazil or even in Portuguese. The
| lectures are available here (but it's in Portuguese, perhaps
| someday I'll translate it to English...):
| https://lucasoshiro.github.io/posts-en/2024-03-24-openscad/
| lucasoshiro wrote:
| OpenSCAD of course is not as powerful as other tools, but it has
| a lot of pros (depending on what you consider a pro):
|
| - Free, unlike other tools such as Fusion or SolidWorks - Open
| Source, unlike other tools such as Tinkercad or OnShape - 100%
| based on a programming language: compared to others is like
| comparing plain HTML with HTML + JS - Parameterizable (as a
| consequence of being based on a programming language), makes it a
| lot easier to adjust the model in a second iteration -
| Lightweight (it runs ok in my 12 year old desktop) - It can be
| used in CLI to generate STL files, makes it easier to automate
| the model generation
|
| But of course it has a lot of cons: - It isn't multithreaded, so,
| it doesn't matter if you have an 32-core CPU or a single core. It
| also doesn't matter if you have a GPU. So, there's no "best
| machine" for running it - You can't compute the size of a shape,
| unless you know a formula for it. It's specially bad if you are
| dealing with texts, as you can't predict their shapes unless
| you're using a monospace font - It has some bugs in visualization
| - Even though it's on active development (you can see that in
| their Git), its latest release was in 2021
| throwgfgfd25 wrote:
| > But of course it has a lot of cons: - It isn't multithreaded,
| so, it doesn't matter if you have an 32-core CPU or a single
| core. It also doesn't matter if you have a GPU.
|
| FWIW these don't have massive benefits for CAD _modelling_
| either. Most CAD _kernels_ , even commercial ones, are sort of
| stubbornly single-threaded.
|
| Sure, multi-threading can really help make the wider
| application feel more responsive, and a GPU is enormously
| useful for high-level photorealistic rendering as an end
| product. But it doesn't bring that much to bear on geometry
| solving, and the kind of 3D you need for CAD modelling and
| viewing is pretty old hat in OpenGL terms, I think?
| WillAdams wrote:
| At one point in time I was looking into:
|
| - writing out a text from OpenPythonSCAD
|
| - reading it into LaTeX to measure it[1]
|
| - re-setting the text using METAPOST embedded in LuaLaTeX so as
| to write out an SVG
|
| - reading the SVG back into OpenPythonSCAD
|
| Bailed when it looked as if the latter step would require using
| Inkscape to convert to paths (at that point it seemed it would
| just make more sense to do it all in Inkscape)
|
| 1 -
| https://graphicdesign.stackexchange.com/questions/31088/any-...
| msephton wrote:
| I'm a big fan of OpenSCAD. I first used it to model a Wii Wheel
| sort of thing that I could put an Apple TV remote in. But my main
| use of it was creating a few dozen cars for a video game. Really
| great fun to model things. If you know CSS and HTML you know
| enough to create a 3D model in next to no time.
| https://blog.gingerbeardman.com/tag/openscad/
| skhameneh wrote:
| I'm wondering why I appear to be in the minority questioning how
| this is news and why it was shared?
|
| I've been noticing a general increase in low effort link shares
| of, what I consider to be, well known projects. These shared
| links contain no news or anything that appears to be related to
| updates or recent development, just links to home pages of
| relatively popular projects.
| wrycoder wrote:
| At this point, there are 138 comments, which, as is often the
| case on HN, are much more informative than the link itself and
| show that the topic is hardly worn out. If it was, it wouldn't
| have made the front page.
| thelastparadise wrote:
| Anyone try plugging this into an LLM for text -> 3d model
| generation?
| WillAdams wrote:
| There is a blind user on /r/openscad on Reddit who has been
| trying to do that.
| scoofy wrote:
| I used this software over a decade ago. I loved it.
___________________________________________________________________
(page generated 2024-09-15 23:01 UTC)