artisynth.core.modelbase
Class CompositeComponentBase

java.lang.Object
  extended by artisynth.core.modelbase.ModelComponentBase
      extended by artisynth.core.modelbase.CompositeComponentBase
All Implemented Interfaces:
ComponentChangeListener, CompositeComponent, IndexedComponentList, ModelComponent, java.lang.Cloneable, HasProperties, HierarchyNode, Scannable
Direct Known Subclasses:
AuxMaterialBundle, MFreeAuxMaterialBundle, MFreeMuscleBundle, ModelBaseOld, MuscleBundle, RenderableCompositeBase

public class CompositeComponentBase
extends ModelComponentBase
implements CompositeComponent


Nested Class Summary
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.CompositeComponent
CompositeComponent.NavpanelDisplay
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.ModelComponent
ModelComponent.NavpanelVisibility
 
Field Summary
 
Fields inherited from class artisynth.core.modelbase.ModelComponentBase
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, myProps, NULL_OBJ, useCompactPathNames
 
Constructor Summary
CompositeComponentBase()
           
CompositeComponentBase(java.lang.String name)
           
 
Method Summary
 void componentChanged(ComponentChangeEvent e)
          Notifies this composite component that a change has occured within one or more of its descendants.
 CompositeComponentBase copy(int flags, java.util.Map<ModelComponent,ModelComponent> copyMap)
           
 ModelComponent findComponent(java.lang.String path)
          Recursively searches for a sub-component of this ModelComponent, identified by a path of component names.
 ModelComponent get(int idx)
          Returns a specific sub-component of this ModelComponent, identified by index.
 ModelComponent get(java.lang.String nameOrNumber)
          Returns a specific sub-component of this ModelComponent, identified by name or string representation of the sub-component's number
 ModelComponent getByNumber(int num)
          Returns a specific sub-component of this ModelComponent, identified by number.
 java.util.Iterator<? extends HierarchyNode> getChildren()
           
 CompositeComponent.NavpanelDisplay getNavpanelDisplay()
          Returns the DisplayMode for this component.
 int getNumberLimit()
          Returns the current upper limit for numbers among all sub-components in this composite.
 boolean hasChildren()
           
 boolean hasState()
          Returns true if this component has state.
 boolean hierarchyContainsReferences()
          Returns true if the component hierarchy formed by this component and its descendents is closed with respect to references.
 int indexOf(ModelComponent comp)
          Returns the index of a specified sub-component, or -1 if that the component is not present.
 java.util.Iterator<ModelComponent> iterator()
           
 int numComponents()
          Returns the number of components in this CompositeComponent.
 void postscan(java.util.Deque<ScanToken> tokens, CompositeComponent ancestor)
          Performs any required post-scanning for this component.
 void scan(ReaderTokenizer rtok, java.lang.Object ref)
          Scans this element from a ReaderTokenizer.
 void setDisplayMode(CompositeComponent.NavpanelDisplay mode)
          Sets the display mode for this component.
 void updateNameMap(java.lang.String newName, java.lang.String oldName, ModelComponent comp)
          
 
Methods inherited from class artisynth.core.modelbase.ModelComponentBase
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, connectToHierarchy, createTempFlag, disconnectFromHierarchy, getAllPropertyInfo, getGrandParent, getHardReferences, getName, getNameRange, getNavpanelVisibility, getNavpanelVisibility, getNumber, getParent, getProperty, getSoftReferences, isFixed, isMarked, isSelected, isWritable, makeValidName, makeValidName, notifyParentOfChange, printReferences, recursivelyContained, recursivelyContains, removeTempFlag, setFixed, setFlag, setMarked, setName, setNavpanelVisibility, setNavpanelVisibility, setNumber, setParent, setSelected, updateReferences, write
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface artisynth.core.modelbase.ModelComponent
connectToHierarchy, disconnectFromHierarchy, getHardReferences, getName, getNavpanelVisibility, getNumber, getParent, getSoftReferences, isFixed, isMarked, isSelected, notifyParentOfChange, setFixed, setMarked, setName, setNumber, setParent, setSelected, updateReferences
 
Methods inherited from interface maspack.properties.HasProperties
getAllPropertyInfo, getProperty
 
Methods inherited from interface maspack.util.Scannable
isWritable, write
 

Constructor Detail

CompositeComponentBase

public CompositeComponentBase(java.lang.String name)

CompositeComponentBase

public CompositeComponentBase()
Method Detail

getChildren

public java.util.Iterator<? extends HierarchyNode> getChildren()
Specified by:
getChildren in interface HierarchyNode
Overrides:
getChildren in class ModelComponentBase

iterator

public java.util.Iterator<ModelComponent> iterator()

hasChildren

public boolean hasChildren()
Specified by:
hasChildren in interface HierarchyNode
Overrides:
hasChildren in class ModelComponentBase

hasState

public boolean hasState()
Description copied from interface: ModelComponent
Returns true if this component has state. Structure change events involving components that have state will cause the current state history of of the system to be cleared.

Specified by:
hasState in interface ModelComponent
Overrides:
hasState in class ModelComponentBase

get

public ModelComponent get(java.lang.String nameOrNumber)
Returns a specific sub-component of this ModelComponent, identified by name or string representation of the sub-component's number

Specified by:
get in interface CompositeComponent
Parameters:
nameOrNumber - name or number of the sub-component
Returns:
named sub-component, or null if the component does not exist.

get

public ModelComponent get(int idx)
Returns a specific sub-component of this ModelComponent, identified by index.

Specified by:
get in interface CompositeComponent
Specified by:
get in interface IndexedComponentList
Parameters:
idx - index of the sub-component
Returns:
indexed sub-component, or null if the component does not exist.

getByNumber

public ModelComponent getByNumber(int num)
Returns a specific sub-component of this ModelComponent, identified by number.

Specified by:
getByNumber in interface CompositeComponent
Parameters:
num - number of the sub-component
Returns:
specified sub-component, or null if the component does not exist.

numComponents

public int numComponents()
Returns the number of components in this CompositeComponent.

Specified by:
numComponents in interface CompositeComponent
Specified by:
numComponents in interface IndexedComponentList
Returns:
number of sub-components

indexOf

public int indexOf(ModelComponent comp)
Returns the index of a specified sub-component, or -1 if that the component is not present.

Specified by:
indexOf in interface CompositeComponent
Returns:
indexed sub-component

findComponent

public ModelComponent findComponent(java.lang.String path)
Recursively searches for a sub-component of this ModelComponent, identified by a path of component names.

Specified by:
findComponent in interface CompositeComponent
Parameters:
path - path leading to the sub-component
Returns:
named sub-component, or null if the component does not exist.

getNumberLimit

public int getNumberLimit()
Returns the current upper limit for numbers among all sub-components in this composite. This is one greater than the maximum sub-component number currently assigned. A value of 0 means that there are no sub-components. This method is useful for creating and sizing arrays whose contents are indexed by component numbers.

Specified by:
getNumberLimit in interface CompositeComponent
Returns:
upper limit for numbers among all sub-components

getNavpanelDisplay

public CompositeComponent.NavpanelDisplay getNavpanelDisplay()
Returns the DisplayMode for this component. This specifies how the component should be displayed in a navigation panel.

Specified by:
getNavpanelDisplay in interface CompositeComponent
Returns:
display mode for this component

setDisplayMode

public void setDisplayMode(CompositeComponent.NavpanelDisplay mode)
Sets the display mode for this component. This controls how the component is displayed in a navigation panel. The default setting is NORMAL.

Parameters:
mode - new display mode

componentChanged

public void componentChanged(ComponentChangeEvent e)
Notifies this composite component that a change has occured within one or more of its descendants. When this occurs, the composite may need to invalidate cached information that depends on the descendants.

This method should propagate the notification up the component hierarchy by calling notifyParentOfChange.

Specified by:
componentChanged in interface ComponentChangeListener
Specified by:
componentChanged in interface CompositeComponent
Parameters:
e - optional argument giving specific information about the change

updateNameMap

public void updateNameMap(java.lang.String newName,
                          java.lang.String oldName,
                          ModelComponent comp)

Specified by:
updateNameMap in interface CompositeComponent

hierarchyContainsReferences

public boolean hierarchyContainsReferences()
Returns true if the component hierarchy formed by this component and its descendents is closed with respect to references. In other words, all components referenced by components within the hierarchy are themselves components within the hierarchy.

In particular, this means that one does not need to search outside the hierarchy when looking for dependencies.

Specified by:
hierarchyContainsReferences in interface CompositeComponent
Returns:
true if this component's hierarchy is closed with respect to references.

scan

public void scan(ReaderTokenizer rtok,
                 java.lang.Object ref)
          throws java.io.IOException
Description copied from class: ModelComponentBase
Scans this element from a ReaderTokenizer. The expected text format is assumed to be compatible with that produced by write.

Specified by:
scan in interface ModelComponent
Specified by:
scan in interface Scannable
Overrides:
scan in class ModelComponentBase
Parameters:
rtok - Tokenizer from which to scan the element
ref - optional reference object which can be used for resolving references to other objects
Throws:
java.io.IOException - if an I/O or formatting error occured

postscan

public void postscan(java.util.Deque<ScanToken> tokens,
                     CompositeComponent ancestor)
              throws java.io.IOException
Description copied from interface: ModelComponent
Performs any required post-scanning for this component. This involves handling any information whose processing was deferred during the scan() method and stored in the token queue. The most common use of this method is to resolve the paths of component references, which may not have been created at the time of the initial scan() call.

Specified by:
postscan in interface ModelComponent
Overrides:
postscan in class ModelComponentBase
Parameters:
tokens - token information that was stored during scan().
ancestor - ancestor component with respect to which reference component paths are defined.
Throws:
java.io.IOException

copy

public CompositeComponentBase copy(int flags,
                                   java.util.Map<ModelComponent,ModelComponent> copyMap)
Overrides:
copy in class ModelComponentBase