protected OgexCameraNode toCameraNode( DataStructure ds, Map<BaseStructure, Object> index ) {
        OgexCameraNode result = (OgexCameraNode)index.get(ds);
        if( result != null ) {
            return result;
        }
        result = new OgexCameraNode();
        index.put(ds, result);
        configureNode(result, ds, index, false);
        
        OgexCameraObject camera = null;       
        for( BaseStructure child : ds ) {
            String type = child.getType();
            if( BASE_NODE_CHILDREN.contains(type) ) {
                continue;
            } else if( StructTypes.OBJECT_REF.equals(type) ) {
                if( camera != null ) {
                    throw new RuntimeException("Too many ObjectRef structures found in CameraNode, from:" + child.location());
                }
                BaseStructure[] array = (BaseStructure[])child.getData();
                if( array.length != 1 ) {
                    throw new RuntimeException("Too many references (" + array.length + ") found in CameraNode ObjectRef, from:" + child.location());
                }
                camera = toCamera((DataStructure)array[0], index);
            } else {
                log.warn("Unhandled structure type:" + child.getType() + ", from:" + child.location());
            }
        }
        result.setCamera(camera);
                
        return result;
    }