FBPlug - Object Connection Management

FBPlug - The Connection Management Base Class.

The FBPlug class is the base class of FBComponent and FBProperty. The FBPlug class is responsible for managing the connections among components and properties. There are two types of connections:

Component-Property Connection

Component-Property connections define the state and behavior of a component through its properties. A component owns a list of properties, as described in FBProperty - Object Properties. The following figure describes the owned/owner relationship between an FBComponent and its FBProperty.

The FBProperty "p" is owned by the FBComponent "c". It is accessed via FBPlug.GetOwned().

# Assume that FBProperty p is indexed at 0.
p = c.GetOwned(0)

The FBComponent "c" is the owner of FBProperty "p". It is accessed via FBPlug.GetOwner().

# An FBProperty can only have one owner, so there is no index required.
c = p.GetOwner()

Component-Component Connection

Component-Component connections allow for components to be organized in a parent-child hierarchy. Such a hierarchy is present in the scene graph organization (see Scene Elements). The following figure describes the source/destination relationship between two instances of FBComponent.

The FBComponent "child" is the source of the FBComponent "parent". It is accessible via FBPlug.GetSrc().

# Assume that FBComponent child is indexed at 0.
child = parent.GetSrc(0)

The FBComponent "parent" is the destination of the FBComponent "child". It is accessible via FBPlug.GetDst().

# Assume that FBComponent parent is indexed at 0.
parent = child.GetDst(0)

Connection Example

The diagram below illustrates the source-destination relationships among components, and the owned-owner relationships among components and properties.

Accessing the source components of c0.

# Assume c1 is indexed at 0.
c1 = c0.GetSrc(0)

# Assume c2 is indexed at 1.
c2 = c0.GetSrc(1)

Accessing the owned property of c0.

p0 = c0.GetOwned(0)

Accessing the destination component of c2.

c0 = c2.GetDst(0)

Accessing the property p4 from property p1.

# A property can only have one owner.
c1 = p1.GetOwner()

# Assume c0 is indexed at 0.
c0 = c1.GetDst(0)

# Assume c2 is indexed at 1.
c2 = c0.GetSrc(1)

# Assume p4 is indexed at 2.
p4 = c2.GetOwned(2)

Inspecting an FBModel's Connections

Click on a model in the scene to select it, and run the program below. It will output all the connections of the selected FBModel in the scene.

from pyfbsdk import *


###############################################################
# Helper Function(s).                                         #
###############################################################

# Print the class and object name of the FBPlug.
def printPlug(pPlug):
    try:
        print pPlug.ClassName() + ": " + pPlug.LongName
    except:
        pass

# Print the sources of the plug.
def printSources(pPlug):
    print "Source Components: "
    print "-----------------------"
    numSrc = pPlug.GetSrcCount()
    for i in range(0, numSrc):
        printPlug(pPlug.GetSrc(i))
    print ""

# Print the destinations of the plug.
def printDestinations(pPlug):
    print "Destination Components: "
    print "-----------------------"
    numDst = pPlug.GetDstCount()
    for i in range(0, numDst):
        printPlug(pPlug.GetDst(i))
    print ""

# Print the owned properties of the component.
def printOwned(pPlug):
    print "Owned Properties: "
    print "-----------------------"
    numOwned = pPlug.GetOwnedCount()
    for i in range(0, numOwned):
        printPlug(pPlug.GetOwned(i))
    print ""

# Print the owner of the property.
def printOwner(pPlug):
    print "Owner Component: "
    print "-----------------------"
    printPlug(pPlug.GetOwner())

# Inspect the plug.
def inspectConnections(pPlug):
    print "Plug inspected: " + pPlug.LongName + ' (' + pPlug.ClassName() + ')\n'    
    printSources(pPlug)
    printDestinations(pPlug)    
    printOwned(pPlug)
    printOwner(pPlug)



###############################################################
# Main.                                                       #
###############################################################

# Inspect the selected models.
models = FBModelList()
FBGetSelectedModels(models)
for model in models:
    inspectConnections(model)