Nearly. Your solution is correct in the way that all faces are correctly oriented now.

One can check that by looking at the part in LDView, with BFC checking mode enabled.

To do that, you can put a "BFC" button into the toolbar (using LDView's toolbar customization).

However, your solution solves the problem in an inefficient way, it can be done better:

Relax: BFCing is nothing else than orienting every surface in the file "properly",

such that its "front" points "outside", and its "back" points "inside" the part.

Quads can be re-oriented by reordering their points reversly:

This will make inside outside and vice versa. LDDP has a button for this, it is the one with the red/green color flipping.

That button simply takes a quad and reverses its order of points.

Your misunderstanding is regarding primitives. There, you currently wrote:

0 BFC INVERTNEXT

1 16 2 4 -2 0 1 0 -1.75 0 0 0 0 -1.75 1-4ring7.dat

Let's look at this in more detail, i.e., look at the matrix.

Without the BFC instruction, your ring primitive lies in the Y/Z plane, as you for example can see

directly from the matrix with some experience, or in MLCad when looking at it.

When looking at the ring in LDView with BFC checking enabled, you'll notice that it is simply

pointing "in the wrong X direction": when looking at it in X direction, you see its backside (in red).

Instead of now inverting the whole primitive by an extra BFC INVERTNEXT statement, you can simply

mirror the primitive at the Y/Z-plane, making it pointing "the other direction on the X axis".

This is easily achieved by flipping the sign of the X scaling: change

1 16 2 4 -2 0 1 0 -1.75 0 0 0 0 -1.75 1-4ring7.dat

to

1 16 2 4 -2 0 -1 0 -1.75 0 0 0 0 -1.75 1-4ring7.dat

, and voila, the primitive now is mirrored, and this means that its front now correctly points to the viewer.

This technique can generally be applied for all flat primitives, where the mirroring at the axis in which they are "flat"

will not warp their geometry.

(Sadly, BTW, tool WINDZ does not do that. It inserts all these BFC INVERTNEXT statements always.)

For non-flat primitives, like e.g. cylinders, things are a little different, and this mirroring technique cannot be applied,

as the mirroring will yield a completely different appearance in the part file which uses the primitive.

For these, the

0 BFC INVERTNEXT

statement cannot be avoided and must be used.

I hope this helps you a little. Once you've gotten more used to BFCing, it will become very, very simple to you.

Just the start is confusing. Don't let this frustrate you.

Always think simple of this. In the mathematical sense, each surface has an orientation, i.e., a "front" and a "back",

and this can be used for performance optimization when rendering such a part, because a surface which points

to the viewer with its "back" side will always be on an invisible "rear" side of a part, and can be left out from rendering

completely. Only the surfaces which show their "front" to the viewer need to be rendered. For the high number

of polygons our parts have, this effect can significantly speed up painting.

BFCing means nothing else than properly orienting all the surfaces of a part this way.

One can check that by looking at the part in LDView, with BFC checking mode enabled.

To do that, you can put a "BFC" button into the toolbar (using LDView's toolbar customization).

However, your solution solves the problem in an inefficient way, it can be done better:

Relax: BFCing is nothing else than orienting every surface in the file "properly",

such that its "front" points "outside", and its "back" points "inside" the part.

Quads can be re-oriented by reordering their points reversly:

This will make inside outside and vice versa. LDDP has a button for this, it is the one with the red/green color flipping.

That button simply takes a quad and reverses its order of points.

Your misunderstanding is regarding primitives. There, you currently wrote:

0 BFC INVERTNEXT

1 16 2 4 -2 0 1 0 -1.75 0 0 0 0 -1.75 1-4ring7.dat

Let's look at this in more detail, i.e., look at the matrix.

Without the BFC instruction, your ring primitive lies in the Y/Z plane, as you for example can see

directly from the matrix with some experience, or in MLCad when looking at it.

When looking at the ring in LDView with BFC checking enabled, you'll notice that it is simply

pointing "in the wrong X direction": when looking at it in X direction, you see its backside (in red).

Instead of now inverting the whole primitive by an extra BFC INVERTNEXT statement, you can simply

mirror the primitive at the Y/Z-plane, making it pointing "the other direction on the X axis".

This is easily achieved by flipping the sign of the X scaling: change

1 16 2 4 -2 0 1 0 -1.75 0 0 0 0 -1.75 1-4ring7.dat

to

1 16 2 4 -2 0 -1 0 -1.75 0 0 0 0 -1.75 1-4ring7.dat

, and voila, the primitive now is mirrored, and this means that its front now correctly points to the viewer.

This technique can generally be applied for all flat primitives, where the mirroring at the axis in which they are "flat"

will not warp their geometry.

(Sadly, BTW, tool WINDZ does not do that. It inserts all these BFC INVERTNEXT statements always.)

For non-flat primitives, like e.g. cylinders, things are a little different, and this mirroring technique cannot be applied,

as the mirroring will yield a completely different appearance in the part file which uses the primitive.

For these, the

0 BFC INVERTNEXT

statement cannot be avoided and must be used.

I hope this helps you a little. Once you've gotten more used to BFCing, it will become very, very simple to you.

Just the start is confusing. Don't let this frustrate you.

Always think simple of this. In the mathematical sense, each surface has an orientation, i.e., a "front" and a "back",

and this can be used for performance optimization when rendering such a part, because a surface which points

to the viewer with its "back" side will always be on an invisible "rear" side of a part, and can be left out from rendering

completely. Only the surfaces which show their "front" to the viewer need to be rendered. For the high number

of polygons our parts have, this effect can significantly speed up painting.

BFCing means nothing else than properly orienting all the surfaces of a part this way.