

Verb - A CAD Library for the Web - galfarragem
http://verbnurbs.com

======
kanzure
I have looked at basically all available open-source CAD kernels, and
verbnurbs is the absolute cleanest and most well written I have ever
encountered.

Verbnurbs beats the pants off OpenCASCADE, OpenNURBS, CGAL, BRL-CAD and a
hundred others, any day of the week. Most existing implementations are huge
and written by large teams that don't completely understand the entire system,
and as a result they all end up bloated, poorly written and poorly maintained.
It doesn't help that OpenCASCADE (for example) does not distribute the
majority of their tests, making it hard for open source contributors to
refactor or delete their code. Verbnurbs has been able to maintain trajectory
all the way up to curve-curve intersections, and I am sure surface-surface is
going to work pretty well.

Here's what the competition looks like:
[http://diyhpl.us/wiki/cad/opencascade](http://diyhpl.us/wiki/cad/opencascade)

As for the others complaining about usability, I would guess that something
like
[https://github.com/dcowden/cadquery](https://github.com/dcowden/cadquery)
would be a suitable direction....

~~~
desdiv
>It doesn't help that OpenCASCADE (for example) does not distribute the
majority of their tests, making it hard for open source contributors to
refactor or delete their code.

So you're saying that this[1] isn't the whole test suite? I've been
considering using OpenCASCADE, but if they don't open source their tests then
that's a huge red flag.

[https://github.com/tpaviot/oce/tree/master/test](https://github.com/tpaviot/oce/tree/master/test)

~~~
kanzure
Well... more like this stuff:

[http://git.dev.opencascade.org/gitweb/?p=occt.git;a=tree;f=t...](http://git.dev.opencascade.org/gitweb/?p=occt.git;a=tree;f=tests/bugs;h=91f464799202d78722c76dd032898d210e23ca1f;hb=HEAD)

And then all the other not included tests....

Btw, the OCE team has done some great work, especially considering what their
task is and what they have to work with. If you must use OpenCASCADE, then use
OCE.

~~~
desdiv
Sorry, I'm still not following you. OpenCASCADE is the upstream; OCE is the
downstream. OpenCASCADE is LGPL 2.1 and OCE is LGPL 2.1, so that means OCE can
pull every single line of code from OpenCASCADE.

Are you saying OCE is not pulling certain tests downstream despite being free
to do so? Or are you saying that some OpenCASCADE test are still close
sourced? If so, then what would be the motivation behind keeping these tests
close sourced?

~~~
kanzure
> Or are you saying that some OpenCASCADE test are still close sourced?

Yes, that's the one I mean. There's even lots of references on the public
parts of their bug tracker to these tests.

> what would be the motivation behind keeping these tests close sourced?

There are so many that I can't even begin to speculate which ones might be the
case here... maybe they lost them, maybe they have Top Secret commercial data
(like BRL-CAD's other test suite, which contains military data), maybe they
don't want anyone to do major refactors without putting in the effort to make
new tests..... Like I said, lots of possible reasons. I haven't asked them.

------
sgdread
It's a very nice 3d primitives collection, but I don't see how it is CAD (at
least in context of mechanical engineering). \- First of all, as a mechanical
engineer, you're not dealing with surfaces, you're dealing with 3D objects,
created using sets of operations: extrusion, revolution, sweep, etc. (ideally
you want to reproduce the manufacture process of a part; in some systems then
you can export these operations into series of commands for CNC machine). \-
Secondary, if the output is not CNC machine, it's usually paper. Then the end
result of CAD 3D modelling is a series of sections, projections, tools to
annotate dimenstions, put tolerances, etc.

~~~
AndrewKemendo
Correct me if I am wrong, but our work with 3D CAD models in revit, Max and
autocad all point to surfaces/meshes being created when 3D functions
(extrusion etc...) are applied. When we look at the file hierarchy within an
FBX for example we see surfaces/meshes as the core geometry regardless of how
they were built.

Are you saying there is a functional difference between a vertex/spline/NURBS
square that has been extruded and a similar block built as a native 3D object?
AFAIK the latter just basically "automates" the extrusion process from the
outset instead of having a function or second extrusion step.

~~~
sgdread
There're different point of views:

\- If you're 3D modeller, then yes, you're operate in terms of splines,
surfaces, NURBS curves, etc. 3D model is your product.

\- If you're mechanical engineer (and CAD usually appear in engineering
context), then in most cases 3D model is just a tool to produce something
useful for manufacturing. Engineer models manufacturing process by applying
specific primitive operations in specific order(order is important) which will
emulate available manufacturing operations (like sweeping, drilling). In other
words, when I need to add hole in a part, I don't create surface (or bunch of
these - in case if hole intersects other surfaces), I just add extrusion
operation; an operation tree will log info "extrusion with diameter 6 at this
coordinates from base A and B", not "surface a,b and c". CAD will build all
necessary surfaces for me as well as will have all necessary parameter for CNC
machine. In 99%* you don't interact directly with surfaces/meshes. At least
that's what you do if you work with Autodesk Mechanical Desktop/Autodesk
Inventor/SolidWorks/CATIA/Unigraphics.

* 1% are rare cases when you have to deliver something really complex like auto body parts (though making those is a whole new story).

~~~
bhouston
Funny thing, most commercial CAD tools (AutoCAD, Revit, Inventor, CATIA,
SolidWorks) are built on a single C++ library from Seimens called Parasolid.

~~~
delhanty
Ex Parasolid (1989-1995), D-Cubed (1995-2000), and SolidWorks (2001-2002) dev
here.

Many are built on Parasolid, but many are not. Of your list only SolidWorks is
built on Parasolid. Siemens own products (NX, SolidEdge) are built on
Parasolid.

CATIA uses its own CATIA kernel. Dassault would like to move SolidWorks to the
CATIA kernel, but they will encounter user resistance.

Autodesk has its own kernel ShapeManager (
[http://en.wikipedia.org/wiki/ShapeManager](http://en.wikipedia.org/wiki/ShapeManager)
) that it uses in Inventor and probably AutoCAD and Revit. ShapeManager was
forked from Acis. There was a court case over the fork. Before the fork
Autodesk used to use Acis.

Dassault owns Acis (
[http://en.wikipedia.org/wiki/ACIS](http://en.wikipedia.org/wiki/ACIS) ) which
is also widely used, especially amongst the smaller players. SpaceClaim uses
Acis.

IIRC ProEngineer has its own kernel.

~~~
bhouston
Ah, you are right. I overestimated Parasolid's reach, although its reach is
pretty extensive as this list implies:

[http://en.wikipedia.org/wiki/Parasolid](http://en.wikipedia.org/wiki/Parasolid)

I would love to pick your brain about CAD and their kernels if you had the
time, give me a shout at ben@clara.io. We are looking to expand Clara.io into
the CAD space and could use some advice.

~~~
delhanty
I emailed you.

Clara.io looks wicked! Also, it looks like it was a lot of hard work to write.

Parasolid, Acis and ShapeManager have a lot in common because they all
originate from the same Romulus family tree in Cambridge, United Kingdom.
Parasolid is probably the most widely used in serious high-end CAD because it
is used in SolidWorks, NX and SolidEdge. Replaying history based feature
models is a very hostile evolutionary environment for a b-rep modeling kernel,
so Parasolid is battle hardened in a way that would be hard for Open CASCADE
say to match.

If you are moving into CAD, then OnShape (VC funded cloud based MCAD by the
founders of SolidWorks) might by a competitor. Do you know what they will use
for their in the browser kernel? Unless they are roundtripping everything to
Parasolid/Acis in the cloud like Lagoa
([http://www.worldcadaccess.com/blog/2014/04/logoa-going-
from-...](http://www.worldcadaccess.com/blog/2014/04/logoa-going-from-simple-
rendering-to-cloud-based-cad.html)) that is.

At the minimum, an in-the-browser sketcher would be good for cloud MCAD. I
have thoughts, but not enough energy, strength and time right now to write one
of those ...

Edit: grammar

------
themodelplumber
Cool work by @ptrbyr. Wondering what his big picture idea is, because CAD
libraries are not exactly easy to just pick up and start building one's own
dream CAD client on (for example).

~~~
phkahler
[http://en.wikipedia.org/wiki/Parasolid](http://en.wikipedia.org/wiki/Parasolid)

------
bhouston
We, [https://Clara.io](https://Clara.io), would love to integrate this into
our 3D editor and work with you on that. Are you interested?

~~~
galfarragem
Disclaimer: I just posted the link. I'm not the author.

------
ph0rque
Very cool. Seems like it would complement OpenJSCad
([http://openjscad.org](http://openjscad.org)).

~~~
bhouston
Very nice. Is OpenJSCad considered stable and compatible with existing CAD
formats? I'm interested in expanding my 3D polygon editor to CAD:
[https://Clara.io](https://Clara.io) Basically if I can find a stable and fast
kernel, I can integrate it and get great results -- but I only want to do this
with a kernel that works well in all cases.

~~~
ph0rque
Not sure, just a fan, and a dreamer of an existence of a powerful online CAD
program.

------
fudged71
Is there a way to export to STL file format?

