Repository navigation
Expand file tree
/
Copy pathgroup_nodes_r26.py
More file actions
68 lines (51 loc) · 1.94 KB
/
Copy pathgroup_nodes_r26.py
File metadata and controls
68 lines (51 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""
Copyright: MAXON Computer GmbH
Author: Manuel Magalhaes
Description:
Retrieve the selected node material and group the node that are selected.
Class/method highlighted:
- MoveToGroup
- IsNodeSelected
"""
import c4d
import maxon
def main():
# Retrieve the selected BaseMaterial
mat = doc.GetActiveMaterial()
if mat is None:
raise ValueError("There is no selected BaseMaterial")
# Retrieve the reference of the material as a node material.
nodeMaterial = mat.GetNodeMaterialReference()
if nodeMaterial is None:
raise ValueError("Cannot retrieve node material reference")
# Retrieve the current node space Id
nodespaceId = c4d.GetActiveNodeSpaceId()
# Retrieve the Nimbus reference for a specific node space
nimbusRef = mat.GetNimbusRef(nodespaceId)
if nimbusRef is None:
raise ValueError("Cannot retrieve the nimbus ref for that node space")
# Retrieve the graph corresponding to that node space.
graph = nimbusRef.GetGraph()
if graph is None:
raise ValueError("Cannot retrieve the graph of this nimbus ref")
# Get the root of the GraphNode
root = graph.GetViewRoot()
# Retrieve all nodes, child of the root node
nodes = []
root.GetChildren(nodes, maxon.NODE_KIND.NODE)
# Create a list of the selected ones.
selectedNodes = []
for node in nodes:
if maxon.GraphModelHelper.IsNodeSelected(node):
selectedNodes.append(node)
# Group all the selected nodes in an empty node.
groupRoot = maxon.GraphNode()
# To modify a graph, modification must be done inside a transaction. After
# modifications are done, the transaction must be committed.
with graph.BeginTransaction() as transaction:
graph.MoveToGroup(groupRoot, maxon.Id("idOfMyGroup"), selectedNodes)
transaction.Commit()
# Pushes an update event to Cinema 4D
c4d.EventAdd()
if __name__ == "__main__":
main()