diff --git a/contrib/hugin.lua b/contrib/hugin.lua index 9008b15..c8106eb 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 (on some platforms) +* 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. ]] @@ -38,35 +40,54 @@ local df = require "lib/dtutils.file" require "official/yield" local gettext = dt.gettext +local namespace = 'module_hugin' +local user_pref_str = 'prefer_gui' +local user_prefer_gui = dt.preferences.read(namespace, user_pref_str, "bool") +local hugin_widget = nil +local exec_widget = nil +local executable_table = {"hugin", "hugin_executor", "pto_gen"} + -- 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}) +dt.configuration.check_version(...,{5,0,0}) -- Tell gettext where to find the .mo file translating messages for a particular domain 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 user_preference_changed(widget) + user_prefer_gui = widget.value + dt.preferences.write(namespace, user_pref_str, "bool", user_prefer_gui) 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 = df.check_if_bin_exists("hugin") + local hugin_executor = df.check_if_bin_exists("hugin_executor") + local pto_gen = df.check_if_bin_exists("pto_gen") + + local gui_available = false + if hugin then + gui_available = true + else + dt.print(_("hugin is not found, did you set the path?")) + return + end + + local cmd_line_available = false + if hugin_executor and pto_gen then + cmd_line_available = true end -- list of exported images @@ -76,58 +97,94 @@ 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