#include #include #include #include struct geo_object_file { miTag object_name; miTag object_filename; miVector bbox_min; miVector bbox_max; miBoolean visible; /* object visible? */ miInteger shadow; /* bit0=cast, bit1=receive */ miInteger reflection; /* bit0=cast, bit1=receive */ miInteger refraction; /* bit0=cast, bit1=receive */ miInteger transparency; /* bit0=cast, bit1=receive */ miInteger caustic; /* bit0=cast, bit1=receive */ miInteger globillum; /* bit0=cast, bit1=receive */ miInteger finalgather; /* bit0=cast, bit1=receive */ miInteger object_label; }; DLLEXPORT int geo_object_file_version(void) {return(1);} DLLEXPORT miBoolean geo_object_file ( miTag *result, miState *state, struct geo_object_file *params ) { miObject *obj; miTag objTag; miTag objNameTag = *mi_eval_tag(¶ms->object_name); char *objName = objNameTag ? (char*)mi_db_access(objNameTag) : NULL; miTag fileNameTag = *mi_eval_tag(¶ms->object_filename); char *fileName = fileNameTag ? (char*)mi_db_access(fileNameTag) : NULL; if (!objName) mi_error("No \"object_name\" specified for geo_object_file geometry shader."); if (!fileName) mi_error("No \"object_filename\" specified for geo_object_file geometry shader."); obj = mi_api_object_begin(mi_mem_strdup(objName)); mi_db_unpin(objNameTag); obj->bbox_min = *mi_eval_vector(¶ms->bbox_min); obj->bbox_max = *mi_eval_vector(¶ms->bbox_max); obj->visible = (miUint1)*mi_eval_boolean(¶ms->visible); obj->shadow = (miUint1)*mi_eval_integer(¶ms->shadow); obj->reflection = (miUint1)*mi_eval_integer(¶ms->reflection); obj->refraction = (miUint1)*mi_eval_integer(¶ms->refraction); obj->transparency = (miUint1)*mi_eval_integer(¶ms->transparency); obj->caustic = (miUint1)*mi_eval_integer(¶ms->caustic); obj->globillum = (miUint1)*mi_eval_integer(¶ms->globillum); obj->finalgather = (miUint1)*mi_eval_integer(¶ms->finalgather); obj->label = (miUint)*mi_eval_integer(¶ms->object_label); mi_info("%s visibility %d", objName, obj->visible); mi_info("%s shadow %d", objName, obj->shadow); mi_info("%s reflection %d", objName, obj->reflection); mi_info("%s refraction %d", objName, obj->refraction); mi_info("%s transparency %d", objName, obj->transparency); mi_info("%s caustic %d", objName, obj->caustic); mi_info("%s globillum %d", objName, obj->globillum); mi_info("%s finalgather %d", objName, obj->finalgather); mi_api_object_file(mi_mem_strdup(fileName)); mi_db_unpin(fileNameTag); objTag = mi_api_object_end(); mi_info("object %s created, object tag = %d", objName, objTag); return(mi_geoshader_add_result(result, objTag)); }