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(¶ms->name), NULL)) ||
!(filename = miaux_tag_to_string(*mi_eval_tag(¶ms->filename), NULL)))
return miFALSE;
return mi_geoshader_add_result(
result,
miaux_object_from_file(name, filename,
*mi_eval_vector(¶ms->bbox_min),
*mi_eval_vector(¶ms->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