# Rhino3D Reader

Rhino3D
File Extension | 3DM
Supported Versions | From 4 to 8
Platforms |
Assembly |
B-Rep |
PMI | N/A
Tessellation |
Visualization |

Rhino3D is a file format created by Robert McNeel & Associates. It is used in the proprietary Rhinoceros ecosystem.

Our Rhino3D Reader provides full access to the assembly, B-rep, view, and PMI data stored within a Rhino file. The most common file extension you can expect is .3DM.

HOOPS Exchange geometry access for Rhino3D includes:

- B-rep: Access to exact geometry where present in the source file.
- Tessellation: Can be generated by HOOPS Exchange for visualization.

## How to Import From Rhino3D

If you are new to reading models with HOOPS Exchange, see the basic load workflow </guide/basic_operations/load_model>` section of the Programming Guide.

To load a Rhino3D file, use `A3DAsmModelFileLoadFromFile()`. The `A3DParamsLoadData` structure is used to customize the loading behavior:

    A3DAsmModelFile* pModelFile = 0;

    A3DRWParamsLoadData sReadParam = A3D_MAKE_DATA(A3DRWParamsLoadData);
    sReadParam.m_sGeneral.m_bReadSolids = true;

    // ... set other A3DRWParamsLoadData fields as necessary

    A3DAsmModelFileLoadFromFile("path/to/file.3dm", &sReadParam, &pModelFile);

Note that HOOPS Exchange provides file reading options specific to Rhino3D. These options can be set in the `A3DRWParamsLoadData.m_sSpecifics.m_sStep` field.

See Simple Load and Export for general information about loading model files.

## Assembly

Incremental load is not supported by our Rhino reader. Datum planes and construction geometry are also supported and accessed through the assembly tree.

## B-Rep

HOOPS Exchange provides basic access to B-rep geometry through NURBS. B-spline curves and B-spline surfaces are supported.

## Tessellation

HOOPS Exchange computes tessellation based on the B-rep in the model file.

## Visualization

The visualization data for this format is generated by the HOOPS Exchange tessellation engine.

## Views

Our Rhino3D reader does not support views.

## PMI

Our Rhino3D reader does not read PMI.

## Metadata

Starting from HOOPS Exchange 2022 SP1, our reader can read user-data from Rhino files, including:

- Document user strings, located within the A3DAsmModelFile entity.
- Layer user data, located within layer A3DAsmProductOccurrence entities, which are children of the root product occurrence.
- Object user data, provided through their corresponding A3DAsmProductOccurrence entities.
- Geometry user data, available in their corresponding A3DAsmPartDefinition entities.

Rhino user data are provided through Generic Attributes. This option is available when reading attributes is enabled from general read parameters:

> A3DRWParamsLoadData.m_sGeneral.m_bReadAttributes = A3D_TRUE;

Upon reading generic attributes containing Rhino data, A3DMiscAttributeData::m_pcTitle can be any of:

- ON_UserData
- ON_UnknownUserData
- ON_ObsoleteUserData
- ON_RdkMaterialInstanceIdObsoleteUserData
- ON_UserStringList

The data themselves are part of the collection of A3DMiscSingleAttribute objects available through A3DMiscAttributeData::m_asSingleAttributesData. Single attribute names are string where each correspond to a specific constant for convenience:

Constant | Value
--- | ---
`kA3DRhinoAttributeName3DMVersion` | “3DM version”
`kA3DRhinoAttributeNameApplicationUUID` | “application UUID”
`kA3DRhinoAttributeNameArchiveClassUUID` | “archive class UUID”
`kA3DRhinoAttributeNameBufferData` | “buffer data”
`kA3DRhinoAttributeNameModelObjectUUID` | “model object UUID”
`kA3DRhinoAttributeNameOpenNURBSVersion` | “OpenNURBS version number”
`kA3DRhinoAttributeNameRDKMaterialInstanceUUID` | “RDK material instance UUID”
`kA3DRhinoAttributeNameUnknownClassUUID` | “unknown class UUID”
`kA3DRhinoAttributeNameUserDataCopyCount` | “user data copy count”
`kA3DRhinoAttributeNameUserDataUUID` | “user data UUID”
`kA3DRhinoAttributeNameUserDataXForm` | “user data xform”
`kA3DRhinoAttributeNameDocumentUserStrings` | “document user strings”

Conversation saved
HOOPSY BETA

### Hello! I'm HOOPSY

Your multilingual generative AI assistant for documentation. Ask me anything about HOOPS Exchange in your own language, or choose a sample question below to start a conversation:

What is HOOPS Exchange?
What are the latest release notes for HOOPS Exchange?
How do I start evaluating HOOPS Exchange?
How do I write my first sample application?
How can I get assistance?

HOOPSY may store conversations according to OpenAI's policy. Responses may not always be accurate.

HOOPSY is thinking...