david-cattermole / mayaMatchMoveSolver

A Bundle Adjustment solver for MatchMove related tasks.
https://david-cattermole.github.io/mayaMatchMoveSolver/
Other
102 stars 27 forks source link

Solver UI - Adding Attributes with Connections Should Print Warning #199

Open david-cattermole opened 3 years ago

david-cattermole commented 3 years ago

Problem

Attributes that have incoming connections are considered to be "locked" (uneditable) by the solver.

This could be slightly confusing to new users, and a warning message might be helpful.

Following on from #183, rigs with Character Sets will not solve in mmSolver and rather than just erroring at Solve time, it would be helpful to inform the artist and let them know of workarounds.

If this is to be implemented, it can be added to the Attributes "Add" button, for example here: https://github.com/ktonegawa/mayaMatchMoveSolver/blob/f4e58de6b7ca7be50d2dbf1629483791ca0f0877/python/mmSolver/tools/solver/widget/attribute_widget.py#L298-L342

Expected behavior: When a user selects a rig control attribute with an input connection, and tries to add it to the Solver UI Output Attributes, print a warning to tell the user that the attribute will not be used.

Actual behavior: When a rig control that is connected to (for example) a Character Set is added to the UI, the Solver UI will error like so:

# Traceback (most recent call last):
#   File "C:\Users\Desktop02\Documents\maya\2019\modules\mayaMatchMoveSolver-0.3.11-maya2019-win64\python\mmSolver\tools\solver\widget\attribute_widget.py", line 331, in addClicked
#     lib_attr.add_attributes_to_collection(attr_list, col)
#   File "C:\Users\Desktop02\Documents\maya\2019\modules\mayaMatchMoveSolver-0.3.11-maya2019-win64\python\mmSolver\tools\solver\lib\attr.py", line 57, in add_attributes_to_collection
#     return col.add_attribute_list(attr_list)
#   File "C:\Users\Desktop02\Documents\maya\2019\modules\mayaMatchMoveSolver-0.3.11-maya2019-win64\python\mmSolver\_api\collection.py", line 627, in add_attribute_list
#     self._set.add_members(name_list)
#   File "C:\Users\Desktop02\Documents\maya\2019\modules\mayaMatchMoveSolver-0.3.11-maya2019-win64\python\mmSolver\_api\sethelper.py", line 121, in add_members
#     maya.cmds.sets(*name_list, edit=True, include=set_node, noWarnings=True)
# RuntimeError: Error while parsing arguments.
# 

Software Versions

ktonegawa commented 2 years ago

I cannot seem to recreate that behaviour when solving (at least with the latest working build of v0.3.11 for Maya 2019), is it possible for a rig to be provided to replicate this or is this an issue that occurs >v0.3.11?

ktonegawa commented 2 years ago

adding as per conversation with David (error with the plugin v0.3.12 and newer on Maya 2019):

david-cattermole commented 2 years ago

Hello @ktonegawa,

I think the rig that generated the original error was this one from the #183 issue.

I have tried to re-created the issue with mmSolver v0.3.14 on Maya 2019 (2019.3.1), but I do not get any error.

It's strange you are getting something different. I will share an example Maya scene using Mr. SuRuj.

ktonegawa commented 2 years ago

Well either way, I would think that for something like this since the issue would come at solve time and not necessarily at run time, perhaps either a pop up box, or alternatively a little exclamation mark icon can be placed within the interface to give the user a more obvious warning than a printed line. Any thoughts on these ideas...?

david-cattermole commented 2 years ago

@ktonegawa that makes sense.

Perhaps a special check that is run each time the user runs a solve to check if the attributes are connected to a Character Set and then a pop-up is displayed to the user explaining they cannot solve the attributes directly and must use the tool in the menu "mmSolver > General Tools > Create Controller..." instead?

I'm not against such a check and warning, as long as it doesn't cause a performance issue. I would argue that this is a very specialised use-case and I'm not sure how often Character Sets are used in production for rigs nowadays (personally, I've not seen any rigs using Character Sets in production).