Oct 172011

Here’s a simple test for you: Use your CAD system to model a raw chicken egg.

It sounds pretty simple, but it can be maddeningly difficult, depending on how accurate you want your model to be.

As a start, the outside of the shell is a single class-A surface. Though eggs in general seem quite symmetrical, in specific, they aren’t. They have some variance. Pull one out of your refrigerator and measure it, and you’ll see. (I’m assuming that all good engineers keep fresh eggs in their refrigerator, and have calipers handy to measure them.)

If you’re going to model a real-world egg, you’ll need to account for its asymmetry. You may not find two diametrically opposite points of symmetry to use as a sweep axis–which may make using a parametric modeler a bit difficult.

But let’s say you pay attention, and use a parametric, direct, or surface modeler to model the egg shell accurately as a single NURBS surface. You’re still not done.

You need to model the inside of the egg. The whites and yolk are fluid structures, and you need to deal with their interfaces (which, I’m guessing, are non-manifolds), as well as their viscosity and surface tensions.

Suppose, though, I let you off the hook, and say you don’t need to model anything on the egg that you can’t see from the outside.

That doesn’t really let you off the hook.

There’s an old test to determine whether an egg is raw, or hard-boiled. You spin it on a hard surface. If it spins easily and quickly, it’s hard-boiled. If it spins with more difficulty, and slows down quickly (because the liquid yolk and whites are damping its motion), it’s raw. (Here’s a variant of this test that works even better.)

You may be able to model the outside surface of an egg shell, but it’s a lot harder to model the egg as a self-contained system.

There is a point to this exercise. It’s to get you thinking about abstraction. All CAD models are abstractions of the real world objects they model. The real issue with abstractions is their appropriateness for purpose.

NURBS-based b-rep surface models are appropriate abstractions for many purposes. But not for all purposes. Consider some examples: FEA, CFD, CNC, and RP. All of these require different abstractions. If you look outside the realm of purely geometric representations, there are many more useful abstractions.

Today’s CAD, CAM, CAE, and PLM systems have a difficult time managing multiple abstractions. I suspect this has a lot to do with their underlying object models. I believe it’s something that will change over time. But I don’t believe it’s something that can be easily patched onto old programs.