Hi,
you have the function CreateInputPort that will help you to create that port.
You could use this code #addedPort = groupRoot.GetInputs().AddPort("newID")
The difference is that the port will be identified only with the ID you passe as the argument of AddPort. CreateInputPort will create for you a hash and will add it to the port's ID creating something like passedID@Hashxxxxxx
There is no type as the port is just streaming the data. As you can still specify the data using the Resource editor, i will ask the dev if you can do it programmatically to force the type of the port.
Here an example that will group the selected nodes in the selected material and add an input port to the group.
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.GetRoot()
# Retrieve all nodes, child of the root node
nodes = []
root.GetChildren(nodes, maxon.NODE_KIND.NODE)
# Create a list of the selected ones.
selectedNodes = []
maxon.GraphModelHelper.GetSelectedNodes(graph, maxon.NODE_KIND.NODE, selectedNodes)
# 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:
groupRoot = graph.MoveToGroup(groupRoot, maxon.Id("idOfMyGroup"), selectedNodes)
maxon.GraphModelHelper.CreateInputPort(groupRoot, "someid", "new port name")
transaction.Commit()
# Pushes an update event to Cinema 4D
c4d.EventAdd()
if __name__ == "__main__":
main()
Cheers,
Manuel