artisynth.core.femmodels
Class MuscleElementDesc

java.lang.Object
  extended by artisynth.core.modelbase.ModelComponentBase
      extended by artisynth.core.modelbase.RenderableComponentBase
          extended by artisynth.core.femmodels.MuscleElementDesc
All Implemented Interfaces:
AuxiliaryMaterial, ExcitationComponent, RequiresInitialize, ModelComponent, RenderableComponent, ScalableUnits, TransformableGeometry, java.lang.Cloneable, HasProperties, HierarchyNode, GLRenderable, GLSelectable, HasRenderProps, Renderable, Clonable, Scannable

public class MuscleElementDesc
extends RenderableComponentBase
implements AuxiliaryMaterial, ExcitationComponent, ScalableUnits, TransformableGeometry

A class wrapping the description of each FEM element belonging to a MuscleBundle. It implements the AuxiliaryMaterial required to effect muscle activation within the element, and contains the element-specific muscle direction information.


Nested Class Summary
 
Nested classes/interfaces inherited from interface artisynth.core.mechmodels.ExcitationComponent
ExcitationComponent.CombinationRule
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.ModelComponent
ModelComponent.NavpanelVisibility
 
Field Summary
static PropertyList myProps
           
 
Fields inherited from class artisynth.core.modelbase.ModelComponentBase
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, NULL_OBJ, useCompactPathNames
 
Fields inherited from interface artisynth.core.util.TransformableGeometry
ARTICULATED, SIMULATING
 
Fields inherited from interface maspack.render.GLRenderable
TRANSLUCENT, TWO_DIMENSIONAL
 
Constructor Summary
MuscleElementDesc()
           
MuscleElementDesc(FemElement3d elem, Vector3d dir)
           
 
Method Summary
 void addExcitationSource(ExcitationComponent ex)
          Adds a new excitation source to this Excitable, with an assumed gain of 1.
 void addExcitationSource(ExcitationComponent ex, double gain)
          Adds a new excitation source to this Excitable with a specified gain.
 void computeStress(SymmetricMatrix3d sigma, SolidDeformation def, IntegrationPoint3d pt, IntegrationData3d dt, FemMaterial baseMat)
           
 void computeTangent(Matrix6d D, SymmetricMatrix3d stress, SolidDeformation def, IntegrationPoint3d pt, IntegrationData3d dt, FemMaterial baseMat)
           
 void connectToHierarchy()
          Called by the system after this component is added to the component hierarchy (i.e., when it is added as a child of another CompositeComponent).
 void disconnectFromHierarchy()
          Called by the system after this component is removed from the component hierarchy (i.e., when it is removed as a child of its parent).
 PropertyList getAllPropertyInfo()
          Returns a list giving static information about all properties exported by this object.
 ExcitationComponent.CombinationRule getCombinationRule()
          Return the combination rule for excitations.
 double getDefaultActivationWeight()
          Returns the default weight that should be used when this excitation component is being used for inverse actuation control.
 Vector3d getDirection()
           
 Vector3d[] getDirections()
           
 FemElement3d getElement()
           
 double getExcitation()
          Returns the primary excitation for this component.
 double getExcitationGain(ExcitationComponent ex)
          Gets the gain for an excitation source in this component.
 MuscleMaterial getMuscleMaterial()
           
 double getNetExcitation()
          Returns the net excitation for this Excitable.
 void getSoftReferences(java.util.List<ModelComponent> refs)
          Appends all soft references for this component to a list.
 boolean hasSymmetricTangent()
           
 void initialize(double t)
          Called from within the model's initialize() method.
 void interpolateDirection(DelaunayInterpolator interp, Vector3d[] restDirs)
           
 boolean isInvertible()
           
 void prerender(RenderList list)
          Prepare for rendering, and potentially add itself to a list to be drawn by a GLRenderer.
 void printElementReference(java.io.PrintWriter pw, CompositeComponent ancestor)
           
 boolean removeExcitationSource(ExcitationComponent ex)
          Removes an excitation source from this Excitable.
 void render(GLRenderer renderer, int flags)
          Render this object using Open GL via the JOGL.
 void scaleDistance(double s)
          Scales all distance coordinates.
 void scaleMass(double s)
          Scales all mass units.
 boolean scanItem(ReaderTokenizer rtok, java.util.Deque<ScanToken> tokens)
           
 void setCombinationRule(ExcitationComponent.CombinationRule rule)
          Sets the rule for combining excitations.
 void setDirection(Vector3d dir)
           
 void setDirections(Vector3d[] dirs)
          Sets a list of directions for this MuscleElementDesc, one for each integration point in the element.
 void setElement(FemElement3d elem)
           
 void setExcitation(double a)
          Sets the primary excitation for this component.
 boolean setExcitationGain(ExcitationComponent ex, double gain)
          Sets the gain for an excitation source in this component.
 void setMuscleMaterial(MuscleMaterial mat)
           
 void transformGeometry(AffineTransform3dBase X)
          Applies an affine transformation to the geometry of this object.
 void transformGeometry(AffineTransform3dBase X, TransformableGeometry topObject, int flags)
          Applies an affine transformation to the geometry of this object.
 void updateBounds(Point3d pmin, Point3d pmax)
          Update the minimum and maximum points for this object.
 void updateReferences(boolean undo, java.util.Deque<java.lang.Object> undoInfo)
          May be called by the system if any of the soft references for this component are removed from the the component hierarchy.
 void writeItems(java.io.PrintWriter pw, NumberFormat fmt, CompositeComponent ancestor)
           
 
Methods inherited from class artisynth.core.modelbase.RenderableComponentBase
copy, createRenderProps, getRenderHints, getRenderProps, getSelection, isSelectable, numSelectionQueriesNeeded, setRenderProps, updateRenderProps
 
Methods inherited from class artisynth.core.modelbase.ModelComponentBase
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, createTempFlag, getChildren, getGrandParent, getHardReferences, getName, getNameRange, getNavpanelVisibility, getNavpanelVisibility, getNumber, getParent, getProperty, hasChildren, hasState, isFixed, isMarked, isSelected, isWritable, makeValidName, makeValidName, notifyParentOfChange, postscan, printReferences, recursivelyContained, recursivelyContains, removeTempFlag, scan, setFixed, setFlag, setMarked, setName, setNavpanelVisibility, setNavpanelVisibility, setNumber, setParent, setSelected, write
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface maspack.util.Clonable
clone
 
Methods inherited from interface artisynth.core.modelbase.ModelComponent
getHardReferences, getName, getNavpanelVisibility, getNumber, getParent, hasState, isFixed, isMarked, isSelected, notifyParentOfChange, postscan, scan, setFixed, setMarked, setName, setNumber, setParent, setSelected
 
Methods inherited from interface maspack.properties.HasProperties
getProperty
 
Methods inherited from interface maspack.properties.HierarchyNode
getChildren, hasChildren
 
Methods inherited from interface maspack.util.Scannable
isWritable, write
 

Field Detail

myProps

public static PropertyList myProps
Constructor Detail

MuscleElementDesc

public MuscleElementDesc()

MuscleElementDesc

public MuscleElementDesc(FemElement3d elem,
                         Vector3d dir)
Method Detail

getAllPropertyInfo

public PropertyList getAllPropertyInfo()
Description copied from interface: HasProperties
Returns a list giving static information about all properties exported by this object.

Specified by:
getAllPropertyInfo in interface HasProperties
Overrides:
getAllPropertyInfo in class ModelComponentBase
Returns:
static information for all exported properties

setDirection

public void setDirection(Vector3d dir)

getDirection

public Vector3d getDirection()

setDirections

public void setDirections(Vector3d[] dirs)
Sets a list of directions for this MuscleElementDesc, one for each integration point in the element. This will override the single per-element direction specified by setDirection(maspack.matrix.Vector3d). If a particular direction is null, then no stress will be applied at the corresponding integration point. Supplying a null value for dirs will disable per-integration point directions.


getDirections

public Vector3d[] getDirections()

getMuscleMaterial

public MuscleMaterial getMuscleMaterial()

setMuscleMaterial

public void setMuscleMaterial(MuscleMaterial mat)

isInvertible

public boolean isInvertible()
Specified by:
isInvertible in interface AuxiliaryMaterial

getExcitation

public double getExcitation()
Returns the primary excitation for this component.

Specified by:
getExcitation in interface ExcitationComponent
Returns:
primary excitation value

initialize

public void initialize(double t)
Called from within the model's initialize() method.

Specified by:
initialize in interface RequiresInitialize
Parameters:
t - initialization time (seconds)

setExcitation

public void setExcitation(double a)
Sets the primary excitation for this component.

Specified by:
setExcitation in interface ExcitationComponent
Parameters:
a - excitation value

setCombinationRule

public void setCombinationRule(ExcitationComponent.CombinationRule rule)
Sets the rule for combining excitations.

Specified by:
setCombinationRule in interface ExcitationComponent
Parameters:
rule - rule for combining excitations

getCombinationRule

public ExcitationComponent.CombinationRule getCombinationRule()
Return the combination rule for excitations.

Specified by:
getCombinationRule in interface ExcitationComponent
Returns:
combination rule for excitations

addExcitationSource

public void addExcitationSource(ExcitationComponent ex)
Adds a new excitation source to this Excitable, with an assumed gain of 1.

Specified by:
addExcitationSource in interface ExcitationComponent
Parameters:
ex - excitatation source to be added

addExcitationSource

public void addExcitationSource(ExcitationComponent ex,
                                double gain)
Adds a new excitation source to this Excitable with a specified gain.

Specified by:
addExcitationSource in interface ExcitationComponent
Parameters:
ex - excitatation source to be added
gain - gain for the source

removeExcitationSource

public boolean removeExcitationSource(ExcitationComponent ex)
Removes an excitation source from this Excitable. Returns false if the source was not present.

Specified by:
removeExcitationSource in interface ExcitationComponent
Parameters:
ex - excitatation source to be removed
Returns:
true if the source was present and removed

getExcitationGain

public double getExcitationGain(ExcitationComponent ex)
Gets the gain for an excitation source in this component.

Specified by:
getExcitationGain in interface ExcitationComponent
Parameters:
ex - excitatation source whose gain is to be queried
Returns:
source gain value, or -1 if the source is not present in this component.

setExcitationGain

public boolean setExcitationGain(ExcitationComponent ex,
                                 double gain)
Sets the gain for an excitation source in this component.

Specified by:
setExcitationGain in interface ExcitationComponent
Parameters:
ex - excitatation source whose gain is to be modified
gain - new gain for the source
Returns:
false if the source is not present in this component.

getNetExcitation

public double getNetExcitation()
Returns the net excitation for this Excitable. The net excitation is the combination of the primary excitation and the net excitations of all the excitation sources.

Specified by:
getNetExcitation in interface ExcitationComponent

getSoftReferences

public void getSoftReferences(java.util.List<ModelComponent> refs)
Appends all soft references for this component to a list. References are other components, outside of this component's immediate ancestry, on which this component depends. For example, an ExcitationComponent may refer to one or more other ExcitationComponents to act as excitation sources. A soft reference is one which can be removed from the referring component. In particular, if any soft references for a component are deleted, then that component's updateReferences() method will be called to update its internal reference information.

Specified by:
getSoftReferences in interface ModelComponent
Overrides:
getSoftReferences in class ModelComponentBase
Parameters:
refs - list to which soft references are appended

updateReferences

public void updateReferences(boolean undo,
                             java.util.Deque<java.lang.Object> undoInfo)
May be called by the system if any of the soft references for this component are removed from the the component hierarchy. If called with undo equal to false, this component should then examine its soft references and use ComponentUtils.isConnected() to determine which of them have been disconnected from the hierarchy. Disconnected references should be removed, and sufficient information should be appended to undoInfo to allow this update to be undone if this method is called later with undo equal to true. When undoing an update, the undo information should be removed from the front of undoInfo.

Specified by:
updateReferences in interface ModelComponent
Overrides:
updateReferences in class ModelComponentBase
Parameters:
undo - if true, indicates that the most recent reference update should be undone, using the supplied undo information.
undoInfo - if undo is false, should be used to store information allowing the reference update to be undone. Otherwise, if undo is true, then this supplied information to undo the most recent update.

getDefaultActivationWeight

public double getDefaultActivationWeight()
Returns the default weight that should be used when this excitation component is being used for inverse actuation control.

Specified by:
getDefaultActivationWeight in interface ExcitationComponent

updateBounds

public void updateBounds(Point3d pmin,
                         Point3d pmax)
Description copied from interface: GLRenderable
Update the minimum and maximum points for this object. In an x-y-z coordinate system with x directed to the right and y directed upwards, the minimum and maximum points can be thought of as defining the left-lower-far and right-upper-near corners of a bounding cube. This method should only reduce the elements of the minimum point and increase the elements of the maximum point, since it may be used as part of an iteration to determine the bounding cube for several different objects.

Specified by:
updateBounds in interface GLRenderable
Overrides:
updateBounds in class RenderableComponentBase
Parameters:
pmin - minimum point
pmax - maximum point

prerender

public void prerender(RenderList list)
Description copied from interface: GLRenderable
Prepare for rendering, and potentially add itself to a list to be drawn by a GLRenderer.

Specified by:
prerender in interface GLRenderable
Overrides:
prerender in class RenderableComponentBase

render

public void render(GLRenderer renderer,
                   int flags)
Description copied from interface: GLRenderable
Render this object using Open GL via the JOGL.

Specified by:
render in interface GLRenderable
Specified by:
render in class RenderableComponentBase
Parameters:
renderer - renderer object which is used to perform the rendering. Provides pointers to GL and GLU, along with helper functions.
flags - supplies flags that may be used to control different aspects of the rendering. Flags are defined in GLRenderer and currently include GLRenderer.SELECTED, GLRenderer.VERTEX_COLORING, GLRenderer.HSV_COLOR_INTERPOLATION, GLRenderer.SORT_FACES, and GLRenderer.CLEAR_MESH_DISPLAY_LISTS.

computeTangent

public void computeTangent(Matrix6d D,
                           SymmetricMatrix3d stress,
                           SolidDeformation def,
                           IntegrationPoint3d pt,
                           IntegrationData3d dt,
                           FemMaterial baseMat)
Specified by:
computeTangent in interface AuxiliaryMaterial

computeStress

public void computeStress(SymmetricMatrix3d sigma,
                          SolidDeformation def,
                          IntegrationPoint3d pt,
                          IntegrationData3d dt,
                          FemMaterial baseMat)
Specified by:
computeStress in interface AuxiliaryMaterial

hasSymmetricTangent

public boolean hasSymmetricTangent()
Specified by:
hasSymmetricTangent in interface AuxiliaryMaterial

interpolateDirection

public void interpolateDirection(DelaunayInterpolator interp,
                                 Vector3d[] restDirs)

getElement

public FemElement3d getElement()

setElement

public void setElement(FemElement3d elem)

transformGeometry

public void transformGeometry(AffineTransform3dBase X)
Description copied from interface: TransformableGeometry
Applies an affine transformation to the geometry of this object. This method should be equivalent to
 transformGeometry (X, this, 0);
 

Specified by:
transformGeometry in interface TransformableGeometry
Parameters:
X - affine transformation

transformGeometry

public void transformGeometry(AffineTransform3dBase X,
                              TransformableGeometry topObject,
                              int flags)
Description copied from interface: TransformableGeometry
Applies an affine transformation to the geometry of this object. If recursively invoked within a component hierarchy, then topComponent should be the component for which the method was initially invoked. The variable flags provides information about the context in which the transformation is being applied. At present, the available flags are TransformableGeometry.SIMULATING and TransformableGeometry.ARTICULATED.

Specified by:
transformGeometry in interface TransformableGeometry
Parameters:
X - affine transformation
topObject - component on which the method was initially invoked
flags - provides information about the context in which the transformation is being applied.

scaleDistance

public void scaleDistance(double s)
Description copied from interface: ScalableUnits
Scales all distance coordinates.

Specified by:
scaleDistance in interface ScalableUnits
Parameters:
s - scaling factor

scaleMass

public void scaleMass(double s)
Description copied from interface: ScalableUnits
Scales all mass units.

Specified by:
scaleMass in interface ScalableUnits
Parameters:
s - scaling factor

connectToHierarchy

public void connectToHierarchy()
Description copied from class: ModelComponentBase
Called by the system after this component is added to the component hierarchy (i.e., when it is added as a child of another CompositeComponent). This method is responsible for doing any required hierarchy-dependent initialization.

When this method is called, ModelComponent.getParent() will return the new parent component; the system will have set this beforehand.

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

disconnectFromHierarchy

public void disconnectFromHierarchy()
Description copied from class: ModelComponentBase
Called by the system after this component is removed from the component hierarchy (i.e., when it is removed as a child of its parent). This method is responsible for any required hierarchy-dependent deinitialization.

When this method is called, ModelComponent.getParent() will still return this original parent component; the system will set this to null after.

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

printElementReference

public void printElementReference(java.io.PrintWriter pw,
                                  CompositeComponent ancestor)
                           throws java.io.IOException
Throws:
java.io.IOException

scanItem

public boolean scanItem(ReaderTokenizer rtok,
                        java.util.Deque<ScanToken> tokens)
                 throws java.io.IOException
Throws:
java.io.IOException

writeItems

public void writeItems(java.io.PrintWriter pw,
                       NumberFormat fmt,
                       CompositeComponent ancestor)
                throws java.io.IOException
Throws:
java.io.IOException