threemf 0.8.0

3MF (3D Manufacturing Format) file format support
Documentation
use threemf::model::{Components, Object};

#[test]
fn test_object() {
    let object_str = r##"<object id="1"><components><component objectid="66" transform="0.0393701 0 0 0 0.0393701 0 0 0 0.0393701 0 0 0" /><component objectid="67" transform="0.0393701 0 0 0 0.0393701 0 0 0 0.0393701 0 0 0" /><component objectid="68" transform="0.0393701 0 0 0 0.0393701 0 0 0 0.0393701 0 0 0" /></components></object>"##;
    let object_de: Object = quick_xml::de::from_str(object_str).unwrap();
    match object_de {
        Object { mesh: Some(_), .. } => panic!("No mesh in this object"),
        Object {
            components: Some(Components { component }),
            ..
        } => {
            assert_eq!(component.len(), 3);
            let transform = component.first().unwrap().transform.unwrap();
            assert_eq!(transform[0], 0.0393701);
        }
        _ => panic!("There should be components"),
    }
}

#[test]
fn test_metadatagroup() {
    let object_str = r##"
                <object id="2" name="Part 2" type="model" p:UUID="5690f40c-430c-479f-b804-29081051c247" pid="1" pindex="0">
                        <metadatagroup>
                                <metadata name="customXMLNS0:PTC_onshape_metadata" type="entity_type">Body</metadata>
                        </metadatagroup>
                        <mesh>
                                <vertices>
                                        <vertex x="0.14470075" y="-0.02387521" z="-0.09085463" />
                                        <vertex x="0.14421695" y="-0.02435900" z="-0.09359834" />
                                        <vertex x="0.14147323" y="-0.02387521" z="-0.09085463" />
                                </vertices>
                                <triangles>
                                        <triangle v1="0" v2="1" v3="2" />
                                </triangles>
                        </mesh>
                </object>
        "##;
    let object_de: Object = quick_xml::de::from_str(object_str).unwrap();
    assert!(object_de.mesh.is_some());
}