Object Hierarchy | Related C++ Class: PortGroup
PortGroup
v4.0
A portgroup is a group of Port objects
on an Operator. The port group is a
logical grouping of multiple port connections that are normally
scoped by a X3DObject. A single
portgroup can contain both InputPorts
and OutputPorts.
Note: The PortGroup object should not be confused with the Group object.
You can determine the number of port groups defined by an operator
using the Operator.GetNumPortGroups
method and determine the number of ports in a PortGroup using the
Operator.GetNumPortsInGroup
method.
For built-in Operators the port groups
contain all ports that will be connected to parts of the selected
or picked object. For example, when the Twist operator is
applied to a selected object, the operator has ports that read from
the object's local KinematicState
and Geometry and write to the result
object's geometry.
However, for typical Self-Installed Custom Operators, all outputs
and inputs can be in a single PortGroup because the individual
targets for each port are specifically provided at the time of
calls to CustomOperator.AddInputPort
or AddCustomOp. In fact,
the concept of PortGroup can be completely ignored for most custom
operators. However any dynamic input inside an advanced operators
should be in its own PortGroup to permit usage of Operator.ConnectToGroup.
Multiple objects can connect to the same port group, for example,
the loft operator may read from many curves to generate the
resulting mesh. Each of these input curves are connected to the
same port group and each connection is called a port group
instance. You can determine the number of objects connected to a
port group by using Operator.GetNumInstancesInGroup
or PortGroup.InstanceCount.
Use SIObject.Parent to get the
Operator for this PortGroup and SIObject.Name to get the name of this port
group.
From the port you can determine which port group a port belongs to
using the Port.GroupName or
Port.GroupIndex properties. You
can determine which port group instance a port belongs to using the
Port.GroupInstance
property.
Application | Categories | Filter | Flags |
FullName | Help | Index | InstanceCount |
Max | Min | Name | NestedObjects |
Origin | OriginPath | Parent | PickPrompt |
Ports | Type | ||
/* This example illustrates how to browse the port groups of an operator. */ NewScene( null, false ); CreatePrim( "Cylinder", "MeshSurface" ); var op = ApplyOp( "Shear", "cylinder", 3, siPersistentOperation )(0); dump_portgroups(op); function dump_portgroups(op) { if ( ! op.BelongsTo("Operators") ) return; var ePortGroups = new Enumerator( op.PortGroups ); for ( ; ! ePortGroups.atEnd(); ePortGroups.moveNext() ) { var portgroup = ePortGroups.item(); var str = ""; str += "group name: " + portgroup.Name; str += ", type: " + portgroup.Type; str += ", parent: " + portgroup.Parent; str += ", index: " + portgroup.Index; str += ", flags: " + portgroup.Flags; str += ", min: " + portgroup.Min; str += ", max: " + portgroup.Max; str += ", filter: " + portgroup.Filter; str += ", pickprompt: " + portgroup.PickPrompt; str += ", optional: " + portgroup.IsOptional(); str += ", branchgroup: " + portgroup.SupportsBranchGroup(); Application.LogMessage( str ); var ePorts = new Enumerator( portgroup.Ports ); for ( ; ! ePorts.atEnd(); ePorts.moveNext() ) { var port = ePorts.item(); dump_port(port); } } } function dump_port(port) { var str = ""; str += "port name: " + port.Name; str += ", type: " + port.Type; str += ", porttype: " + port.PortType; str += ", connected: " + port.IsConnected; if ( port.IsConnected) str += ", target: " + port.Target2; str += ", parent: " + port.Parent; str += ", index: " + port.Index; str += ", flags: " + port.Flags; if ( port.Type == "InputPort" ) str += ", optional: " + port.Optional; if ( port.type == "OutputPort" ) str += ", created: " + port.Created; str += ", branchgroup: " + port.BranchGroup; str += ", groupname: " + port.GroupName; str += ", groupindex: " + port.GroupIndex; str += ", groupinstance: " + port.GroupInstance; Application.LogMessage( str ); } // Expected result: //INFO : group name: Group_0, type: PortGroup, parent: cylinder.polymsh.shearop, index: 0, flags: 513, min: 1, max: 1, filter: DeformableComponent, pickprompt: Deformation Value, optional: false, branchgroup: true //INFO : port name: Port_0, type: InputPort, porttype: 0, connected: false, parent: cylinder.polymsh.shearop, index: 0, flags: 1026, optional: false, branchgroup: true, groupname: Group_0, groupindex: 0, groupinstance: -1 //INFO : port name: Port_2, type: InputPort, porttype: 0, connected: false, parent: cylinder.polymsh.shearop, index: 1, flags: 1088, optional: false, branchgroup: true, groupname: Group_0, groupindex: 0, groupinstance: -1 //INFO : port name: Port_3, type: InputPort, porttype: 0, connected: false, parent: cylinder.polymsh.shearop, index: 2, flags: 64, optional: false, branchgroup: false, groupname: Group_0, groupindex: 0, groupinstance: -1 //INFO : port name: Port_4, type: InputPort, porttype: 0, connected: false, parent: cylinder.polymsh.shearop, index: 3, flags: 24, optional: true, branchgroup: false, groupname: Group_0, groupindex: 0, groupinstance: -1 //INFO : port name: Port_5, type: InputPort, porttype: 0, connected: false, parent: cylinder.polymsh.shearop, index: 4, flags: 24, optional: true, branchgroup: false, groupname: Group_0, groupindex: 0, groupinstance: -1 //INFO : port name: Port_1, type: OutputPort, porttype: 1, connected: false, parent: cylinder.polymsh.shearop, index: 5, flags: 525313, created: false, branchgroup: true, groupname: Group_0, groupindex: 0, groupinstance: -1 //INFO : group name: Group_1, type: PortGroup, parent: cylinder.polymsh.shearop, index: 1, flags: 128, min: 0, max: 1, filter: , pickprompt: , optional: true, branchgroup: false //INFO : port name: Port_0, type: InputPort, porttype: 0, connected: false, parent: cylinder.polymsh.shearop, index: 0, flags: 24, optional: true, branchgroup: false, groupname: Group_1, groupindex: 1, groupinstance: -1 |