I am looking for a 3dm file format description

Hello everyone, I have been working with opennurbs for a while now and I am trying to find a specification or documentation for the 3DM file format. However, I have not been able to find any relevant documents on the official website, the internet, or forums. This is important for my learning, so I am reaching out to ask where I can find such documentation.

My question is about how binary information is organized in a 3DM document. I know that the opennurbs code is doing this, but it is too large for me to quickly understand the entire process. This is why I want to obtain a specification for the 3DM file format.

When I receive a 3DM file, it is difficult for me to understand because it is binary. Although I can use opennurbs to read it, I still find it difficult to understand the organization of the file. Specifically, reading a 3DM file requires dozens of functions such as Read3dmStartSection, Read3dmProperties, Read3dmSettings, BitmapTable, MaterialTable, etc. I think I need a document that explains the organization of the 3DM file, such as how it is divided into different parts and what each part contains.

The most important part that I forgot to mention is the geometry elements and their relationships, such as which geometry element classes were added in which version, what is a filtered object, and so on. I know that some functions have detailed comments, but I wonder if there is a 3DM file format specification manual that would be more convenient for me to reference classes and all of their functions and features.

I believe that such a manual would help people better understand opennurbs, rather than just using it as a black box for converting 3DM files. Does anyone know if such a document exists and if I can obtain it?

Thank you, and best wishes.

Hi @LXY,

As far as I know, nothing like this exists.

The toolkit come with several samples that demonstrate how to read and write .3dm files. If you can to use the toolkit as a black box, as many do I’m sure, then you can do that. If you want to evaluate what we are doing in detail, you can always read the header comments and trace through the code.


– Dale

Hello, I am very interested in this as well.

I am just looking for a way to recognize whether a file is a .3dm based on its content (using Python). I have looked through several opennurbs source files and examples, but I cannot find how you guys validate whether the input file is a valid .3dm (I am not a C++ expert). Can anyone help me in the right direction?


I might have found something, is it this assertion on "3D Geometry File Format "?