
OpenJSCAD - lelf
https://openjscad.org/
======
lvh
Something I really want is the ability to write code to produce exact curves
exportable via STEP, so I can get them into Fusion 360, which is what most CNC
(e.g. the Shopbot PRS Alpha) prefers to consume. Imprecise polyhedra
approximations are fine if you're 3D printing, but subtractive methods like
CNC routers can do orders of magnitude smaller features. Bumping up the
precision is just kicking the can down the road, also, most CAM software will
just roll over and die if you give it shapes with massive polycounts, while
it'll trivially handle the BRep version of the underlying shape (which might
be a simple set of splines for example).

So far OpenCASCADE is the most promising library I've found. And it's been
around for a long while: I don't remember the last time I had to tell bindgen
about the "DECOSF1" macro!

And of course AutoCAD, but this is a hobby and I don't feel like spending
thousands :-)

~~~
TheSpiceIsLife
I have an issue with the third party CAM software we bought where it’s
stuffing up the G-code in a way the OEM software doesn’t.

I create writing in Inkscape and save as DXF, then open in DraftSight, scale
correctly, an other detail (outline, holes, etc).

Inkscape creates a DXF file with a whole lot of splines. The OEM CAM software
is ok with this. The new third party app is creating overly complex G-code
that causes our laser cutter to pause briefly at some of the end / beginning
of the splines, which results in huge heat input and the stainless steel parts
look terrible with small discolouration at the pauses.

I’m trying to find alternative methods of creating text, but I don’t know the
space very well.

Maybe I need a different CAD or vector graphics app that can create letters
with fewer objects?

AutoCAD has an explodetext command, but it creates completely useless outlines
that look a mess. DraftSight’s same commsnd results in text outlines that are
comprised of hundreds of small straight lines, also useless.

Any ideas?

~~~
nitrogen
Does the text retain its approximate shape if you use Inkscape's Simplify
command to reduce the number of control points? And then does that actually
affect the DXF output?

~~~
TheSpiceIsLife
So, I've been sitting at my work computer for, what?, 4 years with QCAD and
FreeCAD installed and have never thought to try either of these.

Going to give that a go today, just got to work at 05:40 so will let you know
how I go later.

~~~
kdmytro
FYI, 05:40 is every hour.

~~~
TheSpiceIsLife
Is this a reference to something? Not sure what you mean here.

~~~
l0b0
Without a time zone the time of day is meaningless.

------
jweather
OpenSCAD is one of my favorite tools for building 3D printable things. I never
could wrap my head around Blender or Solidworks, but OpenSCAD makes sense to
me. It will be very interesting to see what it's like to work with it in a
more familiar language.

Here's my most complex creation to date, a NASA spotlight/generator trailer to
light up my LEGO Saturn V:
[https://www.thingiverse.com/thing:2758119](https://www.thingiverse.com/thing:2758119)

~~~
app4soft
> _It will be very interesting to see what it 's like to work with it in a
> more familiar language [JavaScript?]._

OpenJSCAD provide nothing more than much higher CPU consumption & heavy
network traffic usage, comparing to 'native' OpenSCAD desktop app.

And for design complex 3D models modern web-browser and powerful PC is needed
to use it comfortably.

But for fans of web-hosted/cloud apps OpenJSCAD, off course, is the real
thing.

------
h2odragon
I love OpenSCAD for everything but the language, which is .. so bad that the
rant stays corked.

Perhaps the 3MF
[https://github.com/3MFConsortium](https://github.com/3MFConsortium) output
format could be useful too?

Edit: ah, i didn't see any dates; but I do see a "Google+ community" link ...
Perhaps there's more to be done to make this a viable alternative.

~~~
radarsat1
Curious, what do you dislike about it?

I used it for a project recently and found it to be really nice and
expressive. I love that it's got a functional feel but you can do loops and
compose modules in a really powerful way.

~~~
ptero
I used OpenScad a few years ago and was also initially horrified by the
language until someone pointed to me the "nightly build" versions which
supported the functional feel and compositions that I think you are
describing. Those made a world of difference for me. I wonder if the parent is
referring to a really old version (many Linux distributions still ship those).
Just a guess.

~~~
radarsat1
Ah that might explain it. I picked it up recently from scratch using the
nightly build (via snap) so I'm not aware of the history of the language.

~~~
ptero
The old version language was _bad_ to the extent that after playing with the
tool for a few hours my thought was "why did you cripple such a good idea with
such a bad language"??? I seriously considered digging out the Dragon Book to
write a better language front end to it.

------
alexose
Programming is my day job, so being able to think of solid objects in terms of
code just makes sense to me. I find myself using OpenSCAD more and more just
for sketching out ideas, and experimenting with shapes that would be hard to
make using traditional CAD.

I dream of a day when parametric CAD is bundled with a usable package library.
Being able to `import` versioned parts would be a huge upgrade, and would lead
to the development of better standard libraries.

There are also some land mines around the rendering process, e.g. shapes that
render just fine as a preview, but will crash the CGAL renderer. I’ve also had
the opposite happen. It seems like there’s room to add better validation (or
maybe a way of automatically simplifying ASTs?) before they hit the renderer.

~~~
nikolaj
CadQuery (python lib that wraps freecad's CAD kernel) is a bit more similar to
a traditional CAD system in terms of how it constructs parts (workplane, etc).

Also, onshape.com (commercial with hobby free tier) has a scripting interface
that i believe is js-like (i have not yet had to use it, but i use onshape
quite a bit for hobby projects). Their versioning and importing of community
parametric parts is pretty tight imo.

~~~
jf___
no, CadQuery is a wrapper on top of PythonOCC

~~~
salamanderman
Same thing

------
jacknews
Also:

[http://www.implicitcad.org/](http://www.implicitcad.org/)

[https://github.com/SolidCode/SolidPython](https://github.com/SolidCode/SolidPython)

~~~
alexose
RapCad as well!

[https://github.com/GilesBathgate/RapCAD](https://github.com/GilesBathgate/RapCAD)

Feature matrix:
[https://github.com/GilesBathgate/RapCAD/blob/master/doc/feat...](https://github.com/GilesBathgate/RapCAD/blob/master/doc/feature_matrix.asciidoc)

------
nh2
OpenSCAD uses CGAL which allows for exact definitions for the rendered-out
objects (as opposed to floating-point-inaccurate results; often observed as
e.g. flickering coincident planes in OpenSCAD's non-CGAL OpenGL preview).

What does OpenJSCAD used as internal geometric representation?

Is it also exact?

~~~
lvh
Wait: whenever I've used OpenSCAD I get polyhedral approximations, not actual
spheres/cylinders/etc. You can pump up the resolution but that quickly kills
performance and obviously doesn't solve the underlying issue. How can I get
OpenSCAD to do e.g. actual BRep? (Ideally in a way I can export to other
CAD/CAM software?)

~~~
neutronicus
FreeCAD (which uses OpenCASCADE under the hood) can open OpenSCAD CSG files.
This should get you a BRep

------
dekhn
Another neat-looking project. I spend much of my time in FreeCAD which has a
very high learning curve, but is fully scriptable in Python. It's effectively
a UI over a programmatic interface to construct multicomponent documents which
include surfaces, CSG, etc, etc.

~~~
pjbk
You can also use OpenSCAD from inside FreeCAD. I do it all the time. They both
play together well.

------
rkagerer
How do you apply live edits? I tried to change one of the sizes and nothing
happened at first.

It looks like several minutes later one of my changes took effect - is the
site getting hugged to death? Does parsing and rendering not occur on the
client side?

