Naar de inhoud

Testing open source CAD kernels

This is the English reading version of the Dutch news item Testen van opensource CAD kernels.

OCCT, SMLib and SolidCore are three kernels for CAD: the engine that turns your sketch into a real solid, works out booleans and writes your model to STEP. I ran the same sixteen models through all three to see where they agree and where they drift apart. Below is how that test works and what comes out per model.

How the test works

Every model is a single .scad file, and the same file goes through all three kernels. The test then compares two things: the outer dimensions of the model and its volume.

The error margin I use is the difference in volume compared with OCCT, in percent. That number tells you whether two kernels built the same shape. A small difference is normal, because where a curved face is divided into triangles the volume always deviates a fraction. Below 0.3 percent I put that down to it; if it drifts further apart, something is wrong in the kernel itself.

Four models that all three kernels build

All three manage these four: a cube with a spherical bite, a tapered tube with a hole, a cube with rounded edges and three plates with holes of different sizes. The margins sit between 0.01 and 0.26 percent, so the three arrive at the same model.

Cube with a spherical bite
A 12 mm sphere cuts through all six faces of the cube.
Tapered tube with a hole
A cone with a through hole: real conical and cylindrical faces.
Cube with rounded edges
Every edge rounded by 2 mm; the cube stays exactly 20 mm.
Three plates with holes
Holes of different sizes, from a loop with a condition.

Three models that only OCCT and SMLib can handle

The L-bracket, the flange and the V-belt pulley need features SolidCore does not have yet: revolving a profile around an axis, and selecting edges as convex or concave. That is not a fundamental difference but work still to be done. SolidCore is a young rebuild and currently manages four of the sixteen models.

L-bracket
Rounded outer edges and three mounting holes.
Flange with weld fillet
The transition between flange and tube is rounded like a weld.
V-belt pulley
One profile revolved around the axis, with real conical faces in the groove.

And this only OCCT

A plate of 100 by 100 mm with a cylinder of 40 mm on top, its axis exactly on the edge of the plate, then everything rounded by 2 mm.

The cylinder overhangs the plate by half, so the transition between cylinder and plate ends on the free side face. That is exactly where SMLib and SolidCore get stuck. SMLib cannot classify the corner properly and the code that has to close the gap on that face does not work there. SolidCore trips up even earlier, at the point where the two rails meet. In OCCT it works without complaint.

This is the case where a kernel proves itself: not in the round hole in a plate, but in the shape just next to it. I reported it to the project, with the error messages; it is in issue #1410.

Plate with a cylinder on the edge
A 40 mm cylinder on the edge of a 100 by 100 mm plate, everything rounded by 2 mm.

Of the sixteen models in this test, OCCT and SMLib arrive at the same dimensions and volumes on all sixteen. SolidCore manages four. The difference is not in everyday shapes, but in the awkward transitions.

My verdict: it is impressive how well the Rust port already works, given it has only been worked on for a few days. The progress per two days looks like a year of OCCT development, and I expect we will have an OCCT alternative within two weeks.

The test set and the models are in the openscad-occt fork. Keep an eye on this site for updates and tests, I will keep following the three kernels and publish the next measurement here.

The images were made with OCCT 7.6.3 from the .scad sources of the test; for the four models in the first block the other two build exactly the same shape.

Laat een reactie achter

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *