add settings dialogs for
- IR settings (palette, emissivity, reflected temp) - UI setting (en-/disable UI features like palette drawing, crosshairs, bat state) - visual light camera settings (opacity, scaling, X/Y offset) make picture shots be saved in environments default "Pictures/" folder
This commit is contained in:
parent
ab5cbe7d6f
commit
d95bda16a8
4 changed files with 350 additions and 22 deletions
|
@ -72,6 +72,9 @@ unsigned char buf85[BUF85SIZE];
|
||||||
extern unsigned char *jpeg_buffer;
|
extern unsigned char *jpeg_buffer;
|
||||||
extern unsigned int jpeg_size;
|
extern unsigned int jpeg_size;
|
||||||
extern unsigned char *ir_buffer;
|
extern unsigned char *ir_buffer;
|
||||||
|
extern double emissivity;
|
||||||
|
extern double tempreflected;
|
||||||
|
|
||||||
|
|
||||||
struct shutter_state_t shutter_state;
|
struct shutter_state_t shutter_state;
|
||||||
struct battery_state_t battery_state;
|
struct battery_state_t battery_state;
|
||||||
|
@ -199,9 +202,9 @@ raw2temperature(unsigned short RAW)
|
||||||
// mystery correction factor
|
// mystery correction factor
|
||||||
RAW *=4;
|
RAW *=4;
|
||||||
// calc amount of radiance of reflected objects ( Emissivity < 1 )
|
// calc amount of radiance of reflected objects ( Emissivity < 1 )
|
||||||
double RAWrefl=PlanckR1/(PlanckR2*(exp(PlanckB/(TempReflected+273.15))-PlanckF))-PlanckO;
|
double RAWrefl=PlanckR1/(PlanckR2*(exp(PlanckB/(tempreflected/*TempReflected*/+273.15))-PlanckF))-PlanckO;
|
||||||
// get displayed object temp max/min
|
// get displayed object temp max/min
|
||||||
double RAWobj=(RAW-(1-Emissivity)*RAWrefl)/Emissivity;
|
double RAWobj=(RAW-(1-emissivity/*Emissivity*/)*RAWrefl)/emissivity/*Emissivity*/;
|
||||||
// calc object temperature
|
// calc object temperature
|
||||||
|
|
||||||
return PlanckB/log(PlanckR1/(PlanckR2*(RAWobj+PlanckO))+PlanckF)-273.15;
|
return PlanckB/log(PlanckR1/(PlanckR2*(RAWobj+PlanckO))+PlanckF)-273.15;
|
||||||
|
@ -750,7 +753,7 @@ int r = 1;
|
||||||
if (magic == 0x000001cc) {
|
if (magic == 0x000001cc) {
|
||||||
parse_config_in(&buf[16]);
|
parse_config_in(&buf[16]);
|
||||||
}
|
}
|
||||||
#if 1
|
#if 0
|
||||||
for (i=0; i<actual_length; i++) {
|
for (i=0; i<actual_length; i++) {
|
||||||
if (buf[i] > 31 && buf[i]<128)
|
if (buf[i] > 31 && buf[i]<128)
|
||||||
fprintf(stderr, "%c", buf[i]);
|
fprintf(stderr, "%c", buf[i]);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef _CAM_THREAD_H
|
#ifndef _CAM_THREAD_H
|
||||||
#define _CAM_THREAD_H
|
#define _CAM_THREAD_H
|
||||||
|
|
||||||
enum ffcstate_t {FFC_VALID_RAD, FFC_PROGRESS, FFC_UNKNOWN};
|
enum ffcstate_t {FFC_VALID_RAD, FFC_RAD_APPRO, FFC_PROGRESS, FFC_UNKNOWN};
|
||||||
enum shutterstate_t {sON, sFFC, sUNKNOWN};
|
enum shutterstate_t {sON, sFFC, sUNKNOWN};
|
||||||
|
|
||||||
// {
|
// {
|
||||||
|
|
323
flirgtk.c
323
flirgtk.c
|
@ -48,9 +48,22 @@ static GtkWidget *image_darea = NULL;
|
||||||
static GtkWidget *play_button, *stop_button;
|
static GtkWidget *play_button, *stop_button;
|
||||||
// we paint everything in here and then into the drawing area widget
|
// we paint everything in here and then into the drawing area widget
|
||||||
static cairo_surface_t *psurface;
|
static cairo_surface_t *psurface;
|
||||||
static double vis_surface_alpha=0.3;
|
|
||||||
static gboolean take_vis_shot=FALSE;
|
static gboolean take_vis_shot=FALSE;
|
||||||
|
|
||||||
|
// settings
|
||||||
|
int colorpalette=9;
|
||||||
|
double emissivity=0.9;
|
||||||
|
double tempreflected=20.0;
|
||||||
|
|
||||||
|
static gboolean show_battery=TRUE;
|
||||||
|
static gboolean show_palette=TRUE;
|
||||||
|
static gboolean show_crosshair=TRUE;
|
||||||
|
|
||||||
|
static double vis_surface_alpha=0.3;
|
||||||
|
static double vis_surface_scaling=(1./2.25);
|
||||||
|
static double vis_x_offset=0.;
|
||||||
|
static double vis_y_offset=0.;
|
||||||
|
|
||||||
|
|
||||||
// variables to communicate with cam thread
|
// variables to communicate with cam thread
|
||||||
gboolean pending=FALSE;
|
gboolean pending=FALSE;
|
||||||
|
@ -70,7 +83,6 @@ unsigned char *jpeg_buffer=NULL;
|
||||||
unsigned int jpeg_size=0;
|
unsigned int jpeg_size=0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
configure_event (GtkWidget *widget,
|
configure_event (GtkWidget *widget,
|
||||||
GdkEventConfigure *event,
|
GdkEventConfigure *event,
|
||||||
|
@ -157,13 +169,19 @@ store_vis_shot(unsigned char *jpg_buffer, unsigned int jpg_size)
|
||||||
time_t now;
|
time_t now;
|
||||||
struct tm *loctime;
|
struct tm *loctime;
|
||||||
char pname[PATH_MAX];
|
char pname[PATH_MAX];
|
||||||
|
const char *tmp;
|
||||||
char fname[30];
|
char fname[30];
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
now = time(NULL);
|
now = time(NULL);
|
||||||
loctime = localtime (&now);
|
loctime = localtime (&now);
|
||||||
strftime (fname, 30, "viscam-%y%m%d%H%M%S", loctime);
|
strftime (fname, 30, "viscam-%y%m%d%H%M%S", loctime);
|
||||||
strncpy(pname, "./", PATH_MAX-30-4); // leave room for filename+extension
|
|
||||||
|
tmp=g_get_user_special_dir(G_USER_DIRECTORY_PICTURES);
|
||||||
|
if (tmp == NULL)
|
||||||
|
tmp = "./";
|
||||||
|
strncpy(pname, tmp, PATH_MAX-30-4); // leave room for filename+extension
|
||||||
|
strncat(pname, "/", PATH_MAX-5); // -5 to leave space for trailing \0 byte + extension
|
||||||
strncat(pname, fname, PATH_MAX-5); // -5 to leave space for trailing \0 byte + extension
|
strncat(pname, fname, PATH_MAX-5); // -5 to leave space for trailing \0 byte + extension
|
||||||
strncat(pname, ".jpg", PATH_MAX-1); // -5 to leave space for trailing \0 byte + extension
|
strncat(pname, ".jpg", PATH_MAX-1); // -5 to leave space for trailing \0 byte + extension
|
||||||
|
|
||||||
|
@ -213,8 +231,8 @@ cairo_t *cr;
|
||||||
if (viscam) {
|
if (viscam) {
|
||||||
jpeg_surface=cairo_image_surface_create_from_jpeg_mem(jpeg_buffer, jpeg_size);
|
jpeg_surface=cairo_image_surface_create_from_jpeg_mem(jpeg_buffer, jpeg_size);
|
||||||
cairo_save(cr);
|
cairo_save(cr);
|
||||||
cairo_scale (cr, (1./2.25), (1./2.25));
|
cairo_scale (cr, vis_surface_scaling, vis_surface_scaling);
|
||||||
cairo_set_source_surface (cr, jpeg_surface, 0, 0);
|
cairo_set_source_surface (cr, jpeg_surface, vis_x_offset, vis_y_offset);
|
||||||
if (ircam)
|
if (ircam)
|
||||||
cairo_paint_with_alpha (cr, vis_surface_alpha);
|
cairo_paint_with_alpha (cr, vis_surface_alpha);
|
||||||
else
|
else
|
||||||
|
@ -228,6 +246,7 @@ cairo_t *cr;
|
||||||
|
|
||||||
// then draw decoration on top
|
// then draw decoration on top
|
||||||
// the color palette with min/max temperatures
|
// the color palette with min/max temperatures
|
||||||
|
if (show_palette) {
|
||||||
palette_surface=draw_palette();
|
palette_surface=draw_palette();
|
||||||
cairo_save(cr);
|
cairo_save(cr);
|
||||||
cairo_rectangle(cr,0,481,640,500);
|
cairo_rectangle(cr,0,481,640,500);
|
||||||
|
@ -235,7 +254,9 @@ cairo_t *cr;
|
||||||
cairo_set_source_surface (cr, palette_surface, 0, 481);
|
cairo_set_source_surface (cr, palette_surface, 0, 481);
|
||||||
cairo_paint (cr);
|
cairo_paint (cr);
|
||||||
cairo_restore(cr);
|
cairo_restore(cr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (show_crosshair) {
|
||||||
// crosshair in the center
|
// crosshair in the center
|
||||||
cairo_set_line_width (cr, 3);
|
cairo_set_line_width (cr, 3);
|
||||||
cairo_set_source_rgb (cr, 0, 0, 0);
|
cairo_set_source_rgb (cr, 0, 0, 0);
|
||||||
|
@ -262,8 +283,10 @@ cairo_t *cr;
|
||||||
cairo_set_font_size (cr, 24);
|
cairo_set_font_size (cr, 24);
|
||||||
cairo_move_to (cr, 330, 220);
|
cairo_move_to (cr, 330, 220);
|
||||||
cairo_show_text (cr, tdisp);
|
cairo_show_text (cr, tdisp);
|
||||||
|
}
|
||||||
|
|
||||||
// print battery % top right
|
// print battery % top right
|
||||||
|
if (show_battery) {
|
||||||
snprintf(tdisp, 16, "%d%%", battery_state.percentage);
|
snprintf(tdisp, 16, "%d%%", battery_state.percentage);
|
||||||
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
|
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
|
||||||
cairo_select_font_face (cr, "Sans",
|
cairo_select_font_face (cr, "Sans",
|
||||||
|
@ -271,7 +294,7 @@ cairo_t *cr;
|
||||||
cairo_set_font_size (cr, 14);
|
cairo_set_font_size (cr, 14);
|
||||||
cairo_move_to (cr, 580, 20);
|
cairo_move_to (cr, 580, 20);
|
||||||
cairo_show_text (cr, tdisp);
|
cairo_show_text (cr, tdisp);
|
||||||
|
}
|
||||||
cairo_destroy(cr);
|
cairo_destroy(cr);
|
||||||
pending = FALSE;
|
pending = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -301,11 +324,17 @@ time_t now;
|
||||||
struct tm *loctime;
|
struct tm *loctime;
|
||||||
char pname[PATH_MAX];
|
char pname[PATH_MAX];
|
||||||
char fname[30];
|
char fname[30];
|
||||||
|
const char *tmp;
|
||||||
|
|
||||||
now = time(NULL);
|
now = time(NULL);
|
||||||
loctime = localtime (&now);
|
loctime = localtime (&now);
|
||||||
strftime (fname, 30, "ircam-%y%m%d%H%M%S", loctime);
|
strftime (fname, 30, "ircam-%y%m%d%H%M%S", loctime);
|
||||||
strncpy(pname, "./", PATH_MAX-30-4); // leave room for filename+extension
|
|
||||||
|
tmp=g_get_user_special_dir(G_USER_DIRECTORY_PICTURES);
|
||||||
|
if (tmp == NULL)
|
||||||
|
tmp = "./";
|
||||||
|
strncpy(pname, tmp, PATH_MAX-30-4); // leave room for filename+extension
|
||||||
|
strncat(pname, "/", PATH_MAX-5); // -5 to leave space for trailing \0 byte + extension
|
||||||
strncat(pname, fname, PATH_MAX-5); // -5 to leave space for trailing \0 byte + extension
|
strncat(pname, fname, PATH_MAX-5); // -5 to leave space for trailing \0 byte + extension
|
||||||
strncat(pname, ".png", PATH_MAX-1); // -1 to leave space for trailing \0 byte
|
strncat(pname, ".png", PATH_MAX-1); // -1 to leave space for trailing \0 byte
|
||||||
|
|
||||||
|
@ -348,6 +377,12 @@ viscam_clicked(GtkWidget *button, gpointer user_data)
|
||||||
viscam = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
|
viscam = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
menu_clicked(GtkWidget *button, gpointer user_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
close_window (void)
|
close_window (void)
|
||||||
{
|
{
|
||||||
|
@ -375,10 +410,247 @@ int act;
|
||||||
if (act == 7) color_palette = palette_Iron2;
|
if (act == 7) color_palette = palette_Iron2;
|
||||||
if (act == 8) color_palette = palette_Iron_Black;
|
if (act == 8) color_palette = palette_Iron_Black;
|
||||||
if (act == 9) color_palette = palette_Rainbow;
|
if (act == 9) color_palette = palette_Rainbow;
|
||||||
// draw_palette();
|
colorpalette=act;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
emissivity_changed (GtkRange *range, gpointer user_data)
|
||||||
|
{
|
||||||
|
emissivity=gtk_range_get_value (range);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tempreflected_changed (GtkSpinButton *spin_button, gpointer user_data)
|
||||||
|
{
|
||||||
|
tempreflected=gtk_spin_button_get_value (spin_button);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ir_settings_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog, *hb, *c, *vb, *w;
|
||||||
|
GtkDialogFlags flags = GTK_DIALOG_USE_HEADER_BAR /*| GTK_DIALOG_MODAL*/ | GTK_DIALOG_DESTROY_WITH_PARENT;
|
||||||
|
|
||||||
|
dialog = gtk_dialog_new_with_buttons ("IR Settings",
|
||||||
|
GTK_WINDOW(window),
|
||||||
|
flags,
|
||||||
|
"_OK",
|
||||||
|
GTK_RESPONSE_ACCEPT,
|
||||||
|
NULL);
|
||||||
|
gtk_widget_set_size_request(dialog, 400, 200);
|
||||||
|
hb=gtk_dialog_get_header_bar (GTK_DIALOG(dialog));
|
||||||
|
gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR(hb), ":");
|
||||||
|
|
||||||
|
c=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
|
||||||
|
vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
|
||||||
|
gtk_container_add (GTK_CONTAINER (c), vb);
|
||||||
|
|
||||||
|
w=gtk_label_new("Color Palette");
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
|
||||||
|
// drop down for color palettes
|
||||||
|
w = gtk_combo_box_text_new();
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "7");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "15");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "17");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "85");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "92");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "Grayscale");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "Grey");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "Iron 2");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "Iron Black");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "Rainbow");
|
||||||
|
gtk_combo_box_set_active (GTK_COMBO_BOX(w), colorpalette);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "changed",
|
||||||
|
G_CALLBACK (palette_changed), NULL);
|
||||||
|
|
||||||
|
w=gtk_label_new("Emissivity");
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
|
||||||
|
w=gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
0.01);
|
||||||
|
gtk_scale_add_mark (GTK_SCALE(w), 0.30, GTK_POS_TOP, "shiny");
|
||||||
|
gtk_scale_add_mark (GTK_SCALE(w), 0.60, GTK_POS_BOTTOM, "half shiny");
|
||||||
|
gtk_scale_add_mark (GTK_SCALE(w), 0.80, GTK_POS_TOP, "half matte");
|
||||||
|
gtk_scale_add_mark (GTK_SCALE(w), 0.90, GTK_POS_BOTTOM, "matte");
|
||||||
|
gtk_range_set_value(GTK_RANGE(w), emissivity);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "value-changed",
|
||||||
|
G_CALLBACK (emissivity_changed), NULL);
|
||||||
|
|
||||||
|
w=gtk_label_new("Reflected Temperature");
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
|
||||||
|
w=gtk_spin_button_new_with_range(-100.0, +100.0, 0.5);
|
||||||
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), tempreflected);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "value-changed",
|
||||||
|
G_CALLBACK (tempreflected_changed), NULL);
|
||||||
|
|
||||||
|
gtk_widget_show_all(c);
|
||||||
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||||
|
gtk_widget_destroy(dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
show_battery_toggled (GtkToggleButton *togglebutton, gpointer user_data)
|
||||||
|
{
|
||||||
|
show_battery=gtk_toggle_button_get_active(togglebutton);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
show_palette_toggled (GtkToggleButton *togglebutton, gpointer user_data)
|
||||||
|
{
|
||||||
|
show_palette=gtk_toggle_button_get_active(togglebutton);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
show_crosshair_toggled (GtkToggleButton *togglebutton, gpointer user_data)
|
||||||
|
{
|
||||||
|
show_crosshair=gtk_toggle_button_get_active(togglebutton);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ui_settings_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog, *hb, *c, *vb, *w;
|
||||||
|
GtkDialogFlags flags = GTK_DIALOG_USE_HEADER_BAR /*| GTK_DIALOG_MODAL*/ | GTK_DIALOG_DESTROY_WITH_PARENT;
|
||||||
|
|
||||||
|
dialog = gtk_dialog_new_with_buttons ("UI Settings",
|
||||||
|
GTK_WINDOW(window),
|
||||||
|
flags,
|
||||||
|
"_OK",
|
||||||
|
GTK_RESPONSE_ACCEPT,
|
||||||
|
NULL);
|
||||||
|
gtk_widget_set_size_request(dialog, 400, 200);
|
||||||
|
hb=gtk_dialog_get_header_bar (GTK_DIALOG(dialog));
|
||||||
|
gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR(hb), ":");
|
||||||
|
|
||||||
|
c=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
|
||||||
|
vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
|
||||||
|
gtk_container_add (GTK_CONTAINER (c), vb);
|
||||||
|
|
||||||
|
w=gtk_check_button_new_with_label ("Show battery");
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), show_battery);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "toggled",
|
||||||
|
G_CALLBACK (show_battery_toggled), NULL);
|
||||||
|
|
||||||
|
w=gtk_check_button_new_with_label ("Show crosshair");
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), show_crosshair);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "toggled",
|
||||||
|
G_CALLBACK (show_crosshair_toggled), NULL);
|
||||||
|
|
||||||
|
w=gtk_check_button_new_with_label ("Show palette");
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), show_palette);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "toggled",
|
||||||
|
G_CALLBACK (show_palette_toggled), NULL);
|
||||||
|
|
||||||
|
gtk_widget_show_all(c);
|
||||||
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||||
|
gtk_widget_destroy(dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
vis_opacity_changed (GtkRange *range, gpointer user_data)
|
||||||
|
{
|
||||||
|
vis_surface_alpha=gtk_range_get_value (range);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vis_scaling_changed (GtkRange *range, gpointer user_data)
|
||||||
|
{
|
||||||
|
vis_surface_scaling=gtk_range_get_value (range);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vis_x_offset_changed (GtkSpinButton *spin_button, gpointer user_data)
|
||||||
|
{
|
||||||
|
vis_x_offset=gtk_spin_button_get_value (spin_button);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vis_y_offset_changed (GtkSpinButton *spin_button, gpointer user_data)
|
||||||
|
{
|
||||||
|
vis_y_offset=gtk_spin_button_get_value (spin_button);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
vis_settings_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog, *hb, *c, *vb, *w;
|
||||||
|
GtkDialogFlags flags = GTK_DIALOG_USE_HEADER_BAR /*| GTK_DIALOG_MODAL*/ | GTK_DIALOG_DESTROY_WITH_PARENT;
|
||||||
|
|
||||||
|
dialog = gtk_dialog_new_with_buttons ("Vis Settings",
|
||||||
|
GTK_WINDOW(window),
|
||||||
|
flags,
|
||||||
|
"_OK",
|
||||||
|
GTK_RESPONSE_ACCEPT,
|
||||||
|
NULL);
|
||||||
|
gtk_widget_set_size_request(dialog, 400, 200);
|
||||||
|
hb=gtk_dialog_get_header_bar (GTK_DIALOG(dialog));
|
||||||
|
gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR(hb), ":");
|
||||||
|
|
||||||
|
c=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
|
||||||
|
vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
|
||||||
|
gtk_container_add (GTK_CONTAINER (c), vb);
|
||||||
|
|
||||||
|
w=gtk_label_new("Opacity");
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
|
||||||
|
w=gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
|
||||||
|
0.0,
|
||||||
|
1.0,
|
||||||
|
0.01);
|
||||||
|
gtk_range_set_value(GTK_RANGE(w), vis_surface_alpha);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "value-changed",
|
||||||
|
G_CALLBACK (vis_opacity_changed), NULL);
|
||||||
|
|
||||||
|
w=gtk_label_new("Scaling");
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
|
||||||
|
w=gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL,
|
||||||
|
0.2,
|
||||||
|
1.0,
|
||||||
|
0.01);
|
||||||
|
gtk_range_set_value(GTK_RANGE(w), vis_surface_scaling);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "value-changed",
|
||||||
|
G_CALLBACK (vis_scaling_changed), NULL);
|
||||||
|
|
||||||
|
w=gtk_label_new("X Offset");
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
|
||||||
|
w=gtk_spin_button_new_with_range(-100.0, +100.0, 1.);
|
||||||
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), vis_x_offset);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "value-changed",
|
||||||
|
G_CALLBACK (vis_x_offset_changed), NULL);
|
||||||
|
|
||||||
|
w=gtk_label_new("Y Offset");
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
|
||||||
|
w=gtk_spin_button_new_with_range(-100.0, +100.0, 1.);
|
||||||
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), vis_y_offset);
|
||||||
|
gtk_container_add (GTK_CONTAINER (vb), w);
|
||||||
|
g_signal_connect (w, "value-changed",
|
||||||
|
G_CALLBACK (vis_y_offset_changed), NULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
gtk_widget_show_all(c);
|
||||||
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||||
|
gtk_widget_destroy(dialog);
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
create_main_window (void)
|
create_main_window (void)
|
||||||
|
@ -387,6 +659,7 @@ create_main_window (void)
|
||||||
GtkWidget *box;
|
GtkWidget *box;
|
||||||
GtkWidget *hbox;
|
GtkWidget *hbox;
|
||||||
GtkWidget *w, *i;
|
GtkWidget *w, *i;
|
||||||
|
GtkWidget *m, *mi;
|
||||||
|
|
||||||
// GtkWidget *da;
|
// GtkWidget *da;
|
||||||
|
|
||||||
|
@ -396,6 +669,38 @@ GtkWidget *w, *i;
|
||||||
// gappw=gtk_application_window_new(gapp);
|
// gappw=gtk_application_window_new(gapp);
|
||||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "FLIR One");
|
gtk_window_set_title (GTK_WINDOW (window), "FLIR One");
|
||||||
|
w=gtk_header_bar_new();
|
||||||
|
gtk_header_bar_set_show_close_button (GTK_HEADER_BAR(w), TRUE);
|
||||||
|
gtk_header_bar_set_decoration_layout (GTK_HEADER_BAR(w), ":menu,close");
|
||||||
|
// i = gtk_button_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_BUTTON);
|
||||||
|
i=gtk_menu_button_new();
|
||||||
|
|
||||||
|
m=gtk_menu_new();
|
||||||
|
mi=gtk_menu_item_new_with_label("UI Settings");
|
||||||
|
gtk_menu_shell_append(GTK_MENU_SHELL(m), mi);
|
||||||
|
g_signal_connect (mi, "activate",
|
||||||
|
G_CALLBACK (ui_settings_activate), NULL);
|
||||||
|
mi=gtk_menu_item_new_with_label("IR Settings");
|
||||||
|
gtk_menu_shell_append(GTK_MENU_SHELL(m), mi);
|
||||||
|
g_signal_connect (mi, "activate",
|
||||||
|
G_CALLBACK (ir_settings_activate), NULL);
|
||||||
|
mi=gtk_menu_item_new_with_label("Vis Settings");
|
||||||
|
gtk_menu_shell_append(GTK_MENU_SHELL(m), mi);
|
||||||
|
g_signal_connect (mi, "activate",
|
||||||
|
G_CALLBACK (vis_settings_activate), NULL);
|
||||||
|
mi=gtk_separator_menu_item_new ();
|
||||||
|
gtk_menu_shell_append(GTK_MENU_SHELL(m), mi);
|
||||||
|
mi=gtk_menu_item_new_with_label("Quit");
|
||||||
|
gtk_menu_shell_append(GTK_MENU_SHELL(m), mi);
|
||||||
|
g_signal_connect (mi, "activate",
|
||||||
|
G_CALLBACK (gtk_main_quit), NULL);
|
||||||
|
gtk_menu_button_set_use_popover(GTK_MENU_BUTTON(i), TRUE);
|
||||||
|
gtk_menu_button_set_popup (GTK_MENU_BUTTON(i), m);
|
||||||
|
gtk_widget_show_all(m);
|
||||||
|
gtk_header_bar_pack_end(GTK_HEADER_BAR(w),i);
|
||||||
|
gtk_window_set_titlebar(GTK_WINDOW (window), w);
|
||||||
|
// g_signal_connect (w, "clicked",
|
||||||
|
// G_CALLBACK (menu_clicked), NULL);
|
||||||
|
|
||||||
g_signal_connect (window, "destroy",
|
g_signal_connect (window, "destroy",
|
||||||
G_CALLBACK (close_window), NULL);
|
G_CALLBACK (close_window), NULL);
|
||||||
|
@ -432,6 +737,7 @@ GtkWidget *w, *i;
|
||||||
G_CALLBACK (stop_clicked), NULL);
|
G_CALLBACK (stop_clicked), NULL);
|
||||||
|
|
||||||
// drop down for color palettes
|
// drop down for color palettes
|
||||||
|
#if 0
|
||||||
w = gtk_combo_box_text_new();
|
w = gtk_combo_box_text_new();
|
||||||
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "7");
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "7");
|
||||||
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "15");
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT(w), NULL, "15");
|
||||||
|
@ -447,6 +753,7 @@ GtkWidget *w, *i;
|
||||||
gtk_container_add (GTK_CONTAINER (hbox), w);
|
gtk_container_add (GTK_CONTAINER (hbox), w);
|
||||||
g_signal_connect (w, "changed",
|
g_signal_connect (w, "changed",
|
||||||
G_CALLBACK (palette_changed), NULL);
|
G_CALLBACK (palette_changed), NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
w = gtk_toggle_button_new_with_label("IR");
|
w = gtk_toggle_button_new_with_label("IR");
|
||||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(w), TRUE);
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(w), TRUE);
|
||||||
|
|
20
plank.h
20
plank.h
|
@ -1,12 +1,23 @@
|
||||||
// -- define Flir calibration values ---------------
|
// -- define Flir calibration values ---------------
|
||||||
// exiftool -plan* FLIROne-2015-11-30-17-26-48+0100.jpg
|
// exiftool -plan* FLIROne-2015-11-30-17-26-48+0100.jpg
|
||||||
|
|
||||||
|
#if 0
|
||||||
#define PlanckR1 16528.178
|
#define PlanckR1 16528.178
|
||||||
#define PlanckB 1427.5
|
#define PlanckB 1427.5
|
||||||
#define PlanckF 1.0
|
#define PlanckF 1.0
|
||||||
#define PlanckO -1307.0
|
#define PlanckO -1307.0
|
||||||
#define PlanckR2 0.012258549
|
#define PlanckR2 0.012258549
|
||||||
|
|
||||||
|
#define TempReflected 20.0 // Reflected Apparent Temperature [°C]
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// read from my camera, are these hardware depedent?
|
||||||
|
#define PlanckR1 18417.0
|
||||||
|
#define PlanckB 1435.0
|
||||||
|
#define PlanckF 1.0
|
||||||
|
#define PlanckO -1656.0
|
||||||
|
#define PlanckR2 0.0125
|
||||||
|
|
||||||
#define TempReflected 20.0 // Reflected Apparent Temperature [°C]
|
#define TempReflected 20.0 // Reflected Apparent Temperature [°C]
|
||||||
|
|
||||||
// 0.01 to 0.99 on the emissivity scale.
|
// 0.01 to 0.99 on the emissivity scale.
|
||||||
|
@ -15,4 +26,11 @@
|
||||||
// (0.6 or greater depending on the surface condition and the amount of oxidation).
|
// (0.6 or greater depending on the surface condition and the amount of oxidation).
|
||||||
// Most flat-finish paints are around 0.90, while human skin and water are about 0.98.
|
// Most flat-finish paints are around 0.90, while human skin and water are about 0.98.
|
||||||
|
|
||||||
#define Emissivity 0.95 // Emissivity of object
|
// Emissivity of object
|
||||||
|
// defaults from app:
|
||||||
|
// matte 0.9
|
||||||
|
// half matte 0.8
|
||||||
|
// half shiny 0.6
|
||||||
|
// shiny 0.3
|
||||||
|
#define Emissivity 0.90
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue