static void rotate_180(GwyContainer *data, GwyRunType run) { GwyDataField *dfields[3]; GQuark quarks[3]; gint id; gint i; g_return_if_fail(run & BASICOPS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, dfields + 0, GWY_APP_MASK_FIELD, dfields + 1, GWY_APP_SHOW_FIELD, dfields + 2, GWY_APP_DATA_FIELD_KEY, quarks + 0, GWY_APP_MASK_FIELD_KEY, quarks + 1, GWY_APP_SHOW_FIELD_KEY, quarks + 2, GWY_APP_DATA_FIELD_ID, &id, 0); clean_quarks(G_N_ELEMENTS(quarks), quarks, dfields); gwy_app_undo_qcheckpointv(data, G_N_ELEMENTS(quarks), quarks); for (i = 0; i < G_N_ELEMENTS(dfields); i++) { if (dfields[i]) { gwy_data_field_invert(dfields[i], TRUE, TRUE, FALSE); gwy_data_field_data_changed(dfields[i]); } } gwy_app_channel_log_add_proc(data, id, id); }
static void psdflp(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *lpsdf; PSDFLPArgs args; gboolean ok; gint id, newid; g_return_if_fail(run & PSDFLP_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); psdflp_load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = psdflp_dialog(&args); psdflp_save_args(gwy_app_settings_get(), &args); if (!ok) return; } lpsdf = gwy_data_field_new(1, 1, 1.0, 1.0, FALSE); psdflp_do(&args, dfield, lpsdf); newid = gwy_app_data_browser_add_data_field(lpsdf, data, TRUE); g_object_unref(lpsdf); gwy_app_set_data_field_title(data, newid, "Log-phi PSDF"); gwy_app_channel_log_add_proc(data, id, newid); }
static void rotate_counterclockwise_90(GwyContainer *data, GwyRunType run) { GwyDataField *dfields[3], *newfield; GQuark quarks[3]; gint i, id; g_return_if_fail(run & BASICOPS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, dfields + 0, GWY_APP_MASK_FIELD, dfields + 1, GWY_APP_SHOW_FIELD, dfields + 2, GWY_APP_DATA_FIELD_KEY, quarks + 0, GWY_APP_MASK_FIELD_KEY, quarks + 1, GWY_APP_SHOW_FIELD_KEY, quarks + 2, GWY_APP_DATA_FIELD_ID, &id, 0); clean_quarks(G_N_ELEMENTS(quarks), quarks, dfields); gwy_app_undo_qcheckpointv(data, G_N_ELEMENTS(quarks), quarks); for (i = 0; i < G_N_ELEMENTS(dfields); i++) { if (dfields[i]) { newfield = gwy_data_field_new_alike(dfields[i], FALSE); flip_xy(dfields[i], newfield, TRUE); gwy_container_set_object(data, quarks[i], newfield); g_object_unref(newfield); } } gwy_app_data_clear_selections(data, id); gwy_app_channel_log_add_proc(data, id, id); }
static void facets_analyse(GwyContainer *data, GwyRunType run) { FacetsArgs args; GwyContainer *fdata; GwyDataField *dfield, *mfield; GQuark mquark; gint id; g_return_if_fail(run & FACETS_RUN_MODES); g_return_if_fail(g_type_from_name("GwyLayerPoint")); facets_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD_KEY, &mquark, GWY_APP_MASK_FIELD, &mfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && mquark); fdata = gwy_container_new(); gwy_data_field_facet_distribution(dfield, 2*args.kernel_size + 1, fdata); args.theta0 = gwy_container_get_double_by_name(fdata, "/theta0"); args.phi0 = gwy_container_get_double_by_name(fdata, "/phi0"); if (run == GWY_RUN_IMMEDIATE) run_noninteractive(&args, data, fdata, dfield, mfield, mquark); else { facets_dialog(&args, data, fdata, dfield, mfield, id, mquark); facets_save_args(gwy_app_settings_get(), &args); } g_object_unref(fdata); }
static void level_grains(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GwyDataField *mfield; LevelGrainsArgs args; gboolean ok; GQuark quark; gint id; g_return_if_fail(run & LEVEL_GRAINS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &quark, GWY_APP_DATA_FIELD_ID, &id, GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield && quark); load_args(gwy_app_settings_get(), &args); if (run != GWY_RUN_IMMEDIATE) { ok = level_grains_dialog(&args); save_args(gwy_app_settings_get(), &args); if (!ok) return; } level_grains_do(&args, data, quark, id, dfield, mfield); gwy_app_channel_log_add_proc(data, id, id); }
static void mask_extract(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GwySIUnit *siunit; gint oldid, newid; g_return_if_fail(run & MASKOPS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_MASK_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &oldid, 0); g_return_if_fail(dfield); dfield = gwy_data_field_duplicate(dfield); gwy_data_field_clamp(dfield, 0.0, 1.0); /* Other functions should set the units correctly, but do not trust them */ siunit = gwy_si_unit_new(""); gwy_data_field_set_si_unit_z(dfield, siunit); g_object_unref(siunit); newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE); g_object_unref(dfield); gwy_app_set_data_field_title(data, newid, _("Mask")); gwy_app_channel_log_add_proc(data, oldid, newid); }
static void extract_path(GwyContainer *data, GwyRunType run) { ExtrPathArgs args; GwySelection *selection = NULL; GwyDataField *dfield; gboolean realsquare; gchar key[48]; gint id; gboolean ok; g_return_if_fail(run & EXTR_PATH_RUN_MODES); g_return_if_fail(g_type_from_name("GwyLayerPath")); extr_path_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); g_snprintf(key, sizeof(key), "/%d/select/path", id); gwy_container_gis_object_by_name(data, key, &selection); ok = extr_path_dialogue(&args, selection); extr_path_save_args(gwy_app_settings_get(), &args); if (!ok) return; realsquare = FALSE; g_snprintf(key, sizeof(key), "/%d/data/realsquare", id); gwy_container_gis_boolean_by_name(data, key, &realsquare); extract_path_do(data, dfield, realsquare, selection, &args); }
static void noise_synth(GwyContainer *data, GwyRunType run) { NoiseSynthArgs args; GwyDimensionArgs dimsargs; GwyDataField *dfield; GQuark quark; gint id; g_return_if_fail(run & NOISE_SYNTH_RUN_MODES); noise_synth_load_args(gwy_app_settings_get(), &args, &dimsargs); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, GWY_APP_DATA_FIELD_KEY, &quark, 0); if (run == GWY_RUN_IMMEDIATE || noise_synth_dialog(&args, &dimsargs, data, dfield, id)) run_noninteractive(&args, &dimsargs, data, dfield, id, quark); if (run == GWY_RUN_INTERACTIVE) noise_synth_save_args(gwy_app_settings_get(), &args, &dimsargs); gwy_dimensions_free_args(&dimsargs); }
static void merge(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { MergeArgs args; GwyContainer *settings; g_return_if_fail(run & MERGE_RUN_MODES); settings = gwy_app_settings_get(); merge_load_args(settings, &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.op1.id, GWY_APP_CONTAINER_ID, &args.op1.datano, 0); if (merge_dialog(&args)) { if (args.mode == GWY_MERGE_MODE_NONE) merge_do_none(&args); else if (args.mode == GWY_MERGE_MODE_JOIN) merge_do_join(&args); else merge_do_correlate(&args); } merge_save_args(settings, &args); }
static void entropy(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield; EntropyArgs args; gboolean ok, same_units; g_return_if_fail(run & ENTROPY_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield); load_args(gwy_app_settings_get(), &args); same_units = gwy_si_unit_equal(gwy_data_field_get_si_unit_xy(dfield), gwy_data_field_get_si_unit_z(dfield)); if (run == GWY_RUN_INTERACTIVE) { if (!same_units && args.mode == ENTROPY_ANGLES) args.mode = ENTROPY_SLOPES; ok = entropy_dialog(&args, dfield, mfield); save_args(gwy_app_settings_get(), &args); if (!ok) return; } }
static void line_correct_step(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mask; GQuark dquark; g_return_if_fail(run & LINECORR_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_KEY, &dquark, 0); g_return_if_fail(dfield && dquark); gwy_app_undo_qcheckpointv(data, 1, &dquark); gwy_data_field_absdiff_line_correct(dfield); mask = gwy_data_field_new_alike(dfield, TRUE); line_correct_step_iter(dfield, mask); gwy_data_field_clear(mask); line_correct_step_iter(dfield, mask); g_object_unref(mask); gwy_data_field_filter_conservative(dfield, 5); gwy_data_field_data_changed(dfield); }
static void filter(GwyGraph *graph) { GwyContainer *data; GwyGraphCurveModel *cmodel, *cmodelnew; GwyGraphModel *model; const gdouble *xdata, *ydata; gdouble *newydata; gint i, ncurves, ndata; GQuark quark; gwy_app_data_browser_get_current(GWY_APP_CONTAINER, &data, GWY_APP_GRAPH_MODEL_KEY, &quark, 0); gwy_app_undo_qcheckpointv(data, 1, &quark); model = gwy_graph_get_model(graph); ncurves = gwy_graph_model_get_n_curves(model); for (i = 0; i < ncurves; i++) { cmodel = gwy_graph_model_get_curve(model, i); cmodelnew = gwy_graph_curve_model_new_alike(cmodel); xdata = gwy_graph_curve_model_get_xdata(cmodel); ydata = gwy_graph_curve_model_get_ydata(cmodel); ndata = gwy_graph_curve_model_get_ndata(cmodel); newydata = g_new(gdouble, ndata); filter_do(ydata, newydata, ndata); gwy_graph_curve_model_set_data(cmodelnew, xdata, newydata, ndata); g_free(newydata); gwy_graph_model_remove_curve(gwy_graph_get_model(graph), i); gwy_graph_model_add_curve(model, cmodelnew); g_object_unref(cmodelnew); } }
static void line_correct_median_difference(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; gdouble *diffs, *row, *prev; gint xres, yres, i, j; gdouble median; GQuark dquark; g_return_if_fail(run & GWY_RUN_IMMEDIATE); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_KEY, &dquark, 0); g_return_if_fail(dfield && dquark); gwy_app_undo_qcheckpointv(data, 1, &dquark); xres = gwy_data_field_get_xres(dfield); yres = gwy_data_field_get_yres(dfield); row = gwy_data_field_get_data(dfield); diffs = g_new(gdouble, xres); for (i = 1; i < yres; i++) { prev = row; row += xres; for (j = 0; j < xres; j++) diffs[j] = prev[j] - row[j]; median = gwy_math_median(xres, diffs); for (j = 0; j < xres; j++) row[j] += median; } g_free(diffs); gwy_data_field_data_changed(dfield); }
static void poly_level(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield; GQuark quark; PolyLevelArgs args; gboolean ok; gint id; g_return_if_fail(run & POLYLEVEL_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &quark, GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && quark); load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = poly_level_dialog(&args, data, dfield, mfield, id); save_args(gwy_app_settings_get(), &args); if (!ok) return; } poly_level_do(data, dfield, mfield, quark, id, &args); }
static void grain_dist(GwyContainer *data, GwyRunType run) { GwySIUnit *siunitxy, *siunitz; GrainDistArgs args; GwyDataField *dfield; GwyDataField *mfield; g_return_if_fail(run & DIST_RUN_MODES); grain_dist_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield && mfield); siunitxy = gwy_data_field_get_si_unit_xy(dfield); siunitz = gwy_data_field_get_si_unit_z(dfield); args.units_equal = gwy_si_unit_equal(siunitxy, siunitz); args.bitmask = 0xffffffffU; if (!args.units_equal) args.bitmask ^= 1 << GWY_GRAIN_VALUE_SURFACE_AREA; if (run == GWY_RUN_IMMEDIATE) grain_dist_run(&args, data, dfield, mfield); else { grain_dist_dialog(&args, data, dfield, mfield); grain_dist_save_args(gwy_app_settings_get(), &args); } }
static void presentation_logscale(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *sfield; GQuark squark; gdouble *d; gdouble min, max, m0; gint xres, yres, i, zeroes, id; g_return_if_fail(run & PRESENTATIONOPS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_SHOW_FIELD_KEY, &squark, GWY_APP_SHOW_FIELD, &sfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && squark); xres = gwy_data_field_get_xres(dfield); yres = gwy_data_field_get_yres(dfield); gwy_app_undo_qcheckpointv(data, 1, &squark); if (!sfield) { sfield = gwy_data_field_duplicate(dfield); gwy_container_set_object(data, squark, sfield); g_object_unref(sfield); } else { gwy_data_field_resample(sfield, xres, yres, GWY_INTERPOLATION_NONE); gwy_data_field_copy(dfield, sfield, FALSE); } d = gwy_data_field_get_data(sfield); zeroes = 0; max = 0; min = G_MAXDOUBLE; for (i = 0; i < xres*yres; i++) { d[i] = ABS(d[i]); if (G_UNLIKELY(d[i] > max)) max = d[i]; if (d[i] == 0.0) zeroes++; else if (G_UNLIKELY(d[i] < min)) min = d[i]; } if (min == max || zeroes == xres*yres) return; if (!zeroes) { for (i = 0; i < xres*yres; i++) d[i] = log(d[i]); } else { m0 = log(min) - log(max/min)/512.0; for (i = 0; i < xres*yres; i++) d[i] = d[i] ? log(d[i]) : m0; } gwy_data_field_data_changed(sfield); gwy_app_channel_log_add_proc(data, id, id); }
static void grain_cross(GwyContainer *data, GwyRunType run) { GwySIUnit *siunitxy, *siunitz; GrainCrossArgs args; GwyDataField *dfield; GwyDataField *mfield; gint id; g_return_if_fail(run & CROSS_RUN_MODES); grain_cross_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield && mfield); siunitxy = gwy_data_field_get_si_unit_xy(dfield); siunitz = gwy_data_field_get_si_unit_z(dfield); args.units_equal = gwy_si_unit_equal(siunitxy, siunitz); if (!args.units_equal) { GwyGrainValue *abscissa, *ordinate; GwyGrainValueFlags aflags, oflags; abscissa = gwy_grain_values_get_grain_value(args.abscissa); ordinate = gwy_grain_values_get_grain_value(args.ordinate); aflags = gwy_grain_value_get_flags(abscissa); oflags = gwy_grain_value_get_flags(ordinate); if ((aflags | oflags) & GWY_GRAIN_VALUE_SAME_UNITS) { if (run == GWY_RUN_IMMEDIATE) { require_same_units_dialog(data, id); return; } if (aflags & GWY_GRAIN_VALUE_SAME_UNITS) { args.abscissa = grain_cross_defaults.abscissa; args.abscissa_expanded = grain_cross_defaults.abscissa_expanded; } if (oflags & GWY_GRAIN_VALUE_SAME_UNITS) { args.ordinate = grain_cross_defaults.ordinate; args.ordinate_expanded = grain_cross_defaults.ordinate_expanded; } } } args.grains = g_new0(gint, mfield->xres*mfield->yres); args.ngrains = gwy_data_field_number_grains(mfield, args.grains); if (run == GWY_RUN_IMMEDIATE) grain_cross_run(&args, data, dfield); else { if (grain_cross_dialog(&args, dfield)) grain_cross_run(&args, data, dfield); grain_cross_save_args(gwy_app_settings_get(), &args); } g_free(args.grains); }
static void laplace(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield, *buffer; GQuark dquark; gdouble error, cor, maxer, lastfrac, frac, starter; gint i, id; gboolean cancelled = FALSE; g_return_if_fail(run & LAPLACE_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &dquark, GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && dquark && mfield); maxer = gwy_data_field_get_rms(dfield)/1.0e4; gwy_app_wait_start(gwy_app_find_window_for_channel(data, id), _("Laplace interpolation...")); dfield = gwy_data_field_duplicate(dfield); buffer = gwy_data_field_new_alike(dfield, TRUE); gwy_data_field_correct_average(dfield, mfield); cor = 0.2; error = 0.0; lastfrac = 0.0; starter = 0.0; for (i = 0; i < 5000; i++) { gwy_data_field_correct_laplace_iteration(dfield, mfield, buffer, cor, &error); if (error < maxer) break; if (!i) starter = error; frac = log(error/starter)/log(maxer/starter); if ((i/(gdouble)(5000)) > frac) frac = i/(gdouble)(5000); if (lastfrac > frac) frac = lastfrac; if (!gwy_app_wait_set_fraction(frac)) { cancelled = TRUE; break; } lastfrac = frac; } gwy_app_wait_finish(); if (!cancelled) { gwy_app_undo_qcheckpointv(data, 1, &dquark); gwy_container_set_object(data, dquark, dfield); gwy_app_channel_log_add_proc(data, id, id); } g_object_unref(dfield); g_object_unref(buffer); }
static void create_merged_field(GwyContainer *data, gint id1, GwyDataField *dfield1, GwyDataField *dfield2, gint px1, gint py1, gint px2, gint py2, GwyMergeBoundaryType boundary, GwyMergeDirectionType dir, gboolean create_mask, gboolean crop_to_rectangle) { GwyDataField *result, *outsidemask = NULL; gint newxres, newyres, newid; gwy_debug("field1 %dx%d", dfield1->xres, dfield1->yres); gwy_debug("field2 %dx%d", dfield2->xres, dfield2->yres); gwy_debug("px1: %d, py1: %d, px2: %d, py2: %d", px1, py1, px2, py2); result = gwy_data_field_new_alike(dfield1, FALSE); newxres = MAX(dfield1->xres + px1, dfield2->xres + px2); newyres = MAX(dfield1->yres + py1, dfield2->yres + py2); gwy_data_field_resample(result, newxres, newyres, GWY_INTERPOLATION_NONE); if (create_mask && !crop_to_rectangle) { outsidemask = gwy_data_field_new_alike(result, FALSE); gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(outsidemask), NULL); } put_fields(dfield1, dfield2, result, outsidemask, boundary, px1, py1, px2, py2); if (crop_to_rectangle) { GwyOrientation orientation = GWY_ORIENTATION_HORIZONTAL; if (dir == GWY_MERGE_DIRECTION_UP || dir == GWY_MERGE_DIRECTION_DOWN) orientation = GWY_ORIENTATION_VERTICAL; crop_result(result, dfield1, dfield2, orientation, px1, py1, px2, py2); } gwy_app_data_browser_get_current(GWY_APP_CONTAINER, &data, 0); newid = gwy_app_data_browser_add_data_field(result, data, TRUE); gwy_app_set_data_field_title(data, newid, _("Merged images")); gwy_app_sync_data_items(data, data, id1, newid, FALSE, GWY_DATA_ITEM_PALETTE, GWY_DATA_ITEM_MASK_COLOR, GWY_DATA_ITEM_RANGE, 0); if (outsidemask) { if (gwy_data_field_get_max(outsidemask) > 0.0) { GQuark quark = gwy_app_get_mask_key_for_id(newid); gwy_container_set_object(data, quark, outsidemask); } g_object_unref(outsidemask); } gwy_app_channel_log_add_proc(data, -1, newid); g_object_unref(result); }
static void dwt(GwyContainer *data, GwyRunType run) { GtkWidget *dialog; GwyDataField *dfield; GwyDataLine *wtcoefs; DWTArgs args; gboolean ok; gint xsize, ysize, newsize, newid, oldid, i; g_return_if_fail(run & DWT_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &oldid, 0); g_return_if_fail(dfield); xsize = gwy_data_field_get_xres(dfield); ysize = gwy_data_field_get_yres(dfield); if (xsize != ysize) { dialog = gtk_message_dialog_new (gwy_app_find_window_for_channel(data, oldid), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("%s: Data must be square."), "DWT"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return; } for (newsize = 1, i = xsize-1; i; i >>= 1, newsize <<= 1) ; dwt_load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = dwt_dialog(&args, xsize, newsize); dwt_save_args(gwy_app_settings_get(), &args); if (!ok) return; } dfield = gwy_data_field_new_resampled(dfield, newsize, newsize, args.interp); gwy_data_field_add(dfield, -gwy_data_field_get_avg(dfield)); wtcoefs = GWY_DATA_LINE(gwy_data_line_new(10, 10, TRUE)); wtcoefs = gwy_dwt_set_coefficients(wtcoefs, args.wavelet); gwy_data_field_dwt(dfield, wtcoefs, 1, 4); newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE); g_object_unref(dfield); gwy_app_set_data_field_title(data, newid, _("DWT")); gwy_app_sync_data_items(data, data, oldid, newid, FALSE, GWY_DATA_ITEM_PALETTE, 0); g_object_unref(wtcoefs); }
static void tip_model(GwyContainer *data, GwyRunType run) { TipModelArgs args; g_return_if_fail(run & TIP_MODEL_RUN_MODES); tip_model_load_args(gwy_app_settings_get(), &args); args.object.data = data; gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.object.id, 0); tip_model_dialog(&args); tip_model_save_args(gwy_app_settings_get(), &args); }
static void grain_filter(GwyContainer *data, GwyRunType run) { GwySIUnit *siunitxy, *siunitz; GFilterArgs args; GwyDataField *dfield, *mfield; GQuark mquark; gint id; g_return_if_fail(run & GFILTER_RUN_MODES); gfilter_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, GWY_APP_MASK_FIELD_KEY, &mquark, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && mfield); siunitxy = gwy_data_field_get_si_unit_xy(dfield); siunitz = gwy_data_field_get_si_unit_z(dfield); args.units_equal = gwy_si_unit_equal(siunitxy, siunitz); args.valuedata = calculate_all_grain_values(dfield, mfield, &args.ngrains, &args.grains); args.sortedvaluedata = sort_grain_values(args.valuedata, &args.nuniqvalues, args.ngrains); if (run == GWY_RUN_INTERACTIVE && !args.ngrains) { GtkWidget *dialog; gfilter_free_args(&args); dialog = gtk_message_dialog_new (gwy_app_find_window_for_channel(data, id), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("There are no grains to filter.")); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return; } if (run == GWY_RUN_IMMEDIATE) { run_noninteractive(&args, data, mfield, mquark); gwy_app_channel_log_add_proc(data, id, id); } else gfilter_dialog(&args, data, dfield, mfield, id, mquark); gfilter_free_args(&args); }
static void xydenoise(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { XYdenoiseArgs args; g_return_if_fail(run & XYDENOISE_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.op1.id, GWY_APP_CONTAINER_ID, &args.op1.datano, 0); if (xydenoise_dialog(&args)) xydenoise_do(&args); }
static void presentation_remove(GwyContainer *data, GwyRunType run) { GQuark quark; gint id; g_return_if_fail(run & PRESENTATIONOPS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_SHOW_FIELD_KEY, &quark, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(quark); gwy_app_undo_qcheckpointv(data, 1, &quark); gwy_container_remove(data, quark); gwy_app_channel_log_add_proc(data, id, id); }
static void tip_blind(G_GNUC_UNUSED GwyContainer *data, GwyRunType run) { TipBlindArgs args; g_return_if_fail(run & TIP_BLIND_RUN_MODES); tip_blind_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.orig.id, GWY_APP_CONTAINER_ID, &args.orig.datano, 0); args.source = args.orig; tip_blind_dialog(&args); free_stripe_results(&args); }
static void zero_mean(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GQuark quark; g_return_if_fail(run & LEVEL_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &quark, GWY_APP_DATA_FIELD, &dfield, 0); g_return_if_fail(dfield && quark); gwy_app_undo_qcheckpoint(data, quark, NULL); gwy_data_field_add(dfield, -gwy_data_field_get_avg(dfield)); gwy_data_field_data_changed(dfield); }
static void mask_remove(GwyContainer *data, GwyRunType run) { GQuark mquark; gint id; g_return_if_fail(run & MASKOPS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_MASK_FIELD_KEY, &mquark, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(mquark); gwy_app_undo_qcheckpointv(data, 1, &mquark); gwy_container_remove(data, mquark); gwy_app_channel_log_add_proc(data, id, id); }
static void deposit(GwyContainer *data, GwyRunType run) { DepositArgs args; GwyDataField *dfield; gint id; g_return_if_fail(run & DEPOSIT_RUN_MODES); deposit_load_args(gwy_app_settings_get(), &args); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield); deposit_dialog(&args, data, dfield, id); deposit_save_args(gwy_app_settings_get(), &args); }
static void fraccor(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield; GQuark dquark; g_return_if_fail(run & FRACCOR_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &dquark, GWY_APP_DATA_FIELD, &dfield, GWY_APP_MASK_FIELD, &mfield, 0); g_return_if_fail(dfield && dquark && mfield); gwy_app_undo_qcheckpointv(data, 1, &dquark); gwy_data_field_fractal_correction(dfield, mfield, GWY_INTERPOLATION_LINEAR); gwy_data_field_data_changed(dfield); }
static void fix_zero(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GQuark quark; gint id; g_return_if_fail(run & LEVEL_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_KEY, &quark, GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(dfield && quark); gwy_app_undo_qcheckpoint(data, quark, NULL); gwy_data_field_add(dfield, -gwy_data_field_get_min(dfield)); gwy_app_channel_log_add_proc(data, id, id); gwy_data_field_data_changed(dfield); }