public class PointForce extends ModelComponentBase implements RenderableComponent, ScalableUnits, ForceComponent, TransformableGeometry, CopyableComponent
ModelComponent.FilePathSaveType, ModelComponent.NavpanelVisibility| Modifier and Type | Field and Description | 
|---|---|
| static double | DEFAULT_AXIS_RADIUS_RATIO | 
| static double | DEFAULT_FORCE_SCALING | 
| static double | DEFAULT_LENGTH_FORCE_RATIO | 
| static boolean | DEFAULT_RENDER_OUTWARD | 
| static PropertyList | myProps | 
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, NULL_OBJ, useCompactPathNamesTRANSPARENT, TWO_DIMENSIONALTG_ARTICULATED, TG_DRAGGER, TG_PRESERVE_ORIENTATION, TG_SIMULATINGCOPY_REFERENCES, REST_POSITION| Constructor and Description | 
|---|
| PointForce() | 
| PointForce(Point p) | 
| PointForce(java.lang.String name) | 
| PointForce(Vector3d f,
          Point p) | 
| Modifier and Type | Method and Description | 
|---|---|
| void | addPosJacobian(SparseNumberedBlockMatrix M,
              double s)Scales the components of the position Jacobian associated with this force
 effector and adds it to the supplied solve matrix M. | 
| void | addSolveBlocks(SparseNumberedBlockMatrix M)Adds any needed blocks to a solve matrix in order to accomodate the
 Jacobian terms associated with this force effector. | 
| void | addTransformableDependencies(TransformGeometryContext context,
                            int flags)Adds to  contextany transformable components which should be
 transformed as the same time as this component. | 
| void | addVelJacobian(SparseNumberedBlockMatrix M,
              double s)Scales the components of the velocity Jacobian associated with this force
 effector and adds it to the supplied solve matrix M. | 
| void | applyForces(double t)Adds forces to the components affected by this force effector at a
 particular time. | 
| ModelComponent | copy(int flags,
    java.util.Map<ModelComponent,ModelComponent> copyMap)Create a copy of this component. | 
| RenderProps | createRenderProps()Factory method to create render properties appropriate to this object. | 
| PropertyList | getAllPropertyInfo()Returns a list giving static information about all properties exported by
 this object. | 
| double | getAxisLength() | 
| double | getAxisRadiusRatio() | 
| boolean | getCopyReferences(java.util.List<ModelComponent> refs,
                 ModelComponent ancestor)Collects external references which must also be copied in order to
 duplicate this component. | 
| Vector3d | getDirection() | 
| Vector3d | getForce() | 
| double | getForceLengthRatio() | 
| double | getForceScaling() | 
| void | getHardReferences(java.util.List<ModelComponent> refs)Appends all hard references for this component to a list. | 
| 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 | getMagnitude() | 
| Point | getPoint() | 
| int | getRenderHints()Returns a bit code giving rendering hints about this renderable. | 
| boolean | getRenderOutward() | 
| RenderProps | getRenderProps()Returns the render properities for this object. | 
| void | getSelection(java.util.LinkedList<java.lang.Object> list,
            int qid)Append to  listthe component (or components) associated with
 theqid-th selection query issued by this component's render
 method. | 
| boolean | isDuplicatable()Returns true if this component can be duplicated. | 
| boolean | isSelectable()Returns true if this object is in fact selectable. | 
| int | numSelectionQueriesNeeded()If this selectable manages its own selection (by issuing selection
 queries within its  rendermethod), then this method should
 return the maximum number of selection queries that will be
 required. | 
| void | prerender(RenderList list)Called prior to rendering to allow this object to update the internal
 state required for rendering (such as by caching rendering coordinates). | 
| void | render(Renderer renderer,
      int flags)Render this object using the functionality of the supplied
  Renderer. | 
| void | scaleDistance(double s)Scales all distance coordinates. | 
| void | scaleMass(double s)Scales all mass units. | 
| void | scan(ReaderTokenizer rtok,
    java.lang.Object ref)Scans this element from a ReaderTokenizer. | 
| void | setAxisLength(double len) | 
| void | setAxisRadiusRatio(double r) | 
| void | setDirection(Vector3d dir) | 
| void | setForce(Vector3d f) | 
| void | setForceLengthRatio(double r) | 
| void | setForceScaling(double forceScaling) | 
| void | setMagnitude(double mag) | 
| void | setPoint(Point pnt) | 
| void | setRenderOutward(boolean enable) | 
| void | setRenderProps(RenderProps props)Assigns a new set of render properties to this object. | 
| void | transformGeometry(AffineTransform3dBase X)Applies an affine transformation to the geometry of this component. | 
| void | transformGeometry(GeometryTransformer gtr,
                 TransformGeometryContext context,
                 int flags)Transforms the geometry of this component, using the geometry transformer
  gtrto transform its individual attributes. | 
| void | updateBounds(Vector3d pmin,
            Vector3d pmax)Update the minimum and maximum points for this object. | 
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, connectToHierarchy, createTempFlag, disconnectFromHierarchy, getChildren, getGrandParent, getName, getNameRange, getNavpanelVisibility, getNavpanelVisibility, getNumber, getParent, getProperty, getSoftReferences, hasChildren, hasState, isFixed, isMarked, isScanning, isSelected, isWritable, makeValidName, makeValidName, notifyParentOfChange, postscan, printReferences, recursivelyContained, recursivelyContains, removeTempFlag, setFixed, setFlag, setMarked, setName, setNavpanelVisibility, setNavpanelVisibility, setNumber, setParent, setScanning, setSelected, setWritable, updateReferences, writeequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waittransformPriorityconnectToHierarchy, disconnectFromHierarchy, getName, getNavpanelVisibility, getNumber, getParent, getSoftReferences, hasState, isFixed, isMarked, isSelected, notifyParentOfChange, setFixed, setMarked, setName, setNumber, setParent, setSelected, setWritable, updateReferencesgetPropertygetChildren, hasChildrenpostscanisWritable, writepublic static boolean DEFAULT_RENDER_OUTWARD
public static double DEFAULT_LENGTH_FORCE_RATIO
public static double DEFAULT_AXIS_RADIUS_RATIO
public static double DEFAULT_FORCE_SCALING
public static PropertyList myProps
public PointForce()
public PointForce(java.lang.String name)
public PointForce(Point p)
public PropertyList getAllPropertyInfo()
HasPropertiesgetAllPropertyInfo in interface HasPropertiesgetAllPropertyInfo in class ModelComponentBasepublic Point getPoint()
public void setPoint(Point pnt)
public void applyForces(double t)
ForceEffectorapplyForces in interface ForceEffectort - time (seconds)public void scan(ReaderTokenizer rtok, java.lang.Object ref) throws java.io.IOException
ModelComponentBasewrite.scan in interface ModelComponentscan in interface Scannablescan in class ModelComponentBasertok - Tokenizer from which to scan the elementref - optional reference object which can be used for resolving references to
 other objectsjava.io.IOException - if an I/O or formatting error occuredpublic RenderProps getRenderProps()
HasRenderPropsgetRenderProps in interface HasRenderPropspublic void setRenderProps(RenderProps props)
HasRenderPropsnull will remove render properties from this object.setRenderProps in interface HasRenderPropsprops - new render properties for this objectpublic RenderProps createRenderProps()
HasRenderPropscreateRenderProps in interface HasRenderPropspublic void prerender(RenderList list)
IsRenderablelist.addIfVisible (obj);
for each of the objects in question.prerender in interface IsRenderablelist - list of objects to be renderedpublic void updateBounds(Vector3d pmin, Vector3d pmax)
IsRenderableupdateBounds in interface IsRenderablepmin - minimum pointpmax - maximum pointpublic int getRenderHints()
IsRenderableTRANSPARENT and
 TWO_DIMENSIONAL.getRenderHints in interface IsRenderablepublic boolean isSelectable()
IsSelectableisSelectable in interface IsSelectablepublic int numSelectionQueriesNeeded()
IsSelectablerender method), then this method should
 return the maximum number of selection queries that will be
 required. Otherwise, this method should return -1.numSelectionQueriesNeeded in interface IsSelectablepublic void render(Renderer renderer, int flags)
IsRenderableRenderer.render in interface IsRenderablerenderer - provides the functionality used to perform the rendering.flags - flags that may be used to control different 
 aspects of the rendering. Flags are defined in Renderer
 and currently include
 Renderer.HIGHLIGHT and
 Renderer.SORT_FACES.public void getSelection(java.util.LinkedList<java.lang.Object> list,
                         int qid)
IsSelectablelist the component (or components) associated with
 the qid-th selection query issued by this component's render
 method. This will only be called if this component manages its own
 selection (i.e., the number nums returned by IsSelectable.numSelectionQueriesNeeded() is positive), and qid will in
 turn be a number between 0 and nums-1.getSelection in interface IsSelectablelist - selected objects are appended to the end of this listqid - index of the selection querypublic void scaleDistance(double s)
ScalableUnitsscaleDistance in interface ScalableUnitss - scaling factorpublic void scaleMass(double s)
ScalableUnitsscaleMass in interface ScalableUnitss - scaling factorpublic Vector3d getDirection()
public void setDirection(Vector3d dir)
public Vector3d getForce()
public void setForce(Vector3d f)
public double getMagnitude()
public void setMagnitude(double mag)
public boolean getRenderOutward()
public void setRenderOutward(boolean enable)
public double getAxisLength()
public void setAxisLength(double len)
public double getForceLengthRatio()
public void setForceLengthRatio(double r)
public double getAxisRadiusRatio()
public void setAxisRadiusRatio(double r)
public double getForceScaling()
public void setForceScaling(double forceScaling)
public void transformGeometry(GeometryTransformer gtr, TransformGeometryContext context, int flags)
TransformableGeometrygtr to transform its individual attributes. The
 context argument supplies information about what other
 components are currently being transformed, and also allows the
 requesting of update actions to be performed after all transform called
 have completed. The context is also the usual entity that calls
 this method, from within its TransformGeometryContext.apply(maspack.geometry.GeometryTransformer, int)
 method. The argument flags provides flags to specify
 various conditions associated with the the transformation. 
 At present, the available flags are TransformableGeometry.TG_SIMULATING and 
 TransformableGeometry.TG_ARTICULATED.
 This method is not usually called directly by applications. 
 Instead, it is typically called from within the 
 TransformGeometryContext.apply(maspack.geometry.GeometryTransformer, int) method of the context,
 which takes care of the various operations needed for a
 complete transform operation, including calling 
 TransformableGeometry.addTransformableDependencies(artisynth.core.modelbase.TransformGeometryContext, int) to collect other 
 components that should be transformed, calling 
 TransformableGeometry.transformGeometry(maspack.matrix.AffineTransform3dBase) for each component, notifying
 component parents that the geometry has changed, and calling
 any requested TransformGeometryActions. More details
 are given in the documentation for 
 TransformGeometryContext.apply(maspack.geometry.GeometryTransformer, int).
 
 
TransformGeometryContext provides a number of
 static convenience transform methods
 which take care of building the context and calling
 apply() for a specified set of components.
 
 
This method should not
 generally call transformGeometry() for its descendant
 components. Instead, descendants needing transformation should be
 specified by adding them to the context in the method TransformableGeometry.addTransformableDependencies(artisynth.core.modelbase.TransformGeometryContext, int).
transformGeometry in interface TransformableGeometrygtr - transformer implementing the transformcontext - context information, including what other components
 are being transformedflags - specifies conditions associated with the transformationpublic void addTransformableDependencies(TransformGeometryContext context, int flags)
TransformableGeometrycontext any transformable components which should be
 transformed as the same time as this component. This will generally
 include descendant components, and may also include other components to
 which this component is connected in some way.
 
 This method is generally called from with the 
 TransformGeometryContext.apply(maspack.geometry.GeometryTransformer, int) method of a 
 TransformGeometryContext.
addTransformableDependencies in interface TransformableGeometrycontext - context information, to which the dependent components
 are added.flags - specifies conditions associated with the transformationpublic void transformGeometry(AffineTransform3dBase X)
TransformableGeometryTransformGeometryContext.transform (this, X, 0);
transformGeometry in interface TransformableGeometryX - affine transformation to apply to the componentpublic void addSolveBlocks(SparseNumberedBlockMatrix M)
ForceEffectorgetSolveIndex) for all dynamic or attached components affected by this
 force effector.addSolveBlocks in interface ForceEffectorM - solve matrix to which blocks should be addedpublic void addPosJacobian(SparseNumberedBlockMatrix M, double s)
ForceEffector
 M is guaranteed to be the same matrix supplied in the most recent call to
 addSolveBlocks, and so implementations may choose
 to cache the relevant matrix blocks from that call, instead of retrieving
 them directly from M.
addPosJacobian in interface ForceEffectorM - solve matrix to which scaled position Jacobian is to be addeds - scaling factor for position Jacobianpublic void addVelJacobian(SparseNumberedBlockMatrix M, double s)
ForceEffector
 M is guaranteed to be the same matrix supplied in the most recent call to
 addSolveBlocks, and so implementations may choose
 to cache the relevant matrix blocks from that call, instead of retrieving
 them directly from M.
addVelJacobian in interface ForceEffectorM - solve matrix to which scaled velocity Jacobian is to be addeds - scaling factor for velocity Jacobianpublic int getJacobianType()
ForceEffectorMatrix.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.getJacobianType in interface ForceEffectorpublic boolean isDuplicatable()
true if and only if CopyableComponent.getCopyReferences(java.util.List<artisynth.core.modelbase.ModelComponent>, artisynth.core.modelbase.ModelComponent) returns true.
 This method is not currently used. It is intended to provide a faster
 way of determining if a component can be duplicated, without having to
 use CopyableComponent.getCopyReferences(java.util.List<artisynth.core.modelbase.ModelComponent>, artisynth.core.modelbase.ModelComponent) to build the list of copy references.
isDuplicatable in interface CopyableComponenttrue if this component can be duplicated.public boolean getCopyReferences(java.util.List<ModelComponent> refs, ModelComponent ancestor)
CopyableComponenttrue if and only if CopyableComponent.isDuplicatable() returns
 true.getCopyReferences in interface CopyableComponentrefs - list to which references are appendedancestor - root node of the hierarchy from which references are to be excludedpublic ModelComponent copy(int flags, java.util.Map<ModelComponent,ModelComponent> copyMap)
CopyableComponentCOPY_REFERENCES
 is set in flags, then any component referenced
 by this component should itself be set to a copy. This
 should be done first checking copyMap for an 
 existing copy of the referenced component. If there is no existing
 copy, then a copy should be created by calling copy
 recursively and adding the new copy to copyMap.copy in interface CopyableComponentcopy in class ModelComponentBaseflags - flags to control the copyingcopyMap - map to possible existing instances of referenced
 componentspublic void getHardReferences(java.util.List<ModelComponent> refs)
ModelComponentBasegetHardReferences in interface ModelComponentgetHardReferences in class ModelComponentBaserefs - list to which hard references are appended