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

📄 gseisviewaxistraces.c

📁 segy 显示程序!希望能给正在做这部分朋友提供一部分资料
💻 C
📖 第 1 页 / 共 3 页
字号:
            while (start_label_index < first_value_index)                start_label_index += labels_step;            end_label_index = ((gint)(last_value_index / labels_step)) * labels_step;            while (end_label_index > last_value_index)                end_label_index -= labels_step;            labels_num = (end_label_index - start_label_index) / labels_step + 1;            labels_step_object = labels_step * value_to_object_scale;        }        start_label_object = data_visibility->slow_start_object + (start_label_index - first_value_index) * 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 */        if (start_label_index - labels_step >= 0) {            if (private->values) {                if (G_SEIS_VIEW_AXIS_TRACES_INTEGER == private->format)                    g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                                g_array_index (private->values, gint32, (gint)(start_label_index - labels_step)));                else                    g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                                     g_array_index (private->values, gdouble, (gint)(start_label_index - labels_step)));            } else                label_str = g_ptr_array_index (private->str_values, (gint)(start_label_index - labels_step));            /* Text length */            for (label_strlen = 0; label_str[label_strlen] != '\0'; label_strlen++);            glRasterPos2f (start_label_object, fast_start_object - tick_size_object * 1.75 +                                               text_height_object * first_glyph_shift);            glBitmap (0, 0, 0, 0, -labels_step_object / slow_pixel_to_object_scale +                                  private->text_width_screen * (label_strlen / (gdouble)private->label_max_strlen) / -2.0, 0, NULL);            glCallLists (label_strlen, GL_UNSIGNED_BYTE, (GLubyte*)label_str);        }        for (i = 0; i < labels_num; i++) {            if (private->values) {                if (G_SEIS_VIEW_AXIS_TRACES_INTEGER == private->format)                    g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                                g_array_index (private->values, gint32, (gint)(start_label_index + i * labels_step)));                else                    g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                                     g_array_index (private->values, gdouble, (gint)(start_label_index + i * labels_step)));            } else                label_str = g_ptr_array_index (private->str_values, (gint)(start_label_index + i * labels_step));            /* Text length */            for (label_strlen = 0; label_str[label_strlen] != '\0'; label_strlen++);            glRasterPos2f (start_label_object + i * labels_step_object, fast_start_object - tick_size_object * 1.75 +                                                                        text_height_object * first_glyph_shift);            glBitmap (0, 0, 0, 0, private->text_width_screen * (label_strlen / (gdouble)private->label_max_strlen) / -2.0, 0, NULL);            glCallLists (label_strlen, GL_UNSIGNED_BYTE, (GLubyte*)label_str);            /* Tick */            glBegin (GL_LINES);            glVertex2f (start_label_object + i * labels_step_object,                        fast_start_object - tick_size_object);            glVertex2f (start_label_object + i * labels_step_object, fast_start_object);            glEnd ();        }        /* Trailing label - might be visible partially */        if (start_label_index + labels_num * labels_step < values_num) {            if (private->values) {                if (G_SEIS_VIEW_AXIS_TRACES_INTEGER == private->format)                    g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                                g_array_index (private->values, gint32, (gint)(start_label_index + labels_num * labels_step)));                else                    g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                                     g_array_index (private->values, gdouble, (gint)(start_label_index + labels_num * labels_step)));            } else                label_str = g_ptr_array_index (private->str_values, (gint)(start_label_index + labels_num * labels_step));            /* Text length */            for (label_strlen = 0; label_str[label_strlen] != '\0'; label_strlen++);            glRasterPos2f (start_label_object + (labels_num - 1) * labels_step_object, fast_start_object - tick_size_object * 1.75 +                                                                                       text_height_object * first_glyph_shift);            glBitmap (0, 0, 0, 0, labels_step_object / slow_pixel_to_object_scale +                                  private->text_width_screen * (label_strlen / (gdouble)private->label_max_strlen) / -2.0, 0, NULL);            glCallLists (label_strlen, GL_UNSIGNED_BYTE, (GLubyte*)label_str);        }        /* Border line */        glLineWidth (2);        glBegin (GL_LINES);        glVertex2f (data_visibility->slow_start_object, fast_start_object);        glVertex2f (data_visibility->slow_start_object + data_visibility->slow_size_object, fast_start_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_traces_resize_event (GSeisViewAxis *self, GtkWidget *seis_view_gl,                                             GSeisViewDataVisibility *data_visibility) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (G_SEIS_VIEW_AXIS_TRACES (self));    private->redisplay = TRUE;}void g_seis_view_axis_traces_set_values (GSeisViewAxisTraces *axis, GSeisViewAxisTracesFormat format, GArray *values) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    private->str_values = NULL;    if (private->values)        g_array_free (private->values, TRUE);    private->format = format;    if (G_SEIS_VIEW_AXIS_TRACES_INTEGER == private->format) {        private->values = g_array_sized_new (FALSE, FALSE, sizeof (gint32), values->len);        g_array_append_vals (private->values, &(g_array_index (values, gint32, 0)), values->len);    } else {        private->values = g_array_sized_new (FALSE, FALSE, sizeof (gdouble), values->len);        g_array_append_vals (private->values, &(g_array_index (values, gdouble, 0)), values->len);    }    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);    g_object_notify (G_OBJECT (axis), "values");}void g_seis_view_axis_traces_set_str_values (GSeisViewAxisTraces *axis, GPtrArray *str_values) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (axis);    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    if (private->values) {        g_array_free (private->values, TRUE);        private->values = NULL;    }    private->str_values = str_values;    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);    g_object_notify (G_OBJECT (axis), "str_values");}void g_seis_view_axis_traces_set_precision (GSeisViewAxisTraces *axis, guint8 precision) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_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);    g_object_notify (G_OBJECT (axis), "precision");}void g_seis_view_axis_traces_set_font (GSeisViewAxisTraces *axis, const gchar *font_name) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_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);    private->rebuild_font = TRUE;    if (private->font_desc)        pango_font_description_free (private->font_desc);    private->font_desc = pango_font_description_from_string (private->font_name);    if (private->rendering_mutex)        g_mutex_unlock (private->rendering_mutex);    g_object_notify (G_OBJECT (axis), "font");}void g_seis_view_axis_traces_set_fg_color (GSeisViewAxisTraces *axis, const GSeisColor *fg_color) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_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_traces_set_bg_color (GSeisViewAxisTraces *axis, const GSeisColor *bg_color) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_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_traces_reshape (GSeisViewAxis *axis, GtkWidget *seis_view_gl) {    GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (G_SEIS_VIEW_AXIS_TRACES (axis));    gchar gbuffer[G_ASCII_DTOSTR_BUF_SIZE];    gint16 label_min_value_strlen, label_max_value_strlen;    if (private->rendering_mutex)        g_mutex_lock (private->rendering_mutex);    if (G_SEIS_VIEW_AXIS_TRACES_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);    if (GTK_WIDGET_REALIZED (seis_view_gl)) {        PangoLayout *layout;        if (private->values) {            if (G_SEIS_VIEW_AXIS_TRACES_INTEGER == private->format)                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, g_array_index (private->values, gint32, 0));            else                g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, g_array_index (private->values, gdouble, 0));            for (label_min_value_strlen = 0; gbuffer[label_min_value_strlen] != '\0'; label_min_value_strlen++);            if (G_SEIS_VIEW_AXIS_TRACES_INTEGER == private->format)                g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                            g_array_index (private->values, gint32, private->values->len - 1));            else                g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat,                                 g_array_index (private->values, gdouble, private->values->len - 1));            for (label_max_value_strlen = 0; gbuffer[label_max_value_strlen] != '\0'; label_max_value_strlen++);            if (label_min_value_strlen > label_max_value_strlen) {                if (G_SEIS_VIEW_AXIS_TRACES_INTEGER == private->format)                    g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, g_array_index (private->values, gint32, 0));                else                    g_ascii_formatd (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, private->gformat, g_array_index (private->values, gdouble, 0));                private->label_max_strlen = label_min_value_strlen;            } else                private->label_max_strlen = label_max_value_strlen;            /* Render max value and get its dimensions in pixels */            layout = gtk_widget_create_pango_layout (seis_view_gl, gbuffer);            pango_layout_set_font_description (layout, private->font_desc);            pango_layout_get_pixel_size (layout, &private->text_width_screen, &private->text_height_screen);            g_object_unref (layout);

⌨️ 快捷键说明

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