Search code examples
reactjspropertiescoordinatesautodesk-forgedatabase-metadata

Find custom point coordinates with Forge


I work with Autodesk Forge (node.js, javascript (worked with it a little), React (completely new !)). I have a rectangle 3D object. At each corner is a point with real world coordinates (lat, lon, z).

These coordinates can be displayed with the property panel in the viewer.

I want to access them from the code, but I cannot find them anywhere.

At first, I thought they would be at :

window.NOP_VIEWER.model.getData().metadata

but nothing !

enter image description here

Here is a picture of what I can see in the viewer. Since I can see them in the property panel, I should be able to access them !

I tried to use this :

window.NOP_VIEWER.model.getBulkProperties('1', 
function(properties){console.log(properties);},
function(error){console.log(error);})

It returns an amazingly long list of field names (if think that's it). When I try to put it in a variable it returns 'undefined'. So I cannot access what is inside anyway.

Also tried getProperties() but I think I did not write it in the right way, it doesn't work either.

I also tried som GET request to find the object properties, but all I got was this :

{
"data": {
    "type": "objects",
    "objects": [
        {
            "objectid": 1,
            "name": "Model",
            "objects": [
                {
                    "objectid": 2691,
                    "name": "Sols",
                    "objects": [
                        {
                            "objectid": 2692,
                            "name": "Sol",
                            "objects": [
                                {
                                    "objectid": 2693,
                                    "name": "Dalle en béton - 250 mm",
                                    "objects": [
                                        {
                                            "objectid": 2694,
                                            "name": "Sol [236041]"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "objectid": 2711,
                    "name": "Modèles génériques",
                    "objects": [
                        {
                            "objectid": 2712,
                            "name": "Point_Georeferencement",
                            "objects": [
                                {
                                    "objectid": 2713,
                                    "name": "Point_Georeferencement",
                                    "objects": [
                                        {
                                            "objectid": 2714,
                                            "name": "Point_Georeferencement [236831]"
                                        },
                                        {
                                            "objectid": 2715,
                                            "name": "Point_Georeferencement [236836]"
                                        },
                                        {
                                            "objectid": 2716,
                                            "name": "Point_Georeferencement [236843]"
                                        },
                                        {
                                            "objectid": 2717,
                                            "name": "Point_Georeferencement [236846]"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

}

But I cannot find a way to access the points' names or their values !

Can anyone help with this, please ?


Solution

  • NOP_VIEWER is a global variable to access the current Viewer. From that you can call:

    .getProperties(): this requires 1 dbId, an easy way to try it is with:

    NOP_VIEWER.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, function (e) {
        e.dbIdArray.forEach(function (dbId) {
            NOP_VIEWER.getProperty(dbId, function (props) {
                console.log(props)
            })
        })
    });
    

    .model.getBulkProperties(): this received an array of elements and just return the properties you specify:

    NOP_VIEWER.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, function (e) {
        viewer.model.getBulkProperties(e.dbIdArray, ['RefX', 'RefY'], function (elements) {
            elements.forEach(function(element){
                console.log(element);
            })
        })
    });
    

    And you may also combine it with .search() (see here) or by enumerating leaf nodes.