Skip to content

Commit

Permalink
this is just a test commit to showcase what I have been doing to look…
Browse files Browse the repository at this point in the history
… into ticket david-cattermole#183
  • Loading branch information
ktonegawa committed Jan 10, 2021
1 parent 030fb38 commit fb300cf
Showing 1 changed file with 40 additions and 4 deletions.
44 changes: 40 additions & 4 deletions python/mmSolver/utils/nodeaffects.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import mmSolver.logger
import mmSolver.utils.node as node_utils

import traceback

LOG = mmSolver.logger.get_logger()

Expand Down Expand Up @@ -99,7 +100,13 @@ def _get_full_path_plug(plug):
"""
node = plug.partition('.')[0]
attr = plug.partition('.')[-1]
attr = maya.cmds.attributeName(plug, long=True)

This comment has been minimized.

Copy link
@david-cattermole

david-cattermole Jan 10, 2021

Removing maya.cmds.attributeName probably fixes "error 1" from david-cattermole#183, which is fantastic.
It seems like a good fix to me.

# LOG.info(( '_get_full_path_plug:plug: ', plug))
# attr = maya.cmds.attributeName(plug, long=True)
# try:
# attr = maya.cmds.attributeName(plug, long=True)
# except:
# traceback.print_exc()
# raise ValueError(('something wrong with this plug:', plug))
node = maya.cmds.ls(node, long=True)[0]
full_path = node + '.' + attr
return str(full_path)
Expand Down Expand Up @@ -179,6 +186,7 @@ def _convert_node_to_plugs(node, attr, node_type,
return plugs

node_attr = '{0}.{1}'.format(node, attr)
node_attr_original = '{0}.{1}'.format(node, attr)
settable = maya.cmds.getAttr(node_attr, settable=True)
if settable is True:
typ = __get_and_fill_cache_value(
Expand All @@ -190,13 +198,23 @@ def _convert_node_to_plugs(node, attr, node_type,
return plugs

# Get plugs connected to this attribute, recursively
# LOG.info(('_convert_node_to_plugs:node_attr (original): ', node_attr_original))
conn_attrs = maya.cmds.listConnections(
node_attr,
source=True,
destination=False,
plugs=True) or []
# if len(conn_attrs) > 1:
# LOG.info(('_convert_node_to_plugs:node_attr (original): ', node_attr_original))
# LOG.info(('_convert_node_to_plugs:conn_attrs length: ', len(conn_attrs)))
while len(conn_attrs) > 0:
node_attr = conn_attrs.pop()
# LOG.info(('_convert_node_to_plugs:node_attr (original): ', node_attr_original))
# LOG.info(('_convert_node_to_plugs:node_attr (pop): ', node_attr))
# LOG.info(('_convert_node_to_plugs:conn_attrs: ', conn_attrs))
# LOG.info(('_convert_node_to_plugs:conn_attrs length: ', len(conn_attrs)))
# LOG.info(('_convert_node_to_plugs:conn_attrs: ', conn_attrs))
# LOG.info(( '_convert_node_to_plugs:node_attr (from conn_attrs): ', node_attr))
node_attr = _get_full_path_plug(node_attr)
settable = maya.cmds.getAttr(node_attr, settable=True)
if settable is True:
Expand All @@ -217,6 +235,7 @@ def _convert_node_to_plugs(node, attr, node_type,
source=True,
destination=False,
plugs=True) or []
# LOG.info(('_convert_node_to_plugs:tmp_list for %s: ' % node_attr, tmp_list))

# Filter by valid plug types.
for tmp in tmp_list:
Expand All @@ -226,10 +245,27 @@ def _convert_node_to_plugs(node, attr, node_type,
affects_this_plug = maya.cmds.affects(attr_, node_) or []
for attr__ in affects_this_plug:
node_attr = node_ + '.' + attr__
node_attr = _get_full_path_plug(node_attr)
conn_attrs += [node_attr]
try:

This comment has been minimized.

Copy link
@david-cattermole

david-cattermole Jan 10, 2021

I would hope it's possible to remove this try/except, if it's possible.
My guess is that any "node.attribute" strings that are not valid will simply be skipped?

We could do that a different way, for example using the mmSolver.utils.node.attribute_exists() function?

maya.cmds.listConnections(node_attr)
except ValueError as e:
# LOG.warning(e)
continue
compound_attrs = maya.cmds.listAttr(node_attr, multi=True)

This comment has been minimized.

Copy link
@david-cattermole

david-cattermole Jan 10, 2021

This test for compound/multi-attribute seems like a good workaround.

if compound_attrs > 1:
for array_item in compound_attrs:
node_attr = node_ + '.' + array_item
# LOG.warning(node_attr)
node_attr = _get_full_path_plug(node_attr)
conn_attrs += [node_attr]
else:
node_attr = _get_full_path_plug(node_attr)
conn_attrs += [node_attr]
# Only unique attributes.
conn_attrs = list(set(conn_attrs))

This comment has been minimized.

Copy link
@david-cattermole

david-cattermole Jan 10, 2021

You should uncomment this like. The line will keep only unique plug strings (no duplicates), it will ensure each plug is returned once, just in case the same node affects the same node.

Without removing duplicates you could have unexpected issues.

# conn_attrs = list(set(conn_attrs))
# if len(conn_attrs) > 1:
# LOG.info(('_convert_node_to_plugs:node_attr (original): ', node_attr_original))
# LOG.info(('_convert_node_to_plugs:conn_attrs length: ', len(conn_attrs)))
# # LOG.info(('_convert_node_to_plugs:conn_attrs: ', conn_attrs))
return plugs


Expand Down

0 comments on commit fb300cf

Please sign in to comment.