Beispiel #1
0
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));
}
Beispiel #2
0
/**
 * 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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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;
}