⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gseisviewaxisz.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 C
📖 第 1 页 / 共 3 页
字号:
                start_label += labels_step;            end_label = ((gint)(last_value / labels_step)) * labels_step;            while (end_label > last_value)                end_label -= labels_step;            labels_num = (end_label - start_label) / labels_step + 1;            labels_step_object = labels_step * value_to_object_scale;            for (;;) {                if (ten_factor < 2.0)                    ten_factor = 2.0;                else if (ten_factor < 2.4)                    ten_factor = 2.5;                else if (ten_factor < 4.0)                    ten_factor = 5.0;                else {                    power_of_ten++;                    ten_powered = pow (10, power_of_ten);                    ten_factor = 1.0;                }                labels_residue = ten_powered * ten_factor - (gint)(ten_powered * ten_factor);                labels_precision = 0;                while (labels_residue - (gint)(labels_residue)) {                    labels_precision++;                    labels_residue *= 10.0;                }                if (G_SEIS_VIEW_AXIS_Z_FLOAT == private->format &&                    labels_precision <= private->precision)                    break;                else if (0 == labels_precision)                    break;            }        }        start_label_object = data_visibility->fast_start_object + (start_label - first_value) * value_to_object_scale;        private->display_list_base = glGenLists (1);        glNewList (private->display_list_base, GL_COMPILE);        glPushAttrib (GL_LINE_BIT | GL_LIST_BIT);        glListBase (private->font_list_base);        /* Preceding label - might be visible partially */        gdouble preceding_label = start_label - labels_step;        if ((preceding_label >= private->min_value && preceding_label <= private->max_value) ||            (preceding_label <= private->min_value && preceding_label >= private->max_value)) {            if (G_SEIS_VIEW_AXIS_Z_INTEGER == private->format)                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, (gint)(start_label - labels_step));            else                g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, start_label - labels_step);            for (label_strlen = 0; gbuffer[label_strlen] != '\0'; label_strlen++);            if (self->type == G_SEIS_VIEW_AXIS_RIGHT)                glRasterPos2f (slow_start_object - tick_size_object + margin_object,                               start_label_object);            else                glRasterPos2f (margin_object + text_width_object * (private->label_max_strlen - label_strlen) / (gdouble)private->label_max_strlen,                               start_label_object);            glBitmap (0, 0, 0, 0, 0, labels_step_object / fast_pixel_to_object_scale + private->text_height_screen / -4.0, NULL);            glCallLists (label_strlen, GL_UNSIGNED_BYTE, (GLubyte*)gbuffer);        }        /* All visible labels */        for (i = 0; i < labels_num; i++) {            if (G_SEIS_VIEW_AXIS_Z_INTEGER == private->format)                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, (gint)(start_label + i * labels_step));            else                g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, start_label + i * labels_step);            /* Text length */            for (label_strlen = 0; gbuffer[label_strlen] != '\0'; label_strlen++);            if (self->type == G_SEIS_VIEW_AXIS_RIGHT)                glRasterPos2f (slow_start_object - tick_size_object + margin_object,                               start_label_object + i * labels_step_object);            else                glRasterPos2f (margin_object + text_width_object * (private->label_max_strlen - label_strlen) / (gdouble)private->label_max_strlen,                               start_label_object + i * labels_step_object);            glBitmap (0, 0, 0, 0, 0, private->text_height_screen / -4.0, NULL);            glCallLists (label_strlen, GL_UNSIGNED_BYTE, (GLubyte*)gbuffer);            /* Tick */            glBegin (GL_LINES);            glVertex2f (slow_start_object - tick_size_object, start_label_object + i * labels_step_object);            glVertex2f (slow_start_object, start_label_object + i * labels_step_object);            glEnd ();        }        /* Trailing label - might be visible partially */        gdouble trailing_label = start_label + labels_num * labels_step;        if ((trailing_label <= private->max_value && trailing_label >= private->min_value) ||            (trailing_label >= private->max_value && trailing_label <= private->min_value)) {            if (G_SEIS_VIEW_AXIS_Z_INTEGER == private->format)                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, (gint)(start_label + labels_num * labels_step));            else                g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, start_label + labels_num * labels_step);            for (label_strlen = 0; gbuffer[label_strlen] != '\0'; label_strlen++);            if (self->type == G_SEIS_VIEW_AXIS_RIGHT)                glRasterPos2f (slow_start_object - tick_size_object + margin_object,                               start_label_object + (labels_num - 1) * labels_step_object);            else                glRasterPos2f (margin_object + text_width_object * (private->label_max_strlen - label_strlen) / (gdouble)private->label_max_strlen,                               start_label_object + (labels_num - 1) * labels_step_object);            glBitmap (0, 0, 0, 0, 0, -labels_step_object / fast_pixel_to_object_scale + private->text_height_screen / -4.0, NULL);            glCallLists (label_strlen, GL_UNSIGNED_BYTE, (GLubyte*)gbuffer);        }        /* Border line */        glLineWidth (2);        glBegin (GL_LINES);        glVertex2f (slow_start_object, data_visibility->fast_start_object);        glVertex2f (slow_start_object, data_visibility->fast_start_object + data_visibility->fast_size_object);        glEnd ();        glPopAttrib ();        glEndList ();        private->redisplay = FALSE;        if (private->rendering_mutex)            g_mutex_unlock (private->rendering_mutex);    }    if (private->display_list_base)        glCallList (private->display_list_base);}static void g_seis_view_axis_z_resize_event (GSeisViewAxis *self, GtkWidget *seis_view_gl,                                             GSeisViewDataVisibility *data_visibility) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (G_SEIS_VIEW_AXIS_Z (self));    private->redisplay = TRUE;}void g_seis_view_axis_z_set_min_max (GSeisViewAxisZ *axis, gdouble min_value,                                     gdouble values_step, guint32 values_num) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    private->min_value = min_value;    private->values_step = values_step;    private->values_num = values_num;    private->max_value = min_value + (values_num - 1) * values_step;    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);}void g_seis_view_axis_z_set_format (GSeisViewAxisZ *axis, GSeisViewAxisZFormat format) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    private->format = format;    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);}void g_seis_view_axis_z_set_precision (GSeisViewAxisZ *axis, guint8 precision) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    private->precision = precision;    if (private->precision > 6)        private->precision = 6;    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);}void g_seis_view_axis_z_set_font (GSeisViewAxisZ *axis, const gchar *font_name) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    if (private->font_name)        g_free (private->font_name);    private->font_name = g_strdup (font_name);    if (private->font_desc)        pango_font_description_free (private->font_desc);    private->rebuild_font = TRUE;    private->font_desc = pango_font_description_from_string (private->font_name);    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);}void g_seis_view_axis_z_set_fg_color (GSeisViewAxisZ *axis, const GSeisColor *fg_color) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    private->fg_color.red = fg_color->red;    private->fg_color.green = fg_color->green;    private->fg_color.blue = fg_color->blue;    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);    g_object_notify (G_OBJECT (axis), "fg_color");}void g_seis_view_axis_z_set_bg_color (GSeisViewAxisZ *axis, const GSeisColor *bg_color) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    private->bg_color.red = bg_color->red;    private->bg_color.green = bg_color->green;    private->bg_color.blue = bg_color->blue;    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);    g_object_notify (G_OBJECT (axis), "bg_color");}static void g_seis_view_axis_z_reshape (GSeisViewAxis *axis, GtkWidget *seis_view_gl) {    GSeisViewAxisZPrivate *private = G_SEIS_VIEW_AXIS_Z_GET_PRIVATE (G_SEIS_VIEW_AXIS_Z (axis));    gchar gbuffer[G_ASCII_DTOSTR_BUF_SIZE];    guint max_text_width_screen = 0, max_text_height_screen = 0;    guint text_width_screen = 0, text_height_screen = 0;    gint16 label_strlen = 0, label_max_strlen = 0;    gfloat value;    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    if (G_SEIS_VIEW_AXIS_Z_INTEGER == private->format)        g_snprintf (private->gformat, G_ASCII_DTOSTR_BUF_SIZE, "%%%s", G_GINT32_FORMAT);    else        g_snprintf (private->gformat, G_ASCII_DTOSTR_BUF_SIZE, "%%.%"G_GUINT32_FORMAT"f", (guint32)private->precision);    gbuffer[0] = '\0';    if (GTK_WIDGET_REALIZED (seis_view_gl)) {        PangoLayout *layout = gtk_widget_create_pango_layout (seis_view_gl, gbuffer);        pango_layout_set_width (layout, -1);        pango_layout_set_indent (layout, 0);        pango_layout_set_spacing (layout, 0);        pango_layout_set_justify (layout, FALSE);        pango_layout_set_font_description (layout, private->font_desc);        /* Render values and get their dimensions in pixels */        for (value = private->min_value; value <= private->max_value; value += private->values_step) {            if (G_SEIS_VIEW_AXIS_Z_INTEGER == private->format)                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, (gint)value);            else                g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, value);            for (label_strlen = 0; gbuffer[label_strlen] != '\0'; label_strlen++);            if (label_strlen > label_max_strlen)                label_max_strlen = label_strlen;            pango_layout_set_text (layout, gbuffer, -1);            pango_layout_get_pixel_size (layout, &text_width_screen, &text_height_screen);            if (text_width_screen > max_text_width_screen)                max_text_width_screen = text_width_screen;            if (text_height_screen > max_text_height_screen)                max_text_height_screen = text_height_screen;        }        private->label_max_strlen = label_max_strlen;        private->text_width_screen = max_text_width_screen;        private->text_height_screen = max_text_height_screen;        g_object_unref (layout);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -