static void run_noninteractive(FacetsArgs *args, GwyContainer *data, GwyContainer *fdata, GwyDataField *dfield, GwyDataField *mfield, GQuark mquark) { GwyDataField *dtheta, *dphi, *mask; gwy_app_undo_qcheckpointv(data, 1, &mquark); mask = create_mask_field(dfield); dtheta = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/theta")); dphi = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/phi")); gwy_data_field_mark_facets(dtheta, dphi, args->theta0, args->phi0, args->tolerance, mask); if (mfield && args->combine) { if (args->combine_type == GWY_MERGE_UNION) gwy_data_field_grains_add(mfield, mask); else if (args->combine_type == GWY_MERGE_INTERSECTION) gwy_data_field_grains_intersect(mfield, mask); gwy_data_field_data_changed(mfield); } else if (mfield) { gwy_data_field_copy(mask, mfield, FALSE); gwy_data_field_data_changed(mfield); } else { gwy_container_set_object(data, mquark, mask); } g_object_unref(mask); }
static void poly_level_do_with_mask(GwyDataField *dfield, GwyDataField *mask, GwyDataField *result, GwyDataField *bg, const PolyLevelArgs *args) { gint *term_powers; gdouble *coeffs; gint nterms, i, j, k; k = 0; if (args->independent) { nterms = (args->col_degree + 1)*(args->row_degree + 1); term_powers = g_new(gint, 2*nterms); for (i = 0; i <= args->col_degree; i++) { for (j = 0; j <= args->row_degree; j++) { term_powers[k++] = i; term_powers[k++] = j; } } } else { nterms = (args->max_degree + 1)*(args->max_degree + 2)/2; term_powers = g_new(gint, 2*nterms); for (i = 0; i <= args->max_degree; i++) { for (j = 0; j <= args->max_degree - i; j++) { term_powers[k++] = i; term_powers[k++] = j; } } } coeffs = gwy_data_field_fit_poly(dfield, mask, nterms, term_powers, args->masking == GWY_MASK_EXCLUDE, NULL); gwy_data_field_subtract_poly(result, nterms, term_powers, coeffs); gwy_data_field_data_changed(result); if (bg) { for (i = 0; i < nterms; i++) { coeffs[i] = -coeffs[i]; } gwy_data_field_subtract_poly(bg, nterms, term_powers, coeffs); gwy_data_field_data_changed(bg); } g_free(coeffs); g_free(term_powers); }
static void unrotate_dialog_update(UnrotateControls *controls, UnrotateArgs *args) { gchar *lab; GwyPlaneSymmetry symm; GwyDataField *dfield, *rfield; GwyContainer *data; gdouble phi; gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->interp), args->interp); gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->symmetry), args->symmetry); symm = args->symmetry ? args->symmetry : controls->guess; phi = controls->correction[symm]; lab = g_strdup_printf("%.2f %s", 180.0/G_PI*phi, _("deg")); gtk_label_set_text(GTK_LABEL(controls->corrlabel), lab); g_free(lab); data = gwy_data_view_get_data(GWY_DATA_VIEW(controls->data_view)); dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/data")); rfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/show")); gwy_data_field_copy(dfield, rfield, FALSE); gwy_data_field_rotate(rfield, phi, args->interp); gwy_data_field_data_changed(rfield); }
static void preview(FacetsControls *controls, FacetsArgs *args) { GwyDataField *dtheta, *dphi, *mask, *mfield = NULL; GwyContainer *data, *fdata; data = controls->mydata; fdata = controls->fdata; add_mask_field(GWY_DATA_VIEW(controls->view), NULL); add_mask_field(GWY_DATA_VIEW(controls->fview), &mask_color); mask = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/mask")); dtheta = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/theta")); dphi = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/phi")); gwy_container_gis_object_by_name(fdata, "/1/mask", (GObject**)&mfield); gwy_data_field_mark_facets(dtheta, dphi, args->theta0, args->phi0, args->tolerance, mask); if (mfield && args->combine) { if (args->combine_type == GWY_MERGE_UNION) gwy_data_field_grains_add(mask, mfield); else if (args->combine_type == GWY_MERGE_INTERSECTION) gwy_data_field_grains_intersect(mask, mfield); } gwy_data_field_data_changed(mask); facets_mark_fdata(args, fdata); }
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 facet_view_recompute(GtkAdjustment *adj, FacetsControls *controls) { GwyVectorLayer *layer; GwyDataField *dfield; GwySelection *selection; const gchar *key; controls->args->kernel_size = gwy_adjustment_get_int(adj); gwy_app_wait_cursor_start(GTK_WINDOW(controls->dialog)); dfield = gwy_container_get_object_by_name(controls->mydata, "/0/data"); gwy_data_field_facet_distribution(dfield, 2*controls->args->kernel_size + 1, controls->fdata); /* XXX: Clear selections since we cannot recalculate it properly */ if (gwy_container_gis_object_by_name(controls->mydata, "/0/mask", &dfield)) { gwy_data_field_clear(dfield); gwy_data_field_data_changed(dfield); } layer = gwy_data_view_get_top_layer(GWY_DATA_VIEW(controls->fview)); key = gwy_vector_layer_get_selection_key(layer); selection = gwy_container_get_object_by_name(controls->fdata, key); gwy_selection_clear(selection); gwy_app_wait_cursor_finish(GTK_WINDOW(controls->dialog)); facets_invalidate(controls); }
static void preview(GEdgeControls *controls, GEdgeArgs *args) { GwyDataField *mask, *dfield; GwyPixmapLayer *layer; dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata, "/0/data")); /* Set up the mask */ if (!gwy_container_gis_object_by_name(controls->mydata, "/0/mask", &mask)) { mask = create_mask_field(dfield); gwy_container_set_object_by_name(controls->mydata, "/0/mask", mask); g_object_unref(mask); layer = gwy_layer_mask_new(); gwy_pixmap_layer_set_data_key(layer, "/0/mask"); gwy_layer_mask_set_color_key(GWY_LAYER_MASK(layer), "/0/mask"); gwy_data_view_set_alpha_layer(GWY_DATA_VIEW(controls->view), layer); } gwy_data_field_copy(dfield, mask, FALSE); gedge_process(dfield, mask, args); gwy_data_field_data_changed(mask); }
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 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 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 run_noninteractive(GFilterArgs *args, GwyContainer *data, GwyDataField *mfield, GQuark mquark) { gwy_app_undo_qcheckpointv(data, 1, &mquark); gfilter_process(mfield, args); gwy_data_field_data_changed(mfield); }
static void preview(GFilterControls *controls) { GwyDataField *mfield; mfield = gwy_container_get_object_by_name(controls->mydata, "/0/mask"); gfilter_process(mfield, controls->args); gwy_data_field_data_changed(mfield); controls->computed = TRUE; }
static void rotate_preview_draw(RotateControls *controls, RotateArgs *args) { GwyDataField *dfield, *rfield; GwyContainer *data; data = gwy_data_view_get_data(GWY_DATA_VIEW(controls->data_view)); dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/data")); rfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/show")); gwy_data_field_copy(dfield, rfield, FALSE); gwy_data_field_rotate(rfield, args->angle, args->interp); gwy_data_field_data_changed(rfield); }
static void poly_level_do_maximum(GwyDataField *dfield, GwyDataField *result, GwyDataField *bg, gint max_degree) { gint i; gdouble *coeffs; coeffs = gwy_data_field_fit_poly_max(dfield, max_degree, NULL); gwy_data_field_subtract_poly_max(result, max_degree, coeffs); gwy_data_field_data_changed(result); if (bg) { /* Invert coeffs, we do not have anything like add_polynomial() */ for (i = 0; i < (max_degree + 1)*(max_degree + 2)/2; i++) coeffs[i] = -coeffs[i]; gwy_data_field_subtract_poly_max(bg, max_degree, coeffs); gwy_data_field_data_changed(bg); } g_free(coeffs); }
static void poly_level_do_independent(GwyDataField *dfield, GwyDataField *result, GwyDataField *bg, gint col_degree, gint row_degree) { gint i; gdouble *coeffs; coeffs = gwy_data_field_fit_legendre(dfield, col_degree, row_degree, NULL); gwy_data_field_subtract_legendre(result, col_degree, row_degree, coeffs); gwy_data_field_data_changed(result); if (bg) { /* Invert coeffs, we do not have anything like add_polynomial() */ for (i = 0; i < (col_degree + 1)*(row_degree + 1); i++) coeffs[i] = -coeffs[i]; gwy_data_field_subtract_legendre(bg, col_degree, row_degree, coeffs); gwy_data_field_data_changed(bg); } g_free(coeffs); }
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 tip_update(TipModelControls *controls, G_GNUC_UNUSED TipModelArgs *args) { GwyDataField *vtipfield, *buffer; buffer = gwy_data_field_duplicate(controls->tip); gwy_data_field_resample(buffer, controls->vxres, controls->vyres, GWY_INTERPOLATION_ROUND); vtipfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->vtip, "/0/data")); gwy_data_field_copy(buffer, vtipfield, FALSE); g_object_unref(buffer); gwy_data_field_data_changed(vtipfield); }
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 preview(NoiseSynthControls *controls) { NoiseSynthArgs *args = controls->args; GwyDataField *dfield; dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata, "/0/data")); if (controls->dims->args->add && controls->surface) gwy_data_field_copy(controls->surface, dfield, FALSE); else gwy_data_field_clear(dfield); noise_synth_do(args, controls->dims->args, dfield); 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); }
static void mask_invert(GwyContainer *data, GwyRunType run) { GwyDataField *mfield; GQuark mquark; gint id; g_return_if_fail(run & MASKOPS_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_MASK_FIELD, &mfield, GWY_APP_MASK_FIELD_KEY, &mquark, GWY_APP_DATA_FIELD_ID, &id, 0); g_return_if_fail(mfield && mquark); gwy_app_undo_qcheckpointv(data, 1, &mquark); gwy_data_field_grains_invert(mfield); gwy_data_field_data_changed(mfield); gwy_app_channel_log_add_proc(data, id, id); }
static void null_offsets(GwyContainer *data, GwyRunType run) { GwyDataField *dfields[3]; GQuark quarks[3]; guint i; gint 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); for (i = 0; i < G_N_ELEMENTS(dfields); i++) { if (dfields[i] && !gwy_data_field_get_xoffset(dfields[i]) && !gwy_data_field_get_yoffset(dfields[i])) { quarks[i] = 0; dfields[i] = NULL; } } if (!dfields[0] && !dfields[1] && !dfields[2]) return; 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_set_xoffset(dfields[i], 0.0); gwy_data_field_set_yoffset(dfields[i], 0.0); gwy_data_field_data_changed(dfields[i]); } } gwy_app_channel_log_add_proc(data, id, id); }
static void laplace(GwyContainer *data, GwyRunType run) { GwyDataField *dfield, *mfield; GQuark dquark; gint id; 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); gwy_app_undo_qcheckpointv(data, 1, &dquark); gwy_data_field_laplace_solve(dfield, mfield, -1, 1.0); gwy_data_field_data_changed(dfield); gwy_app_channel_log_add_proc(data, id, id); }
static void facet_view_reset_maximum(FacetsControls *controls) { GwyDataField *mask = NULL; FacetsArgs *args; args = controls->args; args->theta0 = gwy_container_get_double_by_name(controls->fdata, "/theta0"); args->phi0 = gwy_container_get_double_by_name(controls->fdata, "/phi0"); facet_view_select_angle(controls, args->theta0, args->phi0); gtk_label_set_text(GTK_LABEL(controls->mtheta_label), ""); gtk_label_set_text(GTK_LABEL(controls->mphi_label), ""); if (gwy_container_gis_object_by_name(controls->fdata, "/0/mask", &mask)) { gwy_data_field_clear(mask); gwy_data_field_data_changed(mask); } }
static void facets_mark_fdata(FacetsArgs *args, GwyContainer *fdata) { GwyDataField *mask; gdouble q, r, cr, cro, cth0, sth0, cphi0, sphi0; gint hres, i, j; gdouble *m; hres = (FDATA_RES - 1)/2; cr = cos(args->tolerance); cth0 = cos(args->theta0); sth0 = sin(args->theta0); cphi0 = cos(args->phi0); sphi0 = sin(args->phi0); q = gwy_container_get_double_by_name(fdata, "/q"); mask = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/0/mask")); m = gwy_data_field_get_data(mask); for (i = 0; i < FDATA_RES; i++) { gdouble y = G_SQRT2/(q*hres)*(i - hres); for (j = 0; j < FDATA_RES; j++) { gdouble x = -G_SQRT2/(q*hres)*(j - hres); /** * Orthodromic distance computed directly from x, y: * cos(theta) = 1 - 2*(r/2)^2 * sin(theta) = r*sqrt(1 - (r/2)^2) * cos(phi) = x/r * sin(phi) = y/r * where r = hypot(x, y) **/ r = hypot(x, y); cro = cth0*(1.0 - r*r/2.0) + sth0*r*sqrt(1.0 - r*r/4.0)*(x/r*cphi0 + y/r*sphi0); m[i*FDATA_RES + j] = (cro >= cr); } } gwy_data_field_data_changed(mask); }
static void line_correct_match(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GwyDataLine *shifts; gint xres, yres, i; gdouble *d, *s; 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); yres = gwy_data_field_get_yres(dfield); xres = gwy_data_field_get_xres(dfield); d = gwy_data_field_get_data(dfield); shifts = gwy_data_line_new(yres, 1.0, TRUE); s = gwy_data_line_get_data(shifts); s[0] = 0.0; for (i = 1; i < yres; i++) { s[i] = find_shift(xres, d + i*xres, d + (i - 1)*xres); g_printerr("%d %g\n", i, s[i]); } gwy_data_line_cumulate(shifts); for (i = 1; i < yres; i++) gwy_data_field_area_add(dfield, 0, i, xres, 1, s[i]); gwy_data_field_add(dfield, -s[yres-1]/(xres*yres)); g_object_unref(shifts); gwy_data_field_data_changed(dfield); }
static void run_noninteractive(FacetsArgs *args, GwyContainer *data, GwyContainer *fdata, GwyDataField *dfield, GwyDataField *mfield, GQuark mquark) { GwyDataField *dtheta, *dphi; gwy_app_undo_qcheckpointv(data, 1, &mquark); if (!mfield) { mfield = create_mask_field(dfield); gwy_container_set_object(data, mquark, mfield); g_object_unref(mfield); } dtheta = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/theta")); dphi = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/phi")); gwy_data_field_mark_facets(dtheta, dphi, args->theta0, args->phi0, args->tolerance, mfield); gwy_data_field_data_changed(mfield); }
static void line_correct_median(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GwyDataLine *line, *modi; gint xres, yres, i; GQuark dquark; gdouble median; 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); xres = gwy_data_field_get_xres(dfield); line = gwy_data_line_new(xres, 1.0, FALSE); yres = gwy_data_field_get_yres(dfield); modi = gwy_data_line_new(yres, 1.0, FALSE); for (i = 0; i < yres; i++) { gwy_data_field_get_row(dfield, line, i); median = gwy_math_median(xres, gwy_data_line_get_data(line)); gwy_data_line_set_val(modi, i, median); } median = gwy_data_line_get_median(modi); for (i = 0; i < yres; i++) { gwy_data_field_area_add(dfield, 0, i, xres, 1, median - gwy_data_line_get_val(modi, i)); } g_object_unref(modi); g_object_unref(line); gwy_data_field_data_changed(dfield); }
static void tilt(GwyContainer *data, GwyRunType run) { GwyDataField *dfield; GQuark quark; TiltArgs args; gboolean ok; g_return_if_fail(run & TILT_RUN_MODES); gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, GWY_APP_DATA_FIELD_KEY, &quark, 0); g_return_if_fail(dfield); tilt_load_args(gwy_app_settings_get(), &args); if (run == GWY_RUN_INTERACTIVE) { ok = tilt_dialog(&args, dfield); tilt_save_args(gwy_app_settings_get(), &args); if (!ok) return; } gwy_app_undo_qcheckpointv(data, 1, &quark); { /* Use negative values since the module says `Tilt', * not `Remove tilt' */ double bx = -args.dx*gwy_data_field_get_xmeasure(dfield); double by = -args.dy*gwy_data_field_get_ymeasure(dfield); double c = -0.5*(bx*gwy_data_field_get_xres(dfield) + by*gwy_data_field_get_yres(dfield)); gwy_data_field_plane_level(dfield, c, bx, by); } gwy_data_field_data_changed(dfield); }
static void preview(FacetsControls *controls, FacetsArgs *args) { GwyDataField *dtheta, *dphi, *dfield, *mfield; GwyContainer *data, *fdata; data = controls->mydata; fdata = controls->fdata; add_mask_layer(GWY_DATA_VIEW(controls->view), NULL); add_mask_layer(GWY_DATA_VIEW(controls->fview), &mask_color); dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/data")); mfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(data, "/0/mask")); dtheta = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/theta")); dphi = GWY_DATA_FIELD(gwy_container_get_object_by_name(fdata, "/phi")); gwy_data_field_mark_facets(dtheta, dphi, args->theta0, args->phi0, args->tolerance, mfield); gwy_data_field_data_changed(mfield); facets_mark_fdata(args, fdata); facets_invalidate(controls); }