static void copy_info(GwySurface *dest, const GwySurface *src) { Surface *dpriv = dest->priv, *spriv = src->priv; /* SI Units can be NULL */ if (spriv->si_unit_xy && dpriv->si_unit_xy) gwy_serializable_clone(G_OBJECT(spriv->si_unit_xy), G_OBJECT(dpriv->si_unit_xy)); else if (spriv->si_unit_xy && !dpriv->si_unit_xy) dpriv->si_unit_xy = gwy_si_unit_duplicate(spriv->si_unit_xy); else if (!spriv->si_unit_xy && dpriv->si_unit_xy) GWY_OBJECT_UNREF(dpriv->si_unit_xy); if (spriv->si_unit_z && dpriv->si_unit_z) gwy_serializable_clone(G_OBJECT(spriv->si_unit_z), G_OBJECT(dpriv->si_unit_z)); else if (spriv->si_unit_z && !dpriv->si_unit_z) dpriv->si_unit_z = gwy_si_unit_duplicate(spriv->si_unit_z); else if (!spriv->si_unit_z && dpriv->si_unit_z) GWY_OBJECT_UNREF(dpriv->si_unit_z); dpriv->cached_ranges = spriv->cached_ranges; dpriv->min = spriv->min; dpriv->max = spriv->max; dpriv->cached_checksum = spriv->cached_checksum; gwy_assign(dpriv->checksum, spriv->checksum, G_N_ELEMENTS(spriv->checksum)); }
/** * gwy_surface_copy_units_to_data_field: * @surface: A surface. * @data_field: A two-dimensional data field. * * Sets lateral and value units of a data field to match a surface. * * Since: 2.46 **/ void gwy_surface_copy_units_to_data_field(GwySurface *surface, GwyDataField *data_field) { Surface *priv; g_return_if_fail(GWY_IS_SURFACE(surface)); g_return_if_fail(GWY_IS_DATA_FIELD(data_field)); priv = surface->priv; if (priv->si_unit_xy && data_field->si_unit_xy) gwy_serializable_clone(G_OBJECT(priv->si_unit_xy), G_OBJECT(data_field->si_unit_xy)); else if (priv->si_unit_xy && !data_field->si_unit_xy) data_field->si_unit_xy = gwy_si_unit_duplicate(priv->si_unit_xy); else if (!priv->si_unit_xy && data_field->si_unit_xy) GWY_OBJECT_UNREF(data_field->si_unit_xy); if (priv->si_unit_z && data_field->si_unit_z) gwy_serializable_clone(G_OBJECT(priv->si_unit_z), G_OBJECT(data_field->si_unit_z)); else if (priv->si_unit_z && !data_field->si_unit_z) data_field->si_unit_z = gwy_si_unit_duplicate(priv->si_unit_z); else if (!priv->si_unit_z && data_field->si_unit_z) GWY_OBJECT_UNREF(data_field->si_unit_z); }
static void gwy_spectra_clone_real(GObject *source, GObject *copy) { GwySpectra *spectra, *clone; GwyDataLine *dataline; guint i; g_return_if_fail(GWY_IS_SPECTRA(source)); g_return_if_fail(GWY_IS_SPECTRA(copy)); spectra = GWY_SPECTRA(source); clone = GWY_SPECTRA(copy); /* Title */ g_free(clone->title); clone->title = g_strdup(spectra->title); /* Remove any existing datalines in the clone */ for (i = 0; i < clone->spectra->len; i++) { g_object_unref(g_array_index(clone->spectra, GwySpectrum, i).ydata); } /* Copy the spectra to clone */ g_array_set_size(clone->spectra, 0); g_array_append_vals(clone->spectra, spectra->spectra->data, spectra->spectra->len); /* Clone the spectra theselves */ for (i = 0; i < spectra->spectra->len; i++) { dataline = g_array_index(clone->spectra, GwySpectrum, i).ydata; g_array_index(clone->spectra, GwySpectrum, i).ydata = gwy_data_line_duplicate(dataline); } /* SI Units can be NULL */ if (spectra->si_unit_xy && clone->si_unit_xy) gwy_serializable_clone(G_OBJECT(spectra->si_unit_xy), G_OBJECT(clone->si_unit_xy)); else if (spectra->si_unit_xy && !clone->si_unit_xy) clone->si_unit_xy = gwy_si_unit_duplicate(spectra->si_unit_xy); else if (!spectra->si_unit_xy && clone->si_unit_xy) gwy_object_unref(clone->si_unit_xy); }
static GwyContainer* rawxyz_load(const gchar *filename, GwyRunType mode, GError **error) { GwyContainer *settings, *container = NULL; GwySurface *surface = NULL; RawXYZArgs args; GwySIUnit *unit; gint power10; gdouble q; gchar *buffer = NULL; gsize size; GError *err = NULL; gboolean ok; guint k; if (!g_file_get_contents(filename, &buffer, &size, &err)) { err_GET_FILE_CONTENTS(error, &err); goto fail; } surface = read_xyz_points(buffer); g_free(buffer); if (!surface->n) { err_NO_DATA(error); goto fail; } settings = gwy_app_settings_get(); rawxyz_load_args(settings, &args); if (mode == GWY_RUN_INTERACTIVE) { ok = rawxyz_dialog(&args, surface); rawxyz_save_args(settings, &args); if (!ok) { err_CANCELLED(error); goto fail; } } unit = gwy_si_unit_new_parse(args.xy_units, &power10); if (power10) { q = pow10(power10); for (k = 0; k < surface->n; k++) { surface->data[k].x *= q; surface->data[k].y *= q; } gwy_surface_invalidate(surface); } gwy_serializable_clone(G_OBJECT(unit), G_OBJECT(gwy_surface_get_si_unit_xy(surface))); unit = gwy_si_unit_new_parse(args.z_units, &power10); if (power10) { q = pow10(power10); for (k = 0; k < surface->n; k++) surface->data[k].z *= q; gwy_surface_invalidate(surface); } gwy_serializable_clone(G_OBJECT(unit), G_OBJECT(gwy_surface_get_si_unit_z(surface))); container = gwy_container_new(); gwy_container_set_object(container, gwy_app_get_surface_key_for_id(0), surface); gwy_app_xyz_title_fall_back(container, 0); gwy_file_xyz_import_log_add(container, 0, NULL, filename); fail: g_free(args.xy_units); g_free(args.z_units); GWY_OBJECT_UNREF(surface); return container; }