Search code examples
autodesk-forgeautodesk

Get different 3d views within item selected in Autodesk forge


We get hubs, folders list, items within folders using Data Management apis we have in Autodesk Forge.

Ref.: https://forge.autodesk.com/en/docs/data/v2/reference/http/

How to get data if we want to show all the 3d views(names and thumbnails) present within the selected item(say, file1.rvt)?


Solution

  • For this you need to pull the manifest & metadata for the Version of the File Item you want to display Views/Thumbnails for. In your Item payload, you will find all versions available. Take the latest one and find its 'id' which looks like this:

    "id": "urn:adsk.wipprod:fs.file:vf.7aKButAtTo-VRvSJqZl0jg?version=13",
    

    Encode it to safe Base64 encoding. It is important the safe encode the ID, otherwise you may end-up with '=' '-' '/' characters which aren't valid on the GET URL path later.

    dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLjdhS0J1dEF0VG8tVlJ2U0pxWmwwamc_dmVyc2lvbj0xMw
    

    To get views, you are usually pulling the metadata and get something like this:

    {
        "data": {
            "type": "metadata",
            "metadata": [
                {
                    "name": "3D View: View 01",
                    "role": "3d",
                    "guid": "a6128518-dcf0-967b-31a1-3439a375daeb"
                },
                {
                    "name": "3D View: View 02",
                    "role": "3d",
                    "guid": "488e0550-6e79-38b3-9f56-ae8fd21416bb"
                },
                {
                    "name": "Sheet: A00 - SITE PLAN",
                    "role": "2d",
                    "guid": "beaab4e2-9abc-8ca2-4e65-23df60e4b6a7"
                }
           ]
       }
    }
    

    There is 2 sorts of Thumbnails - the File Thumbnails which is usually the View which was active when the file was last saved. You can get that Thumbnail via the GET /thumbnail API. But if you want to get all Views' Thumbnail, you need to pull the manifest and parse the JSON response. You will get a response like this (for making the reading more easy on this post, I simplified the response below).

    You will search for children nodes with "role" === "thumbnail". Its parent will tell you to which View it is attached. What is interesting to note here, is that you do not really need to call the /metadata endpoint, because the manifest has all the information for you already as long you know where to read it. For example, let's say I want to get the Thumbnail resolution 200x200 for the Sheet View.

    I'll search for the node with "type" === "geometry" && "role" === "2d", then search in its children a node with "role" === "thumbnail" && "resolutions" === [200, 200]. From that node, I get the derivative URN (i.e. "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/e28378ef-7b4a-878f-cb72-26fbb1a28b2e_f2d/thumbnail_200.png",) and now I can use the GET :urn/manifest/:derivativeurn endpoint to get the thumbnail file. That's it.

    Note, the parent node has the View name, and one of its children with "role" === "graphics" && "mime": "application/autodesk-f2d", and a property "guid" which match the entry in the metadata response. So you can extract the name and guid view from either the manifest of the metadata endpoints. (for 3D views, you will need to search for "mime": "application/autodesk-svf" or "mime": "application/autodesk-svf2" depending of the format you translated your model to).

    {
        "urn": "dXJuOm...uZHdmeA",
        "derivatives": [
            {
                "hasThumbnail": "true",
                "children": [
                    {
                        "role": "3d",
                        "hasThumbnail": "true",
                        "children": [
                           {
                                "role": "graphics",
                                "mime": "application/autodesk-svf2",
                                "guid": "a6128518-dcf0-967b-31a1-3439a375daeb",
                                "type": "resource"
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/f0224dd3-8767-45c1-ff99-5c9c881b9fee/0.svf.png01_thumb_400x400.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "630d764b-6e55-4d17-8446-6858454d8158",
                                "type": "resource",
                                "resolution": [400, 400]
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/f0224dd3-8767-45c1-ff99-5c9c881b9fee/0.svf.png01_thumb_200x200.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "7294c4f7-55ec-41d7-94e5-98c7294d1ae1",
                                "type": "resource",
                                "resolution": [200, 200]
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/f0224dd3-8767-45c1-ff99-5c9c881b9fee/0.svf.png01_thumb_100x100.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "d1f2f54d-1ce7-49e0-8360-24f212a0cb33",
                                "type": "resource",
                                "resolution": [100, 100]
                            },
                            ...
                        ],
                        "name": "3D View: View 01",
                        "guid": "f0224dd3-8767-45c1-ff99-5c9c881b9fee",
                        "progress": "complete",
                        "type": "geometry",
                        "properties": {...},
                        "status": "success",
                        "viewableID": "f0224dd3-8767-45c1-ff99-5c9c881b9fee"
                    },
                    {
                        "role": "3d",
                        "hasThumbnail": "true",
                        "children": [
                            {
                                "role": "graphics",
                                "mime": "application/autodesk-svf2",
                                "guid": "488e0550-6e79-38b3-9f56-ae8fd21416bb",
                                "type": "resource"
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/5f6ae103-9de8-048e-f858-c7b0b0b9f46c/1.svf.png01_thumb_400x400.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "e4ff0fb3-20a0-43c2-b01a-e35f08205ea9",
                                "type": "resource",
                                "resolution": [ 400, 400 ]
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/5f6ae103-9de8-048e-f858-c7b0b0b9f46c/1.svf.png01_thumb_200x200.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "0fe4e17a-8eb9-49c3-bfca-7f8e747ae779",
                                "type": "resource",
                                "resolution": [ 200, 200 ]
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/5f6ae103-9de8-048e-f858-c7b0b0b9f46c/1.svf.png01_thumb_100x100.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "b0353527-cade-48bb-bbfc-7b544ea2d0ae",
                                "type": "resource",
                                "resolution": [ 100, 100 ]
                            },
                            ...
                        ],
                        "name": "3D View: View 02",
                        "guid": "5f6ae103-9de8-048e-f858-c7b0b0b9f46c",
                        "progress": "complete",
                        "type": "geometry",
                        "properties": {...},
                        "status": "success",
                        "viewableID": "5f6ae103-9de8-048e-f858-c7b0b0b9f46c"
                    },
                    {
                        "guid": "e28378ef-7b4a-878f-cb72-26fbb1a28b2e",
                        "type": "geometry",
                        "role": "2d",
                        "name": "Sheet: A00 - SITE PLAN",
                        "status": "success",
                        "hasThumbnail": "true",
                        "progress": "complete",
                        "viewableID": "com.autodesk.dwf.ePlot_281AFDC7-8CE7-4D19-BE69-A47E6364BF53",
                        "children": [
                           {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/e28378ef-7b4a-878f-cb72-26fbb1a28b2e_f2d/primaryGraphics.f2d",
                                "role": "graphics",
                                "mime": "application/autodesk-f2d",
                                "guid": "beaab4e2-9abc-8ca2-4e65-23df60e4b6a7",
                                "type": "resource",
                                "status": "success"
                            },
                            {
                                "guid": "382e91af-fb2f-4782-a058-6bff5a477c89",
                                "type": "view",
                                "role": "2d",
                                "name": "Sheet: A00 - SITE PLAN",
                                "viewbox": [...]
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/e28378ef-7b4a-878f-cb72-26fbb1a28b2e_f2d/thumbnail_400.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "74d8c07b-0703-2505-8c78-c4d7c95fd620",
                                "type": "resource",
                                "resolution": [400, 400],
                                "status": "success"
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/e28378ef-7b4a-878f-cb72-26fbb1a28b2e_f2d/thumbnail_200.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "0aec7773-5a02-c9ed-37b2-0e92020dc63a",
                                "type": "resource",
                                "resolution": [200, 200],
                                "status": "success"
                            },
                            {
                                "urn": "urn:adsk.viewing:fs.file:dXJuOm...uZHdmeA/output/e28378ef-7b4a-878f-cb72-26fbb1a28b2e_f2d/thumbnail_100.png",
                                "role": "thumbnail",
                                "mime": "image/png",
                                "guid": "91011625-63a4-1165-4e6f-700dedff94a7",
                                "type": "resource",
                                "resolution": [ 100, 100 ],
                                "status": "success"
                            },
                            ...
                        ]
                    }
                ],
                "name": "Myfile.rvt",
                "progress": "complete",
                "outputType": "svf2",
                "status": "success"
            }
        ],
        "hasThumbnail": "true",
        "progress": "complete",
        "type": "manifest",
        "region": "US",
        "version": "1.0",
        "status": "success"
    }