📄 gsegycursorpanel.c
字号:
gint32 slow_floor = (gint32)(slow_pos_data * private->slow_num - 0.5); gint32 slow_ceil = slow_floor + 1; gdouble slow_frac = slow_pos_data * private->slow_num - 0.5 - slow_floor; if (slow_floor < 0) { slow_floor = 0; slow_ceil = 0; slow_frac = 0; } if (slow_ceil >= private->slow_num) { slow_ceil = private->slow_num - 1; slow_frac = 0; } gint32 fast_floor = (gint32)(fast_pos_data * private->fast_num - 0.5); gint32 fast_ceil = fast_floor + 1; gdouble fast_frac = fast_pos_data * private->fast_num - 0.5 - fast_floor; if (fast_floor < 0) { fast_floor = 0; fast_ceil = 0; fast_frac = 0; } if (fast_ceil >= private->fast_num) { fast_ceil = private->fast_num - 1; fast_frac = 0; } gfloat *samples_to_use = private->real_amplitude || private->has_real_amplitudes ? private->samples : private->samples_display; gfloat sample_a = samples_to_use[slow_floor * private->fast_num + fast_floor] + (samples_to_use[slow_floor * private->fast_num + fast_ceil] - samples_to_use[slow_floor * private->fast_num + fast_floor]) * fast_frac; gfloat sample_b = samples_to_use[slow_ceil * private->fast_num + fast_floor] + (samples_to_use[slow_ceil * private->fast_num + fast_ceil] - samples_to_use[slow_ceil * private->fast_num + fast_floor]) * fast_frac; gfloat sample = sample_a + (sample_b - sample_a) * slow_frac; gfloat z_position = (fast_pos_data * private->fast_num - 0.5) * private->sample_interval; guint32 trace_index = (guint32)(slow_pos_data * private->slow_num); if (private->seis_view_is_threaded) gdk_threads_enter (); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%.3f", sample); gtk_label_set_text (GTK_LABEL (private->amp_value_label), gbuffer); g_snprintf (gbuffer, G_ASCII_DTOSTR_BUF_SIZE, "%.3f", z_position); gtk_label_set_text (GTK_LABEL (private->z_value_label), gbuffer); if (private->field1_id) { g_segy_seismic_accessor_get_label_for_second_level (private->seismic_accessor, private->field1_id, private->current_ensemble, trace_index, gbuffer, G_ASCII_DTOSTR_BUF_SIZE); gtk_label_set_text (GTK_LABEL (private->field1_value_label), gbuffer); } if (private->field2_id && private->field2_id != private->field1_id) { g_segy_seismic_accessor_get_label_for_second_level (private->seismic_accessor, private->field2_id, private->current_ensemble, trace_index, gbuffer, G_ASCII_DTOSTR_BUF_SIZE); gtk_label_set_text (GTK_LABEL (private->field2_value_label), gbuffer); } gdk_flush (); if (private->seis_view_is_threaded) gdk_threads_leave ();}static void g_segy_cursor_pointer_leave_handler (GtkSeisViewGl *seis_view, gpointer data) { GSEGYCursorPanel *self = G_SEGY_CURSOR_PANEL (data); GSEGYCursorPanelPrivate *private = G_SEGY_CURSOR_PANEL_GET_PRIVATE (self); if (private->seis_view_is_threaded) gdk_threads_enter (); gtk_label_set_text (GTK_LABEL (private->amp_value_label), ""); gtk_label_set_text (GTK_LABEL (private->z_value_label), ""); gtk_label_set_text (GTK_LABEL (private->field1_value_label), ""); gtk_label_set_text (GTK_LABEL (private->field2_value_label), ""); gdk_flush (); if (private->seis_view_is_threaded) gdk_threads_leave ();}GtkWidget* g_segy_cursor_panel_get_main_widget (GSEGYCursorPanel *self) { GSEGYCursorPanelPrivate *private = G_SEGY_CURSOR_PANEL_GET_PRIVATE (self); if (NULL == private->frame) { private->frame = gtk_frame_new (NULL); gtk_container_set_border_width (GTK_CONTAINER (private->frame), 0); private->hpaned = gtk_hpaned_new (); gtk_container_set_border_width (GTK_CONTAINER (private->hpaned), 2); gtk_container_add (GTK_CONTAINER (private->frame), private->hpaned); private->vbox1 = gtk_vbox_new (TRUE, 0); gtk_paned_pack1 (GTK_PANED (private->hpaned), private->vbox1, FALSE, FALSE); private->table1 = gtk_table_new (1, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (private->table1), 1); gtk_table_set_row_spacings (GTK_TABLE (private->table1), 0); gtk_table_set_col_spacings (GTK_TABLE (private->table1), 3); gtk_box_pack_start (GTK_BOX (private->vbox1), private->table1, TRUE, TRUE, 0); private->z_label = gtk_label_new (_("Z:")); gtk_misc_set_alignment (GTK_MISC (private->z_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table1), private->z_label, 0, 1, 0, 1, 0, 0, 0, 0); private->z_value_label = gtk_label_new ("0"); gtk_misc_set_alignment (GTK_MISC (private->z_value_label), 1, 1); gtk_table_attach (GTK_TABLE (private->table1), private->z_value_label, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->table2 = gtk_table_new (1, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (private->table2), 1); gtk_table_set_row_spacings (GTK_TABLE (private->table2), 0); gtk_table_set_col_spacings (GTK_TABLE (private->table2), 3); gtk_box_pack_start (GTK_BOX (private->vbox1), private->table2, TRUE, TRUE, 0); private->amp_label = gtk_label_new (_("A:")); gtk_misc_set_alignment (GTK_MISC (private->amp_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table2), private->amp_label, 0, 1, 1, 2, 0, 0, 0, 0); private->amp_value_label = gtk_label_new ("0"); gtk_misc_set_alignment (GTK_MISC (private->amp_value_label), 1, 1); gtk_table_attach (GTK_TABLE (private->table2), private->amp_value_label, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->vbox2 = gtk_vbox_new (TRUE, 0); gtk_paned_pack2 (GTK_PANED (private->hpaned), private->vbox2, FALSE, FALSE); private->table3 = gtk_table_new (1, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (private->table3), 1); gtk_table_set_row_spacings (GTK_TABLE (private->table3), 0); gtk_table_set_col_spacings (GTK_TABLE (private->table3), 3); gtk_box_pack_start (GTK_BOX (private->vbox2), private->table3, TRUE, TRUE, 0); private->field1_label = gtk_label_new ("SourceX:"); gtk_misc_set_alignment (GTK_MISC (private->field1_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table3), private->field1_label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->field1_value_label = gtk_label_new ("0"); gtk_misc_set_alignment (GTK_MISC (private->field1_value_label), 1, 1); gtk_table_attach (GTK_TABLE (private->table3), private->field1_value_label, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->table4 = gtk_table_new (1, 2, FALSE); gtk_container_set_border_width (GTK_CONTAINER (private->table4), 1); gtk_table_set_row_spacings (GTK_TABLE (private->table4), 0); gtk_table_set_col_spacings (GTK_TABLE (private->table4), 3); gtk_box_pack_start (GTK_BOX (private->vbox2), private->table4, TRUE, TRUE, 0); private->field2_label = gtk_label_new ("SourceY:"); gtk_misc_set_alignment (GTK_MISC (private->field2_label), 0, 1); gtk_table_attach (GTK_TABLE (private->table4), private->field2_label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); private->field2_value_label = gtk_label_new ("0"); gtk_misc_set_alignment (GTK_MISC (private->field2_value_label), 1, 1); gtk_table_attach (GTK_TABLE (private->table4), private->field2_value_label, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_paned_set_position (GTK_PANED (private->hpaned), 0); gtk_widget_show_all (private->frame); g_segy_cursor_panel_set_fields_ids (self, private->field1_id, private->field2_id); } return private->frame;}void g_segy_cursor_panel_set_aux_seis_view (GSEGYCursorPanel *self, GtkSeisViewGl *aux_seis_view) { GSEGYCursorPanelPrivate *private = G_SEGY_CURSOR_PANEL_GET_PRIVATE (self); if (private->aux_seis_view) { g_signal_handler_disconnect (G_OBJECT (private->aux_seis_view), private->aux_pointer_position_signal_id); g_signal_handler_disconnect (G_OBJECT (private->aux_seis_view), private->aux_pointer_leave_signal_id); g_object_unref (G_OBJECT (private->aux_seis_view)); } private->aux_seis_view = aux_seis_view; private->aux_pointer_position_signal_id = 0; private->aux_pointer_leave_signal_id = 0; if (private->aux_seis_view) { g_object_ref (G_OBJECT (private->aux_seis_view)); private->aux_pointer_position_signal_id = g_signal_connect (G_OBJECT (private->aux_seis_view), "pointer_position", (GCallback)g_segy_cursor_pointer_position_handler, (gpointer)self); private->aux_pointer_leave_signal_id = g_signal_connect (G_OBJECT (private->aux_seis_view), "pointer_leave", (GCallback)g_segy_cursor_pointer_leave_handler, (gpointer)self); }}GSEGYCursorPanel* g_segy_cursor_panel_new (GtkSeisViewGl *seis_view, GSEGYSeismicAccessor *seismic_accessor) { GSEGYCursorPanel *new_cursor_panel = G_SEGY_CURSOR_PANEL (g_object_new (G_SEGY_TYPE_CURSOR_PANEL, NULL)); GSEGYCursorPanelPrivate *private = G_SEGY_CURSOR_PANEL_GET_PRIVATE (new_cursor_panel); private->seis_view = seis_view; private->seismic_accessor = seismic_accessor; g_object_ref (G_OBJECT (private->seis_view)); g_object_ref (G_OBJECT (private->seismic_accessor)); private->sample_interval = g_segy_seismic_accessor_get_sample_interval (private->seismic_accessor) / 1000.0; private->sort_labels = g_segy_seismic_accessor_get_sorting_fields_names (private->seismic_accessor); private->pointer_position_signal_id = g_signal_connect (G_OBJECT (private->seis_view), "pointer_position", (GCallback)g_segy_cursor_pointer_position_handler, (gpointer)new_cursor_panel); private->pointer_leave_signal_id = g_signal_connect (G_OBJECT (private->seis_view), "pointer_leave", (GCallback)g_segy_cursor_pointer_leave_handler, (gpointer)new_cursor_panel); private->seis_view_is_threaded = gtk_seis_view_gl_is_threaded (private->seis_view); return new_cursor_panel;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -