Verb - A CAD Library for the Web
verbnurbs.com
verbnurbs.com
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
As for the others complaining about usability, I would guess that something like https://github.com/dcowden/cadquery would be a suitable direction....
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.
http://git.dev.opencascade.org/gitweb/?p=occt.git;a=tree;f=t...
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.
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?
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.
Let us know when it handles trimmed NURBS. Until then, no serious CAD really cares.
This works:
Workplane("front").rect(1,1).circle(0.41).extrude(1)
This doesn't: Workplane("front").rect(1,1).circle(0.49).extrude(1)
Might have been a cadquery bug, but I doubt it. Hopefully not an OpenCASCADE bug!I would agree that OpenCASCADE is bloated - it has been since Matra Datavision failed to make a commercial product of the pre-open CASCADE that they ripped out of Euclid. There isn't much else out there in open source b-rep solid modeling kernels though, and at least they are LGPL 2.1 (instead of their own "LGPL like" but not actually GPL compatible) licensed these days.
But for OpenNURBS you're getting commercial maturity - part of a successful product (Rhino) - and a very reasonable license (which is rare in the CAD industry) so there is a lot to like.
Commercial maturity like, no tests! :-) see http://files.na.mcneel.com/opennurbs/5.0/2011-11-22/opennurb... How would someone be expected to contribute to an open source project with zero testing, especially on something requiring so much correctness and validation?
But yeah, all kidding aside and other than no tests, it's pretty good. BRL-CAD had to re-implement all the stuff Rhino ripped out, like surface-surface intersections :(. But at least we have that now.
The bar for the meaning of "open" in CAD is pretty low though. Have you looked at Siemens JtOpen for example? (Which has a documented file format with various encumbering restrictions and is a closed source product.) Disclaimer: I know the product manager from JtOpen and he is old friend of mine from Parasolid days, so it's not personal.
Edit: grammar
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.
- 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).
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 ) 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 ) which is also widely used, especially amongst the smaller players. SpaceClaim uses Acis.
IIRC ProEngineer has its own kernel.
Also, I just re-read your post on reverse engineering the SolidWorks format ( http://heybryan.org/solidworks_file_format.html ).
Re: code review - I'd have to think carefully about that - might put me in a conflicted position with my own future plans to write a lightweight modeler.
I am working on reverse engineering now. We could start by swapping ideas if that would work for you...
Right now, I am low on energy & time - went through burn out a few years ago and have to pace myself ...
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.
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-...) 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
Edit: spelling