From fe942100a40691d3b2250b5125b9984e3231dca5 Mon Sep 17 00:00:00 2001 From: Andy Chien Date: Fri, 23 Feb 2018 10:07:45 -0800 Subject: [PATCH] hugin plugin improvements * added preference requiring user to specify the paths for hugin, hugin_executor and pto_gen needed for this plguin * added preference to allow user to choose to launch hugin in GUI mode * minor fix to the way files are handled; due to some versions of hugin_executor not writing out to the path specified in --prefix, assume we are working in the tmp directory and then move the file afterwards --- contrib/hugin.lua | 105 +++++++++++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 39 deletions(-) diff --git a/contrib/hugin.lua b/contrib/hugin.lua index 9008b15..477e506 100644 --- a/contrib/hugin.lua +++ b/contrib/hugin.lua @@ -28,7 +28,9 @@ ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT * hugin USAGE -* require this file from your main luarc config file. +* require this file from your main luarc config file +* set the hugin tool paths in preferences +* if hugin gui mode is used, save the final result in the tmp directory with the first file name and _pano as suffix for the image to be automatically imported to DT afterwards This plugin will add a new storage option and calls hugin after export. ]] @@ -37,6 +39,7 @@ local dt = require "darktable" local df = require "lib/dtutils.file" require "official/yield" local gettext = dt.gettext +local namespace = 'module_hugin' -- works with darktable API version from 2.0.0 to 5.0.0 dt.configuration.check_version(...,{2,0,0},{3,0,0},{4,0,0},{5,0,0}) @@ -45,28 +48,33 @@ dt.configuration.check_version(...,{2,0,0},{3,0,0},{4,0,0},{5,0,0}) gettext.bindtextdomain("hugin",dt.configuration.config_dir.."/lua/locale/") local function _(msgid) - return gettext.dgettext("hugin", msgid) + return gettext.dgettext("hugin", msgid) end local function show_status(storage, image, format, filename, number, total, high_quality, extra_data) - dt.print("Export to Hugin "..tostring(number).."/"..tostring(total)) + dt.print("exporting to Hugin: "..tostring(number).."/"..tostring(total)) end local function create_panorama(storage, image_table, extra_data) --finalize - if not df.check_if_bin_exists("hugin") then - dt.print_error(_("hugin not found")) - return - end - -- Since Hugin 2015.0.0 hugin provides a command line tool to start the assistant -- http://wiki.panotools.org/Hugin_executor -- We need pto_gen to create pto file for hugin_executor -- http://hugin.sourceforge.net/docs/manual/Pto_gen.html - local hugin_executor = false - if (df.check_if_bin_exists("hugin_executor") and df.check_if_bin_exists("pto_gen")) then - hugin_executor = true + local hugin = '"'..dt.preferences.read(namespace, "hugin", "file")..'"' + local hugin_executor = '"'..dt.preferences.read(namespace, "hugin_executor", "file")..'"' + local pto_gen = '"'..dt.preferences.read(namespace, "pto_gen", "file")..'"' + local user_prefer_gui = dt.preferences.read(namespace, "hugin_prefer_gui", "bool") + + local cmd_line_available = false + if df.check_if_bin_exists(hugin_executor) and df.check_if_bin_exists(pto_gen) then + cmd_line_available = true + end + + local gui_available = false + if df.check_if_bin_exists(hugin) then + gui_available = true end -- list of exported images @@ -76,58 +84,77 @@ local function create_panorama(storage, image_table, extra_data) --finalize -- reset and create image list img_list = "" for k,v in pairs(image_table) do - img_list = img_list ..v.. " " - table.insert(img_set, k) + img_list = img_list..v..' ' + table.insert(img_set, k) end - -- use first file as basename + -- use first file as basename for output file table.sort(img_set, function(a,b) return a.filename