X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Ffindobject%2Ffindobjectwindow.C;fp=cinelerra-5.1%2Fplugins%2Ffindobject%2Ffindobjectwindow.C;h=7f9e440c4e34bdcd078ef4059404169b52487293;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=0000000000000000000000000000000000000000;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/findobject/findobjectwindow.C b/cinelerra-5.1/plugins/findobject/findobjectwindow.C new file mode 100644 index 00000000..7f9e440c --- /dev/null +++ b/cinelerra-5.1/plugins/findobject/findobjectwindow.C @@ -0,0 +1,604 @@ + +/* + * CINELERRA + * Copyright (C) 1997-2012 Adam Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "bcdisplayinfo.h" +#include "clip.h" +#include "language.h" +#include "findobject.h" +#include "findobjectwindow.h" +#include "theme.h" + + +FindObjectWindow::FindObjectWindow(FindObjectMain *plugin) + : PluginClientWindow(plugin, + 300, + 550, + 300, + 550, + 0) +{ + this->plugin = plugin; +} + +FindObjectWindow::~FindObjectWindow() +{ +} + +void FindObjectWindow::create_objects() +{ + int x1 = 10, x = 10, y = 10; + int x2 = 310; + BC_Title *title; + + + add_subwindow(title = new BC_Title(x1, + y, + _("Algorithm:"))); + add_subwindow(algorithm = new FindObjectAlgorithm(plugin, + this, + x1 + title->get_w() + 10, + y)); + algorithm->create_objects(); + y += algorithm->get_h() + plugin->get_theme()->widget_border; + + + add_subwindow(title = new BC_Title(x1, + y, + _("Search radius:\n(W/H Percent of image)"))); + add_subwindow(global_range_w = new FindObjectGlobalRange(plugin, + x1 + title->get_w() + 10, + y, + &plugin->config.global_range_w)); + add_subwindow(global_range_h = new FindObjectGlobalRange(plugin, + x1 + title->get_w() + 10 + global_range_w->get_w(), + y, + &plugin->config.global_range_h)); + + y += 50; + add_subwindow(title = new BC_Title(x1, + y, + _("Object size:\n(W/H Percent of image)"))); + add_subwindow(global_block_w = new FindObjectBlockSize(plugin, + x1 + title->get_w() + 10, + y, + &plugin->config.global_block_w)); + add_subwindow(global_block_h = new FindObjectBlockSize(plugin, + x1 + title->get_w() + 10 + global_block_w->get_w(), + y, + &plugin->config.global_block_h)); + + y += 40; + add_subwindow(title = new BC_Title(x, y + 10, _("Block X:"))); + add_subwindow(block_x = new FindObjectBlockCenter(plugin, + this, + x + title->get_w() + 10, + y, + &plugin->config.block_x)); + add_subwindow(block_x_text = new FindObjectBlockCenterText(plugin, + this, + x + title->get_w() + 10 + block_x->get_w() + 10, + y + 10, + &plugin->config.block_x)); + block_x->center_text = block_x_text; + block_x_text->center = block_x; + + y += 40; + add_subwindow(title = new BC_Title(x, y + 10, _("Block Y:"))); + add_subwindow(block_y = new FindObjectBlockCenter(plugin, + this, + x + title->get_w() + 10, + y, + &plugin->config.block_y)); + add_subwindow(block_y_text = new FindObjectBlockCenterText(plugin, + this, + x + title->get_w() + 10 + block_y->get_w() + 10, + y + 10, + &plugin->config.block_y)); + block_y->center_text = block_y_text; + block_y_text->center = block_y; + + + y += 40; + add_subwindow(draw_keypoints = new FindObjectDrawKeypoints(plugin, + this, + x, + y)); + + y += draw_keypoints->get_h() + plugin->get_theme()->widget_border; + add_subwindow(draw_border = new FindObjectDrawBorder(plugin, + this, + x, + y)); + + y += draw_keypoints->get_h() + plugin->get_theme()->widget_border; + add_subwindow(replace_object = new FindObjectReplace(plugin, + this, + x, + y)); + + y += draw_keypoints->get_h() + plugin->get_theme()->widget_border; + add_subwindow(draw_object_border = new FindObjectDrawObjectBorder(plugin, + this, + x, + y)); + + + y += draw_keypoints->get_h() + plugin->get_theme()->widget_border; + add_subwindow(title = new BC_Title(x, y, _("Object layer:"))); + object_layer = new FindObjectLayer(plugin, + this, + x + title->get_w() + 10, + y, + &plugin->config.object_layer); + object_layer->create_objects(); + y += object_layer->get_h() + plugin->get_theme()->widget_border; + + add_subwindow(title = new BC_Title(x, y, _("Replacement object layer:"))); + replace_layer = new FindObjectLayer(plugin, + this, + x + title->get_w() + 10, + y, + &plugin->config.replace_layer); + replace_layer->create_objects(); + y += replace_layer->get_h() + plugin->get_theme()->widget_border; + + add_subwindow(title = new BC_Title(x, y, _("Output/scene layer:"))); + scene_layer = new FindObjectLayer(plugin, + this, + x + title->get_w() + 10, + y, + &plugin->config.scene_layer); + scene_layer->create_objects(); + y += scene_layer->get_h() + plugin->get_theme()->widget_border; + + + add_subwindow(title = new BC_Title(x, y + 10, _("Object blend amount:"))); + add_subwindow(blend = new FindObjectBlend(plugin, + x + title->get_w() + plugin->get_theme()->widget_border, + y, + &plugin->config.blend)); + y += blend->get_h(); + + + add_subwindow(title = new BC_Title(x, y + 10, _("Camshift VMIN:"))); + add_subwindow(vmin = new FindObjectCamParam(plugin, + x + title->get_w() + plugin->get_theme()->widget_border, + y, + &plugin->config.vmin)); + y += vmin->get_h() * 2 / 3; + + add_subwindow(title = new BC_Title(x, y + 10, _("Camshift VMAX:"))); + add_subwindow(vmax = new FindObjectCamParam(plugin, + x + title->get_w() + vmin->get_w() + plugin->get_theme()->widget_border, + y, + &plugin->config.vmax)); + y += vmin->get_h() * 2 / 3; + + add_subwindow(title = new BC_Title(x, y + 10, _("Camshift SMIN:"))); + add_subwindow(smin = new FindObjectCamParam(plugin, + x + title->get_w() + plugin->get_theme()->widget_border, + y, + &plugin->config.smin)); + y += vmin->get_h(); + + + + show_window(1); +} + + + + + + + +FindObjectGlobalRange::FindObjectGlobalRange(FindObjectMain *plugin, + int x, + int y, + int *value) + : BC_IPot(x, + y, + (int64_t)*value, + (int64_t)MIN_RADIUS, + (int64_t)MAX_RADIUS) +{ + this->plugin = plugin; + this->value = value; +} + + +int FindObjectGlobalRange::handle_event() +{ + *value = (int)get_value(); + plugin->send_configure_change(); + return 1; +} + + + + + +FindObjectBlockSize::FindObjectBlockSize(FindObjectMain *plugin, + int x, + int y, + float *value) + : BC_FPot(x, + y, + (float)*value, + (float)MIN_BLOCK, + (float)MAX_BLOCK) +{ + this->plugin = plugin; + this->value = value; + set_precision(0.1); +} + + + +int FindObjectBlockSize::handle_event() +{ + *value = get_value(); + plugin->send_configure_change(); + return 1; +} + + + + + + + +FindObjectBlockCenter::FindObjectBlockCenter(FindObjectMain *plugin, + FindObjectWindow *gui, + int x, + int y, + float *value) + : BC_FPot(x, + y, + *value, + (float)0, + (float)100) +{ + this->plugin = plugin; + this->gui = gui; + this->value = value; + set_precision(0.1); +} + +int FindObjectBlockCenter::handle_event() +{ + *value = get_value(); + center_text->update(*value); + plugin->send_configure_change(); + return 1; +} + + + + + + +FindObjectBlockCenterText::FindObjectBlockCenterText(FindObjectMain *plugin, + FindObjectWindow *gui, + int x, + int y, + float *value) + : BC_TextBox(x, + y, + 75, + 1, + *value) +{ + this->plugin = plugin; + this->gui = gui; + this->value = value; + set_precision(1); +} + +int FindObjectBlockCenterText::handle_event() +{ + *value = atof(get_text()); + center->update(*value); + plugin->send_configure_change(); + return 1; +} + + + + + + + +FindObjectDrawBorder::FindObjectDrawBorder(FindObjectMain *plugin, + FindObjectWindow *gui, + int x, + int y) + : BC_CheckBox(x, + y, + plugin->config.draw_border, + _("Draw border")) +{ + this->gui = gui; + this->plugin = plugin; +} + +int FindObjectDrawBorder::handle_event() +{ + plugin->config.draw_border = get_value(); + plugin->send_configure_change(); + return 1; +} + + + + + + +FindObjectDrawKeypoints::FindObjectDrawKeypoints(FindObjectMain *plugin, + FindObjectWindow *gui, + int x, + int y) + : BC_CheckBox(x, + y, + plugin->config.draw_keypoints, + _("Draw keypoints")) +{ + this->gui = gui; + this->plugin = plugin; +} + +int FindObjectDrawKeypoints::handle_event() +{ + plugin->config.draw_keypoints = get_value(); + plugin->send_configure_change(); + return 1; +} + + + + +FindObjectReplace::FindObjectReplace(FindObjectMain *plugin, + FindObjectWindow *gui, + int x, + int y) + : BC_CheckBox(x, + y, + plugin->config.replace_object, + _("Replace object")) +{ + this->gui = gui; + this->plugin = plugin; +} + +int FindObjectReplace::handle_event() +{ + plugin->config.replace_object = get_value(); + plugin->send_configure_change(); + return 1; +} + + + + + + +FindObjectDrawObjectBorder::FindObjectDrawObjectBorder(FindObjectMain *plugin, + FindObjectWindow *gui, + int x, + int y) + : BC_CheckBox(x, + y, + plugin->config.draw_object_border, + _("Draw object border")) +{ + this->gui = gui; + this->plugin = plugin; +} + +int FindObjectDrawObjectBorder::handle_event() +{ + plugin->config.draw_object_border = get_value(); + plugin->send_configure_change(); + return 1; +} + + + + + + +FindObjectLayer::FindObjectLayer(FindObjectMain *plugin, + FindObjectWindow *gui, + int x, + int y, + int *value) + : BC_TumbleTextBox(gui, + *value, + MIN_LAYER, + MAX_LAYER, + x, + y, + calculate_w(gui)) +{ + this->plugin = plugin; + this->gui = gui; + this->value = value; +} + +int FindObjectLayer::handle_event() +{ + *value = atoi(get_text()); + plugin->send_configure_change(); + return 1; +} + +int FindObjectLayer::calculate_w(FindObjectWindow *gui) +{ + int result = 0; + result = gui->get_text_width(MEDIUMFONT, "000"); + return result + 50; +} + + + + + + + + +FindObjectAlgorithm::FindObjectAlgorithm(FindObjectMain *plugin, FindObjectWindow *gui, int x, int y) + : BC_PopupMenu(x, + y, + calculate_w(gui), + to_text(plugin->config.algorithm)) +{ + this->plugin = plugin; + this->gui = gui; +} + +int FindObjectAlgorithm::handle_event() +{ + plugin->config.algorithm = from_text(get_text()); + plugin->send_configure_change(); + return 1; +} + +void FindObjectAlgorithm::create_objects() +{ + add_item(new BC_MenuItem(to_text(NO_ALGORITHM))); +#if HAVE_OPENCV_SURF + add_item(new BC_MenuItem(to_text(ALGORITHM_SURF))); +#endif + add_item(new BC_MenuItem(to_text(ALGORITHM_CAMSHIFT))); + add_item(new BC_MenuItem(to_text(ALGORITHM_BLOB))); +} + +int FindObjectAlgorithm::from_text(char *text) +{ + if(!strcmp(text, _("Don't Calculate"))) return NO_ALGORITHM; +#if HAVE_OPENCV_SURF + if(!strcmp(text, _("SURF"))) return ALGORITHM_SURF; +#endif + if(!strcmp(text, _("CAMSHIFT"))) return ALGORITHM_CAMSHIFT; + if(!strcmp(text, _("Blob"))) return ALGORITHM_BLOB; + return ALGORITHM_CAMSHIFT; +} + +char* FindObjectAlgorithm::to_text(int mode) +{ + switch(mode) + { + case NO_ALGORITHM: + return _("Don't Calculate"); +#if HAVE_OPENCV_SURF + case ALGORITHM_SURF: + return _("SURF"); +#endif + case ALGORITHM_BLOB: + return _("Blob"); + case ALGORITHM_CAMSHIFT: + break; + } + return _("CAMSHIFT"); +} + +int FindObjectAlgorithm::calculate_w(FindObjectWindow *gui) +{ + int result = 0; + result = MAX(result, gui->get_text_width(MEDIUMFONT, to_text(NO_ALGORITHM))); +#if HAVE_OPENCV_SURF + result = MAX(result, gui->get_text_width(MEDIUMFONT, to_text(ALGORITHM_SURF))); +#endif + result = MAX(result, gui->get_text_width(MEDIUMFONT, to_text(ALGORITHM_CAMSHIFT))); + result = MAX(result, gui->get_text_width(MEDIUMFONT, to_text(ALGORITHM_BLOB))); + return result + 50; +} + + + + + + + + +FindObjectCamParam::FindObjectCamParam(FindObjectMain *plugin, + int x, + int y, + int *value) + : BC_IPot(x, + y, + (int64_t)*value, + (int64_t)MIN_CAMSHIFT, + (int64_t)MAX_CAMSHIFT) +{ + this->plugin = plugin; + this->value = value; +} + + +int FindObjectCamParam::handle_event() +{ + *value = (int)get_value(); + plugin->send_configure_change(); + return 1; +} + + + + + + + + +FindObjectBlend::FindObjectBlend(FindObjectMain *plugin, + int x, + int y, + int *value) + : BC_IPot(x, + y, + (int64_t)*value, + (int64_t)MIN_BLEND, + (int64_t)MAX_BLEND) +{ + this->plugin = plugin; + this->value = value; +} + + +int FindObjectBlend::handle_event() +{ + *value = (int)get_value(); + plugin->send_configure_change(); + return 1; +} + + + + + + + + + + + + +