Imported part contains blocks

I’m curious as to what makes Rhino create blocks in certain cases.

I’ve uploaded a part and referenced this thread in McNeel Upload and it contains 15 blocks.

However, if I export an assembly containing that same part, it will contain far fewer blocks (though weirdly, a few nested blocks).

In the originating CAD package, the part is a part, not an assembly, containing a flat structrure of 247 bodies.

Why are the blocks generated?

(I double checked with Unreal Datasmith and it does not generate any internal hierarchy in the part, btw.)

Was the file you brought in a STEP file?

Yes.

As I understand it, the STEP file format uses block definitions the way Rhino and AutoCAD use Layers.
That’s why they come into Rhino that way.

There are tools around to help reorganize the blocks and nest blocks, and nested nested blocks into a more familiar layer structure.

I think this may be an old problem, where Rhino’s STEP import and export plugins create an additional block around the imported/exported STEP file:

I’ll wait until a technician can take a look at the file I uploaded.

There was no groups or layers or anything, and I don’t care about the document block. This is something else.

We’re off until next week for the Thanksgiving holiday.

The STEP file has one geometric set entity, 245 manifold_solid_brep entities, and 2 brep_with_voids entities.
Alfter exploding the top level block, Rhino has 14 blocks, 1 point, 1 surface, and 232 polysurfaces.
Without digging in too deeply right now, here’s my best guess.

The single point comes from the geometric set. I can see that for sure.
The single surface is closed, like a sphere or torus. It and the 232 polysurfaces make up 233 of the manifold_solid_breps.
When Rhino can’t join all of the surfaces from a step brep into a single polysurface it puts all the pieces into a block. Also, since Rhino doesn’t have something equivalent to a brep_with_voids, it puts the polysurfaces from each part of one of those into a block. So those 14 blocks are the 2 brep_with_voids and 12 manifold_solid_breps that didn’t join up. It is possible that a component of a brep_with_voids did not join porperly. Its pieces would be a sub-block of the block for the brep_with_voids.

2 Likes

Great, thank you for the explanation!

So when that same part is imported inside of a much larger assembly, Rhino probably reads the tolerances different and that’s why it manages to join more parts and generate less blocks…

(And just to note, both Siemens NX and Unreal Datasmith manages to load this STEP as 1 part with 247 bodies regardless of whether it is in a single part or a larger assembly. To me at least, that’s a more expected behavior, regardless of what is technically correct.)

This is really problematic when you import a large assembly, since you get “parts” in the assembly tree which weren’t originally there. If this is a convenience feature, there should be an option to disable it. Loose geometry is not as bad as hundreds of extra blocks!