Shader object_file

Click on the filename to display or download the file.

object_file.mi
declare shader 
    geometry "object_file" ( 
        string "name", 
        string "filename",  
        vector "bbox_min" default -1 -1 -1, 
        vector "bbox_max" default 1 1 1 ) 
    version 1 
end declare 

object_file.c
#include  
#include  
#include "shader.h" 
#include "geoshader.h" 
#include "miaux.h" 
 
struct object_file { 
    miTag name; 
    miTag filename; 
    miVector bbox_min; 
    miVector bbox_max; 
}; 
 
DLLEXPORT 
int object_file_version(void) { return 1; } 
 
DLLEXPORT 
miBoolean object_file ( 
    miTag *result, miState *state, struct object_file *params  ) 
{ 
    char *name, *filename; 
 
    if (!(name = miaux_tag_to_string(*mi_eval_tag(&params->name), NULL)) || 
        !(filename = miaux_tag_to_string(*mi_eval_tag(&params->filename), NULL))) 
        return miFALSE; 
 
    return mi_geoshader_add_result( 
        result, 
        miaux_object_from_file(name, filename, 
                               *mi_eval_vector(&params->bbox_min), 
                               *mi_eval_vector(&params->bbox_max))); 
} 

object_file_util.c
char* miaux_tag_to_string(miTag tag, char *default_value) 
{ 
    char *result = default_value; 
    if (tag != 0) { 
	result = (char*)mi_db_access(tag); 
	mi_db_unpin(tag); 
    } 
    return result; 
} 
 
miTag miaux_object_from_file( 
    const char* name, const char* filename,  
    miVector bbox_min, miVector bbox_max) 
{ 
    miObject *obj = mi_api_object_begin(mi_mem_strdup(name)); 
    obj->visible = miTRUE; 
    obj->shadow = 3; 
    obj->bbox_min = bbox_min; 
    obj->bbox_max = bbox_max; 
    mi_api_object_file(mi_mem_strdup(filename)); 
    return mi_api_object_end(); 
} 

22 April 2008 23:40:36