protected OgexGeometryObject toGeometry( DataStructure ds, Map<BaseStructure, Object> index ) {         
 
        OgexGeometryObject result = (OgexGeometryObject)index.get(ds);
        if( result != null ) {
            return result;
        }
        result = new OgexGeometryObject();
        index.put(ds, result);
        
        if( "false".equals(ds.getProperty("visible")) ) {
            result.setVisible(false);
        }
        if( "false".equals(ds.getProperty("shadow")) ) {
            result.setShadow(false);
        }
        if( "false".equals(ds.getProperty("motionBlur")) ) {
            result.setMotionBlur(false);
        }
 
        for( BaseStructure child : ds ) {
            if( StructTypes.MESH.equals(child.getType()) ) {
                result.addMesh(toMesh((DataStructure)child, index));
            } else {
                log.warn("Unhandled structure type:" + child.getType() + ", from:" + child.location());
            }
        }
 
        return result;       
    }