Skip to content

Commit

Permalink
Implement MDGModifier::renameNode binding
Browse files Browse the repository at this point in the history
  • Loading branch information
yantor3d committed Jun 5, 2021
1 parent c5c2f4f commit 18dca1a
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/MDGModifier.inl
Original file line number Diff line number Diff line change
Expand Up @@ -476,8 +476,24 @@ There should be no function sets attached to the attribute at the time of the ca
throw std::logic_error{"Function not yet implemented."};
}, R"pbdoc(Adds an operation to the modifer that renames a dynamic attribute on the given dependency node.)pbdoc")

.def("renameNode", [](MDGModifier & self, MObject node, MString newName) {
throw std::logic_error{"Function not yet implemented."};
.def("renameNode", [](MDGModifier & self, MObject node, std::string newName) {
if (node.isNull())
{
throw std::invalid_argument("Cannot rename a null node.");
} else if (!node.hasFn(MFn::kDependencyNode)) {
MString error_msg("Cannot rename object - 'node' must be a 'kDependencyNode' object , not a '^1s' object.");
error_msg.format(error_msg, node.apiTypeStr());
throw pybind11::type_error(error_msg.asChar());
}

if (newName.empty())
{
throw std::invalid_argument("Cannot rename a node to an empty string.");
}

MStatus status = self.renameNode(node, MString(newName.c_str()));

CHECK_STATUS(status)
}, R"pbdoc(Adds an operation to the modifer to rename a node.)pbdoc")

.def("setNodeLockState", [](MDGModifier & self, MObject node, bool newState) {
Expand Down
39 changes: 39 additions & 0 deletions tests/test_MDGModifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,45 @@ def test_removeExtensionAttribute_pass():
raise SkipTest("Cannot test DGModifier.removeExtensionAttribute until MFnAttribute classes are implemented.")




@nose.with_setup(teardown=new_scene)
def test_renameNode():
"""Test MDGModfifier::renameNode binding."""

node = cmds.createNode('network')
node_obj = as_obj(node)
null_obj = cmdc.Object()

fn_node = cmdc.FnDependencyNode(node_obj)
old_name, new_name = node, 'foobar123'

mod = cmdc.DGModifier()
mod.renameNode(node_obj, new_name)

mod.doIt()
assert fn_node.name() == new_name, 'DGModifier.renameNode doIt failed'

mod.undoIt()
assert fn_node.name() == old_name, 'DGModifier.renameNode undo failed'

mod.renameNode(node_obj, 'invalid name')
mod.doIt()
assert fn_node.name() == 'invalid_name', 'DGModifier.renameNode doIt failed with an invalid node name'

nose.tools.assert_raises(
ValueError,
cmdc.DGModifier().renameNode,
node_obj, ''
)

nose.tools.assert_raises(
ValueError,
cmdc.DGModifier().renameNode,
null_obj, 'foobar'
)


def test_setNodeLockState():
"""Test MDGModifier::setNodeLockState."""

Expand Down

0 comments on commit 18dca1a

Please sign in to comment.