* updated to work with new dtutils_file
* added checkbox to allow user to launch hugin in gui mode * changed the logic so hugin will write temp files to tmp directory and then move the final result to the directory of original source files. this improves speed when original source files are on network mapped drive * added some additional error messages
This commit is contained in:
@@ -29,7 +29,7 @@ ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
|
||||
|
||||
USAGE
|
||||
* require this file from your main luarc config file
|
||||
* set the hugin tool paths in preferences
|
||||
* 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.
|
||||
@@ -39,7 +39,13 @@ local dt = require "darktable"
|
||||
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})
|
||||
@@ -51,9 +57,14 @@ local function _(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("exporting 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
|
||||
@@ -62,19 +73,21 @@ local function create_panorama(storage, image_table, extra_data) --finalize
|
||||
-- We need pto_gen to create pto file for hugin_executor
|
||||
-- http://hugin.sourceforge.net/docs/manual/Pto_gen.html
|
||||
|
||||
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 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 df.check_if_bin_exists(hugin) then
|
||||
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
|
||||
@@ -95,6 +108,11 @@ local function create_panorama(storage, image_table, extra_data) --finalize
|
||||
first_file = k break
|
||||
end
|
||||
|
||||
if first_file == nil then
|
||||
dt.print("no file selected")
|
||||
return
|
||||
end
|
||||
|
||||
local pto_path = dt.configuration.tmp_dir..'/project.pto'
|
||||
local filepath = df.split_filepath(first_file.filename)
|
||||
local tmp_filename = filepath['basename'].."_pano.tif"
|
||||
@@ -124,16 +142,16 @@ local function create_panorama(storage, image_table, extra_data) --finalize
|
||||
if (user_prefer_gui) then
|
||||
dt.print(_("launching hugin"))
|
||||
else
|
||||
dt.print(_("unable to find command line tools, launching hugin")
|
||||
dt.print(_("unable to find command line tools, launching hugin"))
|
||||
end
|
||||
huginStartCommand = hugin..' '..img_list
|
||||
else
|
||||
dt.print(_("hugin isn't available, please set the paths in preferences."))
|
||||
dt.print(_("hugin isn't available."))
|
||||
end
|
||||
|
||||
if not (huginStartCommand==nil) then
|
||||
if not dt.control.execute(huginStartCommand) then
|
||||
dt.print(_("command hugin failed ..."))
|
||||
dt.print(_("hugin failed ..."))
|
||||
else
|
||||
if df.check_if_file_exists(src_path) then
|
||||
df.file_move(src_path, dst_path)
|
||||
@@ -150,11 +168,23 @@ local function create_panorama(storage, image_table, extra_data) --finalize
|
||||
end
|
||||
|
||||
-- Register
|
||||
dt.register_storage(namespace, _("hugin panorama"), show_status, create_panorama)
|
||||
dt.preferences.register(namespace, "pto_gen", "file", _("pto_gen location"), "choose the pto_gen executable.", "/usr/bin/pto_gen")
|
||||
dt.preferences.register(namespace, "hugin_executor", "file", _("hugin_executor location"), "choose the hugin_executor executable.", "/usr/bin/hugin_executor")
|
||||
dt.preferences.register(namespace, "hugin", "file", _("hugin location"), "choose the hugin executable", "/usr/bin/hugin")
|
||||
dt.preferences.register(namespace, "hugin_prefer_gui", "bool", _("prefer hugin gui over command line"), "always launches hugin gui instead of automated from command line.", false)
|
||||
if dt.configuration.running_os ~= "linux" then
|
||||
exec_widget = df.executable_path_widget(executable_table)
|
||||
end
|
||||
|
||||
hugin_widget = dt.new_widget("box") {
|
||||
orientation = "vertical",
|
||||
dt.new_widget("check_button")
|
||||
{
|
||||
label = _(" launch hugin gui"),
|
||||
value = user_prefer_gui,
|
||||
tooltip = _('launch hugin in gui mode'),
|
||||
clicked_callback = user_preference_changed
|
||||
},
|
||||
exec_widget
|
||||
}
|
||||
|
||||
dt.register_storage(namespace, _("hugin panorama"), show_status, create_panorama, nil, nil, hugin_widget)
|
||||
|
||||
--
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
-- vim: shiftwidth=2 expandtab tabstop=2 cindent syntax=lua
|
||||
Reference in New Issue
Block a user