From: <da...@us...> - 2009-06-08 18:15:01
|
Revision: 3927 http://hugin.svn.sourceforge.net/hugin/?rev=3927&view=rev Author: dangelo Date: 2009-06-08 18:14:56 +0000 (Mon, 08 Jun 2009) Log Message: ----------- removed obselete Makefile.am files. Removed Paths: ------------- hugin/trunk/doc/Makefile.am hugin/trunk/src/foreign/levmar/Makefile.am hugin/trunk/src/hugin1/hugin/Makefile.am hugin/trunk/src/hugin1/hugin/xrc/Makefile.am hugin/trunk/src/hugin1/hugin/xrc/data/Makefile.am hugin/trunk/src/hugin1/hugin/xrc/data/help_common/Makefile.am hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/Makefile.am hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/Makefile.am hugin/trunk/src/hugin1/nona_gui/Makefile.am hugin/trunk/src/hugin1/tests/Makefile.am hugin/trunk/src/hugin1/tools/Makefile.am Deleted: hugin/trunk/doc/Makefile.am =================================================================== --- hugin/trunk/doc/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/doc/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,3 +0,0 @@ -EXTRA_DIST = fulla.1 nona.txt fulla.txt -man_MANS = fulla.1 - Deleted: hugin/trunk/src/foreign/levmar/Makefile.am =================================================================== --- hugin/trunk/src/foreign/levmar/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/foreign/levmar/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,9 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -INCLUDES = -I$(top_builddir)/src/include -I${top_srcdir}/src/include - -noinst_LTLIBRARIES = liblevmar.la -liblevmar_la_SOURCES = lm.c Axb.c misc.c lmlec.c lmbc.c -noinst_HEADERS = misc.h lm.h -EXTRA_DIST = misc_core.c Axb_core.c lmbc_core.c lm_core.c lmdemo.c lmlec_core.c levmar.vcproj README.txt LICENSE CMakeLists.txt Makefile.vc Deleted: hugin/trunk/src/hugin1/hugin/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/hugin/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/hugin/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,103 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." -INCLUDES = -I$(top_builddir)/src/include -I${top_srcdir}/src/foreign -I${top_srcdir}/src/include -I.. $(WX_CXXFLAGS) -AM_CXXFLAGS = $(GTK_CFLAGS) $(PANO_FLAGS) $(BOOST_CPPFLAGS) $(OPENEXR_CFLAGS) -DINSTALL_XRC_DIR=\"$(datadir)/hugin/xrc\" -DINSTALL_LOCALE_DIR=\"${datadir}/locale\" - -SUFFIXES = .rc - -RC = @WINDRES@ -RCFLAGS = --use-temp-file --verbose -O COFF - -RCCOMPILE = $(RC) $(RCFLAGS) \ - `echo $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) |\ - sed -e 's/-m.*//g'` - - sed -e 's/-I/--include-dir /g;s/-D/--define /g;s/-m.*//g'` -#RCCOMPILE = $(RC) $(RCFLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) - - -STD_SRC = huginApp.cpp ImagesList.cpp AutoCtrlPointCreator.cpp MainFrame.cpp CPImageCtrl.cpp CPEditorPanel.cpp LensPanel.cpp \ - ImagesPanel.cpp CommandHistory.cpp PanoPanel.cpp NonaStitcherPanel.cpp PTStitcherPanel.cpp PreviewFrame.cpp \ - PreviewPanel.cpp CropPanel.cpp OptimizePhotometricPanel.cpp OptimizePanel.cpp \ - RunStitcherFrame.cpp CPListFrame.cpp \ - TextKillFocusHandler.cpp PanoDruid.cpp \ - PreferencesDialog.cpp LocalizedFileTipProvider.cpp VigCorrDialog.cpp \ - wxPanoCommand.cpp MyExternalCmdExecDialog.cpp UniversalCursor.cpp \ - AssistantPanel.cpp HFOVDialog.cpp - -if HAVE_MINGW -WIN_SRC = hugin_rc.rc -else -WIN_SRC = -endif - -SUBDIRS = xrc po - -noinst_LTLIBRARIES = libhuginwxutils.la -libhuginwxutils_la_SOURCES = ImageCache.cpp MyProgressDialog.cpp Plot2D.cpp \ - PTWXDlg.cpp - -bin_PROGRAMS = hugin -hugin_SOURCES = $(STD_SRC) $(WIN_SRC) -hugin_LDFLAGS = $(WX_LIBS) $(GTK_LIBS) $(LIB_TIFF) $(LIB_PNG) $(LIB_JPEG) $(LIB_ZLIB) $(LIB_PANO) $(BOOST_THREAD_LIB) $(OPENEXR_LIBS) -hugin_LDADD = ${top_builddir}/src/Panorama/libpanorama.la ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/jhead/libjhead.la ${top_builddir}/src/common/libcommon.la \ - libhuginwxutils.la ${top_builddir}/src/vigra_ext/libvigra_ext.la \ - ${top_builddir}/src/foreign/levmar/liblevmar.la - -noinst_HEADERS = win_prep.h - -desktopdir = $(datadir)/applications -desktop_DATA = hugin.desktop - -sharedmimedir = $(datadir)/mime -sharedmimepackagedir = $(sharedmimedir)/packages -sharedmimepackage_DATA = hugin.xml - -gnomemimeicondir = $(datadir)/icons/gnome/48x48/mimetypes -gnomemimeicon_DATA = gnome-mime-application-x-ptoptimizer-script.png - -EXTRA_DIST = hugin.vcproj hugin_rc.rc hugin.desktop hugin.xml gnome-mime-application-x-ptoptimizer-script.png - -.rc.o: - $(RCCOMPILE) -i $< -o $@ - -install-data-hook: - - if test -n "$(UPDATE_MIME_DATABASE)"; then \ - if test -z "${DESTDIR}" ; then \ - echo "*** calling $(UPDATE_MIME_DATABASE) \"${sharedmimedir}\""; \ - $(UPDATE_MIME_DATABASE) "${sharedmimedir}"; \ - else \ - echo "*** After installation call $(UPDATE_MIME_DATABASE) \"${sharedmimedir}\""; \ - fi; \ - fi - if test -n "$(UPDATE_DESKTOP_DATABASE)"; then \ - if test -z "${DESTDIR}" ; then \ - echo "*** calling $(UPDATE_DESKTOP_DATABASE)"; \ - if "$(UPDATE_DESKTOP_DATABASE)"; then \ - echo "Update desktop database ok"; \ - else \ - echo "Update desktop database returned an error" ;\ - fi\ - else \ - echo "*** After installation call $(UPDATE_DESKTOP_DATABASE)"; \ - fi; \ - fi - - -uninstall-local: uninstall-sharedmimepackageDATA uninstall-desktopDATA - - if test -n "$(UPDATE_MIME_DATABASE)"; then \ - if test -z "${DESTDIR}" ; then \ - $(UPDATE_MIME_DATABASE) "${sharedmimedir}"; \ - else \ - echo "*** After uninstallation call $(UPDATE_MIME_DATABASE) \"${sharedmimedir}\""; \ - fi; \ - fi - if test -n "$(UPDATE_DESKTOP_DATABASE)"; then \ - if test -z "${DESTDIR}" ; then \ - $(UPDATE_DESKTOP_DATABASE); \ - else \ - echo "*** After uninstallation call $(UPDATE_DESKTOP_DATABASE)"; \ - fi; \ - fi - Deleted: hugin/trunk/src/hugin1/hugin/xrc/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/hugin/xrc/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,49 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -SUBDIRS=data - -SUFFIXES=.xrs - -if HAVE_MINGW -xrcdir = $(bindir)/xrc -else -xrcdir = $(datadir)/hugin/xrc -endif - -XRC_FILES = about.xrc anchor_orientation.xrc cp_editor_panel.xrc cp_list_frame.xrc crop_panel.xrc \ - edit_script_dialog.xrc edit_text.xrc help.xrc \ - images_panel.xrc keyboard_help.xrc lens_panel.xrc main_frame.xrc main_menubar.xrc main_menu.xrc main_tool.xrc nona_panel.xrc \ - optimize_panel.xrc pano_panel.xrc pref_dialog.xrc preview_frame.xrc ptstitcher_panel.xrc run_optimizer_frame.xrc run_stitcher_frame.xrc \ - vig_corr_dlg.xrc assistant_panel.xrc \ - optimize_photo_panel.xrc - -XRS_FILES = about.xrs anchor_orientation.xrs cp_editor_panel.xrs cp_list_frame.xrs crop_panel.xrs \ - edit_script_dialog.xrs edit_text.xrs help.xrs \ - images_panel.xrs keyboard_help.xrs lens_panel.xrs main_frame.xrs main_menubar.xrs main_menu.xrs main_tool.xrs nona_panel.xrs \ - optimize_panel.xrs pano_panel.xrs pref_dialog.xrs preview_frame.xrs ptstitcher_panel.xrs run_optimizer_frame.xrs run_stitcher_frame.xrs \ - vig_corr_dlg.xrs assistant_panel.xrs \ - optimize_photo_panel.xrs - -all-local: stamp-xrc stamp-xrs - -stamp-xrc: $(XRC_FILES) - for p in $?; do \ - if test -e `basename $$p` ; then :; else \ - ( $(LN_S) $$p . ) ; \ - fi; \ - done - @echo "touch stamp-xrc" - @echo timestamp > stamp-xrcT - @mv stamp-xrcT stamp-xrc - -stamp-xrs: $(XRS_FILES) - @echo "touch stamp-xrs" - @echo timestamp > stamp-xrsT - @mv stamp-xrsT stamp-xrs - - -dist_xrc_DATA = $(XRC_FILES) - -.xrc.xrs: - -wxrc -g -o $(srcdir)/$@ $< Deleted: hugin/trunk/src/hugin1/hugin/xrc/data/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/hugin/xrc/data/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,38 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -SUBDIRS=help_common help_en_EN help_fr_FR - -HTM_FILES = $(wildcard $(srcdir)/*.htm) -HTML_FILES = $(wildcard $(srcdir)/*.html) -ICO_FILES = $(wildcard $(srcdir)/*.ico) -JPG_FILES = $(wildcard $(srcdir)/*.jpg) -PNG_FILES = $(wildcard $(srcdir)/*.png) -XPM_FILES = $(wildcard $(srcdir)/*.xpm) -TXT_FILES = $(wildcard $(srcdir)/*.txt) -OTHER_FILES = $(wildcard $(srcdir)/*.mk) - -if HAVE_MINGW -xrcdatadir = $(bindir)/xrc/data -else -xrcdatadir = $(datadir)/hugin/xrc/data -endif - -all-local: stamp-data - -stamp-data: $(HTM_FILES) $(HTML_FILES) $(ICO_FILES) $(JPG_FILES) $(PNG_FILES) $(XPM_FILES) $(TXT_FILES) $(OTHER_FILES) - for p in $?; do \ - if test -e `basename $$p` ; then :; else \ - ( $(LN_S) $$p . ) ; \ - fi; \ - done - @echo "touch stamp-data" - @echo timestamp > stamp-dataT - @mv stamp-dataT stamp-data - -dist_xrcdata_DATA = $(HTM_FILES) $(HTML_FILES) $(ICO_FILES) $(JPG_FILES) $(PNG_FILES) $(XPM_FILES) $(TXT_FILES) $(OTHER_FILES) - -pixmapsdir = $(datadir)/pixmaps -pixmaps_DATA = hugin.png -hugin.png: $(srcdir)/icon.png - cp $(srcdir)/icon.png hugin.png Deleted: hugin/trunk/src/hugin1/hugin/xrc/data/help_common/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/help_common/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/hugin/xrc/data/help_common/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,31 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -HTM_FILES = $(wildcard $(srcdir)/*.htm) -HTML_FILES = $(wildcard $(srcdir)/*.html) -JPG_FILES = $(wildcard $(srcdir)/*.jpg) -PNG_FILES = $(wildcard $(srcdir)/*.png) -TXT_FILES = $(wildcard $(srcdir)/*.txt) -HLP_FILES = $(wildcard $(srcdir)/*.hhk) $(wildcard $(srcdir)/*.hhc) $(wildcard $(srcdir)/*.hhp) $(wildcard $(srcdir)/*.hhk) - -if HAVE_MINGW -xrcdatadir = $(bindir)/xrc/data/help_common -else -xrcdatadir = $(datadir)/hugin/xrc/data/help_common -endif - -all-local: stamp-data - -stamp-data: $(HTM_FILES) $(HTML_FILES) $(ICO_FILES) $(JPG_FILES) $(PNG_FILES) $(TXT_FILES) $(HLP_FILES) - for p in $?; do \ - if test -e `basename $$p` ; then :; else \ - ( $(LN_S) $$p . ) ; \ - fi; \ - done - @echo "touch stamp-data" - @echo timestamp > stamp-dataT - @mv stamp-dataT stamp-data - -dist_xrcdata_DATA = $(HTM_FILES) $(HTML_FILES) $(JPG_FILES) $(PNG_FILES) $(TXT_FILES) $(HLP_FILES) - - Deleted: hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,31 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -HTM_FILES = $(wildcard $(srcdir)/*.htm) -HTML_FILES = $(wildcard $(srcdir)/*.html) -JPG_FILES = $(wildcard $(srcdir)/*.jpg) -PNG_FILES = $(wildcard $(srcdir)/*.png) -TXT_FILES = $(wildcard $(srcdir)/*.txt) -HLP_FILES = $(wildcard $(srcdir)/*.hhk) $(wildcard $(srcdir)/*.hhc) $(wildcard $(srcdir)/*.hhp) $(wildcard $(srcdir)/*.hhk) - -if HAVE_MINGW -xrcdatadir = $(bindir)/xrc/data/help_en_EN -else -xrcdatadir = $(datadir)/hugin/xrc/data/help_en_EN -endif - -all-local: stamp-data - -stamp-data: $(HTM_FILES) $(HTML_FILES) $(ICO_FILES) $(JPG_FILES) $(PNG_FILES) $(TXT_FILES) $(HLP_FILES) - for p in $?; do \ - if test -e `basename $$p` ; then :; else \ - ( $(LN_S) $$p . ) ; \ - fi; \ - done - @echo "touch stamp-data" - @echo timestamp > stamp-dataT - @mv stamp-dataT stamp-data - -dist_xrcdata_DATA = $(HTM_FILES) $(HTML_FILES) $(JPG_FILES) $(PNG_FILES) $(TXT_FILES) $(HLP_FILES) - - Deleted: hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,31 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -HTM_FILES = $(wildcard $(srcdir)/*.htm) -HTML_FILES = $(wildcard $(srcdir)/*.html) -JPG_FILES = $(wildcard $(srcdir)/*.jpg) -PNG_FILES = $(wildcard $(srcdir)/*.png) -TXT_FILES = $(wildcard $(srcdir)/*.txt) -HLP_FILES = $(wildcard $(srcdir)/*.hhk) $(wildcard $(srcdir)/*.hhc) $(wildcard $(srcdir)/*.hhp) $(wildcard $(srcdir)/*.hhk) - -if HAVE_MINGW -xrcdatadir = $(bindir)/xrc/data/help_fr_FR -else -xrcdatadir = $(datadir)/hugin/xrc/data/help_fr_FR -endif - -all-local: stamp-data - -stamp-data: $(HTM_FILES) $(HTML_FILES) $(ICO_FILES) $(JPG_FILES) $(PNG_FILES) $(TXT_FILES) $(HLP_FILES) - for p in $?; do \ - if test -e `basename $$p` ; then :; else \ - ( $(LN_S) $$p . ) ; \ - fi; \ - done - @echo "touch stamp-data" - @echo timestamp > stamp-dataT - @mv stamp-dataT stamp-data - -dist_xrcdata_DATA = $(HTM_FILES) $(HTML_FILES) $(JPG_FILES) $(PNG_FILES) $(TXT_FILES) $(HLP_FILES) - - Deleted: hugin/trunk/src/hugin1/nona_gui/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/nona_gui/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/nona_gui/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,38 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." -INCLUDES = -I$(top_builddir)/src/include -I${top_srcdir}/src/include -I${top_srcdir}/src/foreign $(WX_CXXFLAGS) -AM_CXXFLAGS = $(JPEG_FLAGS) $(PNG_FLAGS) $(TIFF_FLAGS) $(ZLIB_FLAGS) $(OPENEXR_CFLAGS) $(PANO_FLAGS) $(BOOST_CPPFLAGS) -DINSTALL_XRC_DIR=\"$(datadir)/hugin/xrc\" -DINSTALL_LOCALE_DIR=\"${datadir}/locale\" -AM_LDFLAGS = $(WX_LIBS) $(LIB_JPEG) $(LIB_PNG) $(LIB_TIFF) $(LIB_ZLIB) $(LIB_PANO) $(BOOST_THREAD_LIB) $(OPENEXR_LIBS) - -SUFFIXES = .rc - -RC = @WINDRES@ -RCFLAGS = --use-temp-file --verbose -O COFF - -RCCOMPILE = $(RC) $(RCFLAGS) \ - `echo $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) |\ - sed -e 's/-I/--include-dir /g;s/-D/--define /g;s/-m.*//g'` - - -SUBDIRS = po - -if HAVE_MINGW -WIN_SRC = nona_gui_rc.rc -else -WIN_SRC = -endif - -bin_PROGRAMS = nona_gui -nona_gui_SOURCES = nona_gui.cpp $(WIN_SRC) - -nona_gui_LDADD = ${top_builddir}/src/Panorama/libpanorama.la ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/jhead/libjhead.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/hugin/libhuginwxutils.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la - -EXTRA_DIST = nona_gui_rc.rc nona_gui.vcproj - -.rc.o: - $(RCCOMPILE) -i $< -o $@ - Deleted: hugin/trunk/src/hugin1/tests/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/tests/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/tests/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,20 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -INCLUDES = -I$(top_builddir)/src/include -I${top_srcdir}/src/foreign -I${top_srcdir}/src/include -AM_CPPFLAGS = $(BOOST_CPPFLAGS) $(JPEG_FLAGS) $(TIFF_FLAGS) $(PANO_FLAGS) -AM_LDFLAGS = $(LIB_JPEG) $(LIB_TIFF) $(LIB_PANO) ${top_builddir}/src/Panorama/libpanorama.la \ - $(BOOST_THREAD_LIB) \ - ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/jhead/libjhead.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la - -bin_PROGRAMS = test_projections vigra_ext_lut - -test_projections_SOURCES = test_projections.cpp - -vigra_ext_lut_SOURCES = vigra_ext_lut.cpp -vigra_ext_lut_LDADD = -lboost_unit_test_framework - -EXTRA_DIST = test_projections.vcproj Deleted: hugin/trunk/src/hugin1/tools/Makefile.am =================================================================== --- hugin/trunk/src/hugin1/tools/Makefile.am 2009-06-07 23:48:17 UTC (rev 3926) +++ hugin/trunk/src/hugin1/tools/Makefile.am 2009-06-08 18:14:56 UTC (rev 3927) @@ -1,68 +0,0 @@ -# Over-ride default includes so that we have finer control in the makefiles -DEFAULT_INCLUDES="-I." - -INCLUDES = -I$(top_builddir)/src/include -I${top_srcdir}/src/foreign -I${top_srcdir}/src/include -AM_CPPFLAGS = $(BOOST_CPPFLAGS) $(JPEG_FLAGS) $(TIFF_FLAGS) $(PANO_FLAGS) $(OPENEXR_CFLAGS) -AM_LDFLAGS = $(LIB_JPEG) $(LIB_TIFF) $(LIB_PANO) $(BOOST_THREAD_LIB) $(OPENEXR_LIBS) - -bin_PROGRAMS = align_image_stack nona vig_optimize autooptimiser fulla -#zhang_undistort color_correct_tiff - -img2vips_SOURCES = img2vips.cpp -img2vips_CPPFLAGS = $(VIPS_CFLAGS) -img2vips_LDADD = ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la \ - $(VIPS_LIBS) - -nona_SOURCES = nona.cpp -nona_LDADD = ${top_builddir}/src/Panorama/libpanorama.la \ - ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/jhead/libjhead.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la - -#automatch_SOURCES = automatch.cpp -#automatch_LDADD = ${top_builddir}/src/Panorama/libpanorama.la ${top_builddir}/src/common/libcommon.la \ -# ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la ${top_builddir}/src/jhead/libjhead.la \ -# ${top_builddir}/src/klt/libklt.la - -autooptimiser_SOURCES = autooptimiser.cpp -autooptimiser_LDADD = ${top_builddir}/src/Panorama/libpanorama.la ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la ${top_builddir}/src/jhead/libjhead.la - -zhang_undistort_SOURCES = zhang_undistort.cpp -zhang_undistort_LDADD = ${top_builddir}/src/Panorama/libpanorama.la ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la ${top_builddir}/src/jhead/libjhead.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la \ - $(BOOST_THREAD_LIB) - -color_correct_tiff_SOURCES = color_correct_tiff.cpp -color_correct_tiff_LDADD = $(LIB_TIFF) - -fulla_SOURCES = fulla.cpp -fulla_LDADD = ${top_builddir}/src/Panorama/libpanorama.la $(BOOST_THREAD_LIB) \ - ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/jhead/libjhead.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la - -vig_optimize_SOURCES = vig_optimize.cpp -vig_optimize_LDADD = ${top_builddir}/src/Panorama/libpanorama.la $(BOOST_THREAD_LIB) \ - ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/jhead/libjhead.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la \ - ${top_builddir}/src/foreign/levmar/liblevmar.la - -align_image_stack_SOURCES = align_image_stack.cpp -align_image_stack_LDADD = ${top_builddir}/src/Panorama/libpanorama.la $(BOOST_THREAD_LIB) \ - ${top_builddir}/src/common/libcommon.la \ - ${top_builddir}/src/foreign/vigra_impex/libvigra_impex.la \ - ${top_builddir}/src/jhead/libjhead.la \ - ${top_builddir}/src/vigra_ext/libvigra_ext.la - - - -# DGSW remove automatch.cpp from the list below if you uncomment automatch_SOURCES and automatch_LDADD -EXTRA_DIST = nona.vcproj automatch.cpp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ip...@us...> - 2009-07-20 02:47:51
|
Revision: 4068 http://hugin.svn.sourceforge.net/hugin/?rev=4068&view=rev Author: ippei Date: 2009-07-20 02:47:47 +0000 (Mon, 20 Jul 2009) Log Message: ----------- Mac: have PTBatcherGUI and Hugin "send to batch" work properly on osx. Hacks no longer needed. Modified Paths: -------------- hugin/trunk/mac/PTBatcherGUI-Info.plist hugin/trunk/src/hugin1/hugin/PanoPanel.cpp hugin/trunk/src/hugin1/ptbatcher/Batch.cpp hugin/trunk/src/hugin1/ptbatcher/PTBatcherGUI.cpp Removed Paths: ------------- hugin/trunk/mac/PTBatcherGUI_hack/Contents/Info.plist hugin/trunk/mac/PTBatcherGUI_hack/Contents/MacOS/PTBatcherGui hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/AppSettings.plist hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/English.lproj/InfoPlist.strings hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/English.lproj/MainMenu.nib/ hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/appIcon.icns hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/script hugin/trunk/mac/PTBatcherGUI_hack/PTBatcherGUI_hack.sh Modified: hugin/trunk/mac/PTBatcherGUI-Info.plist =================================================================== --- hugin/trunk/mac/PTBatcherGUI-Info.plist 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/mac/PTBatcherGUI-Info.plist 2009-07-20 02:47:47 UTC (rev 4068) @@ -9,6 +9,22 @@ <dict> <key>CFBundleTypeExtensions</key> <array> + <string>pto</string> + </array> + <key>CFBundleTypeMIMETypes</key> + <array> + <string>application/x-ptoptimizer-script</string> + </array> + <key>CFBundleTypeName</key> + <string>Hugin Project</string> + <key>CFBundleTypeRole</key> + <string>Viewer</string> + <key>LSTypeIsPackage</key> + <false/> + </dict> + <dict> + <key>CFBundleTypeExtensions</key> + <array> <string>ptb</string> </array> <key>CFBundleTypeName</key> @@ -16,7 +32,7 @@ <key>CFBundleTypeIconFile</key> <string></string> <key>CFBundleTypeRole</key> - <string>Viewer</string> + <string>Editor</string> <key>LSTypeIsPackage</key> <false/> </dict> Deleted: hugin/trunk/mac/PTBatcherGUI_hack/Contents/Info.plist =================================================================== --- hugin/trunk/mac/PTBatcherGUI_hack/Contents/Info.plist 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/mac/PTBatcherGUI_hack/Contents/Info.plist 2009-07-20 02:47:47 UTC (rev 4068) @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>English</string> - <key>CFBundleDisplayName</key> - <string>PTBatcherGui</string> - <key>CFBundleExecutable</key> - <string>PTBatcherGui</string> - <key>CFBundleGetInfoString</key> - <string>PTBatcherGui 1.0 Copyright 2009 Pablo d'Angelo et al.</string> - <key>CFBundleIconFile</key> - <string>appIcon.icns</string> - <key>CFBundleIdentifier</key> - <string>PTBatcherGui.Hugin.sourceforge.net</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>PTBatcherGui</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>PTBG</string> - <key>LSEnvironment</key> - <dict/> - <key>LSHasLocalizedDisplayName</key> - <false/> - <key>LSMinimumSystemVersion</key> - <string>10.4</string> - <key>LSUIElement</key> - <false/> - <key>NSAppleScriptEnabled</key> - <false/> - <key>NSHumanReadableCopyright</key> - <string>PTBatcherGui 1.0 Copyright 2009 Pablo d'Angelo et al.</string> - <key>NSMainNibFile</key> - <string>MainMenu</string> - <key>NSPrincipalClass</key> - <string>NSApplication</string> -</dict> -</plist> Deleted: hugin/trunk/mac/PTBatcherGUI_hack/Contents/MacOS/PTBatcherGui =================================================================== (Binary files differ) Deleted: hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/AppSettings.plist =================================================================== --- hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/AppSettings.plist 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/AppSettings.plist 2009-07-20 02:47:47 UTC (rev 4068) @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>AppPathAsFirstArg</key> - <false/> - <key>Creator</key> - <string>Platypus-4.2</string> - <key>InterpreterParams</key> - <array/> - <key>IsDroppable</key> - <false/> - <key>OutputType</key> - <string>None</string> - <key>RemainRunningAfterCompletion</key> - <false/> - <key>RequiresAdminPrivileges</key> - <false/> - <key>ScriptInterpreter</key> - <string>/bin/sh</string> - <key>Secure</key> - <false/> - <key>TextBackground</key> - <string>#ffffff</string> - <key>TextEncoding</key> - <integer>1</integer> - <key>TextFont</key> - <string>Monaco</string> - <key>TextForeground</key> - <string>#000000</string> - <key>TextSize</key> - <real>10</real> -</dict> -</plist> Deleted: hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/English.lproj/InfoPlist.strings =================================================================== --- hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/English.lproj/InfoPlist.strings 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/English.lproj/InfoPlist.strings 2009-07-20 02:47:47 UTC (rev 4068) @@ -1,4 +0,0 @@ -CFBundleName = "PTBatcherGui"; -CFBundleShortVersionString = "1.0"; -CFBundleGetInfoString = "PTBatcherGui version 1.0 Copyright 2009 Pablo d'Angelo et al."; -NSHumanReadableCopyright = "Copyright 2009 Pablo d'Angelo et al.."; \ No newline at end of file Deleted: hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/appIcon.icns =================================================================== (Binary files differ) Deleted: hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/script =================================================================== --- hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/script 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/mac/PTBatcherGUI_hack/Contents/Resources/script 2009-07-20 02:47:47 UTC (rev 4068) @@ -1,28 +0,0 @@ -#!/bin/sh -# -# Original author: Aaron Voisine <aa...@vo...> -# pvQT modifications: Harry van der Wolf <har...@ho...> - -CWD="`dirname \"$0\"`" -BASE="`echo "$0" | sed -e 's/\/Contents\/Resources\/script/\//'`" -cd "$BASE" - -CWD="`(cd \"\`dirname \\\"$0\\\"\`\"; echo $PWD)`" - -export DYLD_FRAMEWORK_PATH="$CWD/../Frameworks" -export PATH="$CWD:$CWD/../MacOS:$PATH" - - -# TODO: Have to add ".UTF-8" to the LANG since ommiting causes avidemux -# to crash on startup in locale_from_utf8(). -export LANG="`grep \"\`defaults read .GlobalPreferences AppleCollationOrder \ - 2>&1\`_\" /usr/share/locale/locale.alias | tail -n1 | sed 's/\./ /' | \ - awk '{print $2}'`.UTF-8" - -if [ $# -lt 2 ]; -then - $CWD/../MacOS/PTBG -else - $CWD/../MacOS/PTBG "$@" -fi - Deleted: hugin/trunk/mac/PTBatcherGUI_hack/PTBatcherGUI_hack.sh =================================================================== --- hugin/trunk/mac/PTBatcherGUI_hack/PTBatcherGUI_hack.sh 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/mac/PTBatcherGUI_hack/PTBatcherGUI_hack.sh 2009-07-20 02:47:47 UTC (rev 4068) @@ -1,24 +0,0 @@ -#PTBatcherGUI hack 2009-05-22 Harry van der Wolf - -contentsdir="$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents" -resdir="$contentsdir/Resources" -PTBG_hackdir="PTBatcherGUI_hack" - -# First copy neccessary files to PTBatcherGUI.app -cp $PTBG_hackdir/Contents/Info.plist $contentsdir -cp $PTBG_hackdir/Contents/Resources/appIcon.icns $contentsdir/Resources -cp $PTBG_hackdir/Contents/Resources/AppSettings.plist $contentsdir/Resources -cp $PTBG_hackdir/Contents/Resources/script $contentsdir/Resources - -# rename current PTBatcherGUI and copy platypus version -mv $contentsdir/MacOS/PTBatcherGui $contentsdir/MacOS/PTBG -cp $PTBG_hackdir/Contents/MacOS/PTBatcherGui $contentsdir/MacOS - -# Copy project files -for file in `ls -d $resdir/*.lproj` -do - echo - echo "project: $file" - cp -Rf $PTBG_hackdir/Contents/Resources/English.lproj/* $file -done - Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2009-07-20 02:47:47 UTC (rev 4068) @@ -1033,12 +1033,16 @@ wxString projectFile = MainFrame::Get()->getProjectName(); if(wxFileName::FileExists(projectFile)) { +#if defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE + wxExecute(_T("open -b net.sourceforge.hugin.PTBatcherGUI "+wxQuoteFilename(projectFile))); +#else #ifdef __WINDOWS__ - wxString huginPath = getExePath(wxGetApp().argv[0])+wxFileName::GetPathSeparator(); + wxString huginPath = getExePath(wxGetApp().argv[0])+wxFileName::GetPathSeparator(); #else wxString huginPath = _T(""); //we call the batch processor directly without path on linux #endif wxExecute(huginPath+wxT("PTBatcherGUI ")+wxQuoteFilename(projectFile)); +#endif /*int i=0; wxString batchFileName = wxStandardPaths::Get().GetUserConfigDir()+wxFileName::GetPathSeparator(); Modified: hugin/trunk/src/hugin1/ptbatcher/Batch.cpp =================================================================== --- hugin/trunk/src/hugin1/ptbatcher/Batch.cpp 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/src/hugin1/ptbatcher/Batch.cpp 2009-07-20 02:47:47 UTC (rev 4068) @@ -58,7 +58,7 @@ progs = getPTProgramsConfig(huginExeDir, wxConfigBase::Get()); #else // add the locale directory specified during configure - PTPrograms progs = getPTProgramsConfig(wxT(""), wxConfigBase::Get()); + progs = getPTProgramsConfig(wxT(""), wxConfigBase::Get()); #endif // update incompatible configuration entries. Modified: hugin/trunk/src/hugin1/ptbatcher/PTBatcherGUI.cpp =================================================================== --- hugin/trunk/src/hugin1/ptbatcher/PTBatcherGUI.cpp 2009-07-20 00:32:24 UTC (rev 4067) +++ hugin/trunk/src/hugin1/ptbatcher/PTBatcherGUI.cpp 2009-07-20 02:47:47 UTC (rev 4068) @@ -144,25 +144,6 @@ break; } -#ifdef __WXMAC__ - m_macFileNameToOpenOnStart = wxT(""); - wxYield(); - if(m_macFileNameToOpenOnStart != wxT("")) - { - //[TODO] "Open with..." case: user wants to open a batch file probably! - } -/* - // bring myself front (for being called from command line) - { - ProcessSerialNumber selfPSN; - OSErr err = GetCurrentProcess(&selfPSN); - if (err == noErr) - { - SetFrontProcess(&selfPSN); - } - } */ -#endif - wxClient client; wxConnectionBase *conn; wxString servername; @@ -272,6 +253,16 @@ } //else of if(!fn.HasExt()) } } + +#ifdef __WXMAC__ + m_macFileNameToOpenOnStart = wxT(""); + wxYield(); + if(m_macFileNameToOpenOnStart != wxT("")) + { + wxFileName fn(m_macFileNameToOpenOnStart); + m_frame->AddToList(fn.GetFullPath()); + } +#endif if(IsFirstInstance) { @@ -354,7 +345,13 @@ // wx calls this method when the app gets "Open file" AppleEvent void PTBatcherGUI::MacOpenFile(const wxString &fileName) { - m_macFileNameToOpenOnStart = fileName; + if(!m_frame) + m_macFileNameToOpenOnStart = fileName; + else + { + wxFileName fn(fileName); + m_frame->AddToList(fn.GetFullPath()); + } } #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2009-07-22 09:34:04
|
Revision: 4084 http://hugin.svn.sourceforge.net/hugin/?rev=4084&view=rev Author: brunopostle Date: 2009-07-22 09:33:59 +0000 (Wed, 22 Jul 2009) Log Message: ----------- make the build system use cmake's own FindBoost module which is way better in detecting the right boost version in case more than one version is installed and especially choosing matching headers and libraries (Tiziano M?\195?\188ller) Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/CMakeLists.txt hugin/trunk/src/hugin_base/CMakeLists.txt Removed Paths: ------------- hugin/trunk/CMakeModules/FindBoost.cmake Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-07-22 08:50:22 UTC (rev 4083) +++ hugin/trunk/CMakeLists.txt 2009-07-22 09:33:59 UTC (rev 4084) @@ -88,8 +88,6 @@ # create the cache entry SET( SOURCE_BASE_DIR ${work} CACHE FILEPATH "parent dir of hugin source root" ) - # search boost there - SET(BOOST_DIR_SEARCH_USER ${SOURCE_BASE_DIR}) # wxWidgets SET(wxWidgets_ROOT_DIR ${SOURCE_BASE_DIR}/wxWidgets-2.8.10) # GLEW moved to FildGLEW.cmake module @@ -178,11 +176,10 @@ ## Boost ## -SET(Boost_LIB_SUFFIX_DEBUG gd) -FIND_PACKAGE(Boost REQUIRED thread) -IF (NOT Boost_thread_FOUND) - MESSAGE(FATAL_ERROR "boost thread library not found. If it is installed with a\nunrecognized suffix, specify it with -DBoost_LIB_SUFFIX=<suffix>") -ENDIF (NOT Boost_thread_FOUND) +FIND_PACKAGE(Boost COMPONENTS thread) +IF (NOT Boost_FOUND) + MESSAGE(FATAL_ERROR "boost thread library not found. If it is installed with a\nunrecognized suffix, specify it with -DBOOST_LIBRARYDIR=<librarydir> and -DBOOST_INCLUDEDIR=<includedir>") +ENDIF (NOT Boost_FOUND) INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) Deleted: hugin/trunk/CMakeModules/FindBoost.cmake =================================================================== --- hugin/trunk/CMakeModules/FindBoost.cmake 2009-07-22 08:50:22 UTC (rev 4083) +++ hugin/trunk/CMakeModules/FindBoost.cmake 2009-07-22 09:33:59 UTC (rev 4084) @@ -1,293 +0,0 @@ -# - Find the Boost includes and libraries. -# The following variables are set if Boost is found. If Boost is not -# found, Boost_FOUND is set to false. -# Boost_FOUND - True when the Boost include directory is found. -# Boost_INCLUDE_DIRS - the path to where the boost include files are. -# Boost_LIBRARY_DIRS - The path to where the boost library files are. -# Boost_LIB_DIAGNOSTIC_DEFINITIONS - Only set if using Windows. -# Boost_<library>_FOUND - True if the Boost <library> is found. -# Boost_<library>_INCLUDE_DIRS - The include path for Boost <library>. -# Boost_<library>_LIBRARIES - The libraries to link to to use Boost <library>. -# Boost_LIBRARIES - The libraries to link to to use all Boost libraries. -# -# The following variables can be set to configure how Boost is found: -# Boost_LIB_PREFIX - Look for Boost libraries prefixed with this, e.g. "lib" -# Boost_LIB_SUFFIX - Look for Boost libraries ending with this, e.g. "vc80-mt" -# Boost_LIB_SUFFIX_DEBUG - As for Boost_LIB_SUFFIX but for debug builds, e.g. "vs80-mt-gd" - -# ---------------------------------------------------------------------------- -# If you have installed Boost in a non-standard location or you have -# just staged the boost files using bjam then you have three -# options. In the following comments, it is assumed that <Your Path> -# points to the root directory of the include directory of Boost. e.g -# If you have put boost in C:\development\Boost then <Your Path> is -# "C:/development/Boost" and in this directory there will be two -# directories called "include" and "lib". -# 1) After CMake runs, set Boost_INCLUDE_DIR to <Your Path>/include/boost<-version> -# 2) Use CMAKE_INCLUDE_PATH to set a path to <Your Path>/include. This will allow FIND_PATH() -# to locate Boost_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g. -# SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "<Your Path>/include") -# 3) Set an environment variable called ${BOOST_ROOT} that points to the root of where you have -# installed Boost, e.g. <Your Path>. It is assumed that there is at least a subdirectory called -# include in this path. -# -# Note: -# 1) If you are just using the boost headers, then you do not need to use -# Boost_LIBRARY_DIRS in your CMakeLists.txt file. -# 2) If Boost has not been installed, then when setting Boost_LIBRARY_DIRS -# the script will look for /lib first and, if this fails, then for /stage/lib. -# -# Usage: -# In your CMakeLists.txt file do something like this: -# ... -# # Boost -# FIND_PACKAGE(Boost) -# ... -# INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) -# LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) -# -# In Windows, we make the assumption that, if the Boost files are installed, the default directory -# will be C:\boost. - -# -# TODO: -# -# 1) Automatically find the Boost library files and eliminate the need -# to use Link Directories. -# - -IF(WIN32) - # static windows libraries start with prefix "lib", e.g. - # libboost_thread-vc90-mt-s.lib - SET(Boost_LIB_PREFIX lib) - - # In windows, automatic linking is performed, so you do not have to specify the libraries. - # If you are linking to a dynamic runtime, then you can choose to link to either a static or a - # dynamic Boost library, the default is to do a static link. You can alter this for a specific - # library "whatever" by defining BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to - # be linked dynamically. Alternatively you can force all Boost libraries to dynamic link by - # defining BOOST_ALL_DYN_LINK. - - # This feature can be disabled for Boost library "whatever" by defining BOOST_WHATEVER_NO_LIB, - # or for all of Boost by defining BOOST_ALL_NO_LIB. - - # If you want to observe which libraries are being linked against then defining - # BOOST_LIB_DIAGNOSTIC will cause the auto-linking code to emit a #pragma message each time - # a library is selected for linking. - SET(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC") -ENDIF(WIN32) - - -SET(BOOST_INCLUDE_PATH_DESCRIPTION "directory containing the boost include files. E.g /usr/local/include/boost-1_33_1 or c:\\boost\\include\\boost-1_33_1") - -SET(BOOST_DIR_MESSAGE "Set the Boost_INCLUDE_DIR cmake cache entry to the ${BOOST_INCLUDE_PATH_DESCRIPTION}") - -SET(BOOST_DIR_SEARCH $ENV{BOOST_ROOT}) -IF(BOOST_DIR_SEARCH) - FILE(TO_CMAKE_PATH ${BOOST_DIR_SEARCH} BOOST_DIR_SEARCH) - SET(BOOST_DIR_SEARCH ${BOOST_DIR_SEARCH}/include) -ENDIF(BOOST_DIR_SEARCH) - -IF(WIN32) - SET(BOOST_DIR_SEARCH - ${BOOST_DIR_SEARCH} - ${BOOST_DIR_SEARCH_USER} - C:/boost/include - D:/boost/include - ) -ENDIF(WIN32) - -# Add in some path suffixes. These will have to be updated whenever a new Boost version comes out. -SET(SUFFIX_FOR_PATH - boost-trunk - boost-1_35_1 - boost-1_35_0 - boost-1_35 - boost-1_34_1 - boost-1_34_0 - boost-1_34 - boost-1_33_1 - boost-1_33_0 - boost_1_37_0 - boost_1_38_0 - boost_1_39_0 -) - -# -# Look for an installation. -# -FIND_PATH(Boost_INCLUDE_DIR NAMES boost/config.hpp PATH_SUFFIXES ${SUFFIX_FOR_PATH} PATHS - - # Look in other places. - ${BOOST_DIR_SEARCH} - - # Help the user find it if we cannot. - DOC "The ${BOOST_INCLUDE_PATH_DESCRIPTION}" -) - -# Assume we didn't find it. -SET(Boost_FOUND 0) - -# Now try to get the include and library path. -IF(Boost_INCLUDE_DIR) - - # Look for the boost library path. - # Note that the user may not have installed any libraries - # so it is quite possible the Boost_LIBRARY_PATH may not exist. - SET(Boost_LIBRARY_DIR ${Boost_INCLUDE_DIR}) - - IF(NOT EXISTS "${Boost_LIBRARY_DIR}/stage/lib") - IF( "${Boost_LIBRARY_DIR}" MATCHES "boost-[0-9]+") - GET_FILENAME_COMPONENT(Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR} PATH) - ENDIF( "${Boost_LIBRARY_DIR}" MATCHES "boost-[0-9]+") - - IF("${Boost_LIBRARY_DIR}" MATCHES "/include$") - # Strip off the trailing "/include" in the path. - GET_FILENAME_COMPONENT(Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR} PATH) - ENDIF("${Boost_LIBRARY_DIR}" MATCHES "/include$") - ENDIF(NOT EXISTS "${Boost_LIBRARY_DIR}/stage/lib") - - IF(EXISTS "${Boost_LIBRARY_DIR}/lib") - SET (Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR}/lib) - ELSE(EXISTS "${Boost_LIBRARY_DIR}/lib") - IF(EXISTS "${Boost_LIBRARY_DIR}/stage/lib") - SET(Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR}/stage/lib) - ELSE(EXISTS "${Boost_LIBRARY_DIR}/stage/lib") - SET(Boost_LIBRARY_DIR "") - ENDIF(EXISTS "${Boost_LIBRARY_DIR}/stage/lib") - ENDIF(EXISTS "${Boost_LIBRARY_DIR}/lib") - - IF(EXISTS "${Boost_INCLUDE_DIR}") - SET(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) - # We have found boost. It is possible that the user has not - # compiled any libraries so we set Boost_FOUND to be true here. - SET(Boost_FOUND 1) - MARK_AS_ADVANCED(Boost_INCLUDE_DIR) - ENDIF(EXISTS "${Boost_INCLUDE_DIR}") - - IF(Boost_LIBRARY_DIR AND EXISTS "${Boost_LIBRARY_DIR}") - SET(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR}) - ENDIF(Boost_LIBRARY_DIR AND EXISTS "${Boost_LIBRARY_DIR}") -ENDIF(Boost_INCLUDE_DIR) - -# -# Find boost libraries -# - -# List of library suffixes to search, e.g. libboost_date_time-gcc -SET(BOOST_SUFFIX_SEARCH - gcc - mt - il - vc90-mt - vc90-mt-s - vc80-mt - vc71-mt -) - -# List of all boost libraries -SET(BOOST_ALL_LIBRARIES - date_time - filesystem - graph - iostreams - program_options - python - regex - serialization - signals - test - thread - unit_test_framework - wave -) - -# Macro to find boost library called name -MACRO(BOOST_FIND_LIBRARY name) - - # User can specify a particular build variant via the variables: - # Boost_LIB_PREFIX, Boost_LIB_SUFFIX, Boost_LIB_SUFFIX_DEBUG - # otherwise we'll search the BOOST_SUFFIX_SEARCH list - - IF (Boost_LIB_SUFFIX) - SET(BOOST_LIB_NAMES ${Boost_LIB_PREFIX}boost_${name}-${Boost_LIB_SUFFIX}) - ELSE (Boost_LIB_SUFFIX) - SET(BOOST_LIB_NAMES ${Boost_LIB_PREFIX}boost_${name}) - FOREACH(suffix ${BOOST_SUFFIX_SEARCH}) - SET(BOOST_LIB_NAMES ${BOOST_LIB_NAMES} ${Boost_LIB_PREFIX}boost_${name}-${suffix}) - ENDFOREACH(suffix) - ENDIF(Boost_LIB_SUFFIX) - - # Find the library in the Boost_LIBRARY_DIRS - FIND_LIBRARY(Boost_${name}_LIBRARY - NAMES ${BOOST_LIB_NAMES} - PATHS ${Boost_LIBRARY_DIRS}) - -# no need to find libraries for MSVC, they are autolinked. -# # For MSVC builds find debug library -# IF(WIN32 AND MSVC AND Boost_${name}_LIBRARY) -# FIND_LIBRARY(Boost_${name}_LIBRARY_DEBUG ${Boost_LIB_PREFIX}boost_${name}-${Boost_LIB_SUFFIX_DEBUG}) -# -# IF(MSVC_IDE) -# IF(Boost_${name}_LIBRARY AND Boost_${name}_LIBRARY_DEBUG) -# SET(Boost_${name}_LIBRARIES debug ${Boost_${name}_LIBRARY_DEBUG} optimized ${Boost_${name}_LIBRARY}) -# ELSE(Boost_${name}_LIBRARY AND Boost_${name}_LIBRARY_DEBUG) -# MESSAGE(FATAL_ERROR "Could not find the debug and release version of Boost ${name} library.") -# ENDIF(Boost_${name}_LIBRARY AND Boost_${name}_LIBRARY_DEBUG) -# ELSE(MSVC_IDE) -# STRING(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER) -# IF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) -# SET(Boost_${name}_LIBRARIES ${Boost_${name}_LIBRARY_DEBUG}) -# ELSE(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) -# SET(Boost_${name}_LIBRARIES ${Boost_${name}_LIBRARY}) -# ENDIF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) -# ENDIF(MSVC_IDE) -# ELSE(WIN32 AND MSVC AND Boost_${name}_LIBRARY) - SET(Boost_${name}_LIBRARIES ${Boost_${name}_LIBRARY}) -# ENDIF(WIN32 AND MSVC AND Boost_${name}_LIBRARY) - - # If we've got it setup appropriate variables or issue error message - IF(Boost_${name}_LIBRARY) - SET(Boost_${name}_FOUND 1) - SET(Boost_${name}_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) - MARK_AS_ADVANCED(Boost_${name}_LIBRARY Boost_${name}_LIBRARY_DEBUG) - ELSE(Boost_${name}_LIBRARY) - IF(NOT Boost_FIND_QUIETLY) - MESSAGE(STATUS "Boost ${name} library was not found.") - ELSE(NOT Boost_FIND_QUIETLY) - IF(Boost_FIND_REQUIRED_${name}) - MESSAGE(FATAL_ERROR "Could NOT find required Boost ${name} library.") - ENDIF(Boost_FIND_REQUIRED_${name}) - ENDIF(NOT Boost_FIND_QUIETLY) - ENDIF(Boost_${name}_LIBRARY) -ENDMACRO(BOOST_FIND_LIBRARY) - -IF(Boost_LIBRARY_DIRS) - - # If the user specified required components e.g. via - # FIND_PACKAGE(Boost REQUIRED date_time regex) - # find (just) those libraries. Otherwise find all libraries. - IF(Boost_FIND_COMPONENTS) - SET(Boost_FIND_LIBRARIES ${Boost_FIND_COMPONENTS}) - ELSE(Boost_FIND_COMPONENTS) - SET(Boost_FIND_LIBRARIES ${BOOST_ALL_LIBRARIES}) - ENDIF(Boost_FIND_COMPONENTS) - - SET(Boost_LIBRARIES) - FOREACH(library ${Boost_FIND_LIBRARIES}) - BOOST_FIND_LIBRARY(${library}) - IF(Boost_${library}_FOUND) - SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${library}_LIBRARIES}) - ENDIF(Boost_${library}_FOUND) - ENDFOREACH(library) -ENDIF(Boost_LIBRARY_DIRS) - -IF(NOT Boost_FOUND) - IF(NOT Boost_FIND_QUIETLY) - MESSAGE(STATUS "Boost was not found. ${BOOST_DIR_MESSAGE}") - ELSE(NOT Boost_FIND_QUIETLY) - IF(Boost_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Boost was not found. ${BOOST_DIR_MESSAGE}") - ENDIF(Boost_FIND_REQUIRED) - ENDIF(NOT Boost_FIND_QUIETLY) -ENDIF(NOT Boost_FOUND) Modified: hugin/trunk/src/CMakeLists.txt =================================================================== --- hugin/trunk/src/CMakeLists.txt 2009-07-22 08:50:22 UTC (rev 4083) +++ hugin/trunk/src/CMakeLists.txt 2009-07-22 09:33:59 UTC (rev 4084) @@ -15,11 +15,11 @@ IF(LAPACK_FOUND) # need to specify boost thread library set(common_libs huginbase - ${Boost_thread_LIBRARIES} ${PANO_LIBRARIES} ${LAPACK_LIBRARIES} huginlevmar) + ${Boost_LIBRARIES} ${PANO_LIBRARIES} ${LAPACK_LIBRARIES} huginlevmar) ELSE(LAPACK_FOUND) # need to specify boost thread library set(common_libs huginbase - ${Boost_thread_LIBRARIES} ${PANO_LIBRARIES} huginlevmar) + ${Boost_LIBRARIES} ${PANO_LIBRARIES} huginlevmar) ENDIF(LAPACK_FOUND) ENDIF (MSVC) Modified: hugin/trunk/src/hugin_base/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin_base/CMakeLists.txt 2009-07-22 08:50:22 UTC (rev 4083) +++ hugin/trunk/src/hugin_base/CMakeLists.txt 2009-07-22 09:33:59 UTC (rev 4084) @@ -58,6 +58,7 @@ IF (${HUGIN_SHARED_LIBS}) add_library(huginbase SHARED ${HUGIN_BASE_SRC}) + target_link_libraries(huginbase ${Boost_LIBRARIES}) set_target_properties(huginbase PROPERTIES VERSION ${HUGIN_LIB_VERSION}) install(TARGETS huginbase DESTINATION ${LIBDIR}) ELSE (${HUGIN_SHARED_LIBS}) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-07-24 23:36:08
|
Revision: 4097 http://hugin.svn.sourceforge.net/hugin/?rev=4097&view=rev Author: yuv Date: 2009-07-24 23:35:53 +0000 (Fri, 24 Jul 2009) Log Message: ----------- store celeste model in /usr/share/hugin/data/ to make packaging of CLI-tools separate from GUI-tools possible http://sourceforge.net/tracker/?func=detail&aid=2715400&group_id=77506&atid=550441 Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/celeste/CMakeLists.txt hugin/trunk/src/celeste/Main.cpp hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp hugin/trunk/src/hugin1/hugin/huginApp.cpp hugin/trunk/src/hugin1/hugin/huginApp.h hugin/trunk/src/hugin_config.h.in.cmake Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/CMakeLists.txt 2009-07-24 23:35:53 UTC (rev 4097) @@ -251,6 +251,7 @@ SET(LINKDIR share/applications) SET(LIBDIR lib${LIB_SUFFIX}) SET(INSTALL_XRC_DIR ${CMAKE_INSTALL_PREFIX}/share/hugin/xrc) +SET(INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/hugin/data) # setup bundle install prefix IF (APPLE) Modified: hugin/trunk/src/celeste/CMakeLists.txt =================================================================== --- hugin/trunk/src/celeste/CMakeLists.txt 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/src/celeste/CMakeLists.txt 2009-07-24 23:35:53 UTC (rev 4097) @@ -94,6 +94,6 @@ ) INSTALL(TARGETS celeste_standalone DESTINATION ${BINDIR}) -INSTALL(FILES ${CELESTE_MODEL} DESTINATION ${HUGINDATADIR}/xrc/data) +INSTALL(FILES ${CELESTE_MODEL} DESTINATION ${HUGINDATADIR}) add_subdirectory(training) Modified: hugin/trunk/src/celeste/Main.cpp =================================================================== --- hugin/trunk/src/celeste/Main.cpp 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/src/celeste/Main.cpp 2009-07-24 23:35:53 UTC (rev 4097) @@ -393,7 +393,7 @@ cout << endl << "Celeste: Removes cloud-like control points from Hugin project files and creates image masks" << endl; cout << "using Support Vector Machines." << endl; cout << endl << "Version " << VERSION << endl; - cout << endl << "Usage: celeste [options] image1 image2 [..]" << endl << endl; + cout << endl << "Usage: celeste_standalone [options] image1 image2 [..]" << endl << endl; cout << "Options:" << endl << endl; cout << " -i <filename> Input Hugin PTO file. Control points over SVM threshold will" << endl; cout << " be removed before being written to the output file. If -m is" << endl; @@ -428,7 +428,7 @@ vector<string> images_to_mask; string pto_file = (""),output_pto = (""); string mask_format = ("PNG"); - string model_file = ("data/celeste.model"); + string model_file = ("celeste.model"); int course_fine = 0; // Deal with arguments @@ -466,7 +466,7 @@ // Check model file if (!fileexists(model_file)){ - string install_path_model = (INSTALL_XRC_DIR); + string install_path_model = (INSTALL_DATA_DIR); install_path_model.append(model_file); if (!fileexists(install_path_model)){ Modified: hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-07-24 23:35:53 UTC (rev 4097) @@ -2177,13 +2177,13 @@ // determine file name of SVM model file // get XRC path from application - wxString wxstrModelFileName = huginApp::Get()->GetXRCPath() + wxT("data/") + wxT(HUGIN_CELESTE_MODEL); + wxString wxstrModelFileName = huginApp::Get()->GetDataPath() + wxT(HUGIN_CELESTE_MODEL); // convert wxString to string string strModelFileName(wxstrModelFileName.mb_str(wxConvUTF8)); // SVM model file if (! wxFile::Exists(wxstrModelFileName) ) { - wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); + wxMessageBox(_("Celeste model expected in ") + wxstrModelFileName +_(" not found, Hugin needs to be properly installed." ), _("Fatal Error")); return ; } Modified: hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2009-07-24 23:35:53 UTC (rev 4097) @@ -821,13 +821,13 @@ // determine file name of SVM model file // get XRC path from application - wxString wxstrModelFileName = huginApp::Get()->GetXRCPath() + wxT("data/") + wxT(HUGIN_CELESTE_MODEL); + wxString wxstrModelFileName = huginApp::Get()->GetDataPath() + wxT(HUGIN_CELESTE_MODEL); // convert wxString to string string strModelFileName(wxstrModelFileName.mb_str(wxConvUTF8)); // SVM model file if (! wxFile::Exists(wxstrModelFileName) ) { - wxMessageBox(_("Celeste model file not found, Hugin needs to be properly installed." ), _("Fatal Error")); + wxMessageBox(_("Celeste model expected in ") + wxstrModelFileName +_(" not found, Hugin needs to be properly installed." ), _("Fatal Error")); return ; } Modified: hugin/trunk/src/hugin1/hugin/huginApp.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-07-24 23:35:53 UTC (rev 4097) @@ -130,6 +130,7 @@ wxFileName::SplitPath( huginExeDir, &huginRoot, NULL, NULL ); m_xrcPrefix = huginRoot + wxT("/share/hugin/xrc/"); + m_DataDir = huginRoot + wxT("/data/"); m_utilsBinDir = huginRoot + wxT("/bin/"); // locale setup @@ -144,6 +145,7 @@ return false; } m_xrcPrefix = thePath + wxT("/"); + m_DataDir = thePath + wxT("/"); } { @@ -159,6 +161,7 @@ #else // add the locale directory specified during configure m_xrcPrefix = wxT(INSTALL_XRC_DIR); + m_DataDir = wxT(INSTALL_DATA_DIR); locale.AddCatalogLookupPathPrefix(wxT(INSTALL_LOCALE_DIR)); #endif Modified: hugin/trunk/src/hugin1/hugin/huginApp.h =================================================================== --- hugin/trunk/src/hugin1/hugin/huginApp.h 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/src/hugin1/hugin/huginApp.h 2009-07-24 23:35:53 UTC (rev 4097) @@ -90,6 +90,12 @@ return m_xrcPrefix; } + /** return the current data path */ + const wxString & GetDataPath() + { + return m_DataDir; + } + const wxString & GetUtilsBinDir() { return m_utilsBinDir; @@ -117,7 +123,11 @@ // the model Panorama pano; + // folder for xrc (GUI resources) wxString m_xrcPrefix; + // folder for data shared by CLI and GUI to enable separate packaging of CLI tools + wxString m_DataDir; + // folder for CLI tools wxString m_utilsBinDir; #ifdef __WXMAC__ Modified: hugin/trunk/src/hugin_config.h.in.cmake =================================================================== --- hugin/trunk/src/hugin_config.h.in.cmake 2009-07-24 18:05:41 UTC (rev 4096) +++ hugin/trunk/src/hugin_config.h.in.cmake 2009-07-24 23:35:53 UTC (rev 4097) @@ -47,6 +47,9 @@ /* locate of the xrc files, as defined during configuration */ #define INSTALL_LOCALE_DIR "${INSTALL_LOCALE_DIR}" +/* Location for data, as defined during configuration*/ +#define INSTALL_DATA_DIR "${INSTALL_DATA_DIR}/" + /* Location for XRC files and other data, as defined during configuration*/ #define INSTALL_XRC_DIR "${INSTALL_XRC_DIR}/" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-07-26 14:05:42
|
Revision: 4104 http://hugin.svn.sourceforge.net/hugin/?rev=4104&view=rev Author: yuv Date: 2009-07-26 14:05:23 +0000 (Sun, 26 Jul 2009) Log Message: ----------- added uninstall target to CMake build Modified Paths: -------------- hugin/trunk/CMakeLists.txt Added Paths: ----------- hugin/trunk/cmake_uninstall.cmake.in Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-07-26 13:32:25 UTC (rev 4103) +++ hugin/trunk/CMakeLists.txt 2009-07-26 14:05:23 UTC (rev 4104) @@ -421,3 +421,15 @@ "Makefile\\\\.in$" ) INCLUDE(CPack) + +## +## Uninstall Taget +## +CONFIGURE_FILE( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + +ADD_CUSTOM_TARGET(uninstall + "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + Added: hugin/trunk/cmake_uninstall.cmake.in =================================================================== --- hugin/trunk/cmake_uninstall.cmake.in (rev 0) +++ hugin/trunk/cmake_uninstall.cmake.in 2009-07-26 14:05:23 UTC (rev 4104) @@ -0,0 +1,22 @@ +IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +STRING(REGEX REPLACE "\n" ";" files "${files}") +FOREACH(file ${files}) + MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + IF(EXISTS "$ENV{DESTDIR}${file}") + EXEC_PROGRAM( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + IF(NOT "${rm_retval}" STREQUAL 0) + MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") + ENDIF(NOT "${rm_retval}" STREQUAL 0) + ELSE(EXISTS "$ENV{DESTDIR}${file}") + MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") + ENDIF(EXISTS "$ENV{DESTDIR}${file}") +ENDFOREACH(file) + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-08-02 01:45:06
|
Revision: 4146 http://hugin.svn.sourceforge.net/hugin/?rev=4146&view=rev Author: yuv Date: 2009-08-02 01:44:57 +0000 (Sun, 02 Aug 2009) Log Message: ----------- Merged Andrew Mihal's nona-gpu branch. Thank you, Andrew, for this wonderful feature. May this day be a happy day! Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/CMakeLists.txt hugin/trunk/src/hugin1/hugin/huginApp.cpp hugin/trunk/src/hugin_base/CMakeLists.txt hugin/trunk/src/hugin_base/nona/ImageRemapper.h hugin/trunk/src/hugin_base/nona/RemappedPanoImage.h hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h hugin/trunk/src/hugin_base/photometric/ResponseTransform.h hugin/trunk/src/hugin_base/vigra_ext/CMakeLists.txt hugin/trunk/src/hugin_base/vigra_ext/Interpolators.h hugin/trunk/src/tools/CMakeLists.txt hugin/trunk/src/tools/nona.cpp Added Paths: ----------- hugin/trunk/src/hugin_base/panotools/PanoToolsTransformGPU.cpp hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.h Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/CMakeLists.txt 2009-08-02 01:44:57 UTC (rev 4146) @@ -145,12 +145,14 @@ ## OpenGL and GLEW FIND_PACKAGE(OpenGL) +FIND_PACKAGE(GLUT) FIND_PACKAGE(GLEW) IF(NOT OPENGL_FOUND) MESSAGE("OpenGL was not found, hugin disabled") ENDIF(NOT OPENGL_FOUND) IF(GLEW_FOUND) INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) + INCLUDE_DIRECTORIES(${GLUT_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${GLEW_INCLUDE_DIR}) ENDIF(GLEW_FOUND) Modified: hugin/trunk/src/CMakeLists.txt =================================================================== --- hugin/trunk/src/CMakeLists.txt 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/CMakeLists.txt 2009-08-02 01:44:57 UTC (rev 4146) @@ -15,11 +15,11 @@ IF(LAPACK_FOUND) # need to specify boost thread library set(common_libs huginbase - ${Boost_LIBRARIES} ${PANO_LIBRARIES} ${LAPACK_LIBRARIES} huginlevmar) + ${Boost_LIBRARIES} ${PANO_LIBRARIES} ${LAPACK_LIBRARIES} ${GLEW_LIBRARIES} huginlevmar) ELSE(LAPACK_FOUND) # need to specify boost thread library set(common_libs huginbase - ${Boost_LIBRARIES} ${PANO_LIBRARIES} huginlevmar) + ${Boost_LIBRARIES} ${PANO_LIBRARIES} ${GLEW_LIBRARIES} huginlevmar) ENDIF(LAPACK_FOUND) ENDIF (MSVC) Modified: hugin/trunk/src/hugin1/hugin/huginApp.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-08-02 01:44:57 UTC (rev 4146) @@ -319,6 +319,7 @@ opts.blendMode = PanoramaOptions::ENBLEND_BLEND; opts.enblendOptions = config->Read(wxT("Enblend/Args"),wxT(HUGIN_ENBLEND_ARGS)).mb_str(wxConvLocal); opts.enfuseOptions = config->Read(wxT("Enfuse/Args"),wxT(HUGIN_ENFUSE_ARGS)).mb_str(wxConvLocal); + opts.remapUsingGPU = false; pano.setOptions(opts); if (argc > 1) { Modified: hugin/trunk/src/hugin_base/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin_base/CMakeLists.txt 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin_base/CMakeLists.txt 2009-08-02 01:44:57 UTC (rev 4146) @@ -52,8 +52,10 @@ panotools/PanoToolsInterface.cpp panotools/PanoToolsOptimizerWrapper.cpp panotools/PanoToolsUtils.cpp +panotools/PanoToolsTransformGPU.cpp vigra_ext/emor.cpp vigra_ext/MultiThreadOperations.cpp +vigra_ext/ImageTransformsGPU.cpp ) IF (${HUGIN_SHARED_LIBS}) Modified: hugin/trunk/src/hugin_base/nona/ImageRemapper.h =================================================================== --- hugin/trunk/src/hugin_base/nona/ImageRemapper.h 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin_base/nona/ImageRemapper.h 2009-08-02 01:44:57 UTC (rev 4146) @@ -187,11 +187,21 @@ // load image vigra::ImageImportInfo info(img.getFilename().c_str()); - ImageType srcImg(info.width(), info.height()); + + int width = info.width(); + int height = info.height(); + + if (opts.remapUsingGPU) { + // Extend image width to multiple of 8 for fast GPU transfers. + const int r = width % 8; + if (r != 0) width += 8 - r; + } + + ImageType srcImg(width, height); m_remapped->m_ICCProfile = info.getICCProfile(); if (info.numExtraBands() > 0) { - srcAlpha.resize(info.width(), info.height()); + srcAlpha.resize(width, height); } //int nb = info.numBands() - info.numExtraBands(); bool alpha = info.numExtraBands() > 0; Modified: hugin/trunk/src/hugin_base/nona/RemappedPanoImage.h =================================================================== --- hugin/trunk/src/hugin_base/nona/RemappedPanoImage.h 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin_base/nona/RemappedPanoImage.h 2009-08-02 01:44:57 UTC (rev 4146) @@ -195,6 +195,7 @@ #include <photometric/ResponseTransform.h> #include <vigra_ext/ImageTransforms.h> +#include <vigra_ext/ImageTransformsGPU.h> #ifdef DEBUG #define DEBUG_REMAP 1 @@ -220,6 +221,13 @@ // restrict to panorama size m_srcImg = src; m_destImg = dest; + + if (m_destImg.remapUsingGPU) { + // Make width multiple of 8 for fast GPU transfers. + const int r = roi.width() % 8; + if (r != 0) roi.addSize(vigra::Size2D(8 - r, 0)); + } + Base::resize(roi); m_transf.createTransform(src, dest); @@ -414,12 +422,21 @@ // msg <<"remapping image " << imgNr; // progress.setMessage(msg.str().c_str()); + const bool useGPU = m_destImg.remapUsingGPU; + if (Base::boundingBox().isEmpty()) return; vigra::Diff2D srcImgSize = srcImg.second - srcImg.first; + + vigra::Size2D expectedSize = m_srcImg.getSize(); + if (useGPU) { + const int r = expectedSize.width() % 8; + if (r != 0) expectedSize += vigra::Diff2D(8 - r, 0); + } + DEBUG_DEBUG("srcImgSize: " << srcImgSize << " m_srcImgSize: " << m_srcImg.getSize()); - vigra_precondition(srcImgSize == m_srcImg.getSize(), + vigra_precondition(srcImgSize == expectedSize, "RemappedPanoImage<RemapImage,AlphaImage>::remapImage(): image sizes not consistent"); typedef typename ImgAccessor::value_type input_value_type; @@ -478,26 +495,72 @@ } - transformImageAlpha(srcImg, - vigra::srcImage(alpha), - destImageRange(Base::m_image), - destImage(Base::m_mask), - Base::boundingBox().upperLeft(), - m_transf, - invResponse, - m_srcImg.horizontalWarpNeeded(), - interpol, - progress); + if (useGPU) { + transformImageAlphaGPU(srcImg, + vigra::srcImage(alpha), + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interpol, + progress); + } else { + transformImageAlpha(srcImg, + vigra::srcImage(alpha), + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interpol, + progress); + } } else { - transformImage(srcImg, - destImageRange(Base::m_image), - destImage(Base::m_mask), - Base::boundingBox().upperLeft(), - m_transf, - invResponse, - m_srcImg.horizontalWarpNeeded(), - interpol, - progress); + if (useGPU) { + if (srcImgSize != m_srcImg.getSize()) { + // src image with was increased for alignment reasons. + // Need to make an alpha image to mask off the extended region. + vigra::BImage alpha(srcImgSize.x, srcImgSize.y, vigra::UInt8(0)); + initImage(alpha.upperLeft(), + alpha.upperLeft()+m_srcImg.getSize(), + alpha.accessor(),255); + transformImageAlphaGPU(srcImg, + vigra::srcImage(alpha), + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interpol, + progress); + + } + else { + transformImageGPU(srcImg, + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interpol, + progress); + } + } else { + transformImage(srcImg, + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interpol, + progress); + } } } @@ -512,12 +575,20 @@ vigra_ext::Interpolator interp, AppBase::MultiProgressDisplay & progress) { + const bool useGPU = m_destImg.remapUsingGPU; + if (Base::boundingBox().isEmpty()) return; vigra::Diff2D srcImgSize = srcImg.second - srcImg.first; - vigra_precondition(srcImgSize == m_srcImg.getSize(), + vigra::Size2D expectedSize = m_srcImg.getSize(); + if (useGPU) { + const int r = expectedSize.width() % 8; + if (r != 0) expectedSize += vigra::Diff2D(8 - r, 0); + } + + vigra_precondition(srcImgSize == expectedSize, "RemappedPanoImage<RemapImage,AlphaImage>::remapImage(): image sizes not consistent"); typedef typename ImgAccessor::value_type input_value_type; @@ -573,28 +644,55 @@ default: break; } - vigra_ext::transformImageAlpha(srcImg, - vigra::srcImage(alpha), - destImageRange(Base::m_image), - destImage(Base::m_mask), - Base::boundingBox().upperLeft(), - m_transf, - invResponse, - m_srcImg.horizontalWarpNeeded(), - interp, - progress); + if (useGPU) { + vigra_ext::transformImageAlphaGPU(srcImg, + vigra::srcImage(alpha), + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interp, + progress); + } else { + vigra_ext::transformImageAlpha(srcImg, + vigra::srcImage(alpha), + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interp, + progress); + } } else { - vigra_ext::transformImageAlpha(srcImg, - alphaImg, - destImageRange(Base::m_image), - destImage(Base::m_mask), - Base::boundingBox().upperLeft(), - m_transf, - invResponse, - m_srcImg.horizontalWarpNeeded(), - interp, - progress); + if (useGPU) { + // extended region (if any) should already be cleared since ImportImageAlpha shouldn't have touched it. + vigra_ext::transformImageAlphaGPU(srcImg, + alphaImg, + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interp, + progress); + } else { + vigra_ext::transformImageAlpha(srcImg, + alphaImg, + destImageRange(Base::m_image), + destImage(Base::m_mask), + Base::boundingBox().upperLeft(), + m_transf, + invResponse, + m_srcImg.horizontalWarpNeeded(), + interp, + progress); + } } } Modified: hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h =================================================================== --- hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2009-08-02 01:44:57 UTC (rev 4146) @@ -216,6 +216,7 @@ blendMode = ENBLEND_BLEND; hdrMergeMode = HDRMERGE_AVERAGE; remapper = NONA; + remapUsingGPU = false; saveCoordImgs = false; huberSigma = 2; photometricHuberSigma = 2/255.0; @@ -365,6 +366,7 @@ BlendingMechanism blendMode; HDRMergeType hdrMergeMode; Remapper remapper; + bool remapUsingGPU; bool saveCoordImgs; Modified: hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h =================================================================== --- hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h 2009-08-02 01:44:57 UTC (rev 4146) @@ -26,6 +26,7 @@ #include <hugin_config.h> +#include <iostream> #include <string> #include <set> @@ -216,10 +217,14 @@ bool transformImgCoord(double & x_dest, double & y_dest, double x_src, double y_src) const; + bool transformImgCoordPartial(double & x_dest, double & y_dest, double x_src, double y_src) const; + /// bool transformImgCoord(hugin_utils::FDiff2D& dest, const hugin_utils::FDiff2D & src) const { return transformImgCoord(dest.x, dest.y, src.x, src.y); } + + bool emitGLSL(std::ostringstream& oss) const; private: // update internal PT data structs. Added: hugin/trunk/src/hugin_base/panotools/PanoToolsTransformGPU.cpp =================================================================== --- hugin/trunk/src/hugin_base/panotools/PanoToolsTransformGPU.cpp (rev 0) +++ hugin/trunk/src/hugin_base/panotools/PanoToolsTransformGPU.cpp 2009-08-02 01:44:57 UTC (rev 4146) @@ -0,0 +1,411 @@ +// -*- c-basic-offset: 4 -*- + +/** @file PanoToolsTransformGPU.cpp + * + * @brief GPU shader program conversion for PTools::Transform + * + * @author Andrew Mihal + * + * $Id: $ + * + * 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 software 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 software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <hugin_config.h> + +#include <stdlib.h> + +#include "PanoToolsInterface.h" + +#include <iostream> +#include <iomanip> + +using std::ostringstream; +using std::endl; + +#define distanceparam (*((double*)params)) +#define shift (*((double*)params)) +#define var0 ((double*)params)[0] +#define var1 ((double*)params)[1] +#define var2 ((double*)params)[2] +#define var3 ((double*)params)[3] +#define var4 ((double*)params)[4] +#define var5 ((double*)params)[5] +#define mp ((struct MakeParams*)params) + +// Instead of discard, need to set coords to something far outside the src image and return. +// e.g. (-1000, -1000). +#define DISCARD "{ discardA = 0.0; discardB = 1.0; }" + +static void rotate_erect_glsl(ostringstream& oss, const void* params) { + //oss << " // rotate_erect(" << var0 << ", " << var1 << ")" << endl + // << " " << ((var1 == 0.0) ? "//" : "") << "src.s += " << var1 << ";" << endl + // << " while (src.s < " << -var0 << ") src.s += " << (2.0 * var0) << ";" << endl + // << " while (src.s > " << var0 << ") src.s -= " << (2.0 * var0) << ";" << endl + // << endl; + + // Version without loops + oss << " // rotate_erect(" << var0 << ", " << var1 << ")" << endl + << " {" << endl + << " " << ((var1 == 0.0) ? "//" : "") << "src.s += " << var1 << ";" << endl + << " float w = (abs(src.s) > " << var0 << ") ? 1.0 : 0.0;" << endl + << " float n = (src.s < 0.0) ? 0.5 : -0.5;" << endl + << " src.s += w * " << (-2.0 * var0) << " * ceil(src.s / " << (2.0 * var0) << " + n);" << endl + << " }" << endl + << endl; +} + +static void resize_glsl(ostringstream& oss, const void* params) { + oss << " // resize(" << var0 << ", " << var1 << ")" << endl + << " src *= vec2(" << var0 << ", " << var1 << ");" << endl + << endl; +} + +static void vert_glsl(ostringstream& oss, const void* params) { + oss << " // vert(" << shift << ")" << endl + << " src.t += " << shift << ";" << endl + << endl; +} + +static void horiz_glsl(ostringstream& oss, const void* params) { + oss << " // horiz(" << shift << ")" << endl + << " src.s += " << shift << ";" << endl + << endl; +} + +static void shear_glsl(ostringstream& oss, const void* params) { + oss << " // shear(" << var0 << ", " << var1 << ")" << endl + << " src += (src.ts * vec2(" << var0 << ", " << var1 << "));" << endl + << endl; +} + +static void erect_pano_glsl(ostringstream& oss, const void* params) { + oss << " // erect_pano(" << distanceparam << ")" << endl + << " src.t = " << distanceparam << " * atan_safe(src.t / " << distanceparam << ");" << endl + << endl; +} + +static void erect_rect_glsl(ostringstream& oss, const void* params) { + oss << " // erect_rect(" << distanceparam << ")" << endl + << " src.t = " << distanceparam << " * atan2_xge0(src.t, length(vec2(" << distanceparam << ", src.s)));" << endl + << " src.s = " << distanceparam << " * atan2_safe(src.s, " << distanceparam << ");" << endl + << endl; +} + +static void erect_sphere_tp_glsl(ostringstream& oss, const void* params) { + oss << " // erect_sphere_tp(" << distanceparam << ")" << endl + << " {" << endl + << " float r = length(src);" << endl + << " float theta = r / " << distanceparam << ";" << endl + << " float s = " << (1.0 / distanceparam) << ";" << endl + << " if (theta != 0.0) { s = sin(theta) / r; }" << endl + << " float v1 = s * src.s;" << endl + << " float v0 = cos(theta);" << endl + << " src.s = " << distanceparam << " * atan2_safe(v1, v0);" << endl + << " src.t = " << distanceparam << " * atan_safe(s * src.t / length(vec2(v0, v1)));" << endl + << " }" << endl + << endl; +} + +static void sphere_tp_erect_glsl(ostringstream& oss, const void* params) { + oss << " // sphere_tp_erect(" << distanceparam << ")" << endl + << " {" << endl + << " float phi = src.s / " << distanceparam << ";" << endl + << " float theta = -src.t / " << distanceparam << " + " << (M_PI/2) << ";" << endl + << " if (theta < 0.0) {" << endl + << " theta = -theta;" << endl + << " phi += " << M_PI << ";" << endl + << " }" << endl + << " if (theta > " << M_PI << ") {" << endl + << " theta = " << M_PI << " - (theta - " << M_PI << ");" << endl + << " phi += " << M_PI << ";" << endl + << " }" << endl + << " float s = sin(theta);" << endl + << " vec2 v = vec2(s * sin(phi), cos(theta));" << endl + << " float r = length(v);" << endl + << " theta = " << distanceparam << " * atan2_safe(r, s * cos(phi));" << endl + << " src = v * (theta / r);" << endl + << " }" << endl + << endl; +} + +static void vertical_glsl(ostringstream& oss, const void* params) { + oss << " // vertical(" << var0 << ", " << var1 << ", " << var2 << ", " << var3 << ", " << var4 << ")" << endl + << " {" << endl + << " float r = abs(src.t / " << var4 << ");" << endl + << " float scale = ((" << var3 << " * r + " << var2 << ") * r + " << var1 << ") * r + " << var0 << ";" << endl + << " src.t *= scale;" << endl + << " }" << endl + << endl; +} + +static void deregister_glsl(ostringstream& oss, const void* params) { + oss << " // deregister(" << var1 << ", " << var2 << ", " << var3 << ", " << var4 << ")" << endl + << " {" << endl + << " float r = abs(src.t / " << var4 << ");" << endl + << " float scale = (" << var3 << " * r + " << var2 << ") * r + " << var1 << ";" << endl + << " src.s += abs(src.t) * scale;" << endl + << " }" << endl + << endl; +} + +static void radial_glsl(ostringstream& oss, const void* params) { + oss << " // radial(" << var0 << ", " << var1 << ", " << var2 << ", " << var3 << ", " << var4 << ", " << var5 << ")" << endl + << " {" << endl + << " float r = length(src) / " << var4 << ";" << endl + << " float scale = 1000.0; " << endl + << " if (r < " << var5 << ") {" << endl + << " scale = ((" << var3 << " * r + " << var2 << ") * r + " << var1 << ") * r + " << var0 << ";" << endl + << " }" << endl + << " src *= scale;" << endl + << " }" << endl + << endl; +} + +static void pano_sphere_tp_glsl(ostringstream& oss, const void* params) { + oss << " // pano_sphere_tp(" << distanceparam << ")" << endl + << " {" << endl + << " float r = length(src);" << endl + << " float theta = r / " << distanceparam << ";" << endl + << " float s = " << (1.0 / distanceparam) << ";" << endl + << " if (theta != 0.0) s = sin(theta) / r;" << endl + << " vec2 v = vec2(cos(theta), s * src.s);" << endl + << " src.s = " << distanceparam << " * atan2_safe(v.t, v.s);" << endl + << " src.t = " << distanceparam << " * s * src.t / length(v);" << endl + << " }" << endl + << endl; +} + +static void rect_sphere_tp_glsl(ostringstream& oss, const void* params) { + oss << " // rect_sphere_tp(" << distanceparam << ")" << endl + << " {" << endl + << " float r = length(src);" << endl + << " float theta = r / " << distanceparam << ";" << endl + << " float rho = 0.0;" << endl + << " if (theta >= " << (M_PI / 2.0) << ") rho = 1.6e16;" << endl + << " else if (theta == 0.0) rho = 1.0;" << endl + << " else rho = tan(theta) / theta;" << endl + << " src *= rho;" << endl + << " }" << endl + << endl; +} + +static void persp_sphere_glsl(ostringstream& oss, const void* params) { + double d = *((double*) ((void**)params)[1]); + double (*m)[3] = (double(*)[3]) ((void**)params)[0]; + oss << " // persp_sphere(" << d << ")" << endl + << " {" << endl + << " mat3 m = mat3(" << m[0][0] << ", " << m[1][0] << ", " << m[2][0] << "," << endl + << " " << m[0][1] << ", " << m[1][1] << ", " << m[2][1] << "," << endl + << " " << m[0][2] << ", " << m[1][2] << ", " << m[2][2] << ");" << endl + << " float r = length(src);" << endl + << " float theta = r / " << d << ";" << endl + << " float s = 0.0;" << endl + << " if (r != 0.0) s = sin(theta) / r;" << endl + << " vec3 v = vec3(s * src.s, s * src.t, cos(theta));" << endl + << " vec3 u = v * m;" << endl + << " r = length(u.st);" << endl + << " theta = 0.0;" << endl + << " if (r != 0.0) theta = " << d << " * atan2_safe(r, u.p) / r;" << endl + << " src = theta * u.st;" << endl + << " }" << endl + << endl; +} + +static void erect_mercator_glsl(ostringstream& oss, const void* params) { + oss << " // erect_mercator(" << distanceparam << ")" << endl + << " src.t = " << distanceparam << " * atan_safe(sinh(src.t/" << distanceparam << "));" << endl + << endl; +} + +static void erect_millercylindrical_glsl(ostringstream& oss, const void* params) { + oss << " // erect_millercylindrical(" << distanceparam << ")" << endl + << " src.t = " << (1.25 * distanceparam) << " * atan_safe(sinh(src.t * " << (4 / (5.0 * distanceparam)) << "));" << endl + << endl; +} + +static void erect_lambert_glsl(ostringstream& oss, const void* params) { + oss << " // erect_lambert(" << distanceparam << ")" << endl + << " src.t = " << distanceparam << " * asin(src.t / " << distanceparam << ");" << endl + << endl; +} + +static void erect_transmercator_glsl(ostringstream& oss, const void* params) { + oss << " // erect_transmercator(" << distanceparam << ")" << endl + << " {" << endl + << " src /= " << distanceparam << ";" << endl + << " if (abs(src.t) > " << M_PI << ") " << DISCARD << endl + << " float x = src.s;" << endl + << " src.s = " << distanceparam << " * atan2_safe(sinh(src.s), cos(src.t));" << endl + << " src.t = " << distanceparam << " * asin(sin(src.t) / cosh(x));" << endl + << " }" << endl + << endl; +} + +static void erect_sinusoidal_glsl(ostringstream& oss, const void* params) { + oss << " // erect_sinusoidal(" << distanceparam << ")" << endl + << " src.s /= cos(src.t / " << distanceparam << ");" << endl + << " if (abs(src.s) > " << (M_PI * distanceparam) << ") " << DISCARD << endl + << endl; +} + +static void erect_lambertazimuthal_glsl(ostringstream& oss, const void* params) { + oss << " // erect_lambertazimuthal(" << distanceparam << ")" << endl + << " {" << endl + << " src /= " << distanceparam << ";" << endl + << " if (any(greaterThan(abs(src), vec2(" << M_PI << ", " << M_PI << ")))) " << DISCARD << endl + << " float ro = length(src);" << endl + << " if (abs(ro) <= 1.0e-10) src = vec2(0.0, 0.0);" << endl + << " else {" << endl + << " float c = 2.0 * asin(ro / 2.0);" << endl + << " src.t = " << distanceparam << " * asin((src.t * sin(c)) / ro);" << endl + << " if (abs(ro * cos(c)) <= 1.0e-10) src.s = 0.0;" << endl + << " else src.s = " << distanceparam << " * atan2_safe(src.s * sin(c), (ro * cos(c)));" << endl + << " }" << endl + << " }" << endl + << endl; +} + +static void erect_stereographic_glsl(ostringstream& oss, const void* params) { + oss << " // erect_stereographic(" << distanceparam << ")" << endl + << " {" << endl + << " src /= " << distanceparam << ";" << endl + << " float rh = length(src);" << endl + << " float c = 2.0 * atan_safe(rh / 2.0);" << endl + << " float sin_c = sin(c);" << endl + << " float cos_c = cos(c);" << endl + << " if (abs(rh) <= 1.0e-10) " << DISCARD << endl + << " src.t = asin((src.t * sin_c) / rh) * " << distanceparam << ";" << endl + << " if (abs(cos_c) < 1.0e-10 && abs(src.s) < 1.0e-10) " << DISCARD << endl + << " float y = src.s * sin_c;" << endl + << " float x = cos_c * rh;" << endl + << " src.s = atan2_safe(y, x) * " << distanceparam << ";" << endl + << " }" << endl + << endl; +} + +static void erect_albersequalareaconic_glsl(ostringstream& oss, const void* params) { + oss << " // erect_albersequalareaconic(...)" << endl + << " {" << endl; + + // Get the albersEqualAreaConic_ParamCheck to run. + double junk0, junk1; + int result = erect_albersequalareaconic(0.0, 0.0, &junk0, &junk1, const_cast<void*>(params)); + if (result == 0) { + oss << " // albersEqualAreaConic_ParamCheck failed" << endl; + } + + const double n = mp->pn->precomputedValue[3]; + const double C = mp->pn->precomputedValue[4]; + const double rho0 = mp->pn->precomputedValue[5]; + const double yoffset = mp->pn->precomputedValue[6]; + const double n2 = mp->pn->precomputedValue[7]; + const double twiceN = mp->pn->precomputedValue[9]; + + oss << " src /= " << mp->distance << ";" << endl + << " src.t += " << yoffset << ";" << endl + << " float rho2 = (src.s * src.s + (" << rho0 << " - src.t) * (" << rho0 << " - src.t));" << endl + << " float theta = atan2_safe(" << ((n < 0) ? "-" : "") << "src.s, " << ((n < 0) ? "-1.0 * " : "") << "(" << rho0 << " - src.t));" << endl + << " float phi = asin((" << C << " - rho2 * " << n2 << ") / " << twiceN << ");" << endl + << " float lambda = theta / " << n << ";" << endl + << " if (abs(lambda) > " << M_PI << ") " << DISCARD << endl + << " src.s = " << mp->distance << " * lambda;" << endl + << " src.t = " << mp->distance << " * phi;" << endl + << " }" << endl + << endl; + +} + + +namespace HuginBase { namespace PTools { + +bool Transform::emitGLSL(ostringstream& oss) const { + + oss << " vec2 src = gl_TexCoord[0].st;" << endl + << " src -= vec2(" << m_srcTX << ", " << m_srcTY << ");" << endl + << endl; + + bool foundUnsupportedFunction = false; + int i = 0; + const fDesc* stack = m_stack; + + while ( (stack->func) != NULL ) { + if (stack->func == rotate_erect) rotate_erect_glsl(oss, stack->param); + else if (stack->func == resize) resize_glsl(oss, stack->param); + else if (stack->func == vert) vert_glsl(oss, stack->param); + else if (stack->func == horiz) horiz_glsl(oss, stack->param); + else if (stack->func == shear) shear_glsl(oss, stack->param); + else if (stack->func == erect_pano) erect_pano_glsl(oss, stack->param); + else if (stack->func == erect_rect) erect_rect_glsl(oss, stack->param); + else if (stack->func == erect_sphere_tp) erect_sphere_tp_glsl(oss, stack->param); + else if (stack->func == sphere_tp_erect) sphere_tp_erect_glsl(oss, stack->param); + else if (stack->func == vertical) vertical_glsl(oss, stack->param); + else if (stack->func == deregister) deregister_glsl(oss, stack->param); + else if (stack->func == radial) radial_glsl(oss, stack->param); + else if (stack->func == pano_sphere_tp) pano_sphere_tp_glsl(oss, stack->param); + else if (stack->func == rect_sphere_tp) rect_sphere_tp_glsl(oss, stack->param); + else if (stack->func == persp_sphere) persp_sphere_glsl(oss, stack->param); + else if (stack->func == erect_mercator) erect_mercator_glsl(oss, stack->param); + else if (stack->func == erect_millercylindrical) erect_millercylindrical_glsl(oss, stack->param); + else if (stack->func == erect_lambert) erect_lambert_glsl(oss, stack->param); + else if (stack->func == erect_transmercator) erect_transmercator_glsl(oss, stack->param); + else if (stack->func == erect_sinusoidal) erect_sinusoidal_glsl(oss, stack->param); + else if (stack->func == erect_lambertazimuthal) erect_lambertazimuthal_glsl(oss, stack->param); + else if (stack->func == erect_stereographic) erect_stereographic_glsl(oss, stack->param); + else if (stack->func == erect_albersequalareaconic) erect_albersequalareaconic_glsl(oss, stack->param); + else { + oss << " // Unknown function " << (const void*)stack->func << endl << endl; + foundUnsupportedFunction = true; + } + ++stack; + ++i; + } + + oss << " src += vec2(" << (m_destTX-0.5) << ", " << (m_destTY-0.5) << ");" << endl + << endl; + + return !foundUnsupportedFunction; +} + +bool Transform::transformImgCoordPartial(double & x_dest, double & y_dest, double x_src, double y_src) const +{ + x_src -= m_srcTX - 0.5; + y_src -= m_srcTY - 0.5; + + double xd = x_src; + double yd = y_src; + + const fDesc* stack = m_stack; + + for (int i = 0; i < 2; ++i) { + if ((stack->func) == NULL) break; + if ( (stack->func)(xd, yd, &x_dest, &y_dest, stack->param) ) { + xd = x_dest; + yd = y_dest; + stack++; + } else { + return 0; + } + } + + x_dest += m_destTX - 0.5; + y_dest += m_destTY - 0.5; + + return 1; +} + + +}} // namespace Modified: hugin/trunk/src/hugin_base/photometric/ResponseTransform.h =================================================================== --- hugin/trunk/src/hugin_base/photometric/ResponseTransform.h 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin_base/photometric/ResponseTransform.h 2009-08-02 01:44:57 UTC (rev 4146) @@ -217,6 +217,7 @@ } } + void emitGLSL(std::ostringstream& oss, std::vector<double>& invLut, std::vector<double>& destLut) const; protected: // needs be public? //LUT m_lutRInv; @@ -276,7 +277,7 @@ if (lutLenD == 1.0 || (lutLenD > ((1<<10)-1))) { lutLen = (1<<10); } else { - lutLen = size_t(lutLenD); + lutLen = size_t(lutLenD) + 1; } switch (m_src.getResponseType()) { @@ -531,8 +532,105 @@ return apply(v, pos, is_scalar()); } +template <class VTIn, class VTOut> +void +InvResponseTransform<VTIn,VTOut>::emitGLSL(std::ostringstream& oss, std::vector<double>& invLut, std::vector<double>& destLut) const +{ + invLut.clear(); + invLut.reserve(Base::m_lutR.size()); + for (int i = 0; i < Base::m_lutR.size(); i++) { + double f = static_cast<double>(i) / (Base::m_lutR.size() - 1); + double v = m_lutRInvFunc(f); + invLut.push_back(v); + } + + destLut.clear(); + destLut.reserve(m_destLut.size()); + for (typename LUTD::const_iterator lutI = m_destLut.begin(); lutI != m_destLut.end(); ++lutI) { + typename LUTD::value_type entry = *lutI; + destLut.push_back(entry); + } + + double invLutSize = Base::m_lutR.size(); + double pixelMax = vigra_ext::LUTTraits<VT1>::max(); + double destLutSize = m_destLut.size(); + + oss << " // invLutSize = " << invLutSize << endl + << " // pixelMax = " << pixelMax << endl + << " // destLutSize = " << destLutSize << endl + << " // destExposure = " << m_destExposure << endl + << " // srcExposure = " << Base::m_srcExposure << endl + << " // whiteBalanceRed = " << Base::m_src.getWhiteBalanceRed() << endl + << " // whiteBalanceBlue = " << Base::m_src.getWhiteBalanceBlue() << endl; + + if (Base::m_lutR.size() > 0) { + oss << " p.rgb = p.rgb * " << (invLutSize - 1.0) << ";" << endl + << " vec2 invR = texture2DRect(InvLutTexture, vec2(p.r, 0.0)).sq;" << endl + << " vec2 invG = texture2DRect(InvLutTexture, vec2(p.g, 0.0)).sq;" << endl + << " vec2 invB = texture2DRect(InvLutTexture, vec2(p.b, 0.0)).sq;" << endl + << " vec3 invX = vec3(invR.x, invG.x, invB.x);" << endl + << " vec3 invY = vec3(invR.y, invG.y, invB.y);" << endl + << " vec3 invA = fract(p.rgb);" << endl + << " p.rgb = mix(invX, invY, invA);" << endl; + } + + if (Base::m_src.getVigCorrMode() & HuginBase::SrcPanoImage::VIGCORR_RADIAL) { + oss << " // VigCorrMode=VIGCORR_RADIAL" << endl + << " float vig = 1.0;" << endl + << " {" << endl + << " vec2 vigCorrCenter = vec2(" << Base::m_src.getRadialVigCorrCenter().x << ", " + << Base::m_src.getRadialVigCorrCenter().y << ");" << endl + << " float radiusScale=" << Base::m_radiusScale << ";" << endl + << " float radialVigCorrCoeff[4] = float[4](" + << Base::m_src.getRadialVigCorrCoeff()[0] << ", " + << Base::m_src.getRadialVigCorrCoeff()[1] << ", " + << Base::m_src.getRadialVigCorrCoeff()[2] << ", " + << Base::m_src.getRadialVigCorrCoeff()[3] << ");" << endl + << " vec2 src = texture2DRect(CoordTexture, gl_TexCoord[0].st).sq;" << endl + << " vec2 d = src - vigCorrCenter;" << endl + << " d *= radiusScale;" << endl + << " vig = radialVigCorrCoeff[0];" << endl + << " float r2 = dot(d, d);" << endl + << " float r = r2;" << endl + << " vig += radialVigCorrCoeff[1] * r;" << endl + << " r *= r2;" << endl + << " vig += radialVigCorrCoeff[2] * r;" << endl + << " r *= r2;" << endl + << " vig += radialVigCorrCoeff[3] * r;" << endl + << " }" << endl; + } else if (Base::m_src.getVigCorrMode() & HuginBase::SrcPanoImage::VIGCORR_FLATFIELD) { + oss << " // VigCorrMode=VIGCORR_FLATFIELD" << endl + << " float vig = 1.0;" << endl; + } else { + oss << " // VigCorrMode=none" << endl + << " float vig = 1.0;" << endl; + } + + oss << " vec3 exposure_whitebalance = vec3(" + << (m_destExposure / (Base::m_srcExposure * Base::m_src.getWhiteBalanceRed())) << ", " + << (m_destExposure / (Base::m_srcExposure)) << ", " + << (m_destExposure / (Base::m_srcExposure * Base::m_src.getWhiteBalanceBlue())) << ");" << endl + << " p.rgb = (p.rgb * exposure_whitebalance) / vig;" << endl; + + if (m_destLut.size() > 0) { + oss << " p.rgb = p.rgb * " << (destLutSize - 1.0) << ";" << endl + << " vec2 destR = texture2DRect(DestLutTexture, vec2(p.r, 0.0)).sq;" << endl + << " vec2 destG = texture2DRect(DestLutTexture, vec2(p.g, 0.0)).sq;" << endl + << " vec2 destB = texture2DRect(DestLutTexture, vec2(p.b, 0.0)).sq;" << endl + << " vec3 destX = vec3(destR.x, destG.x, destB.x);" << endl + << " vec3 destY = vec3(destR.y, destG.y, destB.y);" << endl + << " vec3 destA = fract(p.rgb);" << endl + << " p.rgb = mix(destX, destY, destA);" << endl; + } + + // alpha hdrWeight + if (m_hdrMode) { + oss << " p.a = max(p.r, max(p.g, p.b));" << endl; + } +} + }} // namespace #endif // _H Modified: hugin/trunk/src/hugin_base/vigra_ext/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin_base/vigra_ext/CMakeLists.txt 2009-08-01 23:54:06 UTC (rev 4145) +++ hugin/trunk/src/hugin_base/vigra_ext/CMakeLists.txt 2009-08-02 01:44:57 UTC (rev 4146) @@ -1,3 +1,3 @@ -add_library(huginvigra_ext STATIC MultiThreadOperations.cpp emor.cpp) +add_library(huginvigra_ext STATIC MultiThreadOperations.cpp emor.cpp ImageTransformsGPU.cpp) Added: hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp =================================================================== --- hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp (rev 0) +++ hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp 2009-08-02 01:44:57 UTC (rev 4146) @@ -0,0 +1,1231 @@ +// -*- c-basic-offset: 4 -*- +/** @file ImageTransformsGPU.cpp + * + * Support functions for GPU remapping. + * + * @author Andrew Mihal + * + * $Id:$ + * + * This 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 software 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include <iostream> +#include <iomanip> + +#define GLEW_STATIC +#include <GL/glew.h> +#include <GL/glut.h> + +#include <string.h> +#include <sys/time.h> +#include <time.h> + +#include <vigra/diff2d.hxx> +#include <vigra/utilities.hxx> +#include <vigra/error.hxx> + +#include <vector> + +using std::cout; +using std::cerr; +using std::endl; +using std::vector; + +using vigra::Rect2D; + +#define CHECK_GL() checkGLErrors(__LINE__, __FILE__) + + +static GLenum XGLMap[] = { + // gltypes + GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, + // Internalformats + GL_RGBA8, GL_RGBA16, GL_RGBA32F_ARB, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE16_ALPHA16, GL_LUMINANCE_ALPHA32F_ARB, + GL_RGB8, GL_RGB16, GL_RGB32F_ARB, GL_LUMINANCE8, GL_LUMINANCE16, GL_LUMINANCE32F_ARB, + // formats + GL_LUMINANCE, GL_RGB, GL_LUMINANCE_ALPHA, GL_RGBA +}; + +static char* XGLStringMap[] = { + // gltypes + "GL_BYTE", "GL_UNSIGNED_BYTE", "GL_SHORT", "GL_UNSIGNED_SHORT", "GL_INT", "GL_UNSIGNED_INT", "GL_FLOAT", + // Internalformats + "GL_RGBA8", "GL_RGBA16", "GL_RGBA32F_ARB", "GL_LUMINANCE8_ALPHA8", "GL_LUMINANCE16_ALPHA16", "GL_LUMINANCE_ALPHA32F_ARB", + "GL_RGB8", "GL_RGB16", "GL_RGB32F_ARB", "GL_LUMINANCE8", "GL_LUMINANCE16", "GL_LUMINANCE32F_ARB", + // formats + "GL_LUMINANCE", "GL_RGB", "GL_LUMINANCE_ALPHA", "GL_RGBA" +}; + +static int BytesPerPixel[] = { + 1, 1, 2, 2, 4, 4, 4, + 4, 8, 16, 2, 4, 8, + 3, 6, 12, 1, 2, 4, + 0, 0, 0, 0 +}; + +static const char* AlphaCompositeKernelSource = { +"#version 110\n" +"#extension GL_ARB_texture_rectangle : enable\n" +"uniform sampler2DRect SrcAlphaTexture;\n" +"void main(void)\n" +"{\n" +" float alpha = texture2DRect(SrcAlphaTexture, gl_TexCoord[0].st).a;\n" +" if (alpha != 0.0) discard;\n" +" gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n" +"}\n" +}; + +static void checkGLErrors(int line, char* file) { + GLenum errCode; + if ((errCode = glGetError()) != GL_NO_ERROR) { + cerr << "nona: GL error in " << file << ":" << line << ": " << gluErrorString(errCode) << endl; + exit(1); + } +} + +static void printInfoLog(GLhandleARB obj) { + GLint infologLength = 0; + GLint charsWritten = 0; + char *infoLog; + glGetObjectParameterivARB(obj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength); + if (infologLength > 1) { + infoLog = new char[infologLength]; + glGetInfoLogARB(obj, infologLength, &charsWritten, infoLog); + cout << "nona: GL info log:" << endl << infoLog << endl << endl; + delete[] infoLog; + } +} + +static bool checkFramebufferStatus(int line, char* file) { + GLenum status; + status = (GLenum) glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); + switch(status) { + case GL_FRAMEBUFFER_COMPLETE_EXT: + return true; + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: + cerr << "nona: GL error: Framebuffer incomplete, incomplete attachment in: " << file << ":" << line << endl; + return false; + case GL_FRAMEBUFFER_UNSUPPORTED_EXT: + cerr << "nona: Unsupported framebuffer format in: " << file << ":" << line << endl; + return false; + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: + cerr << "nona: Framebuffer incomplete, missing attachment in: " << file << ":" << line << endl; + return false; + case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: + cerr << "nona: Framebuffer incomplete, attached images must have same dimensions in: " << file << ":" << line << endl; + return false; + case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: + cerr << "nona: Framebuffer incomplete, attached images must have same format in: " << file << ":" << line << endl; + return false; + case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: + cerr << "nona: Framebuffer incomplete, missing draw buffer in: " << file << ":" << line << endl; + return false; + case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: + cerr << "nona: Framebuffer incomplete, missing read buffer in: " << file << ":" << line << endl; + return false; + } + + return false; +} + +static void compileGLSL(const char* programName, + GLhandleARB& programObject, + GLhandleARB& shaderObject, + const char** source) +{ + GLint success; + + programObject = glCreateProgramObjectARB(); + shaderObject = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); + + glShaderSourceARB(shaderObject, 1, source, NULL); + glCompileShaderARB(shaderObject); + + glGetObjectParameterivARB(shaderObject, GL_OBJECT_COMPILE_STATUS_ARB, &success); + if (!success) { + cerr << "nona: " << programName << " shader program could not be compiled." << endl; + printInfoLog(shaderObject); + exit(1); + } + + printInfoLog(shaderObject); + + glAttachObjectARB(programObject, shaderObject); + glLinkProgramARB(programObject); + + glGetObjectParameterivARB(programObject, GL_OBJECT_LINK_STATUS_ARB, &success); + if (!success) { + cerr << "nona: " << programName << " shader program could not be linked." << endl; + printInfoLog(programObject); + exit(1); + } + + printInfoLog(programObject); +} + +static void makeChunks(const int width, + const int height, + const int maxTextureSize, + const long long int maxPixels, + vector<Rect2D>& result) +{ + int numXChunks = 1; + int numYChunks = 1; + + // Make chunks small enough to fit into maxTextureSize + while (ceil(static_cast<double>(width) / numXChunks) > maxTextureSize) numXChunks++; + while (ceil(static_cast<double>(height) / numYChunks) > maxTextureSize) numYChunks++; + + // Make chunks small enough to fit into maxPixels limit + while ((ceil(static_cast<double>(width) / numXChunks) * ceil(static_cast<double>(height) / numYChunks)) + > maxPixels) { + + if (ceil(static_cast<double>(width) / numXChunks) > ceil(static_cast<double>(height) / numYChunks)) { + ++numXChunks; + } else { + ++numYChunks; + } + } + + // Make chunks small enough to fit in GL_PROXY_TEXTURE_2D of the biggest internalformat type. + while (1) { + glTexImage2D(GL_PROXY_TEXTURE_2D, + 0, + GL_RGBA32F_ARB, + static_cast<int>(ceil(static_cast<double>(width) / numXChunks)), + static_cast<int>(ceil(static_cast<double>(height) / numYChunks)), + 0, + GL_RGBA, + GL_FLOAT, + NULL); + GLint returnedWidth; + glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &returnedWidth); + + if (returnedWidth != 0) break; + + if (ceil(static_cast<double>(width) / numXChunks) > ceil(static_cast<double>(height) / numYChunks)) { + ++numXChunks; + } else { + ++numYChunks; + } + } + + for (int yChunk = 0, y = 0; yChunk < numYChunks; yChunk++) { + int yEnd = std::min(height, static_cast<int>(ceil(static_cast<double>(height) / numYChunks)) + y); + for (int xChunk = 0, x = 0; xChunk < numXChunks; xChunk++) { + int xEnd = std::min(width, static_cast<int>(ceil(static_cast<double>(width) / numXChunks)) + x); + result.push_back(Rect2D(x, y, xEnd, yEnd)); + x = xEnd; + } + y = yEnd; + } +} + + +namespace vigra_ext +{ + +bool transformImageGPUIntern(const std::string& coordXformGLSL, + const std::string& interpolatorGLSL, + const int interpolatorSize, + const std::string& photometricGLSL, + const vector<double>& invLut, + const vector<double>& destLut, + const vigra::Diff2D srcSize, + const void* const srcBuffer, + const int srcGLInternalFormat, const int srcGLTransferFormat, const int srcGLFormat, const int srcGLType, + const void* const srcAlphaBuffer, + const int srcAlphaGLType, + const vigra::Diff2D destUL, + const vigra::Diff2D destSize, + void* const destBuffer, + const int destGLInternalFormat, const int destGLTransferFormat, const int destGLFormat, const int destGLType, + void* const destAlphaBuffer, + const int destAlphaGLType, + const bool warparound) +{ + timeval t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21; + gettimeofday(&t1, NULL); + + const int xstart = destUL.x; + const int xend = destUL.x + destSize.x; + const int ystart = destUL.y; + const int yend = destUL.y + destSize.y; + + cout << "destStart=[" << xstart << ", " << ystart << "]" << endl + << "destEnd=[" << xend << ", " << yend << "]" << endl + << "destSize=[" << destSize << "]" << endl + << "srcSize=[" << srcSize << "]" << endl; + + vigra_precondition((srcSize.x % 8) == 0, "src image width not a multiple of 8"); + vigra_precondition((destSize.x % 8) == 0, "dest image width not a multiple of 8"); + + cout << "srcBuffer=" << srcBuffer << endl + << "srcAlphaBuffer=" << srcAlphaBuffer << endl + << "destBuffer=" << destBuffer << endl + << "destAlphaBuffer=" << destAlphaBuffer << endl; + + vigra_precondition((reinterpret_cast<const uintptr_t>(srcBuffer) & 0x7) == 0, "src image buffer not 8-byte aligned"); + vigra_precondition((reinterpret_cast<const uintptr_t>(srcAlphaBuffer) & 0x7) == 0, "src alpha image buffer not 8-byte aligned"); + vigra_precondition((reinterpret_cast<const uintptr_t>(destBuffer) & 0x7) == 0, "dest image buffer not 8-byte aligned"); + vigra_precondition((reinterpret_cast<const uintptr_t>(destAlphaBuffer) & 0x7) == 0, "dest alpha image buffer not 8-byte aligned"); + + cout << "destGLInternalFormat=" << XGLStringMap[destGLInternalFormat] << endl + << "destGLFormat=" << XGLStringMap[destGLFormat] << endl + << "destGLType=" << XGLStringMap[destGLType] << endl + << "srcGLInternalFormat=" << XGLStringMap[srcGLInternalFormat] << endl + << "srcGLFormat=" << XGLStringMap[srcGLFormat] << endl + << "srcGLType=" << XGLStringMap[srcGLType] << endl + << "srcAlphaGLType=" << XGLStringMap[srcAlphaGLType] << endl + << "destAlphaGLType=" << XGLStringMap[destAlphaGLType] << endl; + + cout << "warparound=" << warparound << endl; + + const char* const gpuVendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); + const bool needsAtanWorkaround = (strncmp(gpuVendor, "ATI", 3) == 0); + + cout << "needsAtanWorkaround=" << needsAtanWorkaround << endl; + + GLint maxTextureSize; + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); + cout << "maxTextureSize=" << maxTextureSize << endl; + + // Artificial limit: binding big textures to fbos seems to be very slow. + //maxTextureSize = 2048; + + const long long int GpuMemoryInBytes = 512 << 20; + const double SourceAllocationRatio = 0.7; + + const int bytesPerSourcePixel = BytesPerPixel[srcGLInternalFormat] + + ((srcGLInternalFormat != srcGLTransferFormat) ? BytesPerPixel[srcGLTransferFormat] : 0) + + ((srcAlphaBuffer != NULL) ? 1 : 0); + const long long int maxSourcePixels = static_cast<long long int>(GpuMemoryInBytes * SourceAllocationRatio) / bytesPerSourcePixel; + + vector<Rect2D> sourceChunks; + makeChunks(srcSize.x, srcSize.y, maxTextureSize, maxSourcePixels, sourceChunks); + + const long long int actualSourcePixels = sourceChunks[0].area(); + const long long int gpuMemoryRemaining = GpuMemoryInBytes - (actualSourcePixels * bytesPerSourcePixel); + + // 16 bytes/pixel * 2 dest images for ping/pong multipass rendering + // 8 bytes/pixel for coordinate texture + // destXfer + GL_ALPHA + const int bytesPerDestPixel = 16 + 16 + 8 + + ((XGLMap[destGLTransferFormat] != GL_RGBA32F_ARB) ? BytesPerPixel[destGLTransferFormat] : 0) + + ((destAlphaBuffer != NULL) ? 1 : 0); + const long long int maxDestPixels = gpuMemoryRemaining / bytesPerDestPixel; + + vector<Rect2D> destChunks; + makeChunks(destSize.x, destSize.y, 2048, maxDestPixels, destChunks); + + const long long int totalGpuMemoryUsed = (sourceChunks[0].area() * bytesPerSourcePixel) + (destChunks[0].area() * bytesPerDestPixel); + vigra_assert(totalGpuMemoryUsed <= GpuMemoryInBytes, + "failed to subdivide source and dest images into pieces small enough to fit in gpu memory."); + + cout << "Source chunks:" << endl; + for (vector<Rect2D>::iterator rI = sourceChunks.begin(); rI != sourceChunks.end(); ++rI) { + cout << " " << *rI << endl; + } + cout << "Dest chunks:" << endl; + for (vector<Rect2D>::iterator rI = destChunks.begin(); rI != destChunks.end(); ++rI) { + cout << " " << *rI << endl; + } + cout << "Total GPU memory used: " << totalGpuMemoryUsed << endl; + + + const int TextureFetchesPerInterpolatorPass = 16; + vector<Rect2D> interpolatorChunks; + makeChunks(interpolatorSize, interpolatorSize, TextureFetchesPerInterpolatorPass, TextureFetchesPerInterpolatorPass, interpolatorChunks); + cout << "Interpolator chunks:" << endl; + for (vector<Rect2D>::iterator rI = interpolatorChunks.begin(); rI != interpolatorChunks.end(); ++rI) { + cout << " " << *rI << endl; + } + bool allInterpolatorChunksAreEqual = true; + const Rect2D& firstInterpolatorChunk = interpolatorChunks.front(); + for (vector<Rect2D>::iterator rI = ++(interpolatorChunks.begin()); rI != interpolatorChunks.end(); ++rI) { + if (rI->width() != firstInterpolatorChunk.width() + || rI->height() != firstInterpolatorChunk.height()) { + allInterpolatorChunksAreEqual = false; + break; + } + } + + + // Prepare coord transform GLSL program + std::ostringstream oss; + oss << std::setprecision(20) << std::showpoint; + oss << "#version 110" << endl + << "#extension GL_ARB_texture_rectangle : enable" << endl + << "uniform sampler2DRect SrcTexture;" << endl + << "float sinh(const in float x) { return (exp(x) - exp(-x)) / 2.0; }" << endl + << "float cosh(const in float x) { return (exp(x) + exp(-x)) / 2.0; }" << endl; + + if (needsAtanWorkaround) { + oss << "float atan2_xge0(const in float y, const in float x) {" << endl + << " if (abs(y) > x) {" << endl + << " return sign(y) * (" << (M_PI/2.0) << " - atan(x, abs(y)));" << endl + << " } else {" << endl + << " return atan(y, x);" << endl + << " }" << endl + << "}" << endl + << "float atan2_safe(const in float y, const in float x) {" << endl + << " if (x >= 0.0) return atan2_xge0(y, x);" << endl + << " else return (sign(y) * " << M_PI << ") - atan2_xge0(y, -x);" << endl + << "}" << endl + << "float atan_safe(const in float yx) {" << endl... [truncated message content] |
From: <yu...@us...> - 2009-08-03 19:04:15
|
Revision: 4162 http://hugin.svn.sourceforge.net/hugin/?rev=4162&view=rev Author: yuv Date: 2009-08-03 19:04:08 +0000 (Mon, 03 Aug 2009) Log Message: ----------- spelling fixes (clemty) https://sourceforge.net/tracker/?func=detail&aid=2830701&group_id=77506&atid=550443 Modified Paths: -------------- hugin/trunk/INSTALL_cmake hugin/trunk/README hugin/trunk/README_WINDOWS hugin/trunk/doc/batch-processing/README.batch hugin/trunk/doc/fulla.html hugin/trunk/mac/Documents/ReadMe-Mac.txt hugin/trunk/mac/scripted_universal_build/00-Readme.txt hugin/trunk/platforms/mac/droplets/apps/_README.txt hugin/trunk/platforms/windows/installer/installer_license.txt hugin/trunk/src/hugin_base/hugin_utils/Note about utils.txt Modified: hugin/trunk/INSTALL_cmake =================================================================== --- hugin/trunk/INSTALL_cmake 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/INSTALL_cmake 2009-08-03 19:04:08 UTC (rev 4162) @@ -29,17 +29,17 @@ Missing dependencies ======================= -If cmake failed to pick up some dependencies, make sure you have -installed the corresponding development packages (often named: +If cmake fails to pick up some dependencies, make sure you have +the corresponding development packages installed (often named: libjpeg-dev and so on). If cmake still fails to find the libraries, -for example if you have installed them into a non-standart directory, +for example if you have installed them into a non-standard directory, you can specify the path to libraries and include files using the ccmake program: $ cmake . [some failure] $ ccmake . -If CMake failes to recognize the boost thread library, the boost library suffix +If CMake fails to recognize the boost thread library, the boost library suffix might need to be given in the Boost_LIB_SUFFIX CMake variable. For example: $ cmake -DBoost_LIB_SUFFIX=gcc41-mt-1_34_1 if the boost thread suffix is gcc41-mt-1_34_1 Modified: hugin/trunk/README =================================================================== --- hugin/trunk/README 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/README 2009-08-03 19:04:08 UTC (rev 4162) @@ -61,7 +61,7 @@ 2. specify initial parameters (lens etc) 3. select control points points. 4. run optimizer to estimate image positions - 5. set output parameters and stich images together. + 5. set output parameters and stitch images together. 6. KNOWN ISSUES / INCOMPATIBILITIES / LIMITATIONS @@ -72,7 +72,7 @@ https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/96991 ...until xorg has "Redirected direct rendering", which might take a long time. -It's not an issue with NVidia's proprietry driver. +It's not an issue with NVidia's proprietary driver. If you're affected, the workaround is to not use Compiz. Modified: hugin/trunk/README_WINDOWS =================================================================== --- hugin/trunk/README_WINDOWS 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/README_WINDOWS 2009-08-03 19:04:08 UTC (rev 4162) @@ -36,7 +36,7 @@ 2. specify initial parameters (lens etc) 3. select control points points. 4. run optimizer to estimate image positions -5. set output parameters and stich images together. +5. set output parameters and stitch images together. Please use the hugin-ptx mailing list if you have questions or suggestions: Modified: hugin/trunk/doc/batch-processing/README.batch =================================================================== --- hugin/trunk/doc/batch-processing/README.batch 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/doc/batch-processing/README.batch 2009-08-03 19:04:08 UTC (rev 4162) @@ -47,7 +47,7 @@ make -f DSC_01-DSC_16.pto.mk clean -Internal variables can be overriden using the '-e' flag, so to stitch using the +Internal variables can be overridden using the '-e' flag, so to stitch using the alternative ''nona-mask'' tool instead of ''nona'', use something like this: make -e -f DSC_01-DSC_16.pto.mk NONA=nona-mask Modified: hugin/trunk/doc/fulla.html =================================================================== --- hugin/trunk/doc/fulla.html 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/doc/fulla.html 2009-08-03 19:04:08 UTC (rev 4162) @@ -3,7 +3,7 @@ </HEAD><BODY> <H1>FULLA</H1> <H2>NAME</H2> -fulla - Perform vignetting, radial distortion and chromatic abberation correction +fulla - Perform vignetting, radial distortion and chromatic aberration correction <A NAME="lbAC"> </A> <H2>SYNOPSIS</H2> @@ -17,7 +17,7 @@ <H2>DESCRIPTION</H2> Apply radial or flatfield vignetting correction as well as geometrical radial -distortion and transversal chromatic abberation correction. +distortion and transversal chromatic aberration correction. <P> fulla can be used to batch correct a large number of files. Radial distortion coefficients can be read from a PTLens database (only database version 4.2 is supported). <P> @@ -39,7 +39,7 @@ <P> r_new = a*r^4 + b*r^3 + c*r^2 + d*r [1] <P> -Since transversal chromatic aberations (TCA) leads to differently scaled objects in the +Since transversal chromatic aberrations (TCA) leads to differently scaled objects in the red, green and blue channel, it can be corrected by scaling the red and blue channel so that they match the green channel. Most applications, like Photoshop or Picture Window Pro offer TCA correction by linear scaling. This is equal to varying the d parameter in equation [1]. @@ -56,10 +56,10 @@ Radial distortion coefficient for all channels, (a, b, c, d). By default no correction is done. <DT>-b<DD> -Radial distortion coefficents for blue channel, (a, b, c, d). +Radial distortion coefficients for blue channel, (a, b, c, d). this is applied after the global distortion correction(supplied by -g). <DT>-r<DD> -Radial distortion coefficents for red channel, (a, b, c, d). +Radial distortion coefficients for red channel, (a, b, c, d). this is applied after the global distortion correction(supplied by -g). <DT>-f<DD> Filename of the flatfield image. Enables vignetting correction by flatfield Modified: hugin/trunk/mac/Documents/ReadMe-Mac.txt =================================================================== --- hugin/trunk/mac/Documents/ReadMe-Mac.txt 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/mac/Documents/ReadMe-Mac.txt 2009-08-03 19:04:08 UTC (rev 4162) @@ -57,12 +57,12 @@ -Contacts +Contact - See the homepage (http://hugin.sourceforge.net/) first. -- Visit the project page on SourceForge (http://sourceforge.net/projects/hugin) if you are interested in the developement. +- Visit the project page on SourceForge (http://sourceforge.net/projects/hugin) if you are interested in Hugin development. - Panotools.org hosts a knowledge base in Wiki (http://wiki.panotools.org/). -- The mainling list for everyone who cares about hugin (http://groups.google.com/group/hugin-ptx) would welcome any questions and/or help from you. +- The mailing list for everyone who cares about Hugin (http://groups.google.com/group/hugin-ptx) welcomes any questions and/or help from you. Modified: hugin/trunk/mac/scripted_universal_build/00-Readme.txt =================================================================== --- hugin/trunk/mac/scripted_universal_build/00-Readme.txt 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/mac/scripted_universal_build/00-Readme.txt 2009-08-03 19:04:08 UTC (rev 4162) @@ -6,8 +6,8 @@ INTRODUCTION Until now the way to build a Universal Hugin bundle was to do it via Xcode. -Recently Ippei Ukai, the creator of the XCode project, udapted the XCode project -with functionality that is not suported on tiger (at least it seams like that). +Recently Ippei Ukai, the creator of the XCode project, updated the XCode project +with functionality that is not supported on tiger (at least it seams like that). Leopard uses XCode 3.0, whereas Tiger uses 2.5 (or 2.4.1). Apple said that as long as you did not use the extra functionality of 3.0, the XCode projects are backwards compatible. This is not true however for the Hugin project. Modified: hugin/trunk/platforms/mac/droplets/apps/_README.txt =================================================================== --- hugin/trunk/platforms/mac/droplets/apps/_README.txt 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/platforms/mac/droplets/apps/_README.txt 2009-08-03 19:04:08 UTC (rev 4162) @@ -4,5 +4,5 @@ You can download it from http://scriptbuilders.net/files/bpprogressbar1.0.html. -The "*droplet.apps" are NOT stand-alone programs. They need enfuse, aligne_image_stack and the "BP Progress Bar.app" to reside in the same directory. +The "*droplet.apps" are NOT stand-alone programs. They need enfuse, align_image_stack and the "BP Progress Bar.app" to reside in the same directory. Modified: hugin/trunk/platforms/windows/installer/installer_license.txt =================================================================== --- hugin/trunk/platforms/windows/installer/installer_license.txt 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/platforms/windows/installer/installer_license.txt 2009-08-03 19:04:08 UTC (rev 4162) @@ -25,7 +25,7 @@ versions on <http://panospace.wordpress.com/downloads/> If these files still work for you keep using them, but before reporting -bugs or asking for support, please download the lastest version and see +bugs or asking for support, please download the latest version and see if it solves the problems you'd like to report. @@ -60,7 +60,7 @@ If you distribute, you MUST include a copy of the applicable licenses and give access to the source code of executable binaries. -The source code for the binaries can be acessed at +The source code for the binaries can be accessed at enblend <http://sourceforge.net/cvs/?group_id=123407> hugin <http://sourceforge.net/svn/?group_id=77506> @@ -86,7 +86,7 @@ incomplete, broken, obsolete, new or otherwise missing in action. Before reporting problems with the documentation or asking for support, -please download the lastest version of this installer from +please download the latest version of this installer from <http://panospace.wordpress.com/downloads/> and see if it solves the problems you'd like to report. Modified: hugin/trunk/src/hugin_base/hugin_utils/Note about utils.txt =================================================================== --- hugin/trunk/src/hugin_base/hugin_utils/Note about utils.txt 2009-08-03 18:59:09 UTC (rev 4161) +++ hugin/trunk/src/hugin_base/hugin_utils/Note about utils.txt 2009-08-03 19:04:08 UTC (rev 4162) @@ -1,5 +1,5 @@ -!!! Think before add something to the utils !!! +!!! Think before adding anything to the utils !!! Let's put it this way; every software may be a utility to most users. Your code is therefore entirely a utility nothing more. Ridiculous? Well then, where would you draw the line? -Conclusion: Only low level or trivial stuff should. Think before you put somehting. \ No newline at end of file +Conclusion: Only low level or trivial stuff should go here. Think before you add a utility. \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <har...@us...> - 2009-08-24 16:53:22
|
Revision: 4271 http://hugin.svn.sourceforge.net/hugin/?rev=4271&view=rev Author: harryvanderwolf Date: 2009-08-24 16:53:09 +0000 (Mon, 24 Aug 2009) Log Message: ----------- Added FindGLUT.cmake to modules for OSX; patched necessary .cpp's Modified Paths: -------------- hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp hugin/trunk/src/tools/nona.cpp Added Paths: ----------- hugin/trunk/CMakeModules/FindGLUT.cmake Added: hugin/trunk/CMakeModules/FindGLUT.cmake =================================================================== --- hugin/trunk/CMakeModules/FindGLUT.cmake (rev 0) +++ hugin/trunk/CMakeModules/FindGLUT.cmake 2009-08-24 16:53:09 UTC (rev 4271) @@ -0,0 +1,85 @@ +# - try to find glut library and include files +# GLUT_INCLUDE_DIR, where to find GL/glut.h, etc. +# GLUT_LIBRARIES, the libraries to link against +# GLUT_FOUND, If false, do not try to use GLUT. +# Also defined, but not for general use are: +# GLUT_glut_LIBRARY = the full path to the glut library. +# GLUT_Xmu_LIBRARY = the full path to the Xmu library. +# GLUT_Xi_LIBRARY = the full path to the Xi Library. + +IF (WIN32) + FIND_PATH( GLUT_INCLUDE_DIR NAMES GL/glut.h + PATHS ${GLUT_ROOT_PATH}/include ) + FIND_LIBRARY( GLUT_glut_LIBRARY NAMES glut glut32 + PATHS + ${OPENGL_LIBRARY_DIR} + ${GLUT_ROOT_PATH}/Release + ) +ELSE (WIN32) + + IF (APPLE) + # These values for Apple could probably do with improvement. + FIND_PATH( GLUT_INCLUDE_DIR glut.h + /System/Library/Frameworks/GLUT.framework/Versions/A/Headers + ${OPENGL_LIBRARY_DIR} + ) + SET(GLUT_glut_LIBRARY "-framework GLUT" CACHE STRING "GLUT library for OSX") + SET(GLUT_cocoa_LIBRARY "-framework Cocoa" CACHE STRING "Cocoa framework for OSX") + ELSE (APPLE) + + FIND_PATH( GLUT_INCLUDE_DIR GL/glut.h + /usr/include/GL + /usr/openwin/share/include + /usr/openwin/include + /opt/graphics/OpenGL/include + /opt/graphics/OpenGL/contrib/libglut + ) + + FIND_LIBRARY( GLUT_glut_LIBRARY glut + /usr/openwin/lib + ) + + FIND_LIBRARY( GLUT_Xi_LIBRARY Xi + /usr/openwin/lib + ) + + FIND_LIBRARY( GLUT_Xmu_LIBRARY Xmu + /usr/openwin/lib + ) + + ENDIF (APPLE) + +ENDIF (WIN32) + +SET( GLUT_FOUND "NO" ) +IF(GLUT_INCLUDE_DIR) + IF(GLUT_glut_LIBRARY) + # Is -lXi and -lXmu required on all platforms that have it? + # If not, we need some way to figure out what platform we are on. + SET( GLUT_LIBRARIES + ${GLUT_glut_LIBRARY} + ${GLUT_Xmu_LIBRARY} + ${GLUT_Xi_LIBRARY} + ${GLUT_cocoa_LIBRARY} + ) + SET( GLUT_FOUND "YES" ) + + #The following deprecated settings are for backwards compatibility with CMake1.4 + SET (GLUT_LIBRARY ${GLUT_LIBRARIES}) + SET (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR}) + + ENDIF(GLUT_glut_LIBRARY) +ENDIF(GLUT_INCLUDE_DIR) + +IF (GLUT_FOUND) + MESSAGE(STATUS "GLUT Found") +ELSE (GLUT_FOUND) + MESSAGE(FATAL_ERROR "Could not find GLUT") +ENDIF (GLUT_FOUND) + +MARK_AS_ADVANCED( + GLUT_INCLUDE_DIR + GLUT_glut_LIBRARY + GLUT_Xmu_LIBRARY + GLUT_Xi_LIBRARY + ) Modified: hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp =================================================================== --- hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp 2009-08-24 13:32:55 UTC (rev 4270) +++ hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp 2009-08-24 16:53:09 UTC (rev 4271) @@ -28,9 +28,8 @@ #define GLEW_STATIC #include <GL/glew.h> - -#ifdef __APPLE__ - #include </System/Library/Frameworks/GLUT.framework/Versions/A/Headers/glut.h> +#ifdef __APPLE__ + #include <glut.h> #else #include <GL/glut.h> #endif Modified: hugin/trunk/src/tools/nona.cpp =================================================================== --- hugin/trunk/src/tools/nona.cpp 2009-08-24 13:32:55 UTC (rev 4270) +++ hugin/trunk/src/tools/nona.cpp 2009-08-24 16:53:09 UTC (rev 4271) @@ -51,7 +51,7 @@ #define GLEW_STATIC #include <GL/glew.h> #ifdef __APPLE__ - #include </System/Library/Frameworks/GLUT.framework/Versions/A/Headers/glut.h> + #include <glut.h> #else #include <GL/glut.h> #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <har...@us...> - 2009-08-27 19:47:33
|
Revision: 4288 http://hugin.svn.sourceforge.net/hugin/?rev=4288&view=rev Author: harryvanderwolf Date: 2009-08-27 19:47:16 +0000 (Thu, 27 Aug 2009) Log Message: ----------- [OSX] merge nona-gpu, James Legg's CP viewing tool and some unidentified changes into the XCode project Modified Paths: -------------- hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp hugin/trunk/src/tools/nona.cpp Modified: hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj =================================================================== --- hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj 2009-08-27 05:23:47 UTC (rev 4287) +++ hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj 2009-08-27 19:47:16 UTC (rev 4288) @@ -974,6 +974,24 @@ 73BB093E0FACC71200B04997 /* PanoToolsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BB093C0FACC71200B04997 /* PanoToolsUtils.h */; }; 73BB093F0FACC71200B04997 /* PanoToolsUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73BB093B0FACC71200B04997 /* PanoToolsUtils.cpp */; }; 73BB09400FACC71200B04997 /* PanoToolsUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BB093C0FACC71200B04997 /* PanoToolsUtils.h */; }; + 73C0DAD11046E94100CB55B7 /* PanoToolsTransformGPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73C0DAD01046E94100CB55B7 /* PanoToolsTransformGPU.cpp */; }; + 73C0DAD21046E94100CB55B7 /* PanoToolsTransformGPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73C0DAD01046E94100CB55B7 /* PanoToolsTransformGPU.cpp */; }; + 73C0DAD91046E9B100CB55B7 /* ImageTransformsGPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73C0DAD71046E9B000CB55B7 /* ImageTransformsGPU.cpp */; }; + 73C0DADA1046E9B100CB55B7 /* ImageTransformsGPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 73C0DAD81046E9B000CB55B7 /* ImageTransformsGPU.h */; }; + 73C0DADB1046E9B100CB55B7 /* ImageTransformsGPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73C0DAD71046E9B000CB55B7 /* ImageTransformsGPU.cpp */; }; + 73C0DADC1046E9B100CB55B7 /* ImageTransformsGPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 73C0DAD81046E9B000CB55B7 /* ImageTransformsGPU.h */; }; + 73C0DBA61046EAC700CB55B7 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73C0DBA51046EAC700CB55B7 /* GLUT.framework */; }; + 73C0DBCB1046EF0A00CB55B7 /* diff2d.hxx in Headers */ = {isa = PBXBuildFile; fileRef = 573F32C009F79B730088B333 /* diff2d.hxx */; }; + 73C0DBE01046FCAD00CB55B7 /* libGLEW.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 734FB9B20EB3929500CD7122 /* libGLEW.a */; }; + 73C0DC011047011C00CB55B7 /* glew.h in Headers */ = {isa = PBXBuildFile; fileRef = 73C0DC001047011C00CB55B7 /* glew.h */; }; + 73C0DC181047064B00CB55B7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 739F846B0EC75402004771D6 /* OpenGL.framework */; }; + 73C0DC2F104707E000CB55B7 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73C0DBA51046EAC700CB55B7 /* GLUT.framework */; }; + 73C0DC30104707E000CB55B7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 739F846B0EC75402004771D6 /* OpenGL.framework */; }; + 73C0DC4710470B4A00CB55B7 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73C0DBA51046EAC700CB55B7 /* GLUT.framework */; }; + 73C0DC4810470B4A00CB55B7 /* libGLEW.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 734FB9B20EB3929500CD7122 /* libGLEW.a */; }; + 73C0DC4910470B4A00CB55B7 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 739F846B0EC75402004771D6 /* OpenGL.framework */; }; + 73C0DC6F104715E500CB55B7 /* PreviewControlPointTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73C0DC6B104715E500CB55B7 /* PreviewControlPointTool.cpp */; }; + 73C0DC70104715E500CB55B7 /* GreatCircles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73C0DC6E104715E500CB55B7 /* GreatCircles.cpp */; }; 73C958FA0DA2C9DB00E19110 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 579895AB068E3002009F90BF /* libz.dylib */; }; 73C958FB0DA2C9DB00E19110 /* libboost_thread.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 57565A640D088DAD00344F55 /* libboost_thread.dylib */; }; 73C958FD0DA2C9DB00E19110 /* libpng.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 577092FA06BD7388004058A1 /* libpng.dylib */; }; @@ -2371,6 +2389,15 @@ 73BB09320FACC59E00B04997 /* PanoToolsUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PanoToolsUtils.h; sourceTree = "<group>"; }; 73BB093B0FACC71200B04997 /* PanoToolsUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PanoToolsUtils.cpp; sourceTree = "<group>"; }; 73BB093C0FACC71200B04997 /* PanoToolsUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PanoToolsUtils.h; sourceTree = "<group>"; }; + 73C0DAD01046E94100CB55B7 /* PanoToolsTransformGPU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PanoToolsTransformGPU.cpp; sourceTree = "<group>"; }; + 73C0DAD71046E9B000CB55B7 /* ImageTransformsGPU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageTransformsGPU.cpp; sourceTree = "<group>"; }; + 73C0DAD81046E9B000CB55B7 /* ImageTransformsGPU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageTransformsGPU.h; sourceTree = "<group>"; }; + 73C0DBA51046EAC700CB55B7 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; sourceTree = "<absolute>"; }; + 73C0DC001047011C00CB55B7 /* glew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glew.h; path = ../../ExternalPrograms/repository/include/GL/glew.h; sourceTree = SOURCE_ROOT; }; + 73C0DC6B104715E500CB55B7 /* PreviewControlPointTool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PreviewControlPointTool.cpp; sourceTree = "<group>"; }; + 73C0DC6C104715E500CB55B7 /* PreviewControlPointTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreviewControlPointTool.h; sourceTree = "<group>"; }; + 73C0DC6D104715E500CB55B7 /* GreatCircles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GreatCircles.h; sourceTree = "<group>"; }; + 73C0DC6E104715E500CB55B7 /* GreatCircles.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GreatCircles.cpp; sourceTree = "<group>"; }; 73C959140DA2C9DB00E19110 /* tca_correct */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tca_correct; sourceTree = BUILT_PRODUCTS_DIR; }; 73E79F300D674EAC00C07126 /* align_image_stack */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = align_image_stack; sourceTree = BUILT_PRODUCTS_DIR; }; 73EAB5280E86CF120020D514 /* libboost_thread.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libboost_thread.a; path = "../../ExternalPrograms/repository/lib-static/libboost_thread.a"; sourceTree = SOURCE_ROOT; }; @@ -2521,6 +2548,8 @@ 576901840D24D3F200A6AD01 /* libpng.dylib in Frameworks */, 576901850D24D3F200A6AD01 /* libtiff.dylib in Frameworks */, 576901860D24D3F200A6AD01 /* libjpeg.dylib in Frameworks */, + 73C0DC2F104707E000CB55B7 /* GLUT.framework in Frameworks */, + 73C0DC30104707E000CB55B7 /* OpenGL.framework in Frameworks */, 576901870D24D3F200A6AD01 /* libIex.dylib in Frameworks */, 576901880D24D3F200A6AD01 /* libImath.dylib in Frameworks */, 576901890D24D3F200A6AD01 /* libIlmImf.dylib in Frameworks */, @@ -2609,6 +2638,8 @@ buildActionMask = 2147483647; files = ( 5769FE680D24D09B00A6AD01 /* libpng.dylib in Frameworks */, + 73C0DC181047064B00CB55B7 /* OpenGL.framework in Frameworks */, + 73C0DBE01046FCAD00CB55B7 /* libGLEW.a in Frameworks */, 5769FE690D24D09B00A6AD01 /* libtiff.dylib in Frameworks */, 5769FE6A0D24D09B00A6AD01 /* libjpeg.dylib in Frameworks */, 5769FE6B0D24D09B00A6AD01 /* libIex.dylib in Frameworks */, @@ -2616,6 +2647,7 @@ 5769FE6D0D24D09B00A6AD01 /* libIlmImf.dylib in Frameworks */, 5769FE6E0D24D09B00A6AD01 /* libIlmThread.dylib in Frameworks */, 5769FE6F0D24D09B00A6AD01 /* libHalf.dylib in Frameworks */, + 73C0DBA61046EAC700CB55B7 /* GLUT.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2626,6 +2658,9 @@ 5796FA810C4395CC006B7C6E /* libz.dylib in Frameworks */, 5796FA820C4395CC006B7C6E /* libpng.dylib in Frameworks */, 5796FA830C4395CC006B7C6E /* libtiff.dylib in Frameworks */, + 73C0DC4710470B4A00CB55B7 /* GLUT.framework in Frameworks */, + 73C0DC4810470B4A00CB55B7 /* libGLEW.a in Frameworks */, + 73C0DC4910470B4A00CB55B7 /* OpenGL.framework in Frameworks */, 5796FA840C4395CC006B7C6E /* libjpeg.dylib in Frameworks */, 5796FA850C4395CC006B7C6E /* libIex.dylib in Frameworks */, 5796FA860C4395CC006B7C6E /* libIlmThread.dylib in Frameworks */, @@ -3140,6 +3175,7 @@ 5713006E0C33D43B00252FE3 /* panotools */ = { isa = PBXGroup; children = ( + 73C0DAD01046E94100CB55B7 /* PanoToolsTransformGPU.cpp */, 73BB093B0FACC71200B04997 /* PanoToolsUtils.cpp */, 73BB093C0FACC71200B04997 /* PanoToolsUtils.h */, 5713006F0C33D43B00252FE3 /* PanoToolsInterface.cpp */, @@ -3262,6 +3298,7 @@ 57452CC1094E4EC500E6B672 /* include */ = { isa = PBXGroup; children = ( + 73C0DC001047011C00CB55B7 /* glew.h */, 57FD3E5E06E98ED50070426B /* pano13 */, 57454C35094E501800E6B672 /* wx-2.8 */, 5711F7E5094F3F3800F668CD /* wx */, @@ -3326,6 +3363,7 @@ 5749F84D067B601A00A6EDD4 /* Mac OS SDK */ = { isa = PBXGroup; children = ( + 73C0DBA51046EAC700CB55B7 /* GLUT.framework */, 739F846B0EC75402004771D6 /* OpenGL.framework */, 5749FA9B067B80F000A6EDD4 /* Carbon.framework */, 57989595068E2FEC009F90BF /* libpthread.dylib */, @@ -3539,6 +3577,8 @@ 5771F7200C301FC100736343 /* vigra_ext */ = { isa = PBXGroup; children = ( + 73C0DAD71046E9B000CB55B7 /* ImageTransformsGPU.cpp */, + 73C0DAD81046E9B000CB55B7 /* ImageTransformsGPU.h */, 5771F7220C301FC100736343 /* CMakeLists.txt */, 5771F7230C301FC100736343 /* Correlation.h */, 5771F7240C301FC100736343 /* FitPolynom.h */, @@ -3865,6 +3905,10 @@ 57E330FE0C4A8859006AA781 /* hugin */ = { isa = PBXGroup; children = ( + 73C0DC6B104715E500CB55B7 /* PreviewControlPointTool.cpp */, + 73C0DC6C104715E500CB55B7 /* PreviewControlPointTool.h */, + 73C0DC6D104715E500CB55B7 /* GreatCircles.h */, + 73C0DC6E104715E500CB55B7 /* GreatCircles.cpp */, 7388EAFB0F6BFB1B001E08FA /* ResetDialog.cpp */, 7388EAFC0F6BFB1B001E08FA /* ResetDialog.h */, 734FBA830EB3A40300CD7122 /* NonaOptionsDialog.cpp */, @@ -4396,6 +4440,7 @@ 576901500D24D3F200A6AD01 /* tiffUtils.h in Headers */, 576901510D24D3F200A6AD01 /* utils.h in Headers */, 73BB09400FACC71200B04997 /* PanoToolsUtils.h in Headers */, + 73C0DADA1046E9B100CB55B7 /* ImageTransformsGPU.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4419,6 +4464,7 @@ buildActionMask = 2147483647; files = ( 5769FE470D24D09B00A6AD01 /* bmp.hxx in Headers */, + 73C0DBCB1046EF0A00CB55B7 /* diff2d.hxx in Headers */, 5769FE480D24D09B00A6AD01 /* byteorder.hxx in Headers */, 5769FE490D24D09B00A6AD01 /* codecmanager.hxx in Headers */, 5769FE4A0D24D09B00A6AD01 /* error.hxx in Headers */, @@ -4435,6 +4481,8 @@ 5769FE550D24D09B00A6AD01 /* viff.hxx in Headers */, 5769FE560D24D09B00A6AD01 /* void_vector.hxx in Headers */, 5769FE570D24D09B00A6AD01 /* auto_file.hxx in Headers */, + 73C0DADC1046E9B100CB55B7 /* ImageTransformsGPU.h in Headers */, + 73C0DC011047011C00CB55B7 /* glew.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5724,6 +5772,7 @@ 571300790C33D44400252FE3 /* PanoToolsInterface.cpp in Sources */, 5713007B0C33D44400252FE3 /* PanoToolsOptimizerWrapper.cpp in Sources */, 73BB093D0FACC71200B04997 /* PanoToolsUtils.cpp in Sources */, + 73C0DAD11046E94100CB55B7 /* PanoToolsTransformGPU.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5855,6 +5904,8 @@ 5769017F0D24D3F200A6AD01 /* MultiThreadOperations.cpp in Sources */, 5709939E0D2E449500499A34 /* platform.cpp in Sources */, 73BB093F0FACC71200B04997 /* PanoToolsUtils.cpp in Sources */, + 73C0DAD21046E94100CB55B7 /* PanoToolsTransformGPU.cpp in Sources */, + 73C0DAD91046E9B100CB55B7 /* ImageTransformsGPU.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5912,6 +5963,7 @@ 5769FE650D24D09B00A6AD01 /* hdr.cxx in Sources */, 5769FE660D24D09B00A6AD01 /* rgbe.c in Sources */, 5769FE670D24D09B00A6AD01 /* exr.cxx in Sources */, + 73C0DADB1046E9B100CB55B7 /* ImageTransformsGPU.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6085,6 +6137,8 @@ 57D5093C0F5942FB00CCDCB5 /* CPImagesComboBox.cpp in Sources */, 7388EAFD0F6BFB1B001E08FA /* ResetDialog.cpp in Sources */, 57FD5826101B3E7C0065B9E9 /* CPDetectorConfig.cpp in Sources */, + 73C0DC6F104715E500CB55B7 /* PreviewControlPointTool.cpp in Sources */, + 73C0DC70104715E500CB55B7 /* GreatCircles.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7408,6 +7462,11 @@ DEPLOYMENT_POSTPROCESSING = YES; INFOPLIST_FILE = "../mac/vigra_impex-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; PRODUCT_NAME = HuginVigraImpex; USER_HEADER_SEARCH_PATHS = "../src/foreign/vigra $(inherited)"; }; @@ -7418,6 +7477,11 @@ buildSettings = { INFOPLIST_FILE = "../mac/vigra_impex-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; PRODUCT_NAME = HuginVigraImpex; USER_HEADER_SEARCH_PATHS = "../src/foreign/vigra $(inherited)"; }; @@ -7426,10 +7490,28 @@ 5769FE3E0D24CFED00A6AD01 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/include, + /Developer/Headers/FlatCarbon, + "$(REPOSITORY_DIR)/include", + "$(REPOSITORY_DIR)/include/OpenEXR", + "$(REPOSITORY_DIR)/include/GL", + ../src/hugin_base, + ../src/foreign, + ../src/foreign/vigra, + ../src, + "$(inherited)", + ); INFOPLIST_FILE = "../mac/vigra_impex-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; PRODUCT_NAME = HuginVigraImpex; - USER_HEADER_SEARCH_PATHS = "../src/foreign/vigra $(inherited)"; + USER_HEADER_SEARCH_PATHS = "$(inherited)"; }; name = Release; }; @@ -7623,7 +7705,9 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; PRODUCT_NAME = nona; }; name = Debug; @@ -7640,7 +7724,9 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; PRODUCT_NAME = nona; }; name = Development; @@ -7652,12 +7738,15 @@ HEADER_SEARCH_PATHS = ( ../src/foreign/vigra, ../src/hugin_base, + "$(REPOSITORY_DIR)/include/GL", "$(inherited)", ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; PRODUCT_NAME = nona; SEPARATE_STRIP = NO; STRIP_INSTALLED_PRODUCT = NO; Modified: hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp =================================================================== --- hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp 2009-08-27 05:23:47 UTC (rev 4287) +++ hugin/trunk/src/hugin_base/vigra_ext/ImageTransformsGPU.cpp 2009-08-27 19:47:16 UTC (rev 4288) @@ -29,7 +29,7 @@ #define GLEW_STATIC #include <GL/glew.h> #ifdef __APPLE__ - #include <glut.h> + #include <GLUT/glut.h> #else #include <GL/glut.h> #endif Modified: hugin/trunk/src/tools/nona.cpp =================================================================== --- hugin/trunk/src/tools/nona.cpp 2009-08-27 05:23:47 UTC (rev 4287) +++ hugin/trunk/src/tools/nona.cpp 2009-08-27 19:47:16 UTC (rev 4288) @@ -51,7 +51,7 @@ #define GLEW_STATIC #include <GL/glew.h> #ifdef __APPLE__ - #include <glut.h> + #include <GLUT/glut.h> #else #include <GL/glut.h> #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-09-03 00:58:30
|
Revision: 4314 http://hugin.svn.sourceforge.net/hugin/?rev=4314&view=rev Author: yuv Date: 2009-09-03 00:58:22 +0000 (Thu, 03 Sep 2009) Log Message: ----------- meaningful display of version information also for CLI tools and for builds from tarball Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/deghosting/hugin_hdrmerge.cpp hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp hugin/trunk/src/hugin_version.h.in.cmake hugin/trunk/src/tools/align_image_stack.cpp hugin/trunk/src/tools/autooptimiser.cpp hugin/trunk/src/tools/fulla.cpp hugin/trunk/src/tools/nona.cpp hugin/trunk/src/tools/pto2mk.cpp hugin/trunk/src/tools/tca_correct.cpp hugin/trunk/src/tools/vig_optimize.cpp Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/CMakeLists.txt 2009-09-03 00:58:22 UTC (rev 4314) @@ -42,7 +42,7 @@ MESSAGE(SEND_ERROR "Could not determine SVN revision") ENDIF(Subversion_FOUND) ENDIF(WIN32 AND NOT CMAKE_CROSSCOMPILING) - SET(HUGIN_PACKAGE_VERSION ${V_MAJOR}.${V_MINOR}.${V_PATCH}.${HUGIN_WC_REVISION}) + SET(HUGIN_PACKAGE_VERSION ${V_MAJOR}.${V_MINOR}.${V_PATCH}) SET(HUGIN_DEVELOPMENT_VERSION 1) FILE(WRITE ${PROJECT_SOURCE_DIR}/rev.txt "${HUGIN_WC_REVISION}") ELSE (EXISTS ${PROJECT_SOURCE_DIR}/.svn) @@ -52,6 +52,9 @@ MESSAGE("-- Current SVN revision is ${HUGIN_WC_REVISION}") ENDIF (EXISTS ${PROJECT_SOURCE_DIR}/.svn) +# version to display +set(DISPLAY_VERSION "${V_MAJOR}.${V_MINOR}.${V_PATCH}.${HUGIN_WC_REVISION}") + # version for internal libraries. set(HUGIN_LIB_VERSION 0.0) Modified: hugin/trunk/src/deghosting/hugin_hdrmerge.cpp =================================================================== --- hugin/trunk/src/deghosting/hugin_hdrmerge.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/deghosting/hugin_hdrmerge.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -125,7 +125,7 @@ { cerr << name << ": merge overlapping images" << std::endl << std::endl - << "hugin_hdrmerge version " << PACKAGE_VERSION << std::endl + << "hugin_hdrmerge version " << DISPLAY_VERSION << std::endl << std::endl << "Usage: " << name << " [options] -o output.exr <input-files>" << std::endl << "Valid options are:" << std::endl Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -210,9 +210,9 @@ int tw, th; wxString version; #ifdef HUGIN_DEVELOPMENT_VERSION - version.Printf(_("Prerelease %s"),wxString(PACKAGE_VERSION, wxConvLocal).c_str()); + version.Printf(_("Prerelease %s"),wxString(DISPLAY_VERSION, wxConvLocal).c_str()); #else - version.Printf(_("Version %s"),wxString(PACKAGE_VERSION, wxConvLocal).c_str()); + version.Printf(_("Version %s"),wxString(DISPLAY_VERSION, wxConvLocal).c_str()); #endif dc.GetTextExtent(version, &tw, &th); // place text on bitmap. Modified: hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in 2009-09-03 00:58:22 UTC (rev 4314) @@ -7,7 +7,7 @@ <img src="splash.png"></img> <p> <font size=+2>hugin</font><br> - Version ${HUGIN_PACKAGE_VERSION}${HUGIN_BUILDER} + Version ${DISPLAY_VERSION} <br> <font size=-1>(http://hugin.sourceforge.net)</font> <br> Modified: hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp =================================================================== --- hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -134,7 +134,7 @@ void RunStitchFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxMessageBox( wxString::Format(_("HuginStitchProject. Application to stitch hugin project files.\n Version: %s"), wxT(PACKAGE_VERSION)), + wxMessageBox( wxString::Format(_("HuginStitchProject. Application to stitch hugin project files.\n Version: %s"), wxT(DISPLAY_VERSION)), wxT("About hugin_stitch_project"), wxOK | wxICON_INFORMATION ); } Modified: hugin/trunk/src/hugin_version.h.in.cmake =================================================================== --- hugin/trunk/src/hugin_version.h.in.cmake 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/hugin_version.h.in.cmake 2009-09-03 00:58:22 UTC (rev 4314) @@ -7,8 +7,10 @@ #ifdef _MSC_VER #define PACKAGE_VERSION "${HUGIN_PACKAGE_VERSION} built by ${HUGIN_BUILDER}" +#define DISPLAY_VERSION "${DISPLAY_VERSION} built by ${HUGIN_BUILDER}" #else #define PACKAGE_VERSION "${HUGIN_PACKAGE_VERSION}" +#define DISPLAY_VERSION "${DISPLAY_VERSION}" #endif /* this is an svn checkout, tag is as such Modified: hugin/trunk/src/tools/align_image_stack.cpp =================================================================== --- hugin/trunk/src/tools/align_image_stack.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/tools/align_image_stack.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -66,7 +66,7 @@ static void usage(const char * name) { cerr << name << ": align overlapping images for HDR creation" << std::endl - << "align_image_stack version " << PACKAGE_VERSION << std::endl + << "align_image_stack version " << DISPLAY_VERSION << std::endl << std::endl << "Usage: " << name << " [options] input files" << std::endl << "Valid options are:" << std::endl Modified: hugin/trunk/src/tools/autooptimiser.cpp =================================================================== --- hugin/trunk/src/tools/autooptimiser.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/tools/autooptimiser.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -54,7 +54,7 @@ static void usage(const char * name) { cerr << name << ": optimize image positions" << endl - << "autooptimiser version " << PACKAGE_VERSION << endl + << "autooptimiser version " << DISPLAY_VERSION << endl << endl << "Usage: " << name << " [options] input.pto" << endl << " To read a project from stdio, specify - as input file." << endl Modified: hugin/trunk/src/tools/fulla.cpp =================================================================== --- hugin/trunk/src/tools/fulla.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/tools/fulla.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -81,7 +81,7 @@ static void usage(const char * name) { cerr << name << ": correct lens distortion, vignetting and chromatic abberation" << std::endl - << "fulla version " << PACKAGE_VERSION << endl + << "fulla version " << DISPLAY_VERSION << endl << std::endl << "Usage: " << name << " [options] inputfile(s) " << std::endl << " option are: " << std::endl Modified: hugin/trunk/src/tools/nona.cpp =================================================================== --- hugin/trunk/src/tools/nona.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/tools/nona.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -67,7 +67,7 @@ { cerr << name << ": stitch a panorama image" << std::endl << std::endl - << "nona version " << PACKAGE_VERSION << std::endl + << "nona version " << DISPLAY_VERSION << std::endl << std::endl << " It uses the transform function from PanoTools, the stitching itself" << std::endl << " is quite simple, no seam feathering is done." << std::endl Modified: hugin/trunk/src/tools/pto2mk.cpp =================================================================== --- hugin/trunk/src/tools/pto2mk.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/tools/pto2mk.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -59,7 +59,7 @@ { cerr << name << ": create a makefile for stitching" << std::endl << std::endl - << "pto2mk version " << PACKAGE_VERSION << std::endl + << "pto2mk version " << DISPLAY_VERSION << std::endl << std::endl << "Usage: " << name << " -o <output_makefile> -p <output_prefix> project_file" << std::endl << " Options: " << std::endl Modified: hugin/trunk/src/tools/tca_correct.cpp =================================================================== --- hugin/trunk/src/tools/tca_correct.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/tools/tca_correct.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -217,7 +217,7 @@ static void usage(const char * name) { cerr << name << ": Parameter estimation of transverse chromatic abberations" << std::endl - << name << " version " << PACKAGE_VERSION << endl + << name << " version " << DISPLAY_VERSION << endl << std::endl << "Usage: " << name << " [options] <inputfile>" << std::endl << " option are: " << std::endl Modified: hugin/trunk/src/tools/vig_optimize.cpp =================================================================== --- hugin/trunk/src/tools/vig_optimize.cpp 2009-09-02 15:55:06 UTC (rev 4313) +++ hugin/trunk/src/tools/vig_optimize.cpp 2009-09-03 00:58:22 UTC (rev 4314) @@ -62,7 +62,7 @@ static void usage(const char * name) { cerr << name << ": Try to determine the radial vignetting" << std::endl - << "vig_optimize version " << PACKAGE_VERSION << endl + << "vig_optimize version " << DISPLAY_VERSION << endl << std::endl << "Usage: " << name << " [options] -o output.pto input.pto" << std::endl << "Valid options are:" << std::endl This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2009-09-09 23:30:34
|
Revision: 4353 http://hugin.svn.sourceforge.net/hugin/?rev=4353&view=rev Author: brunopostle Date: 2009-09-09 23:30:27 +0000 (Wed, 09 Sep 2009) Log Message: ----------- Add autopano-noop.sh to install target Modified Paths: -------------- hugin/trunk/CMakeLists.txt Added Paths: ----------- hugin/trunk/utils/CMakeLists.txt Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-09-09 02:07:24 UTC (rev 4352) +++ hugin/trunk/CMakeLists.txt 2009-09-09 23:30:27 UTC (rev 4353) @@ -371,6 +371,7 @@ add_subdirectory(src) add_subdirectory(doc) +add_subdirectory(utils) # install enfuse droplets and windows installer and everything else in platforms ADD_SUBDIRECTORY(platforms) Added: hugin/trunk/utils/CMakeLists.txt =================================================================== --- hugin/trunk/utils/CMakeLists.txt (rev 0) +++ hugin/trunk/utils/CMakeLists.txt 2009-09-09 23:30:27 UTC (rev 4353) @@ -0,0 +1,3 @@ +IF(UNIX) + install(PROGRAMS autopano-noop.sh DESTINATION ${BINDIR}) +ENDIF(UNIX) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-09-10 04:24:05
|
Revision: 4357 http://hugin.svn.sourceforge.net/hugin/?rev=4357&view=rev Author: yuv Date: 2009-09-10 04:23:50 +0000 (Thu, 10 Sep 2009) Log Message: ----------- remove legacy libpano12 support Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/CMakeModules/FindPANO12.cmake hugin/trunk/src/hugin1/base_wx/CMakeLists.txt hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.cpp hugin/trunk/src/hugin1/hugin/PanoPanel.cpp hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp hugin/trunk/src/hugin1/hugin/huginApp.cpp hugin/trunk/src/hugin1/ptbatcher/ProjectListBox.cpp hugin/trunk/src/hugin_base/panodata/PanoramaOptions.cpp hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h hugin/trunk/src/hugin_base/panotools/PanoToolsOptimizerWrapper.cpp hugin/trunk/src/hugin_config.h.in hugin/trunk/src/hugin_config.h.in.cmake hugin/trunk/src/hugin_config_msvc.h Removed Paths: ------------- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp hugin/trunk/src/hugin1/base_wx/PTWXDlg.h Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/CMakeLists.txt 2009-09-10 04:23:50 UTC (rev 4357) @@ -169,16 +169,12 @@ ## FIND_PACKAGE(PANO13) -FIND_PACKAGE(PANO12) IF(PANO13_FOUND) SET(PANO_LIBRARIES ${PANO13_LIBRARIES}) SET(PANO_INCLUDE_DIR ${PANO13_INCLUDE_DIR}) -ELSEIF(PANO12_FOUND) - SET(PANO_LIBRARIES ${PANO12_LIBRARIES}) - SET(PANO_INCLUDE_DIR ${PANO12_INCLUDE_DIR}) ELSE(PANO13_FOUND) - MESSAGE(SEND_ERROR "Either libpano13 or libpano12 are required") + MESSAGE(SEND_ERROR "libpano13 required") ENDIF(PANO13_FOUND) INCLUDE_DIRECTORIES(${PANO_INCLUDE_DIR}) Modified: hugin/trunk/CMakeModules/FindPANO12.cmake =================================================================== --- hugin/trunk/CMakeModules/FindPANO12.cmake 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/CMakeModules/FindPANO12.cmake 2009-09-10 04:23:50 UTC (rev 4357) @@ -1,27 +0,0 @@ -# - Find PANO12 library -# Find the native PANO12 includes and library -# This module defines -# PANO12_INCLUDE_DIR, where to find pano12/panorama.h, etc. -# PANO12_LIBRARIES, libraries to link against to use PANO12. -# PANO12_FOUND, If false, do not try to use PANO12. -# also defined, but not for general use are -# PANO12_LIBRARY, where to find the PANO12 library. - -FIND_PATH(PANO12_INCLUDE_DIR pano12/panorama.h - /usr/local/include - /usr/include -) - -SET(PANO12_NAMES ${PANO12_NAMES} pano12) -FIND_LIBRARY(PANO12_LIBRARY - NAMES ${PANO12_NAMES} - PATHS /usr/lib /usr/local/lib - ) - -IF(PANO12_INCLUDE_DIR) - IF(PANO12_LIBRARY) - SET( PANO12_FOUND "YES" ) - SET( PANO12_LIBRARIES ${PANO12_LIBRARY} ) - ENDIF(PANO12_LIBRARY) -ENDIF(PANO12_INCLUDE_DIR) - Modified: hugin/trunk/src/hugin1/base_wx/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin1/base_wx/CMakeLists.txt 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/base_wx/CMakeLists.txt 2009-09-10 04:23:50 UTC (rev 4357) @@ -1,5 +1,5 @@ -SET(HUGIN_WX_BASE_SRC ImageCache.cpp MyProgressDialog.cpp Plot2D.cpp PTWXDlg.cpp +SET(HUGIN_WX_BASE_SRC ImageCache.cpp MyProgressDialog.cpp Plot2D.cpp huginConfig.cpp MyExternalCmdExecDialog.cpp platform.cpp RunStitchPanel.cpp ) Deleted: hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -1,211 +0,0 @@ -// -*- c-basic-offset: 4 -*- - -/** @file OptimizePanel.cpp - * - * @brief implementation of OptimizePanel - * - * @author Pablo d'Angelo <pab...@we...> - * - * $Id$ - * - * 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 software 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 software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include <config.h> -#include "panoinc.h" -#include "panoinc_WX.h" - -extern "C" { -#ifdef HasPANO13 -#include <pano13/filter.h> -#include <pano13/queryfeature.h> -#else -#include <pano12/filter.h> -#include <pano12/queryfeature.h> -#endif -} - -// Error reporting - -#ifndef PANO12_FEATURE_DLG_FCN - -// not supported by pano tools -void registerPTWXDlgFcn() -{ -}; - -void deregisterPTWXDlgFcn() -{ -}; - -#else - -wxWindow* appParent = NULL; - -static void PTPrintErrorWX(char* fmt, va_list ap) -{ - char message[257]; - - vsprintf(message, fmt, ap); - -// MessageBox(GetFocus(), (LPSTR)message, (LPSTR)"", MB_OK | MB_ICONHAND) ; - wxMessageBox(wxString(message,wxConvLocal), _("Panorama Tools"), wxOK | wxICON_HAND,appParent); -} - - -// Progress report; return false if canceled - - -static int PTProgressWX( int command, char* argument ){ - - static wxProgressDialog * dlg = 0; -// MSG msg; - long percent; - switch( command ){ - case _initProgress: - if (dlg) { - dlg->Destroy(); - dlg = 0; - } else { - dlg = new wxProgressDialog(_("Panorama Tools"), - _("\n\n\n"), 100, NULL, - wxPD_APP_MODAL | wxPD_CAN_ABORT); - if (dlg == 0) { - return FALSE; - } - dlg->Update(0, wxString(argument, wxConvLocal)); - } - return TRUE; - case _setProgress: - if (dlg) { - sscanf(argument,"%ld", &percent); - if(percent>100) percent = 100; - if(percent<0 ) percent = 0; - if (! dlg->Update(percent)) { - return FALSE; - } - } - return TRUE; - break; - case _disposeProgress: - if( dlg != 0 ) - { - dlg->Destroy(); - dlg=0; - } - - return TRUE; - - case _idleProgress: - return TRUE; - - } - return TRUE; -} - - -static int PTInfoDlgWX ( int command, char* argument ) // Display info: same argumenmts as progress -{ - char text[256]; - static char mainMessage[256]; - - static wxProgressDialog * dlg = 0; -// MSG msg; - switch( command ){ - case _initProgress: - if (dlg) { - dlg->Destroy(); - dlg = 0; - } else { - // we need to ensure that there is are enough lines in the dialog.. - // create progress dialog - dlg = new wxProgressDialog(_("Panorama Tools"), -#ifdef __WXMAC__ - _("0123456789012345678901234567890123456789012345\n\n\n\n\n"), -#else - _("0123456789012345678901234567890123456789012345\n\n\n"), -#endif - 100, NULL, - wxPD_APP_MODAL | wxPD_CAN_ABORT | wxPD_ELAPSED_TIME); - if (dlg == 0) { - return FALSE; - } -#if wxMAJOR_VERSION == 2 && wxMINOR_VERSION >= 8 - dlg->Pulse(wxString(argument, wxConvLocal)); -#elif wxMAJOR_VERSION == 2 - dlg->Update(0, wxString(argument, wxConvLocal)); -#endif - } - return TRUE; - case _setProgress: - if (dlg) { - if( *argument != 0 ) - { - bool cont; - - if( *argument != '+' ) - { - strcpy( mainMessage, argument ); - strcpy( text, argument ); - } - else - { - sprintf( text,"%s%s", mainMessage, &(argument[1]) ); - } -#if wxMAJOR_VERSION == 2 && wxMINOR_VERSION >= 8 - cont = dlg->Pulse(wxString(argument, wxConvLocal)); -#elif wxMAJOR_VERSION == 2 - cont = dlg->Update(1, wxString(argument, wxConvLocal)); -#endif - if (! cont) { - return FALSE; - } - } - } - return TRUE; - break; - case _disposeProgress: - if( dlg != 0 ) - { - dlg->Destroy(); - dlg=0; - } - - return TRUE; - - case _idleProgress: - return TRUE; - } - return TRUE; -} - -void registerPTWXDlgFcn(wxWindow* parent) -{ - appParent = parent; - PT_setProgressFcn(&PTProgressWX); - PT_setErrorFcn(&PTPrintErrorWX); - PT_setInfoDlgFcn(&PTInfoDlgWX); -}; - -void deregisterPTWXDlgFcn() -{ - PT_setProgressFcn(NULL); - PT_setErrorFcn(NULL); - PT_setInfoDlgFcn(NULL); -} - -#endif - Deleted: hugin/trunk/src/hugin1/base_wx/PTWXDlg.h =================================================================== --- hugin/trunk/src/hugin1/base_wx/PTWXDlg.h 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/base_wx/PTWXDlg.h 2009-09-10 04:23:50 UTC (rev 4357) @@ -1,31 +0,0 @@ -// -*- c-basic-offset: 4 -*- -/** @file PTWXDlg.h - * - * @author Pablo d'Angelo <pab...@we...> - * - * $Id$ - * - * This 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 software 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef _PTWXDLG_H -#define _PTWXDLG_H - -void registerPTWXDlgFcn(wxWindow *parent=NULL); -void deregisterPTWXDlgFcn(); - - -#endif // _PTWXDLG_H Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -50,7 +50,6 @@ #include "hugin/MainFrame.h" #include "hugin/huginApp.h" #include "hugin/AutoCtrlPointCreator.h" -#include "base_wx/PTWXDlg.h" #include "hugin/TextKillFocusHandler.h" #include "hugin/PanoDruid.h" #include "base_wx/MyProgressDialog.h" @@ -561,10 +560,7 @@ { wxBusyCursor bc; - // temporarily disable PT progress dialog.. - deregisterPTWXDlgFcn(); smartOptimize(optPano); - registerPTWXDlgFcn(MainFrame::Get()); } progress.increaseProgress(1.0, std::wstring(wxString(_("Leveling the panorama")).wc_str(wxConvLocal))); Modified: hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -52,11 +52,7 @@ */ extern "C" { -#ifdef HasPANO13 #include <pano13/queryfeature.h> -#else -#include <pano12/queryfeature.h> -#endif } #include "PreviewToolHelper.h" @@ -237,7 +233,6 @@ wxDefaultPosition, wxDefaultSize); /* populate with all available projection types */ -#ifdef HasPANO13 int nP = panoProjectionFormatCount(); for(int n=0; n < nP; n++) { pano_projection_features proj; @@ -246,23 +241,6 @@ m_ProjectionChoice->Append(wxGetTranslation(str2)); } } -#else - bool ok = true; - int n=0; - while(ok) { - char name[20]; - char str[255]; - sprintf(name,"PanoType%d",n); - n++; - int len = queryFeatureString(name,str,255); - if (len > 0) { - wxString str2(str, wxConvLocal); - m_ProjectionChoice->Append(wxGetTranslation(str2)); - } else { - ok = false; - } - } -#endif m_ProjectionChoice->SetSelection(2); blendModeSizer->Add(m_ProjectionChoice, @@ -346,9 +324,6 @@ m_topsizer->Add(blendModeSizer, 0, wxEXPAND | wxALL, 5); - - -#ifdef HasPANO13 m_projParamSizer = new wxStaticBoxSizer( new wxStaticBox(this, -1, _("Projection Parameters")), wxHORIZONTAL); @@ -383,8 +358,6 @@ // do not show projection param sizer m_topsizer->Show(m_projParamSizer, false, true); -#endif - wxConfigBase * config = wxConfigBase::Get(); // add a status bar @@ -522,7 +495,7 @@ m_ToolBar->EnableTool(XRCID("preview_straighten_pano_tool"), pano.getNrOfImages() > 0); // TODO: enable display of parameters and set their limits, if projection has some. -#ifdef HasPANO13 + int nParam = opts.m_projFeatures.numberOfParameters; bool relayout = false; // if the projection format has changed @@ -563,7 +536,6 @@ if (relayout) { m_topsizer->Layout(); } -#endif SetStatusText(wxString::Format(wxT("%.1f x %.1f"), opts.getHFOV(), opts.getVFOV()),2); m_HFOVSlider->SetValue(roundi(opts.getHFOV())); m_VFOVSlider->SetValue(roundi(opts.getVFOV())); @@ -822,7 +794,6 @@ } } opts.outputExposureValue = p; -#ifdef HasPANO13 } else { int nParam = opts.m_projFeatures.numberOfParameters; std::vector<double> para = opts.getProjectionParameters(); @@ -841,7 +812,6 @@ } } opts.setProjectionParameters(para); -#endif } GlobalCmdHist::getInstance().addCommand( new PT::SetPanoOptionsCmd( m_pano, opts ) @@ -861,7 +831,6 @@ DEBUG_DEBUG("VFOV changed (slider): " << e.GetInt()); opt.setVFOV(e.GetInt()); } else { -#ifdef HasPANO13 int nParam = opt.m_projFeatures.numberOfParameters; std::vector<double> para = opt.getProjectionParameters(); for (int i = 0; i < nParam; i++) { @@ -873,7 +842,6 @@ opt.setProjectionParameters(para); opt.setHFOV(m_HFOVSlider->GetValue()); opt.setVFOV(m_VFOVSlider->GetValue()); -#endif } GlobalCmdHist::getInstance().addCommand( @@ -892,7 +860,6 @@ } else if (e.GetEventObject() == m_VFOVSlider) { opt.setVFOV(e.GetInt()); } else { -#ifdef HasPANO13 int nParam = opt.m_projFeatures.numberOfParameters; std::vector<double> para = opt.getProjectionParameters(); for (int i = 0; i < nParam; i++) { @@ -902,7 +869,6 @@ } } opt.setProjectionParameters(para); -#endif } // we only actually update the panorama fully when the mouse is released. // As we are dragging it we don't want to create undo events, but we would Modified: hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -36,7 +36,6 @@ #include "hugin/CommandHistory.h" #include "hugin/MainFrame.h" #include "base_wx/MyProgressDialog.h" -#include "base_wx/PTWXDlg.h" #include "hugin/config_defaults.h" using namespace std; @@ -552,7 +551,6 @@ optPano.setCtrlPoints(newCP); // temporarily disable PT progress dialog.. - deregisterPTWXDlgFcn(); { wxBusyCursor bc; // run pairwise optimizer @@ -564,7 +562,6 @@ optPano.printPanoramaScript(std::cerr, optPano.getOptimizeVector(), optPano.getOptions(), allImg, false); #endif - registerPTWXDlgFcn(MainFrame::Get()); // do global optimisation optPano.setCtrlPoints(cps); PTools::optimize(optPano); Modified: hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -38,7 +38,6 @@ #include "hugin/CommandHistory.h" #include "hugin/MainFrame.h" #include "base_wx/MyProgressDialog.h" -#include "base_wx/PTWXDlg.h" #include "hugin/config_defaults.h" #include "base_wx/ImageCache.h" Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -39,11 +39,7 @@ #include "common/wxPlatform.h" extern "C" { -#ifdef HasPANO13 #include <pano13/queryfeature.h> -#else -#include <pano12/queryfeature.h> -#endif } #include "hugin/RunStitcherFrame.h" @@ -167,7 +163,6 @@ #endif /* populate with all available projection types */ -#ifdef HasPANO13 int nP = panoProjectionFormatCount(); for(int n=0; n < nP; n++) { pano_projection_features proj; @@ -176,23 +171,6 @@ m_ProjectionChoice->Append(wxGetTranslation(str2)); } } -#else - bool ok = true; - int n=0; - while(ok) { - char name[20]; - char str[255]; - sprintf(name,"PanoType%d",n); - n++; - int len = queryFeatureString(name,str,255); - if (len > 0) { - wxString str2(str, wxConvLocal); - m_ProjectionChoice->Append(wxGetTranslation(str2)); - } else { - ok = false; - } - } -#endif m_HFOVText = XRCCTRL(*this, "pano_text_hfov" ,wxTextCtrl); DEBUG_ASSERT(m_HFOVText); m_CalcHFOVButton = XRCCTRL(*this, "pano_button_calc_fov" ,wxButton); Modified: hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -29,24 +29,6 @@ #include "wx/listbook.h" #include "panoinc.h" -#ifdef HAVE_PANO12_QUERYFEATURE_H -#ifndef WIN32 -#include <dlfcn.h> -#else -#include <windows.h> -#endif - -extern "C" { -#ifdef HasPANO13 -#include <pano13/version.h> -#include <pano13/queryfeature.h> -#else -#include <pano12/version.h> -#include <pano12/queryfeature.h> -#endif -} -#endif - #include "common/wxPlatform.h" #include "hugin/huginApp.h" @@ -404,175 +386,7 @@ bool PreferencesDialog::GetPanoVersion() { - -#ifdef HAVE_PANO12_QUERYFEATURE_H -#ifdef __WXMSW__ - HINSTANCE hDll = NULL; -#elif (!defined __WXMAC__) - void *hDll = NULL; -#endif - PROC_QF pfQF = NULL; - PROC_QFNUM pfQFNum = NULL; - PROC_QFINT pfQFInt = NULL; - PROC_QFDOUBLE pfQFDouble = NULL; - PROC_QFSTRING pfQFString = NULL; - - int iResult; - double dResult; - char sResult[256]; - char str1[1000]; - char str2[10000]; - bool bSuccess = true; - -#ifdef __WXMSW__ - hDll = LoadLibrary(_T("pano13.dll")); - if(!hDll) - { - //MessageBox((HWND)NULL, _("Could not load dll"), _("panoinfo"), MB_ICONEXCLAMATION); - bSuccess = false; - goto cleanup; - } - - pfQF = (PROC_QF) GetProcAddress( hDll, "queryFeatures" ); - pfQFNum = (PROC_QFNUM) GetProcAddress( hDll, "queryFeatureCount" ); - pfQFInt = (PROC_QFINT) GetProcAddress( hDll, "queryFeatureInt" ); - pfQFDouble = (PROC_QFDOUBLE) GetProcAddress( hDll, "queryFeatureDouble" ); - pfQFString = (PROC_QFSTRING) GetProcAddress( hDll, "queryFeatureString" ); -#elif (defined __WXMAC__) -//HuginOSX has libpano12 statically linked; hard code the query functions instead - pfQF = (PROC_QF) queryFeatures; - pfQFNum = (PROC_QFNUM) queryFeatureCount; - pfQFInt = (PROC_QFINT) queryFeatureInt; - pfQFDouble = (PROC_QFDOUBLE) queryFeatureDouble; - pfQFString = (PROC_QFSTRING) queryFeatureString; -#else - hDll = dlopen("libpano13.so.0", RTLD_NOW); - if(!hDll) - { - hDll = dlopen("libpano13.so", RTLD_NOW); - if(!hDll) - { - printf("Could not load pano13"); - bSuccess = false; - goto cleanup; - } - } - - pfQF = (PROC_QF) dlsym( hDll, "queryFeatures" ); - pfQFNum = (PROC_QFNUM) dlsym( hDll, "queryFeatureCount" ); - pfQFInt = (PROC_QFINT) dlsym( hDll, "queryFeatureInt" ); - pfQFDouble = (PROC_QFDOUBLE) dlsym( hDll, "queryFeatureDouble" ); - pfQFString = (PROC_QFSTRING) dlsym( hDll, "queryFeatureString" ); -#endif - str2[0] = '\0'; - if(!pfQF) - { - strcat(str2 ,"Error: The 'queryFeatures' function not present\n"); - } - if(!pfQFNum) - { - strcat(str2 ,"Error: The 'queryFeatureCount' function not present\n"); - } - if(!pfQFString) - { - strcat(str2 ,"Error: The 'queryFeatureString' function not present\n"); - } - if(!pfQFInt) - { - strcat(str2 ,"Error: The 'queryFeatureInt' function not present\n"); - } - if(!pfQFDouble) - { - strcat(str2 ,"Error: The 'queryFeatureDouble' function not present\n"); - } - - - if(pfQFString) - { - if((pfQFString) (PTVERSION_NAME_FILEVERSION, sResult, sizeof(sResult)/sizeof(sResult[0]) )) - { - m_PTVersion = wxString(sResult, wxConvLocal); - } - - if((pfQFString) (PTVERSION_NAME_COMMENT, sResult, sizeof(sResult)/sizeof(sResult[0]) )) - { - sprintf(str1, "Comment:\t%s\n", sResult ); - strcat(str2 ,str1); - } - - if((pfQFString) (PTVERSION_NAME_LEGALCOPYRIGHT, sResult, sizeof(sResult)/sizeof(sResult[0]) )) - { - sprintf(str1, "Copyright:\t%s\n\n", sResult ); - strcat(str2 ,str1); - } - - } - - if(pfQFInt) - { - if((pfQFInt) ("CPErrorIsDistSphere", &iResult )) - { - sprintf(str1, "Optimizer Error:\t%s\n", iResult? "dist sphere" : "dist rect" ); - strcat(str2 ,str1); - } - } - - if(pfQFDouble) - { - if((pfQFDouble) ("MaxFFOV", &dResult )) - { - sprintf(str1, "Max FoV:\t\t%f\n\n", dResult ); - strcat(str2 ,str1); - } - - } - - if(pfQFNum && pfQF && pfQFString) - { - int i,bufsize,numfeatures; - char *name; - char *value; - Tp12FeatureType type; - - strcat(str2 ,"Feature List:\n\n"); - - numfeatures = pfQFNum(); - for(i=0; i < numfeatures;i++) - { - pfQF(i, &name, &type); - bufsize = pfQFString(name, NULL, 0)+1; - value = (char*)malloc(bufsize); - pfQFString(name, value, bufsize); - - sprintf(str1, " %s: %s\n", name, value); - strcat(str2 ,str1); - - free(value); - } - } - // use wxConvLocal to deal with the copyright symbols used by panotools - m_PTDetails = wxString(str2, wxConvLocal); - -#ifndef __WXMAC__ -cleanup: -#endif - - if (bSuccess) - { -#ifdef __WXMSW__ - FreeLibrary(hDll); -#elif defined __WXMAC__ -//nothing to do -#else - dlclose(hDll); -#endif - return true; - } else { - return false; - } -#else // HAVE_PANO12_QUERYFEATURE_H return false; -#endif } void PreferencesDialog::UpdateDisplayData(int panel) Modified: hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -48,11 +48,7 @@ #include <vigra_ext/ImageTransforms.h> extern "C" { -#ifdef HasPANO13 #include <pano13/queryfeature.h> -#else -#include <pano12/queryfeature.h> -#endif } using namespace utils; @@ -203,7 +199,6 @@ wxDefaultPosition, wxDefaultSize); /* populate with all available projection types */ -#ifdef HasPANO13 int nP = panoProjectionFormatCount(); for(int n=0; n < nP; n++) { pano_projection_features proj; @@ -212,23 +207,6 @@ m_ProjectionChoice->Append(wxGetTranslation(str2)); } } -#else - bool ok = true; - int n=0; - while(ok) { - char name[20]; - char str[255]; - sprintf(name,"PanoType%d",n); - n++; - int len = queryFeatureString(name,str,255); - if (len > 0) { - wxString str2(str, wxConvLocal); - m_ProjectionChoice->Append(wxGetTranslation(str2)); - } else { - ok = false; - } - } -#endif m_ProjectionChoice->SetSelection(2); blendModeSizer->Add(m_ProjectionChoice, @@ -307,9 +285,6 @@ m_topsizer->Add(blendModeSizer, 0, wxEXPAND | wxALL, 5); - - -#ifdef HasPANO13 m_projParamSizer = new wxStaticBoxSizer( new wxStaticBox(this, -1, _("Projection Parameters")), wxHORIZONTAL); @@ -344,8 +319,6 @@ // do not show projection param sizer m_topsizer->Show(m_projParamSizer, false, true); -#endif - wxConfigBase * config = wxConfigBase::Get(); // add a status bar @@ -467,7 +440,6 @@ m_ToolBar->EnableTool(XRCID("preview_straighten_pano_tool"), pano.getNrOfImages() > 0); // TODO: enable display of parameters and set their limits, if projection has some. -#ifdef HasPANO13 int nParam = opts.m_projFeatures.numberOfParameters; bool relayout = false; // if the projection format has changed @@ -508,7 +480,6 @@ if (relayout) { m_topsizer->Layout(); } -#endif SetStatusText(_("Center panorama with left mouse button, set horizon with right button"),0); SetStatusText(wxString::Format(wxT("%.1f x %.1f"), opts.getHFOV(), opts.getVFOV()),2); m_HFOVSlider->SetValue(roundi(opts.getHFOV())); @@ -774,7 +745,6 @@ } } opts.outputExposureValue = p; -#ifdef HasPANO13 } else { int nParam = opts.m_projFeatures.numberOfParameters; std::vector<double> para = opts.getProjectionParameters(); @@ -793,7 +763,6 @@ } } opts.setProjectionParameters(para); -#endif } GlobalCmdHist::getInstance().addCommand( new PT::SetPanoOptionsCmd( m_pano, opts ) @@ -816,7 +785,6 @@ DEBUG_DEBUG("VFOV changed (slider): " << e.GetInt()); opt.setVFOV(e.GetInt()); } else { -#ifdef HasPANO13 int nParam = opt.m_projFeatures.numberOfParameters; std::vector<double> para = opt.getProjectionParameters(); for (int i = 0; i < nParam; i++) { @@ -828,7 +796,6 @@ opt.setProjectionParameters(para); opt.setHFOV(m_HFOVSlider->GetValue()); opt.setVFOV(m_VFOVSlider->GetValue()); -#endif } GlobalCmdHist::getInstance().addCommand( Modified: hugin/trunk/src/hugin1/hugin/huginApp.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -47,7 +47,6 @@ #include "hugin/ImagesList.h" #include "hugin/PreviewPanel.h" #include "hugin/GLPreviewFrame.h" -#include "base_wx/PTWXDlg.h" #include "hugin/CommandHistory.h" #include "hugin/wxPanoCommand.h" @@ -116,9 +115,6 @@ wxSystemOptions::SetOption(wxT("mac.listctrl.always_use_generic"), 1); #endif - // register our custom pano tools dialog handlers - registerPTWXDlgFcn(); - // required by wxHtmlHelpController wxFileSystem::AddHandler(new wxZipFSHandler); Modified: hugin/trunk/src/hugin1/ptbatcher/ProjectListBox.cpp =================================================================== --- hugin/trunk/src/hugin1/ptbatcher/ProjectListBox.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin1/ptbatcher/ProjectListBox.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -278,7 +278,6 @@ case 5: if(project->status!=Project::MISSING) { -#ifdef HasPANO13 pano_projection_features proj; if (panoProjectionFeaturesQuery(project->options.getProjection(), &proj)) { @@ -286,7 +285,6 @@ return wxGetTranslation(str2); } else -#endif return _T(""); }; case 6: Modified: hugin/trunk/src/hugin_base/panodata/PanoramaOptions.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/PanoramaOptions.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_base/panodata/PanoramaOptions.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -149,12 +149,10 @@ void PanoramaOptions::setProjection(ProjectionFormat f) { -#ifdef HasPANO13 if ((int) f >= panoProjectionFormatCount()) { // reset to equirect if this projection is not known f = EQUIRECTANGULAR; } -#endif // only try to keep the FOV if calculations are implemented for // both projections if (fovCalcSupported(m_projectionFormat) && fovCalcSupported(f)) @@ -167,11 +165,8 @@ double vfov = std::min(getVFOV(), copy.getMaxVFOV()); setHFOV(hfov, false); setVFOV(vfov); -#ifdef HasPANO13 panoProjectionFeaturesQuery(f, &m_projFeatures); -#endif m_projectionFormat = f; -#ifdef HasPANO13 m_projectionParams.resize(m_projFeatures.numberOfParameters); if (m_projFeatures.numberOfParameters) { if (f == ALBERS_EQUAL_AREA_CONIC) { @@ -187,12 +182,10 @@ m_projectionParams[0] = 60; }; } -#endif setHFOV(hfov, false); setVFOV(vfov); } else { m_projectionFormat = f; -#ifdef HasPANO13 panoProjectionFeaturesQuery(f, &m_projFeatures); m_projectionParams.resize(m_projFeatures.numberOfParameters); if (m_projFeatures.numberOfParameters) { @@ -209,7 +202,6 @@ m_projectionParams[0] = 60; }; } -#endif double hfov = std::min(getHFOV(), getMaxHFOV()); setHFOV(hfov, false); } @@ -218,7 +210,6 @@ void PanoramaOptions::setProjectionParameters(const std::vector<double> & params) { -#ifdef HasPANO13 assert(m_projFeatures.numberOfParameters == (int) params.size()); // check if the parameters are good. if (m_projFeatures.numberOfParameters == (int) params.size()) { @@ -233,7 +224,6 @@ } } } -#endif } bool PanoramaOptions::fovCalcSupported(ProjectionFormat f) const @@ -446,7 +436,6 @@ double PanoramaOptions::getMaxHFOV() const { -#ifdef HasPANO13 double angle; pano_projection_features pfeat; if (panoProjectionFeaturesQuery((int)m_projectionFormat, &pfeat)) { @@ -470,62 +459,16 @@ } else { return 360; } -#else - switch (m_projectionFormat) - { - case RECTILINEAR: - case TRANSVERSE_MERCATOR: - return 175; -// case PANINI: -// case EQUI_PANINI: -// return 220; - case STEREOGRAPHIC: - return 355; - case CYLINDRICAL: - case EQUIRECTANGULAR: - case FULL_FRAME_FISHEYE: - case MERCATOR: - case SINUSOIDAL: - case LAMBERT: - case LAMBERT_AZIMUTHAL: - case ARCHITECTURAL: -// case ORTHOGRAPHIC: -// case EQUISOLID: - default: - return 360; - } -#endif } double PanoramaOptions::getMaxVFOV() const { -#ifdef HasPANO13 pano_projection_features pfeat; if (panoProjectionFeaturesQuery((int) m_projectionFormat, &pfeat)) { return pfeat.maxVFOV; } else { return 180; } -#else - switch (m_projectionFormat) - { - case RECTILINEAR: - case CYLINDRICAL: - case MERCATOR: - return 175; - default: - case EQUIRECTANGULAR: - case LAMBERT: - case SINUSOIDAL: - return 180; - case STEREOGRAPHIC: - return 355; - case FULL_FRAME_FISHEYE: - case TRANSVERSE_MERCATOR: - case LAMBERT_AZIMUTHAL: - case ARCHITECTURAL: - } -#endif } DestPanoImage PanoramaOptions::getDestImage() const Modified: hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h =================================================================== --- hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2009-09-10 04:23:50 UTC (rev 4357) @@ -34,10 +34,6 @@ //#include <math.h> #include <vigra/diff2d.hxx> - - -#if 1 -#ifdef HasPANO13 #include <vigra/windows.h> extern "C" { @@ -73,9 +69,7 @@ #endif } -#endif -#endif // //#include "PT/PanoImage.h" @@ -195,9 +189,7 @@ virtual void reset() { m_projectionFormat = EQUIRECTANGULAR; -#ifdef HasPANO13 panoProjectionFeaturesQuery(m_projectionFormat, &m_projFeatures); -#endif m_hfov = 360; m_size = vigra::Size2D(3000, 1500); m_roi = vigra::Rect2D(m_size); @@ -405,9 +397,7 @@ // choose pixel type for output images. std::string outputPixelType; - #ifdef HasPANO13 pano_projection_features m_projFeatures; - #endif private: static const std::string fileformatNames[]; Modified: hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp =================================================================== --- hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -539,7 +539,6 @@ // DEBUG_FATAL("Out of memory"); // } image.data = 0; -#ifdef HasPANO13 pano_projection_features projd; if (panoProjectionFeaturesQuery((int) format, &projd)) { image.format = projd.internalFormat; @@ -553,59 +552,6 @@ image.formatParam[i] = projParams[i]; DEBUG_DEBUG("projection parameter " << i << ": " << image.formatParam[i]); } -#else - switch (format) { - case PanoramaOptions::RECTILINEAR: - image.format = _rectilinear; - break; - case PanoramaOptions::CYLINDRICAL: - image.format= _panorama; - break; - case PanoramaOptions::EQUIRECTANGULAR: - image.format = _equirectangular; - break; - case PanoramaOptions::FULL_FRAME_FISHEYE: - image.format = _fisheye_ff; - break; - case PanoramaOptions::STEREOGRAPHIC: - image.format = _stereographic; - break; - case PanoramaOptions::MERCATOR: - image.format = _mercator; - break; - case PanoramaOptions::TRANSVERSE_MERCATOR: - image.format = _trans_mercator; - break; - case PanoramaOptions::SINUSOIDAL: - image.format = _sinusoidal; - break; -#ifdef HasPANO13 - case PanoramaOptions::LAMBERT: - image.format = _lambert; - break; - case PanoramaOptions::LAMBERT_AZIMUTHAL: - image.format = _lambertazimuthal; - break; - case PanoramaOptions::PANINI: - image.format = _panini; - break; - case PanoramaOptions::ARCHITECTURAL: - image.format = _architectural; - break; - case PanoramaOptions::ORTHOGRAPHIC: - image.format = _ortographic; - break; - case PanoramaOptions::EQUISOLID: - image.format = _equisolid; - break; - case PanoramaOptions::EQUI_PANINI: - image.format = _equi_panini; - break; -#endif - default: - PrintError("unsupported projection"); - } -#endif image.hfov = destHFOV; } Modified: hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h =================================================================== --- hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h 2009-09-10 04:23:50 UTC (rev 4357) @@ -63,24 +63,15 @@ #undef __INTEL__ #endif -#ifdef HasPANO13 #include <pano13/panorama.h> #include <pano13/filter.h> -#else -#include <pano12/panorama.h> -#include <pano12/filter.h> -#endif #ifdef __INTELMEMO__ #define __INTEL__ #undef __INTELMEMO__ #endif -#ifdef HasPANO13 #include <pano13/filter.h> -#else -#include <pano12/filter.h> -#endif // somehow these are still set after panorama.h has been included #undef DIFFERENCE Modified: hugin/trunk/src/hugin_base/panotools/PanoToolsOptimizerWrapper.cpp =================================================================== --- hugin/trunk/src/hugin_base/panotools/PanoToolsOptimizerWrapper.cpp 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_base/panotools/PanoToolsOptimizerWrapper.cpp 2009-09-10 04:23:50 UTC (rev 4357) @@ -54,9 +54,7 @@ // missing prototype in filter.h extern "C" { int CheckParams( AlignInfo *g ); -#ifdef HasPANO13 void setFcnPanoHuberSigma(double sigma); -#endif } //------------------------------------------------------------------------------ @@ -133,12 +131,10 @@ OptInfo opt; AlignInfo ainf; -#ifdef HasPANO13 // work around a small bug in libpano13 that does not // enforce the m0 default in the m line, if optimisation // with m2 or so have been made before setFcnPanoHuberSigma(0); -#endif if (ParseScript( script, &ainf ) == 0) { Modified: hugin/trunk/src/hugin_config.h.in =================================================================== --- hugin/trunk/src/hugin_config.h.in 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_config.h.in 2009-09-10 04:23:50 UTC (rev 4357) @@ -61,9 +61,6 @@ /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H -/* Define to 1 if you have the <pano12/queryfeature.h> header file. */ -#undef HAVE_PANO12_QUERYFEATURE_H - /* Define to 1 if you have the <pano13/queryfeature.h> header file. */ #undef HAVE_PANO13_QUERYFEATURE_H Modified: hugin/trunk/src/hugin_config.h.in.cmake =================================================================== --- hugin/trunk/src/hugin_config.h.in.cmake 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_config.h.in.cmake 2009-09-10 04:23:50 UTC (rev 4357) @@ -1,8 +1,5 @@ #ifndef __CONFIG_H__ -/* Define to 1 if you have the <pano12/queryfeature.h> header file. */ -#define HAVE_PANO12_QUERYFEATURE_H 1 - /* various libraries. For compatability with the old source code * most cmake variables are defined under a second name as well */ @@ -34,14 +31,11 @@ /* Define if you have Panotools library (pano13) */ #cmakedefine TLALLI_FOUND 1 #cmakedefine PANO13_FOUND 1 -#cmakedefine PANO12_FOUND 1 #ifdef TLALLI_FOUND #define HasTLALLI 1 #elif defined PANO13_FOUND #define HasPANO13 1 -#elif defined PANO12_FOUND -#define HasPANO12 1 #endif /* locate of the xrc files, as defined during configuration */ Modified: hugin/trunk/src/hugin_config_msvc.h =================================================================== --- hugin/trunk/src/hugin_config_msvc.h 2009-09-10 00:20:57 UTC (rev 4356) +++ hugin/trunk/src/hugin_config_msvc.h 2009-09-10 04:23:50 UTC (rev 4357) @@ -36,9 +36,6 @@ /* Define to 1 if you have the <memory.h> header file. */ #define HAVE_MEMORY_H 1 -/* Define to 1 if you have the <pano12/queryfeature.h> header file. */ -#define HAVE_PANO12_QUERYFEATURE_H 1 - /* Define to 1 if you have the <stdint.h> header file. */ //#define HAVE_STDINT_H 1 @@ -100,4 +97,4 @@ #define STDC_HEADERS 1 // build against static glew libraries, which is good for Windows -#define GLEW_STATIC \ No newline at end of file +#define GLEW_STATIC This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-09-10 20:57:45
|
Revision: 4365 http://hugin.svn.sourceforge.net/hugin/?rev=4365&view=rev Author: yuv Date: 2009-09-10 20:57:38 +0000 (Thu, 10 Sep 2009) Log Message: ----------- parametrized location of man pages (idea from Vasil Dimov) Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/doc/CMakeLists.txt Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-09-10 16:24:24 UTC (rev 4364) +++ hugin/trunk/CMakeLists.txt 2009-09-10 20:57:38 UTC (rev 4365) @@ -258,6 +258,15 @@ SET(HUGINDATADIR share/hugin) SET(DATADIR share) SET(BINDIR bin) + +IF("$ENV{MANDIR}") + SET (MANDIR "$ENV{MANDIR}") +ELSEIF(CMAKE_SYSTEM_NAME=="FreeBSD") + SET (MANDIR "man") +ELSE("$ENV{MANDIR}") + SET (MANDIR "share/man") +ENDIF("$ENV{MANDIR}") + SET(LOCALEDIR share/locale) SET(ICONDIR share/icons) SET(LINKDIR share/applications) Modified: hugin/trunk/doc/CMakeLists.txt =================================================================== --- hugin/trunk/doc/CMakeLists.txt 2009-09-10 16:24:24 UTC (rev 4364) +++ hugin/trunk/doc/CMakeLists.txt 2009-09-10 20:57:38 UTC (rev 4365) @@ -3,6 +3,6 @@ INSTALL(FILES fulla.html DESTINATION doc) INSTALL(FILES nona.txt DESTINATION doc) ELSE (WIN32) -INSTALL(FILES align_image_stack.1 autooptimiser.1 celeste_standalone.1 fulla.1 hugin.1 hugin_hdrmerge.1 hugin_stitch_project.1 nona.1 nona_gui.1 PTBatcherGUI.1 pto2mk.1 tca_correct.1 vig_optimize.1 DESTINATION share/man/man1) +INSTALL(FILES align_image_stack.1 autooptimiser.1 celeste_standalone.1 fulla.1 hugin.1 hugin_hdrmerge.1 hugin_stitch_project.1 nona.1 nona_gui.1 PTBatcherGUI.1 pto2mk.1 tca_correct.1 vig_optimize.1 DESTINATION ${MANDIR}/man1) ENDIF(WIN32) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-09-11 04:49:18
|
Revision: 4369 http://hugin.svn.sourceforge.net/hugin/?rev=4369&view=rev Author: yuv Date: 2009-09-11 04:49:08 +0000 (Fri, 11 Sep 2009) Log Message: ----------- support for systems that don't have log2 (e.g. FreeBSD) Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/hugin_config.h.in.cmake Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-09-10 21:05:07 UTC (rev 4368) +++ hugin/trunk/CMakeLists.txt 2009-09-11 04:49:08 UTC (rev 4369) @@ -68,6 +68,12 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/foreign/vigra ) include_directories( ${CMAKE_SOURCE_DIR}/src/celeste ) +# this function is not available on some systems, notably FreeBSD +include(CheckFunctionExists) +set(CMAKE_REQUIRED_LIBRARIES -lm) +check_function_exists(log2 HAVE_LOG2) +message("LOG2 ${HAVE_LOG2}") + # # find dependencies # Modified: hugin/trunk/src/hugin_config.h.in.cmake =================================================================== --- hugin/trunk/src/hugin_config.h.in.cmake 2009-09-10 21:05:07 UTC (rev 4368) +++ hugin/trunk/src/hugin_config.h.in.cmake 2009-09-11 04:49:08 UTC (rev 4369) @@ -38,6 +38,12 @@ #define HasPANO13 1 #endif +/* Define if you have log2 function */ +#cmakedefine HAVE_LOG2 0 +#ifndef HAVE_LOG2 +#define log2(x) (log(x) / log(2)) +#endif + /* locate of the xrc files, as defined during configuration */ #define INSTALL_LOCALE_DIR "${INSTALL_LOCALE_DIR}" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-09-15 15:45:59
|
Revision: 4428 http://hugin.svn.sourceforge.net/hugin/?rev=4428&view=rev Author: yuv Date: 2009-09-15 15:45:47 +0000 (Tue, 15 Sep 2009) Log Message: ----------- simplify log2 fix for FreeBSD and Windows Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/hugin_base/hugin_math/hugin_math.h hugin/trunk/src/hugin_config.h.in.cmake Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-09-15 13:55:22 UTC (rev 4427) +++ hugin/trunk/CMakeLists.txt 2009-09-15 15:45:47 UTC (rev 4428) @@ -68,16 +68,11 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/foreign/vigra ) include_directories( ${CMAKE_SOURCE_DIR}/src/celeste ) -# this function is not available on some systems, notably FreeBSD -if(WIN32) -set(HAVE_LOG2 1) -# function log2 for win is declared in hugin_math -ELSE(WIN32) +# this function is not available on some systems, notably FreeBSD and Windows include(CheckFunctionExists) set(CMAKE_REQUIRED_LIBRARIES -lm) check_function_exists(log2 HAVE_LOG2) message("LOG2 ${HAVE_LOG2}") -ENDIF(WIN32) # # find dependencies Modified: hugin/trunk/src/hugin_base/hugin_math/hugin_math.h =================================================================== --- hugin/trunk/src/hugin_base/hugin_math/hugin_math.h 2009-09-15 13:55:22 UTC (rev 4427) +++ hugin/trunk/src/hugin_base/hugin_math/hugin_math.h 2009-09-15 15:45:47 UTC (rev 4428) @@ -44,11 +44,21 @@ #define RAD_TO_DEG( x ) ( (x) * 360.0 / ( 2.0 * PI ) ) -#ifdef _MSC_VER +#ifndef HAVE_LOG2 + +// #ifdef _MSC_VER inline double log2(double x) { return log(x)/log(2.0); } + +// #else +// FreeBSD downstream patch used to implement it as define +// check if the +// #define log2(x) (log(x) / log(2)) + +// #endif + #endif Modified: hugin/trunk/src/hugin_config.h.in.cmake =================================================================== --- hugin/trunk/src/hugin_config.h.in.cmake 2009-09-15 13:55:22 UTC (rev 4427) +++ hugin/trunk/src/hugin_config.h.in.cmake 2009-09-15 15:45:47 UTC (rev 4428) @@ -40,9 +40,6 @@ /* Define if you have log2 function */ #cmakedefine HAVE_LOG2 0 -#ifndef HAVE_LOG2 -#define log2(x) (log(x) / log(2)) -#endif /* locate of the xrc files, as defined during configuration */ #define INSTALL_LOCALE_DIR "${INSTALL_LOCALE_DIR}" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tm...@us...> - 2009-09-18 05:45:44
|
Revision: 4442 http://hugin.svn.sourceforge.net/hugin/?rev=4442&view=rev Author: tmodes Date: 2009-09-18 05:45:35 +0000 (Fri, 18 Sep 2009) Log Message: ----------- Housekeeping Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp hugin/trunk/src/hugin1/base_wx/PTWXDlg.h Removed Paths: ------------- hugin/trunk/CMakeModules/FindPANO12.cmake Property Changed: ---------------- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp hugin/trunk/src/hugin1/base_wx/PTWXDlg.h Modified: hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2009-09-18 00:57:56 UTC (rev 4441) +++ hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2009-09-18 05:45:35 UTC (rev 4442) @@ -6,7 +6,7 @@ * * @author Pablo d'Angelo <pab...@we...> * - * $Id: PTWXDlg.cpp 3356 2008-08-23 22:24:30Z gpatters1 $ + * $Id$ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public Property changes on: hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp ___________________________________________________________________ Added: svn:keywords + Id Modified: hugin/trunk/src/hugin1/base_wx/PTWXDlg.h =================================================================== --- hugin/trunk/src/hugin1/base_wx/PTWXDlg.h 2009-09-18 00:57:56 UTC (rev 4441) +++ hugin/trunk/src/hugin1/base_wx/PTWXDlg.h 2009-09-18 05:45:35 UTC (rev 4442) @@ -3,7 +3,7 @@ * * @author Pablo d'Angelo <pab...@we...> * - * $Id: PTWXDlg.h 3356 2008-08-23 22:24:30Z gpatters1 $ + * $Id$ * * This is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public Property changes on: hugin/trunk/src/hugin1/base_wx/PTWXDlg.h ___________________________________________________________________ Added: svn:keywords + Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <st...@us...> - 2009-10-01 17:28:22
|
Revision: 4536 http://hugin.svn.sourceforge.net/hugin/?rev=4536&view=rev Author: stativ Date: 2009-10-01 17:28:14 +0000 (Thu, 01 Oct 2009) Log Message: ----------- Merged gsoc2009_deghosting branch. Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/deghosting/CMakeLists.txt hugin/trunk/src/foreign/getopt/src/getopt.c hugin/trunk/src/tools/CMakeLists.txt Added Paths: ----------- hugin/trunk/src/deghosting/algtinyvector.h hugin/trunk/src/deghosting/deghosting.cpp hugin/trunk/src/deghosting/deghosting.h hugin/trunk/src/deghosting/deghosting_mask.cpp hugin/trunk/src/deghosting/khan.h hugin/trunk/src/deghosting/support.h hugin/trunk/src/deghosting/threshold.h hugin/trunk/src/foreign/vigra/vigra/cachedfileimage.hxx hugin/trunk/src/tools/hugin_hdrmerge.cpp Removed Paths: ------------- hugin/trunk/src/deghosting/README.txt hugin/trunk/src/deghosting/hugin_hdrmerge.cpp hugin/trunk/src/deghosting/jbu.cpp hugin/trunk/src/deghosting/jbu.h hugin/trunk/src/deghosting/khan.cpp hugin/trunk/src/deghosting/khan.h hugin/trunk/src/deghosting/khanSupport.cpp Property Changed: ---------------- hugin/trunk/ hugin/trunk/src/deghosting/ Property changes on: hugin/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /hugin/branches/gsoc2008_batch_processing:3081-3398 + /hugin/branches/gsoc2008_batch_processing:3081-3398 /hugin/branches/gsoc2009_deghosting:3873-4533 Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-10-01 16:23:48 UTC (rev 4535) +++ hugin/trunk/CMakeLists.txt 2009-10-01 17:28:14 UTC (rev 4536) @@ -427,6 +427,7 @@ "/tools/align_image_stack$" "/tools/tca_correct$" "/tools/pto2mk$" +"/tools/hugin_hdrmerge$" "/ptbatcher/PTBatcher$" "/ptbatcher/PTBatcherGUI$" "/hugin_base/test/open_file$" @@ -437,7 +438,7 @@ "/lens_calibrate/calibrate_lens$" "/nona_gui/nona_gui$" "/stitch_project/hugin_stitch_project$" -"/deghosting/hugin_hdrmerge$" +"/deghosting/deghosting_mask$" "/build/" "/CVS/" "/cmake_install.cmake$" Property changes on: hugin/trunk/src/deghosting ___________________________________________________________________ Added: svn:ignore + *CMakeFiles Modified: hugin/trunk/src/deghosting/CMakeLists.txt =================================================================== --- hugin/trunk/src/deghosting/CMakeLists.txt 2009-10-01 16:23:48 UTC (rev 4535) +++ hugin/trunk/src/deghosting/CMakeLists.txt 2009-10-01 17:28:14 UTC (rev 4536) @@ -1,7 +1,5 @@ -# various command line utilities -add_executable(hugin_hdrmerge hugin_hdrmerge.cpp khan.cpp jbu.cpp khanSupport.cpp) -target_link_libraries(hugin_hdrmerge ${common_libs} ${image_libs}) +add_executable(deghosting_mask deghosting_mask.cpp deghosting.cpp) +target_link_libraries(deghosting_mask ${common_libs} ${image_libs}) -install(TARGETS hugin_hdrmerge DESTINATION ${BINDIR}) - +install(TARGETS deghosting_mask DESTINATION ${BINDIR}) Deleted: hugin/trunk/src/deghosting/README.txt =================================================================== --- hugin/trunk/src/deghosting/README.txt 2009-10-01 16:23:48 UTC (rev 4535) +++ hugin/trunk/src/deghosting/README.txt 2009-10-01 17:28:14 UTC (rev 4536) @@ -1,151 +0,0 @@ -------------------------- -TABLE OF CONTENTS -------------------------- - -1. Introduction -2. Usage - a. options -3. Helpful Tips - a. deghosting small motion or crowded scenes - b. improving deghosted results - c. reducing noise - d. checking progress - e. large images and images that mostly overlap - -------------------------- -INTRODUCTION -------------------------- - -This program is the end product of Google's Summer of Code 2007. The up-to-date -version is included with the hugin program. - -This program is a command line tool for creating and deghosting HDR panoramas. -This program requires a set of OpenEXR images that are geometrically and -radiometrically aligned, paired with a set of grayscale images that store the -original radiance of each image. The program allows three methods to combine -the images. This readme will focus on the Khan (default) algorithm since the -other two are for testing purposes. - -The Khan algorithm reduces ghosts in the image by assuming that at any pixel, -most images represent the background, and that if a pixel's neighbors are -in the background, then the pixel is most likely also in the background. The -algorithm deghosts by aiming to use the background for the final image. - -------------------------- -USAGE -------------------------- -Command: -hugin_hdrmerge [options] -o OUTPUT_FILE <INPUT_FILES> - -OUTPUT_FILE is the path to the output file, which must be OpenEXR (.exr) format. -INPUT_FILES consist of aligned OpenEXR (.exr) images and an equal number of -grayscale (e.g. pgm) images that store each input's radiance. The grayscale -images must be listed in the same order as the OpenEXR images. - -==== A. OPTIONS ==== - --m method: Specify which method to use to combine images. Can be avg, avg_slow, - or khan (default). This readme will only focus on options valid to - all and khan. - - Options that apply to all: -v, -h - - Options that apply with avg: -c - - Options that apply with khan: -a -e, -i, -l, -s - --a calc: Specify which calculation should be performed in addtion to or in - conjunction with the basic Khan algorithm. Can be one or more of - b, c, d, h, m, s, or u. - b: After all iterations, distribute the weights logarithmically - c: After all iterations, choose the pixel with the largest weight - in each layer instead of blending all layers according to weight - d: Same as c, but only when the smallest weight is within 10% of - the largest weight - h: When calculating initial weights, favor a high signal to noise - ratio (radiance closer to 220/255) - i: ignore alpha channels of input files - --e : Export calculated initial weights to source image folder under the name - <source_image>_iw.jpg - --i num: Specify the number of iterations to execute. The more iterations, the - better the result may be, but each iteration takes a long time. Default - is 1 iteration. - --l: Import previously exported weights from source image folder under the name - <source_image>_iw.jpg - --s op: Specify whether to save intermediary files for debugging. Can be one or - more of a, r, s, or w. - a: save all files. "-s a" is Equivalent to "-s rsw" - r: resulting HDR images from each iteration in OpenExr format - s: source images and alpha images - w: weights calculated for each input at each iteration - -------------------------- -HELPFUL TIPS -------------------------- - -For most images, running 9 to 11 iterations of the algorithm should produce -a good result. Here are some tips to improve results and decrease run time. - -==== A. DEGHOSTING SMALL MOTION OR CROWDED SCENES ==== - -The Khan algorithm doesn't produce very good result when used on scenes where -the background isn't presented in a majority of the sources. Some examples are -scenes with water ripples, small tree branch movements, and crowded places. The -fact that a 0 in the initial weight results in a 0 in final weight can be taken -advantage of to solve this problem. - -Method A: modifying initial weights -1. run the program with -e and -l options -2. when a message that initial weights have been exported appears on screen, - go to the source images' folder and open all files under the name - <source_image_name>_iw.jpg -3. choose an image where the area to be deghosted is closest to the desired - result (the next step is going to make sure that only this image is - considered for the final result of this area) -4. in all *other* images, color that area black and save the images -5. enter 'c' on the command line to load the files that were modified - -Method B: modifying input radiance images -1. open all grayscale images that indicate original radiance values -2. color areas with undesirable objects black so that they are not considered - when merging the images -3. run the program as usual - -==== B. IMPROVING DEGHOSTED RESULTS ==== - -If, after many iterations, there is still traces of ghosting, try running -the program with the option -b , -d, or -c individually. With these options, -more definitive results can be produced in less iterations. - -==== C. REDUCING NOISE ==== - -This program can also be used to combine input images that have a lot of noise. -Just run the program without using -c or -d. - -==== D. CHECKING PROGRESS ==== - -There are several ways to be informed of how far the program is at processing -the images. - -Method A: displaying progress -run the program with "-v", or "-v -v" for large/many images - -Method B: displaying results -run the program with "-s r" to see results for each iteration stored at the -folder where the program is run, so if it doesn't look right, -you don't have to wait until the end to find out. - -==== E. LARGE IMAGES AND IMAGES THAT MOSTLY OVERLAP ==== - -To save memory when processing large images or images with a lot of overlap, -run the program with the -a i option to discard the alpha channel information -during processing. Discarding the alpha channel causes the program to consider -all the pixels in the image - valid or not, but if the input images mostly -overlap, then there isn't a lot of varying opacity from image to image. The -alpha channel takes almost as much memory as the input images to store, so, -especially when input images are extremely large, discarding the alpha channel -saves a lot of memory. - -------------------------- -Updated: August 20, 2007 Copied: hugin/trunk/src/deghosting/algtinyvector.h (from rev 4533, hugin/branches/gsoc2009_deghosting/src/deghosting/algtinyvector.h) =================================================================== --- hugin/trunk/src/deghosting/algtinyvector.h (rev 0) +++ hugin/trunk/src/deghosting/algtinyvector.h 2009-10-01 17:28:14 UTC (rev 4536) @@ -0,0 +1,168 @@ + +/** + * Implementation of fast vector type with support of linear algebra operations + * Copyright (C) 2009 Lukáš Jirkovský <l.j...@gm...> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include <vigra/tinyvector.hxx> +#include <vigra/numerictraits.hxx> + +namespace vigra { + +/** Fixed size vector with scalar multiplication and element-wise substraction and addition + */ +template <class T, int SIZE> +class AlgTinyVector +{ + public: + AlgTinyVector(const AlgTinyVector<T,SIZE> & t) { + for (unsigned int i = 0; i < SIZE; ++i) { + content[i] = t[i]; + } + } + + AlgTinyVector(T t) { + for (unsigned int i = 0; i < SIZE; ++i) { + content[i] = t; + } + } + + AlgTinyVector() { + AlgTinyVector(0); + } + + const T operator[](int i) const { + return content[i]; + } + + T& operator[](int i) { + return content[i]; + } + + const T operator*(const AlgTinyVector<T,SIZE> & t) const { + T retVal = 0; + for (unsigned int i = 0; i < SIZE; ++i) { + retVal += t[i] * content[i]; + } + return retVal; + } + + const AlgTinyVector operator*(const int t) const { + AlgTinyVector<T,SIZE> retVal; + for (unsigned int i = 0; i < SIZE; ++i) { + retVal[i] = t * content[i]; + } + return retVal; + } + + const AlgTinyVector operator/(const int t) const { + AlgTinyVector<T,SIZE> retVal; + for (unsigned int i = 0; i < SIZE; ++i) { + retVal[i] = content[i] / t; + } + return retVal; + } + + const AlgTinyVector operator-(const AlgTinyVector<T,SIZE> & t) const { + AlgTinyVector<T,SIZE> retVal; + for (unsigned int i = 0; i < SIZE; ++i) { + retVal[i] = t[i] - content[i]; + } + return retVal; + } + + const AlgTinyVector operator+(const AlgTinyVector<T,SIZE> & t) const { + AlgTinyVector<T,SIZE> retVal; + for (unsigned int i = 0; i < SIZE; ++i) { + retVal[i] = t[i] + content[i]; + } + return retVal; + } + + AlgTinyVector & operator=(const AlgTinyVector<T,SIZE> & t) { + if (this == &t) + return *this; + for (unsigned int i = 0; i < SIZE; ++i) { + content[i] = t[i]; + } + return *this; + } + + AlgTinyVector & operator=(const TinyVector<T,SIZE> & t) { + for (unsigned int i = 0; i < SIZE; ++i) { + content[i] = t[i]; + } + return *this; + } + + private: + T content[SIZE]; +}; + +template <class T, int SIZE> +struct NumericTraits<AlgTinyVector<T, SIZE> > +{ + typedef AlgTinyVector<T, SIZE> Type; + typedef AlgTinyVector<typename NumericTraits<T>::Promote, SIZE> Promote; + typedef AlgTinyVector<typename NumericTraits<T>::RealPromote, SIZE> RealPromote; + typedef AlgTinyVector<typename NumericTraits<T>::ComplexPromote, SIZE> ComplexPromote; + typedef T ValueType; + + typedef typename NumericTraits<T>::isIntegral isIntegral; + typedef VigraFalseType isScalar; + typedef typename NumericTraits<T>::isSigned isSigned; + typedef VigraFalseType isOrdered; + typedef VigraFalseType isComplex; + + static AlgTinyVector<T, SIZE> zero() { + return AlgTinyVector<T, SIZE>(NumericTraits<T>::zero()); + } + static AlgTinyVector<T, SIZE> one() { + return AlgTinyVector<T, SIZE>(NumericTraits<T>::one()); + } + static AlgTinyVector<T, SIZE> nonZero() { + return AlgTinyVector<T, SIZE>(NumericTraits<T>::nonZero()); + } + + static Promote toPromote(const AlgTinyVector<T,SIZE> & v) + { + return Promote(v); + } + + static RealPromote toRealPromote(const AlgTinyVector<T,SIZE> & v) + { + return RealPromote(v); + } + + /*static AlgTinyVector<T, SIZE> + fromPromote(AlgTinyVector<typename NumericTraits<T>::Promote> const & v) + { + AlgTinyVector<T, SIZE> res; + return res; + } + + static TinyVector<T, SIZE> + fromRealPromote(AlgTinyVector<typename NumericTraits<T>::RealPromote> const & v) + { + TinyVector<T, SIZE> res(detail::dontInit()); + typedef typename detail::LoopType<SIZE>::type ltype; + ltype::fromRealPromote(res.begin(), v.begin()); + return res; + }*/ +}; + +} \ No newline at end of file Copied: hugin/trunk/src/deghosting/deghosting.cpp (from rev 4533, hugin/branches/gsoc2009_deghosting/src/deghosting/deghosting.cpp) =================================================================== --- hugin/trunk/src/deghosting/deghosting.cpp (rev 0) +++ hugin/trunk/src/deghosting/deghosting.cpp 2009-10-01 17:28:14 UTC (rev 4536) @@ -0,0 +1,74 @@ + +/** + * Implementation of basic routines for deghosting algorithms + * Copyright (C) 2009 Lukáš Jirkovský <l.j...@gm...> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include "deghosting.h" + +using namespace vigra; + +namespace deghosting { + + void Deghosting::loadImages(std::vector<std::string>& newInputFiles) throw(NoImages, BadDimensions) { + if (newInputFiles.empty()) + throw NoImages(); + const ImageImportInfo firstInfo = ImageImportInfo(newInputFiles[0].c_str()); + const int width = firstInfo.width(); + const int height = firstInfo.height(); + for (unsigned int i = 0; i< newInputFiles.size(); i++) { + ImageImportInfo tmpInfo = ImageImportInfo(newInputFiles[i].c_str()); + if ((width != tmpInfo.width()) || (height != tmpInfo.height())) + throw BadDimensions(); + inputFiles.push_back(tmpInfo); + } + } + + void Deghosting::loadImages(std::vector<vigra::ImageImportInfo>& newInputFiles) throw(NoImages, BadDimensions) { + if (newInputFiles.empty()) + throw NoImages(); + const int width = newInputFiles[0].width(); + const int height = newInputFiles[0].height(); + for (unsigned int i = 0; i< newInputFiles.size(); i++) { + if ((width != newInputFiles[i].width()) || (height != newInputFiles[i].height())) + throw BadDimensions(); + } + inputFiles = newInputFiles; + } + + void Deghosting::setFlags(const uint16_t newFlags) { + flags = newFlags; + } + + void Deghosting::setDebugFlags(const uint16_t newFlags) { + debugFlags = newFlags; + } + + void Deghosting::setIterationNum(const int newIterations) { + iterations = newIterations; + } + + void Deghosting::setCameraResponse(EMoR newResponse) { + response = newResponse; + } + + void Deghosting::setVerbosity(int newVerbosity) { + verbosity = newVerbosity; + } + +} + Copied: hugin/trunk/src/deghosting/deghosting.h (from rev 4533, hugin/branches/gsoc2009_deghosting/src/deghosting/deghosting.h) =================================================================== --- hugin/trunk/src/deghosting/deghosting.h (rev 0) +++ hugin/trunk/src/deghosting/deghosting.h 2009-10-01 17:28:14 UTC (rev 4536) @@ -0,0 +1,127 @@ + +/** + * Header file for base class for deghosting algorithms + * Copyright (C) 2009 Lukáš Jirkovský <l.j...@gm...> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef DEGHOSTING_H_ +#define DEGHOSTING_H_ + +#include <exception> +#include <vector> +#include <string> + +#ifdef _WIN32 + #include <boost/cstdint.hpp> + using namespace boost; +#else + #include <stdint.h> +#endif + +#include <boost/shared_ptr.hpp> +#include <vigra/stdimage.hxx> +#include <vigra/imageinfo.hxx> + +// define if you want to use image cache +#define DEGHOSTING_CACHE_IMAGES + +namespace deghosting { + + /** exception called when image dimensions differ + */ + class BadDimensions : public std::exception { + public: + BadDimensions() : std::exception() {}; + const char * what() { return "Input images must have the same dimensions"; } + }; + + /** exception called when there are no input images + */ + class NoImages : public std::exception { + public: + NoImages() : std::exception() {}; + const char * what() { return "You must specify images"; } + }; + + typedef boost::shared_ptr<vigra::BImage> BImagePtr; + typedef boost::shared_ptr<vigra::FImage> FImagePtr; + // type for camera response + typedef std::vector<float> EMoR; + + // constants for advanced modes + const uint16_t ADV_GAMMA = 1; + const uint16_t ADV_ONLYP = 2; + const uint16_t ADV_MULTIRES = 4; + + // constants for debug modes + const uint16_t SAVE_INITWEIGHTS = 1; + + class Deghosting + { + public: + Deghosting() {} + + /** create weight masks + * create weight masks for masking out ghosting regions + */ + virtual std::vector<FImagePtr> createWeightMasks() = 0; + + /** load images for processing + * @param inputFiles images to be processed + */ + virtual void loadImages(std::vector<std::string>& inputFiles) throw(NoImages, BadDimensions); + virtual void loadImages(std::vector<vigra::ImageImportInfo>& inputFiles) throw(NoImages, BadDimensions); + + /** set advanced flags + * Allows to change behavior of used algorithm + * @param flags one of the constants describing advanced mode + */ + virtual void setFlags(const uint16_t flags); + + /** set flags for debugging purposes + * @param debugFlags one of the constants describing action which should be done + */ + virtual void setDebugFlags(const uint16_t debugFlags); + + /** set number of iterations + */ + virtual void setIterationNum(const int iterations); + + /** set camera response function + * set camera response function in EMoR format + * @param response array of five floats representing response + */ + virtual void setCameraResponse(EMoR response); + + /** set verbosity level + * @param verbosity the higher the number is, the more verbose algorithm will be + */ + virtual void setVerbosity(int verbosity); + virtual ~Deghosting() {} + + protected: + std::vector<vigra::ImageImportInfo> inputFiles; + uint16_t flags; + uint16_t debugFlags; + int iterations; + EMoR response; + int verbosity; + }; + +} + +#endif /* DEGHOSTING_H_ */ Copied: hugin/trunk/src/deghosting/deghosting_mask.cpp (from rev 4533, hugin/branches/gsoc2009_deghosting/src/deghosting/deghosting_mask.cpp) =================================================================== --- hugin/trunk/src/deghosting/deghosting_mask.cpp (rev 0) +++ hugin/trunk/src/deghosting/deghosting_mask.cpp 2009-10-01 17:28:14 UTC (rev 4536) @@ -0,0 +1,395 @@ + +/** + * Tool for creating b/w alpha masks to eliminate ghosting artifacts + * Copyright (C) 2009 Lukáš Jirkovský <l.j...@gm...> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include <iostream> +#include <string> +#include <cstring> + +#include <hugin_config.h> +#include <hugin_version.h> +// for stripExtension +#include <hugin_utils/utils.h> +// for exportImage +#include <vigra_ext/impexalpha.hxx> + +#include "deghosting.h" +#include "support.h" +#include "threshold.h" + +// deghosting algorithms +#include "khan.h" + +#include <getopt.h> +#ifdef WIN32 + #define snprintf _snprintf +#endif + +using std::cout; +using std::cerr; +using std::endl; +using std::string; + +using namespace deghosting; + +// options for otherFlags +static uint16_t SAVE_GENWEIGHTS = 1; +static uint16_t OTHER_GRAY = 2; + +// globals containing settings +static int iterations = 1; +static double sigma = 30; +static uint16_t flags = ADV_ONLYP + ADV_MULTIRES; +static uint16_t otherFlags = 0; +static uint16_t otherThresholdFlags = 0; +static uint16_t debugFlags = 0; +static EMoR response(0.0f); +static int verbosity = 0; +static double thresholdLim = 150; +static double contrast = 1.3; + +/** function handling advanced options + */ +void parseOptions_advanced(char* optarg) { + for(char *c = optarg; *c; c++) { + switch(*c) { + case 'f': + otherFlags += OTHER_GRAY; + break; + case 'g': + flags += ADV_GAMMA; + break; + case 'm': + flags -= ADV_MULTIRES; + break; + case 't': + otherThresholdFlags += THRESHOLD_DONTCARE; + break; + case 'w': + flags -= ADV_ONLYP; + break; + default: + cerr<< "Error: unknown option" << endl; + exit(1); + } + } +} + +/** function handling save options + */ +void parseOptions_save(char* optarg) { + for(char *c = optarg; *c; c++) { + switch(*c) { + case 'i': + debugFlags += SAVE_INITWEIGHTS; + break; + case 'w': + otherFlags += SAVE_GENWEIGHTS; + break; + default: + cerr<< "Error: unknown option" << endl; + exit(1); + } + } +} + +static void usage() +{ + cerr << "deghosting_mask: creates mask for removing ghosting in images" << endl + << "deghosting_mask version " << DISPLAY_VERSION << endl + << endl + << "Usage: deghosting_mask [options] inputfile(s) " << endl + << " option are: " << endl + << " -o, --output=PREFIX prefix for output masks" << endl + << " -i, --iterations=ITER number of iterations, default is (ITER > 0)" << endl + << " default: 1" << endl + << " -s, --sigma=SIGMA standard deviation of Gaussian weighting" << endl + << " function (SIGMA > 0); default: " << sigma << endl + //<< " -r, --response=E:M:o:R use camera response specified in EMoR format" << endl + << " -t, --threshold=THRESH threshold; default: " << thresholdLim << endl + << " -c, --contrast=CONTR change constrast before applying threshold;" << endl + << " default: " << contrast << endl + << " -a, --advanced=SET advanced settings. Possible options are:" << endl + << " f use gray images for computation. It's about two times faster" << endl + << " but it usually returns worse results." << endl + << " You also have to change threshold to smaller value (around 100)" << endl + << " g use gamma 2.2 correction instead of logarithm if input images are HDR" << endl + << " m do not scale image, NOTE: slows down process" << endl + << " t use simple threshold, may result in holes in images" << endl + << " w compute \"complete\" weights, not only probabilities" << endl + << " -w, --save=SET advanced save settings" << endl + << " i save initial weigths" << endl + << " w save generated weigths" << endl + << " -b BLOCKSIZE image cache BLOCKSIZE in kilobytes; default: " << + (CachedFileImageDirector::v().getBlockSize() / 1024LL) << "KB" << endl + << " -m CACHESIZE set image CACHESIZE in megabytes; default: " << + (CachedFileImageDirector::v().getAllocation() / 1048576LL) << "MB" << endl + << " -h, --help display this help" << endl + << " -v, --verbose verbose, repeat for more verbose output" << endl; +} + +int main(int argc, char *argv[]) { + const char * optstring = "o:i:s:r:t:c:a:w:b:m:hv"; + opterr = 0; + int c; + + string outputPrefix = "weight"; + + enum optionArgumentKind { + NoArgument, + StringArgument, + DoubleArgument, + IntegerArgument, + ArrayArgument + }; + + enum optionId { + outputID, + iterationsID, + sigmaID, + responseID, + thresholdID, + constrastID, + advancedID, + saveID, + helpID, + verboseID + }; + + static struct option longOptions[] = { + {"output", 1, 0, StringArgument}, + {"iterations", 1, 0, IntegerArgument}, + {"sigma", 1, 0, DoubleArgument}, + {"response", 1, 0, ArrayArgument}, + {"threshold", 1, 0, DoubleArgument}, + {"contrast", 1, 0, DoubleArgument}, + {"advanced", 1, 0, StringArgument}, + {"save", 1, 0, StringArgument}, + {"help", 0, 0, NoArgument}, + {"verbose", 0, 0, NoArgument}, + {0, 0, 0, 0} + }; + + // TEST + // response for testing + response.resize(5); + response[0] = -3.59f; + response[1] = -0.93f; + response[2] = 0.11f; + response[3] = -0.22f; + response[4] = 0.34f; + + int optionIndex = 0; + + while ((c = getopt_long(argc, argv, optstring, longOptions, &optionIndex)) != -1) { + switch (c) { + case NoArgument: { + if (longOptions[optionIndex].flag != 0) break; + switch (optionIndex) { + case helpID: + usage(); + return 0; + case verboseID: + verbosity++; + break; + default: + cerr << "There's a problem with parsing options" << endl; + return 1; + } + break; + } + + case StringArgument: { + if (longOptions[optionIndex].flag != 0) break; + switch (optionIndex) { + case outputID: + outputPrefix = optarg; + break; + case advancedID: + parseOptions_advanced(optarg); + break; + case saveID: + parseOptions_save(optarg); + break; + default: + cerr << "There's a problem with parsing options" << endl; + return 1; + } + break; + } + + case IntegerArgument: { + if (longOptions[optionIndex].flag != 0) break; + switch (optionIndex) { + case iterationsID: + iterations = atoi(optarg); + break; + default: + cerr << "There's a problem with parsing options" << endl; + return 1; + } + break; + } + + case DoubleArgument: { + if (longOptions[optionIndex].flag != 0) break; + switch (optionIndex) { + case sigmaID: + sigma = atof(optarg); + break; + case thresholdID: + thresholdLim = atof(optarg); + break; + case constrastID: + contrast = atof(optarg); + break; + } + break; + } + + case ArrayArgument: { + if (longOptions[optionIndex].flag != 0) break; + switch (optionIndex) { + case responseID: + // TODO + break; + } + break; + } + + case 'o': + outputPrefix = optarg; + break; + case 'i': + iterations = atoi(optarg); + break; + case 's': + sigma = atof(optarg); + break; + case 'r': + // TODO + break; + case 't': + thresholdLim = atof(optarg); + break; + case 'c': + contrast = atof(optarg); + break; + case 'a': + parseOptions_advanced(optarg); + break; + case 'w': + parseOptions_save(optarg); + break; + case 'b': { + const int kilobytes = atoi(optarg); + if (kilobytes < 1) { + cerr << "cache block size must be 1 or more." << endl; + return 1; + } + CachedFileImageDirector::v().setBlockSize(static_cast<long long>(kilobytes) << 10); + break; + } + case 'm': { + const int megabytes = atoi(optarg); + if (megabytes < 1) { + cerr << "memory limit must be 1 or more." << endl; + return 1; + } + CachedFileImageDirector::v().setAllocation(static_cast<long long>(megabytes) << 20); + break; + } + case 'h': + usage(); + return 0; + case 'v': + verbosity++; + break; + } + } + + cout << endl; + + unsigned nFiles = argc - optind; + if (nFiles == 0) { + cerr << std::endl << "Error: at least three input images needed" << std::endl <<std::endl; + usage(); + return 1; + } else if (nFiles < 3) { + std::cout << std::endl << "Error: You have to specify at least three images." << std::endl; + return 1; + } + + // load all images + vector<string> inputFiles; + for (size_t i=optind; i < (size_t)argc; i++) + { + inputFiles.push_back(argv[i]); + } + + Deghosting* deghoster = NULL; + + try{ + vector<FImagePtr> weights; + if (otherFlags & OTHER_GRAY) { + Khan<float> khanDeghoster(inputFiles, flags, debugFlags, iterations, sigma, verbosity); + deghoster = &khanDeghoster; + weights = deghoster->createWeightMasks(); + } else { + Khan<RGBValue<float> > khanDeghoster(inputFiles, flags, debugFlags, iterations, sigma, verbosity); + deghoster = &khanDeghoster; + weights = deghoster->createWeightMasks(); + } + + //deghoster->setCameraResponse(response); + + // save weights + if (otherFlags & SAVE_GENWEIGHTS) { + for (unsigned int i=0; i<weights.size(); ++i) { + char tmpfn[100]; + snprintf(tmpfn, 99, "%s_%d.tif", outputPrefix.c_str(), i); + ImageExportInfo exWeights(tmpfn); + exportImage(srcImageRange(*weights[i]), exWeights.setPixelType("UINT8")); + } + } + + // apply contrast functor + for (unsigned int i=0; i < weights.size(); ++i) { + transformImage(srcImageRange(*(weights[i])), destImage(*(weights[i])), BrightnessContrastFunctor<FImage::PixelType>(1, contrast, 0, 255)); + } + + vector<BImagePtr> thresholded = threshold(weights, thresholdLim, otherThresholdFlags); + + // save masks with treshold applied + for (unsigned int i=0; i<weights.size(); ++i) { + char tmpfn[100]; + string fileName = hugin_utils::stripExtension(inputFiles[i]); + fileName = hugin_utils::stripPath(fileName); + snprintf(tmpfn, 99, "%s_mask.tif", fileName.c_str()); + ImageExportInfo exWeights(tmpfn); + exportImage(srcImageRange(*thresholded[i]), exWeights.setPixelType("UINT8")); + } + } catch (NoImages & e) { + cerr << e.what() << endl; + exit(1); + } catch (BadDimensions & e) { + cerr << e.what() << endl; + exit(1); + } +} Deleted: hugin/trunk/src/deghosting/hugin_hdrmerge.cpp =================================================================== --- hugin/trunk/src/deghosting/hugin_hdrmerge.cpp 2009-10-01 16:23:48 UTC (rev 4535) +++ hugin/trunk/src/deghosting/hugin_hdrmerge.cpp 2009-10-01 17:28:14 UTC (rev 4536) @@ -1,461 +0,0 @@ -// -*- c-basic-offset: 4 -*- - -/** @file hugin_hdrmerge.cpp - * - * @brief merge images - * - * @author Pablo d'Angelo <pab...@we...> - * - * $Id$ - * - * 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 software 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 software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include <hugin_config.h> -#include <hugin_version.h> - -#include <fstream> -#include <sstream> -#include <cmath> -#include <algorithm> - -#include <boost/shared_ptr.hpp> - -#include <vigra/error.hxx> -#include <vigra/functorexpression.hxx> -#include <vigra_impex/codecmanager.hxx> - -#include <hugin_utils/utils.h> - -#include <vigra_ext/impexalpha.hxx> -#include <vigra_ext/HDRUtils.h> -#include <vigra_ext/ReduceOpenEXR.h> - -//#include <PT/PTOptimise.h> - -#ifdef WIN32 - #include <getopt.h> -#else - #include <unistd.h> -#endif - -#include "khan.h" - -using namespace std; - -using namespace hugin_utils; -using namespace vigra; -using namespace vigra::functor; -using namespace vigra_ext; - -int g_verbose = 0; - - -// load all images and apply a weighted average merge, with -// special cases for completely over or underexposed pixels. -bool mergeWeightedAverage(vector<string> inputFiles, FRGBImage & output) -{ - // load all images into memory - vector<ImagePtr> images; - vector<BImagePtr> weightImages; - - for (size_t i=0; i < inputFiles.size(); i++) - { - ImagePtr img = ImagePtr(new ImageType()); - BImagePtr weight = BImagePtr(new BImage()); - - if (g_verbose > 0) { - std::cout << "Loading image: " << inputFiles[i] << std::endl; - } - vigra::ImageImportInfo info(inputFiles[i].c_str()); - img->resize(info.size()); - weight->resize(info.size()); - vigra::importImageAlpha(info, vigra::destImage(*img), destImage(*weight)); - images.push_back(img); - weightImages.push_back(weight); - } - - // ensure all images have the same size (cropped images not supported yet) - int width=images[0]->width(); - int height=images[0]->height(); - for (unsigned i=1; i < images.size(); i++) { - if (images[i]->width() != width || images[i]->height() != height) { - std::cerr << "Error: Input images need to be of the same size" << std::endl; - return false; - } - } - output.resize(width,height); - if (g_verbose > 0) { - std::cout << "Calculating weighted average " << std::endl; - } - // apply weighted average functor with - // heuristic to deal with pixels that are overexposed in all images - ReduceToHDRFunctor<ImageType::value_type> waverage; - - // loop over all pixels in the image (very low level access) - for (int y=0; y < height; y++) { - for (int x=0; x < width; x++) { - waverage.reset(); - // loop over all exposures - for (unsigned imgNr=0; imgNr < images.size(); imgNr++) { - // add pixel to weighted average - waverage( (*images[imgNr])(x,y), (*weightImages[imgNr])(x,y) ); - } - // get result - output(x,y) = waverage(); - } - } - return true; -} - -static void usage(const char * name) -{ - cerr << name << ": merge overlapping images" << std::endl - << std::endl - << "hugin_hdrmerge version " << DISPLAY_VERSION << std::endl - << std::endl - << "Usage: " << name << " [options] -o output.exr <input-files>" << std::endl - << "Valid options are:" << std::endl - << " -o prefix output file" << std::endl - << " -m mode merge mode, can be one of: avg, avg_slow, khan (default), if avg, no" << std::endl - << " -i, -s, or -d options apply" << std::endl - << " -i iter number of iterations to execute (default is 1)" << std::endl - << " -c Only consider pixels that are defined in all images (avg mode only)" << std::endl - << " -s file debug files to save each iteration, can be one of:" << std::endl - << " a - all debug files (can only be used alone)" << std::endl - << " w - calculated weights from each iteration" << std::endl - << " r - result image from each iteration" << std::endl - << " s - source images before processing" << std::endl - << " if verbose >= 3, all debug files are output unless specified" << std::endl - << " -a calcs apply one or more advanced caculations, can be one or more of:" << std::endl - << " b - biasing weights logarithmically" << std::endl - << " c - choose pixels with heighest weight instead of averaging" << std::endl - << " (overrides options -a b and -a d)" << endl - << " d - choose a pixel with the heighest weight instead of" << endl - << " averaging when all pixel weights are within 10% of eachother" << endl - << " h - favor a high signal to noise ratio" << std::endl - << " i - ignore alpha channel" << endl - << " n - do not use luminance images for estimating initial weights" << endl - << " (bases weights on input images itself)" << endl -/* << " m - multi-scale calculation of weights" << std::endl - << " s - favor choosing from the same image" << std::endl - << " u - use joint bilateral upscaling" << std::endl - << " ex: -d hms" << std::endl -*/ << " -e export each initial weight to <input_file_paths>_iw.<ext>" << std::endl - << " -l load a previously exported initial weight with respect " << endl - << " to the input file names" << std::endl - << " NOTE: if both -e and -l options are on, the program will " << endl - << " calculate and save the initial weights, then wait " << endl - << " until user indicates that it can continue by loading " << endl - << " the previously saved weights" << endl - << " -v Verbose, print progress messages, repeat for" << std::endl - << " even more verbose output" << std::endl - << " -h Display help (this text)" << std::endl - << std::endl; -} - - -int main(int argc, char *argv[]) -{ - - // parse arguments - const char * optstring = "chvo:m:i:s:a:el"; - int c; - - opterr = 0; - - g_verbose = 0; - std::string outputFile = "merged.hdr"; - std::string mode = "khan"; - bool onlyCompleteOverlap = false; - int num_iters = 1; - unsigned char save = 0; - unsigned int adv = 0; - char ui = 0; - - string basename; - while ((c = getopt (argc, argv, optstring)) != -1) { - switch (c) { - case 'm': - mode = optarg; - break; - case 'c': - onlyCompleteOverlap = true; - break; - case 'i': - num_iters = atoi(optarg); - break; - case 'e': - ui += UI_EXPORT_INIT_WEIGHTS; - if(g_verbose > 0) - cout << "Exporting initial weights" << endl; - break; - case 'l': - ui += UI_IMPORT_INIT_WEIGHTS; - if(g_verbose > 0) - cout << "Importing initial weights" << endl; - break; - case 's': - for(char *c = optarg; *c; c++) { - switch(*c) { - case 'w': - save += SAVE_WEIGHTS; - if(g_verbose > 0) - cout << "Saving weights from each iteration" << endl; - break; - case 'r': - save += SAVE_RESULTS; - if(g_verbose > 0) - cout << "Saving results from each iteration" << endl; - break; - case 's': - save += SAVE_SOURCES; - if(g_verbose > 0) - cout << "Saving sources after loading" << endl; - break; - case 'a': - save = SAVE_ALL; - if(g_verbose > 0) - cout << "Saving all debug outputs" << endl; - break; - default: - cerr << "Invalid argument for option -s: " << *c << std::endl; - usage(argv[0]); - return 1; - } - } - break; - case 'a': - for(char *c = optarg; *c; c++) { - switch(*c) { - case 'b': - if(adv & ADV_UNAVG) { - cerr << "Cannot use b with c in option -a" << endl; - usage(argv[0]); - return 1; - } - adv += ADV_BIAS; - if(g_verbose > 0) - cout << "Applying: logarithmic bias of weights" << endl; - break; - case 'c': - if(adv & ADV_BIAS) { - cout << "Warning: overriding log bias of weights " - << "width option -a c" << endl; - adv -= ADV_BIAS; - } - if(adv & ADV_UNAVG2) { - cout << "Warning: overriding option -a d with option " - << "-a c" << endl; - adv-= ADV_UNAVG2; - } - adv += ADV_UNAVG; - if(g_verbose > 0) { - cout << "Applying: choose pixel with largest weight" << endl; - } - break; - case 'd': - if(adv & ADV_UNAVG) { - cout << "Warning: overriding option -a d with option " - << "-a c" << endl; - } - else { - adv+= ADV_UNAVG2; - cout << "Applying: choosing pixel with the largest weight " - << "when weights are similar" << endl; - } - break; - case 'h': - adv += ADV_SNR; - if(g_verbose > 0) - cout << "Applying: favoring high signal to noise ratio" - << endl; - break; - case 'i': - adv += ADV_ALPHA; - if(g_verbose > 0) - cout << "Applying: ignore alpha channel" << endl; - break; - case 'n': - adv += ADV_NOLUM; - if(g_verbose > 0) - cout << "Using input images to estimate initial weights instead of luminance" << endl; - break; -/* case 'm': - adv += ADV_MULTI; - if(g_verbose > 0) - cout << "Applying: multi-scaling" << endl; - break; - case 's': - adv += ADV_SAME; - if(g_verbose > 0) - cout << "Applying: favor choosing from the same image" << endl; - break; - case 'u': - adv += ADV_JBU; - if(g_verbose > 0) { - cout << "Applying: use joint bilateral upsampling" - << endl; - } - break; -*/ default: - cerr << "Invalid argument for option -a: " << *c << std::endl; - usage(argv[0]); - return 1; - } - } - break; - case 'o': - outputFile = optarg; - break; - case 'v': - g_verbose++; - break; - case 'h': - usage(argv[0]); - return 0; - default: - cerr << "Invalid parameter: " << optarg << std::endl; - usage(argv[0]); - return 1; - } - }//end while - - cout << endl; - - if(g_verbose > 2) - save = SAVE_ALL; - - unsigned nFiles = argc - optind; - if (nFiles == 0) { - std::cerr << std::endl << "Error: at least one input image needed" << std::endl <<std::endl; - usage(argv[0]); - return 1; - } else if (nFiles == 1) { - std::cout << std::endl << "Only one input image given. Copying input image to output image." << std::endl; - // simply copy image file - std::ifstream infile(argv[optind], std::ios_base::binary); - std::ofstream outfile(outputFile.c_str(), std::ios_base::binary); - outfile << infile.rdbuf(); - return 0; - } - - // load all images - vector<string> inputFiles; - for (size_t i=optind; i < (size_t)argc; i++) - { - inputFiles.push_back(argv[i]); - } - - // output image - ImageType output; - try { - if (mode == "avg_slow") { - // use a weighted average, with special consideration of pixels - // that are completely over or underexposed in all exposures. - if (g_verbose > 0) { - cout << "Running simple weighted avg algorithm" << std::endl; - } - - mergeWeightedAverage(inputFiles, output); - // save output file - if (g_verbose > 0) { - std::cout << "Writing " << outputFile << std::endl; - } - ImageExportInfo exinfo(outputFile.c_str()); - BImage alpha(output.width(), output.height(), 255); - exportImageAlpha(srcImageRange(output), srcImage(alpha), exinfo); - } else if (mode == "avg") { - // apply weighted average functor with - // heuristic to deal with pixels that are overexposed in all images - ReduceToHDRFunctor<ImageType::value_type> waverage; - // calc weighted average without loading the whole images into memory - reduceFilesToHDR(inputFiles, outputFile, onlyCompleteOverlap, waverage); - - } else if (mode == "khan") { - if (g_verbose > 0) { - cout << "Running Khan algorithm" << std::endl; - } - BImage mask; - khanMain(inputFiles, output, mask, num_iters, save, adv, ui); - // save output file - if (g_verbose > 0) { - std::cout << "Writing " << outputFile << std::endl; - } - ImageExportInfo exinfo(outputFile.c_str()); - exinfo.setPixelType("FLOAT"); - exportImageAlpha(srcImageRange(output), srcImage(mask), exinfo); - } else { - std::cerr << "Unknown merge mode, see help for a list of possible modes" << std::endl; - return 1; - } - } catch (std::exception & e) { - cerr << "caught exception: " << e.what() << std::endl; - abort(); - } - - return 0; -} - -bool saveImages(std::vector<std::string> prep, std::string app, - const std::vector<FImagePtr> &images) -{ - if(!prep.size() || !images.size() || prep.size() != images.size()) { - cout << "Error: Number of file names doesn't match number of images" - << endl; - return false; - } - if(!app.size()) { - cout << "Error: Cannot append empty string to file names" - <<endl; - return false; - } - - for(unsigned i = 0; i < prep.size(); i++) { - string tmp(prep.at(i)); - tmp.erase(tmp.rfind('.', tmp.length()-1)); - tmp.append(app); - tmp.append(".jpg"); - ImageExportInfo exinfo(tmp.c_str()); - exportImage(srcImageRange(*images.at(i)), exinfo); - } - - return true; -} - -bool loadImages(std::vector<std::string> prep, std::string app, - std::vector<FImagePtr> *images) -{ - if(!app.size()) { - cout << "Error: Cannot append empty string to file names" - <<endl; - return false; - } - - for(unsigned i = 0; i < prep.size(); i++) { - string tmp(prep.at(i)); - tmp.erase(tmp.rfind('.', tmp.length()-1)); - tmp.append(app); - tmp.append(".jpg"); - ImageImportInfo info(tmp.c_str()); - FImagePtr img(new FImage(info.size())); - importImage(info, destImage(*img)); - - images->push_back(img); - } - - return true; -} Deleted: hugin/trunk/src/deghosting/jbu.cpp =================================================================== --- hugin/trunk/src/deghosting/jbu.cpp 2009-10-01 16:23:48 UTC (rev 4535) +++ hugin/trunk/src/deghosting/jbu.cpp 2009-10-01 17:28:14 UTC (rev 4536) @@ -1,199 +0,0 @@ -// -*- c-basic-offset: 4 -*- - -/** @file jbu.cpp - * - * @brief Implementation of joint bilateral upsampling - * - * @author Jing Jin <ji...@gm...> - * - * $Id$ - * - * 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 software 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 software; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include <cmath> - -#include "khan.h" -#include "jbu.h" - - -using namespace std; -using namespace hugin_utils; -using namespace vigra; -using namespace vigra::functor; - -extern int g_verbose; - -/** given n layers of source images and n layers of references, upscales all - * source images with respect to their individual references - * destImgs is ptr to an empty vector to be filled in - */ -void jointBilateralUpsampling(vector<FImagePtr> *sources, - vector<FImagePtr> *refs, - vector<FImagePtr> *destImgs, int num_neighbors) -{ - int num_layers = sources->size(); - bool destEmpty = destImgs->size() == 0; - for(int i = 0; i < num_layers; i++) { - FImagePtr tmp = jbuImage(sources->at(i), refs->at(i), num_neighbors); - if(!destEmpty) - destImgs->at(i) = tmp; - else - destImgs->push_back(tmp); - } -} - - -/** upsamples a given source image to the size of the given reference - * creates the resulting FImagePtr and returns it - */ -FImagePtr jbuImage(FImagePtr source, FImagePtr refIm, int num_neighbors) -{ - int width = refIm->width(); - int height = refIm->height(); - int s_width = source->width(); - int s_height = source->height(); - float scale = s_width / width; - - FImagePtr dest = FImagePtr(new FImage(width, height)); - float sigma = 0.5; - int mu = 0; - - for(int y = 0; y < height; y++) { - float *refPixLoc = (float *)(refIm->data()) + y * width; - - if(g_verbose > 2) - cout << "y: " << y << "\n" - << "\trefPixLoc: " << hex << refPixLoc << endl; - - for(int x = 0; x < width; x++) { - float refPix = *(refPixLoc + x); - - float total_val = 0; - float normalizing_factor = 0; - - //prevent black areas fro all rgausses being 0 - float norgauss = 0; - float norgauss_normalize = 0; - - //find coords in source - float o_x = x * scale; - float o_y = y * scale; - - if(g_verbose > 2) - cout << "x: " << x << "\n" - << "\trefPixLoc+x: " << hex << refPixLoc + x << "\n" - << "\to_x: " << o_x << "\n" - << "\to_y: " << o_y << endl; - - //for each neighbor for the source - for(int j = -num_neighbors; j <= num_neighbors; j++) { - int r_y = (int)round(o_y + j); - r_y = (r_y > 0 ? (r_y < s_height ? r_y : s_height-1) : 0); - float *srcPixLoc = (float *)source->data() + r_y * s_width; - //corresponding reference pixel - float *neighborPixLoc = (float *)refIm->data() + - (int) (r_y * scale * width); - - if(g_verbose > 3) - cout << "\tj: " << j << "\n" - << "\t\tr_y: " << r_y << "\n" - << "\t\tsrcPixLoc: " << hex << srcPixLoc << "\n" - << "\t\tneighborPixLoc: " << hex << neighborPixLoc << endl; - - for(int i = -num_neighbors; i <= num_neighbors; i++) { - //find coords in source - int r_x = (int)round(o_x + i); - r_x = (r_x > 0 ? (r_x < s_width ? r_x : s_width-1) : 0); - float srcPix = *(srcPixLoc + r_x); - //in ref img - neighborPixLoc += int(r_x * scale); - float neighborPix = *neighborPixLoc; - - if(g_verbose > 3) - cout << "\ti: " << i << "\n" - << "\t\tr_x: " << r_x << "\n" - << "\t\tsrcPixLoc+r_x: " << hex << srcPixLoc + r_x << "\n" - << "\t\tsrcPix: " << srcPix << "\n" - << "\t\tneighborPixLoc: " << hex << neighborPixLoc << "\n" - << " \t\tneighborPix: " << neighborPix << endl; - - //gauss dist to center - float sgauss = simpleGauss(dist(o_x, o_y, r_x, r_y), - sigma, mu); - //gauss radiance diff to center in ref - float rgauss = simpleGauss(abs(refPix - neighborPix), - sigma, mu); - - //multiply gausses by value in source and add to total val - norgauss = srcPix * sgauss; - norgauss_normalize += sgauss; - float totalgauss = sgauss * rgauss; - normalizing_factor += totalgauss; - total_val += srcPix * totalgauss; - - if(g_verbose > 3) - cout << "\t\tsgauss: " << sgauss << "\n" - << "\t\trgauss: " << rgauss << "\n" - << "\t\ttotalgauss+srcPix: " << totalgauss + - srcPix << endl; - - } //end for i - }//end for j - - //normalize and store - - if(g_verbose > 2) - cout << "\tnormalizing_factor: " << normalizing_factor << "\n" - << "\ttotal_val(before): " << total_val << endl; - - if(total_val) { - total_val /= normalizing_factor; - *((float *)dest->data() + y * width + x) = total_val; - } - else { - total_val = norgauss/norgauss_normalize; - } - - if(g_verbose > 3) - cout << "\ttotal_val(after): " << total_val << "\n" - << "stored in: " << hex << dest->data() + - y * width + x << endl; - }//end for x - }//end for y - - return dest; -} - -/** given 2 floating point pixel locations, computes the distance */ -float dist(float x1, float y1, float x2, float y2) -{ - return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)); -} - -/** gaussian applied to a single variable */ -float simpleGauss(float x, float sigma, float mu) -{ - if(sigma == 0) { - cerr << "simpleGauss: sigma must be non-zero" << endl; - exit(1); - } - float pi = 3.1415926; - float x_p = x - mu; - float exponent = std::exp(x_p * x_p / (-2 * sigma * sigma)); - exponent /= sqrt(2 * pi) * sigma; - return exponent; -} Deleted: hugin/trunk/src/deghosting/jbu.h =================================================================== --- hugin/trunk/src/deghosting/jbu.h 2009-10-01 16:23:48 UTC (rev 4535) +++ hugin/trunk/src/deghosting/jbu.h 2009-10-01 17:28:14 UTC (rev 4536) @@ -1,56 +0,0 @@ -// -*- c-basic-offset: 4 -*- - -/** @file jbu.h - * - * @author Jing Jin <ji...@gm...> - * - * $Id$ - * - * 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 software 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 PAR... [truncated message content] |
From: <st...@us...> - 2009-10-05 08:07:36
|
Revision: 4578 http://hugin.svn.sourceforge.net/hugin/?rev=4578&view=rev Author: stativ Date: 2009-10-05 08:07:21 +0000 (Mon, 05 Oct 2009) Log Message: ----------- Removed unnecessary .cvsignore files Removed Paths: ------------- hugin/trunk/.cvsignore hugin/trunk/src/foreign/.cvsignore hugin/trunk/src/foreign/getopt/src/msvs/.cvsignore hugin/trunk/src/foreign/vigra/vigra_impex/.cvsignore hugin/trunk/src/hugin1/.cvsignore hugin/trunk/src/hugin1/hugin/.cvsignore hugin/trunk/src/hugin1/hugin/xrc/.cvsignore hugin/trunk/src/hugin1/hugin/xrc/data/.cvsignore hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/.cvsignore hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/.cvsignore hugin/trunk/src/hugin1/nona_gui/.cvsignore hugin/trunk/src/hugin1/tests/.cvsignore hugin/trunk/src/hugin1/tools/.cvsignore hugin/trunk/src/hugin_base/vigra_ext/.cvsignore Deleted: hugin/trunk/.cvsignore =================================================================== --- hugin/trunk/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,11 +0,0 @@ -ABOUT-NLS -aclocal.m4 -autom4te.cache -config -config.log -config.status -configure -libtool -Makefile -Makefile.in -po Deleted: hugin/trunk/src/foreign/.cvsignore =================================================================== --- hugin/trunk/src/foreign/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/foreign/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,4 +0,0 @@ -Makefile -Makefile.in -stamp-h -stamp-h.in Deleted: hugin/trunk/src/foreign/getopt/src/msvs/.cvsignore =================================================================== --- hugin/trunk/src/foreign/getopt/src/msvs/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/foreign/getopt/src/msvs/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,3 +0,0 @@ -Release71 -Debug71 - Deleted: hugin/trunk/src/foreign/vigra/vigra_impex/.cvsignore =================================================================== --- hugin/trunk/src/foreign/vigra/vigra_impex/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/foreign/vigra/vigra_impex/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,12 +0,0 @@ -*.o -*.lo -*.la -.deps -.libs -Makefile -Makefile.in -stamp-h -stamp-h.in -Release -Release*Unicode -Debug Deleted: hugin/trunk/src/hugin1/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,13 +0,0 @@ -bin -octave -lib -Makefile.depend -api-doc -autopano* -Makefile -Makefile.in -stamp-h -stamp-h.in -Hugin.ncb -Hugin.suo - Deleted: hugin/trunk/src/hugin1/hugin/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/hugin/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/hugin/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,18 +0,0 @@ -.obj -CPEditorTest -hugin -Makefile.depend -.kdbgrc.hugin -*.o -*.lo -*.la -.deps -.libs -Makefile -Makefile.in -config.h -config.h.in -stamp-h* -Release -Debug -Release*Unicode Deleted: hugin/trunk/src/hugin1/hugin/xrc/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/hugin/xrc/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,9 +0,0 @@ -.obj -Makefile.depend -Makefile -Makefile.in -stamp-h -stamp-h.in -stamp-xrc -stamp-xrs -*.xrs Deleted: hugin/trunk/src/hugin1/hugin/xrc/data/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/hugin/xrc/data/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,12 +0,0 @@ -*.htb -.obj -Makefile.depend -help.htm -hugin-icon.xcf -hugin.png -splash.xcf -Makefile -Makefile.in -stamp-data -stamp-h -stamp-h.in Deleted: hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/hugin/xrc/data/help_en_EN/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1 +0,0 @@ -*~ Deleted: hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/hugin/xrc/data/help_fr_FR/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1 +0,0 @@ -*~ Deleted: hugin/trunk/src/hugin1/nona_gui/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/nona_gui/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/nona_gui/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,14 +0,0 @@ -.obj -nona_gui -Makefile.depend -*.lo -*.la -.deps -.libs -Makefile -Makefile.in -stamp-h -stamp-h.in -Debug -Release -Release.Unicode Deleted: hugin/trunk/src/hugin1/tests/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/tests/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/tests/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,23 +0,0 @@ -Makefile.depend -imageproc -panorama -panotools -stitch_result.jpg -photo.jpg -stitch_result.jpg -*.jpg -*.tif -*.txt -*.gif -*.ppm -*.png -_PTStitcher* -.kdbgrc.* -*.JPG -border.m -phase_correlate -rotatePTStitcher.pl -rotatePTStitcher.py -rotatePTStitcher.sh -Debug -Release Deleted: hugin/trunk/src/hugin1/tools/.cvsignore =================================================================== --- hugin/trunk/src/hugin1/tools/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin1/tools/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1,27 +0,0 @@ -.deps -.libs -.obj -.kdbgrc.* -*.la -*.lo -*.o -automatch -autooptimiser -autopano_old -color_correct_tiff -fulla -Makefile -Makefile.depend -Makefile.in -nona -panosifter -stamp-h -stamp-h.in -stitcher -test.pto -winterstaude.jpg -zhang_undistort -zoneplate.gif -Debug -Release -Release.Unicode Deleted: hugin/trunk/src/hugin_base/vigra_ext/.cvsignore =================================================================== --- hugin/trunk/src/hugin_base/vigra_ext/.cvsignore 2009-10-04 23:48:43 UTC (rev 4577) +++ hugin/trunk/src/hugin_base/vigra_ext/.cvsignore 2009-10-05 08:07:21 UTC (rev 4578) @@ -1 +0,0 @@ -Makefile This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-10-20 22:48:13
|
Revision: 4657 http://hugin.svn.sourceforge.net/hugin/?rev=4657&view=rev Author: yuv Date: 2009-10-20 22:48:05 +0000 (Tue, 20 Oct 2009) Log Message: ----------- cleaner, unified version number, says pre-release everywhere and is set only by CMake Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/hugin1/hugin/MainFrame.cpp Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-10-20 22:37:56 UTC (rev 4656) +++ hugin/trunk/CMakeLists.txt 2009-10-20 22:48:05 UTC (rev 4657) @@ -53,7 +53,11 @@ ENDIF (EXISTS ${PROJECT_SOURCE_DIR}/.svn) # version to display -set(DISPLAY_VERSION "${V_MAJOR}.${V_MINOR}.${V_PATCH}.${HUGIN_WC_REVISION}") +IF (HUGIN_DEVELOPMENT_VERSION EQUAL 1) + set(DISPLAY_VERSION "Pre-Release ${V_MAJOR}.${V_MINOR}.${V_PATCH}.${HUGIN_WC_REVISION}") +ELSE (HUGIN_DEVELOPMENT_VERSION EQUAL 1) + set(DISPLAY_VERSION "${V_MAJOR}.${V_MINOR}.${V_PATCH}.${HUGIN_WC_REVISION}") +ENDIF (HUGIN_DEVELOPMENT_VERSION EQUAL 1) # version for internal libraries. set(HUGIN_LIB_VERSION 0.0) Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-10-20 22:37:56 UTC (rev 4656) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-10-20 22:48:05 UTC (rev 4657) @@ -211,11 +211,7 @@ dc.SetTextBackground(*wxWHITE); int tw, th; wxString version; -#ifdef HUGIN_DEVELOPMENT_VERSION - version.Printf(_("Prerelease %s"),wxString(DISPLAY_VERSION, wxConvLocal).c_str()); -#else version.Printf(_("Version %s"),wxString(DISPLAY_VERSION, wxConvLocal).c_str()); -#endif dc.GetTextExtent(version, &tw, &th); // place text on bitmap. dc.DrawText(version, bitmap.GetWidth() - tw - 3, bitmap.GetHeight() - th - 3); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <yu...@us...> - 2009-11-03 08:15:02
|
Revision: 4697 http://hugin.svn.sourceforge.net/hugin/?rev=4697&view=rev Author: yuv Date: 2009-11-03 08:14:48 +0000 (Tue, 03 Nov 2009) Log Message: ----------- expanded AboutDialog, currently still toying with the different possibilities. the new Dialog has a tabbed layout. Some tabs read text directly from files (e.g. License). Others display HTML. The Author's HTML tab is generated at build time by CMake from the tabulated list in authors.txt Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/hugin1/hugin/CMakeLists.txt hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/huginApp.cpp hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt hugin/trunk/src/hugin1/hugin/xrc/data/CMakeLists.txt hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in Added Paths: ----------- hugin/trunk/authors.txt hugin/trunk/src/hugin1/hugin/AboutDialog.cpp hugin/trunk/src/hugin1/hugin/AboutDialog.h hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in hugin/trunk/src/hugin1/hugin/xrc/data/about.txt hugin/trunk/src/hugin1/hugin/xrc/data/sponsors.htm hugin/trunk/src/hugin1/hugin/xrc/data/upstream.txt Removed Paths: ------------- hugin/trunk/src/hugin1/hugin/xrc/about.xrc Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/CMakeLists.txt 2009-11-03 08:14:48 UTC (rev 4697) @@ -19,6 +19,11 @@ set(V_MINOR 5) set(V_PATCH 0) +# parse +file(STRINGS "${PROJECT_SOURCE_DIR}/authors.txt" AUTHORS) + + + # # Check for SVN and get current revision # Added: hugin/trunk/authors.txt =================================================================== --- hugin/trunk/authors.txt (rev 0) +++ hugin/trunk/authors.txt 2009-11-03 08:14:48 UTC (rev 4697) @@ -0,0 +1,61 @@ +Pablo d'Angelo Original Author, GSoC 2007 and 2008 mentor, German translation, original CMake build, original Windows SDK +György Balló original Hungarian translation +Herbert Bay GSoC 2007 mentor +Kai-Uwe Behrmann gui, panoviewer adds, original German translation +Albert Capellades Badia original Catalan translation +Kornel Benko maintenance CMake build +Jakub Bogusz Polish translation +Milo Casagrande Italian translation +Marco Cucinato Italian translation +Vaclav Cerny Czech translation +Jean-Luc Coulon original French translation +Serhij Dubyk initial Ukrainian translation +Terry Duell updated tutorials, Fedora tester and packager +Lu Fang initial Chinese Simplified translation +Jorge González González original Spanish translation +Ed Halley gui, documentation +Juha Helminen Code +Ad Huikeshoven automated Windows snapshot builds +Iouri Ivliev bug fixes +Marek Januszewski Code, initial Polish translation +Jing Jin GSoC 2007 deghosting +Lukáš Jirkovský GSoC 2009 deghosting in enfuse +Allard Katan Windows installer +Marco Kuder GSoC 2008 batch processor +Guido Kohlmeyer German translation, Windows SDK, bug fixes +Erik Krause Enblend droplets for Windows +Alexandre Jenny SpaceTransform class, GSoC 2008 mentoring +Höss Lajos Hungarian translation +Rick Langford Traditional Chinese original translation and updates +Homin Lee initial Korean translation +James Legg GSoC 2008 OpenGL fast preview GSoC 2009 new layout +Yuval Levy Community Builder, GSoC admin 2007 and 2009, GSoC mentor 2007 and 2008, Windows build, original Windows installer, bugfixes, fixes Italian translation +Cristian Marchi Italian translation and 2010 artwork +Zoran Mesec GSoC 2007 feature detector, GSoC 2008 mentor, initial Slovenian translation +Andreas Metzler Debian packaging +Andrew Mihal original author of enblend, enfuse, nona-gpu. GSoC 2009 mentor +Thomas Modes code and bugfixes +John Navas MSI installer +Tim Nugent GSoC 2008 Celeste, GSoC 2009 Lens Calibration +Simon Oosthoek Dutch translation +Eduardo Pérez Esteban Spanish translation +Gerry Patterson Code +Bruno Postle initial packaging, website, documentation, initial British English translation, GSoC 2009 mentor +Alexandre Prokoudine Initial Russian translation, GSoC 2008 admin +Jozef Riha original Slovak translation +Joachim Schneider German translation +Tom Sharpless Windows build, GSoC 2009 mentor, code +Jiri Slaby original Czech translation +Ryan Sleevi Windows 64-bit patches and SDK +Ademar de Souza Reis Jr. original Brazilian translation +Michał Smoczyk Polish translation +Svetoslav Stefanov Bulgarian initial translation +Brent Townshend code and bug fixes +Lorenz Trischberger German translation +Ippei Ukai MacOSX port, initial Japanese translation, GSoC 2007 code refactoring +Harry van der Wolf original Dutch translation, OSX build +Luca Vascon splash screen, icons, original Italian translation +Fabian Wetzel Panoglview +Ulf Wilhelmson original Swedish translation +Douglas Wilkins packaging, translation, bugfixes +Ziv Yaniv RanSaC code Added: hugin/trunk/src/hugin1/hugin/AboutDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AboutDialog.cpp (rev 0) +++ hugin/trunk/src/hugin1/hugin/AboutDialog.cpp 2009-11-03 08:14:48 UTC (rev 4697) @@ -0,0 +1,121 @@ +// -*- c-basic-offset: 4 -*- + +/** @file AboutDialog.cpp + * + * @brief Definition of dialog for numeric transforms + * + * @author Yuval Levy <http://www.photopla.net/> + * + * $Id$ + */ + +/* 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 software 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 software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "hugin/AboutDialog.h" +#include "common/wxPlatform.h" +#include "hugin/huginApp.h" + + +BEGIN_EVENT_TABLE(AboutDialog, wxDialog) + EVT_BUTTON(XRCID("about_me"), AboutDialog::OnAboutMe) +END_EVENT_TABLE() + + +AboutDialog::AboutDialog(wxWindow *parent) +{ + + wxDialog dlg; + wxString strFile; + wxString langCode; + wxBitmap image; + wxStaticBitmap *imageCtrl; + wxTextCtrl *textCtrl; + + wxXmlResource::Get()->LoadDialog(this, parent, wxT("about_dlg")); + +#if __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE + //rely on the system's locale choice + strFile = MacGetPathToBundledResourceFile(CFSTR("about.htm")); + if(strFile!=wxT("")) XRCCTRL(dlg,"about_html",wxHtmlWindow)->LoadPage(strFile); +#else + //if the language is not default, load custom About file (if exists) + langCode = huginApp::Get()->GetLocale().GetName().Left(2).Lower(); + DEBUG_INFO("Lang Code: " << langCode.mb_str(wxConvLocal)); + if(langCode != wxString(wxT("en"))) + { + strFile = huginApp::Get()->GetXRCPath() + wxT("data/about_") + langCode + wxT(".htm"); + if(wxFile::Exists(strFile)) + { + DEBUG_TRACE("Using About: " << strFile.mb_str(wxConvLocal)); + XRCCTRL(dlg,"about_html",wxHtmlWindow)->LoadPage(strFile); + } + } +#endif + + + /** bitmap with logo */ + wxBitmap logo; + wxStaticBitmap *logoImgCtrl; + imageCtrl = XRCCTRL(*this, "about_logo", wxStaticBitmap); + + image.LoadFile(huginApp::Get()->GetXRCPath() + + wxT("data/") + wxT("logo.png"), + wxBITMAP_TYPE_PNG); + imageCtrl->SetBitmap(image); + + // License + textCtrl = XRCCTRL(*this, "license_txt", wxTextCtrl); + strFile = huginApp::Get()->GetXRCPath() + wxT("data/COPYING"); + textCtrl->LoadFile(strFile); + + // About + textCtrl = XRCCTRL(*this, "about_txt", wxTextCtrl); + strFile = huginApp::Get()->GetXRCPath() + wxT("data/about.txt"); + textCtrl->LoadFile(strFile); + + // Upstream + textCtrl = XRCCTRL(*this, "upstream_txt", wxTextCtrl); + strFile = huginApp::Get()->GetXRCPath() + wxT("data/upstream.txt"); + textCtrl->LoadFile(strFile); + + // load the appropriate icon (.ico for Windows, .png for other systems) +#ifdef __WXMSW__ + wxIcon myIcon(huginApp::Get()->GetXRCPath() + wxT("data/icon.ico"),wxBITMAP_TYPE_ICO); +#else + wxIcon myIcon(huginApp::Get()->GetXRCPath() + wxT("data/icon.png"),wxBITMAP_TYPE_PNG); +#endif + // set the icon in the title bar + SetIcon(myIcon); + + // set the position and the size (x,y,width,height). -1 = keep existing + this->SetSize(1,1,560,560); + this->CenterOnParent(); + // make the window modal + this->ShowModal(); + +} + +// class destructor +AboutDialog::~AboutDialog() +{ + // insert your code here +} + +void AboutDialog::OnAboutMe(wxCommandEvent & e) +{ + return; +} Property changes on: hugin/trunk/src/hugin1/hugin/AboutDialog.cpp ___________________________________________________________________ Added: svn:keywords + Id Added: hugin/trunk/src/hugin1/hugin/AboutDialog.h =================================================================== --- hugin/trunk/src/hugin1/hugin/AboutDialog.h (rev 0) +++ hugin/trunk/src/hugin1/hugin/AboutDialog.h 2009-11-03 08:14:48 UTC (rev 4697) @@ -0,0 +1,59 @@ +// -*- c-basic-offset: 4 -*- +/** @file AboutDialog.h + * + * @brief Definition of dialog for numeric transforms + * + * @author Yuval Levy <http://www.photopla.net/> + * + * $Id$ + * + */ + +/* This 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 software 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef _ABOUTDIALOG_H +#define _ABOUTDIALOG_H + +#include "panoinc_WX.h" +#include "hugin/MainFrame.h" + + +/** Dialog for about window + * + * make a bit more action possible in the window + */ +class AboutDialog: public wxDialog +{ +public: + /** Constructor, read from xrc ressource */ + AboutDialog(wxWindow *parent); + + /** Destructor, pro forma */ + ~AboutDialog(); + + +private: + + DECLARE_EVENT_TABLE() + + /** button to fill the space */ + void OnAboutMe(wxCommandEvent & e); + + +}; + +#endif // _ABOUTDIALOG_H Property changes on: hugin/trunk/src/hugin1/hugin/AboutDialog.h ___________________________________________________________________ Added: svn:keywords + Id Modified: hugin/trunk/src/hugin1/hugin/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/CMakeLists.txt 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/src/hugin1/hugin/CMakeLists.txt 2009-11-03 08:14:48 UTC (rev 4697) @@ -34,7 +34,7 @@ OutputProjectionInfo.cpp PreviewToolHelper.cpp PreviewTool.cpp PreviewCropTool.cpp PreviewDragTool.cpp PreviewIdentifyTool.cpp PreviewDifferenceTool.cpp PreviewPanoMaskTool.cpp PreviewControlPointTool.cpp -GreatCircles.cpp) +GreatCircles.cpp AboutDialog.cpp) IF(APPLE) if (MAC_SELF_CONTAINED_BUNDLE) Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-11-03 08:14:48 UTC (rev 4697) @@ -63,8 +63,8 @@ #include "base_wx/huginConfig.h" +#include "hugin/AboutDialog.h" - using namespace PT; using namespace utils; using namespace std; @@ -1051,6 +1051,12 @@ void MainFrame::OnAbout(wxCommandEvent & e) { + AboutDialog dlg(this); +} + +/* +void MainFrame::OnAbout(wxCommandEvent & e) +{ DEBUG_TRACE(""); wxDialog dlg; wxString strFile; @@ -1078,6 +1084,7 @@ #endif dlg.ShowModal(); } +*/ void MainFrame::OnHelp(wxCommandEvent & e) { Modified: hugin/trunk/src/hugin1/hugin/huginApp.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/src/hugin1/hugin/huginApp.cpp 2009-11-03 08:14:48 UTC (rev 4697) @@ -57,6 +57,8 @@ #include <tiffio.h> +#include "AboutDialog.h" + using namespace utils; // utility functions Modified: hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt 2009-11-03 08:14:48 UTC (rev 4697) @@ -1,3 +1,5 @@ +configure_file(about.xrc.in ${CMAKE_BINARY_DIR}/xrc/about.xrc) +install(FILES ${CMAKE_BINARY_DIR}/xrc/about.xrc DESTINATION ${HUGINDATADIR}/xrc) SET(XRCFILES crop_panel.xrc @@ -9,7 +11,6 @@ main_menu.xrc main_tool.xrc edit_text.xrc - about.xrc help.xrc keyboard_help.xrc pref_dialog.xrc Deleted: hugin/trunk/src/hugin1/hugin/xrc/about.xrc =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/about.xrc 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/src/hugin1/hugin/xrc/about.xrc 2009-11-03 08:14:48 UTC (rev 4697) @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<resource> - <object class="wxDialog" name="about_dlg"> - <title>About Hugin</title> - <centered>1</centered> - <style>wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP|wxRESIZE_BORDER</style> - <object class="wxFlexGridSizer"> - <object class="sizeritem"> - <object class="wxHtmlWindow" name="about_html"> - <size>650,560</size> - <borders>0</borders> - <url>data/about.htm</url> - <bg>#FFFFFF</bg> - </object> - <flag>wxALL|wxEXPAND|wxGROW</flag> - <border>12</border> - </object> - <object class="sizeritem"> - <object class="wxButton" name="wxID_OK"> - <label>OK</label> - <default>1</default> - </object> - <flag>wxALL|wxALIGN_RIGHT</flag> - <border>12</border> - </object> - <cols>1</cols> - <growablecols>0</growablecols> - <growablerows>0</growablerows> - </object> - </object> -</resource> Copied: hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in (from rev 4692, hugin/trunk/src/hugin1/hugin/xrc/about.xrc) =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in (rev 0) +++ hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in 2009-11-03 08:14:48 UTC (rev 4697) @@ -0,0 +1,143 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<resource> + <object class="wxDialog" name="about_dlg"> + <title>About Hugin</title> + <centered>1</centered> + <size>535,535</size> + <bg>#FFFFFF</bg> + <style>wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP|wxRESIZE_BORDER</style> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxStaticBitmap" name="about_logo"> + <size>535,254</size> + </object> + <flag>wxALL|wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL</flag> + <border>0</border> + </object> + <object class="sizeritem"> + <object class="wxStaticText" name="about_version"> + <label>${DISPLAY_VERSION}</label> + <style>wxALIGN_RIGHT</style> + </object> + <flag>wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <border>3</border> + </object> + <object class="sizeritem"> + <object class="wxStaticLine"/> + <flag>wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <border>3</border> + </object> + <object class="sizeritem"> + <object class="wxNotebook"> + <object class="notebookpage"> + <object class="wxPanel" name="about_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxTextCtrl" name="about_txt"> + <font> + <size>8</size> + <family>modern</family> + </font> + <style>wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <option>1</option> + </object> + </object> + </object> + <label>About</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="authors_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxHtmlWindow" name="about_html"> + <borders>0</borders> + <url>data/about.htm</url> + <size>560,209</size> + <bg>#FFFFFF</bg> + </object> + <flag>wxALL|wxEXPAND|wxGROW</flag> + <border>0</border> + </object> + <flag>wxEXPAND</flag> + </object> + </object> + <label>Authors</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="sponsors_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxHtmlWindow" name="sponsors_html"> + <borders>0</borders> + <url>data/sponsors.htm</url> + <size>560,209</size> + <bg>#FFFFFF</bg> + </object> + <flag>wxALL|wxEXPAND|wxGROW</flag> + <border>0</border> + </object> + <flag>wxEXPAND</flag> + </object> + </object> + <label>Sponsors</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="upstream_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxTextCtrl" name="upstream_txt"> + <font> + <size>8</size> + <family>modern</family> + </font> + <style>wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <option>1</option> + </object> + </object> + </object> + <label>Upstream</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="license_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxTextCtrl" name="license_txt"> + <font> + <size>8</size> + <family>modern</family> + </font> + <style>wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <option>1</option> + </object> + </object> + </object> + <label>License</label> + </object> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <border>8</border> + <option>1</option> + </object> + <object class="sizeritem"> + <object class="wxButton" name="wxID_OK"> + <label>OK</label> + <default>1</default> + </object> + <flag>wxALL|wxALIGN_RIGHT</flag> + <border>12</border> + </object> + </object> + </object> +</resource> Property changes on: hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in ___________________________________________________________________ Added: svn:mergeinfo + /hugin/branches/gsoc2008_batch_processing/src/hugin1/hugin/xrc/about.xrc:3081-3398 /hugin/branches/gsoc2009_deghosting/src/hugin1/hugin/xrc/about.xrc:3873-4533 Modified: hugin/trunk/src/hugin1/hugin/xrc/data/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/CMakeLists.txt 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/src/hugin1/hugin/xrc/data/CMakeLists.txt 2009-11-03 08:14:48 UTC (rev 4697) @@ -1,11 +1,26 @@ -FILE(GLOB DATAFILES *.htm *.html *.ico *.jpg *.png *.xpm tips.txt *.mk) +FILE(GLOB DATAFILES *.htm *.html *.ico *.jpg *.png *.xpm tips.txt about.txt upstream.txt *.mk) INSTALL(FILES ${DATAFILES} DESTINATION ${HUGINDATADIR}/xrc/data) +# parse contributors list +file(READ "${PROJECT_SOURCE_DIR}/authors.txt" AUTHORS_LIST) +# replace tab with next table cell +string(REGEX REPLACE "\t" + "</td><td>" AUTHORS_LIST "${AUTHORS_LIST}") +# replace newline with next table row +string(REGEX REPLACE "\n" + "</td></tr><tr><td>" AUTHORS_LIST "${AUTHORS_LIST}") +# remove extra last row +string(REGEX REPLACE "<tr><td>$" + "" AUTHORS_LIST "${AUTHORS_LIST}") + configure_file(about.htm.in ${CMAKE_BINARY_DIR}/src/hugin1/hugin/xrc/data/about.htm) INSTALL(FILES ${CMAKE_BINARY_DIR}/src/hugin1/hugin/xrc/data/about.htm DESTINATION ${HUGINDATADIR}/xrc/data) +# license text for about dialog +INSTALL(FILES ${CMAKE_SOURCE_DIR}/COPYING DESTINATION ${HUGINDATADIR}/xrc/data/) + IF (UNIX) INSTALL(FILES hugin.png DESTINATION ${DATADIR}/pixmaps) ENDIF (UNIX) Modified: hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in 2009-11-03 00:13:31 UTC (rev 4696) +++ hugin/trunk/src/hugin1/hugin/xrc/data/about.htm.in 2009-11-03 08:14:48 UTC (rev 4697) @@ -1,39 +1,21 @@ <html> <head> - <title>Hugin</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Hugin Authors</title> </head> <body bgcolor="#FFFFFF"> - <center> - <img src="splash.png"></img> - <p> - <font size=+2>Hugin</font><br> - Version ${DISPLAY_VERSION} - <br> - <font size=-1>(http://hugin.sourceforge.net/)</font> - <br> - by Pablo d'Angelo + <font size=-1> + Over the years, contributors come and go, and they leave behind them stepping stones + for the current team to continue on the path of constant improvement. </p> <p> - This edition of Hugin is brought to you by all of our past and present contributors, too many to list here. - The full list is at http://hugin.sourceforge.net/community/authors.shtml + This edition of Hugin is brought to you by all of our past and present contributors. + This list tries to be complete. If it is not, please accept our apology and help us + completing it. </p> - <p> - <b>Thanks to our major sponsors:</b> - </p> - <ul> - <li>Google for the Google Summer of Code</li> - <li>Agnos for providing pano heads to the Hugin GSoC 2007 participants</li> - <li>Nodal Ninja for providing pano heads to the Hugin GSoC 2008 and 2009 participants</li> - <li>last but not least the many members of the Hugin-PTX mailing list</li> - </ul> - <p> - <font size=-1>Hugin uses the EMoR response model from the Computer Vision Lab at Columbia University.<br> - The GUI layout is in part based on an interface design by Joost Nieuwenhuijse.</font> - </p> - <p> - Hugin is licenced under the GPL 2 or any later version<br> - <b>Copyright (C) 2004-2009</b> by the authors. - </b> - </center> + <table><tr><td><b>Name</b></td><td><b>Contribution</b></td></tr><tr><td>${AUTHORS_LIST}</table> + +</font> + </body> </html> Added: hugin/trunk/src/hugin1/hugin/xrc/data/about.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/about.txt (rev 0) +++ hugin/trunk/src/hugin1/hugin/xrc/data/about.txt 2009-11-03 08:14:48 UTC (rev 4697) @@ -0,0 +1,19 @@ +Hugin was originally developed by Pablo d'Angelo. +(C) 2004-2009 + +By setting his original software Free under the GPL, Pablo started +what has become a thriving community and a project larger than any +one single individual could have ever done alone. + +Hugin is a versatile perspective manipulation programs suite for +the discerning user's panorama workflow and more. + +Align images in geometrical and photometric space and merge them +into images that can't be captured with a single shot. + +Applications range from the simple stitching of two images +into a panorama, up to giga pixel panoramas, high dynamic range +(HDR) composites, exposure blending, focus stacking and more. + +Join us on http://groups.google.com/group/hugin-ptx/ + Added: hugin/trunk/src/hugin1/hugin/xrc/data/sponsors.htm =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/sponsors.htm (rev 0) +++ hugin/trunk/src/hugin1/hugin/xrc/data/sponsors.htm 2009-11-03 08:14:48 UTC (rev 4697) @@ -0,0 +1,25 @@ +<html> + <head> + <title>Hugin Sponsors</title> + </head> + <body bgcolor="#FFFFFF"> + <font size=-1> + <p> + This edition of Hugin is brought to you by all of our past and present contributors, too many to list here. + </p> + <p> + <b>Thanks to our major sponsors:</b> + </p> + <ul> + <li>Google for the Google Summer of Code 2007, 2008, 2009.</li> + <li>Agnos for providing pano heads to the Hugin GSoC 2007 participants.</li> + <li>Nodal Ninja for providing pano heads to the Hugin GSoC 2008 and 2009 participants.</li> + <li>Last but not least the many members of the Hugin-PTX mailing list.</li> + </ul> + <p> + <font size=-1>Hugin uses the EMoR response model from the Computer Vision Lab at Columbia University.<br> + The GUI layout is in part based on an interface design by Joost Nieuwenhuijse.</font> + </p> + </font> + </body> +</html> Added: hugin/trunk/src/hugin1/hugin/xrc/data/upstream.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/data/upstream.txt (rev 0) +++ hugin/trunk/src/hugin1/hugin/xrc/data/upstream.txt 2009-11-03 08:14:48 UTC (rev 4697) @@ -0,0 +1,28 @@ +Hugin's source package also contains the following +(slightly modified) libraries. The improvements have been contributed +back to the upstream developers, if possible. Hugin would not have been +possible without them. Many thanks. + +VIGRA: http://kogs-www.informatik.uni-hamburg.de/~koethe/vigra/ +jhead: http://www.sentex.net/~mwandel/jhead/ +levmar by Manolis Lourakis http://www.ics.forth.gr/~lourakis/levmar +ANN: by David M. Mount and Sunil Arya http://www.cs.umd.edu/~mount/ANN/ + +The camera response estimation uses the EMoR response model developed +at the Computer Vision Laboratory of the Columbia University. +"Modeling the Space of Camera Response Functions," +M.D. Grossberg and S.K. Nayar, +IEEE Transactions on Pattern Analysis and Machine Intelligence, +Vol.26, No.10, pp.1272-1282, Oct, 2004. + +Hugin would not be what it is without the following packages: + +Libpano is critically important for Hugin. Many thanks to its original developers Helmut Dersch, Rik Littlefield, Jim Watters, Fulvio Seniore, Max Lyons, Bruno Postle, and to those who continue their tradition. +http://panotools.sourceforge.net/ + +Enblend-Enfuse originally by Andrew Mihal http://enblend.sourceforge.net/ + +Many thanks to the whole Hugin-PTX mailing list, for great feedback and interesting discussions. + +Last but not least, many thanks to Nils Lagerkvist for suggesting the program name, Hugin. + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tm...@us...> - 2009-11-09 06:27:23
|
Revision: 4711 http://hugin.svn.sourceforge.net/hugin/?rev=4711&view=rev Author: tmodes Date: 2009-11-09 06:27:13 +0000 (Mon, 09 Nov 2009) Log Message: ----------- Some fixes for new about dialog Modified Paths: -------------- hugin/trunk/CMakeLists.txt hugin/trunk/src/hugin1/hugin/AboutDialog.cpp hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt Added Paths: ----------- hugin/trunk/src/hugin1/hugin/xrc/about.xrc Removed Paths: ------------- hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in Modified: hugin/trunk/CMakeLists.txt =================================================================== --- hugin/trunk/CMakeLists.txt 2009-11-07 11:49:58 UTC (rev 4710) +++ hugin/trunk/CMakeLists.txt 2009-11-09 06:27:13 UTC (rev 4711) @@ -19,11 +19,6 @@ set(V_MINOR 5) set(V_PATCH 0) -# parse -file(STRINGS "${PROJECT_SOURCE_DIR}/authors.txt" AUTHORS) - - - # # Check for SVN and get current revision # Modified: hugin/trunk/src/hugin1/hugin/AboutDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AboutDialog.cpp 2009-11-07 11:49:58 UTC (rev 4710) +++ hugin/trunk/src/hugin1/hugin/AboutDialog.cpp 2009-11-09 06:27:13 UTC (rev 4711) @@ -28,6 +28,7 @@ #include "hugin/AboutDialog.h" #include "common/wxPlatform.h" #include "hugin/huginApp.h" +#include <hugin_version.h> BEGIN_EVENT_TABLE(AboutDialog, wxDialog) @@ -37,20 +38,18 @@ AboutDialog::AboutDialog(wxWindow *parent) { - - wxDialog dlg; wxString strFile; wxString langCode; - wxBitmap image; - wxStaticBitmap *imageCtrl; wxTextCtrl *textCtrl; wxXmlResource::Get()->LoadDialog(this, parent, wxT("about_dlg")); +#if 0 +// currently authors and about text are not translated, so comment out #if __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE //rely on the system's locale choice strFile = MacGetPathToBundledResourceFile(CFSTR("about.htm")); - if(strFile!=wxT("")) XRCCTRL(dlg,"about_html",wxHtmlWindow)->LoadPage(strFile); + if(strFile!=wxT("")) XRCCTRL(*this,"about_html",wxHtmlWindow)->LoadPage(strFile); #else //if the language is not default, load custom About file (if exists) langCode = huginApp::Get()->GetLocale().GetName().Left(2).Lower(); @@ -61,22 +60,15 @@ if(wxFile::Exists(strFile)) { DEBUG_TRACE("Using About: " << strFile.mb_str(wxConvLocal)); - XRCCTRL(dlg,"about_html",wxHtmlWindow)->LoadPage(strFile); + XRCCTRL(*this,"about_html",wxHtmlWindow)->LoadPage(strFile); } } #endif +#endif + // Version + XRCCTRL(*this,"about_version", wxStaticText)->SetLabel(wxString(DISPLAY_VERSION, wxConvLocal)); - /** bitmap with logo */ - wxBitmap logo; - wxStaticBitmap *logoImgCtrl; - imageCtrl = XRCCTRL(*this, "about_logo", wxStaticBitmap); - - image.LoadFile(huginApp::Get()->GetXRCPath() + - wxT("data/") + wxT("logo.png"), - wxBITMAP_TYPE_PNG); - imageCtrl->SetBitmap(image); - // License textCtrl = XRCCTRL(*this, "license_txt", wxTextCtrl); strFile = huginApp::Get()->GetXRCPath() + wxT("data/COPYING"); @@ -104,9 +96,6 @@ // set the position and the size (x,y,width,height). -1 = keep existing this->SetSize(1,1,560,560); this->CenterOnParent(); - // make the window modal - this->ShowModal(); - } // class destructor Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-11-07 11:49:58 UTC (rev 4710) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2009-11-09 06:27:13 UTC (rev 4711) @@ -1052,6 +1052,7 @@ void MainFrame::OnAbout(wxCommandEvent & e) { AboutDialog dlg(this); + dlg.ShowModal(); } /* Modified: hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt 2009-11-07 11:49:58 UTC (rev 4710) +++ hugin/trunk/src/hugin1/hugin/xrc/CMakeLists.txt 2009-11-09 06:27:13 UTC (rev 4711) @@ -1,7 +1,5 @@ -configure_file(about.xrc.in ${CMAKE_BINARY_DIR}/xrc/about.xrc) -install(FILES ${CMAKE_BINARY_DIR}/xrc/about.xrc DESTINATION ${HUGINDATADIR}/xrc) - -SET(XRCFILES +SET(XRCFILES + about.xrc crop_panel.xrc cp_list_frame.xrc preview_frame.xrc Copied: hugin/trunk/src/hugin1/hugin/xrc/about.xrc (from rev 4709, hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in) =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/about.xrc (rev 0) +++ hugin/trunk/src/hugin1/hugin/xrc/about.xrc 2009-11-09 06:27:13 UTC (rev 4711) @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<resource> + <object class="wxDialog" name="about_dlg"> + <title>About Hugin</title> + <centered>1</centered> + <size>535,535</size> + <style>wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</style> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxPanel"> + <style>wxNO_3D</style> + <bg>#FFFFFF</bg> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxStaticBitmap" name="about_logo"> + <bitmap>data/logo.png</bitmap> + </object> + <flag>wxALL|wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL</flag> + </object> + <object class="sizeritem"> + <object class="wxStaticText" name="about_version"> + <label>version</label> + <style>wxALIGN_RIGHT</style> + </object> + <flag>wxLEFT|wxRIGHT|wxALIGN_RIGHT|wxALIGN_TOP</flag> + <border>3</border> + </object> + </object> + </object> + <flag>wxALL|wxEXPAND</flag> + </object> + <object class="sizeritem"> + <object class="wxStaticLine"/> + <flag>wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <border>3</border> + </object> + <object class="sizeritem"> + <object class="wxNotebook"> + <object class="notebookpage"> + <object class="wxPanel" name="about_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxTextCtrl" name="about_txt"> + <font> + <size>8</size> + <size platform="mac">10</size> + <family>modern</family> + </font> + <style platform="win">wxTE_MULTILINE|wxTE_READONLY</style> + <style platform="unix|mac">wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <option>1</option> + <border platform="unix|mac">0</border> + </object> + </object> + </object> + <label>About</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="authors_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxHtmlWindow" name="about_html"> + <borders>0</borders> + <style platform="win">wxSUNKEN_BORDER</style> + <url>data/about.htm</url> + <bg>#FFFFFF</bg> + </object> + <option>1</option> + <flag>wxALL|wxEXPAND</flag> + <border platform="unix|mac">0</border> + </object> + <flag>wxEXPAND</flag> + <option>1</option> + </object> + </object> + <label>Authors</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="sponsors_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxHtmlWindow" name="sponsors_html"> + <borders>0</borders> + <style platform="win">wxSUNKEN_BORDER</style> + <url>data/sponsors.htm</url> + <bg>#FFFFFF</bg> + </object> + <option>1</option> + <flag>wxALL|wxEXPAND</flag> + <border platform="unix|mac">0</border> + </object> + <flag>wxEXPAND</flag> + <option>1</option> + </object> + </object> + <label>Sponsors</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="upstream_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxTextCtrl" name="upstream_txt"> + <font> + <size>8</size> + <size platform="mac">10</size> + <family>modern</family> + </font> + <style platform="win">wxTE_MULTILINE|wxTE_READONLY</style> + <style platform="unix|mac">wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <option>1</option> + <border platform="unix|mac">0</border> + </object> + </object> + </object> + <label>Upstream</label> + </object> + <object class="notebookpage"> + <object class="wxPanel" name="license_tab"> + <object class="wxBoxSizer"> + <orient>wxVERTICAL</orient> + <object class="sizeritem"> + <object class="wxTextCtrl" name="license_txt"> + <font> + <size>8</size> + <size platform="mac">10</size> + <family>modern</family> + </font> + <style platform="win">wxTE_MULTILINE|wxTE_READONLY</style> + <style platform="unix|mac">wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <option>1</option> + <border platform="unix|mac">0</border> + </object> + </object> + </object> + <label>License</label> + </object> + </object> + <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> + <border>8</border> + <option>1</option> + </object> + <object class="sizeritem"> + <object class="wxButton" name="wxID_OK"> + <label>OK</label> + <default>1</default> + </object> + <flag>wxALL|wxALIGN_RIGHT</flag> + <border>12</border> + </object> + </object> + </object> +</resource> Deleted: hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in 2009-11-07 11:49:58 UTC (rev 4710) +++ hugin/trunk/src/hugin1/hugin/xrc/about.xrc.in 2009-11-09 06:27:13 UTC (rev 4711) @@ -1,146 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<resource> - <object class="wxDialog" name="about_dlg"> - <title>About Hugin</title> - <centered>1</centered> - <size>535,535</size> - <bg>#FFFFFF</bg> - <style>wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP|wxRESIZE_BORDER</style> - <object class="wxBoxSizer"> - <orient>wxVERTICAL</orient> - <object class="sizeritem"> - <object class="wxStaticBitmap" name="about_logo"> - <size>535,254</size> - </object> - <flag>wxALL|wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL</flag> - <border>0</border> - </object> - <object class="sizeritem"> - <object class="wxStaticText" name="about_version"> - <label>${DISPLAY_VERSION}</label> - <style>wxALIGN_RIGHT</style> - </object> - <flag>wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> - <border>3</border> - </object> - <object class="sizeritem"> - <object class="wxStaticLine"/> - <flag>wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> - <border>3</border> - </object> - <object class="sizeritem"> - <object class="wxNotebook"> - <object class="notebookpage"> - <object class="wxPanel" name="about_tab"> - <object class="wxBoxSizer"> - <orient>wxVERTICAL</orient> - <object class="sizeritem"> - <object class="wxTextCtrl" name="about_txt"> - <font> - <size>8</size> - <size platform="mac">10</size> - <family>modern</family> - </font> - <style>wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> - </object> - <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> - <option>1</option> - </object> - </object> - </object> - <label>About</label> - </object> - <object class="notebookpage"> - <object class="wxPanel" name="authors_tab"> - <object class="wxBoxSizer"> - <orient>wxVERTICAL</orient> - <object class="sizeritem"> - <object class="wxHtmlWindow" name="about_html"> - <borders>0</borders> - <url>data/about.htm</url> - <size>560,209</size> - <bg>#FFFFFF</bg> - </object> - <flag>wxALL|wxEXPAND|wxGROW</flag> - <border>0</border> - </object> - <flag>wxEXPAND</flag> - </object> - </object> - <label>Authors</label> - </object> - <object class="notebookpage"> - <object class="wxPanel" name="sponsors_tab"> - <object class="wxBoxSizer"> - <orient>wxVERTICAL</orient> - <object class="sizeritem"> - <object class="wxHtmlWindow" name="sponsors_html"> - <borders>0</borders> - <url>data/sponsors.htm</url> - <size>560,209</size> - <bg>#FFFFFF</bg> - </object> - <flag>wxALL|wxEXPAND|wxGROW</flag> - <border>0</border> - </object> - <flag>wxEXPAND</flag> - </object> - </object> - <label>Sponsors</label> - </object> - <object class="notebookpage"> - <object class="wxPanel" name="upstream_tab"> - <object class="wxBoxSizer"> - <orient>wxVERTICAL</orient> - <object class="sizeritem"> - <object class="wxTextCtrl" name="upstream_txt"> - <font> - <size>8</size> - <size platform="mac">10</size> - <family>modern</family> - </font> - <style>wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> - </object> - <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> - <option>1</option> - </object> - </object> - </object> - <label>Upstream</label> - </object> - <object class="notebookpage"> - <object class="wxPanel" name="license_tab"> - <object class="wxBoxSizer"> - <orient>wxVERTICAL</orient> - <object class="sizeritem"> - <object class="wxTextCtrl" name="license_txt"> - <font> - <size>8</size> - <size platform="mac">10</size> - <family>modern</family> - </font> - <style>wxTE_MULTILINE|wxTE_READONLY|wxNO_BORDER</style> - </object> - <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> - <option>1</option> - </object> - </object> - </object> - <label>License</label> - </object> - </object> - <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag> - <border>8</border> - <option>1</option> - </object> - <object class="sizeritem"> - <object class="wxButton" name="wxID_OK"> - <label>OK</label> - <default>1</default> - </object> - <flag>wxALL|wxALIGN_RIGHT</flag> - <border>12</border> - </object> - </object> - </object> -</resource> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <har...@us...> - 2009-12-05 15:29:01
|
Revision: 4748 http://hugin.svn.sourceforge.net/hugin/?rev=4748&view=rev Author: harryvanderwolf Date: 2009-12-05 15:28:49 +0000 (Sat, 05 Dec 2009) Log Message: ----------- [OSX] Finally implement hugin_builder and display_version into OSX build Modified Paths: -------------- hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj hugin/trunk/src/hugin_version.h.in.cmake Modified: hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj =================================================================== --- hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj 2009-12-03 22:59:45 UTC (rev 4747) +++ hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj 2009-12-05 15:28:49 UTC (rev 4748) @@ -926,6 +926,8 @@ 7332AEC00D8D4C45002BF5FF /* APImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7332AE560D8D491B002BF5FF /* APImage.cpp */; }; 7332AEC30D8D4C45002BF5FF /* Descriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7332AE790D8D491B002BF5FF /* Descriptor.cpp */; }; 7332AEC40D8D4C45002BF5FF /* HessianDetector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7332AE840D8D491C002BF5FF /* HessianDetector.cpp */; }; + 73411F151077B205001831AF /* HDRMergeOptionDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73411F131077B205001831AF /* HDRMergeOptionDialog.cpp */; }; + 73437AC410BD9C7D0014F41D /* libintl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7368E40A1083930D00519ED0 /* libintl.dylib */; }; 73482F5C0FD97B3900B6088C /* libboost_thread-1_38.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 73482F5B0FD97B3900B6088C /* libboost_thread-1_38.a */; }; 734FB9B40EB3929500CD7122 /* libGLEW.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 734FB9B20EB3929500CD7122 /* libGLEW.a */; }; 734FBA5B0EB3A20500CD7122 /* ChoosyRemapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 734FBA370EB3A20500CD7122 /* ChoosyRemapper.cpp */; }; @@ -972,6 +974,8 @@ 736421E010763FCD000121C5 /* hugin_hdrmerge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 736421DF10763FCD000121C5 /* hugin_hdrmerge.cpp */; }; 736421E110764008000121C5 /* deghosting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 736421C610763D0C000121C5 /* deghosting.cpp */; }; 7364220A107641B1000121C5 /* hugin_version.h in Headers */ = {isa = PBXBuildFile; fileRef = 57E122480D2BE45700743A93 /* hugin_version.h */; }; + 7368E41E108393D300519ED0 /* libintl.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7368E40A1083930D00519ED0 /* libintl.dylib */; }; + 7368E4641083ABF200519ED0 /* NumTransDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7368E4631083ABF200519ED0 /* NumTransDialog.cpp */; }; 7377C6BB106402DC002EF919 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 579895AB068E3002009F90BF /* libz.dylib */; }; 7377C6C110640349002EF919 /* libpano13.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 573B8F85067BAAB900B7B355 /* libpano13.dylib */; }; 7377C70A10641769002EF919 /* HuginBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 576900AA0D24D29300A6AD01 /* HuginBase.framework */; }; @@ -980,6 +984,7 @@ 7377C755106422F8002EF919 /* cpclean in Copy Executable Files */ = {isa = PBXBuildFile; fileRef = 73D24B4E106152CD00B8A25D /* cpclean */; }; 737E1C190EC9EC0300BA4D9B /* hugin_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 737E1C180EC9EC0300BA4D9B /* hugin_config.h */; }; 7388EAFD0F6BFB1B001E08FA /* ResetDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7388EAFB0F6BFB1B001E08FA /* ResetDialog.cpp */; }; + 738C044B10A0A5D90061D144 /* AboutDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 738C044910A0A5D90061D144 /* AboutDialog.cpp */; }; 739F846C0EC75403004771D6 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 739F846B0EC75402004771D6 /* OpenGL.framework */; }; 739F84790EC754CC004771D6 /* libwx_macu_gl-2.8.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 739F84780EC754CC004771D6 /* libwx_macu_gl-2.8.dylib */; }; 739F84D00EC77E9A004771D6 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 579895AB068E3002009F90BF /* libz.dylib */; }; @@ -1689,7 +1694,7 @@ isa = PBXContainerItemProxy; containerPortal = 57FC3AC10675E43600C3E0AC /* Project object */; proxyType = 1; - remoteGlobalIDString = 73D24B4D106152CD00B8A25D /* cpclean */; + remoteGlobalIDString = 73D24B4D106152CD00B8A25D; remoteInfo = cpclean; }; 7364217610763A44000121C5 /* PBXContainerItemProxy */ = { @@ -2449,6 +2454,8 @@ 7332AE8E0D8D491C002BF5FF /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; }; 7332AE8F0D8D491C002BF5FF /* README */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; 7332AEAE0D8D4986002BF5FF /* matchpoint */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = matchpoint; sourceTree = BUILT_PRODUCTS_DIR; }; + 73411F131077B205001831AF /* HDRMergeOptionDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HDRMergeOptionDialog.cpp; sourceTree = "<group>"; }; + 73411F141077B205001831AF /* HDRMergeOptionDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDRMergeOptionDialog.h; sourceTree = "<group>"; }; 73482F5B0FD97B3900B6088C /* libboost_thread-1_38.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_thread-1_38.a"; path = "../../ExternalPrograms/repository/lib-static/libboost_thread-1_38.a"; sourceTree = SOURCE_ROOT; }; 73482F5D0FD97B7200B6088C /* libboost_filesystem-xgcc40-mt-1_38.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_filesystem-xgcc40-mt-1_38.a"; path = "../../ExternalPrograms/repository/lib-static/libboost_filesystem-xgcc40-mt-1_38.a"; sourceTree = SOURCE_ROOT; }; 734BDF5B0EB8EC19007EBA09 /* PTBatcher */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = PTBatcher; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -2530,10 +2537,19 @@ 736421C710763D0C000121C5 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; }; 736421C810763D0C000121C5 /* algtinyvector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = algtinyvector.h; sourceTree = "<group>"; }; 736421DF10763FCD000121C5 /* hugin_hdrmerge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hugin_hdrmerge.cpp; sourceTree = "<group>"; }; + 7368E40A1083930D00519ED0 /* libintl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libintl.dylib; path = ../../ExternalPrograms/repository/lib/libintl.dylib; sourceTree = SOURCE_ROOT; }; + 7368E40B1083930D00519ED0 /* libgettextsrc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgettextsrc.dylib; path = ../../ExternalPrograms/repository/lib/libgettextsrc.dylib; sourceTree = SOURCE_ROOT; }; + 7368E40C1083930D00519ED0 /* libgettextpo.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgettextpo.dylib; path = ../../ExternalPrograms/repository/lib/libgettextpo.dylib; sourceTree = SOURCE_ROOT; }; + 7368E40D1083930D00519ED0 /* libgettextlib.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgettextlib.dylib; path = ../../ExternalPrograms/repository/lib/libgettextlib.dylib; sourceTree = SOURCE_ROOT; }; + 7368E40E1083930D00519ED0 /* libasprintf.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libasprintf.dylib; path = ../../ExternalPrograms/repository/lib/libasprintf.dylib; sourceTree = SOURCE_ROOT; }; + 7368E4621083ABF200519ED0 /* NumTransDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NumTransDialog.h; sourceTree = "<group>"; }; + 7368E4631083ABF200519ED0 /* NumTransDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NumTransDialog.cpp; sourceTree = "<group>"; }; 736FD2C80DA158A2009A47C2 /* tca_correct.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = tca_correct.cpp; sourceTree = "<group>"; }; 737E1C180EC9EC0300BA4D9B /* hugin_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hugin_config.h; sourceTree = "<group>"; }; 7388EAFB0F6BFB1B001E08FA /* ResetDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResetDialog.cpp; sourceTree = "<group>"; }; 7388EAFC0F6BFB1B001E08FA /* ResetDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResetDialog.h; sourceTree = "<group>"; }; + 738C044910A0A5D90061D144 /* AboutDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AboutDialog.cpp; sourceTree = "<group>"; }; + 738C044A10A0A5D90061D144 /* AboutDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutDialog.h; sourceTree = "<group>"; }; 739F846B0EC75402004771D6 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; 739F84780EC754CC004771D6 /* libwx_macu_gl-2.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libwx_macu_gl-2.8.dylib"; path = "lib/libwx_macu_gl-2.8.dylib"; sourceTree = "<group>"; }; 73BB09320FACC59E00B04997 /* PanoToolsUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PanoToolsUtils.h; sourceTree = "<group>"; }; @@ -2716,6 +2732,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 7368E41E108393D300519ED0 /* libintl.dylib in Frameworks */, 576901A70D24D56700A6AD01 /* HuginVigraImpex.framework in Frameworks */, 576901810D24D3F200A6AD01 /* libhugin_levmar.a in Frameworks */, 576901820D24D3F200A6AD01 /* libpano13.dylib in Frameworks */, @@ -3008,6 +3025,7 @@ 57E346DB0C4A8AB3006AA781 /* Carbon.framework in Frameworks */, 57E346DF0C4A8AB3006AA781 /* libpthread.dylib in Frameworks */, 57E346E00C4A8AB3006AA781 /* libiconv.dylib in Frameworks */, + 73437AC410BD9C7D0014F41D /* libintl.dylib in Frameworks */, 57E346E10C4A8AB3006AA781 /* libz.dylib in Frameworks */, 57E346E20C4A8AB3006AA781 /* libmx.dylib in Frameworks */, 57E346E30C4A8AC2006AA781 /* libpano13.dylib in Frameworks */, @@ -3553,6 +3571,11 @@ 5745FBE5094E1C4700E6B672 /* repository */ = { isa = PBXGroup; children = ( + 7368E40A1083930D00519ED0 /* libintl.dylib */, + 7368E40B1083930D00519ED0 /* libgettextsrc.dylib */, + 7368E40C1083930D00519ED0 /* libgettextpo.dylib */, + 7368E40D1083930D00519ED0 /* libgettextlib.dylib */, + 7368E40E1083930D00519ED0 /* libasprintf.dylib */, 570898E30D4CB635008949E7 /* gnumake */, 5769F7A10D239D6A00A6AD01 /* PTmender */, 5769F79F0D239D6A00A6AD01 /* PTblender */, @@ -4156,6 +4179,12 @@ 57E330FE0C4A8859006AA781 /* hugin */ = { isa = PBXGroup; children = ( + 738C044910A0A5D90061D144 /* AboutDialog.cpp */, + 738C044A10A0A5D90061D144 /* AboutDialog.h */, + 7368E4621083ABF200519ED0 /* NumTransDialog.h */, + 7368E4631083ABF200519ED0 /* NumTransDialog.cpp */, + 73411F131077B205001831AF /* HDRMergeOptionDialog.cpp */, + 73411F141077B205001831AF /* HDRMergeOptionDialog.h */, 73C0DC6B104715E500CB55B7 /* PreviewControlPointTool.cpp */, 73C0DC6C104715E500CB55B7 /* PreviewControlPointTool.h */, 73C0DC6D104715E500CB55B7 /* GreatCircles.h */, @@ -6086,7 +6115,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "sed -e \"s/\\${V_MAJOR}/$HUGIN_VERSION_MAJOR/\" \\\n -e \"s/\\${V_MINOR}/$HUGIN_VERSION_MINOR/\" \\\n -e \"s/\\${V_PATCH}/$HUGIN_VERSION_PATCH/\" \\\n -e \"s/\\${HUGIN_WC_REVISION}/$HUGIN_WC_REVISION/\" \\\n -e \"s/\\${HUGIN_PACKAGE_VERSION}/$HUGIN_PACKAGE_VERSION/\" \\\n -e \"s/^.*HUGIN_DEVELOPMENT_VERSION.*$/\\/\\/&/\" \\\n ../src/hugin_version.h.in.cmake > ../src/hugin_version.h\n\nif [ \"$HUGIN_DEVELOPMENT_VERSION\" -gt 0 ]\nthen\n echo \"\" >> ../src/hugin_version.h\n echo \"#ifndef HUGIN_DEVELOPMENT_VERSION\" >> ../src/hugin_version.h\n echo \"#define HUGIN_DEVELOPMENT_VERSION 1\" >> ../src/hugin_version.h\n echo \"#endif\" >> ../src/hugin_version.h\nfi"; + shellScript = "sed -e \"s/\\${V_MAJOR}/$HUGIN_VERSION_MAJOR/\" \\\n -e \"s/\\${V_MINOR}/$HUGIN_VERSION_MINOR/\" \\\n -e \"s/\\${V_PATCH}/$HUGIN_VERSION_PATCH/\" \\\n -e \"s/\\${HUGIN_WC_REVISION}/$HUGIN_WC_REVISION/\" \\\n -e \"s/\\${HUGIN_PACKAGE_VERSION}/$HUGIN_PACKAGE_VERSION/\" \\\n -e \"s/\\${DISPLAY_VERSION}/$HUGIN_PACKAGE_VERSION/\" \\\n -e \"s/\\${HUGIN_BUILDER}/$HUGIN_BUILDER/\" \\\n -e \"s/^.*HUGIN_DEVELOPMENT_VERSION.*$/\\/\\/&/\" \\\n ../src/hugin_version.h.in.cmake > ../src/hugin_version.h\n\nif [ \"$HUGIN_DEVELOPMENT_VERSION\" -gt 0 ]\nthen\n echo \"\" >> ../src/hugin_version.h\n echo \"#ifndef HUGIN_DEVELOPMENT_VERSION\" >> ../src/hugin_version.h\n echo \"#define HUGIN_DEVELOPMENT_VERSION 1\" >> ../src/hugin_version.h\n echo \"#endif\" >> ../src/hugin_version.h\nfi"; }; /* End PBXShellScriptBuildPhase section */ @@ -6495,6 +6524,9 @@ 57FD5826101B3E7C0065B9E9 /* CPDetectorConfig.cpp in Sources */, 73C0DC6F104715E500CB55B7 /* PreviewControlPointTool.cpp in Sources */, 73C0DC70104715E500CB55B7 /* GreatCircles.cpp in Sources */, + 73411F151077B205001831AF /* HDRMergeOptionDialog.cpp in Sources */, + 7368E4641083ABF200519ED0 /* NumTransDialog.cpp in Sources */, + 738C044B10A0A5D90061D144 /* AboutDialog.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7604,6 +7636,11 @@ ); INFOPLIST_FILE = "../mac/hugin_base-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../ExternalPrograms/repository/lib\""; PRODUCT_NAME = HuginBase; }; name = Debug; @@ -7619,6 +7656,11 @@ ); INFOPLIST_FILE = "../mac/hugin_base-Info.plist"; INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../ExternalPrograms/repository/lib\""; PRODUCT_NAME = HuginBase; }; name = Development; @@ -8698,8 +8740,10 @@ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../ExternalPrograms/repository/lib\""; PRODUCT_NAME = Hugin; }; name = Debug; @@ -8735,8 +8779,10 @@ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../ExternalPrograms/repository/lib\""; PRODUCT_NAME = Hugin; }; name = Development; @@ -8772,8 +8818,10 @@ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/ExternalPrograms/repository/lib\""; + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../ExternalPrograms/repository/lib\""; OTHER_LDFLAGS = ""; PRODUCT_NAME = Hugin; }; Modified: hugin/trunk/src/hugin_version.h.in.cmake =================================================================== --- hugin/trunk/src/hugin_version.h.in.cmake 2009-12-03 22:59:45 UTC (rev 4747) +++ hugin/trunk/src/hugin_version.h.in.cmake 2009-12-05 15:28:49 UTC (rev 4748) @@ -5,7 +5,7 @@ #define VERSION_PATCH ${V_PATCH} #define HUGIN_WC_REVISION ${HUGIN_WC_REVISION} -#ifdef _MSC_VER +#if defined (_MSC_VER) || (__APPLE__) #define PACKAGE_VERSION "${HUGIN_PACKAGE_VERSION} built by ${HUGIN_BUILDER}" #define DISPLAY_VERSION "${DISPLAY_VERSION} built by ${HUGIN_BUILDER}" #else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <har...@us...> - 2009-12-14 06:53:46
|
Revision: 4789 http://hugin.svn.sourceforge.net/hugin/?rev=4789&view=rev Author: harryvanderwolf Date: 2009-12-14 06:53:35 +0000 (Mon, 14 Dec 2009) Log Message: ----------- [OSX] fix a number of issues on OSX introduced by recent changes Modified Paths: -------------- hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj hugin/trunk/src/hugin1/hugin/AboutDialog.cpp hugin/trunk/src/hugin1/hugin/AboutDialog.h hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp hugin/trunk/src/hugin1/hugin/HDRMergeOptionDialog.cpp hugin/trunk/src/hugin1/hugin/NumTransDialog.cpp hugin/trunk/src/hugin1/hugin/ResetDialog.cpp Modified: hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj =================================================================== --- hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj 2009-12-13 18:29:14 UTC (rev 4788) +++ hugin/trunk/mac/Hugin.xcodeproj/project.pbxproj 2009-12-14 06:53:35 UTC (rev 4789) @@ -1089,6 +1089,10 @@ 73D24B8E1061561400B8A25D /* libtiff.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 577092FB06BD7388004058A1 /* libtiff.dylib */; }; 73D24B9B1061566B00B8A25D /* cpclean.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73D24B9A1061566B00B8A25D /* cpclean.cpp */; }; 73D24BB9106159BA00B8A25D /* CleanCP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73D24BB11061592C00B8A25D /* CleanCP.cpp */; }; + 73E488F910D5997300A083C8 /* CalculateOptimalROI.h in Headers */ = {isa = PBXBuildFile; fileRef = 73E488F710D5997300A083C8 /* CalculateOptimalROI.h */; }; + 73E488FA10D5997300A083C8 /* CalculateOptimalROI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73E488F810D5997300A083C8 /* CalculateOptimalROI.cpp */; }; + 73E488FB10D5997300A083C8 /* CalculateOptimalROI.h in Headers */ = {isa = PBXBuildFile; fileRef = 73E488F710D5997300A083C8 /* CalculateOptimalROI.h */; }; + 73E488FC10D5997300A083C8 /* CalculateOptimalROI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73E488F810D5997300A083C8 /* CalculateOptimalROI.cpp */; }; 73E79F100D674EAC00C07126 /* align_image_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5769F83B0D23A98400A6AD01 /* align_image_stack.cpp */; }; 73E79F120D674EAC00C07126 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 579895AB068E3002009F90BF /* libz.dylib */; }; 73E79F130D674EAC00C07126 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 57989581068E2FD7009F90BF /* libiconv.dylib */; }; @@ -2592,6 +2596,8 @@ 73D24B9A1061566B00B8A25D /* cpclean.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cpclean.cpp; sourceTree = "<group>"; }; 73D24BB11061592C00B8A25D /* CleanCP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CleanCP.cpp; sourceTree = "<group>"; }; 73D24BB21061592C00B8A25D /* CleanCP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CleanCP.h; sourceTree = "<group>"; }; + 73E488F710D5997300A083C8 /* CalculateOptimalROI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CalculateOptimalROI.h; path = algorithms/basic/CalculateOptimalROI.h; sourceTree = "<group>"; }; + 73E488F810D5997300A083C8 /* CalculateOptimalROI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CalculateOptimalROI.cpp; path = algorithms/basic/CalculateOptimalROI.cpp; sourceTree = "<group>"; }; 73E79F300D674EAC00C07126 /* align_image_stack */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = align_image_stack; sourceTree = BUILT_PRODUCTS_DIR; }; 73EAB5280E86CF120020D514 /* libboost_thread.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libboost_thread.a; path = ExternalPrograms/repository/lib/libboost_thread.a; sourceTree = SOURCE_ROOT; }; 73EAB5290E86CF120020D514 /* libexiv2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libexiv2.a; path = lib/libexiv2.a; sourceTree = "<group>"; }; @@ -4340,6 +4346,8 @@ 57EA83990C3A7A9500E4965E /* basic */ = { isa = PBXGroup; children = ( + 73E488F710D5997300A083C8 /* CalculateOptimalROI.h */, + 73E488F810D5997300A083C8 /* CalculateOptimalROI.cpp */, 57EA83C80C3A800100E4965E /* CalculateCPStatistics.cpp */, 57EA83C90C3A800100E4965E /* CalculateCPStatistics.h */, 57EA846F0C3A8AB400E4965E /* CalculateMeanExposure.cpp */, @@ -4764,6 +4772,7 @@ 576901510D24D3F200A6AD01 /* utils.h in Headers */, 73BB09400FACC71200B04997 /* PanoToolsUtils.h in Headers */, 73C0DADA1046E9B100CB55B7 /* ImageTransformsGPU.h in Headers */, + 73E488FB10D5997300A083C8 /* CalculateOptimalROI.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4944,6 +4953,7 @@ 576EDDAC0C3FFF820076A417 /* PTOptimizer.h in Headers */, 576EDDAE0C3FFF820076A417 /* PhotometricOptimizer.h in Headers */, 57565A7D0D088F2E00344F55 /* ComputeImageROI.h in Headers */, + 73E488F910D5997300A083C8 /* CalculateOptimalROI.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5671,7 +5681,7 @@ attributes = { BuildIndependentTargetsInParallel = NO; }; - buildConfigurationList = 571DA83D088E59C20058F246 /* Build configuration list for PBXProject "Hugin-test" */; + buildConfigurationList = 571DA83D088E59C20058F246 /* Build configuration list for PBXProject "Hugin" */; compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; knownRegions = ( @@ -6298,6 +6308,7 @@ 73BB093F0FACC71200B04997 /* PanoToolsUtils.cpp in Sources */, 73C0DAD21046E94100CB55B7 /* PanoToolsTransformGPU.cpp in Sources */, 73C0DAD91046E9B100CB55B7 /* ImageTransformsGPU.cpp in Sources */, + 73E488FC10D5997300A083C8 /* CalculateOptimalROI.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6571,6 +6582,7 @@ 576EDDAB0C3FFF820076A417 /* PTOptimizer.cpp in Sources */, 576EDDAD0C3FFF820076A417 /* PhotometricOptimizer.cpp in Sources */, 57565A7C0D088F2E00344F55 /* ComputeImageROI.cpp in Sources */, + 73E488FA10D5997300A083C8 /* CalculateOptimalROI.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9741,7 +9753,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 571DA83D088E59C20058F246 /* Build configuration list for PBXProject "Hugin-test" */ = { + 571DA83D088E59C20058F246 /* Build configuration list for PBXProject "Hugin" */ = { isa = XCConfigurationList; buildConfigurations = ( 5745FC2A094E1E6400E6B672 /* Debug */, Modified: hugin/trunk/src/hugin1/hugin/AboutDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AboutDialog.cpp 2009-12-13 18:29:14 UTC (rev 4788) +++ hugin/trunk/src/hugin1/hugin/AboutDialog.cpp 2009-12-14 06:53:35 UTC (rev 4789) @@ -26,10 +26,16 @@ */ #include "hugin/AboutDialog.h" + #include "common/wxPlatform.h" +#include "panoinc.h" #include "hugin/huginApp.h" #include <hugin_version.h> +// more vigra include if needed +#include "vigra/cornerdetection.hxx" +#include "vigra/localminmax.hxx" +#include "vigra_ext/Correlation.h" BEGIN_EVENT_TABLE(AboutDialog, wxDialog) Modified: hugin/trunk/src/hugin1/hugin/AboutDialog.h =================================================================== --- hugin/trunk/src/hugin1/hugin/AboutDialog.h 2009-12-13 18:29:14 UTC (rev 4788) +++ hugin/trunk/src/hugin1/hugin/AboutDialog.h 2009-12-14 06:53:35 UTC (rev 4789) @@ -29,6 +29,7 @@ #define _ABOUTDIALOG_H #include "panoinc_WX.h" +#include "panoinc.h" #include "hugin/MainFrame.h" Modified: hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-12-13 18:29:14 UTC (rev 4788) +++ hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-12-14 06:53:35 UTC (rev 4789) @@ -26,7 +26,13 @@ #include <config.h> +// often necessary before panoinc.h +#ifdef __APPLE__ #include "panoinc_WX.h" +#endif +// standard hugin include +#include "panoinc.h" +// both includes above need to come before other wx includes on OSX // hugin's #include "hugin/huginApp.h" @@ -45,8 +51,6 @@ #include <float.h> #include <vector> -// standard hugin include -#include "panoinc.h" // more vigra include if needed #include "vigra/cornerdetection.hxx" Modified: hugin/trunk/src/hugin1/hugin/HDRMergeOptionDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/HDRMergeOptionDialog.cpp 2009-12-13 18:29:14 UTC (rev 4788) +++ hugin/trunk/src/hugin1/hugin/HDRMergeOptionDialog.cpp 2009-12-14 06:53:35 UTC (rev 4789) @@ -28,6 +28,10 @@ #include "hugin/HDRMergeOptionDialog.h" #include "common/wxPlatform.h" +#ifdef __APPLE__ +#include "panoinc_WX.h" +#include "panoinc.h" +#endif #include <hugin/config_defaults.h> #include "hugin/huginApp.h" Modified: hugin/trunk/src/hugin1/hugin/NumTransDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/NumTransDialog.cpp 2009-12-13 18:29:14 UTC (rev 4788) +++ hugin/trunk/src/hugin1/hugin/NumTransDialog.cpp 2009-12-14 06:53:35 UTC (rev 4789) @@ -25,8 +25,18 @@ * */ +// often necessary before panoinc.h +#ifdef __APPLE__ +#include "panoinc_WX.h" +#endif +// standard hugin include +#include "panoinc.h" +// both includes above need to come before other wx includes on OSX + #include "hugin/NumTransDialog.h" #include "common/wxPlatform.h" +#include "base_wx/platform.h" +#include <wx/glcanvas.h> #include "hugin/huginApp.h" #include "hugin/CommandHistory.h" Modified: hugin/trunk/src/hugin1/hugin/ResetDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ResetDialog.cpp 2009-12-13 18:29:14 UTC (rev 4788) +++ hugin/trunk/src/hugin1/hugin/ResetDialog.cpp 2009-12-14 06:53:35 UTC (rev 4789) @@ -28,6 +28,7 @@ #include "hugin/ResetDialog.h" #include "common/wxPlatform.h" +#include "panoinc.h" #include "hugin/huginApp.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jl...@us...> - 2009-12-23 18:11:01
|
Revision: 4829 http://hugin.svn.sourceforge.net/hugin/?rev=4829&view=rev Author: jlegg Date: 2009-12-23 18:09:40 +0000 (Wed, 23 Dec 2009) Log Message: ----------- Merge the first half of the gsoc2009_layout branch. command: svn merge -r 3873:4152 ../../gsoc/gsoc2009_layout/ . Conflict discovered in 'src/hugin1/hugin/MeshManager.h'. resolved Conflict discovered in 'src/hugin1/hugin/CMakeLists.txt'. resolved Conflict discovered in 'src/hugin1/hugin/OptimizePanel.h'. resolved Conflict discovered in 'src/hugin_base/panodata/Panorama.cpp'. There are changes in trunk to free old_locale in heavily modified code, line around line 2052 and onwards. A large section of code was turned into a macro in gsoc2009_layout, the old_locale changes I integrated into this section. This was the only change I made to the large amount of conflicting code from trunk. I couldn't see anything else on http://hugin.svn.sourceforge.net/viewvc/hugin/hugin/trunk/src/hugin_base/panodata/Panorama.cpp?r1=4564&r2=3202 in this section. Conflict discovered in 'src/hugin_base/panodata/SrcPanoImage.cpp' Requires image variable ExifFocalLength35, default 0. Resolved. Conflict discovered in 'src/hugin_base/panodata/SrcPanoImage.h' Required the addition of image variables to image_variables.h and ImageVariableTranslate.h: double ExifFocalLength35; default 0, no PTO code. double ExifExposureTime; no default set in trunk but I used 0, no PTO code. std::string ExifDate; no default set explicitly in trunk but I used "", no PTO code. Removed {get/set}{ExifFocalLength35/ExifExposureTime/ExifDate}. These functions are generated by the image variable metaprogramming. Changed m_exifDate to m_ExifDate in const int getExifDateTime(struct tm* datetime) const (line 310). Variables begin with a capital so get and set functions have the capital. Modified Paths: -------------- hugin/trunk/src/hugin1/PT/PanoCommand.h hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp hugin/trunk/src/hugin1/hugin/AssistantPanel.h hugin/trunk/src/hugin1/hugin/CMakeLists.txt hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp hugin/trunk/src/hugin1/hugin/CropPanel.cpp hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h hugin/trunk/src/hugin1/hugin/GLViewer.cpp hugin/trunk/src/hugin1/hugin/GLViewer.h hugin/trunk/src/hugin1/hugin/ImagesList.cpp hugin/trunk/src/hugin1/hugin/ImagesList.h hugin/trunk/src/hugin1/hugin/LensPanel.cpp hugin/trunk/src/hugin1/hugin/LensPanel.h hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/MeshManager.cpp hugin/trunk/src/hugin1/hugin/MeshManager.h hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp hugin/trunk/src/hugin1/hugin/OptimizePanel.h hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.cpp hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.h hugin/trunk/src/hugin1/hugin/PanoDruid.cpp hugin/trunk/src/hugin1/hugin/ViewState.cpp hugin/trunk/src/hugin1/hugin/wxPanoCommand.cpp hugin/trunk/src/hugin1/hugin/xrc/lens_panel.xrc hugin/trunk/src/hugin1/hugin/xrc/preview_frame.xrc hugin/trunk/src/hugin_base/CMakeLists.txt hugin/trunk/src/hugin_base/algorithms/basic/CalculateCPStatistics.cpp hugin/trunk/src/hugin_base/algorithms/optimizer/PTOptimizer.cpp hugin/trunk/src/hugin_base/algorithms/optimizer/PTOptimizer.h hugin/trunk/src/hugin_base/algorithms/optimizer/PhotometricOptimizer.cpp hugin/trunk/src/hugin_base/hugin_math/hugin_math.h hugin/trunk/src/hugin_base/huginapp/CachedImageRemapper.cpp hugin/trunk/src/hugin_base/nona/ImageRemapper.h hugin/trunk/src/hugin_base/nona/SpaceTransform.cpp hugin/trunk/src/hugin_base/nona/SpaceTransform.h hugin/trunk/src/hugin_base/panodata/PanoImage.h hugin/trunk/src/hugin_base/panodata/Panorama.cpp hugin/trunk/src/hugin_base/panodata/Panorama.h hugin/trunk/src/hugin_base/panodata/PanoramaData.h hugin/trunk/src/hugin_base/panodata/SrcPanoImage.cpp hugin/trunk/src/hugin_base/panodata/SrcPanoImage.h hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h hugin/trunk/src/tools/align_image_stack.cpp hugin/trunk/src/tools/tca_correct.cpp Added Paths: ----------- hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp hugin/trunk/src/hugin1/hugin/LayoutRemapper.h hugin/trunk/src/hugin1/hugin/xrc/data/preview_layout.png hugin/trunk/src/hugin1/hugin/xrc/data/preview_layout.svg hugin/trunk/src/hugin_base/panodata/ImageVariable.h hugin/trunk/src/hugin_base/panodata/ImageVariableGroup.cpp hugin/trunk/src/hugin_base/panodata/ImageVariableGroup.h hugin/trunk/src/hugin_base/panodata/ImageVariableTranslate.h hugin/trunk/src/hugin_base/panodata/StandardImageVariableGroups.cpp hugin/trunk/src/hugin_base/panodata/StandardImageVariableGroups.h hugin/trunk/src/hugin_base/panodata/image_variables.h Property Changed: ---------------- hugin/trunk/ hugin/trunk/mac/Hugin.xcodeproj/ hugin/trunk/src/hugin1/hugin/xrc/about.xrc Property changes on: hugin/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /hugin/branches/gsoc2008_batch_processing:3081-3398 /hugin/branches/gsoc2009_deghosting:3873-4533 + /hugin/branches/gsoc2008_batch_processing:3081-3398 /hugin/branches/gsoc2009_deghosting:3873-4533 /hugin/branches/gsoc2009_layout:3874-4152 Property changes on: hugin/trunk/mac/Hugin.xcodeproj ___________________________________________________________________ Modified: svn:mergeinfo - /hugin/trunk/mac/Hugin.xcodeproj:4748 + /hugin/branches/gsoc2009_layout/mac/Hugin.xcodeproj:3874-4152 /hugin/trunk/mac/Hugin.xcodeproj:4748 Modified: hugin/trunk/src/hugin1/PT/PanoCommand.h =================================================================== --- hugin/trunk/src/hugin1/PT/PanoCommand.h 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/PT/PanoCommand.h 2009-12-23 18:09:40 UTC (rev 4829) @@ -30,6 +30,7 @@ //#include "PanoImage.h" #include "Panorama.h" //#include "PanoToolsInterface.h" +#include <hugin_base/panodata/StandardImageVariableGroups.h> @@ -92,7 +93,7 @@ class AddImagesCmd : public PanoCommand { public: - AddImagesCmd(Panorama & pano, const std::vector<PanoImage> & images) + AddImagesCmd(Panorama & pano, const std::vector<SrcPanoImage> & images) : PanoCommand(pano), imgs(images) { }; @@ -102,7 +103,7 @@ VariableMap var; fillVariableMap(var); - std::vector<PanoImage>::const_iterator it; + std::vector<SrcPanoImage>::const_iterator it; for (it = imgs.begin(); it != imgs.end(); ++it) { pano.addImage(*it,var); } @@ -117,7 +118,7 @@ } private: - std::vector<PanoImage> imgs; + std::vector<SrcPanoImage> imgs; }; @@ -477,151 +478,6 @@ //========================================================================= - /** update LensVariables for one lens */ - class SetLensVariableCmd : public PanoCommand - { - public: - SetLensVariableCmd(Panorama & p, int lens, const LensVarMap & var) - : PanoCommand(p), lensNr(lens), vars(var) - { }; - - virtual bool processPanorama(Panorama& pano) - { - LensVarMap::const_iterator it; - for (it = vars.begin(); it != vars.end(); ++it) { - pano.updateLensVariable(lensNr, it->second); - } - pano.changeFinished(); - - return true; - } - - virtual std::string getName() const - { - return "set lens variable"; - } - - private: - unsigned lensNr; - LensVarMap vars; - }; - - - //========================================================================= - //========================================================================= - - - /** update LensVariables for multiple lenses */ - class SetLensesVariableCmd : public PanoCommand - { - public: - SetLensesVariableCmd(Panorama & p, UIntSet lenses, const std::vector<LensVarMap> & var) - : PanoCommand(p), lensNrs(lenses), vars(var) - { }; - - virtual bool processPanorama(Panorama& pano) - { - assert(lensNrs.size() == vars.size()); - std::vector<LensVarMap>::iterator vit = vars.begin(); - for (UIntSet::iterator lit = lensNrs.begin(); lit != lensNrs.end(); ++lit, ++vit) { - LensVarMap::const_iterator it; - for (it = (*vit).begin(); it != (*vit).end(); ++it) { - pano.updateLensVariable(*lit, it->second); - } - pano.changeFinished(); - } - return true; - } - - virtual std::string getName() const - { - return "set lens variable"; - } - - private: - UIntSet lensNrs; - std::vector<LensVarMap> vars; - }; - - - //========================================================================= - //========================================================================= - - - /** update LensVariables for one lens */ - class SetLensVariablesCmd : public PanoCommand - { - public: - SetLensVariablesCmd(Panorama & p, UIntSet lenses, const std::vector<LensVarMap> & var) - : PanoCommand(p), lensNrs(lenses), vars(var) - { }; - - virtual bool processPanorama(Panorama& pano) - { - for (UIntSet::iterator itl = lensNrs.begin(); - itl != lensNrs.end(); ++itl) - { - // lens var map it. - LensVarMap::const_iterator it; - for (it = vars[*itl].begin(); it != vars[*itl].end(); ++it) { - pano.updateLensVariable(*itl, it->second); - } - } - pano.changeFinished(); - - return true; - } - - virtual std::string getName() const - { - return "set lens variables"; - } - - private: - UIntSet lensNrs; - std::vector<LensVarMap> vars; - }; - - - //========================================================================= - //========================================================================= - - /** change the lens for an image */ - class SetImageLensCmd : public PanoCommand - { - public: - SetImageLensCmd(Panorama & p, const UIntSet & imgNrs, int lensNr) - : PanoCommand(p), - imgNrs(imgNrs), lensNr(lensNr) - { }; - - virtual bool processPanorama(Panorama& pano) - { - for (UIntSet::iterator it = imgNrs.begin(); - it != imgNrs.end(); ++it) - { - pano.setLens(*it, lensNr); - } - pano.changeFinished(); - - return true; - } - - virtual std::string getName() const - { - return "set lens"; - } - - private: - UIntSet imgNrs; - unsigned int lensNr; - }; - - - //========================================================================= - //========================================================================= - - /** center panorama horizontically */ class CenterPanoCmd : public PanoCommand { @@ -836,141 +692,10 @@ }; - //========================================================================= - //========================================================================= - - /** add a new lens */ - class AddLensCmd : public PanoCommand - { - public: - AddLensCmd(Panorama & p, const Lens & lens) - : PanoCommand(p), lens(lens) - { }; - - virtual bool processPanorama(Panorama& pano) - { - pano.addLens(lens); - pano.changeFinished(); - - return true; - } - - virtual std::string getName() const - { - return "addLens"; - } - - private: - Lens lens; - }; - - //========================================================================= //========================================================================= - - /** add a new lens to some images */ - class AddNewLensToImagesCmd : public PanoCommand - { - public: - AddNewLensToImagesCmd(Panorama & p, const Lens & lens, const UIntSet & imgs) - : PanoCommand(p), lens(lens), imgNrs(imgs) - { }; - - virtual bool processPanorama(Panorama& pano) - { - unsigned int lnr = pano.addLens(lens); - for (UIntSet::iterator it = imgNrs.begin(); - it != imgNrs.end(); ++it) - { - pano.setLens(*it, lnr); - } - pano.changeFinished(); - - return true; - } - - virtual std::string getName() const - { - return "addLens and images"; - } - - private: - Lens lens; - UIntSet imgNrs; - }; - - - //========================================================================= - //========================================================================= - - - /** change lens */ - class ChangeLensCmd : public PanoCommand - { - public: - ChangeLensCmd(Panorama & p, unsigned int lensNr, const Lens & lens) - : PanoCommand(p), lensNr(lensNr), newLens(lens) - { }; - - virtual bool processPanorama(Panorama& pano) - { - pano.updateLens(lensNr, newLens); - pano.changeFinished(); - - return true; - } - - virtual std::string getName() const - { - return "change lens"; - } - - private: - unsigned int lensNr; - Lens newLens; - }; - - - //========================================================================= - //========================================================================= - - /** change lenses */ - class ChangeLensesCmd : public PanoCommand - { - public: - ChangeLensesCmd(Panorama & p, UIntSet & lNr, const LensVector & lenses) - : PanoCommand(p), change(lNr), vect(lenses) - { }; - - virtual bool processPanorama(Panorama& pano) - { - UIntSet::iterator it; - LensVector::const_iterator v_it = vect.begin(); - for (it = change.begin(); it != change.end(); ++it) { - pano.updateLens(*it, *v_it); - v_it++; - } - pano.changeFinished(); - - return true; - } - - virtual std::string getName() const - { - return "change lens"; - } - - private: - UIntSet change; - LensVector vect; - }; - - - //========================================================================= - //========================================================================= - /** set active images */ class SetActiveImagesCmd : public PanoCommand { @@ -1266,33 +991,21 @@ class SetVigCorrCmd : public PanoCommand { public: - SetVigCorrCmd(Panorama & p, unsigned int lensNr, + SetVigCorrCmd(Panorama & p, unsigned int imageNr, unsigned int vigCorrMode, std::vector<double> & coeff, const std::string & flatfield) - : PanoCommand(p), m_lensNr(lensNr), + : PanoCommand(p), m_imageNr(imageNr), m_mode(vigCorrMode), m_coeff(coeff), m_flat(flatfield) { }; virtual bool processPanorama(Panorama& pano) { // set data inside panorama options - for (unsigned int i = 0; i < pano.getNrOfImages(); i++) { - if (pano.getImage(i).getLensNr() == m_lensNr) { - // modify panorama options. - PT::ImageOptions opts = pano.getImage(i).getOptions(); - opts.m_vigCorrMode = m_mode; - opts.m_flatfield = m_flat; - pano.setImageOptions(i, opts); - } - } - // set new correction variables - const char *vars[] = {"Va", "Vb", "Vc", "Vd", "Vx", "Vy"}; - for (unsigned int i=0; i < 6 ; i++) { - LensVariable lv = const_map_get(pano.getLens(m_lensNr).variables, vars[i]); - lv.setValue(m_coeff[i]); - lv.setLinked(true); - pano.updateLensVariable(m_lensNr, lv); - } + // modify panorama options. + PT::ImageOptions opts = pano.getImage(m_imageNr).getOptions(); + opts.m_vigCorrMode = m_mode; + opts.m_flatfield = m_flat; + pano.setImageOptions(m_imageNr, opts); pano.changeFinished(); return true; @@ -1305,7 +1018,7 @@ private: ImageOptions options; - unsigned int m_lensNr; + unsigned int m_imageNr; unsigned int m_mode; std::vector<double> m_coeff; std::string m_flat; @@ -1343,6 +1056,252 @@ }; + //========================================================================= + //========================================================================= + + + /** Change the lens of an image + */ + class ChangeLensNumberCmd : public PanoCommand + { + public: + ChangeLensNumberCmd(Panorama & p, + UIntSet image_numbers, + std::size_t new_lens_number) + : PanoCommand(p), + image_numbers(image_numbers), + new_lens_number(new_lens_number) + { }; + + virtual bool processPanorama(Panorama& pano) + { + // it might change as we are setting them + std::size_t new_new_lens_number = new_lens_number; + HuginBase::StandardImageVariableGroups variable_groups(pano); + HuginBase::ImageVariableGroup & lenses = variable_groups.getLenses(); + for (UIntSet::iterator it = image_numbers.begin(); + it != image_numbers.end(); it++) + { + lenses.switchParts(*it, new_new_lens_number); + // update the lens number if it changes. + new_new_lens_number = lenses.getPartNumber(*it); + } + pano.changeFinished(); + return true; + } + + virtual std::string getName() const + { + return "Change lens number"; + } + + private: + UIntSet image_numbers; + std::size_t new_lens_number; + }; + + //========================================================================= + //========================================================================= + + + /** Change the linking on a lens image variable for some set of images. + */ + class ChangeLensVariableLinkingCmd : public PanoCommand + { + public: + ChangeLensVariableLinkingCmd(Panorama & p, + UIntSet image_numbers, + HuginBase::ImageVariableGroup::ImageVariableEnum variable, + bool new_linked_state) + : PanoCommand(p), + image_numbers(image_numbers), + variable(variable), + new_linked_state(new_linked_state) + { }; + + virtual bool processPanorama(Panorama& pano) + { + HuginBase::StandardImageVariableGroups variable_groups(pano); + HuginBase::ImageVariableGroup & lenses = variable_groups.getLenses(); + if (new_linked_state) + { + for (UIntSet::iterator it = image_numbers.begin(); + it != image_numbers.end(); it++) + { + // link the variable + lenses.linkVariableImage(variable, *it); + } + } else { + for (UIntSet::iterator it = image_numbers.begin(); + it != image_numbers.end(); it++) + { + // unlink the variable + lenses.unlinkVariableImage(variable, *it); + lenses.updatePartNumbers(); + } + } + pano.changeFinished(); + return true; + } + + virtual std::string getName() const + { + return "Change lens variable linkage"; + } + + private: + UIntSet image_numbers; + HuginBase::ImageVariableGroup::ImageVariableEnum variable; + bool new_linked_state; + }; + + + //========================================================================= + //========================================================================= + + + /** Link a set of lens variables for some lens. + */ + class LinkLensVarsCmd : public PanoCommand + { + public: + LinkLensVarsCmd(Panorama & p, + std::size_t lens_number, + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> variables + ) + : PanoCommand(p), + lens_number(lens_number), + variables(variables) + { }; + + virtual bool processPanorama(Panorama& pano) + { + HuginBase::StandardImageVariableGroups variable_groups(pano); + HuginBase::ImageVariableGroup & lenses = variable_groups.getLenses(); + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum>::iterator it; + for (it = variables.begin(); it != variables.end(); it++) + { + lenses.linkVariablePart(*it, lens_number); + } + pano.changeFinished(); + return true; + } + + virtual std::string getName() const + { + return "Link lens variables"; + } + + private: + std::size_t lens_number; + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> variables; + }; + //========================================================================= + //========================================================================= + +/// @todo avoid copying image data in processPanorama +#define image_variable( name, type, default_value )\ + class ChangeImage##name##Cmd : public PanoCommand\ + {\ + public:\ + ChangeImage##name##Cmd(Panorama & p,\ + UIntSet image_number,\ + type value)\ + : PanoCommand(p),\ + image_numbers(image_numbers),\ + value(value)\ + { };\ + \ + virtual bool processPanorama(Panorama& pano)\ + {\ + for (UIntSet::iterator it = image_numbers.begin();\ + it != image_numbers.end(); it++)\ + {\ + HuginBase::SrcPanoImage img = pano.getSrcImage(*it);\ + img.set##name(value);\ + pano.setSrcImage(*it, img);\ + }\ + pano.changeFinished();\ + return true;\ + }\ + \ + virtual std::string getName() const\ + {\ + return "Change image's " #name;\ + }\ + private:\ + UIntSet image_numbers;\ + type value;\ + }; +#include <hugin_base/panodata/image_variables.h> +#undef image_variable + + + //========================================================================= + //========================================================================= + + + /** Make a new part in a ImageVariableGroup for a set of images, given the + * variables that make up the group. + */ + class NewPartCmd : public PanoCommand + { + public: + /** Constructor. + * @param p Panorama to act up + * @param image_numbers A set of images which should all be in a single + * new group. + * @param vars The set of image variables that make up the group. Should + * be got from StandardVariableGroups. + */ + NewPartCmd( Panorama & p, + UIntSet image_numbers, + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> vars) + : PanoCommand(p), + image_numbers(image_numbers), + vars(vars) + { } + + virtual bool processPanorama(Panorama& pano) + { + // unlink all the variables in the first image. + DEBUG_ASSERT (image_numbers.size() > 0); + unsigned int image_index = *image_numbers.begin(); + for (std::set<HuginBase::ImageVariableGroup::ImageVariableEnum>::iterator it = vars.begin(); + it != vars.end(); it++) + { + switch (*it) + { +#define image_variable( name, type, default_value )\ + case HuginBase::ImageVariableGroup::IVE_##name:\ + pano.unlinkImageVariable##name(image_index);\ + break; +#include <hugin_base/panodata/image_variables.h> +#undef image_variable + } + } + // now the first image should have a new part in the group. + // we want to switch the rest of the images to the new part. + HuginBase::ImageVariableGroup group(vars, pano); + for (UIntSet::iterator it = ++image_numbers.begin(); + it != image_numbers.end(); it++) + { + std::size_t part_number = group.getPartNumber(image_index); + group.switchParts(*it, part_number); + } + pano.changeFinished(); + return true; + } + + virtual std::string getName() const + { + return "New Part"; + } + + private: + UIntSet image_numbers; + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> vars; + }; } // namespace PT #endif // _PANOCOMMAND_H Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -192,6 +192,7 @@ void AssistantPanel::Init(Panorama * pano) { m_pano = pano; + m_variable_groups = new HuginBase::StandardImageVariableGroups(*m_pano); // observe the panorama m_pano->addObserver(this); } @@ -202,6 +203,7 @@ m_focalLengthText->PopEventHandler(true); m_cropFactorText->PopEventHandler(true); m_pano->removeObserver(this); + delete m_variable_groups; DEBUG_TRACE("dtor end"); } @@ -233,6 +235,8 @@ void AssistantPanel::panoramaChanged(PT::Panorama &pano) { DEBUG_TRACE(""); + + m_variable_groups->update(); if (m_druid) m_druid->Update(*m_pano); @@ -272,7 +276,7 @@ wxString imgMsg = wxString::Format(_("%d images loaded."), pano.getNrOfImages()); - const Lens & lens = pano.getLens(0); + const Lens & lens = m_variable_groups->getLens(0); /* if (!lens.m_hasExif) { @@ -650,17 +654,29 @@ // TODO: photometric optimisation. // first, ensure that vignetting and response coefficients are linked - const char * varnames[] = {"Va", "Vb", "Vc", "Vd", "Vx", "Vy", - "Ra", "Rb", "Rc", "Rd", "Re", 0}; - - for (size_t i = 0; i < optPano.getNrOfLenses(); i++) { - const Lens & l = optPano.getLens(i); - for (const char ** v = varnames; *v; v++) { - LensVariable var = const_map_get(l.variables, *v); - if (!var.isLinked()) { - var.setLinked(); - optPano.updateLensVariable(i, var); + const HuginBase::ImageVariableGroup::ImageVariableEnum vars[] = { + HuginBase::ImageVariableGroup::IVE_EMoRParams, + HuginBase::ImageVariableGroup::IVE_ResponseType, + HuginBase::ImageVariableGroup::IVE_VigCorrMode, + HuginBase::ImageVariableGroup::IVE_RadialVigCorrCoeff, + HuginBase::ImageVariableGroup::IVE_RadialVigCorrCenterShift + }; + // keep a list of commands needed to fix it: + HuginBase::ImageVariableGroup & lenses = m_variable_groups->getLenses(); + for (size_t i = 0; i < lenses.getNumberOfParts(); i++) { + for (int v = 0; v < 5; v++) + { + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> links_needed; + if (lenses.getVarLinkedInPart(vars[v], i)) + { + links_needed.insert(vars[v]); } + if (!links_needed.empty()) + { + GlobalCmdHist::getInstance().addCommand( + new PT::LinkLensVarsCmd(*m_pano, i, links_needed) + ); + } } } @@ -799,22 +815,35 @@ void AssistantPanel::OnLoadLens(wxCommandEvent & e) { unsigned int imgNr = 0; - unsigned int lensNr = m_pano->getImage(imgNr).getLensNr(); - Lens lens = m_pano->getLens(lensNr); + unsigned int lensNr = m_variable_groups->getLenses().getPartNumber(imgNr); + Lens lens = m_variable_groups->getLensForImage(imgNr); VariableMap vars = m_pano->getImageVariables(imgNr); ImageOptions imgopts = m_pano->getImage(imgNr).getOptions(); if (LoadLensParametersChoose(this, lens, vars, imgopts)) { + /** @todo maybe this isn't the best way to load the lens data. + * Check with LoadLensParamtersChoose how this is done, and use only + * the image variables, rather than merging in the lens ones. + */ + for (LensVarMap::iterator it = lens.variables.begin(); + it != lens.variables.end(); it++) + { + vars.insert(pair<std::string, HuginBase::Variable>( + it->first, + HuginBase::Variable(it->second.getName(), + it->second.getValue() ) + )); + } + /** @todo I think the sensor size should be copied over, + * but SrcPanoImage doesn't have such a variable yet. + */ GlobalCmdHist::getInstance().addCommand( - new PT::ChangeLensCmd(*m_pano, lensNr, lens) - ); - GlobalCmdHist::getInstance().addCommand( new PT::UpdateImageVariablesCmd(*m_pano, imgNr, vars) ); - // get all images with the current lens. + // get all images with the current lens. UIntSet imgs; for (unsigned int i = 0; i < m_pano->getNrOfImages(); i++) { - if (m_pano->getImage(i).getLensNr() == lensNr) { + if (m_variable_groups->getLenses().getPartNumber(i) == lensNr) { imgs.insert(i); } } @@ -856,15 +885,22 @@ { // uses enum Lens::LensProjectionFormat from PanoramaMemento.h int var = m_lensTypeChoice->GetSelection(); - Lens lens = m_pano->getLens(0); + Lens lens = m_variable_groups->getLens(0); if (lens.getProjection() != (Lens::LensProjectionFormat) var) { //double crop = lens.getCropFactor(); double fl = lens.getFocalLength(); - lens.setProjection((Lens::LensProjectionFormat) (var)); - lens.setFocalLength(fl); + UIntSet imgs; + imgs.insert(0); GlobalCmdHist::getInstance().addCommand( - new PT::ChangeLensCmd(*m_pano, 0, lens ) + new PT::ChangeImageProjectionCmd( + *m_pano, + imgs, + (HuginBase::SrcPanoImage::Projection) var + ) ); + GlobalCmdHist::getInstance().addCommand( + new PT::ChangeImageExifFocalLengthCmd(*m_pano, imgs, fl) + ); } } @@ -879,23 +915,12 @@ if (!str2double(text, val)) { return; } - - + // always change first lens... - Lens lens = m_pano->getLens(0); - lens.setFocalLength(val); - LensVariable v = map_get(lens.variables, "v"); - LensVarMap lmv; - lmv.insert(make_pair("v", v)); - - std::vector<LensVarMap> lvars; - UIntSet lenses; - for (unsigned i=0; i < m_pano->getNrOfLenses(); i++) { - lenses.insert(i); - lvars.push_back(lmv); - } + UIntSet images0; + images0.insert(0); GlobalCmdHist::getInstance().addCommand( - new PT::SetLensesVariableCmd(*m_pano, lenses, lvars) + new PT::ChangeImageExifFocalLengthCmd(*m_pano, images0, val) ); } @@ -909,30 +934,27 @@ } // always change first lens... - Lens lens = m_pano->getLens(0); - double fl = lens.getFocalLength(); - lens.setCropFactor(val); - lens.setFocalLength(fl); - LensVariable v = map_get(lens.variables, "v"); - LensVarMap lmv; - lmv.insert(make_pair("v", v)); - - std::vector<LensVarMap> lvars; - UIntSet lenses; - for (unsigned i=0; i < m_pano->getNrOfLenses(); i++) { - lenses.insert(i); - lvars.push_back(lmv); + + double fl = m_pano->getImage(0).getExifFocalLength(); + + UIntSet images; + for (unsigned i=0; i < m_pano->getNrOfImages(); i++) { + images.insert(i); } GlobalCmdHist::getInstance().addCommand( - new PT::SetLensesVariableCmd(*m_pano, lenses, lvars) + new PT::ChangeImageExifCropFactorCmd(*m_pano, images, val) ); + /// @todo why are we copying the focal length from the first image? + GlobalCmdHist::getInstance().addCommand( + new PT::ChangeImageExifFocalLengthCmd(*m_pano, images, fl) + ); + // TODO: update crop factor as well without destroying other information. - SrcPanoImage img0 = m_pano->getSrcImage(0); - img0.setExifCropFactor(val); + UIntSet imgs; + imgs.insert(0); GlobalCmdHist::getInstance().addCommand( - new PT::UpdateSrcImageCmd(*m_pano, 0, img0) + new PT::ChangeImageExifCropFactorCmd(*m_pano, imgs, val) ); - } IMPLEMENT_DYNAMIC_CLASS(AssistantPanel, wxPanel) Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.h =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.h 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.h 2009-12-23 18:09:40 UTC (rev 4829) @@ -24,6 +24,8 @@ #ifndef _ASSISTANTPANEL_H #define _ASSISTANTPANEL_H +#include <hugin_base/panodata/StandardImageVariableGroups.h> + using namespace PT; class PanoDruid; @@ -67,6 +69,7 @@ /** the model */ Panorama * m_pano; + HuginBase::StandardImageVariableGroups * m_variable_groups; // event handlers void OnLoadImages( wxCommandEvent & e ); Modified: hugin/trunk/src/hugin1/hugin/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/CMakeLists.txt 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/CMakeLists.txt 2009-12-23 18:09:40 UTC (rev 4829) @@ -34,7 +34,7 @@ OutputProjectionInfo.cpp PreviewToolHelper.cpp PreviewTool.cpp PreviewCropTool.cpp PreviewDragTool.cpp PreviewIdentifyTool.cpp PreviewDifferenceTool.cpp PreviewPanoMaskTool.cpp PreviewControlPointTool.cpp -GreatCircles.cpp AboutDialog.cpp) +GreatCircles.cpp AboutDialog.cpp LayoutRemapper.cpp) IF(APPLE) if (MAC_SELF_CONTAINED_BUNDLE) Modified: hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -752,9 +752,9 @@ FDiff2D op; op = EstimatePoint(FDiff2D(p.x, p.y), left); // check if point is in image. - const PanoImage & pImg = m_pano->getImage(otherImgNr); - if (p.x < (int) pImg.getWidth() && p.x >= 0 - && p.y < (int) pImg.getHeight() && p.y >= 0) + const SrcPanoImage & pImg = m_pano->getImage(otherImgNr); + if (p.x < (int) pImg.getSize().width() && p.x >= 0 + && p.y < (int) pImg.getSize().height() && p.y >= 0) { otherImg->setNewPoint(op); // if fine-tune is checked, run a fine-tune session as well. @@ -764,7 +764,7 @@ FDiff2D newPoint = otherImg->getNewPoint(); long templWidth = wxConfigBase::Get()->Read(wxT("/Finetune/TemplateSize"), HUGIN_FT_TEMPLATE_SIZE); - const PanoImage & img = m_pano->getImage(thisImgNr); + const SrcPanoImage & img = m_pano->getImage(thisImgNr); double sAreaPercent = wxConfigBase::Get()->Read(wxT("/Finetune/SearchAreaPercent"),HUGIN_FT_SEARCH_AREA_PERCENT); int sWidth = (int) (img.getWidth() * sAreaPercent / 100.0); CorrelationResult corrPoint; @@ -887,7 +887,7 @@ FDiff2D newPoint = otherImg->getNewPoint(); long templWidth = wxConfigBase::Get()->Read(wxT("/Finetune/TemplateSize"),HUGIN_FT_TEMPLATE_SIZE); - const PanoImage & img = m_pano->getImage(thisImgNr); + const SrcPanoImage & img = m_pano->getImage(thisImgNr); double sAreaPercent = wxConfigBase::Get()->Read(wxT("/Finetune/SearchAreaPercent"), HUGIN_FT_SEARCH_AREA_PERCENT); int sWidth = (int) (img.getWidth() * sAreaPercent / 100.0); @@ -995,7 +995,7 @@ wxConfigBase::Get()->Read(wxT("/Finetune/CurvThreshold"),&curvThresh, HUGIN_FT_CURV_THRESHOLD); - const PanoImage & img = m_pano->getImage(subjImgNr); + const SrcPanoImage & img = m_pano->getImage(subjImgNr); // fixme: just cutout suitable gray // wxImage wxSubjImg; @@ -2341,7 +2341,7 @@ FDiff2D CPEditorPanel::EstimatePoint(const FDiff2D & p, bool left) { int imgNr = left? m_rightImageNr : m_leftImageNr; - const PanoImage & img = m_pano->getImage(imgNr); + const SrcPanoImage & img = m_pano->getImage(imgNr); FDiff2D t; if (currentPoints.size() == 0) { DEBUG_WARN("Cannot estimate position without at least one point"); Modified: hugin/trunk/src/hugin1/hugin/CropPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CropPanel.cpp 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/CropPanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -183,7 +183,7 @@ // transfer panorama state to our state void CropPanel::Pano2Display(int imgNr) { - const PanoImage & img = m_pano->getImage(imgNr); + const SrcPanoImage & img = m_pano->getImage(imgNr); std::string newImgFile = img.getFilename(); // check if we need to display a new image @@ -193,14 +193,13 @@ m_Canvas->SetImage(imgV); m_currentImageFile == newImgFile; } - m_imgOpts = img.getOptions(); + + int dx = roundi(img.getRadialDistortionCenterShift().x); + int dy = roundi(img.getRadialDistortionCenterShift().y); + /// @todo can this be done with img.getSize() / 2 + img.getRadialDistortionCenterShift()? + m_center = vigra::Point2D(img.getSize().width()/2 + dx, img.getSize().height()/2 + dy); + m_circular = img.getProjection() == SrcPanoImage::CIRCULAR_FISHEYE; - VariableMap vars = m_pano->getImageVariables(imgNr); - int dx = roundi(map_get(vars,"d").getValue()); - int dy = roundi(map_get(vars,"e").getValue()); - m_center = vigra::Point2D(img.getWidth()/2 + dx, img.getHeight()/2 + dy); - m_circular= m_pano->getLens(img.getLensNr()).getProjection() == PT::Lens::CIRCULAR_FISHEYE; - UpdateDisplay(); } @@ -212,7 +211,8 @@ for (UIntSet::iterator it = m_selectedImages.begin(); it != m_selectedImages.end(); ++it) { - const PanoImage & img = m_pano->getImage(*it); + const SrcPanoImage & img = m_pano->getImage(*it); + /// @todo use SrcImagePano.get*() instead of opt. ImageOptions opt = img.getOptions(); opt.cropRect = m_imgOpts.cropRect; opt.autoCenterCrop = m_imgOpts.autoCenterCrop; Modified: hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -88,6 +88,7 @@ BEGIN_EVENT_TABLE(GLPreviewFrame, wxFrame) EVT_CLOSE(GLPreviewFrame::OnClose) + EVT_TOOL(XRCID("preview_layout_mode_tool"), GLPreviewFrame::OnLayoutMode) EVT_TOOL(XRCID("preview_center_tool"), GLPreviewFrame::OnCenterHorizontally) EVT_TOOL(XRCID("preview_fit_pano_tool"), GLPreviewFrame::OnFitPano) EVT_TOOL(XRCID("preview_straighten_pano_tool"), GLPreviewFrame::OnStraighten) @@ -691,6 +692,36 @@ } #endif +void GLPreviewFrame::OnLayoutMode(wxCommandEvent & e) +{ + if (e.IsChecked()) + { + // turn off things not used in layout mode. + helper->DeactivateTool(pano_mask_tool); + /** @todo only turn off tools which are on, as turning off an already + * off tool causes wasted renders, which are expensive. + */ + std::set<PreviewTool*> tools; + tools.insert(crop_tool); + tools.insert(drag_tool); + tools.insert(identify_tool); + helper->DeactivateTool(crop_tool); + helper->DeactivateTool(drag_tool); + helper->DeactivateTool(identify_tool); + TurnOffTools(tools); + /// @todo hide UI items that are not applicable to layout mode. + + // Turn on the layout mode view + m_GLViewer->SetLayoutMode(true); + } else { + // disable layout mode. + m_GLViewer->SetLayoutMode(false); + // Switch the panorama mask back on. + helper->ActivateTool(pano_mask_tool); + /// @todo show hidden UI items + } +} + void GLPreviewFrame::OnCenterHorizontally(wxCommandEvent & e) { if (m_pano.getActiveImages().size() == 0) return; Modified: hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h =================================================================== --- hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h 2009-12-23 18:09:40 UTC (rev 4829) @@ -107,7 +107,8 @@ void FillBlendChoice(); protected: void OnClose(wxCloseEvent& e); - + + void OnLayoutMode(wxCommandEvent & e); void OnCenterHorizontally(wxCommandEvent & e); void OnFitPano(wxCommandEvent& e); void OnStraighten(wxCommandEvent & e); Modified: hugin/trunk/src/hugin1/hugin/GLViewer.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/GLViewer.cpp 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/GLViewer.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -142,6 +142,12 @@ Refresh(); } +void GLViewer::SetLayoutMode(bool state) +{ + m_view_state->GetMeshManager()->SetLayoutMode(state); + Refresh(); +} + void GLViewer::RedrawE(wxPaintEvent& e) { if(!IsShown()) return; Modified: hugin/trunk/src/hugin1/hugin/GLViewer.h =================================================================== --- hugin/trunk/src/hugin1/hugin/GLViewer.h 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/GLViewer.h 2009-12-23 18:09:40 UTC (rev 4829) @@ -49,6 +49,7 @@ static void RefreshWrapper(void *obj); void SetUpContext(); void SetPhotometricCorrect(bool state); + void SetLayoutMode(bool state); ViewState * m_view_state; protected: Modified: hugin/trunk/src/hugin1/hugin/ImagesList.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesList.cpp 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/ImagesList.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -89,6 +89,11 @@ { pano = panorama; pano->addObserver(this); + + /// @todo check new didn't return NULL in non-debug builds. + variable_groups = new HuginBase::StandardImageVariableGroups(*pano); + DEBUG_ASSERT(variable_groups); + #ifdef __WXMAC__ SetDropTarget(new PanoDropTarget(*pano, true)); #endif @@ -98,6 +103,7 @@ { DEBUG_TRACE(""); pano->removeObserver(this); + delete variable_groups; } void ImagesList::panoramaImagesChanged(Panorama &pano, const UIntSet &changed) @@ -122,6 +128,9 @@ RemoveItem(i); //m_smallIcons->Remove(i); } + + // Make sure the lens numbers are up to date before writing them to the table. + variable_groups->getLenses().updatePartNumbers(); // update existing items // if ( nrImages >= nrItems ) { @@ -148,6 +157,13 @@ } // } + // Update the part numbers. We do this for every image, as the images that + // have changed may affect the part numbers for images that haven't changed. + for (unsigned int i = 0; i < pano.getNrOfImages(); i++) + { + UpdatePartNumbersForItem(i); + } + Thaw(); m_notifyParents = true; @@ -304,6 +320,11 @@ } +void ImagesList::UpdatePartNumbersForItem(unsigned int imgNr) +{ + +} + IMPLEMENT_DYNAMIC_CLASS(ImagesList, wxListCtrl) // ============================================================================ @@ -358,18 +379,17 @@ { DEBUG_DEBUG("update image list item " << imgNr); DEBUG_ASSERT((int)imgNr < GetItemCount()); - const PanoImage & img = pano->getImage(imgNr); + const SrcPanoImage & img = pano->getImage(imgNr); wxFileName fn(wxString (img.getFilename().c_str(), HUGIN_CONV_FILENAME)); - VariableMap var = pano->getImageVariables(imgNr); // wxLogMessage(wxString::Format(_("updating image list item %d, filename %s"),imgNr, fn.GetFullName())); SetItem(imgNr, 1, fn.GetFullName() ); - SetItem(imgNr, 2, wxString::Format(wxT("%d"), img.getWidth())); - SetItem(imgNr, 3, wxString::Format(wxT("%d"), img.getHeight())); - SetItem(imgNr, 4, doubleTowxString(map_get(var,"y").getValue(),m_degDigits)); - SetItem(imgNr, 5, doubleTowxString( map_get(var,"p").getValue(),m_degDigits)); - SetItem(imgNr, 6, doubleTowxString( map_get(var,"r").getValue(),m_degDigits)); + SetItem(imgNr, 2, wxString::Format(wxT("%d"), img.getSize().width())); + SetItem(imgNr, 3, wxString::Format(wxT("%d"), img.getSize().height())); + SetItem(imgNr, 4, doubleTowxString(img.getYaw(), m_degDigits)); + SetItem(imgNr, 5, doubleTowxString(img.getRoll(), m_degDigits)); + SetItem(imgNr, 6, doubleTowxString(img.getPitch(), m_degDigits)); wxChar flags[] = wxT("--"); if (pano->getOptions().optimizeReferenceImage == imgNr) { flags[0]='A'; @@ -476,20 +496,19 @@ void ImagesListLens::UpdateItem(unsigned int imgNr) { - const PanoImage & img = pano->getImage(imgNr); + const SrcPanoImage & img = pano->getImage(imgNr); wxFileName fn(wxString (img.getFilename().c_str(), HUGIN_CONV_FILENAME)); SetItem(imgNr, 1, fn.GetFullName() ); - SetItem(imgNr, 2, wxString::Format(wxT("%d"),img.getLensNr())); + SetItem(imgNr, 2, wxString::Format(wxT("%d"),variable_groups->getLenses().getPartNumber(imgNr))); VariableMap var = pano->getImageVariables(imgNr); - const Lens & lens = pano->getLens( img.getLensNr()); wxString ps; - switch ( (int) lens.getProjection() ) { - case Lens::RECTILINEAR: ps << _("Normal (rectilinear)"); break; - case Lens::PANORAMIC: ps << _("Panoramic (cylindrical)"); break; - case Lens::CIRCULAR_FISHEYE: ps << _("Circular fisheye"); break; - case Lens::FULL_FRAME_FISHEYE: ps << _("Full frame fisheye"); break; - case Lens::EQUIRECTANGULAR: ps << _("Equirectangular"); break; + switch ( img.getProjection() ) { + case SrcPanoImage::RECTILINEAR: ps << _("Normal (rectilinear)"); break; + case SrcPanoImage::PANORAMIC: ps << _("Panoramic (cylindrical)"); break; + case SrcPanoImage::CIRCULAR_FISHEYE: ps << _("Circular fisheye"); break; + case SrcPanoImage::FULL_FRAME_FISHEYE: ps << _("Full frame fisheye"); break; + case SrcPanoImage::EQUIRECTANGULAR: ps << _("Equirectangular"); break; } SetItem(imgNr, 3, ps); SetItem(imgNr, 4, doubleTowxString( map_get(var, "Eev").getValue(),1)); @@ -503,7 +522,13 @@ SetItem(imgNr, 12, doubleTowxString( map_get(var, "t").getValue(),m_distDigits)); } +void ImagesListLens::UpdatePartNumbersForItem(unsigned int imgNr) +{ + // Update the part numbers. + SetItem(imgNr, 2, wxString::Format(wxT("%d"),variable_groups->getLenses().getPartNumber(imgNr))); +} + IMPLEMENT_DYNAMIC_CLASS(ImagesListLens, ImagesList) ImagesListLensXmlHandler::ImagesListLensXmlHandler() @@ -579,7 +604,7 @@ void ImagesListCrop::UpdateItem(unsigned int imgNr) { - const PanoImage & img = pano->getImage(imgNr); + const SrcPanoImage & img = pano->getImage(imgNr); wxFileName fn(wxString (img.getFilename().c_str(), HUGIN_CONV_FILENAME)); wxString cropstr(wxT("-")); Modified: hugin/trunk/src/hugin1/hugin/ImagesList.h =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesList.h 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/ImagesList.h 2009-12-23 18:09:40 UTC (rev 4829) @@ -28,6 +28,7 @@ #include "PT/Panorama.h" +#include <panodata/StandardImageVariableGroups.h> //#include "hugin/MainFrame.h" using namespace PT; @@ -81,7 +82,14 @@ /** update the information in an already existing list item */ virtual void UpdateItem(unsigned int imgNr); - + + /** Update the part numbers (e.g. Lens number) in an already existing list + * item. + * + * Needed as the part numbers can change without the rest of the image + */ + virtual void UpdatePartNumbersForItem(unsigned int imgNr); + /** remove an existing list item * * just calles wxListCtrl::DeleteItem, but might be overriden @@ -101,6 +109,9 @@ protected: // the model Panorama * pano; + + // image variable group information + HuginBase::StandardImageVariableGroups * variable_groups; // update selected map void OnItemSelected ( wxListEvent & e ); @@ -175,6 +186,10 @@ /** update the information in an already existing list item */ virtual void UpdateItem(unsigned int imgNr); + + /** update the part numbers in an already existing list item. + */ + virtual void UpdatePartNumbersForItem(unsigned int imgNr); DECLARE_DYNAMIC_CLASS(ImagesListLens) }; Copied: hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp (from rev 4152, hugin/branches/gsoc2009_layout/src/hugin1/hugin/LayoutRemapper.cpp) =================================================================== --- hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp (rev 0) +++ hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -0,0 +1,118 @@ +// -*- c-basic-offset: 4 -*- +/** @file LayoutRemapper.cpp + * + * @author James Legg + * + * @brief Implement LayoutRemapper, a remapper to use in the layout mode. + * + * 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 software 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 software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "LayoutRemapper.h" +#include "ViewState.h" + +LayoutRemapper::LayoutRemapper(HuginBase::Panorama *m_pano, + unsigned int image_number, + ViewState *view_state) + :MeshRemapper(m_pano, image_number, view_state), + scale(0) + +{ + // We'll never use any different texture coordinates, so record them now: + face.tex_c[0][0][0] = 0.0; + face.tex_c[0][0][1] = 0.0; + face.tex_c[0][1][0] = 0.0; + face.tex_c[0][1][1] = 1.0; + face.tex_c[1][0][0] = 1.0; + face.tex_c[1][0][1] = 0.0; + face.tex_c[1][1][0] = 1.0; + face.tex_c[1][1][1] = 1.0; +} + +void LayoutRemapper::UpdateAndResetIndex() +{ + HuginBase::SrcPanoImage *src_img = view_state->GetSrcImage(image_number); + + // find the image size. + double image_width = (double) src_img->getSize().width(); + double image_height = (double) src_img->getSize().height(); + + // remap the middle of the image to find centre coordinates. + double centre_x, centre_y; + // create a transformation from source image to destination. + transform.createInvTransform(*src_img, *(view_state->GetOptions())); + transform.transformImgCoord(centre_x, centre_y, + image_width / 2.0, image_height / 2.0); + /** @todo Offset the centre position for images in brackets, when showing + * all brackets together. + * + * I think a good offset would be about scale * bracket number / 5, + * assuming bracket numbers are a sequence of consecutive integers starting + * at 0. + */ + + // work out the size to draw the image + bool landscape = image_width > image_height; + double preview_width, preview_height; + if (landscape) + { + preview_width = scale; + preview_height = scale / image_width * image_height; + } else { + preview_height = scale; + preview_width = scale / image_height * image_width; + } + + // find bounds for image drawing + double offset_x = preview_width / 2.0; + double offset_y = preview_height / 2.0; + double start_x = centre_x - offset_x; + double start_y = centre_y - offset_y; + double end_x = centre_x + offset_x; + double end_y = centre_y + offset_y; + + face.vertex_c[0][0][0] = start_x; + face.vertex_c[0][0][1] = start_y; + face.vertex_c[0][1][0] = start_x; + face.vertex_c[0][1][1] = end_y; + face.vertex_c[1][0][0] = end_x; + face.vertex_c[1][0][1] = start_y; + face.vertex_c[1][1][0] = end_x; + face.vertex_c[1][1][1] = end_y; + + // Specify our one face next time GetNextFaceCoordinates is called. + done = false; +} + +bool LayoutRemapper::GetNextFaceCoordinates(Coords *result) +{ + if (!done) + { + // point caller at our coordinates. + result->tex_c = face.tex_c; + result->vertex_c = face.vertex_c; + // record that they have seen this face. + done = true; + return true; + } + // We've specified the one face required. No need for more. + return false; +} + +void LayoutRemapper::setScale(double scale_in) +{ + scale = scale_in; +} Copied: hugin/trunk/src/hugin1/hugin/LayoutRemapper.h (from rev 4152, hugin/branches/gsoc2009_layout/src/hugin1/hugin/LayoutRemapper.h) =================================================================== --- hugin/trunk/src/hugin1/hugin/LayoutRemapper.h (rev 0) +++ hugin/trunk/src/hugin1/hugin/LayoutRemapper.h 2009-12-23 18:09:40 UTC (rev 4829) @@ -0,0 +1,52 @@ +// -*- c-basic-offset: 4 -*- +/** @file LayoutRemapper.h + * + * @author James Legg + * + * @brief Define a remapper to use in the layout mode. + * + * 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 software 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 software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef LAYOUT_REMAPPER_H +#define LAYOUT_REMAPPER_H + +#include "MeshRemapper.h" + +/** Draw undistored images, but with the correct centre position. Must be + * given a scale to draw with, using SetScale. + */ +class LayoutRemapper: public MeshRemapper +{ +public: + LayoutRemapper(HuginBase::Panorama *m_pano, unsigned int image_number, + ViewState *view_state); + virtual void UpdateAndResetIndex(); + virtual bool GetNextFaceCoordinates(Coords *result); + /** Set the size to draw the images. + * + * Specify the maximum dimension you would like the image to have. + * The actual size of the image will have this maximum dimension, and the + * same aspect ratio as the original image file. + */ + void setScale(double scale); +private: + double scale; + bool done; + ArrayCoords face; +}; + +#endif Modified: hugin/trunk/src/hugin1/hugin/LensPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2009-12-22 23:52:35 UTC (rev 4828) +++ hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) @@ -106,12 +106,8 @@ EVT_BUTTON ( XRCID("lens_button_reset"), LensPanel::OnReset ) EVT_CHECKBOX ( XRCID("lens_inherit_v"), LensPanel::OnVarInheritChanged ) EVT_CHECKBOX ( XRCID("lens_inherit_a"), LensPanel::OnVarInheritChanged ) - EVT_CHECKBOX ( XRCID("lens_inherit_b"), LensPanel::OnVarInheritChanged ) - EVT_CHECKBOX ( XRCID("lens_inherit_c"), LensPanel::OnVarInheritChanged ) EVT_CHECKBOX ( XRCID("lens_inherit_d"), LensPanel::OnVarInheritChanged ) - EVT_CHECKBOX ( XRCID("lens_inherit_e"), LensPanel::OnVarInheritChanged ) EVT_CHECKBOX ( XRCID("lens_inherit_g"), LensPanel::OnVarInheritChanged ) - EVT_CHECKBOX ( XRCID("lens_inherit_t"), LensPanel::OnVarInheritChanged ) EVT_CHECKBOX ( XRCID("lens_inherit_Eev"), LensPanel::OnVarInheritChanged ) EVT_CHECKBOX ( XRCID("lens_inherit_Er"), LensPanel::OnVarInheritChanged ) EVT_CHECKBOX ( XRCID("lens_inherit_Eb"), LensPanel::OnVarInheritChanged ) @@ -205,6 +201,7 @@ void LensPanel::Init(PT::Panorama * panorama) { pano = panorama; + variable_groups = new HuginBase::StandardImageVariableGroups(*pano); images_list->Init(pano); pano->addObserver(this); } @@ -240,6 +237,7 @@ XRCCTRL(*this, "lens_val_Re", wxTextCtrl)->PopEventHandler(true); pano->removeObserver(this); + delete variable_groups; DEBUG_TRACE("dtor about to finish"); } @@ -269,8 +267,8 @@ // ... [truncated message content] |
From: <jl...@us...> - 2009-12-23 19:40:10
|
Revision: 4830 http://hugin.svn.sourceforge.net/hugin/?rev=4830&view=rev Author: jlegg Date: 2009-12-23 19:39:57 +0000 (Wed, 23 Dec 2009) Log Message: ----------- Merge the second half of the gsoc2009_layout branch. Trunk now requires a recent svn build of libpano13. command: svn merge -r 4153:HEAD ../../gsoc/gsoc2009_layout/ . Conflict discovered in 'src/hugin1/hugin/xrc/images_panel.xrc'. images_cp_clean button placed just after section modified for the stack buttons. resolved Conflict discovered in 'src/hugin1/hugin/GLPreviewFrame.h'. control point tool and layout lines tool added to the same place. Kept both. resolved Conflict discovered in 'src/hugin1/hugin/ImagesPanel.cpp'. void ImagesPanel::OnCleanCP(wxCommandEvent & e) added in trunk just before void ImagesPanel::OnVarTextChanged ( wxCommandEvent & e ) from gsoc2009_layout. ShowExifInfo from trunk added just before X, Y, and Z parameters in void ImagesPanel::ShowImgParameters(unsigned int imgNr). Kept both. ShowExifInfo was moved down to keep similar code together. void ImagesPanel::ReloadCPDetectorSettings() added from trunk near ImagesPanel::OnNewStack(wxCommandEvent & e) and ImagesPanel::OnChangeStack(wxCommandEvent & e) added in gsoc2009_layout. Keep both. resolved Conflict discovered in 'src/hugin1/hugin/CMakeLists.txt'. Files added to the end of hugin_SOURCES clash again. Keep all files. resolved Conflict discovered in 'src/hugin1/hugin/GLPreviewFrame.cpp'. #includes added to the same place. Keep all. In void GLPreviewFrame::MakeTools(PreviewToolHelper *helper_in) control_point_tool and m_layoutLinesTool added to the same place. Keep both. resolved Conflict discovered in 'src/hugin1/hugin/OptimizePanel.h'. #includes added to the same place. Keep all. resolved Modified Paths: -------------- hugin/trunk/src/foreign/vigra/vigra/diff2d.hxx hugin/trunk/src/foreign/vigra/vigra/rational.hxx hugin/trunk/src/hugin1/PT/PanoCommand.h hugin/trunk/src/hugin1/hugin/AssistantPanel.h hugin/trunk/src/hugin1/hugin/CMakeLists.txt hugin/trunk/src/hugin1/hugin/CropPanel.cpp hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h hugin/trunk/src/hugin1/hugin/ImagesList.cpp hugin/trunk/src/hugin1/hugin/ImagesList.h hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp hugin/trunk/src/hugin1/hugin/ImagesPanel.h hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp hugin/trunk/src/hugin1/hugin/LensPanel.cpp hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp hugin/trunk/src/hugin1/hugin/OptimizePanel.h hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.h hugin/trunk/src/hugin1/hugin/PreviewIdentifyTool.cpp hugin/trunk/src/hugin1/hugin/PreviewToolHelper.cpp hugin/trunk/src/hugin1/hugin/ViewState.cpp hugin/trunk/src/hugin1/hugin/wxPanoCommand.cpp hugin/trunk/src/hugin1/hugin/xrc/data/preview_layout.svg hugin/trunk/src/hugin1/hugin/xrc/images_panel.xrc hugin/trunk/src/hugin1/hugin/xrc/optimize_panel.xrc hugin/trunk/src/hugin_base/algorithms/basic/RotatePanorama.cpp hugin/trunk/src/hugin_base/algorithms/nona/CenterHorizontally.cpp hugin/trunk/src/hugin_base/algorithms/optimizer/ImageGraph.cpp hugin/trunk/src/hugin_base/algorithms/optimizer/PTOptimizer.cpp hugin/trunk/src/hugin_base/panodata/ImageVariableGroup.cpp hugin/trunk/src/hugin_base/panodata/ImageVariableTranslate.h hugin/trunk/src/hugin_base/panodata/PTScriptParsing.cpp hugin/trunk/src/hugin_base/panodata/Panorama.cpp hugin/trunk/src/hugin_base/panodata/Panorama.h hugin/trunk/src/hugin_base/panodata/PanoramaData.h hugin/trunk/src/hugin_base/panodata/PanoramaVariable.cpp hugin/trunk/src/hugin_base/panodata/SrcPanoImage.cpp hugin/trunk/src/hugin_base/panodata/SrcPanoImage.h hugin/trunk/src/hugin_base/panodata/StandardImageVariableGroups.cpp hugin/trunk/src/hugin_base/panodata/StandardImageVariableGroups.h hugin/trunk/src/hugin_base/panodata/image_variables.h hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp hugin/trunk/src/tools/align_image_stack.cpp hugin/trunk/src/tools/tca_correct.cpp Added Paths: ----------- hugin/trunk/src/hugin1/hugin/PreviewLayoutLinesTool.cpp hugin/trunk/src/hugin1/hugin/PreviewLayoutLinesTool.h Property Changed: ---------------- hugin/trunk/ hugin/trunk/mac/Hugin.xcodeproj/ Property changes on: hugin/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /hugin/branches/gsoc2008_batch_processing:3081-3398 /hugin/branches/gsoc2009_deghosting:3873-4533 /hugin/branches/gsoc2009_layout:3874-4152 + /hugin/branches/gsoc2008_batch_processing:3081-3398 /hugin/branches/gsoc2009_deghosting:3873-4533 /hugin/branches/gsoc2009_layout:3874-4152,4154-4829 Property changes on: hugin/trunk/mac/Hugin.xcodeproj ___________________________________________________________________ Modified: svn:mergeinfo - /hugin/branches/gsoc2009_layout/mac/Hugin.xcodeproj:3874-4152 /hugin/trunk/mac/Hugin.xcodeproj:4748 + /hugin/branches/gsoc2009_layout/mac/Hugin.xcodeproj:3874-4152,4154-4829 /hugin/trunk/mac/Hugin.xcodeproj:4748 Modified: hugin/trunk/src/foreign/vigra/vigra/diff2d.hxx =================================================================== --- hugin/trunk/src/foreign/vigra/vigra/diff2d.hxx 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/foreign/vigra/vigra/diff2d.hxx 2009-12-23 19:39:57 UTC (rev 4830) @@ -1131,7 +1131,7 @@ bool contains(Rect2D const &r) const { return r.isEmpty() || - contains(r.upperLeft()) && contains(r.lowerRight()-Diff2D(1,1)); + (contains(r.upperLeft()) && contains(r.lowerRight()-Diff2D(1,1))); } /** Return whether this rectangle overlaps with the given Modified: hugin/trunk/src/foreign/vigra/vigra/rational.hxx =================================================================== --- hugin/trunk/src/foreign/vigra/vigra/rational.hxx 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/foreign/vigra/vigra/rational.hxx 2009-12-23 19:39:57 UTC (rev 4830) @@ -1014,14 +1014,16 @@ // Handle the easy cases. Take advantage of the fact // that the denominator is never negative. - if(l.denominator() == zero) - if(r.denominator() == zero) + if(l.denominator() == zero) { + if(r.denominator() == zero) { // -inf < inf, !(-inf < -inf), !(inf < -inf), !(inf < inf) return l.numerator() < r.numerator(); - else + } else { // -inf < -1, -inf < 0, -inf < 1 // !(inf < -1), !(inf < 0), !(inf < 1) return l.numerator() < zero; + } + } if(r.denominator() == zero) // -1 < inf, 0 < inf, 1 < inf // !(-1 < -inf), !(0 < -inf), !(1 < -inf) Modified: hugin/trunk/src/hugin1/PT/PanoCommand.h =================================================================== --- hugin/trunk/src/hugin1/PT/PanoCommand.h 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/PT/PanoCommand.h 2009-12-23 19:39:57 UTC (rev 4830) @@ -30,7 +30,7 @@ //#include "PanoImage.h" #include "Panorama.h" //#include "PanoToolsInterface.h" -#include <hugin_base/panodata/StandardImageVariableGroups.h> +#include <panodata/StandardImageVariableGroups.h> @@ -99,13 +99,9 @@ virtual bool processPanorama(Panorama& pano) { - - VariableMap var; - fillVariableMap(var); - std::vector<SrcPanoImage>::const_iterator it; for (it = imgs.begin(); it != imgs.end(); ++it) { - pano.addImage(*it,var); + pano.addImage(*it); } pano.changeFinished(); @@ -1060,31 +1056,33 @@ //========================================================================= - /** Change the lens of an image + /** Switch the part number of an image */ - class ChangeLensNumberCmd : public PanoCommand + class ChangePartNumberCmd : public PanoCommand { public: - ChangeLensNumberCmd(Panorama & p, + ChangePartNumberCmd(Panorama & p, UIntSet image_numbers, - std::size_t new_lens_number) + std::size_t new_part_number, + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> variables + ) : PanoCommand(p), image_numbers(image_numbers), - new_lens_number(new_lens_number) + new_part_number(new_part_number), + variables(variables) { }; virtual bool processPanorama(Panorama& pano) { // it might change as we are setting them - std::size_t new_new_lens_number = new_lens_number; - HuginBase::StandardImageVariableGroups variable_groups(pano); - HuginBase::ImageVariableGroup & lenses = variable_groups.getLenses(); + std::size_t new_new_part_number = new_part_number; + HuginBase::ImageVariableGroup group(variables, pano); for (UIntSet::iterator it = image_numbers.begin(); it != image_numbers.end(); it++) { - lenses.switchParts(*it, new_new_lens_number); + group.switchParts(*it, new_new_part_number); // update the lens number if it changes. - new_new_lens_number = lenses.getPartNumber(*it); + new_new_part_number = group.getPartNumber(*it); } pano.changeFinished(); return true; @@ -1092,52 +1090,73 @@ virtual std::string getName() const { - return "Change lens number"; + return "Change part number"; } private: UIntSet image_numbers; - std::size_t new_lens_number; + std::size_t new_part_number; + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> variables; }; //========================================================================= //========================================================================= - /** Change the linking on a lens image variable for some set of images. + /** Change the linking of some variables across parts of an + * ImageVariableGroup containing some specified images. */ - class ChangeLensVariableLinkingCmd : public PanoCommand + class ChangePartImagesLinkingCmd : public PanoCommand { public: - ChangeLensVariableLinkingCmd(Panorama & p, + /** Constructor. + * @param p the panorama this affects + * @param image_numbers the set of image numbers that are contained + * within the parts you would like to link or unlink. + * @param changeVariables the set of variables you would like to change + * the linking of across those parts. + * @param new_linked_state true to link variables, false to unlink them. + * @param groupVariables the variables that make the ImageVariableGroup + * that will define which images belong to which parts. + */ + ChangePartImagesLinkingCmd(Panorama & p, UIntSet image_numbers, - HuginBase::ImageVariableGroup::ImageVariableEnum variable, - bool new_linked_state) + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> changeVariables, + bool new_linked_state, + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> groupVariables) : PanoCommand(p), image_numbers(image_numbers), - variable(variable), - new_linked_state(new_linked_state) + changeVariables(changeVariables), + new_linked_state(new_linked_state), + groupVariables(groupVariables) { }; virtual bool processPanorama(Panorama& pano) { - HuginBase::StandardImageVariableGroups variable_groups(pano); - HuginBase::ImageVariableGroup & lenses = variable_groups.getLenses(); + HuginBase::ImageVariableGroup group(groupVariables, pano); if (new_linked_state) { - for (UIntSet::iterator it = image_numbers.begin(); - it != image_numbers.end(); it++) + for (UIntSet::iterator imageIt = image_numbers.begin(); + imageIt != image_numbers.end(); imageIt++) { - // link the variable - lenses.linkVariableImage(variable, *it); + // link the variables + for (std::set<HuginBase::ImageVariableGroup::ImageVariableEnum>::iterator variableIt = changeVariables.begin(); + variableIt != changeVariables.end(); variableIt++) + { + group.linkVariableImage(*variableIt, *imageIt); + } } } else { - for (UIntSet::iterator it = image_numbers.begin(); - it != image_numbers.end(); it++) + for (UIntSet::iterator imageIt = image_numbers.begin(); + imageIt != image_numbers.end(); imageIt++) { // unlink the variable - lenses.unlinkVariableImage(variable, *it); - lenses.updatePartNumbers(); + for (std::set<HuginBase::ImageVariableGroup::ImageVariableEnum>::iterator variableIt = changeVariables.begin(); + variableIt != changeVariables.end(); variableIt++) + { + group.unlinkVariableImage(*variableIt, *imageIt); + group.updatePartNumbers(); + } } } pano.changeFinished(); @@ -1146,13 +1165,14 @@ virtual std::string getName() const { - return "Change lens variable linkage"; + return "Change image variable links"; } private: UIntSet image_numbers; - HuginBase::ImageVariableGroup::ImageVariableEnum variable; + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> changeVariables; bool new_linked_state; + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> groupVariables; }; @@ -1205,7 +1225,7 @@ {\ public:\ ChangeImage##name##Cmd(Panorama & p,\ - UIntSet image_number,\ + UIntSet image_numbers,\ type value)\ : PanoCommand(p),\ image_numbers(image_numbers),\ @@ -1233,7 +1253,7 @@ UIntSet image_numbers;\ type value;\ }; -#include <hugin_base/panodata/image_variables.h> +#include <panodata/image_variables.h> #undef image_variable @@ -1276,7 +1296,7 @@ case HuginBase::ImageVariableGroup::IVE_##name:\ pano.unlinkImageVariable##name(image_index);\ break; -#include <hugin_base/panodata/image_variables.h> +#include <panodata/image_variables.h> #undef image_variable } } Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.h =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.h 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.h 2009-12-23 19:39:57 UTC (rev 4830) @@ -24,7 +24,7 @@ #ifndef _ASSISTANTPANEL_H #define _ASSISTANTPANEL_H -#include <hugin_base/panodata/StandardImageVariableGroups.h> +#include <panodata/StandardImageVariableGroups.h> using namespace PT; Modified: hugin/trunk/src/hugin1/hugin/CMakeLists.txt =================================================================== --- hugin/trunk/src/hugin1/hugin/CMakeLists.txt 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/CMakeLists.txt 2009-12-23 19:39:57 UTC (rev 4830) @@ -34,7 +34,7 @@ OutputProjectionInfo.cpp PreviewToolHelper.cpp PreviewTool.cpp PreviewCropTool.cpp PreviewDragTool.cpp PreviewIdentifyTool.cpp PreviewDifferenceTool.cpp PreviewPanoMaskTool.cpp PreviewControlPointTool.cpp -GreatCircles.cpp AboutDialog.cpp LayoutRemapper.cpp) +GreatCircles.cpp AboutDialog.cpp LayoutRemapper.cpp PreviewLayoutLinesTool.cpp) IF(APPLE) if (MAC_SELF_CONTAINED_BUNDLE) Modified: hugin/trunk/src/hugin1/hugin/CropPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CropPanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/CropPanel.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -184,6 +184,8 @@ void CropPanel::Pano2Display(int imgNr) { const SrcPanoImage & img = m_pano->getImage(imgNr); + /// @todo use individual get options on the SrcPanoImage, replacing m_imgOpts. + m_imgOpts = img.getOptions(); std::string newImgFile = img.getFilename(); // check if we need to display a new image Modified: hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/GLPreviewFrame.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -64,6 +64,7 @@ #include "PreviewPanoMaskTool.h" #include "PreviewControlPointTool.h" #include "NumTransDialog.h" +#include "PreviewLayoutLinesTool.h" #include <wx/progdlg.h> @@ -709,16 +710,23 @@ helper->DeactivateTool(drag_tool); helper->DeactivateTool(identify_tool); TurnOffTools(tools); - /// @todo hide UI items that are not applicable to layout mode. - + // hide UI items that are not applicable to layout mode. + m_ToolBar->EnableTool(drag_tool_id, false); + m_ToolBar->EnableTool(identify_tool_id, false); + m_ToolBar->EnableTool(crop_tool_id, false); // Turn on the layout mode view m_GLViewer->SetLayoutMode(true); + helper->ActivateTool(m_layoutLinesTool); } else { // disable layout mode. + helper->DeactivateTool(m_layoutLinesTool); m_GLViewer->SetLayoutMode(false); // Switch the panorama mask back on. helper->ActivateTool(pano_mask_tool); - /// @todo show hidden UI items + // show hidden UI items + m_ToolBar->EnableTool(drag_tool_id, true ); + m_ToolBar->EnableTool(identify_tool_id, true ); + m_ToolBar->EnableTool(crop_tool_id, true); } } @@ -1040,6 +1048,7 @@ difference_tool = new PreviewDifferenceTool(helper); pano_mask_tool = new PreviewPanoMaskTool(helper); control_point_tool = new PreviewControlPointTool(helper); + m_layoutLinesTool = new PreviewLayoutLinesTool(helper); // activate tools that are always active. helper->ActivateTool(pano_mask_tool); Modified: hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h =================================================================== --- hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/GLPreviewFrame.h 2009-12-23 19:39:57 UTC (rev 4830) @@ -46,6 +46,7 @@ class PreviewDifferenceTool; class PreviewPanoMaskTool; class PreviewControlPointTool; +class PreviewLayoutLinesTool; #include "common/utils.h" #include <wx/string.h> @@ -188,6 +189,7 @@ PreviewDifferenceTool *difference_tool; PreviewControlPointTool *control_point_tool; PreviewPanoMaskTool *pano_mask_tool; + PreviewLayoutLinesTool *m_layoutLinesTool; void TurnOffTools(std::set<PreviewTool*> tools); void CleanButtonColours(); }; Modified: hugin/trunk/src/hugin1/hugin/ImagesList.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesList.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/ImagesList.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -129,8 +129,8 @@ //m_smallIcons->Remove(i); } - // Make sure the lens numbers are up to date before writing them to the table. - variable_groups->getLenses().updatePartNumbers(); + // Make sure the part numbers are up to date before writing them to the table. + variable_groups->update(); // update existing items // if ( nrImages >= nrItems ) { @@ -356,8 +356,12 @@ InsertColumn( 4, _("yaw (y)"), wxLIST_FORMAT_RIGHT, 60 ); InsertColumn( 5, _("pitch (p)"), wxLIST_FORMAT_RIGHT, 60 ); InsertColumn( 6, _("roll (r)"), wxLIST_FORMAT_RIGHT, 60 ); - InsertColumn( 7, _("Anchor"), wxLIST_FORMAT_RIGHT, 60 ); - InsertColumn( 8, _("# Ctrl Pnts"), wxLIST_FORMAT_RIGHT, 60); + InsertColumn( 7, _("X (TrX)"), wxLIST_FORMAT_RIGHT, 60 ); + InsertColumn( 8, _("Y (TrY)"), wxLIST_FORMAT_RIGHT, 60 ); + InsertColumn( 9, _("Z (TrZ)"), wxLIST_FORMAT_RIGHT, 60 ); + InsertColumn( 10, _("Anchor"), wxLIST_FORMAT_RIGHT, 60 ); + InsertColumn( 11, _("# Ctrl Pnts"), wxLIST_FORMAT_RIGHT, 60); + InsertColumn( 12, _("Stack Number"), wxLIST_FORMAT_RIGHT, 60); //get saved width for ( int j=0; j < GetColumnCount() ; j++ ) @@ -388,8 +392,11 @@ SetItem(imgNr, 2, wxString::Format(wxT("%d"), img.getSize().width())); SetItem(imgNr, 3, wxString::Format(wxT("%d"), img.getSize().height())); SetItem(imgNr, 4, doubleTowxString(img.getYaw(), m_degDigits)); - SetItem(imgNr, 5, doubleTowxString(img.getRoll(), m_degDigits)); - SetItem(imgNr, 6, doubleTowxString(img.getPitch(), m_degDigits)); + SetItem(imgNr, 5, doubleTowxString(img.getPitch(), m_degDigits)); + SetItem(imgNr, 6, doubleTowxString(img.getRoll(), m_degDigits)); + SetItem(imgNr, 7, doubleTowxString(img.getX(), m_distDigits)); + SetItem(imgNr, 8, doubleTowxString(img.getY(), m_distDigits)); + SetItem(imgNr, 9, doubleTowxString(img.getZ(), m_distDigits)); wxChar flags[] = wxT("--"); if (pano->getOptions().optimizeReferenceImage == imgNr) { flags[0]='A'; @@ -397,7 +404,7 @@ if (pano->getOptions().colorReferenceImage == imgNr) { flags[1]='C'; } - SetItem(imgNr,7, wxString(flags, wxConvLocal)); + SetItem(imgNr,10, wxString(flags, wxConvLocal)); // urgh.. slow.. stupid.. traverse control point list for each image.. const CPVector & cps = pano->getCtrlPoints(); int nCP=0; @@ -406,9 +413,15 @@ nCP++; } } - SetItem(imgNr, 8, wxString::Format(wxT("%d"), nCP)); + SetItem(imgNr, 11, wxString::Format(wxT("%d"), nCP)); } +void ImagesListImage::UpdatePartNumbersForItem(unsigned int imgNr) +{ + unsigned int stackNumber = variable_groups->getStacks().getPartNumber(imgNr); + SetItem(imgNr, 12, wxString::Format(wxT("%d"), stackNumber)); +} + IMPLEMENT_DYNAMIC_CLASS(ImagesListImage, ImagesList) ImagesListImageXmlHandler::ImagesListImageXmlHandler() Modified: hugin/trunk/src/hugin1/hugin/ImagesList.h =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesList.h 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/ImagesList.h 2009-12-23 19:39:57 UTC (rev 4830) @@ -155,6 +155,9 @@ /** update the information in an already existing list item */ virtual void UpdateItem(unsigned int imgNr); + + /// refresh the stack numbers + virtual void UpdatePartNumbersForItem(unsigned int imgNr); DECLARE_DYNAMIC_CLASS(ImagesListImage) }; Modified: hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -52,6 +52,8 @@ #include <algorithms/control_points/CleanCP.h> #include <PT/PTOptimise.h> +#include <panodata/StandardImageVariableGroups.h> + // Celeste header #include "Celeste.h" #include "CelesteGlobals.h" @@ -65,6 +67,12 @@ ImgPreview * canvas; +#define m_XRCID(str_id) \ + wxXmlResource::GetXRCID(str_id) +#define m_XRCCTRL(window, id, type) \ + ((type*)((window).FindWindow(m_XRCID(id)))) + + //------------------------------------------------------------------------------ #define GET_VAR(val) pano->getVariable(orientationEdit_RefImg).val.getValue() @@ -87,9 +95,15 @@ EVT_BUTTON ( XRCID("images_move_image_down"), ImagesPanel::OnMoveImageDown) EVT_BUTTON ( XRCID("images_move_image_up"), ImagesPanel::OnMoveImageUp) EVT_BUTTON ( XRCID("images_celeste_button"), ImagesPanel::OnCelesteButton) - EVT_TEXT_ENTER ( XRCID("images_text_yaw"), ImagesPanel::OnYawTextChanged ) - EVT_TEXT_ENTER ( XRCID("images_text_pitch"), ImagesPanel::OnPitchTextChanged ) - EVT_TEXT_ENTER ( XRCID("images_text_roll"), ImagesPanel::OnRollTextChanged ) + EVT_BUTTON ( XRCID("images_new_stack"), ImagesPanel::OnNewStack) + EVT_BUTTON ( XRCID("images_change_stack"), ImagesPanel::OnChangeStack) + EVT_TEXT_ENTER ( XRCID("images_text_y"), ImagesPanel::OnVarTextChanged ) + EVT_TEXT_ENTER ( XRCID("images_text_p"), ImagesPanel::OnVarTextChanged ) + EVT_TEXT_ENTER ( XRCID("images_text_r"), ImagesPanel::OnVarTextChanged ) + EVT_TEXT_ENTER ( XRCID("images_text_X"), ImagesPanel::OnVarTextChanged ) + EVT_TEXT_ENTER ( XRCID("images_text_Y"), ImagesPanel::OnVarTextChanged ) + EVT_TEXT_ENTER ( XRCID("images_text_Z"), ImagesPanel::OnVarTextChanged ) + EVT_CHECKBOX ( XRCID("images_check_link"), ImagesPanel::OnImageLinkChanged ) END_EVENT_TABLE() ImagesPanel::ImagesPanel() @@ -133,6 +147,12 @@ DEBUG_ASSERT(m_moveUpButton); m_moveDownButton = XRCCTRL(*this, "images_move_image_down", wxButton); DEBUG_ASSERT(m_moveDownButton); + m_stackNewButton = XRCCTRL(*this, "images_new_stack", wxButton); + DEBUG_ASSERT(m_stackNewButton); + m_stackChangeButton = XRCCTRL(*this, "images_change_stack", wxButton); + DEBUG_ASSERT(m_stackChangeButton); + + m_linkCheckBox = XRCCTRL(*this, "images_check_link", wxCheckBox); m_img_ctrls = XRCCTRL(*this, "image_control_panel", wxPanel); DEBUG_ASSERT(m_img_ctrls); @@ -144,9 +164,12 @@ DEBUG_ASSERT(m_smallImgCtrl); // converts KILL_FOCUS events to usable TEXT_ENTER events - XRCCTRL(*this, "images_text_yaw", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); - XRCCTRL(*this, "images_text_roll", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); - XRCCTRL(*this, "images_text_pitch", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); + XRCCTRL(*this, "images_text_y", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); + XRCCTRL(*this, "images_text_r", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); + XRCCTRL(*this, "images_text_p", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); + XRCCTRL(*this, "images_text_X", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); + XRCCTRL(*this, "images_text_Y", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); + XRCCTRL(*this, "images_text_Z", wxTextCtrl)->PushEventHandler(new TextKillFocusHandler(this)); m_empty.LoadFile(huginApp::Get()->GetXRCPath() + wxT("data/") + wxT("druid.images.128.png"), @@ -184,9 +207,12 @@ { DEBUG_TRACE("dtor"); - XRCCTRL(*this, "images_text_yaw", wxTextCtrl)->PopEventHandler(true); - XRCCTRL(*this, "images_text_roll", wxTextCtrl)->PopEventHandler(true); - XRCCTRL(*this, "images_text_pitch", wxTextCtrl)->PopEventHandler(true); + XRCCTRL(*this, "images_text_y", wxTextCtrl)->PopEventHandler(true); + XRCCTRL(*this, "images_text_r", wxTextCtrl)->PopEventHandler(true); + XRCCTRL(*this, "images_text_p", wxTextCtrl)->PopEventHandler(true); + XRCCTRL(*this, "images_text_X", wxTextCtrl)->PopEventHandler(true); + XRCCTRL(*this, "images_text_Y", wxTextCtrl)->PopEventHandler(true); + XRCCTRL(*this, "images_text_Z", wxTextCtrl)->PopEventHandler(true); /* delete(m_tkf); */ @@ -351,67 +377,58 @@ wxMessageBox(wxString::Format(_("Removed %d control points"), NrRemoved), _("Cleaning"),wxOK|wxICON_INFORMATION,this); }; +void ImagesPanel::OnVarTextChanged ( wxCommandEvent & e ) +{ -// Yaw by text -> double -void ImagesPanel::OnYawTextChanged ( wxCommandEvent & e ) -{ if ( images_list->GetSelected().size() > 0 ) { - wxString text = XRCCTRL(*this, "images_text_yaw" - , wxTextCtrl) ->GetValue(); - if (text == wxT("")) { - return; - } - DEBUG_INFO ("yaw = " << text ); - double val; - if (!str2double(text, val)) { -// if (!text.ToDouble(&val)) { - wxLogError(_("Value must be numeric.")); - return; - } - ChangePano ( "y" , val ); + std::string varname; + double val; - } -} + + const char vars[] = "rpyXYZ"; + for (const char * var = vars; *var; var++) { + wxString ctrl_name(wxT("images_text_")); + ctrl_name.Append(wxChar(*var)); + if (e.GetId() == wxXmlResource::GetXRCID(ctrl_name)) { -void ImagesPanel::OnPitchTextChanged ( wxCommandEvent & e ) -{ - if ( images_list->GetSelected().size() > 0 ) { - wxString text = XRCCTRL(*this, "images_text_pitch" - , wxTextCtrl) ->GetValue(); - DEBUG_INFO ("pitch = " << text ); - if (text == wxT("")) { - return; - } + wxString text = m_XRCCTRL(*this, ctrl_name, wxTextCtrl)->GetValue(); - double val; - if (!str2double(text, val)) { -// if (!text.ToDouble(&val)) { - wxLogError(_("Value must be numeric.")); - return; - } - ChangePano ( "p" , val ); + // hack to add the T to the x. This should really use SrcPanoImage instead.. + char name[4]; + if (*var > 'Z') { + name[0] = *var; name[1] = 0; + } else { + name[0] = 'T'; name[1]='r'; name[2]=*var; name[3] = 0; + } + if (!str2double(text, val)){ + DEBUG_NOTICE("Value (" << text << ") for var " << name << " must be numeric."); + wxLogError(_("Value must be numeric.")); + return; + } + Variable img_var(name, val); + GlobalCmdHist::getInstance().addCommand( + new PT::SetVariableCmd(*pano, images_list->GetSelected(), img_var)); + } + } } } -void ImagesPanel::OnRollTextChanged ( wxCommandEvent & e ) +void ImagesPanel::OnImageLinkChanged(wxCommandEvent &e ) { - if ( images_list->GetSelected().size() > 0 ) { - wxString text = XRCCTRL(*this, "images_text_roll" - , wxTextCtrl) ->GetValue(); - DEBUG_INFO ("roll = " << text ); - if (text == wxT("")) { - return; - } + // link or unlink yaw, pitch and roll for selected stacks. + bool inherit = e.IsChecked(); + + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> variables; + variables.insert(HuginBase::ImageVariableGroup::IVE_Roll); + variables.insert(HuginBase::ImageVariableGroup::IVE_Pitch); + variables.insert(HuginBase::ImageVariableGroup::IVE_Yaw); - double val; - if (!str2double(text, val)) { -// if (!text.ToDouble(&val)) { - wxLogError(_("Value must be numeric.")); - return; - } - ChangePano ( "r" , val ); - } + GlobalCmdHist::getInstance().addCommand( + new PT::ChangePartImagesLinkingCmd(*pano, images_list->GetSelected(), + variables, inherit, + HuginBase::StandardImageVariableGroups::getStackVariables()) + ); } void ImagesPanel::OnOptAnchorChanged(wxCommandEvent &e ) @@ -492,9 +509,12 @@ void ImagesPanel::DisableImageCtrls() { // disable controls - XRCCTRL(*this, "images_text_yaw", wxTextCtrl) ->Disable(); - XRCCTRL(*this, "images_text_roll", wxTextCtrl) ->Disable(); - XRCCTRL(*this, "images_text_pitch", wxTextCtrl) ->Disable(); + XRCCTRL(*this, "images_text_y", wxTextCtrl) ->Disable(); + XRCCTRL(*this, "images_text_r", wxTextCtrl) ->Disable(); + XRCCTRL(*this, "images_text_p", wxTextCtrl) ->Disable(); + XRCCTRL(*this, "images_text_X", wxTextCtrl) ->Disable(); + XRCCTRL(*this, "images_text_Y", wxTextCtrl) ->Disable(); + XRCCTRL(*this, "images_text_Z", wxTextCtrl) ->Disable(); m_smallImgCtrl->SetBitmap(m_empty); m_smallImgCtrl->GetParent()->Layout(); m_smallImgCtrl->Refresh(); @@ -505,19 +525,28 @@ XRCCTRL(*this, "images_reset_pos", wxButton)->Disable(); XRCCTRL(*this, "action_remove_images", wxButton)->Disable(); XRCCTRL(*this, "images_celeste_button", wxButton)->Disable(); + m_stackNewButton->Disable(); + m_stackChangeButton->Disable(); + m_linkCheckBox->Disable(); } void ImagesPanel::EnableImageCtrls() { // enable control if not already enabled - if (XRCCTRL(*this, "images_text_yaw", wxTextCtrl)->Enable()) { - XRCCTRL(*this, "images_text_roll", wxTextCtrl) ->Enable(); - XRCCTRL(*this, "images_text_pitch", wxTextCtrl) ->Enable(); + if (XRCCTRL(*this, "images_text_y", wxTextCtrl)->Enable()) { + XRCCTRL(*this, "images_text_r", wxTextCtrl) ->Enable(); + XRCCTRL(*this, "images_text_p", wxTextCtrl) ->Enable(); + XRCCTRL(*this, "images_text_X", wxTextCtrl) ->Enable(); + XRCCTRL(*this, "images_text_Y", wxTextCtrl) ->Enable(); + XRCCTRL(*this, "images_text_Z", wxTextCtrl) ->Enable(); m_moveDownButton->Enable(); m_moveUpButton->Enable(); XRCCTRL(*this, "images_reset_pos", wxButton)->Enable(); XRCCTRL(*this, "action_remove_images", wxButton)->Enable(); XRCCTRL(*this, "images_celeste_button", wxButton)->Enable(); + m_stackNewButton->Enable(); + m_stackChangeButton->Enable(); + m_linkCheckBox->Enable(); } } @@ -527,14 +556,25 @@ std::string val; val = doubleToString(const_map_get(vars,"y").getValue(),m_degDigits); - XRCCTRL(*this, "images_text_yaw", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); + XRCCTRL(*this, "images_text_y", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); val = doubleToString(const_map_get(vars,"p").getValue(),m_degDigits); - XRCCTRL(*this, "images_text_pitch", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); + XRCCTRL(*this, "images_text_p", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); val = doubleToString(const_map_get(vars,"r").getValue(),m_degDigits); - XRCCTRL(*this, "images_text_roll", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); + XRCCTRL(*this, "images_text_r", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); + val = doubleToString(const_map_get(vars,"TrX").getValue(),m_degDigits); + XRCCTRL(*this, "images_text_X", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); + + val = doubleToString(const_map_get(vars,"TrY").getValue(),m_degDigits); + XRCCTRL(*this, "images_text_Y", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); + + val = doubleToString(const_map_get(vars,"TrZ").getValue(),m_degDigits); + XRCCTRL(*this, "images_text_Z", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); + + m_linkCheckBox->SetValue(pano->getImage(imgNr).YawisLinked()); + ShowExifInfo(imgNr); ShowImage(imgNr); } @@ -614,9 +654,12 @@ void ImagesPanel::ClearImgParameters() { - XRCCTRL(*this, "images_text_yaw", wxTextCtrl) ->Clear(); - XRCCTRL(*this, "images_text_roll", wxTextCtrl) ->Clear(); - XRCCTRL(*this, "images_text_pitch", wxTextCtrl) ->Clear(); + XRCCTRL(*this, "images_text_y", wxTextCtrl) ->Clear(); + XRCCTRL(*this, "images_text_r", wxTextCtrl) ->Clear(); + XRCCTRL(*this, "images_text_p", wxTextCtrl) ->Clear(); + XRCCTRL(*this, "images_text_X", wxTextCtrl) ->Clear(); + XRCCTRL(*this, "images_text_Y", wxTextCtrl) ->Clear(); + XRCCTRL(*this, "images_text_Z", wxTextCtrl) ->Clear(); m_smallImgCtrl->SetBitmap(m_empty); m_smallImgCtrl->GetParent()->Layout(); @@ -755,6 +798,9 @@ vars[i].insert(make_pair("y", Variable("y",0.0))); vars[i].insert(make_pair("p", Variable("p",0.0))); vars[i].insert(make_pair("r", Variable("r",0.0))); + vars[i].insert(make_pair("TrX", Variable("TrX",0.0))); + vars[i].insert(make_pair("TrY", Variable("TrY",0.0))); + vars[i].insert(make_pair("TrZ", Variable("TrZ",0.0))); i++; } GlobalCmdHist::getInstance().addCommand( @@ -866,6 +912,49 @@ Refresh(); }; +void ImagesPanel::OnNewStack(wxCommandEvent & e) +{ + /** @todo it is possibly better to link just the Stack variable, + * since the majority of stacks need self alignment, and this links angles. + */ + GlobalCmdHist::getInstance().addCommand + ( + new PT::NewPartCmd + ( + *pano, images_list->GetSelected(), + HuginBase::StandardImageVariableGroups::getStackVariables() + ) + ); +} + +void ImagesPanel::OnChangeStack(wxCommandEvent & e) +{ + // ask user for stack number, if there are enoguh. + HuginBase::StandardImageVariableGroups variableGroups(*pano); + if (variableGroups.getStacks().getNumberOfParts() == 1) + { + wxLogError(_("Your project must have at least two stacks before you can assign images to a different stack.")); + return; + } + long nr = wxGetNumberFromUser( + _("Enter new stack number"), + _("stack number"), + _("Change stack number"), 0, 0, + variableGroups.getStacks().getNumberOfParts()-1 + ); + if (nr >= 0) { + // user accepted + GlobalCmdHist::getInstance().addCommand + ( + new PT::ChangePartNumberCmd + ( + *pano, images_list->GetSelected(), nr, + HuginBase::StandardImageVariableGroups::getStackVariables() + ) + ); + } +} + IMPLEMENT_DYNAMIC_CLASS(ImagesPanel, wxPanel) ImagesPanelXmlHandler::ImagesPanelXmlHandler() Modified: hugin/trunk/src/hugin1/hugin/ImagesPanel.h =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesPanel.h 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/ImagesPanel.h 2009-12-23 19:39:57 UTC (rev 4830) @@ -100,9 +100,8 @@ // Here we select the preview image /** gui -> pano */ - void OnYawTextChanged ( wxCommandEvent & e ); - void OnPitchTextChanged ( wxCommandEvent & e ); - void OnRollTextChanged ( wxCommandEvent & e ); + void OnVarTextChanged ( wxCommandEvent & e ); + void OnImageLinkChanged ( wxCommandEvent & e ); void OnOptAnchorChanged(wxCommandEvent & e); void OnColorAnchorChanged(wxCommandEvent &e ); @@ -112,6 +111,9 @@ void OnMoveImageUp(wxCommandEvent & e); void OnMoveImageDown(wxCommandEvent & e); + + void OnNewStack(wxCommandEvent & e); + void OnChangeStack(wxCommandEvent & e); /** gui -> pano * @@ -162,10 +164,14 @@ wxButton * m_colorAnchorButton; wxButton * m_moveUpButton; wxButton * m_moveDownButton; + wxButton * m_stackNewButton; + wxButton * m_stackChangeButton; wxButton * m_matchingButton; wxButton * m_cleaningButton; wxButton * m_removeCPButton; + + wxCheckBox * m_linkCheckBox; wxPanel *m_img_ctrls; wxChoice *m_CPDetectorChoice; Modified: hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/LayoutRemapper.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -21,6 +21,8 @@ * */ +#include <cmath> + #include "LayoutRemapper.h" #include "ViewState.h" @@ -79,20 +81,26 @@ // find bounds for image drawing double offset_x = preview_width / 2.0; double offset_y = preview_height / 2.0; - double start_x = centre_x - offset_x; - double start_y = centre_y - offset_y; - double end_x = centre_x + offset_x; - double end_y = centre_y + offset_y; - face.vertex_c[0][0][0] = start_x; - face.vertex_c[0][0][1] = start_y; - face.vertex_c[0][1][0] = start_x; - face.vertex_c[0][1][1] = end_y; - face.vertex_c[1][0][0] = end_x; - face.vertex_c[1][0][1] = start_y; - face.vertex_c[1][1][0] = end_x; - face.vertex_c[1][1][1] = end_y; + // find the roll of the image. + double angle = src_img->getRoll() * (M_PI / 180.0) + (M_PI / 2.0); + double rsin = std::sin(angle); + double rcos = std::cos(angle); + double rsin_x = rsin * offset_x; + double rcos_x = rcos * offset_x; + double rsin_y = rsin * offset_y; + double rcos_y = rcos * offset_y; + + face.vertex_c[0][0][0] = -rsin_x - rcos_y + centre_x; + face.vertex_c[0][0][1] = rcos_x -rsin_y + centre_y; + face.vertex_c[0][1][0] = -rsin_x + rcos_y + centre_x; + face.vertex_c[0][1][1] = rcos_x + rsin_y + centre_y; + face.vertex_c[1][0][0] = rsin_x - rcos_y + centre_x; + face.vertex_c[1][0][1] = -rcos_x - rsin_y + centre_y; + face.vertex_c[1][1][0] = rsin_x + rcos_y + centre_x; + face.vertex_c[1][1][1] = -rcos_x + rsin_y + centre_y; + // Specify our one face next time GetNextFaceCoordinates is called. done = false; } Modified: hugin/trunk/src/hugin1/hugin/LensPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -568,9 +568,14 @@ } // are we linking or unlinking? bool inherit = e.IsChecked(); + /* make a set of variables containg the one variable we are changing for + * the command object. */ + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> variables; + variables.insert(varname); GlobalCmdHist::getInstance().addCommand( - new PT::ChangeLensVariableLinkingCmd(*pano, m_selectedImages, - varname, inherit) + new PT::ChangePartImagesLinkingCmd(*pano, m_selectedImages, + variables, inherit, + HuginBase::StandardImageVariableGroups::getLensVariables()) ); } } @@ -1014,10 +1019,10 @@ // create a new lens, start with a copy of the old lens. GlobalCmdHist::getInstance().addCommand( new PT::NewPartCmd( - *pano, - m_selectedImages, - variable_groups->getLensVariables() - ) + *pano, + m_selectedImages, + HuginBase::StandardImageVariableGroups::getLensVariables() + ) ); } else { wxLogError(_("Please select an image and try again")); @@ -1027,14 +1032,23 @@ void LensPanel::OnChangeLens(wxCommandEvent & e) { if (m_selectedImages.size() > 0) { + if (variable_groups->getLenses().getNumberOfParts() == 1) + { + wxLogError(_("Your project must have at least two lenses before you can change which lens these images use.")); + return; + } // ask user for lens number. - long nr = wxGetNumberFromUser(_("Enter new lens number"), _("Lens number"), - _("Change lens number"), 0, 0, - variable_groups->getLenses().getNumberOfParts()-1); + long nr = wxGetNumberFromUser( + _("Enter new lens number"), + _("Lens number"), + _("Change lens number"), 0, 0, + variable_groups->getLenses().getNumberOfParts()-1 + ); if (nr >= 0) { // user accepted GlobalCmdHist::getInstance().addCommand( - new PT::ChangeLensNumberCmd(*pano, m_selectedImages, nr) + new PT::ChangePartNumberCmd(*pano, m_selectedImages, nr, + HuginBase::StandardImageVariableGroups::getLensVariables()) ); } } else { @@ -1146,12 +1160,15 @@ }; if (needs_unlink) { + std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> variables; + variables.insert(HuginBase::ImageVariableGroup::IVE_ExposureValue); GlobalCmdHist::getInstance().addCommand( - new ChangeLensVariableLinkingCmd( + new ChangePartImagesLinkingCmd( *pano, selImg, - HuginBase::ImageVariableGroup::IVE_ExposureValue, - false) + variables, + false, + HuginBase::StandardImageVariableGroups::getLensVariables()) ); } GlobalCmdHist::getInstance().addCommand( Modified: hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -57,11 +57,21 @@ // EVT_BUTTON(XRCID("opt_pitch_equalize"), OptimizePanel::OnEqPitch) EVT_BUTTON(XRCID("opt_roll_select"), OptimizePanel::OnListButton) EVT_BUTTON(XRCID("opt_roll_clear"), OptimizePanel::OnListButton) + EVT_BUTTON(XRCID("opt_x_select"), OptimizePanel::OnListButton) + EVT_BUTTON(XRCID("opt_x_clear"), OptimizePanel::OnListButton) + EVT_BUTTON(XRCID("opt_y_select"), OptimizePanel::OnListButton) + EVT_BUTTON(XRCID("opt_y_clear"), OptimizePanel::OnListButton) + EVT_BUTTON(XRCID("opt_z_select"), OptimizePanel::OnListButton) + EVT_BUTTON(XRCID("opt_z_clear"), OptimizePanel::OnListButton) + EVT_CHOICE(XRCID("optimize_panel_mode"), OptimizePanel::OnChangeMode) // EVT_BUTTON(XRCID("opt_roll_equalize"), OptimizePanel::OnEqRoll) EVT_CHECKLISTBOX(XRCID("optimizer_yaw_list"), OptimizePanel::OnCheckBoxChanged) EVT_CHECKLISTBOX(XRCID("optimizer_pitch_list"), OptimizePanel::OnCheckBoxChanged) EVT_CHECKLISTBOX(XRCID("optimizer_roll_list"), OptimizePanel::OnCheckBoxChanged) + EVT_CHECKLISTBOX(XRCID("optimizer_x_list"), OptimizePanel::OnCheckBoxChanged) + EVT_CHECKLISTBOX(XRCID("optimizer_y_list"), OptimizePanel::OnCheckBoxChanged) + EVT_CHECKLISTBOX(XRCID("optimizer_z_list"), OptimizePanel::OnCheckBoxChanged) EVT_CHECKLISTBOX(XRCID("optimizer_v_list"), OptimizePanel::OnCheckBoxChanged) EVT_CHECKLISTBOX(XRCID("optimizer_a_list"), OptimizePanel::OnCheckBoxChanged) EVT_CHECKLISTBOX(XRCID("optimizer_b_list"), OptimizePanel::OnCheckBoxChanged) @@ -106,6 +116,9 @@ m_yaw_list = XRCCTRL(*this, "optimizer_yaw_list", wxCheckListBox); m_pitch_list = XRCCTRL(*this, "optimizer_pitch_list", wxCheckListBox); m_roll_list = XRCCTRL(*this, "optimizer_roll_list", wxCheckListBox); + m_x_list = XRCCTRL(*this, "optimizer_x_list", wxCheckListBox); + m_y_list = XRCCTRL(*this, "optimizer_y_list", wxCheckListBox); + m_z_list = XRCCTRL(*this, "optimizer_z_list", wxCheckListBox); m_v_list = XRCCTRL(*this, "optimizer_v_list", wxCheckListBox); m_a_list = XRCCTRL(*this, "optimizer_a_list", wxCheckListBox); @@ -184,6 +197,18 @@ SetCheckMark(m_roll_list,true); } else if (e.GetId() == XRCID("opt_roll_clear")) { SetCheckMark(m_roll_list,false); + } else if (e.GetId() == XRCID("opt_x_select")) { + SetCheckMark(m_x_list,true); + } else if (e.GetId() == XRCID("opt_x_clear")) { + SetCheckMark(m_x_list,false); + } else if (e.GetId() == XRCID("opt_y_select")) { + SetCheckMark(m_y_list,true); + } else if (e.GetId() == XRCID("opt_y_clear")) { + SetCheckMark(m_y_list,false); + } else if (e.GetId() == XRCID("opt_z_select")) { + SetCheckMark(m_z_list,true); + } else if (e.GetId() == XRCID("opt_z_clear")) { + SetCheckMark(m_z_list,false); } else { DEBUG_FATAL("An error has occured"); } @@ -277,6 +302,16 @@ imgopt.insert("y"); } + if (m_x_list->IsChecked(i)) { + imgopt.insert("TrX"); + } + if (m_y_list->IsChecked(i)) { + imgopt.insert("TrY"); + } + if (m_z_list->IsChecked(i)) { + imgopt.insert("TrZ"); + } + optvars.push_back(imgopt); } @@ -350,6 +385,9 @@ m_yaw_list->Append(wxString::Format(wxT("%d"),nr)); m_pitch_list->Append(wxString::Format(wxT("%d"),nr)); m_roll_list->Append(wxString::Format(wxT("%d"),nr)); + m_x_list->Append(wxString::Format(wxT("%d"),nr)); + m_y_list->Append(wxString::Format(wxT("%d"),nr)); + m_z_list->Append(wxString::Format(wxT("%d"),nr)); nr++; } @@ -359,6 +397,9 @@ m_yaw_list->Delete(nr-1); m_pitch_list->Delete(nr-1); m_roll_list->Delete(nr-1); + m_x_list->Delete(nr-1); + m_y_list->Delete(nr-1); + m_z_list->Delete(nr-1); nr--; } @@ -382,6 +423,21 @@ m_roll_list->SetString(*it, wxString::Format(wxT("%d (%.3f)"), *it, const_map_get(vars,"r").getValue())); m_roll_list->Check(*it,sel); + + sel = m_x_list->IsChecked(*it); + m_x_list->SetString(*it, wxString::Format(wxT("%d (%.3f)"), + *it, const_map_get(vars,"TrX").getValue())); + m_x_list->Check(*it,sel); + + sel = m_y_list->IsChecked(*it); + m_y_list->SetString(*it, wxString::Format(wxT("%d (%.3f)"), + *it, const_map_get(vars,"TrY").getValue())); + m_y_list->Check(*it,sel); + + sel = m_z_list->IsChecked(*it); + m_z_list->SetString(*it, wxString::Format(wxT("%d (%.3f)"), + *it, const_map_get(vars,"TrZ").getValue())); + m_z_list->Check(*it,sel); } // display lens values if they are linked @@ -475,6 +531,9 @@ m_yaw_list->Check(i,false); m_pitch_list->Check(i,false); m_roll_list->Check(i,false); + m_x_list->Check(i,false); + m_y_list->Check(i,false); + m_z_list->Check(i,false); unsigned int lensNr = variable_groups->getLenses().getPartNumber(i); for(set<string>::const_iterator it = optvec[i].begin(); @@ -489,6 +548,15 @@ if (*it == "r") { m_roll_list->Check(i); } + if (*it == "TrX") { + m_x_list->Check(i); + } + if (*it == "TrY") { + m_y_list->Check(i); + } + if (*it == "TrZ") { + m_z_list->Check(i); + } if (*it == "v") { m_v_list->Check(lensNr); @@ -545,6 +613,10 @@ optvars2.insert("y"); optvars2.insert("p"); optvars2.insert("r"); + // TODO: check tilt mode here, before inserting the parameters. + optvars2.insert("TrX"); + optvars2.insert("TrY"); + optvars2.insert("TrZ"); // remove vertical and horizontal control points CPVector cps = optPano.getCtrlPoints(); @@ -693,6 +765,11 @@ SetCheckMark(m_yaw_list,true); SetCheckMark(m_roll_list,true); SetCheckMark(m_pitch_list,true); + /* + SetCheckMark(m_x_list,true); + SetCheckMark(m_y_list,true); + SetCheckMark(m_z_list,true); + */ SetCheckMark(m_v_list,false); SetCheckMark(m_a_list,false); SetCheckMark(m_b_list,false); @@ -767,8 +844,20 @@ // if the user selected custom if (mode != OPT_CUSTOM && m_pano->getNrOfImages() > 0) { - // get anchor image + // get anchor image and images linked to its position. unsigned int refImg = m_pano->getOptions().optimizeReferenceImage; + std::vector<unsigned int> refImgs; + const HuginBase::SrcPanoImage & refImage = m_pano->getImage(refImg); + for (unsigned int imgNr = 0; imgNr < m_pano->getNrOfImages(); imgNr++) + { + const HuginBase::SrcPanoImage & compImage = m_pano->getImage(imgNr); + if (refImage.RollisLinkedWith(compImage) && + refImage.PitchisLinkedWith(compImage) && + refImage.YawisLinkedWith(compImage)) + { + refImgs.push_back(imgNr); + } + } // count number of vertical/horizontal control points int nHCP = 0; @@ -788,26 +877,43 @@ // try to select sensible position optimisation parameters, // dependent on output projection + bool linkRefImgsYaw, linkRefImgsPitch, linkRefImgsRoll; switch (m_pano->getOptions().getProjection()) { case PT::PanoramaOptions::RECTILINEAR: - m_roll_list->Check(refImg, (nVCP+nHCP) >=1 ); - m_yaw_list->Check(refImg, (nVCP+nHCP) >=3 && (nVCP >= 1) && (nHCP >= 1) ); - m_pitch_list->Check(refImg, (nVCP+nHCP) >= 2 ); + linkRefImgsRoll = nVCP + nHCP >= 1; + linkRefImgsYaw = nVCP + nHCP >= 3 && nVCP >= 1 && nHCP >= 1; + linkRefImgsPitch = nVCP + nHCP >= 2; + for (std::vector<unsigned int>::iterator it = refImgs.begin(); + it != refImgs.end(); it++) + { + m_roll_list->Check(*it, linkRefImgsRoll); + m_yaw_list->Check(*it, linkRefImgsYaw); + m_pitch_list->Check(*it, linkRefImgsPitch); + } break; case PT::PanoramaOptions::CYLINDRICAL: case PT::PanoramaOptions::EQUIRECTANGULAR: - m_yaw_list->Check(refImg,false); - m_pitch_list->Check(refImg, (nHCP+nVCP > 1)); - m_roll_list->Check(refImg, (nHCP+nVCP >= 1)); + linkRefImgsPitch = nHCP + nVCP > 1; + linkRefImgsRoll = nHCP + nVCP >= 1; + for (std::vector<unsigned int>::iterator it = refImgs.begin(); + it != refImgs.end(); it++) + { + m_roll_list->Check(*it, linkRefImgsRoll); + m_yaw_list->Check(*it, false); + m_pitch_list->Check(*it, linkRefImgsPitch); + } break; default: break; } - + // disable all manual settings m_yaw_list->Disable(); m_pitch_list->Disable(); m_roll_list->Disable(); + m_x_list->Disable(); + m_y_list->Disable(); + m_z_list->Disable(); m_v_list->Disable(); m_a_list->Disable(); m_b_list->Disable(); @@ -824,6 +930,9 @@ m_yaw_list->Enable(); m_pitch_list->Enable(); m_roll_list->Enable(); + m_x_list->Enable(); + m_y_list->Enable(); + m_z_list->Enable(); m_v_list->Enable(); m_a_list->Enable(); m_b_list->Enable(); Modified: hugin/trunk/src/hugin1/hugin/OptimizePanel.h =================================================================== --- hugin/trunk/src/hugin1/hugin/OptimizePanel.h 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/OptimizePanel.h 2009-12-23 19:39:57 UTC (rev 4830) @@ -27,6 +27,7 @@ #include <PT/Panorama.h> #include <wx/xrc/xmlres.h> #include <hugin_base/panodata/StandardImageVariableGroups.h> +#include <panodata/StandardImageVariableGroups.h> class wxCheckListBox; class wxCheckBox; @@ -94,6 +95,10 @@ wxCheckListBox * m_pitch_list; wxCheckListBox * m_roll_list; + wxCheckListBox * m_x_list; + wxCheckListBox * m_y_list; + wxCheckListBox * m_z_list; + wxCheckListBox * m_v_list; wxCheckListBox * m_a_list; wxCheckListBox * m_b_list; Modified: hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.h =================================================================== --- hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.h 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/OptimizePhotometricPanel.h 2009-12-23 19:39:57 UTC (rev 4830) @@ -25,7 +25,7 @@ #define _OPTIMIZE_PHOTO_PANEL_H #include <PT/Panorama.h> -#include <hugin_base/panodata/StandardImageVariableGroups.h> +#include <panodata/StandardImageVariableGroups.h> class wxCheckListBox; Modified: hugin/trunk/src/hugin1/hugin/PreviewIdentifyTool.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PreviewIdentifyTool.cpp 2009-12-23 18:09:40 UTC (rev 4829) +++ hugin/trunk/src/hugin1/hugin/PreviewIdentifyTool.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -107,6 +107,9 @@ GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, rect_tex_data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + // clamp texture so it won't wrap over the border. + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); } { // the circular one should look similar to the rectangle one, but we @@ -147,6 +150,9 @@ GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, circle_tex_data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + // clamp texture so it won't wrap over the border. + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); } } PreviewIdentifyTool::~PreviewIdentifyTool() Copied: hugin/trunk/src/hugin1/hugin/PreviewLayoutLinesTool.cpp (from rev 4829, hugin/branches/gsoc2009_layout/src/hugin1/hugin/PreviewLayoutLinesTool.cpp) =================================================================== --- hugin/trunk/src/hugin1/hugin/PreviewLayoutLinesTool.cpp (rev 0) +++ hugin/trunk/src/hugin1/hugin/PreviewLayoutLinesTool.cpp 2009-12-23 19:39:57 UTC (rev 4830) @@ -0,0 +1,645 @@ +// -*- c-basic-offset: 4 -*- +/** @file PreviewILayoutLineTool.cpp + * + * @author James Legg + * + * 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 software 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 software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "panoinc_WX.h" +#include "panoinc.h" + +#include "PreviewLayoutLinesTool.h" +#include <config.h> + +#include "base_wx/platform.h" +#include "MainFrame.h" + +#include <wx/platform.h> +#ifdef __WXMAC__ +#include <OpenGL/gl.h> +#include <OpenGL/glu.h> +#else +#include <GL/gl.h> +#include <GL/glu.h> +#endif + +#include <cfloat> +#include <cmath> + +// the size of the rectangular texture. Must be a power of two, and at least 8. +#define rect_ts 64 + +// The resolution to use to sample overlaps. +/* The time it takes to sample it is a multiple of this squared + a constant. + * So keep it low to... [truncated message content] |