コード例 #1
0
ファイル: grain_cross.c プロジェクト: DavidMercier/gwyddion
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);
}
コード例 #2
0
ファイル: gwygrainvaluemenu.c プロジェクト: cbuehler/gwyddion
static gboolean
units_are_good(GtkTreeView *treeview,
               GwyGrainValue *gvalue)
{
    GrainValueViewPrivate *priv;

    priv = g_object_get_qdata(G_OBJECT(treeview), priv_quark);
    if (priv->same_units)
        return TRUE;

    return !(gwy_grain_value_get_flags(gvalue) & GWY_GRAIN_VALUE_SAME_UNITS);
}