artisynth.core.mechmodels
Class MultiPointMuscle

java.lang.Object
  extended by artisynth.core.modelbase.ModelComponentBase
      extended by artisynth.core.mechmodels.Spring
          extended by artisynth.core.mechmodels.PointSpringBase
              extended by artisynth.core.mechmodels.MultiPointSpring
                  extended by artisynth.core.mechmodels.MultiPointMuscle
All Implemented Interfaces:
ExcitationComponent, ForceComponent, ForceEffector, RequiresInitialize, RequiresPrePostAdvance, CopyableComponent, ModelComponent, RenderableComponent, ScalableUnits, java.lang.Cloneable, HasProperties, HierarchyNode, GLRenderable, GLSelectable, HasRenderProps, Renderable, Scannable
Direct Known Subclasses:
MultiPointMuscleVia

public class MultiPointMuscle
extends MultiPointSpring
implements ExcitationComponent


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.mechmodels.MultiPointSpring
myIgnoreCoriolisInJacobian
 
Fields inherited from class artisynth.core.mechmodels.PointSpringBase
useMaterial
 
Fields inherited from class artisynth.core.modelbase.ModelComponentBase
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, NULL_OBJ, useCompactPathNames
 
Fields inherited from interface artisynth.core.modelbase.CopyableComponent
COPY_REFERENCES
 
Fields inherited from interface maspack.render.GLRenderable
TRANSLUCENT, TWO_DIMENSIONAL
 
Constructor Summary
MultiPointMuscle()
           
MultiPointMuscle(java.lang.String name)
           
 
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.
 double computeDFdl(double l, double ldot)
          Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle) with respect to spring length.
 double computeDFdldot(double l, double ldot)
          Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle)with respect to the time derivative of spring length.
 double computeF(double l, double ldot)
          Computes the force magnitude acting along the unit vector from the first to the second particle.
 double computePassiveF(double l, double ldot)
          Computes the force magnitude acting along the unit vector from the first to the second particle with zero excitation.
static MultiPointMuscle createConstant()
           
static MultiPointMuscle createConstant(double maxForce)
           
static MultiPointMuscle createLinear()
           
static MultiPointMuscle createLinear(double maxForce, double maxLen)
           
static MultiPointMuscle createPai()
           
static MultiPointMuscle createPai(double maxForce, double optLen, double maxLen, double ratio)
           
static MultiPointMuscle createPeck()
           
static MultiPointMuscle createPeck(double maxForce, double optLen, double maxLen, double ratio)
           
static MultiPointMuscle createPeck(java.lang.String name, double maxForce, double optLen, double maxLen, double ratio)
           
 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.
 double getExcitation()
          Returns the primary excitation for this component.
 java.awt.Color getExcitationColor()
           
 PropertyMode getExcitationColorMode()
           
 double getExcitationGain(ExcitationComponent ex)
          Gets the gain for an excitation source in this component.
 double getForceNorm()
           
 int getJacobianType()
          Returns a code indicating the matrix type that results when the Jacobian terms of this force effector are added to the solve matrix.
 double getMaxColoredExcitation()
           
 PropertyMode getMaxColoredExcitationMode()
           
 double getNetExcitation()
          Returns the net excitation for this Excitable.
 double getPassiveForceNorm()
           
 float[] getRenderColor()
           
 void getSoftReferences(java.util.List<ModelComponent> refs)
          Appends all soft references for this component to a list.
 void initialize(double t)
          Called from within the model's initialize() method.
 boolean isEnabled()
           
 void prerender(RenderList list)
          Prepare for rendering, and potentially add itself to a list to be drawn by a GLRenderer.
 boolean removeExcitationSource(ExcitationComponent ex)
          Removes an excitation source from this Excitable.
 void resetLengthProps()
          sets the opt length to current muscle length and max length with the original ratio of opt to max length
 void scaleDistance(double s)
          Scales all distance coordinates.
 void scaleMass(double s)
          Scales all mass units.
 void setCombinationRule(ExcitationComponent.CombinationRule rule)
          Sets the rule for combining excitations.
 void setEnabled(boolean enabled)
           
 void setExcitation(double a)
          Sets the primary excitation for this component.
 void setExcitationColor(java.awt.Color color)
           
 void setExcitationColorMode(PropertyMode mode)
           
 boolean setExcitationGain(ExcitationComponent ex, double gain)
          Sets the gain for an excitation source in this component.
 void setMaxColoredExcitation(double excitation)
           
 void setMaxColoredExcitationMode(PropertyMode mode)
           
 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.
 
Methods inherited from class artisynth.core.mechmodels.MultiPointSpring
addPoint, addPoint, addPosJacobian, addSolveBlocks, addVelJacobian, applyForces, clearPassiveSegments, clearPoints, computeSegmentForce, containsPoint, copy, getActiveLength, getActiveLengthDot, getCopyReferences, getHardReferences, getLength, getLengthDot, getPoint, indexOfPoint, isDuplicatable, isSegmentPassive, numPoints, postadvance, preadvance, printPointReferences, removePoint, render, scan, setPoint, setRestLengthFromPoints, setSegmentPassive, updateBounds, updateStructure
 
Methods inherited from class artisynth.core.mechmodels.PointSpringBase
createDefaultMaterial, createRenderProps, getEffectiveMaterial, getMaterial, getMaxForce, getRenderHints, getRenderProps, getRestLength, getSelection, isSelectable, numSelectionQueriesNeeded, setDamping, setLinearMaterial, setMaterial, setMaxForce, setRenderProps, setRestLength, setStiffness
 
Methods inherited from class artisynth.core.modelbase.ModelComponentBase
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, connectToHierarchy, createTempFlag, disconnectFromHierarchy, getChildren, getGrandParent, getName, getNameRange, getNavpanelVisibility, getNavpanelVisibility, getNumber, getParent, getProperty, hasChildren, hasState, isFixed, isMarked, isSelected, isWritable, makeValidName, makeValidName, notifyParentOfChange, postscan, printReferences, recursivelyContained, recursivelyContains, removeTempFlag, 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 artisynth.core.modelbase.ModelComponent
connectToHierarchy, disconnectFromHierarchy, 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

MultiPointMuscle

public MultiPointMuscle()

MultiPointMuscle

public MultiPointMuscle(java.lang.String name)
Method Detail

createConstant

public static MultiPointMuscle createConstant(double maxForce)

createConstant

public static MultiPointMuscle createConstant()

createLinear

public static MultiPointMuscle createLinear(double maxForce,
                                            double maxLen)

createLinear

public static MultiPointMuscle createLinear()

createPai

public static MultiPointMuscle createPai(double maxForce,
                                         double optLen,
                                         double maxLen,
                                         double ratio)

createPai

public static MultiPointMuscle createPai()

createPeck

public static MultiPointMuscle createPeck(double maxForce,
                                          double optLen,
                                          double maxLen,
                                          double ratio)

createPeck

public static MultiPointMuscle createPeck(java.lang.String name,
                                          double maxForce,
                                          double optLen,
                                          double maxLen,
                                          double ratio)

createPeck

public static MultiPointMuscle createPeck()

getExcitationColor

public java.awt.Color getExcitationColor()

setExcitationColor

public void setExcitationColor(java.awt.Color color)

getExcitationColorMode

public PropertyMode getExcitationColorMode()

setExcitationColorMode

public void setExcitationColorMode(PropertyMode mode)

getMaxColoredExcitation

public double getMaxColoredExcitation()

setMaxColoredExcitation

public void setMaxColoredExcitation(double excitation)

getMaxColoredExcitationMode

public PropertyMode getMaxColoredExcitationMode()

setMaxColoredExcitationMode

public void setMaxColoredExcitationMode(PropertyMode mode)

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 MultiPointSpring
Returns:
static information for all exported properties

getExcitation

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

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

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

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)

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.

getRenderColor

public float[] getRenderColor()
Overrides:
getRenderColor in class PointSpringBase

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 PointSpringBase

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

computeF

public double computeF(double l,
                       double ldot)
Computes the force magnitude acting along the unit vector from the first to the second particle. ` * @return force magnitude

Overrides:
computeF in class PointSpringBase
Returns:
force magnitude

computePassiveF

public double computePassiveF(double l,
                              double ldot)
Computes the force magnitude acting along the unit vector from the first to the second particle with zero excitation.

Returns:
force magnitude

computeDFdl

public double computeDFdl(double l,
                          double ldot)
Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle) with respect to spring length.

Overrides:
computeDFdl in class PointSpringBase
Returns:
force magnitude derivative with respect to length

computeDFdldot

public double computeDFdldot(double l,
                             double ldot)
Computes the derivative of spring force magnitude (acting along the unit vector from the first to the second particle)with respect to the time derivative of spring length.

Overrides:
computeDFdldot in class PointSpringBase
Returns:
force magnitude derivative with respect to length time derivative

resetLengthProps

public void resetLengthProps()
sets the opt length to current muscle length and max length with the original ratio of opt to max length


getForceNorm

public double getForceNorm()

getPassiveForceNorm

public double getPassiveForceNorm()

scaleDistance

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

Specified by:
scaleDistance in interface ScalableUnits
Overrides:
scaleDistance in class MultiPointSpring
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
Overrides:
scaleMass in class MultiPointSpring
Parameters:
s - scaling factor

getJacobianType

public int getJacobianType()
Description copied from interface: ForceEffector
Returns a code indicating the matrix type that results when the Jacobian terms of this force effector are added to the solve matrix. This should be a logical or-ing of either Matrix.SYMMETRIC or Matrix.POSITIVE_DEFINITE. The former should be set if adding the Jacobian terms preserves symmetry, and the latter should be set if positive definiteness if preserved. Both should be set if there is no Jacobian for this effector (i.e., the Jacobian methods are not implemented). Matrix types from all the force effectors are logically and-ed together to determine the type for the entire solve matrix.

Specified by:
getJacobianType in interface ForceEffector
Overrides:
getJacobianType in class MultiPointSpring
Returns:
solve matrix type resulting from adding Jacobian terms

isEnabled

public boolean isEnabled()

setEnabled

public void setEnabled(boolean enabled)

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()
Description copied from interface: ExcitationComponent
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