From: <da...@us...> - 2008-01-15 23:16:23
|
Revision: 2644 http://hugin.svn.sourceforge.net/hugin/?rev=2644&view=rev Author: dangelo Date: 2008-01-15 15:14:56 -0800 (Tue, 15 Jan 2008) Log Message: ----------- fixed exiftool makefile rules Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp hugin/trunk/src/hugin1/hugin/config_defaults.h hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h Modified: hugin/trunk/src/hugin1/base_wx/huginConfig.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-01-15 23:08:11 UTC (rev 2643) +++ hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-01-15 23:14:56 UTC (rev 2644) @@ -118,6 +118,9 @@ progs.enfuse = getProgram(config,bindir, wxT("enfuse"), wxT("Enfuse")); progs.enfuse_opts = config->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(); + progs.exiftool = getProgram(config,bindir, wxT("exiftool"), wxT("Exiftool")); + progs.exiftool_opts = config->Read(wxT("/Exiftool/Args"), wxT(HUGIN_EXIFTOOL_ARGS)).mb_str(); + // smartblend (never bundled) progs.smartblend = config->Read(wxT("/Smartblend/SmartblendExe"),wxT("smartblend.exe")).mb_str(); progs.smartblend_opts = config->Read(wxT("/Smartblend/SmartblendArgs"),wxT(HUGIN_SMARTBLEND_ARGS)).mb_str(); Modified: hugin/trunk/src/hugin1/hugin/config_defaults.h =================================================================== --- hugin/trunk/src/hugin1/hugin/config_defaults.h 2008-01-15 23:08:11 UTC (rev 2643) +++ hugin/trunk/src/hugin1/hugin/config_defaults.h 2008-01-15 23:14:56 UTC (rev 2644) @@ -72,6 +72,9 @@ #define HUGIN_APSIFT_EXE_CUSTOM false +// Exiftool +#define HUGIN_EXIFTOOL_ARGS "-overwrite_original_in_place -TagsFromFile" + #define HUGIN_EXECDIALOG_ENABLED 1l // Program defaults Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-01-15 23:08:11 UTC (rev 2643) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-01-15 23:14:56 UTC (rev 2644) @@ -176,7 +176,7 @@ } o << endl; - o << "EXIFTOOL_COPY_ARGS=-TagsFromFile -overwrite_original_in_place" << endl; + o << "EXIFTOOL_COPY_ARGS=" << progs.exiftool_opts << endl; o << endl; string hdrExt = string(".") + opts.outputImageTypeHDR; @@ -520,7 +520,7 @@ for (unsigned i=0; i < stacks.size(); i++) { o << "$(LDR_STACK_" << i << ") : $(LDR_STACK_" << i << "_INPUT)" << endl - << "\t$(ENFUSE) -o $(LDR_STACK_" << i << ") $(LDR_STACK_" << i << "_INPUT)" << endl + << "\t$(ENFUSE) $(ENFUSE_OPTS) -o $(LDR_STACK_" << i << ") $(LDR_STACK_" << i << "_INPUT)" << endl << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl << endl; } Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h 2008-01-15 23:08:11 UTC (rev 2643) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h 2008-01-15 23:14:56 UTC (rev 2644) @@ -57,6 +57,7 @@ std::string smartblend; std::string smartblend_opts; std::string exiftool; + std::string exiftool_opts; PTPrograms() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-01-16 07:38:46
|
Revision: 2645 http://hugin.svn.sourceforge.net/hugin/?rev=2645&view=rev Author: dangelo Date: 2008-01-15 23:38:45 -0800 (Tue, 15 Jan 2008) Log Message: ----------- completely replaced HUGIN_OSX_BUNDLED defines with MAC_SELF_CONTAINED_BUNDLE Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/platform.cpp hugin/trunk/src/hugin1/base_wx/platform.h hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp hugin/trunk/src/hugin_base/algorithms/external/to-be-added/AutoCtrlPointCreator.cpp Modified: hugin/trunk/src/hugin1/base_wx/platform.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/platform.cpp 2008-01-15 23:14:56 UTC (rev 2644) +++ hugin/trunk/src/hugin1/base_wx/platform.cpp 2008-01-16 07:38:45 UTC (rev 2645) @@ -28,7 +28,7 @@ #include <hugin_utils/utils.h> -#if defined __WXMAC__ && defined HUGIN_OSX_BUNDLED +#if defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE #include <CoreFoundation/CFBundle.h> Modified: hugin/trunk/src/hugin1/base_wx/platform.h =================================================================== --- hugin/trunk/src/hugin1/base_wx/platform.h 2008-01-15 23:14:56 UTC (rev 2644) +++ hugin/trunk/src/hugin1/base_wx/platform.h 2008-01-16 07:38:45 UTC (rev 2645) @@ -29,7 +29,7 @@ #include "panoinc_WX.h" -#if defined __WXMAC__ && defined HUGIN_OSX_BUNDLED +#if defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE #include <CoreFoundation/CFString.h> #include <wx/mac/private.h> wxString MacGetPathTOBundledResourceFile(CFStringRef filename); Modified: hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp =================================================================== --- hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp 2008-01-15 23:14:56 UTC (rev 2644) +++ hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp 2008-01-16 07:38:45 UTC (rev 2645) @@ -111,7 +111,7 @@ m_locale.AddCatalogLookupPathPrefix(exePath + wxT("/locale")); #if defined __WXMSW__ m_locale.AddCatalogLookupPathPrefix(wxT("./locale")); -#elif (defined __WXMAC__ && defined HUGIN_OSX_BUNDLED) +#elif (defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE) // TODO: add localisation init #else DEBUG_INFO("add locale path: " << INSTALL_LOCALE_DIR); Modified: hugin/trunk/src/hugin_base/algorithms/external/to-be-added/AutoCtrlPointCreator.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/external/to-be-added/AutoCtrlPointCreator.cpp 2008-01-15 23:14:56 UTC (rev 2644) +++ hugin/trunk/src/hugin_base/algorithms/external/to-be-added/AutoCtrlPointCreator.cpp 2008-01-16 07:38:45 UTC (rev 2645) @@ -166,7 +166,7 @@ return cps; } } -#elif (defined __WXMAC__) && HUGIN_OSX_BUNDLED +#elif (defined __WXMAC__) && defined MAC_SELF_CONTAINED_BUNDLE wxString autopanoExe = wxConfigBase::Get()->Read(wxT("/AutoPanoSift/AutopanoExe"), wxT(HUGIN_APSIFT_EXE)); //if the autopano-sift front end specified in preference does not exist: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-01-16 19:09:11
|
Revision: 2652 http://hugin.svn.sourceforge.net/hugin/?rev=2652&view=rev Author: dangelo Date: 2008-01-16 11:09:10 -0800 (Wed, 16 Jan 2008) Log Message: ----------- Try to correctly execute HuginStitchProject.app, and avoid a compilation error in hugin_stitch_project.cpp. (As always, I don't have any chance to test the OSX code paths) Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/platform.cpp hugin/trunk/src/hugin1/base_wx/platform.h hugin/trunk/src/hugin1/hugin/PanoPanel.cpp hugin/trunk/src/hugin_config.h.in.cmake Modified: hugin/trunk/src/hugin1/base_wx/platform.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/platform.cpp 2008-01-16 16:20:25 UTC (rev 2651) +++ hugin/trunk/src/hugin1/base_wx/platform.cpp 2008-01-16 19:09:10 UTC (rev 2652) @@ -28,64 +28,31 @@ #include <hugin_utils/utils.h> -#if defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE +#if defined __WXMAC__ #include <CoreFoundation/CFBundle.h> -wxString MacGetPathTOBundledResourceFile(CFStringRef filename) +wxString MacPathToMainBundleExecutable(CFStringRef bundlePath) { wxString theResult = wxT(""); - CFBundleRef mainbundle = CFBundleGetMainBundle(); - if(mainbundle == NULL) + CFBundleRef bundle = CFBundleCreate(NULL, bundlePath); + if(bundle == NULL) { - DEBUG_ERROR("Mac: Not bundled"); + DEBUG_ERROR("Mac: CFBundleCreate (" << bundlePath << " ) failed" ); } else { - CFURLRef XRCurl = CFBundleCopyResourceURL(mainbundle, filename, NULL, NULL); - if(XRCurl == NULL) - { - DEBUG_ERROR("Mac: Cannot locate the file in bundle."); - } - else - { - CFStringRef pathInCFString = CFURLCopyFileSystemPath(XRCurl, kCFURLPOSIXPathStyle); - CFRelease( XRCurl ); - if(pathInCFString == NULL) - { - DEBUG_ERROR("Mac: Failed to get URL in CFString"); - } - else - { - CFRetain( pathInCFString ); - theResult = wxMacCFStringHolder(pathInCFString).AsString(wxLocale::GetSystemEncoding()); - DEBUG_INFO("Mac: returned the resource file's path in the application bundle"); - } - } - } - return theResult; -} - -wxString MacGetPathTOBundledExecutableFile(CFStringRef filename) -{ - wxString theResult = wxT(""); - - CFBundleRef mainbundle = CFBundleGetMainBundle(); - if(mainbundle == NULL) - { - DEBUG_ERROR("Mac: Not bundled"); - } - else - { - CFURLRef PTOurl = CFBundleCopyAuxiliaryExecutableURL(mainbundle, filename); + CFURLRef PTOurl = CFBundleCopyExecutableURL(bundle); + CFRelease( bundle ); if(PTOurl == NULL) { - DEBUG_ERROR("Mac: Cannot locate the file in the bundle."); + DEBUG_ERROR("Mac: Cannot locate the executable in the bundle."); } else { CFURLRef PTOAbsURL = CFURLCopyAbsoluteURL( PTOurl ); + CFRelease( PTOurl ); if(PTOAbsURL == NULL) { DEBUG_ERROR("Mac: Cannot convert the file path to absolute"); @@ -105,12 +72,12 @@ DEBUG_INFO("Mac: returned the executable's full path in the application bundle"); } } - CFRelease( PTOurl ); } } return theResult; } +#if defined MAC_SELF_CONTAINED_BUNDLE wxString MacGetPathTOBundledAppMainExecutableFile(CFStringRef filename) { @@ -176,7 +143,86 @@ return theResult; } +wxString MacGetPathTOBundledResourceFile(CFStringRef filename) +{ + wxString theResult = wxT(""); + CFBundleRef mainbundle = CFBundleGetMainBundle(); + if(mainbundle == NULL) + { + DEBUG_ERROR("Mac: Not bundled"); + } + else + { + CFURLRef XRCurl = CFBundleCopyResourceURL(mainbundle, filename, NULL, NULL); + if(XRCurl == NULL) + { + DEBUG_ERROR("Mac: Cannot locate the file in bundle."); + } + else + { + CFStringRef pathInCFString = CFURLCopyFileSystemPath(XRCurl, kCFURLPOSIXPathStyle); + CFRelease( XRCurl ); + if(pathInCFString == NULL) + { + DEBUG_ERROR("Mac: Failed to get URL in CFString"); + } + else + { + CFRetain( pathInCFString ); + theResult = wxMacCFStringHolder(pathInCFString).AsString(wxLocale::GetSystemEncoding()); + DEBUG_INFO("Mac: returned the resource file's path in the application bundle"); + } + } + } + return theResult; +} + +wxString MacGetPathTOBundledExecutableFile(CFStringRef filename) +{ + wxString theResult = wxT(""); + + CFBundleRef mainbundle = CFBundleGetMainBundle(); + if(mainbundle == NULL) + { + DEBUG_ERROR("Mac: Not bundled"); + } + else + { + CFURLRef PTOurl = CFBundleCopyAuxiliaryExecutableURL(mainbundle, filename); + if(PTOurl == NULL) + { + DEBUG_ERROR("Mac: Cannot locate the file in the bundle."); + } + else + { + CFURLRef PTOAbsURL = CFURLCopyAbsoluteURL( PTOurl ); + if(PTOAbsURL == NULL) + { + DEBUG_ERROR("Mac: Cannot convert the file path to absolute"); + } + else + { + CFStringRef pathInCFString = CFURLCopyFileSystemPath(PTOAbsURL, kCFURLPOSIXPathStyle); + CFRelease( PTOAbsURL ); + if(pathInCFString == NULL) + { + DEBUG_ERROR("Mac: Failed to get URL in CFString"); + } + else + { + CFRetain( pathInCFString ); + theResult = wxMacCFStringHolder(pathInCFString).AsString(wxLocale::GetSystemEncoding()); + DEBUG_INFO("Mac: returned the executable's full path in the application bundle"); + } + } + CFRelease( PTOurl ); + } + } + return theResult; +} + + wxString MacGetPathTOUserDomainTempDir() { wxString tmpDirPath = wxT(""); @@ -199,4 +245,6 @@ return tmpDirPath; } -#endif +#endif // MAC_SELF_CONTAINED_BUNDLE + +#endif // __WXMAC__ \ No newline at end of file Modified: hugin/trunk/src/hugin1/base_wx/platform.h =================================================================== --- hugin/trunk/src/hugin1/base_wx/platform.h 2008-01-16 16:20:25 UTC (rev 2651) +++ hugin/trunk/src/hugin1/base_wx/platform.h 2008-01-16 19:09:10 UTC (rev 2652) @@ -29,13 +29,22 @@ #include "panoinc_WX.h" -#if defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE +#if defined __WXMAC__ + #include <CoreFoundation/CFString.h> #include <wx/mac/private.h> + +wxString MacPathToMainBundleExecutable(CFStringRef bundlePath); + +if defined MAC_SELF_CONTAINED_BUNDLE + wxString MacGetPathTOBundledResourceFile(CFStringRef filename); wxString MacGetPathTOBundledExecutableFile(CFStringRef filename); wxString MacGetPathTOBundledAppMainExecutableFile(CFStringRef filename); wxString MacGetPathTOUserDomainTempDir(); -#endif +#endif // MAC_SELF_CONTAINED_BUNDLE + +#endif __WXMAC__ + #endif Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-01-16 16:20:25 UTC (rev 2651) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-01-16 19:09:10 UTC (rev 2652) @@ -614,6 +614,7 @@ #if defined __WXMAC__ && defined MAC_SELF_CONTAINED_BUNDLE + // HuginStitchProject inside main bundle wxString hugin_stitch_project = MacGetPathTOBundledAppMainExecutableFile(CFSTR("HuginStitchProject.app")); if(hugin_stitch_project == wxT("")) { @@ -621,7 +622,10 @@ return; } #elif defined __WXMAC__ - wxString hugin_stitch_project = wxT("HuginStitchProject.app"); + // HuginStitchProject installed in INSTALL_OSX_BUNDLE_DIR + wxString hugin_stitch_project(wxT(INSTALL_OSX_BUNDLE_DIR)); + hugin_stitch_project.append(wxT("HuginStitchProject.app")); + wxString hugin_stitch_project = MacPathToMainBundleExecutable(CFSTR(hugin_stitch_project.mb_str())); #else wxString hugin_stitch_project = wxT("hugin_stitch_project"); #endif Modified: hugin/trunk/src/hugin_config.h.in.cmake =================================================================== --- hugin/trunk/src/hugin_config.h.in.cmake 2008-01-16 16:20:25 UTC (rev 2651) +++ hugin/trunk/src/hugin_config.h.in.cmake 2008-01-16 19:09:10 UTC (rev 2652) @@ -59,4 +59,8 @@ /* Build a fully self contained OSX bundle (with embedded ressources) */ #cmakedefine MAC_SELF_CONTAINED_BUNDLE +/* contains directory of HuginStitchProject.app, if MAC_SELF_CONTAINED_BUNDLE + is not set. */ +#define INSTALL_OSX_BUNDLE_DIR "${INSTALL_OSX_BUNDLE_DIR}" + #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-01-21 14:43:22
|
Revision: 2676 http://hugin.svn.sourceforge.net/hugin/?rev=2676&view=rev Author: dangelo Date: 2008-01-21 06:43:21 -0800 (Mon, 21 Jan 2008) Log Message: ----------- bugfix: exiftool copied image resolution (dpi), this broke offsets in cropped tiffs Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/config_defaults.h hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp Modified: hugin/trunk/src/hugin1/base_wx/huginConfig.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-01-21 09:18:39 UTC (rev 2675) +++ hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-01-21 14:43:21 UTC (rev 2676) @@ -119,7 +119,7 @@ progs.enfuse_opts = config->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(); progs.exiftool = getProgram(config,bindir, wxT("exiftool"), wxT("Exiftool")); - progs.exiftool_opts = config->Read(wxT("/Exiftool/Args"), wxT(HUGIN_EXIFTOOL_ARGS)).mb_str(); + progs.exiftool_opts = config->Read(wxT("/Exiftool/CopyArgs"), wxT(HUGIN_EXIFTOOL_COPY_ARGS)).mb_str(); // smartblend (never bundled) progs.smartblend = config->Read(wxT("/Smartblend/SmartblendExe"),wxT("smartblend.exe")).mb_str(); Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-01-21 09:18:39 UTC (rev 2675) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-01-21 14:43:21 UTC (rev 2676) @@ -1411,6 +1411,7 @@ void MainFrame::RestoreLayoutOnNextResize() { + cout << "MainFrame::RestoreLayoutOnNextResize()" << endl; m_doRestoreLayout = true; cpe->RestoreLayoutOnNextResize(); lens_panel->RestoreLayoutOnNextResize(); Modified: hugin/trunk/src/hugin1/hugin/config_defaults.h =================================================================== --- hugin/trunk/src/hugin1/hugin/config_defaults.h 2008-01-21 09:18:39 UTC (rev 2675) +++ hugin/trunk/src/hugin1/hugin/config_defaults.h 2008-01-21 14:43:21 UTC (rev 2676) @@ -73,7 +73,7 @@ // Exiftool -#define HUGIN_EXIFTOOL_ARGS "-overwrite_original_in_place -TagsFromFile" +#define HUGIN_EXIFTOOL_COPY_ARGS "--XResolution --YResolution -overwrite_original_in_place -TagsFromFile" #define HUGIN_EXECDIALOG_ENABLED 1l Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-01-21 09:18:39 UTC (rev 2675) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-01-21 14:43:21 UTC (rev 2676) @@ -407,18 +407,24 @@ else cleanTargets += "$(LDR_LAYERS) "; - if (opts.outputLDRExposureLayers) { + if (opts.outputLDRExposureRemapped) + targets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; + else + cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; + + if (opts.outputLDRExposureLayers) targets += " $(LDR_EXPOSURE_LAYERS) "; - cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; - } else + else cleanTargets += "$(LDR_EXPOSURE_LAYERS) "; - if (opts.outputLDRExposureBlended) { + if (opts.outputLDRExposureBlended) targets += " $(LDR_STACKED_BLENDED) "; - cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; - } else + else cleanTargets += "$(LDR_STACKED_BLENDED) "; + // always clean temp files used by exposure stacks + cleanTargets += "$(LDR_STACKS) "; + if (opts.outputHDRBlended) targets += "$(HDR_BLENDED) "; else This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-01-27 18:07:32
|
Revision: 2704 http://hugin.svn.sourceforge.net/hugin/?rev=2704&view=rev Author: dangelo Date: 2008-01-27 10:07:30 -0800 (Sun, 27 Jan 2008) Log Message: ----------- Made hugin compile against released libpano13 again. Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h Modified: hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2008-01-27 17:12:43 UTC (rev 2703) +++ hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2008-01-27 18:07:30 UTC (rev 2704) @@ -53,7 +53,7 @@ #else -static void PTPrintErrorWX(const char* fmt, va_list ap) +static void PTPrintErrorWX(char* fmt, va_list ap) { char message[257]; Modified: hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp =================================================================== --- hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp 2008-01-27 17:12:43 UTC (rev 2703) +++ hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.cpp 2008-01-27 18:07:30 UTC (rev 2704) @@ -37,193 +37,15 @@ #include <panodata/PanoImage.h> #include <panodata/PanoramaData.h> +// This function is not defined in the pano13 headers +extern "C" { +int CheckParams( AlignInfo *g ); +} - namespace HuginBase { namespace PTools { -//------------------------------------------------------------------------------ -// really strange. the pano12.dll for windows doesn't seem to -// contain the SetCorrectionRadius function, so it is included here - -void SetCoordDefaults_copy( CoordInfo *c, int num ); -void cubeZero_copy( double *a, int *n, double *root ); -void squareZero_copy( double *a, int *n, double *root ); -double cubeRoot_copy( double x ); -double smallestRoot_copy( double *p ); -void SetCorrectionRadius_copy( cPrefs *cP ); -int CheckParams_copy( AlignInfo *g ); - - -void SetCoordDefaults_copy( CoordInfo *c, int num ) -{ - c->num = num; - c->x[0] = (double) num; - c->x[1] = c->x[2] = 0.0; - c->set[0] = c->set[1] = c->set[2] = TRUE; -} - -void cubeZero_copy( double *a, int *n, double *root ) -{ - if( a[3] == 0.0 ){ // second order polynomial - squareZero_copy( a, n, root ); - }else{ - double p = ((-1.0/3.0) * (a[2]/a[3]) * (a[2]/a[3]) + a[1]/a[3]) / 3.0; - double q = ((2.0/27.0) * (a[2]/a[3]) * (a[2]/a[3]) * (a[2]/a[3]) - (1.0/3.0) * (a[2]/a[3]) * (a[1]/a[3]) + a[0]/a[3]) / 2.0; - - if( q*q + p*p*p >= 0.0 ){ - *n = 1; - root[0] = cubeRoot_copy(-q + sqrt(q*q + p*p*p)) + cubeRoot_copy(-q - sqrt(q*q + p*p*p)) - a[2] / (3.0 * a[3]); - }else{ - double phi = acos( -q / sqrt(-p*p*p) ); - *n = 3; - root[0] = 2.0 * sqrt(-p) * cos(phi/3.0) - a[2] / (3.0 * a[3]); - root[1] = -2.0 * sqrt(-p) * cos(phi/3.0 + PI/3.0) - a[2] / (3.0 * a[3]); - root[2] = -2.0 * sqrt(-p) * cos(phi/3.0 - PI/3.0) - a[2] / (3.0 * a[3]); - } - } - // PrintError("%lg, %lg, %lg, %lg root = %lg", a[3], a[2], a[1], a[0], root[0]); -} - -void squareZero_copy( double *a, int *n, double *root ){ - if( a[2] == 0.0 ){ // linear equation - if( a[1] == 0.0 ){ // constant - if( a[0] == 0.0 ){ - *n = 1; root[0] = 0.0; - }else{ - *n = 0; - } - }else{ - *n = 1; root[0] = - a[0] / a[1]; - } - }else{ - if( 4.0 * a[2] * a[0] > a[1] * a[1] ){ - *n = 0; - }else{ - *n = 2; - root[0] = (- a[1] + sqrt( a[1] * a[1] - 4.0 * a[2] * a[0] )) / (2.0 * a[2]); - root[1] = (- a[1] - sqrt( a[1] * a[1] - 4.0 * a[2] * a[0] )) / (2.0 * a[2]); - } - } - -} - -double cubeRoot_copy( double x ){ - if( x == 0.0 ) - return 0.0; - else if( x > 0.0 ) - return pow(x, 1.0/3.0); - else - return - pow(-x, 1.0/3.0); -} - -double smallestRoot_copy( double *p ){ - int n,i; - double root[3], sroot = 1000.0; - cubeZero_copy( p, &n, root ); - - for( i=0; i<n; i++){ - // PrintError("Root %d = %lg", i,root[i]); - if(root[i] > 0.0 && root[i] < sroot) - sroot = root[i]; - } - - // PrintError("Smallest Root = %lg", sroot); - return sroot; -} - - -// Restrict radial correction to monotonous interval -void SetCorrectionRadius_copy( cPrefs *cP ) -{ - double a[4]; - int i,k; - - for( i=0; i<3; i++ ) - { - for( k=0; k<4; k++ ) - { - a[k] = 0.0;//1.0e-10; - if( cP->radial_params[i][k] != 0.0 ) - { - a[k] = (k+1) * cP->radial_params[i][k]; - } - } - cP->radial_params[i][4] = smallestRoot_copy( a ); - } -} - -int CheckParams_copy( AlignInfo *g ) -{ - int i; - int err = -1; - const char *errmsg[] = { - "No Parameters to optimize", - "No input images", - "No Feature Points", - "Image width must be positive", - "Image height must be positive", - "Field of View must be positive", - "Field of View must be smaller than 180 degrees in rectilinear Images", - "Unsupported Image Format (must be 0,1,2,3 or 4)", - "Panorama Width must be positive", - "Panorama Height must be positive", - "Field of View must be smaller than 180 degrees in rectilinear Panos", - "Unsupported Panorama Format", - "Control Point Coordinates must be positive", - "Invalid Image Number in Control Point Descriptions" - }; - - if( g->numParam == 0 ) err = 0; - if( g->numIm == 0 ) err = 1; - if( g->numPts == 0 ) err = 2; - - // Check images - - for( i=0; i<g->numIm; i++) - { - if( g->im[i].width <= 0 ) err = 3; - if( g->im[i].height <= 0 ) err = 4; - if( g->im[i].hfov <= 0.0 ) err = 5; - if( g->im[i].format == _rectilinear && g->im[i].hfov >= 180.0 ) err = 6; - if( g->im[i].format != _rectilinear && g->im[i].format != _panorama && - g->im[i].format != _fisheye_circ && g->im[i].format != _fisheye_ff && g->im[i].format != _equirectangular) - err = 7; - } - - // Check Panorama specs - - if( g->pano.hfov <= 0.0 ) err = 5; - if( g->pano.width <=0 ) err = 8; - if( g->pano.height <=0 ) err = 9; - if( g->pano.format == _rectilinear && g->pano.hfov >= 180.0 ) err = 10; - if( g->pano.format != _rectilinear && g->pano.format != _panorama && - g->pano.format != _equirectangular ) err = 11; - - // Check Control Points - - for( i=0; i<g->numPts; i++) - { - if( g->cpt[i].x[0] < 0 || g->cpt[i].y[0] < 0 || g->cpt[i].x[1] < 0 || g->cpt[i].y[1] < 0 ) - err = 12; - if( g->cpt[i].num[0] < 0 || g->cpt[i].num[0] >= g->numIm || - g->cpt[i].num[1] < 0 || g->cpt[i].num[1] >= g->numIm ) err = 13; - } - - if( err != -1 ) - { - PrintError( errmsg[ err ] ); - return -1; - } - else - return 0; -} - -//------------------------------------------------------------------------------ - - - Transform::~Transform() { if (!m_initialized) { @@ -562,7 +384,7 @@ { SetImageDefaults( &(gl.im[imgNr]) ); SetOptDefaults ( &(gl.opt[imgNr])); - SetCoordDefaults_copy( &(gl.cim[imgNr]), imgNr); + SetCoordDefaults( &(gl.cim[imgNr]), imgNr); } std::map<unsigned int, unsigned int> linkAnchors; @@ -632,7 +454,7 @@ } - if( CheckParams_copy( &gl ) != 0 ) { + if( CheckParams( &gl ) != 0 ) { DEBUG_FATAL("CheckParams() returned false!"); return false; } @@ -821,8 +643,7 @@ p.fourier = FALSE; // calculate correction radius - // copied function from pano12.dll (missing under windows... strange) - SetCorrectionRadius_copy(&p); + SetCorrectionRadius(&p); } Modified: hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h =================================================================== --- hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h 2008-01-27 17:12:43 UTC (rev 2703) +++ hugin/trunk/src/hugin_base/panotools/PanoToolsInterface.h 2008-01-27 18:07:30 UTC (rev 2704) @@ -64,8 +64,10 @@ #ifdef HasPANO13 #include <pano13/panorama.h> +#include <pano13/filter.h> #else #include <pano12/panorama.h> +#include <pano12/filter.h> #endif #ifdef __INTELMEMO__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-01-30 20:38:49
|
Revision: 2735 http://hugin.svn.sourceforge.net/hugin/?rev=2735&view=rev Author: dangelo Date: 2008-01-30 12:38:45 -0800 (Wed, 30 Jan 2008) Log Message: ----------- changed exiftool copy args Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/config_defaults.h hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp Modified: hugin/trunk/src/hugin1/hugin/config_defaults.h =================================================================== --- hugin/trunk/src/hugin1/hugin/config_defaults.h 2008-01-30 20:16:35 UTC (rev 2734) +++ hugin/trunk/src/hugin1/hugin/config_defaults.h 2008-01-30 20:38:45 UTC (rev 2735) @@ -73,7 +73,7 @@ // Exiftool -#define HUGIN_EXIFTOOL_COPY_ARGS "--XResolution --YResolution -overwrite_original_in_place -TagsFromFile" +#define HUGIN_EXIFTOOL_COPY_ARGS " -XMP:all -exif:all -ICC_Profile:all -Meta:all -GeoTiff:all --XResolution --YResolution " #define HUGIN_EXECDIALOG_ENABLED 1l Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-01-30 20:16:35 UTC (rev 2734) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-01-30 20:38:45 UTC (rev 2735) @@ -527,7 +527,7 @@ for (unsigned i=0; i < stacks.size(); i++) { o << "$(LDR_STACK_" << i << ") : $(LDR_STACK_" << i << "_INPUT)" << endl << "\t$(ENFUSE) $(ENFUSE_OPTS) -o $(LDR_STACK_" << i << ") $(LDR_STACK_" << i << "_INPUT)" << endl - << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $@" << endl << endl; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-04 19:26:29
|
Revision: 2782 http://hugin.svn.sourceforge.net/hugin/?rev=2782&view=rev Author: dangelo Date: 2008-02-04 11:26:23 -0800 (Mon, 04 Feb 2008) Log Message: ----------- Fixed exiftool calls for all outputs (place arguments after source file). hugin_stitch_project asks the user before overwriting existing images Modified Paths: -------------- hugin/trunk/src/hugin1/PT/utils.h hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp hugin/trunk/src/hugin1/base_wx/RunStitchPanel.h hugin/trunk/src/hugin1/base_wx/huginConfig.h hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h Modified: hugin/trunk/src/hugin1/PT/utils.h =================================================================== --- hugin/trunk/src/hugin1/PT/utils.h 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin1/PT/utils.h 2008-02-04 19:26:23 UTC (rev 2782) @@ -24,6 +24,7 @@ #ifndef _Hugn1_PANORAMA_utils_H #define _Hugn1_PANORAMA_utils_H +#if 0 #include <algorithms/panorama_makefile/PanoramaMakefileExport.h> #include "PT/Panorama.h" @@ -42,6 +43,7 @@ const std::string & outputPrefix, const PTPrograms & progs, const std::string & includePath, + std::vector<std::string> & outputFiles std::ostream & o) { Panorama copyOfPano(pano); @@ -51,6 +53,7 @@ } // namespace +#endif Modified: hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp 2008-02-04 19:26:23 UTC (rev 2782) @@ -91,8 +91,10 @@ } -bool RunStitchPanel::StitchProject(wxString scriptFile, wxString outname, PTPrograms progs) +bool RunStitchPanel::StitchProject(wxString scriptFile, wxString outname, + HuginBase::PanoramaMakefileExport::PTPrograms progs) { + DEBUG_TRACE(""); wxFileName fname(scriptFile); if ( !fname.FileExists() ) { wxLogError( _("Could not open project file:") + scriptFile); @@ -170,18 +172,39 @@ std::string resultFn(basename.mb_str()); std::string tmpPTOfnC = (const char *) m_currentPTOfn.mb_str(); - PT::createMakefile(pano, + std::vector<std::string> outputFiles; + HuginBase::PanoramaMakefileExport::createMakefile(pano, activeImgs, tmpPTOfnC, resultFn, progs, "", + outputFiles, makeFileStream); // cd to output directory, if one is given. wxString oldCWD = wxFileName::GetCwd(); wxFileName::SetCwd(outpath); + // check output directories. + //std::vector<std::string> overwrittenFiles; + wxString overwrittenFiles; + for(size_t i=0; i < outputFiles.size(); i++) { + wxString fn(outputFiles[i].c_str(), wxConvLocal); + if (wxFile::Exists(fn) ) { + overwrittenFiles.Append(fn + wxT(" ")); + } + } + if (overwrittenFiles.size() > 0) { + int overwriteret = wxMessageBox(_("Overwrite existing images?\n\n") + overwrittenFiles, _("Overwrite existing images"), wxYES_NO | wxICON_QUESTION); + // TODO: change button label ok to overwrite + if (overwriteret != wxYES) { + DEBUG_DEBUG("Abort, do not overwrite images!"); + return false; + } + DEBUG_DEBUG("Overwrite existing images!"); + } + wxString args = wxT("-f ") + wxQuoteString(m_currentMakefn) + wxT(" all clean"); wxString caption = wxString::Format(_("Stitching %s"), scriptFile.c_str()); @@ -220,7 +243,6 @@ wxRemoveFile(m_currentMakefn); wxRemoveFile(m_currentPTOfn); #endif - int ret = event.GetExitCode(); // notify parent of exit if (this->GetParent()) { event.SetEventObject( this ); Modified: hugin/trunk/src/hugin1/base_wx/RunStitchPanel.h =================================================================== --- hugin/trunk/src/hugin1/base_wx/RunStitchPanel.h 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin1/base_wx/RunStitchPanel.h 2008-02-04 19:26:23 UTC (rev 2782) @@ -35,6 +35,8 @@ #include <PT/Panorama.h> +#include <algorithms/panorama_makefile/PanoramaMakefileExport.h> + #include "MyExternalCmdExecDialog.h" struct StitchProjectEntry @@ -56,7 +58,8 @@ public: RunStitchPanel(wxWindow * parent); - bool StitchProject(wxString scriptFile, wxString outname, PT::PTPrograms progs); + bool StitchProject(wxString scriptFile, wxString outname, + HuginBase::PanoramaMakefileExport::PTPrograms progs); void CancelStitch(); private: Modified: hugin/trunk/src/hugin1/base_wx/huginConfig.h =================================================================== --- hugin/trunk/src/hugin1/base_wx/huginConfig.h 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin1/base_wx/huginConfig.h 2008-02-04 19:26:23 UTC (rev 2782) @@ -30,8 +30,13 @@ #include <panoinc_WX.h> -#include <PT/utils.h> +#include "PT/Panorama.h" +#include <algorithms/panorama_makefile/PanoramaMakefileExport.h> +namespace PT { +struct PTPrograms : public HuginBase::PanoramaMakefileExport::PTPrograms {}; +} + PT::PTPrograms getPTProgramsConfig(wxString huginRoot, wxConfigBase * config); /** get the path to the directory where the currently running executable is Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-04 19:26:23 UTC (rev 2782) @@ -525,13 +525,15 @@ resultFn = resultFnwx.mb_str(); resultFn = utils::stripPath(utils::stripExtension(resultFn)); - PT::createMakefile(pano, - pano.getActiveImages(), - ptoFn, - resultFn, - progs, - "", - makefile); + std::vector<std::string> outputFiles; + HuginBase::PanoramaMakefileExport::createMakefile(pano, + pano.getActiveImages(), + ptoFn, + resultFn, + progs, + "", + outputFiles, + makefile); } } SetStatusText(wxString::Format(_("saved project %s"), m_filename.c_str()),0); Modified: hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp =================================================================== --- hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2008-02-04 19:26:23 UTC (rev 2782) @@ -65,7 +65,8 @@ public: RunStitchFrame(wxWindow * parent, const wxString& title, const wxPoint& pos, const wxSize& size); - void StitchProject(wxString scriptFile, wxString outname, PTPrograms progs); + void StitchProject(wxString scriptFile, wxString outname, + HuginBase::PanoramaMakefileExport::PTPrograms progs); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); @@ -170,7 +171,8 @@ } } -void RunStitchFrame::StitchProject(wxString scriptFile, wxString outname, PT::PTPrograms progs) +void RunStitchFrame::StitchProject(wxString scriptFile, wxString outname, + HuginBase::PanoramaMakefileExport::PTPrograms progs) { m_stitchPanel->StitchProject(scriptFile, outname, progs); m_isStitching = true; Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-02-04 19:26:23 UTC (rev 2782) @@ -109,6 +109,7 @@ const std::string& outputPrefix, const PTPrograms& progs, const std::string& includePath, + std::vector<std::string> & outputFiles, std::ostream& o) { PanoramaOptions opts = pano.getOptions(); @@ -203,14 +204,18 @@ remapToMultiple = true; } */ + std::string sLDR_BLENDED = output + ldrExt; + std::string sLDR_STACKED_BLENDED = output + "_fused" + ldrExt; + std::string sHDR_BLENDED = output + "_hdr" + hdrExt; + o << "# the output panorama" << endl << "LDR_REMAPPED_PREFIX=" << escapeStringMake(output) << endl << "HDR_STACK_REMAPPED_PREFIX=" << escapeStringMake(output + "_hdr_") << endl << "LDR_EXPOSURE_REMAPPED_PREFIX=" << escapeStringMake(output + "_exposure_layers_") << endl << "PROJECT_FILE=" << escapeStringMake(ptofile) << endl - << "LDR_BLENDED=" << escapeStringMake(output + ldrExt) << endl - << "LDR_STACKED_BLENDED=" << escapeStringMake(output + "_fused" + ldrExt) << endl - << "HDR_BLENDED=" << escapeStringMake(output + "_hdr" + hdrExt) << endl + << "LDR_BLENDED=" << escapeStringMake(sLDR_BLENDED) << endl + << "LDR_STACKED_BLENDED=" << escapeStringMake(sLDR_STACKED_BLENDED) << endl + << "HDR_BLENDED=" << escapeStringMake(sHDR_BLENDED) << endl << endl << "# first input image" << endl << "INPUT_IMAGE_1=" << escapeStringMake(pano.getImage(0).getFilename()) << endl @@ -250,6 +255,7 @@ if (it != images.end()) o << "\\" << endl; } + vector<string> remappedHDRImagesGray; o << endl << endl << "# remapped maxval images" << endl @@ -257,6 +263,7 @@ for (UIntSet::iterator it = images.begin(); it != images.end();) { std::ostringstream fns; fns << output << "_hdr_" << std::setfill('0') << std::setw(4) << *it << "_gray.pgm"; + remappedHDRImagesGray.push_back(fns.str()); o << escapeStringMake(fns.str()) << " "; ++it; if (it != images.end()) o << "\\" << endl; @@ -397,49 +404,87 @@ std::string cleanTargets; // output all targets - if (opts.outputLDRBlended) + if (opts.outputLDRBlended) { targets += "$(LDR_BLENDED) "; - else + outputFiles.push_back(sLDR_BLENDED); + // depends on remapped ldr images and stacked ldr images + if (! opts.outputLDRLayers) { + outputFiles.insert(outputFiles.end(), remappedImages.begin(), remappedImages.end()); + } + } else { cleanTargets += "$(LDR_BLENDED) "; + } - if (opts.outputLDRLayers) + if (opts.outputLDRLayers) { targets += "$(LDR_LAYERS) "; - else + outputFiles.insert(outputFiles.end(), remappedImages.begin(), remappedImages.end()); + } else cleanTargets += "$(LDR_LAYERS) "; - if (opts.outputLDRExposureRemapped) + if (opts.outputLDRExposureRemapped) { targets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; - else + outputFiles.insert(outputFiles.end(), similarExposureRemappedImages.begin(), similarExposureRemappedImages.end()); + } else { cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; + } - if (opts.outputLDRExposureLayers) + if (opts.outputLDRExposureLayers) { targets += " $(LDR_EXPOSURE_LAYERS) "; - else + outputFiles.insert(outputFiles.end(), similarExposureImages.begin(), similarExposureImages.end()); + if (! opts.outputLDRExposureRemapped) { + outputFiles.insert(outputFiles.end(), similarExposureRemappedImages.begin(), similarExposureRemappedImages.end()); + } + } else { cleanTargets += "$(LDR_EXPOSURE_LAYERS) "; + } - if (opts.outputLDRExposureBlended) + if (opts.outputLDRExposureBlended) { targets += " $(LDR_STACKED_BLENDED) "; - else + outputFiles.push_back(sLDR_STACKED_BLENDED); + outputFiles.insert(outputFiles.end(),ldrStackedImages.begin(), ldrStackedImages.end()); + if (! opts.outputLDRExposureRemapped) { + outputFiles.insert(outputFiles.end(), similarExposureRemappedImages.begin(), similarExposureRemappedImages.end()); + } + } else { cleanTargets += "$(LDR_STACKED_BLENDED) "; + } // always clean temp files used by exposure stacks cleanTargets += "$(LDR_STACKS) "; - if (opts.outputHDRBlended) - targets += "$(HDR_BLENDED) "; - else - cleanTargets += "$(HDR_BLENDED) $(HDR_LAYERS_WEIGHTS) "; - - if (opts.outputHDRLayers) + if (opts.outputHDRLayers) { targets += "$(HDR_LAYERS) "; - else + outputFiles.insert(outputFiles.end(),remappedHDRImages.begin(), remappedHDRImages.end()); + outputFiles.insert(outputFiles.end(),remappedHDRImagesGray.begin(), remappedHDRImagesGray.end()); + } else { cleanTargets += "$(HDR_LAYERS) $(HDR_LAYERS_WEIGHTS) "; + } - if (opts.outputHDRStacks) + if (opts.outputHDRStacks) { targets += "$(HDR_STACKS) "; - else + outputFiles.insert(outputFiles.end(),stackedImages.begin(), stackedImages.end()); + if (!opts.outputHDRLayers) { + outputFiles.insert(outputFiles.end(),remappedHDRImages.begin(), remappedHDRImages.end()); + outputFiles.insert(outputFiles.end(),remappedHDRImagesGray.begin(), remappedHDRImagesGray.end()); + } + } else { cleanTargets += "$(HDR_STACKS) $(HDR_LAYERS_WEIGHTS) "; + } + if (opts.outputHDRBlended) { + targets += "$(HDR_BLENDED) "; + outputFiles.push_back(sHDR_BLENDED); + if (!opts.outputHDRStacks) { + outputFiles.insert(outputFiles.end(),stackedImages.begin(), stackedImages.end()); + if (! opts.outputHDRLayers) { + outputFiles.insert(outputFiles.end(),remappedHDRImages.begin(), remappedHDRImages.end()); + outputFiles.insert(outputFiles.end(),remappedHDRImagesGray.begin(), remappedHDRImagesGray.end()); + } + } + } else { + cleanTargets += "$(HDR_BLENDED) $(HDR_LAYERS_WEIGHTS) "; + } + // targets and clean rule. o << "TEMP_FILES = " << cleanTargets << endl @@ -536,43 +581,43 @@ // write rules for blending with enblend o << "$(LDR_BLENDED) : $(LDR_LAYERS)" << endl; o << "\t$(ENBLEND) $(ENBLEND_OPTS) -o $(LDR_BLENDED) $(LDR_LAYERS) " << endl; - o << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl << endl; + o << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $@" << endl << endl; // for LDR exposure blend planes for (unsigned i=0; i < similarExposures.size(); i++) { o << "$(LDR_EXPOSURE_LAYER_" << i <<") : $(LDR_EXPOSURE_LAYER_" << i << "_INPUT)" << endl << "\t$(ENBLEND) $(ENBLEND_OPTS) -o $@ $^" << endl - << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl << endl; + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $@" << endl << endl; } - // rules for enfuse blending + // rules for enfuse blending o << "$(LDR_STACKED_BLENDED) : $(LDR_STACKS)" << endl << "\t$(ENBLEND) $(ENBLEND_OPTS) -o $(LDR_STACKED_BLENDED) $(LDR_STACKS) " << endl - << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl << endl; + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $@" << endl << endl; - // rules for hdr blending + // rules for hdr blending o << "$(HDR_BLENDED) : $(HDR_STACKS)" << endl; o << "\t$(ENBLEND) $(ENBLEND_OPTS) -o $(HDR_BLENDED) $(HDR_STACKS) " << endl << endl; break; case PanoramaOptions::NO_BLEND: o << "$(LDR_BLENDED) : $(LDR_LAYERS)" << endl - << "\t-$(RM) $@" << endl + << "\t-$(RM) $@" << endl << "\t$(PTROLLER) -o $@ $^ " << endl - << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl << endl; + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $@" << endl << endl; // for LDR exposure blend planes for (unsigned i=0; i < similarExposures.size(); i++) { o << "$(LDR_EXPOSURE_LAYER_" << i <<") : $(LDR_EXPOSURE_LAYER_" << i << "_INPUT)" << endl << "\t-$(RM) $@" << endl << "\t$(PTROLLER) -o $@ $^ " << endl - << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl << endl; - } + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $@" << endl << endl; + } o << "$(LDR_STACKED_BLENDED) : $(LDR_STACKS)" << endl << "\t-$(RM) $@" << endl << "\t$(PTROLLER) -o $@ $^ " << endl - << "\t$(EXIFTOOL) $(EXIFTOOL_COPY_ARGS) $(INPUT_IMAGE_1) $@" << endl << endl; + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $@" << endl << endl; // rules for non-blended HDR panoramas o << "$(HDR_BLENDED) : $(HDR_LAYERS)" << endl; Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h 2008-02-03 20:42:46 UTC (rev 2781) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.h 2008-02-04 19:26:23 UTC (rev 2782) @@ -99,32 +99,34 @@ const std::string & outputPrefix, const PTPrograms & progs, const std::string & includePath, + std::vector<std::string> & outputFiles, std::ostream & o); - - + + public: /// virtual bool modifiesPanoramaData() const { return false; } - + /// bool runAlgorithm() { createMakefile(o_panorama, o_images, o_ptofile, o_outputPrefix, o_progs, o_includePath, - o_output); - + o_outputFiles, o_output); + return true; // let's hope so. } - - + + protected: std::ostream& o_output; - + UIntSet o_images; String o_ptofile; String o_outputPrefix; PTPrograms o_progs; + std::vector<std::string> o_outputFiles; String o_includePath; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-08 22:31:08
|
Revision: 2815 http://hugin.svn.sourceforge.net/hugin/?rev=2815&view=rev Author: dangelo Date: 2008-02-08 14:31:03 -0800 (Fri, 08 Feb 2008) Log Message: ----------- fixed crash [ 1803962 ] Undo project open leads to crash. Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/LensPanel.cpp hugin/trunk/src/hugin_base/panodata/Panorama.cpp Modified: hugin/trunk/src/hugin1/hugin/LensPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-02-08 21:37:36 UTC (rev 2814) +++ hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-02-08 22:31:03 UTC (rev 2815) @@ -268,6 +268,8 @@ if (m_selectedImages.size() == 0) { // no image selected + wxListEvent ev; + ListSelectionChanged(ev); return; } if (m_selectedImages.size() != 1) { @@ -334,16 +336,21 @@ void LensPanel::panoramaImagesChanged (PT::Panorama &pano, const PT::UIntSet & imgNr) { // rebuild lens selection, in case a selected lens has been removed. + UIntSet selImgs; m_selectedLenses.clear(); for (UIntSet::iterator it = m_selectedImages.begin(); it != m_selectedImages.end(); it++) { // need to check, since the m_selectedImages list might still be in an old state if (*it < pano.getNrOfImages()) { + selImgs.insert(*it); unsigned int lNr = pano.getImage(*it).getLensNr(); m_selectedLenses.insert(lNr); } } + // set new selected images. + m_selectedImages = selImgs; + // we need to do something if the image we are editing has changed. UIntSet intersection; @@ -352,6 +359,8 @@ inserter(intersection, intersection.begin())); if (intersection.size() > 0) { UpdateLensDisplay(); + } else if (m_selectedImages.size() == 0) { + UpdateLensDisplay(); } } Modified: hugin/trunk/src/hugin_base/panodata/Panorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-08 21:37:36 UTC (rev 2814) +++ hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-08 22:31:03 UTC (rev 2815) @@ -242,7 +242,8 @@ void Panorama::updateVariables(unsigned int imgNr, const VariableMap & var) { - assert(imgNr < state.images.size()); + if (imgNr > state.images.size()) + return; for (VariableMap::const_iterator it = var.begin(); it != var.end() ; ++it) { updateVariable(imgNr,it->second); } @@ -250,8 +251,10 @@ void Panorama::updateVariable(unsigned int imgNr, const Variable &var) { + if (imgNr < state.images.size()) + return; // DEBUG_TRACE("image " << imgNr << " variable: " << var.getName()); - DEBUG_ASSERT(imgNr < state.images.size()); + //DEBUG_ASSERT(imgNr < state.images.size()); // update a single variable // check corrosponding lens if we have to update some other images // as well. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-08 22:58:47
|
Revision: 2818 http://hugin.svn.sourceforge.net/hugin/?rev=2818&view=rev Author: dangelo Date: 2008-02-08 14:58:42 -0800 (Fri, 08 Feb 2008) Log Message: ----------- removed harmless compiler warnings Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp hugin/trunk/src/tools/fulla.cpp Modified: hugin/trunk/src/hugin1/base_wx/huginConfig.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-02-08 22:57:59 UTC (rev 2817) +++ hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-02-08 22:58:42 UTC (rev 2818) @@ -177,4 +177,4 @@ } // set new config config->Write(wxT("HuginRevision"), HUGIN_WC_REVISION); -} \ No newline at end of file +} Modified: hugin/trunk/src/tools/fulla.cpp =================================================================== --- hugin/trunk/src/tools/fulla.cpp 2008-02-08 22:57:59 UTC (rev 2817) +++ hugin/trunk/src/tools/fulla.cpp 2008-02-08 22:58:42 UTC (rev 2818) @@ -129,7 +129,6 @@ vector<double> vec4(4); bool doFlatfield = false; bool doVigRadial = false; - bool doVigAddition = false; bool doCropBorders = true; unsigned nThreads=1; unsigned verbose = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-13 21:58:07
|
Revision: 2829 http://hugin.svn.sourceforge.net/hugin/?rev=2829&view=rev Author: dangelo Date: 2008-02-13 13:57:43 -0800 (Wed, 13 Feb 2008) Log Message: ----------- Allow choosing output image compression type/quality Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/PanoPanel.h hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc hugin/trunk/src/hugin_base/panodata/Panorama.cpp hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.h =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.h 2008-02-13 14:41:04 UTC (rev 2828) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.h 2008-02-13 21:57:43 UTC (rev 2829) @@ -113,8 +113,11 @@ // File format options void FileFormatChanged(wxCommandEvent & e); - void OnFileFormatOpts(wxCommandEvent & e); void HDRFileFormatChanged(wxCommandEvent & e); + void OnJPEGQualityText(wxCommandEvent & e); + void OnNormalTIFFCompression(wxCommandEvent & e); + void OnHDRTIFFCompression(wxCommandEvent & e); + void OnHDRFileFormatOpts(wxCommandEvent & e); @@ -165,7 +168,14 @@ wxButton * m_CalcOptWidthButton; wxChoice * m_FileFormatChoice; + wxPanel * m_FileFormatPanelJPEG; + wxTextCtrl * m_FileFormatJPEGQualityText; + wxPanel * m_FileFormatPanelTIFF; + wxChoice * m_FileFormatTIFFCompChoice; + wxChoice * m_HDRFileFormatChoice; + wxPanel * m_HDRFileFormatPanelTIFF; + wxChoice * m_FileFormatHDRTIFFCompChoice; wxScrolledWindow *m_pano_ctrls; Modified: hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc 2008-02-13 14:41:04 UTC (rev 2828) +++ hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc 2008-02-13 21:57:43 UTC (rev 2829) @@ -549,11 +549,59 @@ <border>6</border> </object> <object class="sizeritem"> - <object class="wxButton" name="pano_button_file_format_opts"> - <label>Options</label> + <object class="wxBoxSizer"> + <orient>wxHORIZONTAL</orient> + <object class="sizeritem"> + <object class="wxPanel" name="pano_output_normal_opts_jpeg"> + <object class="wxBoxSizer"> + <orient>wxHORIZONTAL</orient> + <object class="sizeritem"> + <object class="wxStaticText"> + <label>Quality:</label> + </object> + <flag>wxLEFT|wxALIGN_CENTRE_VERTICAL</flag> + </object> + <object class="sizeritem"> + <object class="wxTextCtrl" name="pano_output_normal_opts_jpeg_quality"> + <value>100</value> + </object> + <flag>wxALL|wxALIGN_CENTRE_VERTICAL|wxADJUST_MINSIZE</flag> + <border>6</border> + </object> + </object> + <hidden>1</hidden> + </object> + </object> + <object class="sizeritem"> + <object class="wxPanel" name="pano_output_normal_opts_tiff"> + <object class="wxBoxSizer"> + <orient>wxHORIZONTAL</orient> + <object class="sizeritem"> + <object class="wxStaticText"> + <label>Compression:</label> + </object> + <flag>wxALIGN_CENTRE_VERTICAL</flag> + </object> + <object class="sizeritem"> + <object class="wxChoice" name="pano_output_normal_opts_tiff_compression"> + <content> + <item>None</item> + <item>Deflate</item> + <item>LZW</item> + </content> + </object> + <flag>wxLEFT|wxALL|wxALIGN_CENTRE_VERTICAL</flag> + <border>6</border> + </object> + </object> + </object> + </object> + <object class="sizeritem"> + <object class="wxPanel" name="pano_output_normal_opts_none"> + <hidden>1</hidden> + </object> + </object> </object> - <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> - <border>6</border> </object> <object class="sizeritem"> <object class="wxStaticText"> @@ -574,11 +622,34 @@ <border>6</border> </object> <object class="sizeritem"> - <object class="wxButton" name="pano_button_hdr_file_format_opts"> - <label>Options</label> + <object class="wxBoxSizer"> + <orient>wxHORIZONTAL</orient> + <object class="sizeritem"> + <object class="wxPanel" name="pano_output_hdr_opts_tiff"> + <object class="wxBoxSizer"> + <orient>wxHORIZONTAL</orient> + <object class="sizeritem"> + <object class="wxStaticText"> + <label>Compression:</label> + </object> + <flag>wxALIGN_CENTRE_VERTICAL</flag> + </object> + <object class="sizeritem"> + <object class="wxChoice" name="pano_output_hdr_opts_tiff_compression"> + <content> + <item>None</item> + <item>Deflate</item> + <item>LZW</item> + </content> + </object> + <flag>wxLEFT|wxALL|wxALIGN_CENTRE_VERTICAL</flag> + <border>6</border> + </object> + </object> + <hidden>1</hidden> + </object> + </object> </object> - <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> - <border>6</border> </object> </object> </object> @@ -593,12 +664,14 @@ </object> </object> </object> + <style>wxTAB_TRAVERSAL</style> </object> <option>1</option> <flag>wxTOP|wxLEFT|wxEXPAND</flag> <border>10</border> </object> </object> + <style>wxTAB_TRAVERSAL</style> </object> <object class="wxDialog" name="nona_options_dialog"> <title>Nona options</title> Modified: hugin/trunk/src/hugin_base/panodata/Panorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-13 14:41:04 UTC (rev 2828) +++ hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-13 21:57:43 UTC (rev 2829) @@ -792,6 +792,7 @@ o << "#hugin_outputHDRLayers " << (output.outputHDRLayers ? "true" : "false") << endl; o << "#hugin_outputHDRStacks " << (output.outputHDRStacks ? "true" : "false") << endl; + o << "#hugin_outputLayersCompression " << output.outputLayersCompression << endl; o << "#hugin_outputImageType " << output.outputImageType << endl; o << "#hugin_outputImageTypeCompression " << output.outputImageTypeCompression << endl; o << "#hugin_outputImageTypeHDR " << output.outputImageTypeHDR << endl; @@ -2057,6 +2058,8 @@ } else if (var == "#hugin_outputHDRStacks") { options.outputHDRStacks = (value == "true"); + } else if (var == "#hugin_outputLayersCompression") { + options.outputLayersCompression = value; } else if (var == "#hugin_outputImageType") { options.outputImageType = value; } else if (var == "#hugin_outputImageTypeCompression") { Modified: hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h =================================================================== --- hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2008-02-13 14:41:04 UTC (rev 2828) +++ hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2008-02-13 21:57:43 UTC (rev 2829) @@ -195,9 +195,9 @@ m_size = vigra::Size2D(3000, 1500); m_roi = vigra::Rect2D(m_size); outfile = "panorama"; - quality = 90; - tiff_saveROI = false; - tiffCompression = "NONE"; + quality = 100; + tiff_saveROI = true; + tiffCompression = "DEFLATE"; colorCorrection = NONE; colorReferenceImage = 0; optimizeReferenceImage = 0; @@ -224,8 +224,7 @@ outputHDRLayers = false; outputHDRStacks = false; - intermediateImageType = "tif"; - intermediateImageTypeCompression = "DEFLATE"; + outputLayersCompression = "DEFLATE"; outputImageType = "tif"; outputImageTypeCompression = "DEFLATE"; outputImageTypeHDR= "exr"; @@ -376,8 +375,7 @@ bool outputHDRLayers; ///< save remapped layers (HDR) bool outputHDRStacks; ///< save image stacks (HDR) - std::string intermediateImageType; - std::string intermediateImageTypeCompression; + std::string outputLayersCompression; std::string outputImageType; std::string outputImageTypeCompression; std::string outputImageTypeHDR; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-14 23:13:46
|
Revision: 2846 http://hugin.svn.sourceforge.net/hugin/?rev=2846&view=rev Author: dangelo Date: 2008-02-14 15:13:43 -0800 (Thu, 14 Feb 2008) Log Message: ----------- fixed [ 1858896 ] Hugin crashes when saving after optimization This was caused by using the standart unicode -> multibyte char converter on wxGTK. I hope it doesn't affect filenames with strange characters on OSX. Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/ImageCache.cpp hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp hugin/trunk/src/hugin1/base_wx/huginConfig.cpp hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp hugin/trunk/src/hugin1/hugin/LensPanel.cpp hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp hugin/trunk/src/hugin1/hugin/PanoDruid.cpp hugin/trunk/src/hugin1/hugin/PanoDruid.h 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/RunStitcherFrame.cpp hugin/trunk/src/hugin1/hugin/TextKillFocusHandler.cpp hugin/trunk/src/hugin1/hugin/VigCorrDialog.cpp hugin/trunk/src/hugin1/hugin/huginApp.cpp hugin/trunk/src/hugin1/hugin/wxPanoCommand.cpp hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp hugin/trunk/src/hugin_base/huginapp/ImageCache.cpp Modified: hugin/trunk/src/hugin1/base_wx/ImageCache.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/ImageCache.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/base_wx/ImageCache.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -536,7 +536,7 @@ return it->second; } else { if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Loading image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvCurrent).c_str()).mb_str(), "", 0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Loading image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvCurrent).c_str()).mb_str(*wxConvCurrent), "", 0)); } wxBusyCursor wait; #if 1 @@ -716,7 +716,7 @@ } else { wxBusyCursor wait; if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Scaling image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvCurrent).c_str()).mb_str(), "", 0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Scaling image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvCurrent).c_str()).mb_str(*wxConvCurrent), "", 0)); } DEBUG_DEBUG("creating small image " << name ); EntryPtr entry = getImage(filename); @@ -817,7 +817,7 @@ img = new vigra::BImage(srcImg.GetWidth(), srcImg.GetHeight()); DEBUG_DEBUG("creating level 0 pyramid image for "<< filename); if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating grayscale %s"),wxString(filename.c_str(), *wxConvCurrent).c_str()).mb_str(), "", 0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating grayscale %s"),wxString(filename.c_str(), *wxConvCurrent).c_str()).mb_str(*wxConvCurrent), "", 0)); } BasicImageView<RGBValue<unsigned char> > src((RGBValue<unsigned char> *)srcImg.GetData(), srcImg.GetWidth(), @@ -835,7 +835,7 @@ DEBUG_DEBUG("reducing level " << key.level-1 << " to level " << key.level); assert(img); if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating pyramid image for %s, level %d"),wxString(filename.c_str(), *wxConvCurrent).c_str(), key.level).mb_str(), "",0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating pyramid image for %s, level %d"),wxString(filename.c_str(), *wxConvCurrent).c_str(), key.level).mb_str(*wxConvCurrent), "",0)); } BImage *smallImg = new BImage(); reduceToNextLevel(*img, *smallImg); Modified: hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -105,7 +105,7 @@ wxFileName::SplitPath(scriptFile, &pathToPTO, NULL, NULL); pathToPTO.Append(wxT("/")); - ifstream prjfile((const char *)scriptFile.mb_str()); + ifstream prjfile((const char *)scriptFile.mb_str(*wxConvCurrent)); if (prjfile.bad()) { wxLogError( wxString::Format(_("could not open script : %s"), scriptFile.c_str()) ); return false; @@ -114,7 +114,7 @@ PT::Panorama pano; PT::PanoramaMemento newPano; - if (newPano.loadPTScript(prjfile, (const char *)pathToPTO.mb_str())) { + if (newPano.loadPTScript(prjfile, (const char *)pathToPTO.mb_str(*wxConvCurrent))) { pano.setMemento(newPano); } else { wxLogError( wxString::Format(_("error while parsing panos tool script: %s"), scriptFile.c_str()) ); @@ -126,14 +126,14 @@ outname = wxGetCwd() + wxT("/") + outname; } - DEBUG_DEBUG("output file specified is " << (const char *)outname.mb_str()); + DEBUG_DEBUG("output file specified is " << (const char *)outname.mb_str(*wxConvCurrent)); wxString basename; wxString outpath; wxFileName outputPrefix(outname); outpath = outputPrefix.GetPath(); basename = outputPrefix.GetFullName(); - cout << "output path: " << outpath.mb_str() << " file:" << basename.mb_str() << endl; + cout << "output path: " << outpath.mb_str(*wxConvCurrent) << " file:" << basename.mb_str(*wxConvCurrent) << endl; // stitch only active images UIntSet activeImgs = pano.getActiveImages(); @@ -146,9 +146,9 @@ if(m_currentPTOfn.size() == 0) { wxLogError(_("Could not create temporary file")); } - DEBUG_DEBUG("tmpPTOfn file: " << (const char *)m_currentPTOfn.mb_str()); + DEBUG_DEBUG("tmpPTOfn file: " << (const char *)m_currentPTOfn.mb_str(*wxConvCurrent)); // copy is not enough, need to adjust image path names... - ofstream script(m_currentPTOfn.mb_str()); + ofstream script(m_currentPTOfn.mb_str(*wxConvCurrent)); PT::UIntSet all; if (pano.getNrOfImages() > 0) { fill_set(all, 0, pano.getNrOfImages()-1); @@ -165,12 +165,12 @@ wxLogError(_("Could not create temporary file")); return false; } - DEBUG_DEBUG("makefn file: " << (const char *)m_currentMakefn.mb_str()); - ofstream makeFileStream(m_currentMakefn.mb_str()); + DEBUG_DEBUG("makefn file: " << (const char *)m_currentMakefn.mb_str(*wxConvCurrent)); + ofstream makeFileStream(m_currentMakefn.mb_str(*wxConvCurrent)); makeFile.Close(); - std::string resultFn(basename.mb_str()); - std::string tmpPTOfnC = (const char *) m_currentPTOfn.mb_str(); + std::string resultFn(basename.mb_str(*wxConvCurrent)); + std::string tmpPTOfnC = (const char *) m_currentPTOfn.mb_str(*wxConvCurrent); std::vector<std::string> outputFiles; HuginBase::PanoramaMakefileExport::createMakefile(pano, Modified: hugin/trunk/src/hugin1/base_wx/huginConfig.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -41,7 +41,7 @@ if (config->Read(name + wxT("/Custom"), 0l)) { wxString fn = config->Read(name + wxT("/Exe"),wxT("")); if (wxFileName::FileExists(fn)) { - pname = fn.mb_str(); + pname = fn.mb_str(*wxConvCurrent); return pname; } else { wxMessageBox(wxString::Format(_("External program %s not found as specified in preferences, reverting to bundled version"), file.c_str()), _("Error")); @@ -52,10 +52,10 @@ wxString exiftoolDirPath = MacGetPathToBundledResourceFile(CFSTR("ExifTool")); if(exiftoolDirPath != wxT("")) { - pname = (exiftoolDirPath+wxT("/")+file).mb_str(); + pname = (exiftoolDirPath+wxT("/")+file).mb_str(*wxConvCurrent); } else { wxMessageBox(wxString::Format(_("External program %s not found in the bundle, reverting to system path"), file.c_str()), _("Error")); - pname = file.mb_str(); + pname = file.mb_str(*wxConvCurrent); } return pname; } @@ -67,9 +67,9 @@ if(fn == wxT("")) { wxMessageBox(wxString::Format(_("External program %s not found in the bundle, reverting to system path"), file.c_str()), _("Error")); - pname = file.mb_str(); + pname = file.mb_str(*wxConvCurrent); } else { - pname = fn.mb_str(); + pname = fn.mb_str(*wxConvCurrent); } return pname; @@ -77,32 +77,32 @@ if (config->Read(name + wxT("/Custom"), 0l)) { wxString fn = config->Read(name + wxT("/Exe"),wxT("")); if (wxFileName::FileExists(fn)) { - pname = fn.mb_str(); + pname = fn.mb_str(*wxConvCurrent); } else { wxMessageBox(wxString::Format(_("External program %s not found as specified in preferences, reverting to bundled version"), file.c_str()), _("Error")); - pname = (bindir + wxT("\\") + file).mb_str(); + pname = (bindir + wxT("\\") + file).mb_str(*wxConvCurrent); } } else { - pname = (bindir + wxT("\\") + file).mb_str(); + pname = (bindir + wxT("\\") + file).mb_str(*wxConvCurrent); } return pname; #else // unix, never bundled if (config->Read(name + wxT("/Custom"), 0l)) { wxString fn = config->Read(name + wxT("/Exe"),wxT("")); - pname = fn.mb_str(); + pname = fn.mb_str(*wxConvCurrent); return pname; // TODO: need to search path, a simple FileExists() doesn't work as expected. /* if (wxFileName::FileExists(fn)) { - pname = fn.mb_str(); + pname = fn.mb_str(*wxConvCurrent); return pname; } else { wxMessageBox(wxString::Format(_("External program %s not found as specified in preferences, reverting to system path"), file.c_str()), _("Error")); } */ } - pname = file.mb_str(); + pname = file.mb_str(*wxConvCurrent); return pname; #endif } @@ -128,16 +128,16 @@ progs.PTroller= getProgram(config,bindir, wxT("PTroller"), wxT("PTroller")); progs.enblend = getProgram(config,bindir, wxT("enblend"), wxT("Enblend")); - progs.enblend_opts = config->Read(wxT("/Enblend/Args"), wxT(HUGIN_ENBLEND_ARGS)).mb_str(); + progs.enblend_opts = config->Read(wxT("/Enblend/Args"), wxT(HUGIN_ENBLEND_ARGS)).mb_str(*wxConvCurrent); progs.enfuse = getProgram(config,bindir, wxT("enfuse"), wxT("Enfuse")); - progs.enfuse_opts = config->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(); + progs.enfuse_opts = config->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(*wxConvCurrent); progs.exiftool = getProgram(config,bindir, wxT("exiftool"), wxT("Exiftool")); - progs.exiftool_opts = config->Read(wxT("/Exiftool/CopyArgs"), wxT(HUGIN_EXIFTOOL_COPY_ARGS)).mb_str(); + progs.exiftool_opts = config->Read(wxT("/Exiftool/CopyArgs"), wxT(HUGIN_EXIFTOOL_COPY_ARGS)).mb_str(*wxConvCurrent); // smartblend (never bundled) - progs.smartblend = config->Read(wxT("/Smartblend/SmartblendExe"),wxT("smartblend.exe")).mb_str(); - progs.smartblend_opts = config->Read(wxT("/Smartblend/SmartblendArgs"),wxT(HUGIN_SMARTBLEND_ARGS)).mb_str(); + progs.smartblend = config->Read(wxT("/Smartblend/SmartblendExe"),wxT("smartblend.exe")).mb_str(*wxConvCurrent); + progs.smartblend_opts = config->Read(wxT("/Smartblend/SmartblendArgs"),wxT(HUGIN_SMARTBLEND_ARGS)).mb_str(*wxConvCurrent); return progs; } Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -676,7 +676,7 @@ { // always change first lens wxString text = m_focalLengthText->GetValue(); - DEBUG_INFO("focal length: " << text.mb_str()); + DEBUG_INFO("focal length: " << text.mb_str(*wxConvCurrent)); double val; if (!str2double(text, val)) { return; @@ -694,7 +694,7 @@ void AssistantPanel::OnCropFactorChanged(wxCommandEvent & e) { wxString text = m_cropFactorText->GetValue(); - DEBUG_INFO("crop factor: " << text.mb_str()); + DEBUG_INFO("crop factor: " << text.mb_str(*wxConvCurrent)); double val; if (!str2double(text, val)) { return; Modified: hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -242,10 +242,10 @@ std::map<int,int> imgMapping; long idx = autopanoArgs.Find(wxT("%namefile")) ; - DEBUG_DEBUG("find %namefile in '"<< autopanoArgs.mb_str() << "' returned: " << idx); + DEBUG_DEBUG("find %namefile in '"<< autopanoArgs.mb_str(*wxConvCurrent) << "' returned: " << idx); bool use_namefile = idx >=0; idx = autopanoArgs.Find(wxT("%i")); - DEBUG_DEBUG("find %i in '"<< autopanoArgs.mb_str() << "' returned: " << idx); + DEBUG_DEBUG("find %i in '"<< autopanoArgs.mb_str(*wxConvCurrent) << "' returned: " << idx); bool use_params = idx >=0; if (use_namefile && use_params) { wxMessageBox(_("Please use either %namefile or %i in the autopano-sift command line."), @@ -263,9 +263,9 @@ if (use_namefile) { // create temporary file with image names. namefile_name = wxFileName::CreateTempFileName(wxT("ap_imgnames"), &namefile); - DEBUG_DEBUG("before replace %namefile: " << autopanoArgs.mb_str()); + DEBUG_DEBUG("before replace %namefile: " << autopanoArgs.mb_str(*wxConvCurrent)); autopanoArgs.Replace(wxT("%namefile"), namefile_name); - DEBUG_DEBUG("after replace %namefile: " << autopanoArgs.mb_str()); + DEBUG_DEBUG("after replace %namefile: " << autopanoArgs.mb_str(*wxConvCurrent)); int imgNr=0; for(UIntSet::const_iterator it = imgs.begin(); it != imgs.end(); it++) { @@ -300,7 +300,7 @@ #endif wxString cmd = autopanoExe + wxT(" ") + autopanoArgs; - DEBUG_DEBUG("Executing: " << autopanoExe.mb_str() << " " << autopanoArgs.mb_str()); + DEBUG_DEBUG("Executing: " << autopanoExe.mb_str(*wxConvCurrent) << " " << autopanoArgs.mb_str(*wxConvCurrent)); int ret = 0; @@ -325,7 +325,7 @@ } // read and update control points - cps = readUpdatedControlPoints((const char *)ptofile.mb_str(), pano); + cps = readUpdatedControlPoints((const char *)ptofile.mb_str(*wxConvCurrent), pano); #ifdef __WXMSW__ // set old cwd. @@ -441,7 +441,7 @@ return cps; } // read and update control points - cps = readUpdatedControlPoints((const char *)ptofile.mb_str(), pano); + cps = readUpdatedControlPoints((const char *)ptofile.mb_str(*wxConvCurrent), pano); if (!wxRemoveFile(ptofile)) { DEBUG_DEBUG("could not remove temporary file: " << ptofile.c_str()); Modified: hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -123,8 +123,8 @@ void HFOVDialog::OnHFOVChanged(wxCommandEvent & e) { wxString text = m_hfovText->GetValue(); - DEBUG_DEBUG("state: " << m_HFOVStr.mb_str() << ", change:" << text.mb_str()); - DEBUG_DEBUG("cmd str: " << e.GetString().mb_str()); + DEBUG_DEBUG("state: " << m_HFOVStr.mb_str(*wxConvCurrent) << ", change:" << text.mb_str(*wxConvCurrent)); + DEBUG_DEBUG("cmd str: " << e.GetString().mb_str(*wxConvCurrent)); if (text.empty()) { // ignore all empty hfov changes return; @@ -178,7 +178,7 @@ void HFOVDialog::OnFocalLengthChanged(wxCommandEvent & e) { wxString text = m_focalLengthText->GetValue(); - DEBUG_DEBUG(m_focalLengthStr.mb_str() << " => " << text.mb_str()); + DEBUG_DEBUG(m_focalLengthStr.mb_str(*wxConvCurrent) << " => " << text.mb_str(*wxConvCurrent)); // ignore changes caused by ourself if (m_focalLengthText->GetValue() == m_focalLengthStr) { DEBUG_DEBUG("ignore focal length change"); @@ -220,7 +220,7 @@ { // ignore changesd cause by ourself wxString text = m_cropText->GetValue(); - DEBUG_DEBUG(m_cropFactorStr.mb_str() << " => " << text.mb_str()); + DEBUG_DEBUG(m_cropFactorStr.mb_str(*wxConvCurrent) << " => " << text.mb_str(*wxConvCurrent)); if (text == m_cropFactorStr) { DEBUG_DEBUG("ignore crop change"); return; Modified: hugin/trunk/src/hugin1/hugin/LensPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -448,7 +448,7 @@ DEBUG_TRACE (""); if (m_selectedImages.size() > 0) { wxString text=XRCCTRL(*this,"lens_val_flFactor",wxTextCtrl)->GetValue(); - DEBUG_INFO("focal length factor: " << text.mb_str()); + DEBUG_INFO("focal length factor: " << text.mb_str(*wxConvCurrent)); double val; if (!str2double(text, val)) { return; @@ -1047,7 +1047,7 @@ wxString flatfield; bool readok = cfg.Read(wxT("Lens/flatfield"), &flatfield); if (readok) { - imgopts.m_flatfield = std::string((const char *)flatfield.mb_str()); + imgopts.m_flatfield = std::string((const char *)flatfield.mb_str(*wxConvCurrent)); } // TODO: crop parameters Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -116,7 +116,7 @@ file.GetExt().CmpNoCase(wxT("hdr")) == 0 || file.GetExt().CmpNoCase(wxT("viff")) == 0 ) { - filesv.push_back((const char *)filenames[i].mb_str()); + filesv.push_back((const char *)filenames[i].mb_str(*wxConvCurrent)); } } GlobalCmdHist::getInstance().addCommand( @@ -498,9 +498,9 @@ } else { // the project file is just a PTOptimizer script... std::string path( - scriptName.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR).mb_str()); + scriptName.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR).mb_str(*wxConvCurrent)); DEBUG_DEBUG("stripping " << path << " from image filenames"); - std::ofstream script(scriptName.GetFullPath().mb_str()); + std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvCurrent)); PT::OptimizeVector optvec = opt_panel->getOptimizeVector(); PT::UIntSet all; if (pano.getNrOfImages() > 0) { @@ -515,13 +515,14 @@ #endif if (createMakefile && pano.getNrOfImages() > 0) { wxString makefn = scriptName.GetFullPath() + wxT(".mk"); - std::ofstream makefile(makefn.mb_str()); - std::string ptoFn = (const char *) scriptName.GetFullPath().mb_str(); + std::ofstream makefile(makefn.mb_str(*wxConvCurrent)); + wxString ptoFnWX = scriptName.GetFullPath(); + std::string ptoFn(ptoFnWX.mb_str(*wxConvCurrent)); wxString bindir = huginApp::Get()->GetUtilsBinDir(); PTPrograms progs = getPTProgramsConfig(bindir, wxConfigBase::Get()); std::string resultFn; wxString resultFnwx = scriptName.GetFullPath(); - resultFn = resultFnwx.mb_str(); + resultFn = resultFnwx.mb_str(*wxConvCurrent); resultFn = utils::stripPath(utils::stripExtension(resultFn)); std::vector<std::string> outputFiles; @@ -596,7 +597,7 @@ if (pano.getNrOfImages() > 0) { fill_set(all, 0, pano.getNrOfImages()-1); } - std::ofstream script(scriptName.GetFullPath().mb_str()); + std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvCurrent)); pano.printStitcherScript(script, pano.getOptions(), all); script.close(); } @@ -618,11 +619,11 @@ // get the global config object wxConfigBase* config = wxConfigBase::Get(); - std::ifstream file((const char *)filename.mb_str()); + std::ifstream file((const char *)filename.mb_str(*wxConvCurrent)); if (file.good()) { wxBusyCursor wait; GlobalCmdHist::getInstance().addCommand( - new wxLoadPTProjectCmd(pano,file, (const char *)path.mb_str()) + new wxLoadPTProjectCmd(pano,file, (const char *)path.mb_str(*wxConvCurrent)) ); DEBUG_DEBUG("project contains " << pano.getNrOfImages() << " after load"); opt_panel->setOptimizeVector(pano.getOptimizeVector()); @@ -743,7 +744,7 @@ dlg.SetFilterIndex(1); else if (img_ext == wxT("all files")) dlg.SetFilterIndex(2); - DEBUG_INFO ( "Image extention: " << img_ext.mb_str() ) + DEBUG_INFO ( "Image extention: " << img_ext.mb_str(*wxConvCurrent) ) // call the file dialog if (dlg.ShowModal() == wxID_OK) { @@ -758,7 +759,7 @@ std::vector<std::string> filesv; for (unsigned int i=0; i< Pathnames.GetCount(); i++) { - filesv.push_back((const char *)Pathnames[i].mb_str()); + filesv.push_back((const char *)Pathnames[i].mb_str(*wxConvCurrent)); } // we got some images to add. @@ -770,7 +771,7 @@ new wxAddImagesCmd(pano,filesv) ); } - DEBUG_INFO ( wxString::Format(wxT("img_ext: %d"), dlg.GetFilterIndex()).mb_str() ) + DEBUG_INFO ( wxString::Format(wxT("img_ext: %d"), dlg.GetFilterIndex()).mb_str(*wxConvCurrent) ) // save the image extension switch ( dlg.GetFilterIndex() ) { case 0: config->Write(wxT("lastImageType"), wxT("all images")); break; @@ -877,10 +878,10 @@ { wxString file = found->first; // Check the time if it's got a camera EXIF timestamp. - time_t stamp = ReadJpegTime(file.mb_str()); + time_t stamp = ReadJpegTime(file.mb_str(*wxConvCurrent)); if (stamp) { filenames[file] = stamp; - timeMap[(const char *)file.mb_str()] = stamp; + timeMap[(const char *)file.mb_str(*wxConvCurrent)] = stamp; } } @@ -918,8 +919,8 @@ if (abs((int)(pledge - stamp)) < maxtimediff) { // Load this file, and remember it. - DEBUG_TRACE("Recruited " << recruit.mb_str()); - std::string file = (const char *)recruit.mb_str(); + DEBUG_TRACE("Recruited " << recruit.mb_str(*wxConvCurrent)); + std::string file = (const char *)recruit.mb_str(*wxConvCurrent); filesv.push_back(file); // Don't recruit it again. filenames[recruit] = 0; @@ -969,13 +970,13 @@ #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()); + DEBUG_INFO("Lang Code: " << langCode.mb_str(*wxConvCurrent)); if(langCode != wxString(wxT("en"))) { strFile = GetXRCPath() + wxT("data/about_") + langCode + wxT(".htm"); if(wxFile::Exists(strFile)) { - DEBUG_TRACE("Using About: " << strFile.mb_str()); + DEBUG_TRACE("Using About: " << strFile.mb_str(*wxConvCurrent)); XRCCTRL(dlg,"about_html",wxHtmlWindow)->LoadPage(strFile); } } @@ -1019,12 +1020,12 @@ #else // find base filename wxString helpFile = wxT("help_") + huginApp::Get()->GetLocale().GetCanonicalName() + wxT("/hugin.hhp"); - DEBUG_INFO("help file candidate: " << helpFile.mb_str()); + DEBUG_INFO("help file candidate: " << helpFile.mb_str(*wxConvCurrent)); //if the language is not default, load custom About file (if exists) wxString strFile = GetXRCPath() + wxT("data/") + helpFile; if(wxFile::Exists(strFile)) { - DEBUG_TRACE("Using About: " << strFile.mb_str()); + DEBUG_TRACE("Using About: " << strFile.mb_str(*wxConvCurrent)); } else { // try default strFile = GetXRCPath() + wxT("data/help_en_EN/hugin.hhp"); @@ -1036,7 +1037,7 @@ wxLogError(wxString::Format(wxT("Could not open help file: %s"), strFile.c_str())); return; } - DEBUG_INFO("help file: " << strFile.mb_str()); + DEBUG_INFO("help file: " << strFile.mb_str(*wxConvCurrent)); m_help = new wxHtmlHelpController(); m_help->AddBook(strFile); } @@ -1058,7 +1059,7 @@ DEBUG_INFO("Tip index: " << nValue); strFile = GetXRCPath() + wxT("data/tips.txt"); //load default file - DEBUG_INFO("Reading tips from " << strFile.mb_str()); + DEBUG_INFO("Reading tips from " << strFile.mb_str(*wxConvCurrent)); wxTipProvider *tipProvider = new LocalizedFileTipProvider(strFile, nValue); bShowAtStartup = wxShowTip(this, tipProvider); @@ -1139,7 +1140,7 @@ wxString filename = dlg.GetPath(); wxConfig::Get()->Write(wxT("/templatePath"), dlg.GetDirectory()); // remember for later - std::ifstream file((const char *)filename.mb_str()); + std::ifstream file((const char *)filename.mb_str(*wxConvCurrent)); GlobalCmdHist::getInstance().addCommand( new wxApplyTemplateCmd(pano, file)); @@ -1184,7 +1185,7 @@ { MyProgressDialog pdisp(_("Fine-tuning all points"), wxT(""), NULL, wxPD_ELAPSED_TIME | wxPD_AUTO_HIDE | wxPD_APP_MODAL ); - pdisp.pushTask(ProgressTask((const char *)wxString(_("Finetuning")).mb_str(),"",1.0/unoptimized.size())); + pdisp.pushTask(ProgressTask((const char *)wxString(_("Finetuning")).mb_str(*wxConvCurrent),"",1.0/unoptimized.size())); ImageCache & imgCache = ImageCache::getInstance(); @@ -1340,7 +1341,7 @@ } } wxStatusBar *m_statbar = GetStatusBar(); - DEBUG_TRACE("Statusmb : " << msg.mb_str()); + DEBUG_TRACE("Statusmb : " << msg.mb_str(*wxConvCurrent)); m_statbar->SetStatusText(msg,0); #ifdef __WXMSW__ Modified: hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/OptimizePanel.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -531,7 +531,7 @@ char * script = 0; if (edit_dlg->ShowModal() == wxID_OK) { - script = strdup(txtCtrl->GetValue().mb_str()); + script = strdup(txtCtrl->GetValue().mb_str(*wxConvCurrent)); } else { return; } Modified: hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -290,7 +290,7 @@ GlobalCmdHist::getInstance().addCommand( new PT::SetPanoOptionsCmd( pano, opt ) ); - DEBUG_DEBUG ("Interpolator changed to: " << Ip.mb_str() ) + DEBUG_DEBUG ("Interpolator changed to: " << Ip.mb_str(*wxConvCurrent) ) } @@ -328,7 +328,7 @@ new PT::SetPanoOptionsCmd( pano, opt ) ); - DEBUG_INFO(text.mb_str() << "(" << colorCorrection << ") with: " << refImage); + DEBUG_INFO(text.mb_str(*wxConvCurrent) << "(" << colorCorrection << ") with: " << refImage); } @@ -349,7 +349,7 @@ new PT::SetPanoOptionsCmd( pano, opt ) ); - DEBUG_INFO(text.mb_str() <<" with: " << refImage); + DEBUG_INFO(text.mb_str(*wxConvCurrent) <<" with: " << refImage); } @@ -535,7 +535,7 @@ txtCtrl->SetValue(wxString(script.c_str(), *wxConvCurrent)); if (edit_dlg->ShowModal() == wxID_OK) { - script = txtCtrl->GetValue().mb_str(); + script = txtCtrl->GetValue().mb_str(*wxConvCurrent); } else { script = script_stream.str(); } @@ -545,7 +545,7 @@ // start PTStitcher process - std::ofstream scriptfile(PTScriptFile.mb_str()); + std::ofstream scriptfile(PTScriptFile.mb_str(*wxConvCurrent)); if (!scriptfile.good()) { DEBUG_FATAL("could not open/create PTScript file"); } @@ -557,7 +557,7 @@ args = args + outputFN; args = args + wxString(wxT(" ")) + wxQuoteFilename(PTScriptFile); - DEBUG_INFO("Executing cmd: " << stitcherExe.mb_str() << " " << args.mb_str()); + DEBUG_INFO("Executing cmd: " << stitcherExe.mb_str(*wxConvCurrent) << " " << args.mb_str(*wxConvCurrent)); MyExecuteCommandOnDialog(stitcherExe, args, this); return true; } Modified: hugin/trunk/src/hugin1/hugin/PanoDruid.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoDruid.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/PanoDruid.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -333,7 +333,7 @@ if (!sm_advice[hint]) continue; DEBUG_INFO( "checking hint " << hint - << " named \"" << sm_advice[hint]->name.mb_str() << "\"" ); + << " named \"" << sm_advice[hint]->name.mb_str(*wxConvCurrent) << "\"" ); if (sm_advice[hint]->applies(pano, opts)) break; } @@ -342,7 +342,7 @@ return; DEBUG_INFO( "PanoDruid::Update() found \"" - << sm_advice[hint]->name.mb_str() << "\"" ); + << sm_advice[hint]->name.mb_str(*wxConvCurrent) << "\"" ); // set the controls to contain the appropriate text if (m_advice != hint) Modified: hugin/trunk/src/hugin1/hugin/PanoDruid.h =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoDruid.h 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/PanoDruid.h 2008-02-14 23:13:43 UTC (rev 2846) @@ -73,7 +73,7 @@ this->graphic = graphic; this->brief = brief; this->text = text; -// DEBUG_TRACE( "Adding DruidHint \"" << this->name.mb_str() << "\"..." ); +// DEBUG_TRACE( "Adding DruidHint \"" << this->name.mb_str(*wxConvCurrent) << "\"..." ); // PanoDruid::DefineHint(this); } Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -396,7 +396,7 @@ wxString text = m_HFOVText->GetValue(); - DEBUG_INFO ("HFOV = " << text.mb_str() ); + DEBUG_INFO ("HFOV = " << text.mb_str(*wxConvCurrent) ); if (text == wxT("")) { return; } @@ -427,7 +427,7 @@ PanoramaOptions opt = pano->getOptions(); wxString text = m_VFOVText->GetValue(); - DEBUG_INFO ("VFOV = " << text.mb_str() ); + DEBUG_INFO ("VFOV = " << text.mb_str(*wxConvCurrent) ); if (text == wxT("")) { return; } Modified: hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -356,7 +356,7 @@ void PreferencesDialog::OnPTDetails(wxCommandEvent & e) { - DEBUG_INFO("Panotools Details Requested:\n" << m_PTDetails.mb_str()); + DEBUG_INFO("Panotools Details Requested:\n" << m_PTDetails.mb_str(*wxConvCurrent)); wxDialog dlg(this, -1, _("Panotools details"), wxDefaultPosition, wxDefaultSize, wxCAPTION|wxCLOSE_BOX|wxRESIZE_BORDER ); wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); @@ -846,12 +846,12 @@ cfg->Write(wxT("/Finetune/LocalSearchWidth"), MY_G_SPIN_VAL("prefs_ft_LocalSearchWidth")); wxString t = MY_G_STR_VAL("prefs_ft_CorrThreshold"); double td= HUGIN_FT_CORR_THRESHOLD; - utils::stringToDouble(std::string(t.mb_str()), td); + utils::stringToDouble(std::string(t.mb_str(*wxConvCurrent)), td); cfg->Write(wxT("/Finetune/CorrThreshold"), td); t = MY_G_STR_VAL("prefs_ft_CurvThreshold"); td = HUGIN_FT_CURV_THRESHOLD; - utils::stringToDouble(std::string(t.mb_str()), td); + utils::stringToDouble(std::string(t.mb_str(*wxConvCurrent)), td); cfg->Write(wxT("/Finetune/CurvThreshold"), td); cfg->Write(wxT("/Finetune/RotationSearch"), MY_G_BOOL_VAL("prefs_ft_RotationSearch")); @@ -869,8 +869,8 @@ // locale // language wxChoice *lang = XRCCTRL(*this, "prefs_gui_language", wxChoice); - // DEBUG_TRACE("Language Selection Name: " << huginApp::Get()->GetLocale().GetLanguageName((int) lang->GetClientData(lang->GetSelection())).mb_str()); - //DEBUG_INFO("Language Selection locale: " << ((huginApp::Get()->GetLocale().GetLanguageInfo((int) lang->GetClientData(lang->GetSelection())))->CanonicalName).mb_str()); + // DEBUG_TRACE("Language Selection Name: " << huginApp::Get()->GetLocale().GetLanguageName((int) lang->GetClientData(lang->GetSelection())).mb_str(*wxConvCurrent)); + //DEBUG_INFO("Language Selection locale: " << ((huginApp::Get()->GetLocale().GetLanguageInfo((int) lang->GetClientData(lang->GetSelection())))->CanonicalName).mb_str(*wxConvCurrent)); //DEBUG_INFO("Current System Language ID: " << huginApp::Get()->GetLocale().GetSystemLanguage()); void * tmplp = lang->GetClientData(lang->GetSelection()); Modified: hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -735,7 +735,7 @@ if (e.GetEventObject() == m_exposureTextCtrl) { // exposure wxString text = m_exposureTextCtrl->GetValue(); - DEBUG_INFO ("target exposure = " << text.mb_str() ); + DEBUG_INFO ("target exposure = " << text.mb_str(*wxConvCurrent) ); double p = 0; if (text != wxT("")) { if (!str2double(text, p)) { @@ -751,7 +751,7 @@ for (int i = 0; i < nParam; i++) { if (e.GetEventObject() == m_projParamTextCtrl[i]) { wxString text = m_projParamTextCtrl[i]->GetValue(); - DEBUG_INFO ("param " << i << ": = " << text.mb_str() ); + DEBUG_INFO ("param " << i << ": = " << text.mb_str(*wxConvCurrent) ); double p = 0; if (text != wxT("")) { if (!str2double(text, p)) { @@ -919,7 +919,7 @@ } } // wxStatusBar *m_statbar = GetStatusBar(); - //DEBUG_TRACE("Statusmb : " << msg.mb_str()); + //DEBUG_TRACE("Statusmb : " << msg.mb_str(*wxConvCurrent)); //m_statbar->SetStatusText(msg,0); #ifdef __WXMSW__ Modified: hugin/trunk/src/hugin1/hugin/RunStitcherFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/RunStitcherFrame.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/RunStitcherFrame.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -95,7 +95,7 @@ txtCtrl->SetValue(wxString(script.c_str(), *wxConvCurrent)); if (edit_dlg->ShowModal() == wxID_OK) { - script = txtCtrl->GetValue().mb_str(); + script = txtCtrl->GetValue().mb_str(*wxConvCurrent); } else { script = script_stream.str(); } @@ -105,7 +105,7 @@ // start PTStitcher process - std::ofstream scriptfile(PTScriptFile.mb_str()); + std::ofstream scriptfile(PTScriptFile.mb_str(*wxConvCurrent)); if (!scriptfile.good()) { DEBUG_FATAL("could not open/create PTScript file"); } @@ -114,7 +114,7 @@ wxString cmd = stitcherExe + wxT(" -o ") + wxQuoteFilename(wxString(options.outfile.c_str(), *wxConvCurrent)) + wxT(" ") + wxQuoteFilename(PTScriptFile); - DEBUG_INFO("Executing cmd: " << cmd.mb_str()); + DEBUG_INFO("Executing cmd: " << cmd.mb_str(*wxConvCurrent)); // create our process m_process = new wxProcess(this); Modified: hugin/trunk/src/hugin1/hugin/TextKillFocusHandler.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/TextKillFocusHandler.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/TextKillFocusHandler.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -76,7 +76,7 @@ DEBUG_TRACE("Control ID:" << e.GetId()); // check if it was an enter event. DEBUG_DEBUG("event: int: " << e.GetInt() << " sel: " << e.GetSelection() - << " string: " << e.GetString().mb_str()); + << " string: " << e.GetString().mb_str(*wxConvCurrent)); dirty = true; e.Skip(); } Modified: hugin/trunk/src/hugin1/hugin/VigCorrDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/VigCorrDialog.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/VigCorrDialog.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -267,7 +267,7 @@ wxMessageBox(_("Error: could not find flatfile image file."), _("File not found")); return false; } - std::string flat(m_flatEdit->GetValue().mb_str()); + std::string flat(m_flatEdit->GetValue().mb_str(*wxConvCurrent)); std::vector<double> coeff(6); if (!str2double(m_coef0Edit->GetValue(), coeff[0])) return false; Modified: hugin/trunk/src/hugin1/hugin/huginApp.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/huginApp.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/huginApp.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -57,7 +57,7 @@ // utility functions bool str2double(wxString s, double & d) { - if (!utils::stringToDouble(std::string(s.mb_str()), d)) { + if (!utils::stringToDouble(std::string(s.mb_str(*wxConvCurrent)), d)) { wxLogError(_("Value must be numeric.")); return false; } @@ -174,8 +174,8 @@ bLInit = locale.Init(localeID); if (bLInit) { DEBUG_TRACE("locale init OK"); - DEBUG_TRACE("System Locale: " << locale.GetSysName().mb_str()) - DEBUG_TRACE("Canonical Locale: " << locale.GetCanonicalName().mb_str()) + DEBUG_TRACE("System Locale: " << locale.GetSysName().mb_str(*wxConvCurrent)) + DEBUG_TRACE("Canonical Locale: " << locale.GetCanonicalName().mb_str(*wxConvCurrent)) } else { DEBUG_TRACE("locale init failed"); } @@ -287,15 +287,15 @@ } if (!wxFileName::DirExists(m_workDir)) { - DEBUG_DEBUG("creating temp dir: " << m_workDir.mb_str()); + DEBUG_DEBUG("creating temp dir: " << m_workDir.mb_str(*wxConvCurrent)); if (!wxMkdir(m_workDir)) { - DEBUG_ERROR("Tempdir could not be created: " << m_workDir.mb_str()); + DEBUG_ERROR("Tempdir could not be created: " << m_workDir.mb_str(*wxConvCurrent)); } } if (!wxSetWorkingDirectory(m_workDir)) { - DEBUG_ERROR("could not change to temp. dir: " << m_workDir.mb_str()); + DEBUG_ERROR("could not change to temp. dir: " << m_workDir.mb_str(*wxConvCurrent)); } - DEBUG_DEBUG("using temp dir: " << m_workDir.mb_str()); + DEBUG_DEBUG("using temp dir: " << m_workDir.mb_str(*wxConvCurrent)); // set some suitable defaults PanoramaOptions opts = pano.getOptions(); @@ -332,7 +332,7 @@ file.GetExt().CmpNoCase(wxT("hdr")) == 0 || file.GetExt().CmpNoCase(wxT("viff")) == 0 ) { - filesv.push_back((const char *)(file.GetFullPath().mb_str())); + filesv.push_back((const char *)(file.GetFullPath().mb_str(*wxConvCurrent))); } } GlobalCmdHist::getInstance().addCommand( @@ -404,7 +404,7 @@ void RestoreFramePosition(wxTopLevelWindow * frame, const wxString & basename) { - DEBUG_TRACE(basename.mb_str()); + DEBUG_TRACE(basename.mb_str(*wxConvCurrent)); wxConfigBase * config = wxConfigBase::Get(); Modified: hugin/trunk/src/hugin1/hugin/wxPanoCommand.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/wxPanoCommand.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/hugin/wxPanoCommand.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -304,10 +304,10 @@ // wxString newname = fname.GetFullName(); fname.AssignDir(basedir); fname.SetFullName(newname); - DEBUG_TRACE("filename with new path: " << fname.GetFullPath().mb_str()); + DEBUG_TRACE("filename with new path: " << fname.GetFullPath().mb_str(*wxConvCurrent)); if (fname.FileExists()) { - pano.setImageFilename(i, (const char *)fname.GetFullPath().mb_str()); - DEBUG_TRACE("New filename set: " << fname.GetFullPath().mb_str()); + pano.setImageFilename(i, (const char *)fname.GetFullPath().mb_str(*wxConvCurrent)); + DEBUG_TRACE("New filename set: " << fname.GetFullPath().mb_str(*wxConvCurrent)); // TODO - set pano dirty flag so that new paths are saved continue; } @@ -325,10 +325,10 @@ wildcard, wxOPEN, wxDefaultPosition); dlg.SetDirectory(basedir); if (dlg.ShowModal() == wxID_OK) { - pano.setImageFilename(i, (const char *)dlg.GetPath().mb_str()); + pano.setImageFilename(i, (const char *)dlg.GetPath().mb_str(*wxConvCurrent)); // save used path basedir = dlg.GetDirectory(); - DEBUG_INFO("basedir is: " << basedir.mb_str()); + DEBUG_INFO("basedir is: " << basedir.mb_str(*wxConvCurrent)); } else { PanoramaMemento emptyPano; pano.setMemento(emptyPano); @@ -408,7 +408,7 @@ dlg.SetFilterIndex(1); else if (img_ext == wxT("all files")) dlg.SetFilterIndex(2); - DEBUG_INFO ( "Image extention: " << img_ext.mb_str() ); + DEBUG_INFO ( "Image extention: " << img_ext.mb_str(*wxConvCurrent) ); // call the file dialog if (dlg.ShowModal() == wxID_OK) { @@ -420,7 +420,7 @@ // e safe the current path to config config->Write(wxT("actualPath"), dlg.GetDirectory()); // remember for later - DEBUG_INFO ( wxString::Format(wxT("img_ext: %d"), dlg.GetFilterIndex()).mb_str() ); + DEBUG_INFO ( wxString::Format(wxT("img_ext: %d"), dlg.GetFilterIndex()).mb_str(*wxConvCurrent) ); // save the image extension switch ( dlg.GetFilterIndex() ) { case 0: config->Write(wxT("lastImageType"), wxT("all images")); break; @@ -430,7 +430,7 @@ // add images. for (unsigned int i=0; i< Pathnames.GetCount(); i++) { - std::string filename = (const char *)Pathnames[i].mb_str(); + std::string filename = (const char *)Pathnames[i].mb_str(*wxConvCurrent); vigra::ImageImportInfo inf(filename.c_str()); PanoImage img(filename, inf.width(), inf.height(), 0); VariableMap vars; Modified: hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp =================================================================== --- hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -185,7 +185,7 @@ } - DEBUG_DEBUG("input file is " << (const char *)scriptFile.mb_str()) + DEBUG_DEBUG("input file is " << (const char *)scriptFile.mb_str(*wxConvCurrent)) wxFileName fname(scriptFile); if ( !fname.FileExists() ) { @@ -211,7 +211,7 @@ return false; } } - DEBUG_DEBUG("output file specified is " << (const char *)outname.mb_str()); + DEBUG_DEBUG("output file specified is " << (const char *)outname.mb_str(*wxConvCurrent)); long nThreads = wxThread::GetCPUCount(); parser.Found(wxT("t"), & nThreads); @@ -227,12 +227,12 @@ Panorama pano; PanoramaMemento newPano; - ifstream prjfile((const char *)scriptFile.mb_str()); + ifstream prjfile((const char *)scriptFile.mb_str(*wxConvCurrent)); if (prjfile.bad()) { wxLogError( wxString::Format(_("could not open script : %s"), scriptFile.c_str()) ); return false; } - if (newPano.loadPTScript(prjfile, (const char *)path.mb_str())) { + if (newPano.loadPTScript(prjfile, (const char *)path.mb_str(*wxConvCurrent))) { pano.setMemento(newPano); } else { wxLogError( wxString::Format(_("error while parsing panos tool script: %s"), scriptFile.c_str()) ); @@ -245,7 +245,7 @@ return false; } for (size_t i = 0; i < pano.getNrOfImages(); i++) { - pano.setImageFilename(i, (const char *)parser.GetParam(i+1).mb_str()); + pano.setImageFilename(i, (const char *)parser.GetParam(i+1).mb_str(*wxConvCurrent)); } } @@ -256,20 +256,20 @@ int w = opts.getWidth(); int h = opts.getHeight(); - cout << (const char *)wxString::Format(wxT("%s"), _("output image size: ")).mb_str() << w << "x" << h << std::endl; + cout << (const char *)wxString::Format(wxT("%s"), _("output image size: ")).mb_str(*wxConvCurrent) << w << "x" << h << std::endl; wxString outfile; if ( outpath != wxT("") ) { outfile = outpath + wxFileName::GetPathSeparator() + basename; } else { outfile = basename; } - DEBUG_DEBUG("output name: " << (const char *)outfile.mb_str()); + DEBUG_DEBUG("output name: " << (const char *)outfile.mb_str(*wxConvCurrent)); try { // stitch panorama UIntSet simgs = pano.getActiveImages(); PT::stitchPanorama(pano, opts, - pdisp, (const char *)outfile.mb_str(), simgs); + pdisp, (const char *)outfile.mb_str(*wxConvCurrent), simgs); } catch (std::exception & e) { cerr << "caught exception: " << e.what() << std::endl; return false; Modified: hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp =================================================================== --- hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -258,13 +258,13 @@ wxString exec_path = MacGetPathToBundledExecutableFile(CFSTR("nona")); if(exec_path != wxT("")) { - progs.nona = exec_path.mb_str(); + progs.nona = exec_path.mb_str(*wxConvCurrent); } exec_path = MacGetPathToBundledExecutableFile(CFSTR("hugin_hdrmerge")); if(exec_path != wxT("")) { - progs.hdrmerge = exec_path.mb_str(); + progs.hdrmerge = exec_path.mb_str(*wxConvCurrent); } } #endif @@ -339,7 +339,7 @@ } } else if(wxIsEmpty(scriptFile)) { scriptFile = parser.GetParam(0); - cout << "********************* script file: " << (const char *)scriptFile.mb_str() << endl; + cout << "********************* script file: " << (const char *)scriptFile.mb_str(*wxConvCurrent) << endl; if (! wxIsAbsolutePath(scriptFile)) { scriptFile = wxGetCwd() + wxT("/") + scriptFile; } @@ -349,7 +349,7 @@ } } - cout << "input file is " << (const char *)scriptFile.mb_str() << endl; + cout << "input file is " << (const char *)scriptFile.mb_str(*wxConvCurrent) << endl; wxString outname; Modified: hugin/trunk/src/hugin_base/huginapp/ImageCache.cpp =================================================================== --- hugin/trunk/src/hugin_base/huginapp/ImageCache.cpp 2008-02-14 22:31:04 UTC (rev 2845) +++ hugin/trunk/src/hugin_base/huginapp/ImageCache.cpp 2008-02-14 23:13:43 UTC (rev 2846) @@ -787,7 +787,7 @@ img = new vigra::BImage(srcImg.GetWidth(), srcImg.GetHeight()); DEBUG_DEBUG("creating level 0 pyramid image for "<< filename); if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating grayscale %s"),wxString(filename.c_str(), *wxConvCurrent).c_str()).mb_str(), "", 0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating grayscale %s"),wxString(filename.c_str(), *wxConvCurrent).c_str()).mb_str(*wxConvCurrent), "", 0)); } BasicImageView<RGBValue<unsigned char> > src((RGBValue<unsigned char> *)srcImg.GetData(), srcImg.GetWidth(), @@ -805,7 +805,7 @@ DEBUG_DEBUG("reducing level " << key.level-1 << " to level " << key.level); assert(img); if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating pyramid image for %s, level %d"),wxString(filename.c_str(), *wxConvCurrent).c_str(), key.level).mb_str(), "",0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating pyramid image for %s, level %d"),wxString(filename.c_str(), *wxConvCurrent).c_str(), key.level).mb_str(*wxConvCurrent), "",0)); } BImage *smallImg = new BImage(); reduceToNextLevel(*img, *smallImg); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-15 21:36:24
|
Revision: 2855 http://hugin.svn.sourceforge.net/hugin/?rev=2855&view=rev Author: dangelo Date: 2008-02-15 13:36:20 -0800 (Fri, 15 Feb 2008) Log Message: ----------- fixed [ 1805316 ] 'Write PTStitcher script' isn't PTStitcher compatible Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin_base/panodata/Panorama.cpp Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-15 21:05:43 UTC (rev 2854) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-15 21:36:20 UTC (rev 2855) @@ -581,12 +581,14 @@ DEBUG_TRACE(""); wxString scriptName = m_filename; if (m_filename == wxT("")) { - scriptName = getDefaultProjectName(pano) + wxT(".pto"); + scriptName = getDefaultProjectName(pano); } + wxFileName scriptNameFN(scriptName); + wxString fn = scriptNameFN.GetName() + wxT(".txt"); wxFileDialog dlg(this, - _("Save PTStitcher script file"), - wxConfigBase::Get()->Read(wxT("/actualPath"),wxT("")), scriptName, - _("PTStitcher files (*.txt)|*.txt"), + _("Save PTmender script file"), + wxConfigBase::Get()->Read(wxT("/actualPath"),wxT("")), fn, + _("PTmender files (*.txt)|*.txt"), wxSAVE, wxDefaultPosition); dlg.SetDirectory(wxConfigBase::Get()->Read(wxT("/actualPath"),wxT(""))); if (dlg.ShowModal() == wxID_OK) { @@ -594,9 +596,9 @@ // the project file is just a PTStitcher script... wxFileName scriptName = fname; PT::UIntSet all; - if (pano.getNrOfImages() > 0) { - fill_set(all, 0, pano.getNrOfImages()-1); - } + if (pano.getNrOfImages() > 0) { + fill_set(all, 0, pano.getNrOfImages()-1); + } std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvCurrent)); pano.printStitcherScript(script, pano.getOptions(), all); script.close(); Modified: hugin/trunk/src/hugin_base/panodata/Panorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-15 21:05:43 UTC (rev 2854) +++ hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-15 21:36:20 UTC (rev 2855) @@ -821,7 +821,7 @@ o << "# PTStitcher script, written by hugin" << std::endl << std::endl; // output options.. - target.printScriptLine(o); + target.printScriptLine(o, true); o << std::endl << "# output image lines" << std::endl; for (UIntSet::const_iterator imgNrIt = imgs.begin(); imgNrIt != imgs.end(); ++imgNrIt) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-17 20:00:57
|
Revision: 2872 http://hugin.svn.sourceforge.net/hugin/?rev=2872&view=rev Author: dangelo Date: 2008-02-17 12:00:52 -0800 (Sun, 17 Feb 2008) Log Message: ----------- Fixed [ 1894713 ] Parsing error reading S parameter in i lines. Save enabled flag of images (Image selection in Preview). Modified Paths: -------------- hugin/trunk/src/hugin1/PT/Panorama.h hugin/trunk/src/hugin1/hugin/PanoPanel.cpp hugin/trunk/src/hugin_base/algorithms/basic/StraightenPanorama.cpp hugin/trunk/src/hugin_base/panodata/PTScriptParsing.cpp hugin/trunk/src/hugin_base/panodata/PTScriptParsing.h hugin/trunk/src/hugin_base/panodata/Panorama.cpp Modified: hugin/trunk/src/hugin1/PT/Panorama.h =================================================================== --- hugin/trunk/src/hugin1/PT/Panorama.h 2008-02-17 14:58:22 UTC (rev 2871) +++ hugin/trunk/src/hugin1/PT/Panorama.h 2008-02-17 20:00:52 UTC (rev 2872) @@ -210,8 +210,6 @@ //using HuginBase::PTScriptParsing::getParam; using HuginBase::PTScriptParsing::getIntParam; using HuginBase::PTScriptParsing::readVar; -using HuginBase::PTScriptParsing::getPTStringParam; -using HuginBase::PTScriptParsing::getPTStringParamColon; using HuginBase::PTScriptParsing::getDoubleParam; using HuginBase::PTScriptParsing::getPTDoubleParam; Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-17 14:58:22 UTC (rev 2871) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-17 20:00:52 UTC (rev 2872) @@ -581,7 +581,14 @@ void PanoPanel::OnRemapperOptions(wxCommandEvent & e) { - wxLogError(_("Not yet implemented")); + PanoramaOptions opt = pano->getOptions(); + if (opt.remapper == PanoramaOptions::NONA) { + wxLogError(_("Not yet implemented")); + // wxDialog dlg; + // dlg.Load + } else { + wxLogError(_(" PTmender options not yet implemented")); + } } Modified: hugin/trunk/src/hugin_base/algorithms/basic/StraightenPanorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/basic/StraightenPanorama.cpp 2008-02-17 14:58:22 UTC (rev 2871) +++ hugin/trunk/src/hugin_base/algorithms/basic/StraightenPanorama.cpp 2008-02-17 20:00:52 UTC (rev 2872) @@ -55,7 +55,7 @@ // build covariance matrix of X Matrix3 cov; - + for (unsigned int i = 0; i < panorama.getNrOfImages(); i++) { double y = const_map_get(panorama.getImageVariables(i), "y").getValue(); double p = const_map_get(panorama.getImageVariables(i), "p").getValue(); @@ -71,7 +71,7 @@ } cov /= panorama.getNrOfImages(); DEBUG_DEBUG("cov = " << cov); - + // calculate eigenvalues and vectors Matrix3 eigvectors; double eigval[3]; Modified: hugin/trunk/src/hugin_base/panodata/PTScriptParsing.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/PTScriptParsing.cpp 2008-02-17 14:58:22 UTC (rev 2871) +++ hugin/trunk/src/hugin_base/panodata/PTScriptParsing.cpp 2008-02-17 20:00:52 UTC (rev 2872) @@ -30,10 +30,78 @@ namespace HuginBase { namespace PTScriptParsing { - + + /// helper functions for parsing of a script line bool getPTParam(std::string & output, const std::string & line, const std::string & parameter) { + int len = line.size(); + for (int i=1; i < len; i++) { + if (line[i-1] == ' ' && line[i] != ' ') { + // beginning of a parameter + std::string par = line.substr(i, parameter.length()); + if (par == parameter) { + // found, skip to value + i = i+parameter.length(); + if ( i >= len ) { + // parameter without value, not valid. + output = ""; + return true; + } + if (line[i]== '"') { + i++; + if ( i >= len ) { + return false; + } + // this is a string parameter, skip to next " + size_t end = line.find('"', i); + if (end == std::string::npos) { + // unclosed string found + return false; + } + output = line.substr(i,end-i); + return true; + } else { + // ordinary parameter, skip to next space + size_t end = line.find_first_of(" \t\n", i); + output = line.substr(i, end-i); + return true; + } + } else { + // this is another parameter, skip it + i++; + if ( i >= len ) { + return false; + } + if (line[i]== '"') { + // this is a string parameter, skip to next " + size_t end = line.find('"', i); + if (end == std::string::npos) { + // unclosed string found + return false; + } + i = end; + if ( i >= len ) { + return false; + } + } else { + // this is an ordinary parameter, skip to next space + size_t end = line.find_first_of(" \t\n", i); + if (end == std::string::npos) { + // not found, last parameter + return false; + } + i = end; + } + } + } + } + return false; +} + +#if 0 +bool getPTParam(std::string & output, const std::string & line, const std::string & parameter) +{ std::string::size_type p; if ((p=line.find(std::string(" ") + parameter)) == std::string::npos) { DEBUG_INFO("could not find param " << parameter @@ -78,6 +146,7 @@ DEBUG_DEBUG("output: ##" << output << "##"); return true; } +#endif bool getDoubleParam(double & d, const std::string & line, const std::string & name) { @@ -162,6 +231,7 @@ } autoCenterCrop = true; cropFactor = 1; + enabled = true; } @@ -181,7 +251,7 @@ // read lens type and hfov getIntParam(f, line, "f"); - getPTStringParam(filename,line,"n"); + getPTParam(filename,line,"n"); getIntParam(width, line, "w"); getIntParam(height, line, "h"); @@ -197,7 +267,7 @@ } getIntParam(responseType, line, "Rt"); - getPTStringParam(flatfieldname,line,"Vf"); + getPTParam(flatfieldname,line,"Vf"); std::string crop_str; if ( getPTParam(crop_str, line, "C") ) { Modified: hugin/trunk/src/hugin_base/panodata/PTScriptParsing.h =================================================================== --- hugin/trunk/src/hugin_base/panodata/PTScriptParsing.h 2008-02-17 14:58:22 UTC (rev 2871) +++ hugin/trunk/src/hugin_base/panodata/PTScriptParsing.h 2008-02-17 20:00:52 UTC (rev 2872) @@ -48,18 +48,17 @@ bool readVar(Variable & var, int & link, const std::string & line); - +/* bool getPTStringParam(std::string & output, const std::string & line, const std::string & parameter); bool getPTStringParamColon(std::string & output, const std::string & line, const std::string & parameter); +*/ bool getDoubleParam(double & d, const std::string & line, const std::string & name); bool getPTDoubleParam(double & value, int & link, const std::string & line, const std::string & var); - - /// struct ImgInfo { @@ -75,14 +74,15 @@ vigra::Rect2D crop; bool autoCenterCrop; double cropFactor; - - + bool enabled; + + public: ImgInfo() { init(); } - + ImgInfo(const std::string & line) { init(); @@ -91,10 +91,10 @@ protected: void init(); - + public: void parse(const std::string & line); - + public: static const char *varnames[]; static double defaultValues[]; @@ -102,8 +102,6 @@ }; - - //============================================================================== // template implementation Modified: hugin/trunk/src/hugin_base/panodata/Panorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-17 14:58:22 UTC (rev 2871) +++ hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-17 20:00:52 UTC (rev 2872) @@ -594,8 +594,12 @@ if (iopts.autoCenterCrop) o << " autoCenterCrop=1"; } - o << " cropFactor=" << lens.getCropFactor() << std::endl; - + o << " cropFactor=" << lens.getCropFactor() ; + if (! iopts.active) { + o << " disabled"; + } + o << std::endl; + o << "i w" << img.getWidth() << " h" << img.getHeight() <<" f" << lens.getProjection() << " "; @@ -1697,27 +1701,27 @@ DEBUG_DEBUG("p line: " << line); int i; if (getIntParam(i,line,"f")) - options.setProjection( (PanoramaOptions::ProjectionFormat) i ); + options.setProjection( (PanoramaOptions::ProjectionFormat) i ); unsigned int w; if (getIntParam(w, line, "w")) - options.setWidth(w); + options.setWidth(w); double v; if (getDoubleParam(v, line, "v")) - options.setHFOV(v, false); + options.setHFOV(v, false); int height; if (getIntParam(height, line, "h")) - options.setHeight(height); + options.setHeight(height); double newE; if (getDoubleParam(newE, line, "E")) - options.outputExposureValue = newE; + options.outputExposureValue = newE; int ar=0; if (getIntParam(ar, line, "R")) - options.outputMode = (PanoramaOptions::OutputMode) ar; + options.outputMode = (PanoramaOptions::OutputMode) ar; string format; - if (getPTStringParam(format,line,"T")) - options.outputPixelType = format; + if (getPTParam(format,line,"T")) + options.outputPixelType = format; if ( getPTParam(format, line, "S") ) { int left, right, top, bottom; @@ -1730,84 +1734,83 @@ } // parse projection parameters - if (getPTStringParam(format,line,"P")) { - char * tstr = strdup(format.c_str()); - std::vector<double> projParam; - char * b = strtok(tstr, " \""); - if (b != NULL) { - while (b != NULL) { - double tempDbl; - if (sscanf(b, "%lf", &tempDbl) == 1) { - projParam.push_back(tempDbl); - b = strtok(NULL, " \""); - } - } - } - free(tstr); - // only set projection parameters, if the have the right size. - if (projParam.size() == options.getProjectionParameters().size()) { - options.setProjectionParameters(projParam); - } - } + if (getPTParam(format,line,"P")) { + char * tstr = strdup(format.c_str()); + std::vector<double> projParam; + char * b = strtok(tstr, " \""); + if (b != NULL) { + while (b != NULL) { + double tempDbl; + if (sscanf(b, "%lf", &tempDbl) == 1) { + projParam.push_back(tempDbl); + b = strtok(NULL, " \""); + } + } + } + free(tstr); + // only set projection parameters, if the have the right size. + if (projParam.size() == options.getProjectionParameters().size()) { + options.setProjectionParameters(projParam); + } + } // this is fragile.. hope nobody adds additional whitespace // and other arguments than q... // n"JPEG q80" - if (getPTStringParam(format,line,"n")) { - int t = format.find(' '); - - options.outputFormat = options.getFormatFromName(format.substr(0,t)); - - // parse output format options. - switch (options.outputFormat) - { - case PanoramaOptions::JPEG: - { - // "parse" jpg quality - int q; - if (getIntParam(q, format, "q") ) { - options.quality = (int) q; - } - } - break; - case PanoramaOptions::TIFF_m: - { - int coordImgs = 0; - if (getIntParam(coordImgs, format, "p")) - if (coordImgs) - options.saveCoordImgs = true; - } - case PanoramaOptions::TIFF: - case PanoramaOptions::TIFF_mask: - case PanoramaOptions::TIFF_multilayer: - case PanoramaOptions::TIFF_multilayer_mask: - { - // parse tiff compression mode - std::string comp; - if (getPTStringParamColon(comp, format, "c")) { - if (comp == "NONE" || comp == "LZW" || - comp == "DEFLATE") - { - options.tiffCompression = comp; - } else { - DEBUG_WARN("No valid tiff compression found"); - } - } - // read tiff roi - if (getPTStringParamColon(comp, format, "r")) { - if (comp == "CROP") { - options.tiff_saveROI = true; - } else { - options.tiff_saveROI = false; - } - } - } - break; - default: - break; - } - } + if (getPTParam(format,line,"n")) { + int t = format.find(' '); + options.outputFormat = options.getFormatFromName(format.substr(0,t)); + // parse output format options. + switch (options.outputFormat) + { + case PanoramaOptions::JPEG: + { + // "parse" jpg quality + int q; + if (getIntParam(q, format, "q") ) { + options.quality = (int) q; + } + } + break; + case PanoramaOptions::TIFF_m: + { + int coordImgs = 0; + if (getIntParam(coordImgs, format, "p")) + if (coordImgs) + options.saveCoordImgs = true; + } + case PanoramaOptions::TIFF: + case PanoramaOptions::TIFF_mask: + case PanoramaOptions::TIFF_multilayer: + case PanoramaOptions::TIFF_multilayer_mask: + { + // parse tiff compression mode + std::string comp; + if (getPTParam(comp, format, "c:")) { + if (comp == "NONE" || comp == "LZW" || + comp == "DEFLATE") + { + options.tiffCompression = comp; + } else { + DEBUG_WARN("No valid tiff compression found"); + } + } + // read tiff roi + if (getPTParam(comp, format, "r:")) { + if (comp == "CROP") { + options.tiff_saveROI = true; + } else { + options.tiff_saveROI = false; + } + } + } + break; + default: + break; + } + } + int cRefImg = 0; if (getIntParam(cRefImg, line,"k")) { options.colorCorrection = PanoramaOptions::BRIGHTNESS_COLOR; @@ -1974,7 +1977,7 @@ } if (line.substr(0,8) == "#-hugin ") { - // read hugin image line + // read hugin image line ImgInfo info; info.autoCenterCrop = (line.find("autoCenterCrop=1") != std::string::npos); size_t pos = line.find("cropFactor="); @@ -1984,9 +1987,13 @@ sscanf(s,"cropFactor=%lf", & cropFactor); info.cropFactor = cropFactor; } + pos = line.find("disabled"); + if (pos > 0 && pos < line.length()) { + info.enabled = false; + } huginImgInfo.push_back(info); - } - + } + // PTGui and PTAssember project files: // #-imgfile 960 1280 "D:\data\bruno\074-098\087.jpg" if (line.substr(0,10) == "#-imgfile ") { @@ -2186,6 +2193,7 @@ if (huginImgInfo.size() == (size_t)nImgs) { iImgInfo[i].cropFactor = huginImgInfo[i].cropFactor; iImgInfo[i].autoCenterCrop = huginImgInfo[i].autoCenterCrop; + iImgInfo[i].enabled= huginImgInfo[i].enabled; } } @@ -2323,6 +2331,7 @@ opts.m_flatfield = iImgInfo[i].flatfieldname; opts.responseType = iImgInfo[i].responseType; opts.autoCenterCrop = iImgInfo[i].autoCenterCrop; + opts.active = iImgInfo[i].enabled; images.back().setOptions(opts); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-18 18:11:58
|
Revision: 2893 http://hugin.svn.sourceforge.net/hugin/?rev=2893&view=rev Author: dangelo Date: 2008-02-18 10:11:56 -0800 (Mon, 18 Feb 2008) Log Message: ----------- Added tif packbits compression, made it the default, as TIF DEFLATE compression is not supported by native windows applications. Modified Paths: -------------- hugin/trunk/src/foreign/vigra/vigra_impex/tiff.cxx hugin/trunk/src/hugin1/PT/PanoImage.h hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp hugin/trunk/src/hugin1/hugin/PanoPanel.cpp hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp hugin/trunk/src/hugin_base/panodata/Panorama.cpp hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h hugin/trunk/src/hugin_base/panodata/SrcPanoImage.cpp hugin/trunk/src/hugin_base/panodata/SrcPanoImage.h hugin/trunk/src/hugin_base/vigra_ext/tiffUtils.h hugin/trunk/src/tools/fulla.cpp hugin/trunk/src/tools/nona.cpp Modified: hugin/trunk/src/foreign/vigra/vigra_impex/tiff.cxx =================================================================== --- hugin/trunk/src/foreign/vigra/vigra_impex/tiff.cxx 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/foreign/vigra/vigra_impex/tiff.cxx 2008-02-18 18:11:56 UTC (rev 2893) @@ -100,12 +100,13 @@ desc.pixelTypes[8] = "DOUBLE"; // init compression types - desc.compressionTypes.resize(5); + desc.compressionTypes.resize(6); desc.compressionTypes[0] = "NONE"; desc.compressionTypes[1] = "RLE"; - desc.compressionTypes[2] = "JPEG"; - desc.compressionTypes[3] = "LZW"; - desc.compressionTypes[4] = "DEFLATE"; + desc.compressionTypes[2] = "PACKBITS"; + desc.compressionTypes[3] = "JPEG"; + desc.compressionTypes[4] = "LZW"; + desc.compressionTypes[5] = "DEFLATE"; // init magic strings #if TIFFLIB_VERSION > 20070712 @@ -761,6 +762,8 @@ tiffcomp = COMPRESSION_OJPEG; else if ( comp == "RLE" || comp == "RunLength") tiffcomp = COMPRESSION_CCITTRLE; + else if ( comp == "PACKBITS") + tiffcomp = COMPRESSION_PACKBITS; else if ( comp == "LZW" ) tiffcomp = COMPRESSION_LZW; else if ( comp == "DEFLATE" ) Modified: hugin/trunk/src/hugin1/PT/PanoImage.h =================================================================== --- hugin/trunk/src/hugin1/PT/PanoImage.h 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin1/PT/PanoImage.h 2008-02-18 18:11:56 UTC (rev 2893) @@ -53,6 +53,10 @@ return HuginBase::SrcPanoImage::calcFocalLength(proj,hfov,crop,imageSize); } + inline double calcCropFactor(SrcPanoImage::Projection proj, double hfov, double focalLength, vigra::Size2D imageSize) + { + return HuginBase::SrcPanoImage::calcCropFactor(proj,hfov,focalLength,imageSize); + } } // namespace Modified: hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -153,7 +153,7 @@ if (m_HFOV <= 0) { wxMessageBox(_("The horizontal field of view must be positive.")); - m_HFOV = 1; + m_HFOV = 50; m_HFOVStr = doubleTowxString(m_HFOV,2); m_hfovText->SetValue(m_HFOVStr); return; @@ -208,6 +208,7 @@ } if (m_cropFactor > 0) { + // calculate HFOV. m_HFOV = calcHFOV(m_srcImg.getProjection(), m_focalLength, m_cropFactor, m_srcImg.getSize()); m_HFOVStr = doubleTowxString(m_HFOV,2); Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -340,10 +340,12 @@ i = 0; m_FileFormatPanelJPEG->Hide(); m_FileFormatPanelTIFF->Show(); - if (opt.outputImageTypeCompression == "DEFLATE") { + if (opt.outputImageTypeCompression == "PACKBITS") { m_FileFormatTIFFCompChoice->SetSelection(1); } else if (opt.outputImageTypeCompression == "LZW") { m_FileFormatTIFFCompChoice->SetSelection(2); + } else if (opt.outputImageTypeCompression == "DEFLATE") { + m_FileFormatTIFFCompChoice->SetSelection(3); } else { m_FileFormatTIFFCompChoice->SetSelection(0); } @@ -372,10 +374,12 @@ } else if (opt.outputImageTypeHDR == "tif") { i = 1; m_HDRFileFormatPanelTIFF->Show(); - if (opt.outputImageTypeHDRCompression == "DEFLATE") { + if (opt.outputImageTypeHDRCompression == "PACKBITS") { m_FileFormatHDRTIFFCompChoice->SetSelection(1); } else if (opt.outputImageTypeHDRCompression == "LZW") { m_FileFormatHDRTIFFCompChoice->SetSelection(2); + } else if (opt.outputImageTypeHDRCompression == "DEFLATE") { + m_FileFormatHDRTIFFCompChoice->SetSelection(3); } else { m_FileFormatHDRTIFFCompChoice->SetSelection(0); } @@ -797,7 +801,7 @@ m_FileFormatPanelJPEG->Hide(); m_FileFormatPanelTIFF->Show(); opt.outputImageType ="tif"; - opt.outputImageTypeCompression = "DEFLATE"; + opt.outputImageTypeCompression = "PACKBITS"; break; } @@ -819,7 +823,7 @@ case 1: m_HDRFileFormatPanelTIFF->Show(); opt.outputImageTypeHDR ="tif"; - opt.outputImageTypeHDRCompression = "DEFLATE"; + opt.outputImageTypeHDRCompression = "PACKBITS"; break; default: case 0: @@ -862,13 +866,17 @@ opt.tiffCompression = "NONE"; break; case 1: - opt.outputImageTypeCompression = "DEFLATE"; - opt.tiffCompression = "DEFLATE"; + opt.outputImageTypeCompression = "PACKBITS"; + opt.tiffCompression = "PACKBITS"; break; case 2: opt.outputImageTypeCompression = "LZW"; opt.tiffCompression = "LZW"; break; + case 3: + opt.outputImageTypeCompression = "DEFLATE"; + opt.tiffCompression = "DEFLATE"; + break; } GlobalCmdHist::getInstance().addCommand( new PT::SetPanoOptionsCmd( *pano, opt ) @@ -884,11 +892,14 @@ opt.outputImageTypeHDRCompression = "NONE"; break; case 1: - opt.outputImageTypeHDRCompression = "DEFLATE"; + opt.outputImageTypeHDRCompression = "PACKBITS"; break; case 2: opt.outputImageTypeHDRCompression = "LZW"; break; + case 3: + opt.outputImageTypeHDRCompression = "DEFLATE"; + break; } GlobalCmdHist::getInstance().addCommand( new PT::SetPanoOptionsCmd( *pano, opt ) Modified: hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc 2008-02-18 18:11:56 UTC (rev 2893) @@ -585,8 +585,9 @@ <object class="wxChoice" name="pano_output_normal_opts_tiff_compression"> <content> <item>None</item> + <item>Packbits</item> + <item>LZW</item> <item>Deflate</item> - <item>LZW</item> </content> </object> <flag>wxLEFT|wxALL|wxALIGN_CENTRE_VERTICAL</flag> @@ -632,15 +633,15 @@ <object class="wxChoice" name="pano_output_hdr_opts_tiff_compression"> <content> <item>None</item> + <item>Packbits</item> + <item>LZW</item> <item>Deflate</item> - <item>LZW</item> </content> </object> <flag>wxLEFT|wxALL|wxALIGN_CENTRE_VERTICAL</flag> <border>6</border> </object> </object> - <hidden>1</hidden> </object> </object> </object> Modified: hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp =================================================================== --- hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -65,7 +65,7 @@ public: RunStitchFrame(wxWindow * parent, const wxString& title, const wxPoint& pos, const wxSize& size); - void StitchProject(wxString scriptFile, wxString outname, + bool StitchProject(wxString scriptFile, wxString outname, HuginBase::PanoramaMakefileExport::PTPrograms progs); void OnQuit(wxCommandEvent& event); @@ -118,11 +118,16 @@ wxBoxSizer * topsizer = new wxBoxSizer( wxVERTICAL ); m_stitchPanel = new RunStitchPanel(this); - topsizer->Add(m_stitchPanel, 1, wxEXPAND | wxALL, 10); + topsizer->Add(m_stitchPanel, 1, wxEXPAND | wxALL, 2); topsizer->Add( new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALL | wxALIGN_RIGHT, 10); +#ifdef __WXMSW__ + // wxFrame does have a strange background color on Windows.. + this->SetBackgroundColour(m_stitchPanel->GetBackgroundColour()); +#endif + SetSizer( topsizer ); // topsizer->SetSizeHints( this ); // set size hints to honour minimum size } @@ -171,11 +176,14 @@ } } -void RunStitchFrame::StitchProject(wxString scriptFile, wxString outname, +bool RunStitchFrame::StitchProject(wxString scriptFile, wxString outname, HuginBase::PanoramaMakefileExport::PTPrograms progs) { - m_stitchPanel->StitchProject(scriptFile, outname, progs); + if (! m_stitchPanel->StitchProject(scriptFile, outname, progs)) { + return false; + } m_isStitching = true; + return true; } @@ -369,14 +377,26 @@ } } + // check output filename + wxFileName outfn(outname); + wxString ext = outfn.GetExt(); + // remove extension if it indicates an image file + if (ext.CmpNoCase(wxT("jpg")) == 0 || ext.CmpNoCase(wxT("jpeg")) == 0|| + ext.CmpNoCase(wxT("tif")) == 0|| ext.CmpNoCase(wxT("tiff")) == 0 || + ext.CmpNoCase(wxT("png")) == 0 || ext.CmpNoCase(wxT("exr")) == 0 || + ext.CmpNoCase(wxT("pnm")) == 0 || ext.CmpNoCase(wxT("hdr"))) + { + outfn.ClearExt(); + outname = outfn.GetFullPath(); + } + RunStitchFrame *frame = new RunStitchFrame(NULL, wxT("Hugin Stitcher"), wxDefaultPosition, wxSize(640,600) ); frame->Show( true ); SetTopWindow( frame ); wxFileName basename(scriptFile); frame->SetTitle(wxString::Format(_("%s - Stitching"), basename.GetName().c_str())); - frame->StitchProject(scriptFile, outname, progs); - return true; + return frame->StitchProject(scriptFile, outname, progs); } Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -202,7 +202,7 @@ o << endl; o << "ENBLEND_HDR_COMP="; - if (opts.outputImageTypeCompression.size() != 0) { + if (opts.outputImageTypeHDRCompression.size() != 0) { o << "--compression " << opts.outputImageTypeHDRCompression; } o << endl; Modified: hugin/trunk/src/hugin_base/panodata/Panorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -1789,7 +1789,7 @@ std::string comp; if (getPTParam(comp, format, "c:")) { if (comp == "NONE" || comp == "LZW" || - comp == "DEFLATE") + comp == "PACKBITS" || comp == "DEFLATE") { options.tiffCompression = comp; } else { Modified: hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h =================================================================== --- hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2008-02-18 18:11:56 UTC (rev 2893) @@ -197,7 +197,7 @@ outfile = "panorama"; quality = 100; tiff_saveROI = true; - tiffCompression = "DEFLATE"; + tiffCompression = "PACKBITS"; colorCorrection = NONE; colorReferenceImage = 0; optimizeReferenceImage = 0; @@ -224,9 +224,9 @@ outputHDRLayers = false; outputHDRStacks = false; - outputLayersCompression = "DEFLATE"; + outputLayersCompression = "PACKBITS"; outputImageType = "tif"; - outputImageTypeCompression = "DEFLATE"; + outputImageTypeCompression = "PACKBITS"; outputImageTypeHDR= "exr"; outputImageTypeHDRCompression = ""; Modified: hugin/trunk/src/hugin_base/panodata/SrcPanoImage.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/SrcPanoImage.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin_base/panodata/SrcPanoImage.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -349,7 +349,7 @@ setSize(vigra::Size2D(width, height)); if (applyEXIFValues && focalLength > 0 && cropFactor > 0) { setHFOV(calcHFOV(getProjection(), - focalLength, cropFactor, getSize())); + focalLength, cropFactor, getSize())); } #ifdef HUGIN_USE_EXIV2 @@ -749,6 +749,36 @@ } } +double SrcPanoImage::calcCropFactor(SrcPanoImage::Projection proj, double hfov, double focalLength, vigra::Size2D imageSize) +{ + // calculate diagonal of film + double r = (double)imageSize.x / imageSize.y; + + double x = 36; + switch (proj) + { + case SrcPanoImage::RECTILINEAR: + x = focalLength * tan(hfov/180.0*M_PI/2); + break; + case SrcPanoImage::CIRCULAR_FISHEYE: + case SrcPanoImage::FULL_FRAME_FISHEYE: + case SrcPanoImage::EQUIRECTANGULAR: + case SrcPanoImage::PANORAMIC: + // same projection equation for both fisheye types, + // assume equal area projection. + x = focalLength * (hfov/180*M_PI); + break; + default: + // TODO: add formulas for other projections + DEBUG_WARN("Focal length calculations only supported with rectilinear and fisheye images"); + return 0; + } + // diagonal of sensor + double diag = x * sqrt(1+ 1/(r*r)); + return sqrt(36.0*36.0 + 24.0*24.0) / diag; +} + + #ifdef HUGIN_USE_EXIV2 // Convenience functions to work with Exiv2 bool SrcPanoImage::getExiv2Value(Exiv2::ExifData& exifData, std::string keyName, long & value) Modified: hugin/trunk/src/hugin_base/panodata/SrcPanoImage.h =================================================================== --- hugin/trunk/src/hugin_base/panodata/SrcPanoImage.h 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin_base/panodata/SrcPanoImage.h 2008-02-18 18:11:56 UTC (rev 2893) @@ -376,8 +376,10 @@ /** calcualte focal length, given crop factor and hfov */ static double calcFocalLength(SrcPanoImage::Projection proj, double hfov, double crop, vigra::Size2D imageSize); - + /** calculate crop factor, given focal length and hfov */ + static double calcCropFactor(SrcPanoImage::Projection proj, double hfov, double focalLength, vigra::Size2D imageSize); + private: std::string m_filename; // VariableVector m_vars; Modified: hugin/trunk/src/hugin_base/vigra_ext/tiffUtils.h =================================================================== --- hugin/trunk/src/hugin_base/vigra_ext/tiffUtils.h 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/hugin_base/vigra_ext/tiffUtils.h 2008-02-18 18:11:56 UTC (rev 2893) @@ -108,6 +108,8 @@ tiffcomp = COMPRESSION_LZW; else if ( comp == "DEFLATE" ) tiffcomp = COMPRESSION_DEFLATE; + else if ( comp == "PACKBITS" ) + tiffcomp = COMPRESSION_PACKBITS; else tiffcomp = COMPRESSION_NONE; Modified: hugin/trunk/src/tools/fulla.cpp =================================================================== --- hugin/trunk/src/tools/fulla.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/tools/fulla.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -112,7 +112,7 @@ << " the name will be uses as suffix (default suffix: _corr)" << std::endl << " -e value Compression of the output files" << std::endl << " For jpeg output: 0-100" << std::endl - << " For tiff output: DEFLATE, LZW" << std::endl + << " For tiff output: PACKBITS, DEFLATE, LZW" << std::endl << " -v Verbose" << std::endl; } Modified: hugin/trunk/src/tools/nona.cpp =================================================================== --- hugin/trunk/src/tools/nona.cpp 2008-02-18 18:09:46 UTC (rev 2892) +++ hugin/trunk/src/tools/nona.cpp 2008-02-18 18:11:56 UTC (rev 2893) @@ -94,6 +94,7 @@ << " -z set compression type." << std::endl << " Possible options for tiff output:" << std::endl << " NONE no compression" << std::endl + << " PACKBITS packbits compression" << std::endl << " LZW lzw compression" << std::endl << " DEFLATE deflate compression" << std::endl << std::endl; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bru...@us...> - 2008-02-18 22:22:30
|
Revision: 2894 http://hugin.svn.sourceforge.net/hugin/?rev=2894&view=rev Author: brunopostle Date: 2008-02-18 14:22:26 -0800 (Mon, 18 Feb 2008) Log Message: ----------- Add some include statements to build with gcc 4.3.0. Some sanity checking required. Modified Paths: -------------- hugin/trunk/src/hugin1/PT/Panorama.h hugin/trunk/src/hugin_base/panodata/Panorama.cpp hugin/trunk/src/hugin_base/vigra_ext/ransac.h Modified: hugin/trunk/src/hugin1/PT/Panorama.h =================================================================== --- hugin/trunk/src/hugin1/PT/Panorama.h 2008-02-18 18:11:56 UTC (rev 2893) +++ hugin/trunk/src/hugin1/PT/Panorama.h 2008-02-18 22:22:26 UTC (rev 2894) @@ -35,6 +35,7 @@ #include <algorithms/basic/StraightenPanorama.h> #include <algorithms/basic/CalculateMeanExposure.h> +#include <typeinfo> #include "PT/PanoImage.h" #include "PT/PanoramaMemento.h" Modified: hugin/trunk/src/hugin_base/panodata/Panorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-18 18:11:56 UTC (rev 2893) +++ hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-02-18 22:22:26 UTC (rev 2894) @@ -28,6 +28,7 @@ #include "PTScriptParsing.h" #include <fstream> +#include <typeinfo> #include <vigra/impex.hxx> Modified: hugin/trunk/src/hugin_base/vigra_ext/ransac.h =================================================================== --- hugin/trunk/src/hugin_base/vigra_ext/ransac.h 2008-02-18 18:11:56 UTC (rev 2893) +++ hugin/trunk/src/hugin_base/vigra_ext/ransac.h 2008-02-18 22:22:26 UTC (rev 2894) @@ -31,6 +31,7 @@ #include <set> #include <vector> #include <stdlib.h> +#include <cstring> #include <math.h> #include <ctime> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-19 20:37:51
|
Revision: 2898 http://hugin.svn.sourceforge.net/hugin/?rev=2898&view=rev Author: dangelo Date: 2008-02-19 12:37:47 -0800 (Tue, 19 Feb 2008) Log Message: ----------- changed dafault compression to none, except for remapped images (use packbits for those) as they usually contain quite some empty area. Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp hugin/trunk/src/hugin1/hugin/PanoPanel.cpp hugin/trunk/src/hugin1/tools/color_correct_tiff.cpp hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-02-19 01:17:35 UTC (rev 2897) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-02-19 20:37:47 UTC (rev 2898) @@ -431,7 +431,7 @@ opts.blendMode = PanoramaOptions::ENBLEND_BLEND; opts.remapper = PanoramaOptions::NONA; opts.tiff_saveROI = true; - opts.tiffCompression = "PACKBITS"; + opts.tiffCompression = "NONE"; opts.setProjection(PanoramaOptions::EQUIRECTANGULAR); // calculate proper scaling, 1:1 resolution. Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-19 01:17:35 UTC (rev 2897) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-02-19 20:37:47 UTC (rev 2898) @@ -801,7 +801,7 @@ m_FileFormatPanelJPEG->Hide(); m_FileFormatPanelTIFF->Show(); opt.outputImageType ="tif"; - opt.outputImageTypeCompression = "PACKBITS"; + opt.outputImageTypeCompression = "NONE"; break; } @@ -823,7 +823,7 @@ case 1: m_HDRFileFormatPanelTIFF->Show(); opt.outputImageTypeHDR ="tif"; - opt.outputImageTypeHDRCompression = "PACKBITS"; + opt.outputImageTypeHDRCompression = "NONE"; break; default: case 0: Modified: hugin/trunk/src/hugin1/tools/color_correct_tiff.cpp =================================================================== --- hugin/trunk/src/hugin1/tools/color_correct_tiff.cpp 2008-02-19 01:17:35 UTC (rev 2897) +++ hugin/trunk/src/hugin1/tools/color_correct_tiff.cpp 2008-02-19 20:37:47 UTC (rev 2898) @@ -282,7 +282,7 @@ TIFFSetField(handle, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField(handle, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); TIFFSetField(handle, TIFFTAG_SAMPLESPERPIXEL, 4); - TIFFSetField(handle, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS ); + TIFFSetField(handle, TIFFTAG_COMPRESSION, COMPRESSION_NONE ); TIFFSetField(handle, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT ); TIFFSetField(handle, TIFFTAG_ROWSPERSTRIP, height ); Modified: hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h =================================================================== --- hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2008-02-19 01:17:35 UTC (rev 2897) +++ hugin/trunk/src/hugin_base/panodata/PanoramaOptions.h 2008-02-19 20:37:47 UTC (rev 2898) @@ -197,7 +197,7 @@ outfile = "panorama"; quality = 100; tiff_saveROI = true; - tiffCompression = "PACKBITS"; + tiffCompression = "NONE"; colorCorrection = NONE; colorReferenceImage = 0; optimizeReferenceImage = 0; @@ -226,7 +226,7 @@ outputLayersCompression = "PACKBITS"; outputImageType = "tif"; - outputImageTypeCompression = "PACKBITS"; + outputImageTypeCompression = "NONE"; outputImageTypeHDR= "exr"; outputImageTypeHDRCompression = ""; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-02-28 22:12:53
|
Revision: 2911 http://hugin.svn.sourceforge.net/hugin/?rev=2911&view=rev Author: dangelo Date: 2008-02-28 14:12:50 -0800 (Thu, 28 Feb 2008) Log Message: ----------- fixed problems with shell meta characters in file names, tested on linux, but might also work on windows. Might also fix bug [1902471 ] make: *** No rule to make target Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp hugin/trunk/src/hugin_base/hugin_utils/platform.h hugin/trunk/src/hugin_base/hugin_utils/utils.cpp Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-28 22:08:31 UTC (rev 2910) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-28 22:12:50 UTC (rev 2911) @@ -67,6 +67,7 @@ using namespace PT; using namespace utils; using namespace std; +using namespace hugin_utils; //ImagesPanel * images_panel; //LensPanel * lens_panel; @@ -497,8 +498,7 @@ scriptName = m_filename; } else { // the project file is just a PTOptimizer script... - std::string path( - scriptName.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR).mb_str(*wxConvCurrent)); + std::string path = getPathPrefix(std::string(scriptName.GetFullPath().mb_str())); DEBUG_DEBUG("stripping " << path << " from image filenames"); std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvCurrent)); PT::OptimizeVector optvec = opt_panel->getOptimizeVector(); Modified: hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-02-28 22:08:31 UTC (rev 2910) +++ hugin/trunk/src/hugin_base/algorithms/panorama_makefile/PanoramaMakefileExport.cpp 2008-02-28 22:12:50 UTC (rev 2911) @@ -155,21 +155,21 @@ o << endl << endl << "# Tool configuration" << endl - << "NONA=" << escapeStringMake(progs.nona) << endl - << "PTSTITCHER=" << escapeStringMake(progs.PTStitcher) << endl - << "PTMENDER=" << escapeStringMake(progs.PTmender) << endl - << "PTBLENDER=" << escapeStringMake(progs.PTblender) << endl - << "PTMASKER=" << escapeStringMake(progs.PTmasker) << endl - << "PTROLLER=" << escapeStringMake(progs.PTroller) << endl - << "ENBLEND=" << escapeStringMake(progs.enblend) << endl - << "ENFUSE=" << escapeStringMake(progs.enfuse) << endl - << "SMARTBLEND=" << escapeStringMake(progs.smartblend) << endl - << "HDRMERGE=" << escapeStringMake(progs.hdrmerge) << endl + << "NONA=" << quoteStringShell(progs.nona) << endl + << "PTSTITCHER=" << quoteStringShell(progs.PTStitcher) << endl + << "PTMENDER=" << quoteStringShell(progs.PTmender) << endl + << "PTBLENDER=" << quoteStringShell(progs.PTblender) << endl + << "PTMASKER=" << quoteStringShell(progs.PTmasker) << endl + << "PTROLLER=" << quoteStringShell(progs.PTroller) << endl + << "ENBLEND=" << quoteStringShell(progs.enblend) << endl + << "ENFUSE=" << quoteStringShell(progs.enfuse) << endl + << "SMARTBLEND=" << quoteStringShell(progs.smartblend) << endl + << "HDRMERGE=" << quoteStringShell(progs.hdrmerge) << endl << "RM=rm" << endl #ifdef COULD_EXECUTE_EXIFTOOL_WITH_PERL - << "EXIFTOOL=" << (executeWithPerl? perlCommand+" " : "") << escapeStringMake(progs.exiftool) << endl + << "EXIFTOOL=" << (executeWithPerl? perlCommand+" " : "") << quoteStringShell(progs.exiftool) << endl #else - << "EXIFTOOL=" << escapeStringMake(progs.exiftool) << endl + << "EXIFTOOL=" << quoteStringShell(progs.exiftool) << endl #endif << endl << "# options for the programs" << endl << endl; @@ -247,24 +247,45 @@ std::string sHDR_BLENDED = output + "_hdr" + hdrExt; o << "# the output panorama" << endl - << "LDR_REMAPPED_PREFIX=" << escapeStringMake(output) << endl + << "LDR_REMAPPED_PREFIX=" << escapeStringMake(output) << endl + << "LDR_REMAPPED_PREFIX_SHELL=" << quoteStringShell(output) << endl + << "HDR_STACK_REMAPPED_PREFIX=" << escapeStringMake(output + "_hdr_") << endl + << "HDR_STACK_REMAPPED_PREFIX_SHELL=" << quoteStringShell(output + "_hdr_") << endl + << "LDR_EXPOSURE_REMAPPED_PREFIX=" << escapeStringMake(output + "_exposure_layers_") << endl + << "LDR_EXPOSURE_REMAPPED_PREFIX_SHELL=" << quoteStringShell(output + "_exposure_layers_") << endl + << "PROJECT_FILE=" << escapeStringMake(ptofile) << endl + << "PROJECT_FILE_SHELL=" << quoteStringShell(ptofile) << endl + << "LDR_BLENDED=" << escapeStringMake(sLDR_BLENDED) << endl + << "LDR_BLENDED_SHELL=" << quoteStringShell(sLDR_BLENDED) << endl + << "LDR_STACKED_BLENDED=" << escapeStringMake(sLDR_STACKED_BLENDED) << endl + << "LDR_STACKED_BLENDED_SHELL=" << quoteStringShell(sLDR_STACKED_BLENDED) << endl + << "HDR_BLENDED=" << escapeStringMake(sHDR_BLENDED) << endl + << "HDR_BLENDED_SHELL=" << quoteStringShell(sHDR_BLENDED) << endl << endl << "# first input image" << endl << "INPUT_IMAGE_1=" << escapeStringMake(pano.getImage(0).getFilename()) << endl + << "INPUT_IMAGE_1_SHELL=" << quoteStringShell(pano.getImage(0).getFilename()) << endl + << "# all input images" << endl << "INPUT_IMAGES="; - for (unsigned int i=0; i < pano.getNrOfImages(); i++) { o << escapeStringMake(pano.getImage(i).getFilename()); if (i+1 != pano.getNrOfImages()) o << "\\" << endl; } + o << endl << endl; + o << "INPUT_IMAGES_SHELL="; + for (unsigned int i=0; i < pano.getNrOfImages(); i++) { + o << quoteStringShell(pano.getImage(i).getFilename()); + if (i+1 != pano.getNrOfImages()) o << "\\" << endl; + } + vector<string> remappedImages; o << endl << endl @@ -279,11 +300,20 @@ if (it != images.end()) o << "\\" << endl; } + o << endl << endl + << "LDR_LAYERS_SHELL="; + for(int i=0; i < remappedImages.size(); i++) { + o << quoteStringShell(remappedImages[i]); + if (i != remappedImages.size() -1) { + o << "\\" << endl; + } + } + vector<string> remappedHDRImages; o << endl - << endl - << "# remapped images (hdr)" << endl - << "HDR_LAYERS="; + << endl + << "# remapped images (hdr)" << endl + << "HDR_LAYERS="; for (UIntSet::iterator it = images.begin(); it != images.end();) { std::ostringstream fns; fns << output << "_hdr_" << std::setfill('0') << std::setw(4) << *it << hdrRemappedExt; @@ -292,12 +322,20 @@ ++it; if (it != images.end()) o << "\\" << endl; } + o << endl << endl + << "HDR_LAYERS_SHELL="; + for(int i=0; i < remappedHDRImages.size(); i++) { + o << quoteStringShell(remappedHDRImages[i]); + if (i != remappedHDRImages.size() - 1) { + o << "\\" << endl; + } + } vector<string> remappedHDRImagesGray; o << endl - << endl - << "# remapped maxval images" << endl - << "HDR_LAYERS_WEIGHTS="; + << endl + << "# remapped maxval images" << endl + << "HDR_LAYERS_WEIGHTS="; for (UIntSet::iterator it = images.begin(); it != images.end();) { std::ostringstream fns; fns << output << "_hdr_" << std::setfill('0') << std::setw(4) << *it << "_gray.pgm"; @@ -306,9 +344,16 @@ ++it; if (it != images.end()) o << "\\" << endl; } + o << endl << endl + << "HDR_LAYERS_WEIGHTS_SHELL="; + for(int i=0; i < remappedHDRImagesGray.size(); i++) { + o << quoteStringShell(remappedHDRImagesGray[i]); + if (i != remappedHDRImagesGray.size() - 1) { + o << "\\" << endl; + } + } o << endl; - vector<string> stackedImages; vector<UIntSet> stacks = getHDRStacks(pano, images); DEBUG_DEBUG( stacks.size() << " stacks found"); @@ -325,6 +370,7 @@ std::ostringstream stackedImgVar; stackedImgVar << "HDR_STACK_" << i; o << stackedImgVar.str() << " = " << escapeStringMake(fns.str()) << endl; + o << stackedImgVar.str() << "_SHELL = " << quoteStringShell(fns.str()) << endl; o << stackedImgVar.str() << "_INPUT = "; for (UIntSet::iterator it = stacks[i].begin(); it != stacks[i].end();) { std::ostringstream fns; @@ -334,12 +380,25 @@ if (it != stacks[i].end()) o << "\\" << endl; } o << endl << endl; + o << stackedImgVar.str() << "_INPUT_SHELL = "; + for (UIntSet::iterator it = stacks[i].begin(); it != stacks[i].end();) { + std::ostringstream fns; + fns << output << "_hdr_" << std::setfill('0') << std::setw(4) << *it << hdrRemappedExt; + o << quoteStringShell(fns.str()); + ++it; + if (it != stacks[i].end()) o << "\\" << endl; + } + o << endl << endl; } o << endl; o << "HDR_STACKS = "; for (unsigned i=0; i < stacks.size(); i++) o << "$(HDR_STACK_" << i << ") "; o << endl; + o << "HDR_STACKS_SHELL = "; + for (unsigned i=0; i < stacks.size(); i++) + o << "$(HDR_STACK_" << i << "_SHELL) "; + o << endl; // add support for exposure blending stuff... vector<string> similarExposureRemappedImages; @@ -357,10 +416,11 @@ std::ostringstream fns; fns << output << "_exposure_" << std::setfill('0') << std::setw(2) << i << ldrExt; similarExposureImages.push_back(fns.str()); - string destImg = escapeStringMake(fns.str()); + string destImg = fns.str(); std::ostringstream expImgVar; expImgVar << "LDR_EXPOSURE_LAYER_" << i; - o << expImgVar.str() << " = " << destImg << endl; + o << expImgVar.str() << " = " << escapeStringMake(destImg) << endl; + o << expImgVar.str() << "_SHELL = " << quoteStringShell(destImg) << endl; o << expImgVar.str() << "_INPUT = "; double exposure=0; for (UIntSet::iterator it = similarExposures[i].begin(); it != similarExposures[i].end();) { @@ -373,7 +433,16 @@ if (it != similarExposures[i].end()) o << "\\" << endl; } o << endl << endl; - o << expImgVar.str() << " = " << destImg << endl; + o << expImgVar.str() << "_INPUT_SHELL = "; + for (UIntSet::iterator it = similarExposures[i].begin(); it != similarExposures[i].end();) { + exposure += pano.getSrcImage(*it).getExposureValue(); + std::ostringstream fns; + fns << output << "_exposure_layers_" << std::setfill('0') << std::setw(4) << *it << ldrRemappedExt; + o << quoteStringShell(fns.str()); + ++it; + if (it != similarExposures[i].end()) o << "\\" << endl; + } + o << endl << endl; o << expImgVar.str() << "_INPUT_PTMENDER = "; for (UIntSet::iterator it = similarExposures[i].begin(); it != similarExposures[i].end();) { std::ostringstream fns; @@ -382,6 +451,15 @@ ++it; if (it != similarExposures[i].end()) o << "\\" << endl; } + + o << endl << endl << expImgVar.str() << "_INPUT_PTMENDER_SHELL = "; + for (UIntSet::iterator it = similarExposures[i].begin(); it != similarExposures[i].end();) { + std::ostringstream fns; + fns << output << std::setfill('0') << std::setw(4) << *it << ldrRemappedExt; + o << quoteStringShell(fns.str()); + ++it; + if (it != similarExposures[i].end()) o << "\\" << endl; + } // calculate output exposure value for this set. o << endl << "LDR_EXPOSURE_LAYER_" << i << "_EXPOSURE = " @@ -392,6 +470,10 @@ for (unsigned i=0; i < similarExposures.size(); i++) o << "$(LDR_EXPOSURE_LAYER_" << i << ") "; o << endl; + o << "LDR_EXPOSURE_LAYERS_SHELL = "; + for (unsigned i=0; i < similarExposures.size(); i++) + o << "$(LDR_EXPOSURE_LAYER_" << i << "_SHELL) "; + o << endl; o << "LDR_EXPOSURE_LAYERS_REMAPPED = "; for (unsigned i=0; i < similarExposureRemappedImages.size(); i++) { @@ -399,6 +481,13 @@ if (i+1 != similarExposureRemappedImages.size()) o << "\\" << endl; } o << endl << endl; + o << "LDR_EXPOSURE_LAYERS_REMAPPED_SHELL = "; + for (unsigned i=0; i < similarExposureRemappedImages.size(); i++) + { + o << quoteStringShell(similarExposureRemappedImages[i]); + if (i+1 != similarExposureRemappedImages.size()) o << "\\" << endl; + } + o << endl << endl; vector<string> ldrStackedImages; @@ -415,6 +504,7 @@ std::ostringstream stackedImgVar; stackedImgVar << "LDR_STACK_" << i; o << stackedImgVar.str() << " = " << escapeStringMake(fns.str()) << endl; + o << stackedImgVar.str() << "_SHELL = " << quoteStringShell(fns.str()) << endl; o << stackedImgVar.str() << "_INPUT = "; for (UIntSet::iterator it = stacks[i].begin(); it != stacks[i].end();) { std::ostringstream fns; @@ -424,12 +514,25 @@ if (it != stacks[i].end()) o << "\\" << endl; } o << endl << endl; + o << stackedImgVar.str() << "_INPUT_SHELL = "; + for (UIntSet::iterator it = stacks[i].begin(); it != stacks[i].end();) { + std::ostringstream fns; + fns << output << "_exposure_layers_" << std::setfill('0') << std::setw(4) << *it << ldrRemappedExt; + o << quoteStringShell(fns.str()); + ++it; + if (it != stacks[i].end()) o << "\\" << endl; + } + o << endl << endl; } o << endl; o << "LDR_STACKS = "; for (unsigned i=0; i < stacks.size(); i++) o << "$(LDR_STACK_" << i << ") "; o << endl; + o << "LDR_STACKS_SHELL = "; + for (unsigned i=0; i < stacks.size(); i++) + o << "$(LDR_STACK_" << i << "_SHELL) "; + o << endl; // TODO: include custom makefile here @@ -448,7 +551,7 @@ // depends on remapped ldr images and stacked ldr images if (! opts.outputLDRLayers) { outputFiles.insert(outputFiles.end(), remappedImages.begin(), remappedImages.end()); - cleanTargets += "$(LDR_LAYERS) "; + cleanTargets += "$(LDR_LAYERS_SHELL) "; } } @@ -467,7 +570,7 @@ outputFiles.insert(outputFiles.end(), similarExposureImages.begin(), similarExposureImages.end()); if (! opts.outputLDRExposureRemapped) { outputFiles.insert(outputFiles.end(), similarExposureRemappedImages.begin(), similarExposureRemappedImages.end()); - cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; + cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED_SHELL) "; } } @@ -476,10 +579,10 @@ outputFiles.push_back(sLDR_STACKED_BLENDED); outputFiles.insert(outputFiles.end(),ldrStackedImages.begin(), ldrStackedImages.end()); // always clean temp files used by exposure stacks - cleanTargets += "$(LDR_STACKS) "; - if (! opts.outputLDRExposureRemapped) { + cleanTargets += "$(LDR_STACKS_SHELL) "; + if (! opts.outputLDRExposureRemapped && ! opts.outputLDRExposureLayers) { outputFiles.insert(outputFiles.end(), similarExposureRemappedImages.begin(), similarExposureRemappedImages.end()); - cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED) "; + cleanTargets += "$(LDR_EXPOSURE_LAYERS_REMAPPED_SHELL) "; } } @@ -495,7 +598,7 @@ if (!opts.outputHDRLayers) { outputFiles.insert(outputFiles.end(),remappedHDRImages.begin(), remappedHDRImages.end()); outputFiles.insert(outputFiles.end(),remappedHDRImagesGray.begin(), remappedHDRImagesGray.end()); - cleanTargets += "$(HDR_LAYERS) $(HDR_LAYERS_WEIGHTS) "; + cleanTargets += "$(HDR_LAYERS_SHELL) $(HDR_LAYERS_WEIGHTS_SHELL) "; } } @@ -504,22 +607,22 @@ outputFiles.push_back(sHDR_BLENDED); if (!opts.outputHDRStacks) { outputFiles.insert(outputFiles.end(),stackedImages.begin(), stackedImages.end()); - cleanTargets += "$(HDR_STACKS) "; + cleanTargets += "$(HDR_STACKS_SHELL) "; if (! opts.outputHDRLayers) { outputFiles.insert(outputFiles.end(),remappedHDRImages.begin(), remappedHDRImages.end()); outputFiles.insert(outputFiles.end(),remappedHDRImagesGray.begin(), remappedHDRImagesGray.end()); - cleanTargets += "$(HDR_LAYERS) $(HDR_LAYERS_WEIGHTS) "; + cleanTargets += "$(HDR_LAYERS_SHELL) $(HDR_LAYERS_WEIGHTS_SHELL) "; } } } // targets and clean rule. - o << "TEMP_FILES = " << cleanTargets << endl + o << "TEMP_FILES_SHELL = " << cleanTargets << endl << endl << "all: " << targets << endl << endl << "clean: " << endl - << "\t-$(RM) $(TEMP_FILES)" << endl + << "\t-$(RM) $(TEMP_FILES_SHELL)" << endl << endl; // ============================== @@ -537,7 +640,7 @@ string destImg = escapeStringMake(remappedImages[i]); string srcImg = escapeStringMake(pano.getImage(*it).getFilename()); o << destImg << ": " << srcImg << " $(PROJECT_FILE)" << endl - << "\t$(NONA) $(NONA_LDR_REMAPPED_COMP) -r ldr -m " << ldrRemappedMode << " -o $(LDR_REMAPPED_PREFIX) -i " << *it << " $(PROJECT_FILE)" << endl << endl; + << "\t$(NONA) $(NONA_LDR_REMAPPED_COMP) -r ldr -m " << ldrRemappedMode << " -o $(LDR_REMAPPED_PREFIX_SHELL) -i " << *it << " $(PROJECT_FILE_SHELL)" << endl << endl; i++; } @@ -549,7 +652,7 @@ string destImg = escapeStringMake(remappedHDRImages[i]); string srcImg = escapeStringMake(pano.getImage(*it).getFilename()); o << destImg << ": " << srcImg << " $(PROJECT_FILE)" << endl - << "\t$(NONA) -r hdr -m " << hdrRemappedMode << " -o $(HDR_STACK_REMAPPED_PREFIX) -i " << *it << " $(PROJECT_FILE)" << endl << endl; + << "\t$(NONA) -r hdr -m " << hdrRemappedMode << " -o $(HDR_STACK_REMAPPED_PREFIX_SHELL) -i " << *it << " $(PROJECT_FILE_SHELL)" << endl << endl; i++; } @@ -570,8 +673,8 @@ */ o << destImg << ": " << srcImg << " $(PROJECT_FILE)" << endl << "\t$(NONA) $(NONA_LDR_REMAPPED_COMP) -r ldr -e " << pano.getSrcImage(*it).getExposureValue() - << " -m " << ldrRemappedMode << " -o $(LDR_EXPOSURE_REMAPPED_PREFIX) -i " << *it - << " $(PROJECT_FILE)" << endl << endl; + << " -m " << ldrRemappedMode << " -o $(LDR_EXPOSURE_REMAPPED_PREFIX_SHELL) -i " << *it + << " $(PROJECT_FILE_SHELL)" << endl << endl; j++; } } @@ -579,7 +682,7 @@ break; case PanoramaOptions::PTMENDER: o << "$(LDR_LAYERS) : $(INPUT_IMAGES) $(PROJECT_FILE)" << endl - << "\t$(PTMENDER) -o $(LDR_REMAPPED_PREFIX) $(PROJECT_FILE)" << endl << endl; + << "\t$(PTMENDER) -o $(LDR_REMAPPED_PREFIX_SHELL) $(PROJECT_FILE_SHELL)" << endl << endl; break; } @@ -590,7 +693,7 @@ // only output pixes that are defined in all input images for (unsigned i=0; i < stacks.size(); i++) { o << "$(HDR_STACK_" << i << ") : $(HDR_STACK_" << i << "_INPUT)" << endl - << "\t$(HDRMERGE) -m avg -c -o $(HDR_STACK_" << i << ") $(HDR_STACK_" << i << "_INPUT)" << endl + << "\t$(HDRMERGE) -m avg -c -o $(HDR_STACK_" << i << "_SHELL) $(HDR_STACK_" << i << "_INPUT_SHELL)" << endl << endl; } @@ -599,8 +702,8 @@ for (unsigned i=0; i < stacks.size(); i++) { o << "$(LDR_STACK_" << i << ") : $(LDR_STACK_" << i << "_INPUT)" << endl - << "\t$(ENFUSE) $(ENFUSE_OPTS) -o $(LDR_STACK_" << i << ") $(LDR_STACK_" << i << "_INPUT)" << endl - << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $(LDR_STACK_" << i << ")" << endl + << "\t$(ENFUSE) $(ENFUSE_OPTS) -o $(LDR_STACK_" << i << "_SHELL) $(LDR_STACK_" << i << "_INPUT_SHELL)" << endl + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1_SHELL) $(EXIFTOOL_COPY_ARGS) $(LDR_STACK_" << i << "_SHELL)" << endl << endl; } @@ -608,48 +711,48 @@ case PanoramaOptions::ENBLEND_BLEND: // write rules for blending with enblend o << "$(LDR_BLENDED) : $(LDR_LAYERS)" << endl; - o << "\t$(ENBLEND) $(ENBLEND_LDR_COMP) $(ENBLEND_OPTS) -o $(LDR_BLENDED) $(LDR_LAYERS) " << endl; - o << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $(LDR_BLENDED)" << endl << endl; + o << "\t$(ENBLEND) $(ENBLEND_LDR_COMP) $(ENBLEND_OPTS) -o $(LDR_BLENDED_SHELL) $(LDR_LAYERS_SHELL) " << endl; + o << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1_SHELL) $(EXIFTOOL_COPY_ARGS) $(LDR_BLENDED_SHELL)" << endl << endl; // for LDR exposure blend planes for (unsigned i=0; i < similarExposures.size(); i++) { o << "$(LDR_EXPOSURE_LAYER_" << i <<") : $(LDR_EXPOSURE_LAYER_" << i << "_INPUT)" << endl - << "\t$(ENBLEND) $(ENBLEND_LDR_COMP) $(ENBLEND_OPTS) -o $(LDR_EXPOSURE_LAYER_" << i <<") $(LDR_EXPOSURE_LAYER_" << i << "_INPUT)" << endl - << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $(LDR_EXPOSURE_LAYER_" << i <<")" << endl << endl; + << "\t$(ENBLEND) $(ENBLEND_LDR_COMP) $(ENBLEND_OPTS) -o $(LDR_EXPOSURE_LAYER_" << i <<"_SHELL) $(LDR_EXPOSURE_LAYER_" << i << "_INPUT_SHELL)" << endl + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1_SHELL) $(EXIFTOOL_COPY_ARGS) $(LDR_EXPOSURE_LAYER_" << i <<"_SHELL)" << endl << endl; } // rules for enfuse blending o << "$(LDR_STACKED_BLENDED) : $(LDR_STACKS)" << endl - << "\t$(ENBLEND) $(ENBLEND_LDR_COMP) $(ENBLEND_OPTS) -o $(LDR_STACKED_BLENDED) $(LDR_STACKS) " << endl - << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $(LDR_STACKED_BLENDED)" << endl << endl; + << "\t$(ENBLEND) $(ENBLEND_LDR_COMP) $(ENBLEND_OPTS) -o $(LDR_STACKED_BLENDED_SHELL) $(LDR_STACKS_SHELL) " << endl + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1_SHELL) $(EXIFTOOL_COPY_ARGS) $(LDR_STACKED_BLENDED_SHELL)" << endl << endl; // rules for hdr blending o << "$(HDR_BLENDED) : $(HDR_STACKS)" << endl; - o << "\t$(ENBLEND) $(ENBLEND_HDR_COMP) $(ENBLEND_OPTS) -o $(HDR_BLENDED) $(HDR_STACKS) " << endl << endl; + o << "\t$(ENBLEND) $(ENBLEND_HDR_COMP) $(ENBLEND_OPTS) -o $(HDR_BLENDED_SHELL) $(HDR_STACKS_SHELL) " << endl << endl; break; case PanoramaOptions::NO_BLEND: o << "$(LDR_BLENDED) : $(LDR_LAYERS)" << endl - << "\t-$(RM) $(LDR_BLENDED)" << endl - << "\t$(PTROLLER) -o $(LDR_BLENDED) $(LDR_LAYERS) " << endl - << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $(LDR_BLENDED)" << endl << endl; + << "\t-$(RM) $(LDR_BLENDED_SHELL)" << endl + << "\t$(PTROLLER) -o $(LDR_BLENDED_SHELL) $(LDR_LAYERS_SHELL) " << endl + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1_SHELL) $(EXIFTOOL_COPY_ARGS) $(LDR_BLENDED_SHELL)" << endl << endl; // for LDR exposure blend planes for (unsigned i=0; i < similarExposures.size(); i++) { o << "$(LDR_EXPOSURE_LAYER_" << i <<") : $(LDR_EXPOSURE_LAYER_" << i << "_INPUT)" << endl - << "\t-$(RM) $(LDR_EXPOSURE_LAYER_" << i <<")" << endl - << "\t$(PTROLLER) -o $(LDR_EXPOSURE_LAYER_" << i <<") $(LDR_EXPOSURE_LAYER_" << i << "_INPUT)" << endl - << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $(LDR_EXPOSURE_LAYER_" << i <<")" << endl << endl; + << "\t-$(RM) $(LDR_EXPOSURE_LAYER_" << i <<"_SHELL)" << endl + << "\t$(PTROLLER) -o $(LDR_EXPOSURE_LAYER_" << i <<"_SHELL) $(LDR_EXPOSURE_LAYER_" << i << "_INPUT_SHELL)" << endl + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1_SHELL) $(EXIFTOOL_COPY_ARGS) $(LDR_EXPOSURE_LAYER_" << i <<"_SHELL)" << endl << endl; } o << "$(LDR_STACKED_BLENDED) : $(LDR_STACKS)" << endl - << "\t-$(RM) $(LDR_STACKED_BLENDED)" << endl - << "\t$(PTROLLER) -o $(LDR_STACKED_BLENDED) $(LDR_STACKS)" << endl - << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1) $(EXIFTOOL_COPY_ARGS) $(LDR_STACKED_BLENDED)" << endl << endl; + << "\t-$(RM) $(LDR_STACKED_BLENDED_SHELL)" << endl + << "\t$(PTROLLER) -o $(LDR_STACKED_BLENDED_SHELL) $(LDR_STACKS_SHELL)" << endl + << "\t$(EXIFTOOL) -overwrite_original_in_place -TagsFromFile $(INPUT_IMAGE_1_SHELL) $(EXIFTOOL_COPY_ARGS) $(LDR_STACKED_BLENDED_SHELL)" << endl << endl; // rules for non-blended HDR panoramas o << "$(HDR_BLENDED) : $(HDR_LAYERS)" << endl; - o << "\t$(HDRMERGE) -m avg -o $(HDR_BLENDED) $(HDR_LAYERS)" << endl << endl; + o << "\t$(HDRMERGE) -m avg -o $(HDR_BLENDED_SHELL) $(HDR_LAYERS_SHELL)" << endl << endl; break; case PanoramaOptions::PTBLENDER_BLEND: Modified: hugin/trunk/src/hugin_base/hugin_utils/platform.h =================================================================== --- hugin/trunk/src/hugin_base/hugin_utils/platform.h 2008-02-28 22:08:31 UTC (rev 2910) +++ hugin/trunk/src/hugin_base/hugin_utils/platform.h 2008-02-28 22:12:50 UTC (rev 2911) @@ -104,11 +104,26 @@ #endif } - /** Escape dangerous chars in makefile strings/filenames (space and wildcard characters) */ + /** Try to escape special chars in a string used by a unix type shell + * + * @BUG: I'm quite sure that this routine doesn't replace + * some important shell chars I don't know of. + * This could lead to nasty behaviour and maybe + * even security holes. + */ template <class str> + str quoteStringShell(const str & arg) + { + return quoteStringInternal(arg, str("\\"), str("\\ ~$\"|'`{}[]()")); + } + + /** Escape dangerous chars in makefile strings/filenames + * (space and shell meta characters) + */ + template <class str> str escapeStringMake(const str & arg) { - return quoteStringInternal(arg, str("\\"), str(" $*?")); + return quoteStringInternal(arg, str("\\"), str(" ")); } /** Quote a filename, so that it is surrounded by "" Modified: hugin/trunk/src/hugin_base/hugin_utils/utils.cpp =================================================================== --- hugin/trunk/src/hugin_base/hugin_utils/utils.cpp 2008-02-28 22:08:31 UTC (rev 2910) +++ hugin/trunk/src/hugin_base/hugin_utils/utils.cpp 2008-02-28 22:12:50 UTC (rev 2911) @@ -65,8 +65,18 @@ // no dot found return std::string(""); } +#ifdef UNIX_LIKE // check for slashes after dot std::string::size_type slashidx = basename2.find('/', idx); + if ( slashidx == std::string::npos) + { + return basename2.substr(idx+1); + } else { + return std::string(""); + } +#else + // check for slashes after dot + std::string::size_type slashidx = basename2.find('/', idx); std::string::size_type backslashidx = basename2.find('\\', idx); if ( slashidx == std::string::npos && backslashidx == std::string::npos) { @@ -74,7 +84,7 @@ } else { return std::string(""); } - +#endif } std::string stripExtension(const std::string & basename2) @@ -86,6 +96,15 @@ // no dot found return basename2; } +#ifdef UNIX_LIKE + std::string::size_type slashidx = basename2.find('/', idx); + if ( slashidx == std::string::npos) + { + return basename2.substr(0, idx); + } else { + return basename2; + } +#else // check for slashes after dot std::string::size_type slashidx = basename2.find('/', idx); std::string::size_type backslashidx = basename2.find('\\', idx); @@ -95,10 +114,14 @@ } else { return basename2; } +#endif } std::string stripPath(const std::string & filename) { +#ifdef UNIX_LIKE + std::string::size_type idx = filename.rfind('/'); +#else std::string::size_type idx1 = filename.rfind('\\'); std::string::size_type idx2 = filename.rfind('/'); std::string::size_type idx; @@ -109,6 +132,7 @@ } else { idx = std::max(idx1, idx2); } +#endif if (idx != std::string::npos) { // DEBUG_DEBUG("returning substring: " << filename.substr(idx + 1)); return filename.substr(idx + 1); @@ -119,6 +143,9 @@ std::string getPathPrefix(const std::string & filename) { +#ifdef UNIX_LIKE + std::string::size_type idx = filename.rfind('/'); +#else std::string::size_type idx1 = filename.rfind('\\'); std::string::size_type idx2 = filename.rfind('/'); std::string::size_type idx; @@ -129,6 +156,7 @@ } else { idx = std::max(idx1, idx2); } +#endif if (idx != std::string::npos) { // DEBUG_DEBUG("returning substring: " << filename.substr(idx + 1)); return filename.substr(0, idx+1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-03-06 08:31:11
|
Revision: 2929 http://hugin.svn.sourceforge.net/hugin/?rev=2929&view=rev Author: dangelo Date: 2008-03-06 00:31:05 -0800 (Thu, 06 Mar 2008) Log Message: ----------- when converting between 16 bit unicode and 8 bit strings, use wxConvFileName and wxConvLocal conversions, instead of wxConvCurrent. Fixes an umlaut problem under linux. Might also allow windows users using all characters in the local 8 bit windows codepage for directory/filenames. Modified Paths: -------------- hugin/trunk/src/hugin1/base_wx/ImageCache.cpp hugin/trunk/src/hugin1/base_wx/MyProgressDialog.cpp hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp hugin/trunk/src/hugin1/base_wx/huginConfig.cpp hugin/trunk/src/hugin1/common/wxPlatform.h hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp hugin/trunk/src/hugin1/hugin/ImagesList.cpp hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp hugin/trunk/src/hugin1/hugin/LensPanel.cpp hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/NonaStitcherPanel.cpp hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp hugin/trunk/src/hugin1/hugin/PanoDruid.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/PreviewPanel.cpp hugin/trunk/src/hugin1/hugin/TextKillFocusHandler.cpp hugin/trunk/src/hugin1/hugin/huginApp.cpp hugin/trunk/src/hugin1/hugin/wxPanoCommand.cpp hugin/trunk/src/hugin1/hugin/wxPanoCommand.h hugin/trunk/src/hugin1/nona_gui/nona_gui.cpp hugin/trunk/src/hugin1/stitch_project/hugin_stitch_project.cpp hugin/trunk/src/hugin_base/huginapp/ImageCache.cpp Modified: hugin/trunk/src/hugin1/base_wx/ImageCache.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/ImageCache.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/base_wx/ImageCache.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -536,7 +536,7 @@ return it->second; } else { if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Loading image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvCurrent).c_str()).mb_str(*wxConvCurrent), "", 0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Loading image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvFileName).c_str()).mb_str(wxConvLocal), "", 0)); } wxBusyCursor wait; #if 1 @@ -565,7 +565,7 @@ imgFloat->resize(info.size()); } - wxString pixelTypeWX(pixelType, *wxConvCurrent); + wxString pixelTypeWX(pixelType, wxConvLocal); if ( bands == 1) { // load and convert image to 8 bit, if needed if (strcmp(pixelType, "UINT8") == 0 ) { @@ -680,7 +680,7 @@ } } catch (std::exception & e) { // could not load image.. - wxLogError(wxString::Format(_("Error during image reading: %s"), wxString(e.what(),*wxConvCurrent).c_str())); + wxLogError(wxString::Format(_("Error during image reading: %s"), wxString(e.what(),wxConvLocal).c_str())); throw; } @@ -716,7 +716,7 @@ } else { wxBusyCursor wait; if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Scaling image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvCurrent).c_str()).mb_str(*wxConvCurrent), "", 0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Scaling image %s"),wxString(utils::stripPath(filename).c_str(), *wxConvFileName).c_str()).mb_str(wxConvLocal), "", 0)); } DEBUG_DEBUG("creating small image " << name ); EntryPtr entry = getImage(filename); @@ -817,7 +817,7 @@ img = new vigra::BImage(srcImg.GetWidth(), srcImg.GetHeight()); DEBUG_DEBUG("creating level 0 pyramid image for "<< filename); if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating grayscale %s"),wxString(filename.c_str(), *wxConvCurrent).c_str()).mb_str(*wxConvCurrent), "", 0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating grayscale %s"),wxString(filename.c_str(), wxConvLocal).c_str()).mb_str(wxConvLocal), "", 0)); } BasicImageView<RGBValue<unsigned char> > src((RGBValue<unsigned char> *)srcImg.GetData(), srcImg.GetWidth(), @@ -835,7 +835,7 @@ DEBUG_DEBUG("reducing level " << key.level-1 << " to level " << key.level); assert(img); if (m_progress) { - m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating pyramid image for %s, level %d"),wxString(filename.c_str(), *wxConvCurrent).c_str(), key.level).mb_str(*wxConvCurrent), "",0)); + m_progress->pushTask(ProgressTask((const char *)wxString::Format(_("Creating pyramid image for %s, level %d"),wxString(filename.c_str(), wxConvLocal).c_str(), key.level).mb_str(wxConvLocal), "",0)); } BImage *smallImg = new BImage(); reduceToNextLevel(*img, *smallImg); Modified: hugin/trunk/src/hugin1/base_wx/MyProgressDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/MyProgressDialog.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/base_wx/MyProgressDialog.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -62,7 +62,7 @@ if (m_abort) return false; m_progress += i; - m_message = wxString(msg.c_str(), *wxConvCurrent); + m_message = wxString(msg.c_str(), wxConvLocal); // build the message: int percentage = (int) floor(m_progress/m_maxProgress*100); if (percentage > 100) percentage = 100; @@ -75,7 +75,7 @@ void ProgressReporterDialog::setMessage(const std::string & msg) { - m_message = wxString(msg.c_str(), *wxConvCurrent); + m_message = wxString(msg.c_str(), wxConvLocal); int percentage = (int) floor(m_progress/m_maxProgress*100); if (percentage > 100) percentage = 100; std::cerr << m_message.c_str() << ": " << percentage << "%" << std::endl; @@ -94,13 +94,13 @@ wxString cMsg; if (it->getProgress() > 0) { cMsg.Printf(wxT("%s: %s [%3.0f%%]\n"), - wxString(it->getShortMessage().c_str(), *wxConvCurrent).c_str(), - wxString(it->getMessage().c_str(), *wxConvCurrent).c_str(), + wxString(it->getShortMessage().c_str(), wxConvLocal).c_str(), + wxString(it->getMessage().c_str(), wxConvLocal).c_str(), 100 * it->getProgress()); } else { cMsg.Printf(wxT("%s %s\n"), - wxString(it->getShortMessage().c_str(), *wxConvCurrent).c_str(), - wxString(it->getMessage().c_str(), *wxConvCurrent).c_str()); + wxString(it->getShortMessage().c_str(), wxConvLocal).c_str(), + wxString(it->getMessage().c_str(), wxConvLocal).c_str()); } // append to main message msg.Append(cMsg); Modified: hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/base_wx/PTWXDlg.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -60,7 +60,7 @@ vsprintf(message, fmt, ap); // MessageBox(GetFocus(), (LPSTR)message, (LPSTR)"", MB_OK | MB_ICONHAND) ; - wxMessageBox(wxString(message,*wxConvCurrent), _("Panorama Tools"), wxOK | wxICON_HAND); + wxMessageBox(wxString(message,wxConvLocal), _("Panorama Tools"), wxOK | wxICON_HAND); } @@ -84,7 +84,7 @@ if (dlg == 0) { return FALSE; } - dlg->Update(0, wxString(argument, *wxConvCurrent)); + dlg->Update(0, wxString(argument, wxConvLocal)); } return TRUE; case _setProgress: @@ -136,7 +136,7 @@ if (dlg == 0) { return FALSE; } - dlg->Update(0, wxString(argument, *wxConvCurrent)); + dlg->Update(0, wxString(argument, wxConvLocal)); } return TRUE; case _setProgress: @@ -152,7 +152,7 @@ { sprintf( text,"%s%s", mainMessage, &(argument[1]) ); } - if (! dlg->Update(0, wxString(text, *wxConvCurrent))) { + if (! dlg->Update(0, wxString(text, wxConvLocal))) { return FALSE; } } Modified: hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/base_wx/RunStitchPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -109,7 +109,7 @@ wxFileName::SplitPath(scriptFile, &pathToPTO, NULL, NULL); pathToPTO.Append(wxT("/")); - ifstream prjfile((const char *)scriptFile.mb_str(*wxConvCurrent)); + ifstream prjfile((const char *)scriptFile.mb_str(*wxConvFileName)); if (prjfile.bad()) { wxLogError( wxString::Format(_("could not open script : %s"), scriptFile.c_str()) ); return false; @@ -118,7 +118,7 @@ PT::Panorama pano; PT::PanoramaMemento newPano; - if (newPano.loadPTScript(prjfile, (const char *)pathToPTO.mb_str(*wxConvCurrent))) { + if (newPano.loadPTScript(prjfile, (const char *)pathToPTO.mb_str(*wxConvFileName))) { pano.setMemento(newPano); } else { wxLogError( wxString::Format(_("error while parsing panos tool script: %s"), scriptFile.c_str()) ); @@ -130,14 +130,14 @@ outname = wxGetCwd() + wxT("/") + outname; } - DEBUG_DEBUG("output file specified is " << (const char *)outname.mb_str(*wxConvCurrent)); + DEBUG_DEBUG("output file specified is " << (const char *)outname.mb_str(wxConvLocal)); wxString basename; wxString outpath; wxFileName outputPrefix(outname); outpath = outputPrefix.GetPath(); basename = outputPrefix.GetFullName(); - cout << "output path: " << outpath.mb_str(*wxConvCurrent) << " file:" << basename.mb_str(*wxConvCurrent) << endl; + cout << "output path: " << outpath.mb_str(wxConvLocal) << " file:" << basename.mb_str(wxConvLocal) << endl; // stitch only active images UIntSet activeImgs = pano.getActiveImages(); @@ -150,9 +150,9 @@ if(m_currentPTOfn.size() == 0) { wxLogError(_("Could not create temporary file")); } - DEBUG_DEBUG("tmpPTOfn file: " << (const char *)m_currentPTOfn.mb_str(*wxConvCurrent)); + DEBUG_DEBUG("tmpPTOfn file: " << (const char *)m_currentPTOfn.mb_str(wxConvLocal)); // copy is not enough, need to adjust image path names... - ofstream script(m_currentPTOfn.mb_str(*wxConvCurrent)); + ofstream script(m_currentPTOfn.mb_str(*wxConvFileName)); PT::UIntSet all; if (pano.getNrOfImages() > 0) { fill_set(all, 0, pano.getNrOfImages()-1); @@ -169,12 +169,12 @@ wxLogError(_("Could not create temporary file")); return false; } - DEBUG_DEBUG("makefn file: " << (const char *)m_currentMakefn.mb_str(*wxConvCurrent)); - ofstream makeFileStream(m_currentMakefn.mb_str(*wxConvCurrent)); + DEBUG_DEBUG("makefn file: " << (const char *)m_currentMakefn.mb_str(wxConvLocal)); + ofstream makeFileStream(m_currentMakefn.mb_str(*wxConvFileName)); makeFile.Close(); - std::string resultFn(basename.mb_str(*wxConvCurrent)); - std::string tmpPTOfnC = (const char *) m_currentPTOfn.mb_str(*wxConvCurrent); + std::string resultFn(basename.mb_str(*wxConvFileName)); + std::string tmpPTOfnC = (const char *) m_currentPTOfn.mb_str(*wxConvFileName); std::vector<std::string> outputFiles; HuginBase::PanoramaMakefileExport::createMakefile(pano, Modified: hugin/trunk/src/hugin1/base_wx/huginConfig.cpp =================================================================== --- hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/base_wx/huginConfig.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -41,7 +41,7 @@ if (config->Read(name + wxT("/Custom"), 0l)) { wxString fn = config->Read(name + wxT("/Exe"),wxT("")); if (wxFileName::FileExists(fn)) { - pname = fn.mb_str(*wxConvCurrent); + pname = fn.mb_str(*wxConvFileName); return pname; } else { wxMessageBox(wxString::Format(_("External program %s not found as specified in preferences, reverting to bundled version"), file.c_str()), _("Error")); @@ -52,10 +52,10 @@ wxString exiftoolDirPath = MacGetPathToBundledResourceFile(CFSTR("ExifTool")); if(exiftoolDirPath != wxT("")) { - pname = (exiftoolDirPath+wxT("/")+file).mb_str(*wxConvCurrent); + pname = (exiftoolDirPath+wxT("/")+file).mb_str(*wxConvFileName); } else { wxMessageBox(wxString::Format(_("External program %s not found in the bundle, reverting to system path"), file.c_str()), _("Error")); - pname = file.mb_str(*wxConvCurrent); + pname = file.mb_str(*wxConvFileName); } return pname; } @@ -67,9 +67,9 @@ if(fn == wxT("")) { wxMessageBox(wxString::Format(_("External program %s not found in the bundle, reverting to system path"), file.c_str()), _("Error")); - pname = file.mb_str(*wxConvCurrent); + pname = file.mb_str(*wxConvFileName); } else { - pname = fn.mb_str(*wxConvCurrent); + pname = fn.mb_str(*wxConvFileName); } return pname; @@ -77,32 +77,32 @@ if (config->Read(name + wxT("/Custom"), 0l)) { wxString fn = config->Read(name + wxT("/Exe"),wxT("")); if (wxFileName::FileExists(fn)) { - pname = fn.mb_str(*wxConvCurrent); + pname = fn.mb_str(*wxConvFileName); } else { wxMessageBox(wxString::Format(_("External program %s not found as specified in preferences, reverting to bundled version"), file.c_str()), _("Error")); - pname = (bindir + wxT("\\") + file).mb_str(*wxConvCurrent); + pname = (bindir + wxT("\\") + file).mb_str(*wxConvFileName); } } else { - pname = (bindir + wxT("\\") + file).mb_str(*wxConvCurrent); + pname = (bindir + wxT("\\") + file).mb_str(*wxConvFileName); } return pname; #else // unix, never bundled if (config->Read(name + wxT("/Custom"), 0l)) { wxString fn = config->Read(name + wxT("/Exe"),wxT("")); - pname = fn.mb_str(*wxConvCurrent); + pname = fn.mb_str(*wxConvFileName); return pname; // TODO: need to search path, a simple FileExists() doesn't work as expected. /* if (wxFileName::FileExists(fn)) { - pname = fn.mb_str(*wxConvCurrent); + pname = fn.mb_str(*wxConvFileName); return pname; } else { wxMessageBox(wxString::Format(_("External program %s not found as specified in preferences, reverting to system path"), file.c_str()), _("Error")); } */ } - pname = file.mb_str(*wxConvCurrent); + pname = file.mb_str(*wxConvFileName); return pname; #endif } @@ -128,16 +128,16 @@ progs.PTroller= getProgram(config,bindir, wxT("PTroller"), wxT("PTroller")); progs.enblend = getProgram(config,bindir, wxT("enblend"), wxT("Enblend")); - progs.enblend_opts = config->Read(wxT("/Enblend/Args"), wxT(HUGIN_ENBLEND_ARGS)).mb_str(*wxConvCurrent); + progs.enblend_opts = config->Read(wxT("/Enblend/Args"), wxT(HUGIN_ENBLEND_ARGS)).mb_str(wxConvLocal); progs.enfuse = getProgram(config,bindir, wxT("enfuse"), wxT("Enfuse")); - progs.enfuse_opts = config->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(*wxConvCurrent); + progs.enfuse_opts = config->Read(wxT("/Enfuse/Args"), wxT(HUGIN_ENFUSE_ARGS)).mb_str(wxConvLocal); progs.exiftool = getProgram(config,bindir, wxT("exiftool"), wxT("Exiftool")); - progs.exiftool_opts = config->Read(wxT("/Exiftool/CopyArgs"), wxT(HUGIN_EXIFTOOL_COPY_ARGS)).mb_str(*wxConvCurrent); + progs.exiftool_opts = config->Read(wxT("/Exiftool/CopyArgs"), wxT(HUGIN_EXIFTOOL_COPY_ARGS)).mb_str(wxConvLocal); // smartblend (never bundled) - progs.smartblend = config->Read(wxT("/Smartblend/SmartblendExe"),wxT("smartblend.exe")).mb_str(*wxConvCurrent); - progs.smartblend_opts = config->Read(wxT("/Smartblend/SmartblendArgs"),wxT(HUGIN_SMARTBLEND_ARGS)).mb_str(*wxConvCurrent); + progs.smartblend = config->Read(wxT("/Smartblend/SmartblendExe"),wxT("smartblend.exe")).mb_str(*wxConvFileName); + progs.smartblend_opts = config->Read(wxT("/Smartblend/SmartblendArgs"),wxT(HUGIN_SMARTBLEND_ARGS)).mb_str(wxConvLocal); return progs; } Modified: hugin/trunk/src/hugin1/common/wxPlatform.h =================================================================== --- hugin/trunk/src/hugin1/common/wxPlatform.h 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/common/wxPlatform.h 2008-03-06 08:31:05 UTC (rev 2929) @@ -97,7 +97,7 @@ inline wxString doubleTowxString(double d, int digits=-1) { std::string t = doubleToString(d, digits); - return wxString(t.c_str(), *wxConvCurrent); + return wxString(t.c_str(), wxConvLocal); } } // namespace Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -684,7 +684,7 @@ // always change first lens wxString text = m_focalLengthText->GetValue(); - DEBUG_INFO("focal length: " << text.mb_str(*wxConvCurrent)); + DEBUG_INFO("focal length: " << text.mb_str(wxConvLocal)); double val; if (!str2double(text, val)) { return; @@ -712,7 +712,7 @@ void AssistantPanel::OnCropFactorChanged(wxCommandEvent & e) { wxString text = m_cropFactorText->GetValue(); - DEBUG_INFO("crop factor: " << text.mb_str(*wxConvCurrent)); + DEBUG_INFO("crop factor: " << text.mb_str(wxConvLocal)); double val; if (!str2double(text, val)) { return; Modified: hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/AutoCtrlPointCreator.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -221,10 +221,10 @@ std::map<int,int> imgMapping; long idx = autopanoArgs.Find(wxT("%namefile")) ; - DEBUG_DEBUG("find %namefile in '"<< autopanoArgs.mb_str(*wxConvCurrent) << "' returned: " << idx); + DEBUG_DEBUG("find %namefile in '"<< autopanoArgs.mb_str(wxConvLocal) << "' returned: " << idx); bool use_namefile = idx >=0; idx = autopanoArgs.Find(wxT("%i")); - DEBUG_DEBUG("find %i in '"<< autopanoArgs.mb_str(*wxConvCurrent) << "' returned: " << idx); + DEBUG_DEBUG("find %i in '"<< autopanoArgs.mb_str(wxConvLocal) << "' returned: " << idx); bool use_params = idx >=0; if (use_namefile && use_params) { wxMessageBox(_("Please use either %namefile or %i in the autopano-sift command line."), @@ -242,14 +242,14 @@ if (use_namefile) { // create temporary file with image names. namefile_name = wxFileName::CreateTempFileName(wxT("ap_imgnames"), &namefile); - DEBUG_DEBUG("before replace %namefile: " << autopanoArgs.mb_str(*wxConvCurrent)); + DEBUG_DEBUG("before replace %namefile: " << autopanoArgs.mb_str(wxConvLocal)); autopanoArgs.Replace(wxT("%namefile"), namefile_name); - DEBUG_DEBUG("after replace %namefile: " << autopanoArgs.mb_str(*wxConvCurrent)); + DEBUG_DEBUG("after replace %namefile: " << autopanoArgs.mb_str(wxConvLocal)); int imgNr=0; for(UIntSet::const_iterator it = imgs.begin(); it != imgs.end(); it++) { imgMapping[imgNr] = *it; - namefile.Write(wxString(pano.getImage(*it).getFilename().c_str(), *wxConvCurrent)); + namefile.Write(wxString(pano.getImage(*it).getFilename().c_str(), *wxConvFileName)); namefile.Write(wxT("\r\n")); imgNr++; } @@ -266,7 +266,7 @@ imgFiles.append(" ").append(quoteFilename(pano.getImage(*it).getFilename())); imgNr++; } - autopanoArgs.Replace(wxT("%i"), wxString (imgFiles.c_str(), *wxConvCurrent)); + autopanoArgs.Replace(wxT("%i"), wxString (imgFiles.c_str(), *wxConvFileName)); } #ifdef __WXMSW__ @@ -279,7 +279,7 @@ #endif wxString cmd = autopanoExe + wxT(" ") + autopanoArgs; - DEBUG_DEBUG("Executing: " << autopanoExe.mb_str(*wxConvCurrent) << " " << autopanoArgs.mb_str(*wxConvCurrent)); + DEBUG_DEBUG("Executing: " << autopanoExe.mb_str(wxConvLocal) << " " << autopanoArgs.mb_str(wxConvLocal)); int ret = 0; @@ -304,7 +304,7 @@ } // read and update control points - cps = readUpdatedControlPoints((const char *)ptofile.mb_str(*wxConvCurrent), pano); + cps = readUpdatedControlPoints((const char *)ptofile.mb_str(*wxConvFileName), pano); #ifdef __WXMSW__ // set old cwd. @@ -369,7 +369,7 @@ tmp.Printf(wxT("%d"), (int) firstImg.getProjection()); autopanoArgs.Replace(wxT("%f"), tmp); - autopanoArgs.Replace(wxT("%i"), wxString (imgFiles.c_str(), *wxConvCurrent)); + autopanoArgs.Replace(wxT("%i"), wxString (imgFiles.c_str(), *wxConvFileName)); wxString tempdir = ptofn.GetPath(); autopanoArgs.Replace(wxT("%d"), ptofn.GetPath()); @@ -411,7 +411,7 @@ return cps; } // read and update control points - cps = readUpdatedControlPoints((const char *)ptofile.mb_str(*wxConvCurrent), pano); + cps = readUpdatedControlPoints((const char *)ptofile.mb_str(*wxConvFileName), pano); if (!wxRemoveFile(ptofile)) { DEBUG_DEBUG("could not remove temporary file: " << ptofile.c_str()); Modified: hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/CPEditorPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -745,7 +745,7 @@ sWidth, corrPoint); } catch (std::exception & e) { - wxMessageBox(wxString (e.what(), *wxConvCurrent), _("Error during Fine-tune")); + wxMessageBox(wxString (e.what(), wxConvLocal), _("Error during Fine-tune")); } if (! corrOk) { // just set point, PointFineTune already complained @@ -868,7 +868,7 @@ sWidth, corrRes); } catch (std::exception & e) { - wxMessageBox(wxString (e.what(), *wxConvCurrent), _("Error during Fine-tune")); + wxMessageBox(wxString (e.what(), wxConvLocal), _("Error during Fine-tune")); } if (! corrOk) { @@ -1267,7 +1267,7 @@ #ifdef HUGIN_CP_IMG_CHOICE for (unsigned int i=0; i < ((nrTabs < nrImages)? nrTabs: nrImages); i++) { - wxFileName fileName(wxString (pano.getImage(i).getFilename().c_str(), *wxConvCurrent)); + wxFileName fileName(wxString (pano.getImage(i).getFilename().c_str(), *wxConvFileName)); m_leftChoice->SetString(i, wxString::Format(wxT("%2d"), i) + wxT(". - ") + fileName.GetFullName()); m_rightChoice->SetString(i, wxString::Format(wxT("%2d"), i) + wxT(". - ") + fileName.GetFullName()); } @@ -1289,7 +1289,7 @@ if (nrTabs < nrImages) { for (unsigned int i=nrTabs; i < nrImages; i++) { #ifdef HUGIN_CP_IMG_CHOICE - wxFileName fileName(wxString (pano.getImage(i).getFilename().c_str(), *wxConvCurrent)); + wxFileName fileName(wxString (pano.getImage(i).getFilename().c_str(), *wxConvFileName)); m_leftChoice->Append(wxString::Format(wxT("%2d"), i) + wxT(". - ") + fileName.GetFullName()); m_rightChoice->Append(wxString::Format(wxT("%2d"), i) + wxT(". - ") + fileName.GetFullName()); #endif @@ -1871,7 +1871,7 @@ new wxAddCtrlPointGridCmd(*m_pano, m_leftImageNr, m_rightImageNr, scale, th) ); } catch (std::exception & e) { - wxLogError(_("Error during control point creation:\n") + wxString(e.what(), *wxConvCurrent)); + wxLogError(_("Error during control point creation:\n") + wxString(e.what(), wxConvLocal)); } } else { e.Skip(); Modified: hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/HFOVDialog.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -69,7 +69,7 @@ DEBUG_ASSERT(m_okButton); // fill fields - wxString fn(srcImg.getFilename().c_str(), *wxConvCurrent); + wxString fn(srcImg.getFilename().c_str(), *wxConvFileName); wxString message; message.Printf(_("No or only partial information about field of view was found in image file\n%s\n\nPlease enter the the horizontal field of view (HFOV) or the focal length and crop factor."), fn.c_str()); XRCCTRL(*this, "lensdlg_message", wxStaticText)->SetLabel(message); @@ -123,8 +123,8 @@ void HFOVDialog::OnHFOVChanged(wxCommandEvent & e) { wxString text = m_hfovText->GetValue(); - DEBUG_DEBUG("state: " << m_HFOVStr.mb_str(*wxConvCurrent) << ", change:" << text.mb_str(*wxConvCurrent)); - DEBUG_DEBUG("cmd str: " << e.GetString().mb_str(*wxConvCurrent)); + DEBUG_DEBUG("state: " << m_HFOVStr.mb_str(wxConvLocal) << ", change:" << text.mb_str(wxConvLocal)); + DEBUG_DEBUG("cmd str: " << e.GetString().mb_str(wxConvLocal)); if (text.empty()) { // ignore all empty hfov changes return; @@ -178,7 +178,7 @@ void HFOVDialog::OnFocalLengthChanged(wxCommandEvent & e) { wxString text = m_focalLengthText->GetValue(); - DEBUG_DEBUG(m_focalLengthStr.mb_str(*wxConvCurrent) << " => " << text.mb_str(*wxConvCurrent)); + DEBUG_DEBUG(m_focalLengthStr.mb_str(wxConvLocal) << " => " << text.mb_str(wxConvLocal)); // ignore changes caused by ourself if (m_focalLengthText->GetValue() == m_focalLengthStr) { DEBUG_DEBUG("ignore focal length change"); @@ -221,7 +221,7 @@ { // ignore changesd cause by ourself wxString text = m_cropText->GetValue(); - DEBUG_DEBUG(m_cropFactorStr.mb_str(*wxConvCurrent) << " => " << text.mb_str(*wxConvCurrent)); + DEBUG_DEBUG(m_cropFactorStr.mb_str(wxConvLocal) << " => " << text.mb_str(wxConvLocal)); if (text == m_cropFactorStr) { DEBUG_DEBUG("ignore crop change"); return; Modified: hugin/trunk/src/hugin1/hugin/ImagesList.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesList.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/ImagesList.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -358,7 +358,7 @@ DEBUG_DEBUG("update image list item " << imgNr); DEBUG_ASSERT((int)imgNr < GetItemCount()); const PanoImage & img = pano->getImage(imgNr); - wxFileName fn(wxString (img.getFilename().c_str(), *wxConvCurrent)); + wxFileName fn(wxString (img.getFilename().c_str(), *wxConvFileName)); VariableMap var = pano->getImageVariables(imgNr); // wxLogMessage(wxString::Format(_("updating image list item %d, filename %s"),imgNr, fn.GetFullName())); @@ -376,7 +376,7 @@ if (pano->getOptions().colorReferenceImage == imgNr) { flags[1]='C'; } - SetItem(imgNr,7, wxString(flags, *wxConvCurrent)); + SetItem(imgNr,7, wxString(flags, wxConvLocal)); // urgh.. slow.. stupid.. traverse control point list for each image.. const CPVector & cps = pano->getCtrlPoints(); int nCP=0; @@ -476,7 +476,7 @@ void ImagesListLens::UpdateItem(unsigned int imgNr) { const PanoImage & img = pano->getImage(imgNr); - wxFileName fn(wxString (img.getFilename().c_str(), *wxConvCurrent)); + wxFileName fn(wxString (img.getFilename().c_str(), *wxConvFileName)); SetItem(imgNr, 1, fn.GetFullName() ); SetItem(imgNr, 2, wxString::Format(wxT("%d"),img.getLensNr())); @@ -579,7 +579,7 @@ void ImagesListCrop::UpdateItem(unsigned int imgNr) { const PanoImage & img = pano->getImage(imgNr); - wxFileName fn(wxString (img.getFilename().c_str(), *wxConvCurrent)); + wxFileName fn(wxString (img.getFilename().c_str(), *wxConvFileName)); wxString cropstr(wxT("-")); if ( img.getOptions().docrop ) { Modified: hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/ImagesPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -457,13 +457,13 @@ std::string val; val = doubleToString(const_map_get(vars,"y").getValue(),m_degDigits); - XRCCTRL(*this, "images_text_yaw", wxTextCtrl) ->SetValue(wxString(val.c_str(), *wxConvCurrent)); + XRCCTRL(*this, "images_text_yaw", 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(), *wxConvCurrent)); + XRCCTRL(*this, "images_text_pitch", 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(), *wxConvCurrent)); + XRCCTRL(*this, "images_text_roll", wxTextCtrl) ->SetValue(wxString(val.c_str(), wxConvLocal)); ShowImage(imgNr); } Modified: hugin/trunk/src/hugin1/hugin/LensPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -306,7 +306,7 @@ { ndigits = m_pixelDigits; } - m_XRCCTRL(*this, wxString(wxT("lens_val_")).append(wxString(*varname, *wxConvCurrent)), wxTextCtrl)->SetValue( + m_XRCCTRL(*this, wxString(wxT("lens_val_")).append(wxString(*varname, wxConvLocal)), wxTextCtrl)->SetValue( doubleTowxString(const_map_get(imgvars,*varname).getValue(),ndigits)); bool linked = const_map_get(lens.variables, *varname).isLinked(); @@ -315,10 +315,10 @@ m_XRCCTRL(*this, wxT("lens_inherit_R"), wxCheckBox)->SetValue(linked); } else if ((*varname)[0] == 'V') { if ((*varname)[1] == 'b' || (*varname)[1] == 'x') { - m_XRCCTRL(*this, wxString(wxT("lens_inherit_")).append(wxString(*varname, *wxConvCurrent)), wxCheckBox)->SetValue(linked); + m_XRCCTRL(*this, wxString(wxT("lens_inherit_")).append(wxString(*varname, wxConvLocal)), wxCheckBox)->SetValue(linked); } } else { - m_XRCCTRL(*this, wxString(wxT("lens_inherit_")).append(wxString(*varname, *wxConvCurrent)), wxCheckBox)->SetValue(linked); + m_XRCCTRL(*this, wxString(wxT("lens_inherit_")).append(wxString(*varname, wxConvLocal)), wxCheckBox)->SetValue(linked); } } @@ -448,7 +448,7 @@ DEBUG_TRACE (""); if (m_selectedImages.size() > 0) { wxString text=XRCCTRL(*this,"lens_val_flFactor",wxTextCtrl)->GetValue(); - DEBUG_INFO("focal length factor: " << text.mb_str(*wxConvCurrent)); + DEBUG_INFO("focal length factor: " << text.mb_str(wxConvLocal)); double val; if (!str2double(text, val)) { return; @@ -533,7 +533,7 @@ } wxString ctrl_name(wxT("lens_val_")); - ctrl_name.append(wxString(varname.c_str(), *wxConvCurrent)); + ctrl_name.append(wxString(varname.c_str(), wxConvLocal)); double val; wxString text = m_XRCCTRL(*this, ctrl_name, wxTextCtrl)->GetValue(); DEBUG_DEBUG("setting variable " << varname << " to " << text); @@ -810,7 +810,7 @@ { unsigned int imgNr = *it; // check file extension - wxFileName file(wxString(pano->getImage(imgNr).getFilename().c_str(), *wxConvCurrent)); + wxFileName file(wxString(pano->getImage(imgNr).getFilename().c_str(), *wxConvFileName)); #ifndef HUGIN_USE_EXIV2 if (file.GetExt().CmpNoCase(wxT("jpg")) == 0 || file.GetExt().CmpNoCase(wxT("jpeg")) == 0 ) @@ -881,7 +881,7 @@ const char ** varname = Lens::variableNames; while (*varname) { wxString key(wxT("Lens/")); - key.append(wxString(*varname, *wxConvCurrent)); + key.append(wxString(*varname, wxConvLocal)); cfg.Write(key, const_map_get(vars,*varname).getValue()); key.append(wxT("_link")); cfg.Write(key, const_map_get(lens.variables,*varname).isLinked() ? 1:0); @@ -891,7 +891,7 @@ ImageOptions imgopts = pano->getImage(imgNr).getOptions(); cfg.Write(wxT("Lens/vigCorrMode"), imgopts.m_vigCorrMode); cfg.Write(wxT("Lens/flatfield"), - wxString(imgopts.m_flatfield.c_str(), *wxConvCurrent) ); + wxString(imgopts.m_flatfield.c_str(), *wxConvFileName) ); cfg.Write(wxT("Lens/crop/enabled"), imgopts.docrop ? 1l : 0l); cfg.Write(wxT("Lens/crop/autoCenter"), imgopts.autoCenterCrop ? 1l : 0l); @@ -901,7 +901,7 @@ cfg.Write(wxT("Lens/crop/bottom"), imgopts.cropRect.bottom()); // try to read the exif data and add that to the lens ini file - wxFileName file(wxString(pano->getImage(imgNr).getFilename().c_str(), *wxConvCurrent)); + wxFileName file(wxString(pano->getImage(imgNr).getFilename().c_str(), *wxConvFileName)); if (file.GetExt().CmpNoCase(wxT("jpg")) == 0 || file.GetExt().CmpNoCase(wxT("jpeg")) == 0 ) { @@ -924,8 +924,8 @@ } // write exif data to ini file - cfg.Write(wxT("EXIF/CameraMake"), wxString(exif.CameraMake, *wxConvCurrent)); - cfg.Write(wxT("EXIF/CameraModel"), wxString(exif.CameraModel, *wxConvCurrent)); + cfg.Write(wxT("EXIF/CameraMake"), wxString(exif.CameraMake, wxConvLocal)); + cfg.Write(wxT("EXIF/CameraModel"), wxString(exif.CameraModel, wxConvLocal)); cfg.Write(wxT("EXIF/FocalLength"), (double) exif.FocalLength); cfg.Write(wxT("EXIF/Aperture"), (double) exif.ApertureFNumber); cfg.Write(wxT("EXIF/ISO"), exif.ISOequivalent); @@ -1028,7 +1028,7 @@ const char ** varname = Lens::variableNames; while (*varname) { wxString key(wxT("Lens/")); - key.append(wxString(*varname, *wxConvCurrent)); + key.append(wxString(*varname, wxConvLocal)); d = 0; if (cfg.Read(key,&d)) { // only set value if variabe was found in the script @@ -1049,7 +1049,7 @@ wxString flatfield; bool readok = cfg.Read(wxT("Lens/flatfield"), &flatfield); if (readok) { - imgopts.m_flatfield = std::string((const char *)flatfield.mb_str(*wxConvCurrent)); + imgopts.m_flatfield = std::string((const char *)flatfield.mb_str(*wxConvFileName)); } // TODO: crop parameters Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -117,7 +117,7 @@ file.GetExt().CmpNoCase(wxT("hdr")) == 0 || file.GetExt().CmpNoCase(wxT("viff")) == 0 ) { - filesv.push_back((const char *)filenames[i].mb_str(*wxConvCurrent)); + filesv.push_back((const char *)filenames[i].mb_str(*wxConvFileName)); } } GlobalCmdHist::getInstance().addCommand( @@ -498,9 +498,9 @@ scriptName = m_filename; } else { // the project file is just a PTOptimizer script... - std::string path = getPathPrefix(std::string(scriptName.GetFullPath().mb_str())); + std::string path = getPathPrefix(std::string(scriptName.GetFullPath().mb_str(*wxConvFileName))); DEBUG_DEBUG("stripping " << path << " from image filenames"); - std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvCurrent)); + std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvFileName)); PT::OptimizeVector optvec = opt_panel->getOptimizeVector(); PT::UIntSet all; if (pano.getNrOfImages() > 0) { @@ -515,14 +515,14 @@ #endif if (createMakefile && pano.getNrOfImages() > 0) { wxString makefn = scriptName.GetFullPath() + wxT(".mk"); - std::ofstream makefile(makefn.mb_str(*wxConvCurrent)); + std::ofstream makefile(makefn.mb_str(*wxConvFileName)); wxString ptoFnWX = scriptName.GetFullPath(); - std::string ptoFn(ptoFnWX.mb_str(*wxConvCurrent)); + std::string ptoFn(ptoFnWX.mb_str(*wxConvFileName)); wxString bindir = huginApp::Get()->GetUtilsBinDir(); PTPrograms progs = getPTProgramsConfig(bindir, wxConfigBase::Get()); std::string resultFn; wxString resultFnwx = scriptName.GetFullPath(); - resultFn = resultFnwx.mb_str(*wxConvCurrent); + resultFn = resultFnwx.mb_str(*wxConvFileName); resultFn = utils::stripPath(utils::stripExtension(resultFn)); std::vector<std::string> outputFiles; @@ -540,7 +540,7 @@ this->SetTitle(scriptName.GetName() + wxT(".") + scriptName.GetExt() + wxT(" - hugin")); pano.clearDirty(); } catch (std::exception & e) { - wxString err(e.what(), *wxConvCurrent); + wxString err(e.what(), wxConvLocal); wxMessageBox(err, wxT("Exception during saving project file")); } } @@ -599,7 +599,7 @@ if (pano.getNrOfImages() > 0) { fill_set(all, 0, pano.getNrOfImages()-1); } - std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvCurrent)); + std::ofstream script(scriptName.GetFullPath().mb_str(*wxConvFileName)); pano.printStitcherScript(script, pano.getOptions(), all); script.close(); } @@ -621,11 +621,11 @@ // get the global config object wxConfigBase* config = wxConfigBase::Get(); - std::ifstream file((const char *)filename.mb_str(*wxConvCurrent)); + std::ifstream file((const char *)filename.mb_str(*wxConvFileName)); if (file.good()) { wxBusyCursor wait; GlobalCmdHist::getInstance().addCommand( - new wxLoadPTProjectCmd(pano,file, (const char *)path.mb_str(*wxConvCurrent)) + new wxLoadPTProjectCmd(pano,file, (const char *)path.mb_str(*wxConvFileName)) ); DEBUG_DEBUG("project contains " << pano.getNrOfImages() << " after load"); opt_panel->setOptimizeVector(pano.getOptimizeVector()); @@ -745,7 +745,7 @@ dlg.SetFilterIndex(1); else if (img_ext == wxT("all files")) dlg.SetFilterIndex(2); - DEBUG_INFO ( "Image extention: " << img_ext.mb_str(*wxConvCurrent) ) + DEBUG_INFO ( "Image extention: " << img_ext.mb_str(wxConvLocal) ) // call the file dialog if (dlg.ShowModal() == wxID_OK) { @@ -760,7 +760,7 @@ std::vector<std::string> filesv; for (unsigned int i=0; i< Pathnames.GetCount(); i++) { - filesv.push_back((const char *)Pathnames[i].mb_str(*wxConvCurrent)); + filesv.push_back((const char *)Pathnames[i].mb_str(*wxConvFileName)); } // we got some images to add. @@ -772,7 +772,7 @@ new wxAddImagesCmd(pano,filesv) ); } - DEBUG_INFO ( wxString::Format(wxT("img_ext: %d"), dlg.GetFilterIndex()).mb_str(*wxConvCurrent) ) + DEBUG_INFO ( wxString::Format(wxT("img_ext: %d"), dlg.GetFilterIndex()).mb_str(wxConvLocal) ) // save the image extension switch ( dlg.GetFilterIndex() ) { case 0: config->Write(wxT("lastImageType"), wxT("all images")); break; @@ -851,14 +851,14 @@ { --images; - // Get the filename. Naively assumes there are no Unicode issues. + // Get the filename. const PanoImage& image = pano.getImage(images); std::string filename = image.getFilename(); - wxString file(filename.c_str(), *wxConvCurrent); + wxString file(filename.c_str(), *wxConvFileName); preloaded[file] = 1; // Glob for all files of same type in same directory. - wxString name(filename.c_str(), *wxConvCurrent); + wxString name(filename.c_str(), *wxConvFileName); wxString path = ::wxPathOnly(name) + wxT("/*"); file = ::wxFindFirstFile(path); while (!file.IsEmpty()) @@ -879,10 +879,10 @@ { wxString file = found->first; // Check the time if it's got a camera EXIF timestamp. - time_t stamp = ReadJpegTime(file.mb_str(*wxConvCurrent)); + time_t stamp = ReadJpegTime(file.mb_str(*wxConvFileName)); if (stamp) { filenames[file] = stamp; - timeMap[(const char *)file.mb_str(*wxConvCurrent)] = stamp; + timeMap[(const char *)file.mb_str(*wxConvFileName)] = stamp; } } @@ -911,7 +911,7 @@ --images; const PanoImage& image = pano.getImage(images); std::string filename = image.getFilename(); - wxString file(filename.c_str(), *wxConvCurrent); + wxString file(filename.c_str(), *wxConvFileName); if (file == recruit) continue; @@ -920,8 +920,8 @@ if (abs((int)(pledge - stamp)) < maxtimediff) { // Load this file, and remember it. - DEBUG_TRACE("Recruited " << recruit.mb_str(*wxConvCurrent)); - std::string file = (const char *)recruit.mb_str(*wxConvCurrent); + DEBUG_TRACE("Recruited " << recruit.mb_str(wxConvLocal)); + std::string file = (const char *)recruit.mb_str(*wxConvFileName); filesv.push_back(file); // Don't recruit it again. filenames[recruit] = 0; @@ -971,13 +971,13 @@ #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(*wxConvCurrent)); + DEBUG_INFO("Lang Code: " << langCode.mb_str(wxConvLocal)); if(langCode != wxString(wxT("en"))) { strFile = GetXRCPath() + wxT("data/about_") + langCode + wxT(".htm"); if(wxFile::Exists(strFile)) { - DEBUG_TRACE("Using About: " << strFile.mb_str(*wxConvCurrent)); + DEBUG_TRACE("Using About: " << strFile.mb_str(wxConvLocal)); XRCCTRL(dlg,"about_html",wxHtmlWindow)->LoadPage(strFile); } } @@ -1021,12 +1021,12 @@ #else // find base filename wxString helpFile = wxT("help_") + huginApp::Get()->GetLocale().GetCanonicalName() + wxT("/hugin.hhp"); - DEBUG_INFO("help file candidate: " << helpFile.mb_str(*wxConvCurrent)); + DEBUG_INFO("help file candidate: " << helpFile.mb_str(wxConvLocal)); //if the language is not default, load custom About file (if exists) wxString strFile = GetXRCPath() + wxT("data/") + helpFile; if(wxFile::Exists(strFile)) { - DEBUG_TRACE("Using About: " << strFile.mb_str(*wxConvCurrent)); + DEBUG_TRACE("Using About: " << strFile.mb_str(wxConvLocal)); } else { // try default strFile = GetXRCPath() + wxT("data/help_en_EN/hugin.hhp"); @@ -1038,7 +1038,7 @@ wxLogError(wxString::Format(wxT("Could not open help file: %s"), strFile.c_str())); return; } - DEBUG_INFO("help file: " << strFile.mb_str(*wxConvCurrent)); + DEBUG_INFO("help file: " << strFile.mb_str(wxConvLocal)); m_help = new wxHtmlHelpController(); m_help->AddBook(strFile); } @@ -1060,7 +1060,7 @@ DEBUG_INFO("Tip index: " << nValue); strFile = GetXRCPath() + wxT("data/tips.txt"); //load default file - DEBUG_INFO("Reading tips from " << strFile.mb_str(*wxConvCurrent)); + DEBUG_INFO("Reading tips from " << strFile.mb_str(wxConvLocal)); wxTipProvider *tipProvider = new LocalizedFileTipProvider(strFile, nValue); bShowAtStartup = wxShowTip(this, tipProvider); @@ -1150,7 +1150,7 @@ wxString filename = dlg.GetPath(); wxConfig::Get()->Write(wxT("/templatePath"), dlg.GetDirectory()); // remember for later - std::ifstream file((const char *)filename.mb_str(*wxConvCurrent)); + std::ifstream file((const char *)filename.mb_str(*wxConvFileName)); GlobalCmdHist::getInstance().addCommand( new wxApplyTemplateCmd(pano, file)); @@ -1195,7 +1195,7 @@ { MyProgressDialog pdisp(_("Fine-tuning all points"), wxT(""), NULL, wxPD_ELAPSED_TIME | wxPD_AUTO_HIDE | wxPD_APP_MODAL ); - pdisp.pushTask(ProgressTask((const char *)wxString(_("Finetuning")).mb_str(*wxConvCurrent),"",1.0/unoptimized.size())); + pdisp.pushTask(ProgressTask((const char *)wxString(_("Finetuning")).mb_str(wxConvLocal),"",1.0/unoptimized.size())); ImageCache & imgCache = ImageCache::getInstance(); @@ -1335,12 +1335,12 @@ wxString cMsg; if (it->getProgress() > 0) { cMsg.Printf(wxT("%s %s [%3.0f%%]"), - wxString(it->getShortMessage().c_str(), *wxConvCurrent).c_str(), - wxString(it->getMessage().c_str(), *wxConvCurrent).c_str(), + wxString(it->getShortMessage().c_str(), wxConvLocal).c_str(), + wxString(it->getMessage().c_str(), wxConvLocal).c_str(), 100 * it->getProgress()); } else { - cMsg.Printf(wxT("%s %s"),wxString(it->getShortMessage().c_str(), *wxConvCurrent).c_str(), - wxString(it->getMessage().c_str(), *wxConvCurrent).c_str()); + cMsg.Printf(wxT("%s %s"),wxString(it->getShortMessage().c_str(), wxConvLocal).c_str(), + wxString(it->getMessage().c_str(), wxConvLocal).c_str()); } // append to main message if (it == tasks.rbegin()) { @@ -1351,7 +1351,7 @@ } } wxStatusBar *m_statbar = GetStatusBar(); - DEBUG_TRACE("Statusmb : " << msg.mb_str(*wxConvCurrent)); + DEBUG_TRACE("Statusmb : " << msg.mb_str(wxConvLocal)); m_statbar->SetStatusText(msg,0); #ifdef __WXMSW__ @@ -1451,7 +1451,7 @@ bool MainFrame::increaseProgress(double delta, const std::string & msg) { m_progress += delta; - m_progressMsg = wxString(msg.c_str(), *wxConvCurrent); + m_progressMsg = wxString(msg.c_str(), wxConvLocal); return displayProgress(); } @@ -1459,7 +1459,7 @@ void MainFrame::setMessage(const std::string & msg) { - m_progressMsg = wxString(msg.c_str(), *wxConvCurrent); + m_progressMsg = wxString(msg.c_str(), wxConvLocal); } bool MainFrame::displayProgress() Modified: hugin/trunk/src/hugin1/hugin/NonaStitcherPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/NonaStitcherPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/NonaStitcherPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -327,7 +327,7 @@ wxICON_ERROR | wxOK); return false; } catch (std::exception & e) { - wxMessageBox(wxString(e.what(), *wxConvCurrent), + wxMessageBox(wxString(e.what(), wxConvLocal), _("Error during stitching"), wxICON_ERROR | wxOK); return false; @@ -336,7 +336,7 @@ wxString outpath; wxString outname; wxString output; - wxFileName::SplitPath(wxString(opts.outfile.c_str(), *wxConvCurrent), &outpath, &outname, NULL); + wxFileName::SplitPath(wxString(opts.outfile.c_str(), wxConvLocal), &outpath, &outname, NULL); output = outpath + wxFileName::GetPathSeparator() + outname; if (enblend) { wxConfigBase* config = wxConfigBase::Get(); Modified: hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/PTStitcherPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -290,7 +290,7 @@ GlobalCmdHist::getInstance().addCommand( new PT::SetPanoOptionsCmd( pano, opt ) ); - DEBUG_DEBUG ("Interpolator changed to: " << Ip.mb_str(*wxConvCurrent) ) + DEBUG_DEBUG ("Interpolator changed to: " << Ip.mb_str(wxConvLocal) ) } @@ -349,7 +349,7 @@ new PT::SetPanoOptionsCmd( pano, opt ) ); - DEBUG_INFO(text.mb_str(*wxConvCurrent) <<" with: " << refImage); + DEBUG_INFO(text.mb_str(wxConvLocal) <<" with: " << refImage); } @@ -545,7 +545,7 @@ // start PTStitcher process - std::ofstream scriptfile(PTScriptFile.mb_str(*wxConvCurrent)); + std::ofstream scriptfile(PTScriptFile.mb_str(*wxConvFileName)); if (!scriptfile.good()) { DEBUG_FATAL("could not open/create PTScript file"); } Modified: hugin/trunk/src/hugin1/hugin/PanoDruid.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoDruid.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/PanoDruid.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -333,7 +333,7 @@ if (!sm_advice[hint]) continue; DEBUG_INFO( "checking hint " << hint - << " named \"" << sm_advice[hint]->name.mb_str(*wxConvCurrent) << "\"" ); + << " named \"" << sm_advice[hint]->name.mb_str(wxConvLocal) << "\"" ); if (sm_advice[hint]->applies(pano, opts)) break; } @@ -342,7 +342,7 @@ return; DEBUG_INFO( "PanoDruid::Update() found \"" - << sm_advice[hint]->name.mb_str(*wxConvCurrent) << "\"" ); + << sm_advice[hint]->name.mb_str(wxConvLocal) << "\"" ); // set the controls to contain the appropriate text if (m_advice != hint) Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -307,9 +307,9 @@ std::string val; val = doubleToString(opt.getHFOV(),1); - m_HFOVText->SetValue(wxString(val.c_str(), *wxConvCurrent)); + m_HFOVText->SetValue(wxString(val.c_str(), wxConvLocal)); val = doubleToString(opt.getVFOV(),1); - m_VFOVText->SetValue(wxString(val.c_str(), *wxConvCurrent)); + m_VFOVText->SetValue(wxString(val.c_str(), wxConvLocal)); // disable VFOV edit field, due to bugs in setHeight(), setWidth() m_VFOVText->Enable(m_keepViewOnResize); @@ -353,7 +353,7 @@ i = 1; m_FileFormatPanelJPEG->Show(); m_FileFormatPanelTIFF->Hide(); - m_FileFormatJPEGQualityText->SetValue(wxString(opt.outputImageTypeCompression.c_str(), *wxConvCurrent)); + m_FileFormatJPEGQualityText->SetValue(wxString(opt.outputImageTypeCompression.c_str(), wxConvLocal)); } else if (opt.outputImageType == "png") { m_FileFormatPanelJPEG->Hide(); m_FileFormatPanelTIFF->Hide(); @@ -416,7 +416,7 @@ wxString text = m_HFOVText->GetValue(); - DEBUG_INFO ("HFOV = " << text.mb_str(*wxConvCurrent) ); + DEBUG_INFO ("HFOV = " << text.mb_str(wxConvLocal) ); if (text == wxT("")) { return; } @@ -447,7 +447,7 @@ PanoramaOptions opt = pano->getOptions(); wxString text = m_VFOVText->GetValue(); - DEBUG_INFO ("VFOV = " << text.mb_str(*wxConvCurrent) ); + DEBUG_INFO ("VFOV = " << text.mb_str(wxConvLocal) ); if (text == wxT("")) { return; } @@ -737,7 +737,7 @@ } else { wxString quoted = utils::wxQuoteFilename(wxfn); args.Replace(wxT("%f"), quoted); - quoted = utils::wxQuoteFilename(wxString(pano->getImage(0).getFilename().c_str(), *wxConvCurrent)); + quoted = utils::wxQuoteFilename(wxString(pano->getImage(0).getFilename().c_str(), *wxConvFileName)); args.Replace(wxT("%i"), quoted); wxString cmdline = utils::wxQuoteFilename(editor) + wxT(" ") + args; Modified: hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/PreferencesDialog.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -356,7 +356,7 @@ void PreferencesDialog::OnPTDetails(wxCommandEvent & e) { - DEBUG_INFO("Panotools Details Requested:\n" << m_PTDetails.mb_str(*wxConvCurrent)); + DEBUG_INFO("Panotools Details Requested:\n" << m_PTDetails.mb_str(wxConvLocal)); wxDialog dlg(this, -1, _("Panotools details"), wxDefaultPosition, wxDefaultSize, wxCAPTION|wxCLOSE_BOX|wxRESIZE_BORDER ); wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); @@ -476,7 +476,7 @@ { if((pfQFString) (PTVERSION_NAME_FILEVERSION, sResult, sizeof(sResult)/sizeof(sResult[0]) )) { - m_PTVersion = wxString(sResult, *wxConvCurrent); + m_PTVersion = wxString(sResult, wxConvLocal); } if((pfQFString) (PTVERSION_NAME_COMMENT, sResult, sizeof(sResult)/sizeof(sResult[0]) )) @@ -856,12 +856,12 @@ cfg->Write(wxT("/Finetune/LocalSearchWidth"), MY_G_SPIN_VAL("prefs_ft_LocalSearchWidth")); wxString t = MY_G_STR_VAL("prefs_ft_CorrThreshold"); double td= HUGIN_FT_CORR_THRESHOLD; - utils::stringToDouble(std::string(t.mb_str(*wxConvCurrent)), td); + utils::stringToDouble(std::string(t.mb_str(wxConvLocal)), td); cfg->Write(wxT("/Finetune/CorrThreshold"), td); t = MY_G_STR_VAL("prefs_ft_CurvThreshold"); td = HUGIN_FT_CURV_THRESHOLD; - utils::stringToDouble(std::string(t.mb_str(*wxConvCurrent)), td); + utils::stringToDouble(std::string(t.mb_str(wxConvLocal)), td); cfg->Write(wxT("/Finetune/CurvThreshold"), td); cfg->Write(wxT("/Finetune/RotationSearch"), MY_G_BOOL_VAL("prefs_ft_RotationSearch")); @@ -879,8 +879,8 @@ // locale // language wxChoice *lang = XRCCTRL(*this, "prefs_gui_language", wxChoice); - // DEBUG_TRACE("Language Selection Name: " << huginApp::Get()->GetLocale().GetLanguageName((int) lang->GetClientData(lang->GetSelection())).mb_str(*wxConvCurrent)); - //DEBUG_INFO("Language Selection locale: " << ((huginApp::Get()->GetLocale().GetLanguageInfo((int) lang->GetClientData(lang->GetSelection())))->CanonicalName).mb_str(*wxConvCurrent)); + // DEBUG_TRACE("Language Selection Name: " << huginApp::Get()->GetLocale().GetLanguageName((int) lang->GetClientData(lang->GetSelection())).mb_str(wxConvLocal)); + //DEBUG_INFO("Language Selection locale: " << ((huginApp::Get()->GetLocale().GetLanguageInfo((int) lang->GetClientData(lang->GetSelection())))->CanonicalName).mb_str(wxConvLocal)); //DEBUG_INFO("Current System Language ID: " << huginApp::Get()->GetLocale().GetSystemLanguage()); void * tmplp = lang->GetClientData(lang->GetSelection()); Modified: hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp 2008-03-04 18:31:09 UTC (rev 2928) +++ hugin/trunk/src/hugin1/hugin/PreviewFrame.cpp 2008-03-06 08:31:05 UTC (rev 2929) @@ -449,7 +449,7 @@ m_incExposureBut->Show(); */ } - m_exposureTextCtrl->SetValue(wxString(doubleToString(opts.outputExposureValue,2).c_str(), *wxConvCurrent)); + m_exposureTextCtrl->SetValue(wxString(doubleToString(opts.outputExposureValue,2).c_str(), wxConvLocal)); // TODO: enable display of parameters and set their limits, if projection has some. #ifdef HasPANO13 @@ -485,8 +485,8 @@ std::vector<double> params = opts.getProjectionParameters(); assert((int) params.size() == nParam); for (int i=0; i < nParam; i++) { - wxString val = wxString(doubleToString(params[i],1).c_str(), *wxConvCurrent); - m_projParamTextCtrl[i]->SetValue(wxString(val.c_str(), *wxConvCurrent)); + wxString val = wxString(doubleToString(params[i],1).c_str(), wxConvLocal); + m_projParamTextCtrl[i]->SetValue(wxString(val.c_str(), wxConvLocal)); m_projParamSlider[i]->SetValue(utils::roundi(params[i])); } } @@ -541,7 +541,7 @@ ID_TOGGLE_BUT + *it, wxString::Format(wxT("%d"),*it)); #endif - wxFileName tFilename(wxString (pano.getImage(imgNr).getFilename().c_str(), *wxConvCurrent)); + wxFileName tFilename(wxString (pano.getImage(imgNr).getFilename().c_str(), *wxConvFileName)); but->SetToolTip(tFilename.GetFullName()); wxSize sz = but->GetSize(); // but->SetSize(res.GetWidth(),sz.GetHeight()); @@ -735,7 +735,7 @@ if (e.GetEventObject() == m_exposureTextCtrl) { // exposure wxString text = m_exposureTextCtrl->GetValue(); - DEBUG_INFO ("target exposure = " << text.mb_str(*wxConvCurrent) ); + DEBUG_INFO ("target exposure = " << text.mb_str(wxConvLocal) ); double p = 0; if (text != wxT("")) { if (!str2double(text, p)) { @@ -751,7 +751,7 @@ for (int i = 0; i < nParam; i++) { if (e.GetEventObject() == m_projParamTextCtrl[i]) { wxString text = m_projParamTextCtrl[i]->GetValue(); - DEBUG_INFO ("param " << i << ": = " << text.mb_str(*wxConvCurrent) ); + DEBUG_INFO ("param " << i << ": = " << text.mb_str(wxConvLocal) ); double p = 0; if (text != wxT("")) { if (!str2double(text, p)) { @@ -903,12 +903,12 @@ wxString cMsg; if (it->getProgress() > 0) { cMsg.Printf(wxT("%s [%3.0f%%]: %s "), - wxString(it->getShort... [truncated message content] |
From: <da...@us...> - 2008-03-14 08:50:15
|
Revision: 2947 http://hugin.svn.sourceforge.net/hugin/?rev=2947&view=rev Author: dangelo Date: 2008-03-14 01:50:14 -0700 (Fri, 14 Mar 2008) Log Message: ----------- Moved matchpoint into main hugin tree. Fixed crash when computing the descriptors. Modified Paths: -------------- hugin/trunk/src/CMakeLists.txt hugin/trunk/src/matchpoint/CMakeLists.txt hugin/trunk/src/matchpoint/Descriptor.cpp hugin/trunk/src/matchpoint/MatchPoint.cpp Added Paths: ----------- hugin/trunk/src/matchpoint/ hugin/trunk/src/matchpoint/edgedetection.hxx Removed Paths: ------------- gsoc07_featuredetection/ Modified: hugin/trunk/src/CMakeLists.txt =================================================================== --- hugin/trunk/src/CMakeLists.txt 2008-03-13 18:24:34 UTC (rev 2946) +++ hugin/trunk/src/CMakeLists.txt 2008-03-14 08:50:14 UTC (rev 2947) @@ -23,6 +23,7 @@ add_subdirectory(foreign) add_subdirectory(hugin_base) add_subdirectory(tools) +add_subdirectory(matchpoint) add_subdirectory(deghosting) # build vips stuff, only if vips was found Copied: hugin/trunk/src/matchpoint (from rev 2945, gsoc07_featuredetection) Modified: hugin/trunk/src/matchpoint/CMakeLists.txt =================================================================== --- gsoc07_featuredetection/CMakeLists.txt 2008-03-12 18:43:05 UTC (rev 2945) +++ hugin/trunk/src/matchpoint/CMakeLists.txt 2008-03-14 08:50:14 UTC (rev 2947) @@ -1,25 +1,10 @@ -PROJECT(MatchPoint) - -#if you don't want the full compiler output, remove the following line -#SET(CMAKE_VERBOSE_MAKEFILE ON) - -# check for opencv -#FIND_PATH(OPENCV_INCLUDE_DIR cv.h PATH_SUFFIXES opencv) -#INCLUDE_DIRECTORIES(${OPENCV_INCLUDE_DIR}) - -#add definitions, compiler switches, etc. -ADD_DEFINITIONS(-Wall -O2 -g) - #list all source files here -ADD_EXECUTABLE(MatchPoint MatchPoint.cpp APImage.cpp HessianDetector.cpp Descriptor.cpp edgedetection.hxx) +ADD_EXECUTABLE(matchpoint MatchPoint.cpp APImage.cpp HessianDetector.cpp Descriptor.cpp) #need to link to some other libraries ? just add them here -TARGET_LINK_LIBRARIES(MatchPoint /usr/lib/libvigraimpex.so png jpeg tiff) - -#list all source files here -#ADD_EXECUTABLE(MatchPoint.cpp APImage.cpp HessianDetector.cpp Descriptor.cpp FeatureMatcher.cpp) -#ADD_EXECUTABLE(matchpoint APImage.cpp HessianDetector.cpp Descriptor.cpp) -#need to link to some other libraries ? just add them here -#TARGET_LINK_LIBRARIES(FeatureMatching highgui cv cxcore png jpeg) -#TARGET_LINK_LIBRARIES(/usr/lib/libvigraimpex.so png jpeg tiff) +TARGET_LINK_LIBRARIES(matchpoint ${image_libs}) +# matchpoint is not ready for general use yet +# +#install(TARGETS matchpoint +# DESTINATION ${BINDIR}) Modified: hugin/trunk/src/matchpoint/Descriptor.cpp =================================================================== --- gsoc07_featuredetection/Descriptor.cpp 2008-03-12 18:43:05 UTC (rev 2945) +++ hugin/trunk/src/matchpoint/Descriptor.cpp 2008-03-14 08:50:14 UTC (rev 2947) @@ -653,6 +653,12 @@ int yStart=(interestPoint[1]-regionSize); int yEnd=(interestPoint[1]+regionSize); + // only analyse pixels in image + int xStartImg = xStart < 0 ? 0 : xStart; + int xEndImg = xEnd >= this->image->getWidthBW() ? this->image->getWidthBW() -1 : xEnd; + int yStartImg = yStart < 0 ? 0 : yStart; + int yEndImg = yEnd >= this->image->getHeightBW() ? this->image->getHeightBW() -1 : yEnd; + /* double result; result = atan (gy/gx) * 180 / PI; @@ -676,8 +682,8 @@ iPointRelative[1]=regionSize; // find edgels at scale of the interest point - vigra::cannyEdgelList(srcIterRange( this->image->imgBW->upperLeft() + vigra::Diff2D(xStart, yStart), - this->image->imgBW->upperLeft() + vigra::Diff2D(xEnd, yEnd)), + vigra::cannyEdgelList(srcIterRange( this->image->imgBW->upperLeft() + vigra::Diff2D(xStartImg, yStartImg), + this->image->imgBW->upperLeft() + vigra::Diff2D(xEndImg, yEndImg)), edgels, this->_getMaxima(interestPoint[0], interestPoint[1]),iPointRelative); /*this->image->_cannyEdgelList1(srcIterRange( this->image->imgBW->upperLeft() + vigra::Diff2D(xStart, yStart), this->image->imgBW->upperLeft() + vigra::Diff2D(xEnd, yEnd)), @@ -703,7 +709,8 @@ edgePoint=*iter2; //TODO discard edgels that are not in circle - double distance=_euclidianDistance(interestPoint[0],interestPoint[1],edgePoint.x+xStart, edgePoint.y+yStart); + double distance=_euclidianDistance(interestPoint[0],interestPoint[1],edgePoint.x+xStartImg, edgePoint.y+yStartImg); + if(distance>regionSize) { iter2++; continue; } Modified: hugin/trunk/src/matchpoint/MatchPoint.cpp =================================================================== --- gsoc07_featuredetection/MatchPoint.cpp 2008-03-12 18:43:05 UTC (rev 2945) +++ hugin/trunk/src/matchpoint/MatchPoint.cpp 2008-03-14 08:50:14 UTC (rev 2947) @@ -83,7 +83,7 @@ verbose = true; break; case 't': - testFileOutput=true; + testFileOutput=true; break; /*case 'o': output = optarg; @@ -141,11 +141,12 @@ d1.createDescriptors(); if(testFileOutput) { - string testOutputPath = input1.append(".key"); - if (verbose) cerr << "Generating output file for matlab test suite: " <<testOutputPath << endl; - d1.printDescriptors(testOutputPath); //for matlab test suite +// string testOutputPath = input1.append(".key"); + if (verbose) cerr << "Generating output file for matlab test suite: " << output << endl; + d1.printDescriptors(output); //for matlab test suite + } else { + d1.generateAutopanoXML(output); } - d1.generateAutopanoXML(output); return EXIT_SUCCESS; } Copied: hugin/trunk/src/matchpoint/edgedetection.hxx (from rev 2946, gsoc07_featuredetection/edgedetection.hxx) =================================================================== --- hugin/trunk/src/matchpoint/edgedetection.hxx (rev 0) +++ hugin/trunk/src/matchpoint/edgedetection.hxx 2008-03-14 08:50:14 UTC (rev 2947) @@ -0,0 +1,2181 @@ +/************************************************************************/ +/* */ +/* Copyright 1998-2002 by Ullrich Koethe */ +/* Cognitive Systems Group, University of Hamburg, Germany */ +/* */ +/* This file is part of the VIGRA computer vision library. */ +/* ( Version 1.5.0, Dec 07 2006 ) */ +/* The VIGRA Website is */ +/* http://kogs-www.informatik.uni-hamburg.de/~koethe/vigra/ */ +/* Please direct questions, bug reports, and contributions to */ +/* ko...@in... or */ +/* vi...@ko... */ +/* */ +/* Permission is hereby granted, free of charge, to any person */ +/* obtaining a copy of this software and associated documentation */ +/* files (the "Software"), to deal in the Software without */ +/* restriction, including without limitation the rights to use, */ +/* copy, modify, merge, publish, distribute, sublicense, and/or */ +/* sell copies of the Software, and to permit persons to whom the */ +/* Software is furnished to do so, subject to the following */ +/* conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the */ +/* Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES */ +/* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND */ +/* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT */ +/* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, */ +/* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING */ +/* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR */ +/* OTHER DEALINGS IN THE SOFTWARE. */ +/* */ +/************************************************************************/ + + +#ifndef VIGRA_EDGEDETECTION_HXX +#define VIGRA_EDGEDETECTION_HXX + +#include <vector> +#include <queue> +#include <cmath> // sqrt(), abs() +#include "vigra/utilities.hxx" +#include "vigra/numerictraits.hxx" +#include "vigra/stdimage.hxx" +#include "vigra/stdimagefunctions.hxx" +#include "vigra/recursiveconvolution.hxx" +#include "vigra/separableconvolution.hxx" +#include "vigra/labelimage.hxx" +#include "vigra/mathutil.hxx" +#include "vigra/pixelneighborhood.hxx" +#include "vigra/linear_solve.hxx" + + +namespace vigra { + +/** \addtogroup EdgeDetection Edge Detection + Edge detectors based on first and second derivatives, + and related post-processing. +*/ +//@{ + +/********************************************************/ +/* */ +/* differenceOfExponentialEdgeImage */ +/* */ +/********************************************************/ + +/** \brief Detect and mark edges in an edge image using the Shen/Castan zero-crossing detector. + + This operator applies an exponential filter to the source image + at the given <TT>scale</TT> and subtracts the result from the original image. + Zero crossings are detected in the resulting difference image. Whenever the + gradient at a zero crossing is greater than the given <TT>gradient_threshold</TT>, + an edge point is marked (using <TT>edge_marker</TT>) in the destination image on + the darker side of the zero crossing (note that zero crossings occur + <i>between</i> pixels). For example: + + \code + sign of difference image resulting edge points (*) + + + - - * * . + + + - => . * * + + + + . . . + \endcode + + Non-edge pixels (<TT>.</TT>) remain untouched in the destination image. + The result can be improved by the post-processing operation \ref removeShortEdges(). + A more accurate edge placement can be achieved with the function + \ref differenceOfExponentialCrackEdgeImage(). + + The source value type + (<TT>SrcAccessor::value_type</TT>) must be a linear algebra, i.e. addition, + subtraction and multiplication of the type with itself, and multiplication + with double and + \ref NumericTraits "NumericTraits" must + be defined. In addition, this type must be less-comparable. + + <b> Declarations:</b> + + pass arguments explicitly: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, + class DestValue = DestAccessor::value_type> + void differenceOfExponentialEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + DestIterator dul, DestAccessor da, + double scale, GradValue gradient_threshold, + DestValue edge_marker = NumericTraits<DestValue>::one()) + } + \endcode + + use argument objects in conjunction with \ref ArgumentObjectFactories: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, + class DestValue = DestAccessor::value_type> + inline + void differenceOfExponentialEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + pair<DestIterator, DestAccessor> dest, + double scale, GradValue gradient_threshold, + DestValue edge_marker = NumericTraits<DestValue>::one()) + } + \endcode + + <b> Usage:</b> + + <b>\#include</b> "<a href="edgedetection_8hxx-source.html">vigra/edgedetection.hxx</a>"<br> + Namespace: vigra + + \code + vigra::BImage src(w,h), edges(w,h); + + // empty edge image + edges = 0; + ... + + // find edges at scale 0.8 with gradient larger than 4.0, mark with 1 + vigra::differenceOfExponentialEdgeImage(srcImageRange(src), destImage(edges), + 0.8, 4.0, 1); + \endcode + + <b> Required Interface:</b> + + \code + SrcImageIterator src_upperleft, src_lowerright; + DestImageIterator dest_upperleft; + + SrcAccessor src_accessor; + DestAccessor dest_accessor; + + SrcAccessor::value_type u = src_accessor(src_upperleft); + double d; + GradValue gradient_threshold; + + u = u + u + u = u - u + u = u * u + u = d * u + u < gradient_threshold + + DestValue edge_marker; + dest_accessor.set(edge_marker, dest_upperleft); + \endcode + + <b> Preconditions:</b> + + \code + scale > 0 + gradient_threshold > 0 + \endcode +*/ +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> +void differenceOfExponentialEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + DestIterator dul, DestAccessor da, + double scale, GradValue gradient_threshold, DestValue edge_marker) +{ + vigra_precondition(scale > 0, + "differenceOfExponentialEdgeImage(): scale > 0 required."); + + vigra_precondition(gradient_threshold > 0, + "differenceOfExponentialEdgeImage(): " + "gradient_threshold > 0 required."); + + int w = slr.x - sul.x; + int h = slr.y - sul.y; + int x,y; + + typedef typename + NumericTraits<typename SrcAccessor::value_type>::RealPromote + TMPTYPE; + typedef BasicImage<TMPTYPE> TMPIMG; + + TMPIMG tmp(w,h); + TMPIMG smooth(w,h); + + recursiveSmoothX(srcIterRange(sul, slr, sa), destImage(tmp), scale / 2.0); + recursiveSmoothY(srcImageRange(tmp), destImage(tmp), scale / 2.0); + + recursiveSmoothX(srcImageRange(tmp), destImage(smooth), scale); + recursiveSmoothY(srcImageRange(smooth), destImage(smooth), scale); + + typename TMPIMG::Iterator iy = smooth.upperLeft(); + typename TMPIMG::Iterator ty = tmp.upperLeft(); + DestIterator dy = dul; + + static const Diff2D right(1, 0); + static const Diff2D bottom(0, 1); + + + TMPTYPE thresh = (gradient_threshold * gradient_threshold) * + NumericTraits<TMPTYPE>::one(); + TMPTYPE zero = NumericTraits<TMPTYPE>::zero(); + + for(y=0; y<h-1; ++y, ++iy.y, ++ty.y, ++dy.y) + { + typename TMPIMG::Iterator ix = iy; + typename TMPIMG::Iterator tx = ty; + DestIterator dx = dy; + + for(x=0; x<w-1; ++x, ++ix.x, ++tx.x, ++dx.x) + { + TMPTYPE diff = *tx - *ix; + TMPTYPE gx = tx[right] - *tx; + TMPTYPE gy = tx[bottom] - *tx; + + if((gx * gx > thresh) && + (diff * (tx[right] - ix[right]) < zero)) + { + if(gx < zero) + { + da.set(edge_marker, dx, right); + } + else + { + da.set(edge_marker, dx); + } + } + if(((gy * gy > thresh) && + (diff * (tx[bottom] - ix[bottom]) < zero))) + { + if(gy < zero) + { + da.set(edge_marker, dx, bottom); + } + else + { + da.set(edge_marker, dx); + } + } + } + } + + typename TMPIMG::Iterator ix = iy; + typename TMPIMG::Iterator tx = ty; + DestIterator dx = dy; + + for(x=0; x<w-1; ++x, ++ix.x, ++tx.x, ++dx.x) + { + TMPTYPE diff = *tx - *ix; + TMPTYPE gx = tx[right] - *tx; + + if((gx * gx > thresh) && + (diff * (tx[right] - ix[right]) < zero)) + { + if(gx < zero) + { + da.set(edge_marker, dx, right); + } + else + { + da.set(edge_marker, dx); + } + } + } +} + +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue> +inline +void differenceOfExponentialEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + DestIterator dul, DestAccessor da, + double scale, GradValue gradient_threshold) +{ + differenceOfExponentialEdgeImage(sul, slr, sa, dul, da, + scale, gradient_threshold, 1); +} + +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> +inline +void differenceOfExponentialEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + pair<DestIterator, DestAccessor> dest, + double scale, GradValue gradient_threshold, + DestValue edge_marker) +{ + differenceOfExponentialEdgeImage(src.first, src.second, src.third, + dest.first, dest.second, + scale, gradient_threshold, + edge_marker); +} + +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue> +inline +void differenceOfExponentialEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + pair<DestIterator, DestAccessor> dest, + double scale, GradValue gradient_threshold) +{ + differenceOfExponentialEdgeImage(src.first, src.second, src.third, + dest.first, dest.second, + scale, gradient_threshold, 1); +} + +/********************************************************/ +/* */ +/* differenceOfExponentialCrackEdgeImage */ +/* */ +/********************************************************/ + +/** \brief Detect and mark edges in a crack edge image using the Shen/Castan zero-crossing detector. + + This operator applies an exponential filter to the source image + at the given <TT>scale</TT> and subtracts the result from the original image. + Zero crossings are detected in the resulting difference image. Whenever the + gradient at a zero crossing is greater than the given <TT>gradient_threshold</TT>, + an edge point is marked (using <TT>edge_marker</TT>) in the destination image + <i>between</i> the corresponding original pixels. Topologically, this means we + must insert additional pixels between the original ones to represent the + boundaries between the pixels (the so called zero- and one-cells, with the original + pixels being two-cells). Within VIGRA, such an image is called \ref CrackEdgeImage. + To allow insertion of the zero- and one-cells, the destination image must have twice the + size of the original (precisely, <TT>(2*w-1)</TT> by <TT>(2*h-1)</TT> pixels). Then the algorithm + proceeds as follows: + + \code +sign of difference image insert zero- and one-cells resulting edge points (*) + + + . - . - . * . . . + + - - . . . . . . * * * . + + + - => + . + . - => . . . * . + + + + . . . . . . . . * * + + . + . + . . . . . + \endcode + + Thus the edge points are marked where they actually are - in between the pixels. + An important property of the resulting edge image is that it conforms to the notion + of well-composedness as defined by Latecki et al., i.e. connected regions and edges + obtained by a subsequent \ref Labeling do not depend on + whether 4- or 8-connectivity is used. + The non-edge pixels (<TT>.</TT>) in the destination image remain unchanged. + The result conformes to the requirements of a \ref CrackEdgeImage. It can be further + improved by the post-processing operations \ref removeShortEdges() and + \ref closeGapsInCrackEdgeImage(). + + The source value type (<TT>SrcAccessor::value_type</TT>) must be a linear algebra, i.e. addition, + subtraction and multiplication of the type with itself, and multiplication + with double and + \ref NumericTraits "NumericTraits" must + be defined. In addition, this type must be less-comparable. + + <b> Declarations:</b> + + pass arguments explicitly: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, + class DestValue = DestAccessor::value_type> + void differenceOfExponentialCrackEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + DestIterator dul, DestAccessor da, + double scale, GradValue gradient_threshold, + DestValue edge_marker = NumericTraits<DestValue>::one()) + } + \endcode + + use argument objects in conjunction with \ref ArgumentObjectFactories: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, + class DestValue = DestAccessor::value_type> + inline + void differenceOfExponentialCrackEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + pair<DestIterator, DestAccessor> dest, + double scale, GradValue gradient_threshold, + DestValue edge_marker = NumericTraits<DestValue>::one()) + } + \endcode + + <b> Usage:</b> + + <b>\#include</b> "<a href="edgedetection_8hxx-source.html">vigra/edgedetection.hxx</a>"<br> + Namespace: vigra + + \code + vigra::BImage src(w,h), edges(2*w-1,2*h-1); + + // empty edge image + edges = 0; + ... + + // find edges at scale 0.8 with gradient larger than 4.0, mark with 1 + vigra::differenceOfExponentialCrackEdgeImage(srcImageRange(src), destImage(edges), + 0.8, 4.0, 1); + \endcode + + <b> Required Interface:</b> + + \code + SrcImageIterator src_upperleft, src_lowerright; + DestImageIterator dest_upperleft; + + SrcAccessor src_accessor; + DestAccessor dest_accessor; + + SrcAccessor::value_type u = src_accessor(src_upperleft); + double d; + GradValue gradient_threshold; + + u = u + u + u = u - u + u = u * u + u = d * u + u < gradient_threshold + + DestValue edge_marker; + dest_accessor.set(edge_marker, dest_upperleft); + \endcode + + <b> Preconditions:</b> + + \code + scale > 0 + gradient_threshold > 0 + \endcode + + The destination image must have twice the size of the source: + \code + w_dest = 2 * w_src - 1 + h_dest = 2 * h_src - 1 + \endcode +*/ +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> +void differenceOfExponentialCrackEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + DestIterator dul, DestAccessor da, + double scale, GradValue gradient_threshold, + DestValue edge_marker) +{ + vigra_precondition(scale > 0, + "differenceOfExponentialCrackEdgeImage(): scale > 0 required."); + + vigra_precondition(gradient_threshold > 0, + "differenceOfExponentialCrackEdgeImage(): " + "gradient_threshold > 0 required."); + + int w = slr.x - sul.x; + int h = slr.y - sul.y; + int x, y; + + typedef typename + NumericTraits<typename SrcAccessor::value_type>::RealPromote + TMPTYPE; + typedef BasicImage<TMPTYPE> TMPIMG; + + TMPIMG tmp(w,h); + TMPIMG smooth(w,h); + + TMPTYPE zero = NumericTraits<TMPTYPE>::zero(); + + static const Diff2D right(1,0); + static const Diff2D bottom(0,1); + static const Diff2D left(-1,0); + static const Diff2D top(0,-1); + + recursiveSmoothX(srcIterRange(sul, slr, sa), destImage(tmp), scale / 2.0); + recursiveSmoothY(srcImageRange(tmp), destImage(tmp), scale / 2.0); + + recursiveSmoothX(srcImageRange(tmp), destImage(smooth), scale); + recursiveSmoothY(srcImageRange(smooth), destImage(smooth), scale); + + typename TMPIMG::Iterator iy = smooth.upperLeft(); + typename TMPIMG::Iterator ty = tmp.upperLeft(); + DestIterator dy = dul; + + TMPTYPE thresh = (gradient_threshold * gradient_threshold) * + NumericTraits<TMPTYPE>::one(); + + // find zero crossings above threshold + for(y=0; y<h-1; ++y, ++iy.y, ++ty.y, dy.y+=2) + { + typename TMPIMG::Iterator ix = iy; + typename TMPIMG::Iterator tx = ty; + DestIterator dx = dy; + + for(int x=0; x<w-1; ++x, ++ix.x, ++tx.x, dx.x+=2) + { + TMPTYPE diff = *tx - *ix; + TMPTYPE gx = tx[right] - *tx; + TMPTYPE gy = tx[bottom] - *tx; + + if((gx * gx > thresh) && + (diff * (tx[right] - ix[right]) < zero)) + { + da.set(edge_marker, dx, right); + } + if((gy * gy > thresh) && + (diff * (tx[bottom] - ix[bottom]) < zero)) + { + da.set(edge_marker, dx, bottom); + } + } + + TMPTYPE diff = *tx - *ix; + TMPTYPE gy = tx[bottom] - *tx; + + if((gy * gy > thresh) && + (diff * (tx[bottom] - ix[bottom]) < zero)) + { + da.set(edge_marker, dx, bottom); + } + } + + typename TMPIMG::Iterator ix = iy; + typename TMPIMG::Iterator tx = ty; + DestIterator dx = dy; + + for(x=0; x<w-1; ++x, ++ix.x, ++tx.x, dx.x+=2) + { + TMPTYPE diff = *tx - *ix; + TMPTYPE gx = tx[right] - *tx; + + if((gx * gx > thresh) && + (diff * (tx[right] - ix[right]) < zero)) + { + da.set(edge_marker, dx, right); + } + } + + iy = smooth.upperLeft() + Diff2D(0,1); + ty = tmp.upperLeft() + Diff2D(0,1); + dy = dul + Diff2D(1,2); + + static const Diff2D topleft(-1,-1); + static const Diff2D topright(1,-1); + static const Diff2D bottomleft(-1,1); + static const Diff2D bottomright(1,1); + + // find missing 1-cells below threshold (x-direction) + for(y=0; y<h-2; ++y, ++iy.y, ++ty.y, dy.y+=2) + { + typename TMPIMG::Iterator ix = iy; + typename TMPIMG::Iterator tx = ty; + DestIterator dx = dy; + + for(int x=0; x<w-2; ++x, ++ix.x, ++tx.x, dx.x+=2) + { + if(da(dx) == edge_marker) continue; + + TMPTYPE diff = *tx - *ix; + + if((diff * (tx[right] - ix[right]) < zero) && + (((da(dx, bottomright) == edge_marker) && + (da(dx, topleft) == edge_marker)) || + ((da(dx, bottomleft) == edge_marker) && + (da(dx, topright) == edge_marker)))) + + { + da.set(edge_marker, dx); + } + } + } + + iy = smooth.upperLeft() + Diff2D(1,0); + ty = tmp.upperLeft() + Diff2D(1,0); + dy = dul + Diff2D(2,1); + + // find missing 1-cells below threshold (y-direction) + for(y=0; y<h-2; ++y, ++iy.y, ++ty.y, dy.y+=2) + { + typename TMPIMG::Iterator ix = iy; + typename TMPIMG::Iterator tx = ty; + DestIterator dx = dy; + + for(int x=0; x<w-2; ++x, ++ix.x, ++tx.x, dx.x+=2) + { + if(da(dx) == edge_marker) continue; + + TMPTYPE diff = *tx - *ix; + + if((diff * (tx[bottom] - ix[bottom]) < zero) && + (((da(dx, bottomright) == edge_marker) && + (da(dx, topleft) == edge_marker)) || + ((da(dx, bottomleft) == edge_marker) && + (da(dx, topright) == edge_marker)))) + + { + da.set(edge_marker, dx); + } + } + } + + dy = dul + Diff2D(1,1); + + // find missing 0-cells + for(y=0; y<h-1; ++y, dy.y+=2) + { + DestIterator dx = dy; + + for(int x=0; x<w-1; ++x, dx.x+=2) + { + static const Diff2D dist[] = {right, top, left, bottom }; + + int i; + for(i=0; i<4; ++i) + { + if(da(dx, dist[i]) == edge_marker) break; + } + + if(i < 4) da.set(edge_marker, dx); + } + } +} + +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> +inline +void differenceOfExponentialCrackEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + pair<DestIterator, DestAccessor> dest, + double scale, GradValue gradient_threshold, + DestValue edge_marker) +{ + differenceOfExponentialCrackEdgeImage(src.first, src.second, src.third, + dest.first, dest.second, + scale, gradient_threshold, + edge_marker); +} + +/********************************************************/ +/* */ +/* removeShortEdges */ +/* */ +/********************************************************/ + +/** \brief Remove short edges from an edge image. + + This algorithm can be applied as a post-processing operation of + \ref differenceOfExponentialEdgeImage() and \ref differenceOfExponentialCrackEdgeImage(). + It removes all edges that are shorter than <TT>min_edge_length</TT>. The corresponding + pixels are set to the <TT>non_edge_marker</TT>. The idea behind this algorithms is + that very short edges are probably caused by noise and don't represent interesting + image structure. Technically, the algorithms executes a connected components labeling, + so the image's value type must be equality comparable. + + If the source image fulfills the requirements of a \ref CrackEdgeImage, + it will still do so after application of this algorithm. + + Note that this algorithm, unlike most other algorithms in VIGRA, operates in-place, + i.e. on only one image. Also, the algorithm assumes that all non-edges pixels are already + marked with the given <TT>non_edge_marker</TT> value. + + <b> Declarations:</b> + + pass arguments explicitly: + \code + namespace vigra { + template <class Iterator, class Accessor, class SrcValue> + void removeShortEdges( + Iterator sul, Iterator slr, Accessor sa, + int min_edge_length, SrcValue non_edge_marker) + } + \endcode + + use argument objects in conjunction with \ref ArgumentObjectFactories: + \code + namespace vigra { + template <class Iterator, class Accessor, class SrcValue> + inline + void removeShortEdges( + triple<Iterator, Iterator, Accessor> src, + int min_edge_length, SrcValue non_edge_marker) + } + \endcode + + <b> Usage:</b> + + <b>\#include</b> "<a href="edgedetection_8hxx-source.html">vigra/edgedetection.hxx</a>"<br> + Namespace: vigra + + \code + vigra::BImage src(w,h), edges(w,h); + + // empty edge image + edges = 0; + ... + + // find edges at scale 0.8 with gradient larger than 4.0, mark with 1 + vigra::differenceOfExponentialEdgeImage(srcImageRange(src), destImage(edges), + 0.8, 4.0, 1); + + // zero edges shorter than 10 pixels + vigra::removeShortEdges(srcImageRange(edges), 10, 0); + \endcode + + <b> Required Interface:</b> + + \code + SrcImageIterator src_upperleft, src_lowerright; + DestImageIterator dest_upperleft; + + SrcAccessor src_accessor; + DestAccessor dest_accessor; + + SrcAccessor::value_type u = src_accessor(src_upperleft); + + u == u + + SrcValue non_edge_marker; + src_accessor.set(non_edge_marker, src_upperleft); + \endcode +*/ +template <class Iterator, class Accessor, class Value> +void removeShortEdges( + Iterator sul, Iterator slr, Accessor sa, + unsigned int min_edge_length, Value non_edge_marker) +{ + int w = slr.x - sul.x; + int h = slr.y - sul.y; + int x,y; + + IImage labels(w, h); + labels = 0; + + int number_of_regions = + labelImageWithBackground(srcIterRange(sul,slr,sa), + destImage(labels), true, non_edge_marker); + + ArrayOfRegionStatistics<FindROISize<int> > + region_stats(number_of_regions); + + inspectTwoImages(srcImageRange(labels), srcImage(labels), region_stats); + + IImage::Iterator ly = labels.upperLeft(); + Iterator oy = sul; + + for(y=0; y<h; ++y, ++oy.y, ++ly.y) + { + Iterator ox(oy); + IImage::Iterator lx(ly); + + for(x=0; x<w; ++x, ++ox.x, ++lx.x) + { + if(sa(ox) == non_edge_marker) continue; + if((region_stats[*lx].count) < min_edge_length) + { + sa.set(non_edge_marker, ox); + } + } + } +} + +template <class Iterator, class Accessor, class Value> +inline +void removeShortEdges( + triple<Iterator, Iterator, Accessor> src, + unsigned int min_edge_length, Value non_edge_marker) +{ + removeShortEdges(src.first, src.second, src.third, + min_edge_length, non_edge_marker); +} + +/********************************************************/ +/* */ +/* closeGapsInCrackEdgeImage */ +/* */ +/********************************************************/ + +/** \brief Close one-pixel wide gaps in a cell grid edge image. + + This algorithm is typically applied as a post-processing operation of + \ref differenceOfExponentialCrackEdgeImage(). The source image must fulfill + the requirements of a \ref CrackEdgeImage, and will still do so after + application of this algorithm. + + It closes one pixel wide gaps in the edges resulting from this algorithm. + Since these gaps are usually caused by zero crossing slightly below the gradient + threshold used in edge detection, this algorithms acts like a weak hysteresis + thresholding. The newly found edge pixels are marked with the given <TT>edge_marker</TT>. + The image's value type must be equality comparable. + + Note that this algorithm, unlike most other algorithms in VIGRA, operates in-place, + i.e. on only one image. + + <b> Declarations:</b> + + pass arguments explicitly: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, class SrcValue> + void closeGapsInCrackEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + SrcValue edge_marker) + } + \endcode + + use argument objects in conjunction with \ref ArgumentObjectFactories: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, class SrcValue> + inline + void closeGapsInCrackEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + SrcValue edge_marker) + } + \endcode + + <b> Usage:</b> + + <b>\#include</b> "<a href="edgedetection_8hxx-source.html">vigra/edgedetection.hxx</a>"<br> + Namespace: vigra + + \code + vigra::BImage src(w,h), edges(2*w-1, 2*h-1); + + // empty edge image + edges = 0; + ... + + // find edges at scale 0.8 with gradient larger than 4.0, mark with 1 + vigra::differenceOfExponentialCrackEdgeImage(srcImageRange(src), destImage(edges), + 0.8, 4.0, 1); + + // close gaps, mark with 1 + vigra::closeGapsInCrackEdgeImage(srcImageRange(edges), 1); + + // zero edges shorter than 20 pixels + vigra::removeShortEdges(srcImageRange(edges), 10, 0); + \endcode + + <b> Required Interface:</b> + + \code + SrcImageIterator src_upperleft, src_lowerright; + + SrcAccessor src_accessor; + DestAccessor dest_accessor; + + SrcAccessor::value_type u = src_accessor(src_upperleft); + + u == u + u != u + + SrcValue edge_marker; + src_accessor.set(edge_marker, src_upperleft); + \endcode +*/ +template <class SrcIterator, class SrcAccessor, class SrcValue> +void closeGapsInCrackEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + SrcValue edge_marker) +{ + int w = (slr.x - sul.x) / 2; + int h = (slr.y - sul.y) / 2; + int x, y; + + int count1, count2, count3; + + static const Diff2D right(1,0); + static const Diff2D bottom(0,1); + static const Diff2D left(-1,0); + static const Diff2D top(0,-1); + + static const Diff2D leftdist[] = { + Diff2D(0, 0), Diff2D(-1, 1), Diff2D(-2, 0), Diff2D(-1, -1)}; + static const Diff2D rightdist[] = { + Diff2D(2, 0), Diff2D(1, 1), Diff2D(0, 0), Diff2D(1, -1)}; + static const Diff2D topdist[] = { + Diff2D(1, -1), Diff2D(0, 0), Diff2D(-1, -1), Diff2D(0, -2)}; + static const Diff2D bottomdist[] = { + Diff2D(1, 1), Diff2D(0, 2), Diff2D(-1, 1), Diff2D(0, 0)}; + + int i; + + SrcIterator sy = sul + Diff2D(0,1); + SrcIterator sx; + + // close 1-pixel wide gaps (x-direction) + for(y=0; y<h; ++y, sy.y+=2) + { + sx = sy + Diff2D(2,0); + + for(x=2; x<w; ++x, sx.x+=2) + { + if(sa(sx) == edge_marker) continue; + + if(sa(sx, left) != edge_marker) continue; + if(sa(sx, right) != edge_marker) continue; + + count1 = 0; + count2 = 0; + count3 = 0; + + for(i=0; i<4; ++i) + { + if(sa(sx, leftdist[i]) == edge_marker) + { + ++count1; + count3 ^= 1 << i; + } + if(sa(sx, rightdist[i]) == edge_marker) + { + ++count2; + count3 ^= 1 << i; + } + } + + if(count1 <= 1 || count2 <= 1 || count3 == 15) + { + sa.set(edge_marker, sx); + } + } + } + + sy = sul + Diff2D(1,2); + + // close 1-pixel wide gaps (y-direction) + for(y=2; y<h; ++y, sy.y+=2) + { + sx = sy; + + for(x=0; x<w; ++x, sx.x+=2) + { + if(sa(sx) == edge_marker) continue; + + if(sa(sx, top) != edge_marker) continue; + if(sa(sx, bottom) != edge_marker) continue; + + count1 = 0; + count2 = 0; + count3 = 0; + + for(i=0; i<4; ++i) + { + if(sa(sx, topdist[i]) == edge_marker) + { + ++count1; + count3 ^= 1 << i; + } + if(sa(sx, bottomdist[i]) == edge_marker) + { + ++count2; + count3 ^= 1 << i; + } + } + + if(count1 <= 1 || count2 <= 1 || count3 == 15) + { + sa.set(edge_marker, sx); + } + } + } +} + +template <class SrcIterator, class SrcAccessor, class SrcValue> +inline +void closeGapsInCrackEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + SrcValue edge_marker) +{ + closeGapsInCrackEdgeImage(src.first, src.second, src.third, + edge_marker); +} + +/********************************************************/ +/* */ +/* beautifyCrackEdgeImage */ +/* */ +/********************************************************/ + +/** \brief Beautify crack edge image for visualization. + + This algorithm is applied as a post-processing operation of + \ref differenceOfExponentialCrackEdgeImage(). The source image must fulfill + the requirements of a \ref CrackEdgeImage, but will <b> not</b> do so after + application of this algorithm. In particular, the algorithm removes zero-cells + marked as edges to avoid staircase effects on diagonal lines like this: + + \code + original edge points (*) resulting edge points + + . * . . . . * . . . + . * * * . . . * . . + . . . * . => . . . * . + . . . * * . . . . * + . . . . . . . . . . + \endcode + + Therfore, this algorithm should only be applied as a vizualization aid, i.e. + for human inspection. The algorithm assumes that edges are marked with <TT>edge_marker</TT>, + and background pixels with <TT>background_marker</TT>. The image's value type must be + equality comparable. + + Note that this algorithm, unlike most other algorithms in VIGRA, operates in-place, + i.e. on only one image. + + <b> Declarations:</b> + + pass arguments explicitly: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, class SrcValue> + void beautifyCrackEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + SrcValue edge_marker, SrcValue background_marker) + } + \endcode + + use argument objects in conjunction with \ref ArgumentObjectFactories: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, class SrcValue> + inline + void beautifyCrackEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + SrcValue edge_marker, SrcValue background_marker) + } + \endcode + + <b> Usage:</b> + + <b>\#include</b> "<a href="edgedetection_8hxx-source.html">vigra/edgedetection.hxx</a>"<br> + Namespace: vigra + + \code + vigra::BImage src(w,h), edges(2*w-1, 2*h-1); + + // empty edge image + edges = 0; + ... + + // find edges at scale 0.8 with gradient larger than 4.0, mark with 1 + vigra::differenceOfExponentialCrackEdgeImage(srcImageRange(src), destImage(edges), + 0.8, 4.0, 1); + + // beautify edge image for visualization + vigra::beautifyCrackEdgeImage(destImageRange(edges), 1, 0); + + // show to the user + window.open(edges); + \endcode + + <b> Required Interface:</b> + + \code + SrcImageIterator src_upperleft, src_lowerright; + + SrcAccessor src_accessor; + DestAccessor dest_accessor; + + SrcAccessor::value_type u = src_accessor(src_upperleft); + + u == u + u != u + + SrcValue background_marker; + src_accessor.set(background_marker, src_upperleft); + \endcode +*/ +template <class SrcIterator, class SrcAccessor, class SrcValue> +void beautifyCrackEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + SrcValue edge_marker, SrcValue background_marker) +{ + int w = (slr.x - sul.x) / 2; + int h = (slr.y - sul.y) / 2; + int x, y; + + SrcIterator sy = sul + Diff2D(1,1); + SrcIterator sx; + + static const Diff2D right(1,0); + static const Diff2D bottom(0,1); + static const Diff2D left(-1,0); + static const Diff2D top(0,-1); + + // delete 0-cells at corners + for(y=0; y<h; ++y, sy.y+=2) + { + sx = sy; + + for(x=0; x<w; ++x, sx.x+=2) + { + if(sa(sx) != edge_marker) continue; + + if(sa(sx, right) == edge_marker && sa(sx, left) == edge_marker) continue; + if(sa(sx, bottom) == edge_marker && sa(sx, top) == edge_marker) continue; + + sa.set(background_marker, sx); + } + } +} + +template <class SrcIterator, class SrcAccessor, class SrcValue> +inline +void beautifyCrackEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + SrcValue edge_marker, SrcValue background_marker) +{ + beautifyCrackEdgeImage(src.first, src.second, src.third, + edge_marker, background_marker); +} + + +/** Helper class that stores edgel attributes. +*/ +class Edgel +{ + public: + /** The edgel's sub-pixel x coordinate. + */ + float x; + + /** The edgel's sub-pixel y coordinate. + */ + float y; + + /** The edgel's strength (magnitude of the gradient vector). + */ + float strength; + + /** + The edgel's orientation. This is the angle + between the x-axis and the edge, so that the bright side of the + edge is on the right. The angle is measured + counter-clockwise in radians like this: + + + \code + + edgel axis + \ (bright side) + (dark \ + side) \ /__ + \\ \ orientation angle + \ | + +------------> x-axis + | + | + | + | + y-axis V + \endcode + + So, for example a vertical edge with its dark side on the left + has orientation PI/2, and a horizontal edge with dark side on top + has orientation 0. Obviously, the edge's orientation changes + by PI if the contrast is reversed. + + */ + float orientation; + + Edgel() + : x(0.0f), y(0.0f), strength(0.0f), orientation(0.0f) + {} + + Edgel(float ix, float iy, float is, float io) + : x(ix), y(iy), strength(is), orientation(io) + {} +}; + +template <class Image1, class Image2, class BackInsertable> +void internalCannyFindEdgels(Image1 const & gx, + Image1 const & gy, + Image2 const & magnitude, + BackInsertable & edgels, std::vector<int> p) +{ + + typedef typename Image1::value_type PixelType; + double t = 0.5 / VIGRA_CSTD::sin(M_PI/8.0); + + //last element in edgel list is edgel that holds orientation + //of interest point + + //orientation assignment + std::vector<int > point= p; + + PixelType gradx = gx(p[0],p[1]); + PixelType grady = gy(p[0],p[1]); + + double orientation = VIGRA_CSTD::atan2(-grady, gradx) - M_PI * 1.5; + if(orientation < 0.0) + orientation += 2.0*M_PI; + Edgel edgel1; + edgel1.orientation=orientation; + edgels.push_back(edgel1); + //EOF orientation assignment + + for(int y=1; y<gx.height()-1; ++y) + { + for(int x=1; x<gx.width()-1; ++x) + { + gradx = gx(x,y); + grady = gy(x,y); + double mag = magnitude(x, y); + + int dx = (int)VIGRA_CSTD::floor(gradx*t/mag + 0.5); + int dy = (int)VIGRA_CSTD::floor(grady*t/mag + 0.5); + + int x1 = x - dx, + x2 = x + dx, + y1 = y - dy, + y2 = y + dy; + + PixelType m1 = magnitude(x1, y1); + PixelType m3 = magnitude(x2, y2); + + if(m1 < mag && m3 <= mag) + { + Edgel edgel; + + // local maximum => quadratic interpolation of sub-pixel location + PixelType del = (m1 - m3) / 2.0 / (m1 + m3 - 2.0*mag); + edgel.x = x + dx*del; + edgel.y = y + dy*del; + edgel.strength = mag; + orientation = VIGRA_CSTD::atan2(-grady, gradx) - M_PI * 1.5; + if(orientation < 0.0) + orientation += 2.0*M_PI; + edgel.orientation = orientation; + edgels.push_back(edgel); + } + } + } +} + +/********************************************************/ +/* */ +/* cannyEdgelList */ +/* */ +/********************************************************/ + +/** \brief Simple implementation of Canny's edge detector. + + This operator first calculates the gradient vector for each + pixel of the image using first derivatives of a Gaussian at the + given scale. Then a very simple non-maxima supression is performed: + for each 3x3 neighborhood, it is determined whether the center pixel has + larger gradient magnitude than its two neighbors in gradient direction + (where the direction is rounded into octands). If this is the case, + a new \ref Edgel is appended to the given vector of <TT>edgels</TT>. The subpixel + edgel position is determined by fitting a parabola + to the three gradient magnitude values + mentioned above. The sub-pixel location of the parabola's tip + and the gradient magnitude and direction are written in the newly created edgel. + + <b> Declarations:</b> + + pass arguments explicitly: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, class BackInsertable> + void cannyEdgelList(SrcIterator ul, SrcIterator lr, SrcAccessor src, + BackInsertable & edgels, double scale); + } + \endcode + + use argument objects in conjunction with \ref ArgumentObjectFactories: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, class BackInsertable> + void + cannyEdgelList(triple<SrcIterator, SrcIterator, SrcAccessor> src, + BackInsertable & edgels, double scale); + } + \endcode + + <b> Usage:</b> + + <b>\#include</b> "<a href="edgedetection_8hxx-source.html">vigra/edgedetection.hxx</a>"<br> + Namespace: vigra + + \code + vigra::BImage src(w,h); + + // empty edgel list + std::vector<vigra::Edgel> edgels; + ... + + // find edgels at scale 0.8 + vigra::cannyEdgelList(srcImageRange(src), edgels, 0.8); + \endcode + + <b> Required Interface:</b> + + \code + SrcImageIterator src_upperleft; + SrcAccessor src_accessor; + + src_accessor(src_upperleft); + + BackInsertable edgels; + edgels.push_back(Edgel()); + \endcode + + SrcAccessor::value_type must be a type convertible to float + + <b> Preconditions:</b> + + \code + scale > 0 + \endcode +*/ +template <class SrcIterator, class SrcAccessor, class BackInsertable> +void cannyEdgelList(SrcIterator ul, SrcIterator lr, SrcAccessor src, + BackInsertable & edgels, double scale, std::vector<int> p) +{ + int w = lr.x - ul.x; + int h = lr.y - ul.y; + + // calculate image gradients + typedef typename + NumericTraits<typename SrcAccessor::value_type>::RealPromote + TmpType; + + BasicImage<TmpType> tmp(w,h), dx(w,h), dy(w,h); + + Kernel1D<double> smooth, grad; + + smooth.initGaussian(scale); + grad.initGaussianDerivative(scale, 1); + + separableConvolveX(srcIterRange(ul, lr, src), destImage(tmp), kernel1d(grad)); + separableConvolveY(srcImageRange(tmp), destImage(dx), kernel1d(smooth)); + + separableConvolveY(srcIterRange(ul, lr, src), destImage(tmp), kernel1d(grad)); + separableConvolveX(srcImageRange(tmp), destImage(dy), kernel1d(smooth)); + + combineTwoImages(srcImageRange(dx), srcImage(dy), destImage(tmp), + MagnitudeFunctor<TmpType>()); + + + // find edgels + internalCannyFindEdgels(dx, dy, tmp, edgels, p); +} + +template <class SrcIterator, class SrcAccessor, class BackInsertable> +inline void +cannyEdgelList(triple<SrcIterator, SrcIterator, SrcAccessor> src, + BackInsertable & edgels, double scale, std::vector<int> p) +{ + cannyEdgelList(src.first, src.second, src.third, edgels, scale,p); +} + +/********************************************************/ +/* */ +/* cannyEdgeImage */ +/* */ +/********************************************************/ + +/** \brief Detect and mark edges in an edge image using Canny's algorithm. + + This operator first calls \ref cannyEdgelList() to generate an + edgel list for the given image. Then it scans this list and selects edgels + whose strength is above the given <TT>gradient_threshold</TT>. For each of these + edgels, the edgel's location is rounded to the nearest pixel, and that + pixel marked with the given <TT>edge_marker</TT>. + + <b> Declarations:</b> + + pass arguments explicitly: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> + void cannyEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + DestIterator dul, DestAccessor da, + double scale, GradValue gradient_threshold, DestValue edge_marker); + } + \endcode + + use argument objects in conjunction with \ref ArgumentObjectFactories: + \code + namespace vigra { + template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> + inline void cannyEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + pair<DestIterator, DestAccessor> dest, + double scale, GradValue gradient_threshold, DestValue edge_marker); + } + \endcode + + <b> Usage:</b> + + <b>\#include</b> "<a href="edgedetection_8hxx-source.html">vigra/edgedetection.hxx</a>"<br> + Namespace: vigra + + \code + vigra::BImage src(w,h), edges(w,h); + + // empty edge image + edges = 0; + ... + + // find edges at scale 0.8 with gradient larger than 4.0, mark with 1 + vigra::cannyEdgeImage(srcImageRange(src), destImage(edges), + 0.8, 4.0, 1); + \endcode + + <b> Required Interface:</b> + + see also: \ref cannyEdgelList(). + + \code + DestImageIterator dest_upperleft; + DestAccessor dest_accessor; + DestValue edge_marker; + + dest_accessor.set(edge_marker, dest_upperleft, vigra::Diff2D(1,1)); + \endcode + + <b> Preconditions:</b> + + \code + scale > 0 + gradient_threshold > 0 + \endcode +*/ +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> +void cannyEdgeImage( + SrcIterator sul, SrcIterator slr, SrcAccessor sa, + DestIterator dul, DestAccessor da, + double scale, GradValue gradient_threshold, DestValue edge_marker) +{ + std::vector<Edgel> edgels; + + cannyEdgelList(sul, slr, sa, edgels, scale); + + for(unsigned int i=0; i<edgels.size(); ++i) + { + if(gradient_threshold < edgels[i].strength) + { + Diff2D pix((int)(edgels[i].x + 0.5), (int)(edgels[i].y + 0.5)); + + da.set(edge_marker, dul, pix); + } + } +} + +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> +inline void cannyEdgeImage( + triple<SrcIterator, SrcIterator, SrcAccessor> src, + pair<DestIterator, DestAccessor> dest, + double scale, GradValue gradient_threshold, DestValue edge_marker) +{ + cannyEdgeImage(src.first, src.second, src.third, + dest.first, dest.second, + scale, gradient_threshold, edge_marker); +} + +/********************************************************/ + +namespace detail { + +template <class DestIterator> +int neighborhoodConfiguration(DestIterator dul) +{ + int v = 0; + NeighborhoodCirculator<DestIterator, EightNeighborCode> c(dul, EightNeighborCode::SouthEast); + for(int i=0; i<8; ++i, --c) + { + v = (v << 1) | ((*c != 0) ? 1 : 0); + } + + return v; +} + +template <class GradValue> +struct SimplePoint +{ + Diff2D point; + GradValue grad; + + SimplePoint(Diff2D const & p, GradValue g) + : point(p), grad(g) + {} + + bool operator<(SimplePoint const & o) const + { + return grad < o.grad; + } + + bool operator>(SimplePoint const & o) const + { + return grad > o.grad; + } +}; + +template <class SrcIterator, class SrcAccessor, + class DestIterator, class DestAccessor, + class GradValue, class DestValue> +void cannyEdgeImageFromGrad( + SrcIterator sul, SrcIterator slr, SrcAccessor grad, + DestIterator dul, DestAccessor da, + GradValue gradient_threshold, DestValue edge_marker) +{ + typedef typename SrcAccessor::value_type PixelType; + typedef typename NormTraits<PixelType>::SquaredNormType NormType; + + NormType zero = NumericTraits<NormType>::zero(); + double tan22_5 = M_SQRT2 - 1.0; + typename NormTraits<GradValue>::SquaredNormType g2thresh = squaredNorm(gradient_threshold); + + int w = slr.x - sul.x; + int h = slr.y - sul.y; + + sul += Diff2D(1,1); + dul += Diff2D(1,1); + Diff2D p(0,0); + + for(int y = 1; y < h-1; ++y, ++sul.y, ++dul.y) + { + SrcIterator sx = sul; + DestIterator dx = dul; + for(int x = 1; x < w-1; ++x, ++sx.x, ++dx.x) + { + PixelType g = grad(sx); + NormType g2n = squaredNorm(g); + if(g2n < g2thresh) + continue; + + NormType g2n1, g2n3; + // find out quadrant + if(abs(g[1]) < tan22_5*abs(g[0])) + { + // north-south edge + g2n1 = squaredNorm(grad(sx, Diff2D(-1, 0))); + g2n3 = squaredNorm(grad(sx, Diff2D(1, 0))); + } + else if(abs(g[0]) < tan22_5*abs(g[1])) + { + // west-east edge + g2n1 = squaredNorm(grad(sx, Diff2D(0, -1))); + g2n3 = squaredNorm(grad(sx, Diff2D(0, 1))); + } + else if(g[0]*g[1] < zero) + { + // north-west-south-east edge + g2n1 = squaredNorm(grad(sx, Diff2D(1, -1))); + g2n3 = squaredNorm(grad(sx, Diff2D(-1, 1))); + } + else + { + // north-east-south-west edge + g2n1 = squaredNorm(grad(sx, Diff2D(-1, -1))); + g2n3 = squaredNorm(grad(sx, Diff2D(1, 1))); + } + + if(g2n1 < g2n && g2n3 <= g2n) + { + da.set(edge_marker, dx); + } + } + } +} + +} // namespace detail + +/********************************************************/ +/* */ +/* cannyEdgeImageWithThinning */ +/* */ +/********************************************************/ + +/** \brief ... [truncated message content] |
From: <da...@us...> - 2008-03-15 22:18:30
|
Revision: 2953 http://hugin.svn.sourceforge.net/hugin/?rev=2953&view=rev Author: dangelo Date: 2008-03-15 15:18:23 -0700 (Sat, 15 Mar 2008) Log Message: ----------- disabled "calculate HFOV" and "optimal size" button if project does not contain images. Fixed cause for crash. Fixes [ 1896739 ] crash when pressing calculate fov without images Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp hugin/trunk/src/hugin_base/algorithms/basic/CalculateOptimalScale.cpp hugin/trunk/src/hugin_base/algorithms/nona/CalculateFOV.cpp hugin/trunk/src/hugin_base/algorithms/nona/CenterHorizontally.cpp Modified: hugin/trunk/src/hugin1/hugin/PanoPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-03-15 16:56:16 UTC (rev 2952) +++ hugin/trunk/src/hugin1/hugin/PanoPanel.cpp 2008-03-15 22:18:23 UTC (rev 2953) @@ -270,26 +270,9 @@ void PanoPanel::panoramaChanged (PT::Panorama &pano) { DEBUG_TRACE(""); - if (pano.getNrOfImages() == 0) { - //m_ProjectionChoice->Disable(); - //m_HFOVSpin->Disable(); - m_CalcHFOVButton->Disable(); - //m_VFOVSpin->Disable(); - //m_WidthTxt->Disable(); - m_CalcOptWidthButton->Disable(); - //m_HeightStaticText->Disable(); - //m_StitcherChoice->Disable(); - m_StitchButton->Disable(); - } else { - //m_ProjectionChoice->Enable(); - //m_HFOVSpin->Enable(); - m_CalcHFOVButton->Enable(); - //m_VFOVSpin->Enable(); - //m_WidthTxt->Enable(); - m_CalcOptWidthButton->Enable(); - //m_HeightStaticText->Enable(); - m_StitchButton->Enable(); - } + bool hasImages = pano.getActiveImages().size() > 0; + m_StitchButton->Enable(hasImages); + PanoramaOptions opt = pano.getOptions(); // update all options for dialog and notebook tab UpdateDisplay(opt); @@ -312,9 +295,10 @@ m_VFOVText->SetValue(wxString(val.c_str(), wxConvLocal)); // disable VFOV edit field, due to bugs in setHeight(), setWidth() + bool hasImages = pano->getActiveImages().size() > 0; m_VFOVText->Enable(m_keepViewOnResize); - m_CalcOptWidthButton->Enable(m_keepViewOnResize); - m_CalcHFOVButton->Enable(m_keepViewOnResize); + m_CalcOptWidthButton->Enable(m_keepViewOnResize && hasImages); + m_CalcHFOVButton->Enable(m_keepViewOnResize && hasImages); m_WidthTxt->SetValue(wxString::Format(wxT("%d"), opt.getWidth())); m_HeightTxt->SetValue(wxString::Format(wxT("%d"), opt.getHeight())); @@ -563,7 +547,7 @@ m_RemapperChoice->Enable(enable); m_BlenderChoice->Enable(enable); // m_CalcHFOVButton->Enable(enable); - m_CalcOptWidthButton->Enable(enable); +// m_CalcOptWidthButton->Enable(enable); } void PanoPanel::RemapperChanged(wxCommandEvent & e) @@ -633,6 +617,7 @@ void PanoPanel::DoCalcFOV(wxCommandEvent & e) { DEBUG_TRACE(""); + if (pano->getActiveImages().size() == 0) return; double hfov, height; pano->fitPano(hfov, height); @@ -653,6 +638,8 @@ void PanoPanel::DoCalcOptimalWidth(wxCommandEvent & e) { + if (pano->getActiveImages().size() == 0) return; + PanoramaOptions opt = pano->getOptions(); unsigned width = pano->calcOptimalWidth(); if (width > 0) { Modified: hugin/trunk/src/hugin_base/algorithms/basic/CalculateOptimalScale.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/basic/CalculateOptimalScale.cpp 2008-03-15 16:56:16 UTC (rev 2952) +++ hugin/trunk/src/hugin_base/algorithms/basic/CalculateOptimalScale.cpp 2008-03-15 22:18:23 UTC (rev 2953) @@ -35,17 +35,20 @@ /// double CalculateOptimalScale::calcOptimalScale(PanoramaData& panorama) { - PanoramaOptions opt = panorama.getOptions(); - double scale = 0; + if (panorama.getNrOfImages() == 0) + return 1; - for (unsigned i = 0; i < panorama.getNrOfImages(); i++) { - double s = calcOptimalPanoScale(panorama.getSrcImage(i), opt); - if (scale < s) { - scale = s; - } + PanoramaOptions opt = panorama.getOptions(); + double scale = 0; + + for (unsigned i = 0; i < panorama.getNrOfImages(); i++) { + double s = calcOptimalPanoScale(panorama.getSrcImage(i), opt); + if (scale < s) { + scale = s; } + } - return scale; + return scale; } Modified: hugin/trunk/src/hugin_base/algorithms/nona/CalculateFOV.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/nona/CalculateFOV.cpp 2008-03-15 16:56:16 UTC (rev 2952) +++ hugin/trunk/src/hugin_base/algorithms/nona/CalculateFOV.cpp 2008-03-15 22:18:23 UTC (rev 2953) @@ -35,6 +35,11 @@ FDiff2D CalculateFOV::calcFOV(const PanoramaData& panorama) { + if (panorama.getNrOfImages() == 0) { + // no change + return FDiff2D(panorama.getOptions().getHFOV(), panorama.getOptions().getVFOV()); + } + vigra::Size2D panoSize(360,180); // remap into minature pano. Modified: hugin/trunk/src/hugin_base/algorithms/nona/CenterHorizontally.cpp =================================================================== --- hugin/trunk/src/hugin_base/algorithms/nona/CenterHorizontally.cpp 2008-03-15 16:56:16 UTC (rev 2952) +++ hugin/trunk/src/hugin_base/algorithms/nona/CenterHorizontally.cpp 2008-03-15 22:18:23 UTC (rev 2953) @@ -51,6 +51,12 @@ // use selected images. UIntSet activeImgs = panorama.getActiveImages(); + + if (activeImgs.size() == 0) { + // do nothing if there are no images + return; + } + for (UIntSet::iterator it = activeImgs.begin(); it != activeImgs.end(); ++it) { // for (unsigned int imgNr=0; imgNr < getNrOfImages(); imgNr++) { // const PanoImage & img = getImage(*it); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Bruno P. <br...@po...> - 2008-03-30 00:49:31
|
Testing, I haven't had any mail from hugin-cvs since hugin SVN2953 -- Bruno On Sat 15-Mar-2008 at 15:18 -0700, da...@us... wrote: >Revision: 2953 |
From: Simon O. <sim...@gm...> - 2008-03-30 09:59:04
|
Bruno Postle wrote: > Testing, I haven't had any mail from hugin-cvs since hugin SVN2953 > Me neither, I guess the list isn't getting the changes anymore... /Simon |
From: Pablo d'A. <pab...@we...> - 2008-03-30 22:58:27
|
Hi all, I just clicked on "reload hooks" in the sf.net subversion settings, at it seems to work now again. probably some internal changes of sourceforge disabled the hook :-( ciao Pablo Simon Oosthoek schrieb: > Bruno Postle wrote: >> Testing, I haven't had any mail from hugin-cvs since hugin SVN2953 >> > > Me neither, I guess the list isn't getting the changes anymore... > > /Simon > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace > _______________________________________________ > Hugin-cvs mailing list > Hug...@li... > https://lists.sourceforge.net/lists/listinfo/hugin-cvs > |
From: <gpa...@us...> - 2008-04-16 02:48:56
|
Revision: 3019 http://hugin.svn.sourceforge.net/hugin/?rev=3019&view=rev Author: gpatters1 Date: 2008-04-15 19:48:54 -0700 (Tue, 15 Apr 2008) Log Message: ----------- [1905671][1934826] Do not reset the exposure value when the fov is changed or the lens is changed unless the value is linked. Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/LensPanel.cpp hugin/trunk/src/hugin_base/panodata/Panorama.cpp Modified: hugin/trunk/src/hugin1/hugin/LensPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-04-13 21:39:59 UTC (rev 3018) +++ hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-04-16 02:48:54 UTC (rev 3019) @@ -454,6 +454,7 @@ return; } + // find all lens ids that belong to the selected images UIntSet lensNrs; for (UIntSet::const_iterator it=m_selectedImages.begin(); @@ -463,6 +464,8 @@ lensNrs.insert(pano->getImage(*it).getLensNr()); } + // make a list of lenses that correspond to the id and update them to + // the new crop factor vector<Lens> lenses; for (UIntSet::const_iterator it=lensNrs.begin(); it != lensNrs.end(); ++it) @@ -472,6 +475,7 @@ lenses.back().setCropFactor(val); lenses.back().setFocalLength(fl); } + // Apply the change GlobalCmdHist::getInstance().addCommand( new PT::ChangeLensesCmd( *pano, lensNrs, lenses) ); Modified: hugin/trunk/src/hugin_base/panodata/Panorama.cpp =================================================================== --- hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-04-13 21:39:59 UTC (rev 3018) +++ hugin/trunk/src/hugin_base/panodata/Panorama.cpp 2008-04-16 02:48:54 UTC (rev 3019) @@ -1059,7 +1059,8 @@ it != state.lenses[lensNr].variables.end(); ++it) { - DEBUG_DEBUG("updating " << it->second.getName() << " (key: " << it->first << ")"); + // Write lens variables back to the images + DEBUG_DEBUG("updating " << it->second.getName() << " (key: " << it->first << ") for all images using lens: " << lensNr); updateLensVariable(lensNr, it->second); } } @@ -1079,8 +1080,9 @@ if (state.images[i].getLensNr() == lensNr) { // FIXME check for if really changed? imageChanged(i); - map_get(state.variables[i], var.getName()).setValue(var.getValue()); - + if (var.isLinked()) { + map_get(state.variables[i], var.getName()).setValue(var.getValue()); + } // check if the crop area should be automatically centered if ( var.getName() == "d" ) { ImageOptions opts = state.images[i].getOptions(); @@ -1099,7 +1101,7 @@ if ( var.getName() == "e" ) { ImageOptions opts = state.images[i].getOptions(); if (opts.docrop && opts.autoCenterCrop) { - // horizontally center crop area. + // vertically center crop area. double center = state.images[i].getHeight() / 2.0 + var.getValue(); int top = roundi(center - opts.cropRect.height() / 2.0); @@ -1388,7 +1390,10 @@ for (LensVarMap::const_iterator it = lens.variables.begin(); it != lens.variables.end();++it) { - map_get(state.variables[imgNr], it->first).setValue(it->second.getValue()); + if (it->second.isLinked()) { + map_get(state.variables[imgNr], it->first).setValue(it->second.getValue()); + } + DEBUG_DEBUG("updating " << it->second.getName() << " (key: " << it->first << ") for image: " << imgNr); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2008-04-20 09:40:38
|
Revision: 3029 http://hugin.svn.sourceforge.net/hugin/?rev=3029&view=rev Author: dangelo Date: 2008-04-20 02:40:29 -0700 (Sun, 20 Apr 2008) Log Message: ----------- fixed issues mentioned on wiki.panotools.org Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc hugin/trunk/src/translations/ca_ES.po hugin/trunk/src/translations/cs_CZ.po hugin/trunk/src/translations/de.po hugin/trunk/src/translations/en_GB.po hugin/trunk/src/translations/es.po hugin/trunk/src/translations/fr.po hugin/trunk/src/translations/hu.po hugin/trunk/src/translations/hugin.pot hugin/trunk/src/translations/it.po hugin/trunk/src/translations/ja.po hugin/trunk/src/translations/ko.po hugin/trunk/src/translations/nl.po hugin/trunk/src/translations/pl.po hugin/trunk/src/translations/pt_BR.po hugin/trunk/src/translations/ru.po hugin/trunk/src/translations/sk.po hugin/trunk/src/translations/sv.po hugin/trunk/src/translations/uk.po hugin/trunk/src/translations/zh_CN.po Modified: hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/hugin1/hugin/xrc/pano_panel.xrc 2008-04-20 09:40:29 UTC (rev 3029) @@ -24,7 +24,7 @@ <item>Sinc 1024</item> </content> <selection>0</selection> - <tooltip>approximation of values beetwen source pixels</tooltip> + <tooltip>approximation of values between source pixels</tooltip> </object> <flag>wxALL|wxALIGN_CENTRE_VERTICAL</flag> <border>6</border> @@ -320,7 +320,7 @@ <object class="sizeritem"> <object class="wxButton" name="pano_button_opt_width"> <label>Calculate Optimal Size</label> - <tooltip>calculate highest sensible width. (uses every image pixel)</tooltip> + <tooltip>Calculate optimal image size, such that the resolution in the image center stays similar.</tooltip> </object> <flag>wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL</flag> <cellpos>3,4</cellpos> Modified: hugin/trunk/src/translations/ca_ES.po =================================================================== --- hugin/trunk/src/translations/ca_ES.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/ca_ES.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -9,7 +9,7 @@ "Project-Id-Version: Hugin 0.5\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2005-11-10 18:48+0100\n" "Last-Translator: Albert Capellades Badia <alb...@gm...>\n" "Language-Team: Translation Project Catalan Team <alb...@gm...>\n" @@ -3087,7 +3087,7 @@ msgstr "Ve\xED proper" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "aproximaci\xF3 dels valors entre els p\xEDxels font" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3160,9 +3160,10 @@ msgstr "Calcula la mida \xF2ptima" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" -"calcula l'amplada sensible m\xE9s gran (utilitza el mateix nombre de p\xEDxels)" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4160,6 +4161,13 @@ "imatges amb un grau elevat de encavalcament i molts punts de control " "distribu\xEFts correctament." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "aproximaci\xF3 dels valors entre els p\xEDxels font" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "calcula l'amplada sensible m\xE9s gran (utilitza el mateix nombre de p\xEDxels)" + #, fuzzy #~ msgid "Error during image reading: %s" #~ msgstr "Error durant l'assemblatge" @@ -4173,9 +4181,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolador (i)\xA0:" -#~ msgid "approximation of values between source pixels" -#~ msgstr "aproximaci\xF3 dels valors entre els p\xEDxels font" - #~ msgid "gamma (g):" #~ msgstr "gamma (g)\xA0:" Modified: hugin/trunk/src/translations/cs_CZ.po =================================================================== --- hugin/trunk/src/translations/cs_CZ.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/cs_CZ.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -29,7 +29,7 @@ "Project-Id-Version: cs_CZ\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-02-18 21:09+0100\n" "Last-Translator: Václav Černý <va...@se...>\n" "Language-Team: Čeština\n" @@ -3094,7 +3094,7 @@ msgstr "Nejbližší soused" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "odhad hodnot mezi zdrojovými body" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3163,8 +3163,10 @@ msgstr "Vypočítat optimální velikost" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "spočítat největší smysluplnou šířku (použít každý bod)." +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4119,6 +4121,12 @@ "Optimalizace všech parametrů zkreslení \"všechno\" má smysl jen tehdy, pokud " "jste umístili velké množství kontrolních bodů a přitom je dobře rozmístili." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "odhad hodnot mezi zdrojovými body" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "spočítat největší smysluplnou šířku (použít každý bod)." + #~ msgid "Error during image reading: %s" #~ msgstr "Chyba během načítání obrázku: %s" @@ -4131,9 +4139,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolátor (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "odhad hodnot mezi zdrojovými body" - #~ msgid "gamma (g):" #~ msgstr "gama (g):" Modified: hugin/trunk/src/translations/de.po =================================================================== --- hugin/trunk/src/translations/de.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/de.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -10,7 +10,7 @@ "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-01-27 17:26+0100\n" "Last-Translator: Joachim Schneider <j-s...@gm...>\n" "Language-Team: deutsch <de...@li...>\n" @@ -3130,7 +3130,7 @@ msgstr "N\xE4chster Nachbar" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "Approximation der Werte zwischen den Quellpixeln" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3203,8 +3203,10 @@ msgstr "Optimale Gr\xF6\xDFe berechnen" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "Gr\xF6\xDFte sinnvolle Breite. (benutzt jedes Bildpixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4202,6 +4204,12 @@ "Bilder mit grosser \xDCberlappung sowie mit vielen, gleichm\xE4ssig verteilten " "Kontrollpunkten verwendet werden." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "Approximation der Werte zwischen den Quellpixeln" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "Gr\xF6\xDFte sinnvolle Breite. (benutzt jedes Bildpixel)" + #~ msgid "Error during image reading: %s" #~ msgstr "Fehler beim Einlesen von Bild %s" @@ -4214,9 +4222,6 @@ #~ msgid "interpolator (i):" #~ msgstr "Interpolation (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "Approximation der Werte zwischen den Quellpixeln" - #~ msgid "gamma (g):" #~ msgstr "Gamma (g):" Modified: hugin/trunk/src/translations/en_GB.po =================================================================== --- hugin/trunk/src/translations/en_GB.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/en_GB.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -9,7 +9,7 @@ "Project-Id-Version: en_GB\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-04-10 17:27+0100\n" "Last-Translator: Bruno Postle <br...@po...>\n" "Language-Team: LANGUAGE <en...@li...>\n" @@ -2888,7 +2888,7 @@ msgstr "" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -2952,7 +2952,9 @@ msgstr "" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 Modified: hugin/trunk/src/translations/es.po =================================================================== --- hugin/trunk/src/translations/es.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/es.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -8,7 +8,7 @@ "Project-Id-Version: hugin\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-02-08 21:13+0100\n" "Last-Translator: Juan A. Javierre <jua...@gm...>\n" "Language-Team: Spanish <tra...@es...>\n" @@ -3086,8 +3086,8 @@ msgstr "Vecino más próximo" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "aproximación de valores entre píxeles fuente" +msgid "approximation of values between source pixels" +msgstr "aproximación de valores entre los píxeles fuente" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3155,8 +3155,10 @@ msgstr "Calcular tamaño óptimo" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "calcular la mayor anchura posible. (usa cada pixel de la imagen)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4130,6 +4132,12 @@ "sentido con imágenes fuertemente pestañadas y con muchos puntos de control " "bien distribuidos." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "aproximación de valores entre píxeles fuente" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "calcular la mayor anchura posible. (usa cada pixel de la imagen)" + #~ msgid "Error during image reading: %s" #~ msgstr "Error al leer la imagen: %s" @@ -4142,9 +4150,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolador (i)" -#~ msgid "approximation of values between source pixels" -#~ msgstr "aproximación de valores entre los píxeles fuente" - #~ msgid "gamma (g):" #~ msgstr "gamma (g):" Modified: hugin/trunk/src/translations/fr.po =================================================================== --- hugin/trunk/src/translations/fr.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/fr.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -9,7 +9,7 @@ "Project-Id-Version: Hugin 0.7.0-beta5\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-01-16 12:09+0100\n" "Last-Translator: Jean-Luc Coulon (f5ibh) <jea...@wa...>\n" "Language-Team: Translation Project French Team <tr...@tr...>\n" @@ -3118,8 +3118,8 @@ msgstr "Plus proche voisin" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "Approximation des valeurs entre les pixels source" +msgid "approximation of values between source pixels" +msgstr "approximation des valeurs entre les pixels source" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3189,10 +3189,10 @@ msgstr "Calculer la taille optimale" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" -"Calculer la plus grande largeur sensible (qui utilise chaque pixel de " -"l'image)" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4179,6 +4179,14 @@ "qu'à des images ayant un important recouvrement et des points de contrôle " "nombreux et bien distribués." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "Approximation des valeurs entre les pixels source" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "Calculer la plus grande largeur sensible (qui utilise chaque pixel de " +#~ "l'image)" + #~ msgid "Error during image reading: %s" #~ msgstr "Erreur lors de la lecture de l'image : %s" @@ -4191,9 +4199,6 @@ #~ msgid "interpolator (i):" #~ msgstr "Interpolateur (i) :" -#~ msgid "approximation of values between source pixels" -#~ msgstr "approximation des valeurs entre les pixels source" - #~ msgid "gamma (g):" #~ msgstr "gamma (g) :" Modified: hugin/trunk/src/translations/hu.po =================================================================== --- hugin/trunk/src/translations/hu.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/hu.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -3,7 +3,7 @@ "Project-Id-Version: Hugin 0.5\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-01-31 08:04+0100\n" "Last-Translator: Höss Lajos <pg...@fr...>\n" "Language-Team: Balló György <ba...@fr...>\n" @@ -3066,7 +3066,7 @@ msgstr "Legközelebbi szomszéd" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "közelítő értékek forrás képpontok között" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3135,8 +3135,10 @@ msgstr "Optimális Méret Kiszámítása" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "A legnagyobb helyes szélesség kiszámítása (minden képpontot használ)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4102,6 +4104,13 @@ "értelme, ha nagy részben átlapoltak a képek és több jól szétszórt kontroll " "pont van rajtuk." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "közelítő értékek forrás képpontok között" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "A legnagyobb helyes szélesség kiszámítása (minden képpontot használ)" + #~ msgid "Error during image reading: %s" #~ msgstr "Hiba a kép olvasása közben: %s" @@ -4114,9 +4123,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolátor (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "közelítő értékek forrás képpontok között" - #~ msgid "gamma (g):" #~ msgstr "gamma (g):" Modified: hugin/trunk/src/translations/hugin.pot =================================================================== --- hugin/trunk/src/translations/hugin.pot 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/hugin.pot 2008-04-20 09:40:29 UTC (rev 3029) @@ -9,7 +9,7 @@ "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL...@li...>\n" @@ -2825,7 +2825,7 @@ msgstr "" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -2889,7 +2889,9 @@ msgstr "" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 Modified: hugin/trunk/src/translations/it.po =================================================================== --- hugin/trunk/src/translations/it.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/it.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -24,7 +24,7 @@ "Project-Id-Version: hugin 0.4\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2007-11-15 22:39+0100\n" "Last-Translator: Milo Casagrande <mil...@ya...>\n" "Language-Team: Italian <tp...@li...>\n" @@ -3118,8 +3118,8 @@ msgstr "Nearest neighbour" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "Approssimazione dei valori tra i pixel sorgenti" +msgid "approximation of values between source pixels" +msgstr "Approssimazione dei valori tra i pixel sorgente" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3189,8 +3189,10 @@ msgstr "Calcola dimensione ottimale" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "Calcola la larghezza più grande (usa ogni pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4210,6 +4212,12 @@ "L'ottimizzazione di tutti i parametri di distorsione ha senso solo con " "immagini fortemente sovrapposte e molti punti di controllo ben distribuiti." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "Approssimazione dei valori tra i pixel sorgenti" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "Calcola la larghezza più grande (usa ogni pixel)" + #~ msgid "Error during image reading: %s" #~ msgstr "Errore nel leggere l'immagine: %s" @@ -4222,9 +4230,6 @@ #~ msgid "interpolator (i):" #~ msgstr "Interpolatore:" -#~ msgid "approximation of values between source pixels" -#~ msgstr "Approssimazione dei valori tra i pixel sorgente" - #~ msgid "gamma (g):" #~ msgstr "Gamma:" Modified: hugin/trunk/src/translations/ja.po =================================================================== --- hugin/trunk/src/translations/ja.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/ja.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -6,7 +6,7 @@ "Project-Id-Version: Hugin 0.6\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2006-08-18 07:43+0100\n" "Last-Translator: Ippei UKAI <ipp...@ma...>\n" "Language-Team: N/A\n" @@ -3055,8 +3055,8 @@ msgstr "ニアレストネイバー法" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "ピクセル間を補完するアルゴリズム" +msgid "approximation of values between source pixels" +msgstr "画素間の補完" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3125,10 +3125,10 @@ msgstr "最適なサイズを計算" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" -"一番大きい適当な幅を計算します(元画像のすべての画素が使われるように調整しま" -"す)" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4098,6 +4098,14 @@ "「全部」の数値を最適化するのは、大きく重なりあっているたくさんのうまく散ら" "ばったコントロールポイントの設定された画像でなければ意味がありません。" +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "ピクセル間を補完するアルゴリズム" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "一番大きい適当な幅を計算します(元画像のすべての画素が使われるように調整し" +#~ "ます)" + #~ msgid "Error during image reading: %s" #~ msgstr "画像の読み込み中にエラー:%s" @@ -4110,9 +4118,6 @@ #~ msgid "interpolator (i):" #~ msgstr "画像補完 (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "画素間の補完" - #~ msgid "gamma (g):" #~ msgstr "ガンマ (g):" Modified: hugin/trunk/src/translations/ko.po =================================================================== --- hugin/trunk/src/translations/ko.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/ko.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -8,7 +8,7 @@ "Project-Id-Version: hugin\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-03-24 21:40+0900\n" "Last-Translator: homin,Lee <ff...@gm...>\n" "Language-Team: Gnome-kr-hackers <gno...@li...>\n" @@ -3048,8 +3048,8 @@ msgstr "근접한 이웃" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "원본 픽셀들의 근사값" +msgid "approximation of values between source pixels" +msgstr "원본 픽셀들 간의 근사값" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3117,8 +3117,10 @@ msgstr "적절한 크기 계산" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "가능한 가장 큰 너비 계산. (모든 이미지 픽셀 사용)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4069,6 +4071,12 @@ "모든 왜곡된 파라미터들을 최적화. \"모두\"는 이미지간 중첩 범위가 넓고 조정 위" "치들이 잘 분산되어 있어야 잘 동작 합니다." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "원본 픽셀들의 근사값" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "가능한 가장 큰 너비 계산. (모든 이미지 픽셀 사용)" + #~ msgid "Error during image reading: %s" #~ msgstr "이미지를 읽어오는 중 오류 발생: %s" @@ -4081,9 +4089,6 @@ #~ msgid "interpolator (i):" #~ msgstr "보간 도구(i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "원본 픽셀들 간의 근사값" - #~ msgid "gamma (g):" #~ msgstr "감마 (g):" Modified: hugin/trunk/src/translations/nl.po =================================================================== --- hugin/trunk/src/translations/nl.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/nl.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -9,7 +9,7 @@ "Project-Id-Version: nl\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-04-09 23:34+0200\n" "Last-Translator: Simon Oosthoek <si...@ma...>\n" "Language-Team: Nederlands <en...@li...>\n" @@ -3075,7 +3075,8 @@ msgstr "Nearest Neighbour" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +#, fuzzy +msgid "approximation of values between source pixels" msgstr "Bepaling van waardes tussen bron pixels" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3139,10 +3140,10 @@ msgstr "Bereken Optimale Grootte" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" -"Bereken de grootste zinvolle breedte.\n" -"(gebruik elke afbeeldings pixel)" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4113,3 +4114,8 @@ "Optimalisatie van de \"alle vervormingen\" parameter optie \"alles\" hebben " "alleen zin bij sterk overlappende afbeeldingen met vele goed verspreide " "ijkpunten." + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "Bereken de grootste zinvolle breedte.\n" +#~ "(gebruik elke afbeeldings pixel)" Modified: hugin/trunk/src/translations/pl.po =================================================================== --- hugin/trunk/src/translations/pl.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/pl.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -12,7 +12,7 @@ "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2007-12-24 10:58+0100\n" "Last-Translator: Michał Smoczyk <msm...@wp...>\n" "Language-Team: Polish <pl...@li...>\n" @@ -3096,7 +3096,7 @@ msgstr "Najbliższy sąsiad" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "przybliżenie wartości pomiędzy pikselami źródłowymi" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3166,8 +3166,10 @@ msgstr "Wylicz optymalną wielkość" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "wylicz największą sensowną szerokość. (używa każdego punktu zdjęcia)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4161,6 +4163,13 @@ "w przypadku znacznie zachodzących na siebie obrazów i wielu dobrze " "rozproszonych punktów kontrolnych." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "przybliżenie wartości pomiędzy pikselami źródłowymi" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "wylicz największą sensowną szerokość. (używa każdego punktu zdjęcia)" + #~ msgid "Error during image reading: %s" #~ msgstr "Błąd podczas odczytu zdjęcia: %s" @@ -4173,9 +4182,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolator (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "przybliżenie wartości pomiędzy pikselami źródłowymi" - #~ msgid "gamma (g):" #~ msgstr "gamma (g):" Modified: hugin/trunk/src/translations/pt_BR.po =================================================================== --- hugin/trunk/src/translations/pt_BR.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/pt_BR.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -9,7 +9,7 @@ "Project-Id-Version: pt_BR\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2007-01-02 11:30-0400\n" "Last-Translator: Ademar de Souza Reis Jr. <ad...@ad...>\n" "Language-Team: Português Brasileiro <pt...@li...>\n" @@ -3066,8 +3066,8 @@ msgstr "Vizinho mais próximo" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "aproximação dos valores entre os píxels de origem" +msgid "approximation of values between source pixels" +msgstr "valores aproximados entre os píxels de origem" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3137,8 +3137,10 @@ msgstr "Calcular Tamanho Ótimo" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "calcula a maior largura possível. (usando cada píxel da imagem)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4117,6 +4119,12 @@ "com imagens fortemente sobrepujadas ou com vários pontos de controle " "distribuídos." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "aproximação dos valores entre os píxels de origem" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "calcula a maior largura possível. (usando cada píxel da imagem)" + #~ msgid "Error during image reading: %s" #~ msgstr "Erro durante leitura da imagem: %s" @@ -4129,9 +4137,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolador (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "valores aproximados entre os píxels de origem" - #~ msgid "gamma (g):" #~ msgstr "gama (g)" Modified: hugin/trunk/src/translations/ru.po =================================================================== --- hugin/trunk/src/translations/ru.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/ru.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -8,7 +8,7 @@ "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-02-05 11:40+0300\n" "Last-Translator: Alexandre Prokoudine <ale...@gm...>\n" "Language-Team: Russian <ru...@li...>\n" @@ -3071,7 +3071,7 @@ msgstr "Ближайший сосед" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "Аппроксимация значений между исходными пикселами" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3142,9 +3142,10 @@ msgstr "Рассчитать оптимальный размер" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" -"Рассчитать максимальную разумную ширину (используя каждый пиксел снимка)" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4115,6 +4116,13 @@ "сшиваются сильно пересекающиеся изображения с заметно удалёнными друг от " "друга контрольными точками." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "Аппроксимация значений между исходными пикселами" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "Рассчитать максимальную разумную ширину (используя каждый пиксел снимка)" + #~ msgid "Error during image reading: %s" #~ msgstr "Ошибка при чтении изображения: %s" @@ -4127,9 +4135,6 @@ #~ msgid "interpolator (i):" #~ msgstr "Интерполятор (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "Аппроксимация значений между исходными пикселами" - #~ msgid "gamma (g):" #~ msgstr "Гамма (g):" Modified: hugin/trunk/src/translations/sk.po =================================================================== --- hugin/trunk/src/translations/sk.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/sk.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -8,7 +8,7 @@ "Project-Id-Version: hugin\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-01-14 22:21+0100\n" "Last-Translator: Jozef Riha <jos...@gm...>\n" "Language-Team: Slovak <sk...@li...>\n" @@ -3071,7 +3071,7 @@ msgstr "Najbližší sused" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "odhad hodnôt medzi zdrojovými bodmi" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3140,8 +3140,10 @@ msgstr "Vypočítať optimálnu veľkosť" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "spočítať najväčšiu zmysluplnú šírku (použiť každý bod)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4105,6 +4107,12 @@ "ak sa obrázky veľmi prekrývajú a použili ste tiež mnoho dobre rozmiestnených " "kontrolných bodov." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "odhad hodnôt medzi zdrojovými bodmi" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "spočítať najväčšiu zmysluplnú šírku (použiť každý bod)" + #~ msgid "Error during image reading: %s" #~ msgstr "Chyba počas nahrávania obrázku: %s" @@ -4117,9 +4125,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolátor (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "odhad hodnôt medzi zdrojovými bodmi" - #~ msgid "gamma (g):" #~ msgstr "gama (g):" Modified: hugin/trunk/src/translations/sv.po =================================================================== --- hugin/trunk/src/translations/sv.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/sv.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -8,7 +8,7 @@ "Project-Id-Version: se\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2008-03-11 14:31+0100\n" "Last-Translator: Ulf Wilhelmson <ulf...@gm...>\n" "Language-Team: Svenska <se...@li...>\n" @@ -3070,8 +3070,8 @@ msgstr "N\xE4rmsta granne" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "approximering av v\xE4rden mellan k\xE4llpixel" +msgid "approximation of values between source pixels" +msgstr "approximation av v\xE4rden mellan k\xE4llpixlar" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3139,8 +3139,10 @@ msgstr "Ber\xE4kna optimal storlek" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "ber\xE4kna st\xF6rsta meningsfulla bredd. (anv\xE4nder varje bildpixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 msgid "left:" @@ -4103,6 +4105,12 @@ "Optimering av alla distotionsparametrar \"Allting\" \xE4r endast meningsfull " "med kraftigt \xF6verlappande bilder och m\xE5nga v\xE4l distribuerade kontrollpunkter." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "approximering av v\xE4rden mellan k\xE4llpixel" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "ber\xE4kna st\xF6rsta meningsfulla bredd. (anv\xE4nder varje bildpixel)" + #~ msgid "Error during image reading: %s" #~ msgstr "Fel under bildinl\xE4sning: %s" @@ -4115,9 +4123,6 @@ #~ msgid "interpolator (i):" #~ msgstr "interpolator (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "approximation av v\xE4rden mellan k\xE4llpixlar" - #~ msgid "gamma (g):" #~ msgstr "gamma (g):" Modified: hugin/trunk/src/translations/uk.po =================================================================== --- hugin/trunk/src/translations/uk.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/uk.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -6,7 +6,7 @@ "Project-Id-Version: Hugin 0.7\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2006-08-20 21:38+0200\n" "Last-Translator: Serhij Dubyk <du...@li...>\n" "Language-Team: \n" @@ -3109,8 +3109,8 @@ msgstr "Найближчий сусід" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" -msgstr "наближення значеннь з поміж джерельних пікселів" +msgid "approximation of values between source pixels" +msgstr "апроксимація значень між джерельними пікселями" #: translations/xrc.cpp:341 xrc.cpp:341 #, fuzzy @@ -3179,9 +3179,10 @@ msgstr "Обрахувати оптимальний розмір" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." msgstr "" -"обчислення вирхньої помітної ширини. (використовує кожен піксель зображення)" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4174,6 +4175,14 @@ "Оптимізація усіх параметрів спотворення (\"усе\") має тільки сенс для важко " "перекриваючих зображень і багатьох широко розповсюджених контрольних крапки." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "наближення значеннь з поміж джерельних пікселів" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "" +#~ "обчислення вирхньої помітної ширини. (використовує кожен піксель " +#~ "зображення)" + #~ msgid "Error during image reading: %s" #~ msgstr "Під час читання зображення відбулася помилка: %s" @@ -4186,9 +4195,6 @@ #~ msgid "interpolator (i):" #~ msgstr "інтерполятор (i): " -#~ msgid "approximation of values between source pixels" -#~ msgstr "апроксимація значень між джерельними пікселями" - #~ msgid "gamma (g):" #~ msgstr "ґамма (g): " Modified: hugin/trunk/src/translations/zh_CN.po =================================================================== --- hugin/trunk/src/translations/zh_CN.po 2008-04-20 09:20:32 UTC (rev 3028) +++ hugin/trunk/src/translations/zh_CN.po 2008-04-20 09:40:29 UTC (rev 3029) @@ -3,7 +3,7 @@ "Project-Id-Version: Hugin v0.6.1\n" "Report-Msgid-Bugs-To: http://sourceforge.net/tracker/?" "group_id=77506&atid=550441\n" -"POT-Creation-Date: 2008-04-20 11:18+0200\n" +"POT-Creation-Date: 2008-04-20 11:39+0200\n" "PO-Revision-Date: 2006-11-13 18:37+0800\n" "Last-Translator: Chinese Simplified <N/A>\n" "Language-Team: Chinese Simplified <N/A>\n" @@ -3039,7 +3039,7 @@ msgstr "最近相邻" #: translations/xrc.cpp:340 xrc.cpp:340 -msgid "approximation of values beetwen source pixels" +msgid "approximation of values between source pixels" msgstr "源像素之间的逼近值" #: translations/xrc.cpp:341 xrc.cpp:341 @@ -3109,8 +3109,10 @@ msgstr "计算优化尺寸" #: translations/xrc.cpp:358 xrc.cpp:358 -msgid "calculate highest sensible width. (uses every image pixel)" -msgstr "计算最敏感的宽度. (使用每个图像像素)" +msgid "" +"Calculate optimal image size, such that the resolution in the image center " +"stays similar." +msgstr "" #: translations/xrc.cpp:360 xrc.cpp:360 #, fuzzy @@ -4059,6 +4061,12 @@ "只有当图像重叠程度很高并且有很多分布良好的控制点时, 对所有失真参数进行优化的" "选项 \"everything\" 才会有效果." +#~ msgid "approximation of values beetwen source pixels" +#~ msgstr "源像素之间的逼近值" + +#~ msgid "calculate highest sensible width. (uses every image pixel)" +#~ msgstr "计算最敏感的宽度. (使用每个图像像素)" + #~ msgid "Error during image reading: %s" #~ msgstr "读取图像时出错: %s" @@ -4071,9 +4079,6 @@ #~ msgid "interpolator (i):" #~ msgstr "插补器 (i):" -#~ msgid "approximation of values between source pixels" -#~ msgstr "源像素之间的逼近值" - #~ msgid "gamma (g):" #~ msgstr "灰度 (g): " This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |