static void run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals) { static GimpParam values[1]; GimpDrawable *drawable; GimpRunMode run_mode; GimpPDBStatusType status = GIMP_PDB_SUCCESS; gint i; run_mode = param[0].data.d_int32; INIT_I18N (); values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = status; *nreturn_vals = 1; *return_vals = values; /* Set default values */ /* ================== */ set_default_settings (); /* Get the specified drawable */ /* ========================== */ image_id = param[1].data.d_int32; drawable = gimp_drawable_get (param[2].data.d_drawable); switch (run_mode) { case GIMP_RUN_INTERACTIVE: /* Possibly retrieve data */ /* ====================== */ gimp_get_data (PLUG_IN_PROC, &mapvals); check_drawables (drawable); if (main_dialog (drawable)) { compute_image (); gimp_set_data (PLUG_IN_PROC, &mapvals, sizeof (MapObjectValues)); } break; case GIMP_RUN_WITH_LAST_VALS: gimp_get_data (PLUG_IN_PROC, &mapvals); check_drawables (drawable); image_setup (drawable, FALSE); compute_image (); break; case GIMP_RUN_NONINTERACTIVE: if (nparams != 49) { status = GIMP_PDB_CALLING_ERROR; } else { mapvals.maptype = (MapType) param[3].data.d_int32; mapvals.viewpoint.x = param[4].data.d_float; mapvals.viewpoint.y = param[5].data.d_float; mapvals.viewpoint.z = param[6].data.d_float; mapvals.position.x = param[7].data.d_float; mapvals.position.y = param[8].data.d_float; mapvals.position.z = param[9].data.d_float; mapvals.firstaxis.x = param[10].data.d_float; mapvals.firstaxis.y = param[11].data.d_float; mapvals.firstaxis.z = param[12].data.d_float; mapvals.secondaxis.x = param[13].data.d_float; mapvals.secondaxis.y = param[14].data.d_float; mapvals.secondaxis.z = param[15].data.d_float; mapvals.alpha = param[16].data.d_float; mapvals.beta = param[17].data.d_float; mapvals.gamma = param[18].data.d_float; mapvals.lightsource.type = (LightType) param[19].data.d_int32; mapvals.lightsource.color = param[20].data.d_color; mapvals.lightsource.position.x = param[21].data.d_float; mapvals.lightsource.position.y = param[22].data.d_float; mapvals.lightsource.position.z = param[23].data.d_float; mapvals.lightsource.direction.x = param[24].data.d_float; mapvals.lightsource.direction.y = param[25].data.d_float; mapvals.lightsource.direction.z = param[26].data.d_float; mapvals.material.ambient_int = param[27].data.d_float; mapvals.material.diffuse_int = param[28].data.d_float; mapvals.material.diffuse_ref = param[29].data.d_float; mapvals.material.specular_ref = param[30].data.d_float; mapvals.material.highlight = param[31].data.d_float; mapvals.antialiasing = (gint) param[32].data.d_int32; mapvals.tiled = (gint) param[33].data.d_int32; mapvals.create_new_image = (gint) param[34].data.d_int32; mapvals.transparent_background = (gint) param[35].data.d_int32; mapvals.radius = param[36].data.d_float; mapvals.cylinder_radius = param[36].data.d_float; mapvals.scale.x = param[37].data.d_float; mapvals.scale.y = param[38].data.d_float; mapvals.scale.z = param[39].data.d_float; mapvals.cylinder_length = param[40].data.d_float; for (i = 0; i < 6; i++) mapvals.boxmap_id[i] = param[41+i].data.d_drawable; for (i = 0; i < 2; i++) mapvals.cylindermap_id[i] = param[47+i].data.d_drawable; check_drawables (drawable); image_setup (drawable, FALSE); compute_image (); } break; } values[0].data.d_status = status; if (run_mode != GIMP_RUN_NONINTERACTIVE) gimp_displays_flush (); gimp_drawable_detach (drawable); }
static void run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals) { static GimpParam values[1]; GimpDrawable *drawable; GimpRunMode run_mode; GimpPDBStatusType status = GIMP_PDB_SUCCESS; run_mode = param[0].data.d_int32; INIT_I18N (); *nreturn_vals = 1; *return_vals = values; values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = status; /* Set default values */ /* ================== */ set_default_settings (); /* Possibly retrieve data */ /* ====================== */ gimp_get_data (PLUG_IN_PROC, &mapvals); /* Get the specified drawable */ /* ========================== */ drawable = gimp_drawable_get (param[2].data.d_drawable); mapvals.drawable_id = drawable->drawable_id; check_drawables (); if (status == GIMP_PDB_SUCCESS) { /* Make sure that the drawable is RGBA or RGB color */ /* ================================================ */ if (gimp_drawable_is_rgb (drawable->drawable_id)) { /* Set the tile cache size */ /* ======================= */ gimp_tile_cache_ntiles (TILE_CACHE_SIZE); switch (run_mode) { case GIMP_RUN_INTERACTIVE: if (main_dialog (drawable)) { compute_image (); gimp_set_data (PLUG_IN_PROC, &mapvals, sizeof (LightingValues)); gimp_displays_flush (); } break; case GIMP_RUN_WITH_LAST_VALS: if (image_setup (drawable, FALSE)) compute_image (); gimp_displays_flush (); break; case GIMP_RUN_NONINTERACTIVE: if (nparams != 24) { status = GIMP_PDB_CALLING_ERROR; } else { mapvals.bumpmap_id = param[3].data.d_drawable; mapvals.envmap_id = param[4].data.d_drawable; mapvals.bump_mapped = (gint) param[5].data.d_int32; mapvals.env_mapped = (gint) param[6].data.d_int32; mapvals.bumpmaptype = (gint) param[7].data.d_int32; mapvals.lightsource[0].type = (LightType) param[8].data.d_int32; mapvals.lightsource[0].color = param[9].data.d_color; mapvals.lightsource[0].position.x = param[10].data.d_float; mapvals.lightsource[0].position.y = param[11].data.d_float; mapvals.lightsource[0].position.z = param[12].data.d_float; mapvals.lightsource[0].direction.x = param[13].data.d_float; mapvals.lightsource[0].direction.y = param[14].data.d_float; mapvals.lightsource[0].direction.z = param[15].data.d_float; mapvals.material.ambient_int = param[16].data.d_float; mapvals.material.diffuse_int = param[17].data.d_float; mapvals.material.diffuse_ref = param[18].data.d_float; mapvals.material.specular_ref = param[19].data.d_float; mapvals.material.highlight = param[20].data.d_float; mapvals.antialiasing = (gint) param[21].data.d_int32; mapvals.create_new_image = (gint) param[22].data.d_int32; mapvals.transparent_background = (gint) param[23].data.d_int32; check_drawables (); if (image_setup (drawable, FALSE)) compute_image (); } default: break; } } else status = GIMP_PDB_EXECUTION_ERROR; } values[0].data.d_status = status; gimp_drawable_detach (drawable); g_free (xpostab); g_free (ypostab); }