artisynth.core.mechmodels
Class RigidCompositeBody

java.lang.Object
  extended by artisynth.core.modelbase.ModelComponentBase
      extended by artisynth.core.modelbase.RenderableComponentBase
          extended by artisynth.core.mechmodels.DynamicMechComponentBase
              extended by artisynth.core.mechmodels.Frame
                  extended by artisynth.core.mechmodels.RigidBody
                      extended by artisynth.core.mechmodels.RigidCompositeBody
All Implemented Interfaces:
Collidable, DynamicMechComponent, ForceEffector, MotionTargetComponent, ComponentChangeListener, CompositeComponent, CopyableComponent, HasCoordinateFrame, IndexedComponentList, ModelComponent, RenderableComponent, Tracable, ScalableUnits, TransformableGeometry, PullController.Pullable, java.lang.Cloneable, HasProperties, HierarchyNode, GLRenderable, GLSelectable, HasRenderProps, Renderable, Scannable

public class RigidCompositeBody
extends RigidBody
implements CompositeComponent

Allows a rigid body to have multiple geometries, some used for computing mass/inertia, some for display only, some for collisions

Author:
Antonio

Nested Class Summary
 
Nested classes/interfaces inherited from class artisynth.core.mechmodels.RigidBody
RigidBody.InertiaMethod
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.CompositeComponent
CompositeComponent.NavpanelDisplay
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.ModelComponent
ModelComponent.NavpanelVisibility
 
Nested classes/interfaces inherited from interface artisynth.core.mechmodels.Collidable
Collidable.DefaultCollidable
 
Field Summary
 
Fields inherited from class artisynth.core.mechmodels.RigidBody
myProps
 
Fields inherited from class artisynth.core.mechmodels.Frame
dynamicVelInWorldCoords, myRenderFrame
 
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 artisynth.core.mechmodels.Collidable
Default, Deformable, RigidBody, Self
 
Fields inherited from interface artisynth.core.util.TransformableGeometry
ARTICULATED, SIMULATING
 
Fields inherited from interface maspack.render.GLRenderable
TRANSLUCENT, TWO_DIMENSIONAL
 
Constructor Summary
RigidCompositeBody()
           
RigidCompositeBody(java.lang.String name)
           
 
Method Summary
 RigidMeshComponent addMesh(MeshBase mesh)
          Adds a mesh to this object.
 RigidMeshComponent addMesh(MeshBase mesh, boolean physical)
          Adds a mesh to this object.
 RigidMeshComponent addMesh(MeshBase mesh, java.lang.String fileName, AffineTransform3dBase Xh, boolean physical)
          Adds a mesh to this object
 void addMesh(RigidMeshComponent mc)
          Explicitly adds a mesh component.
 void componentChanged(ComponentChangeEvent e)
          Notifies this composite component that a change has occured within one or more of its descendants.
 double computeVolume()
           
 boolean containsMesh(RigidMeshComponent mc)
          Checks if this object contains a particular geometry
 RigidCompositeBody copy(int flags, java.util.Map<ModelComponent,ModelComponent> copyMap)
          Create a copy of this component.
 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()
           
 PolygonalMesh getCollisionMesh(int idx)
           
 PolygonalMesh getMesh()
          returns the first available PolygonalMesh, for compatibility with RigidBody
 RigidMeshComponent getMesh(java.lang.String name)
           
 MeshComponentList<RigidMeshComponent> getMeshes()
           
 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.
 int getNumMeshes()
          Number of meshes associated with this object
 Point3d getOriginData(MouseRayEvent ray)
          Constructs force origin storage data given a mouse ray (e.g.
 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.
 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 prerender(RenderList list)
          Prepare for rendering, and potentially add itself to a list to be drawn by a GLRenderer.
 boolean removeMesh(RigidMeshComponent mc)
           
 RigidMeshComponent removeMesh(java.lang.String name)
           
 void scaleDistance(double s)
          Scales all distance coordinates.
 void scan(ReaderTokenizer rtok, java.lang.Object ref)
          Scans this element from a ReaderTokenizer.
 void setDensity(double density)
          Sets the density for the mesh, which is defined at the mass divided by the mesh volume.
 void setDisplayMode(CompositeComponent.NavpanelDisplay mode)
          Sets the display mode for this component.
 void setInertia(double m, double Jxx, double Jyy, double Jzz)
          Explicitly sets the mass and rotational inertia of this body.
 void setInertia(double m, SymmetricMatrix3d J)
          Explicitly sets the mass and rotational inertia of this body.
 void setInertia(double m, SymmetricMatrix3d J, Point3d com)
          Explicitly sets the mass, rotational inertia, and center of mass of this body.
 void setInertia(SpatialInertia M)
          Explicitly sets the spatial inertia of this body.
 void setInertiaFromDensity(double density)
          Causes the inertia to be automatically computed from the mesh volume and a given density.
 void setInertiaFromMass(double mass)
          Causes the inertia to be automatically computed from the mesh volume and a given mass (with the density computed by dividing the mass by the mesh volume).
 void setInertiaMethod(RigidBody.InertiaMethod method)
          Sets the InertiaMethod method used to determine the inertia for this RigidBody.
 void setMass(double mass)
          Sets the mass for the mesh.
 void setMesh(PolygonalMesh mesh, java.lang.String fileName, AffineTransform3dBase X)
          Sets a mesh for this body.
 void setSelected(boolean selected)
          Selects or deselects this component.
 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 updateNameMap(java.lang.String newName, java.lang.String oldName, ModelComponent comp)
           
 
Methods inherited from class artisynth.core.mechmodels.RigidBody
addScaledVelocity, addVelocity, applyForce, applyGravity, applyPosImpulse, createBox, createCollisionData, createCylinder, createEllipsoid, createFromMesh, createFromMesh, createFromMesh, createFromMesh, createRenderProps, createSphere, extrapolatePose, findFreeAttachedBodies, getAllPropertyInfo, getCenterOfMass, getCenterOfMass, getCopyReferences, getDensity, getDensityRange, getFrameMarkers, getInertia, getInertiaMethod, getInverseMass, getMass, getMass, getMass, getMassForces, getMassRange, getMeshFileName, getMeshFileTransform, getOriginPoint, getPointRenderRadius, getRelativePoses, getRotationalInertia, getRotationalInertia, getSurfaceMesh, isCollidable, isDuplicatable, isMassConstant, isPullable, render, scaleMass, scaleMesh, setBodyVelocity, setCenterOfMass, setDynamic, setMesh, setMeshFileName, setMeshFileTransform, setPose, setPose, setPosition, setPosState, setRelativePoses, setRotation, setRotationalInertia, setState, setState, setSurfaceMesh, setSurfaceMesh, setVelocity, setVelState, transformGeometry, updateAttachmentPosStates, updatePose, write
 
Methods inherited from class artisynth.core.mechmodels.Frame
addExternalForce, addForce, addPointForce, addPosImpulse, addPosJacobian, addScaledExternalForce, addSolveBlock, addSolveBlocks, addTargetJacobian, addVelJacobian, applyForces, computeAppliedWrench, computeAppliedWrench, computePointPosition, computePointVelocity, computePointVelocity, createMassBlock, createSolveBlock, drawAxes, getAxisLength, getBodyForce, getBodyVelocity, getBodyVelState, getExternalForce, getForce, getForce, getForce, getFrameDamping, getFrameDampingMode, getJacobianType, getMoment, getOrientation, getPosDerivative, getPose, getPose, getPosition, getPosState, getPosStateSize, getRotaryDamping, getRotaryDampingMode, getRotation, getSelection, getState, getState, getTargetActivity, getTargetOrientation, getTargetPos, getTargetPose, getTargetPosition, getTargetVel, getTargetVelocity, getTracables, getTracingProbe, getTransForce, getVelocity, getVelocity, getVelState, getVelStateSize, getWorldVelState, resetTargets, setAxisLength, setExternalForce, setForce, setForce, setForcesToExternal, setFrameDamping, setFrameDampingMode, setOrientation, setRotaryDamping, setRotaryDampingMode, setState, setTargetActivity, setTargetOrientation, setTargetPos, setTargetPose, setTargetPosition, setTargetVel, setTargetVelocity, setVelocity, velocityLimitExceeded, zeroExternalForces, zeroForces
 
Methods inherited from class artisynth.core.mechmodels.DynamicMechComponentBase
addMasterAttachment, getAttachment, getMasterAttachments, getSolveIndex, isActive, isAttached, isControllable, isDynamic, isParametric, removeMasterAttachment, setAttached, setSolveIndex
 
Methods inherited from class artisynth.core.modelbase.RenderableComponentBase
getRenderHints, getRenderProps, isSelectable, numSelectionQueriesNeeded, setRenderProps, updateRenderProps
 
Methods inherited from class artisynth.core.modelbase.ModelComponentBase
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, connectToHierarchy, createTempFlag, disconnectFromHierarchy, 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, updateReferences
 
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, updateReferences
 
Methods inherited from interface maspack.properties.HasProperties
getAllPropertyInfo, getProperty
 
Methods inherited from interface maspack.util.Scannable
isWritable, write
 
Methods inherited from interface artisynth.core.mechmodels.DynamicMechComponent
addMasterAttachment, checkFlag, clearFlag, getAttachment, getMasterAttachments, getSolveIndex, isActive, isAttached, isControllable, isDynamic, isParametric, removeMasterAttachment, setAttached, setFlag, setSolveIndex
 

Constructor Detail

RigidCompositeBody

public RigidCompositeBody()

RigidCompositeBody

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

getMesh

public PolygonalMesh getMesh()
returns the first available PolygonalMesh, for compatibility with RigidBody

Overrides:
getMesh in class RigidBody

getMeshes

public MeshComponentList<RigidMeshComponent> getMeshes()

getMesh

public RigidMeshComponent getMesh(java.lang.String name)

getCollisionMesh

public PolygonalMesh getCollisionMesh(int idx)

addMesh

public RigidMeshComponent addMesh(MeshBase mesh)
Adds a mesh to this object. Can be of any type.

Parameters:
mesh - Instance of MeshBase
Returns:
a special "mesh component" object that is created internally

addMesh

public RigidMeshComponent addMesh(MeshBase mesh,
                                  boolean physical)
Adds a mesh to this object. Can be of any type.

Parameters:
mesh - Instance of MeshBase
physical - true if to be used for mass/inertia calculations
Returns:
a special "mesh component" object that is created internally

addMesh

public RigidMeshComponent addMesh(MeshBase mesh,
                                  java.lang.String fileName,
                                  AffineTransform3dBase Xh,
                                  boolean physical)
Adds a mesh to this object

Parameters:
mesh - Instance of MeshBase
fileName - name of file (can be null)
Xh - transform associated with mesh
physical - if true, this mesh is used for computing mass and inertia
Returns:
a special "mesh component" object that is created internally

addMesh

public void addMesh(RigidMeshComponent mc)
Explicitly adds a mesh component. If the flag mc.isPhysical() is true, then this mesh is used for mass/inertia computations


getNumMeshes

public int getNumMeshes()
Number of meshes associated with this object


containsMesh

public boolean containsMesh(RigidMeshComponent mc)
Checks if this object contains a particular geometry


setInertiaMethod

public void setInertiaMethod(RigidBody.InertiaMethod method)
Sets the InertiaMethod method used to determine the inertia for this RigidBody.

Overrides:
setInertiaMethod in class RigidBody
Parameters:
method - inertia method for this RigidBody
See Also:
RigidBody.setInertia(maspack.spatialmotion.SpatialInertia), RigidBody.setInertiaFromDensity(double), RigidBody.setInertiaFromMass(double)

setInertia

public void setInertia(SpatialInertia M)
Explicitly sets the spatial inertia of this body. Also sets the uniform density (as returned by getDensity) to be undefined).

Overrides:
setInertia in class RigidBody

setInertia

public void setInertia(double m,
                       SymmetricMatrix3d J)
Explicitly sets the mass and rotational inertia of this body. Also sets the uniform density (as returned by getDensity) to be undefined).

Overrides:
setInertia in class RigidBody

setInertia

public void setInertia(double m,
                       SymmetricMatrix3d J,
                       Point3d com)
Explicitly sets the mass, rotational inertia, and center of mass of this body. Also sets the uniform density (as returned by getDensity) to be undefined).

Overrides:
setInertia in class RigidBody

setInertia

public void setInertia(double m,
                       double Jxx,
                       double Jyy,
                       double Jzz)
Explicitly sets the mass and rotational inertia of this body. Also sets the uniform density (as returned by getDensity) to be undefined).

Overrides:
setInertia in class RigidBody

setInertiaFromDensity

public void setInertiaFromDensity(double density)
Causes the inertia to be automatically computed from the mesh volume and a given density. If the mesh is currently null then the inertia remains unchanged. Subsequent (non-null) changes to the mesh will cause the inertia to be recomputed. The inertia method is set to Density.

Overrides:
setInertiaFromDensity in class RigidBody
Parameters:
density - desired uniform density

setInertiaFromMass

public void setInertiaFromMass(double mass)
Causes the inertia to be automatically computed from the mesh volume and a given mass (with the density computed by dividing the mass by the mesh volume). If the mesh is currently null the mass of the inertia is updated but the otherwise the inertia and density are left unchanged. Subsequent (non-null) changes to the mesh will cause the inertia to be recomputed. The inertia method is set to Mass.

Overrides:
setInertiaFromMass in class RigidBody
Parameters:
mass - desired body mass

computeVolume

public double computeVolume()
Overrides:
computeVolume in class RigidBody

setDensity

public void setDensity(double density)
Sets the density for the mesh, which is defined at the mass divided by the mesh volume. If the mesh is currently non-null, the mass will be updated accordingly. If the current InertiaMethod is either Density or Mass, the other components of the spatial inertia will also be updated.

Overrides:
setDensity in class RigidBody
Parameters:
density - new density value

setMass

public void setMass(double mass)
Sets the mass for the mesh. If the mesh is currently non-null, then the density (defined as the mass divided by the mesh volume) will be updated accordingly. If the current InertiaMethod is either Density or Mass, the other components of the spatial inertia will also be updated.

Overrides:
setMass in class RigidBody
Parameters:
mass - new mass value

removeMesh

public boolean removeMesh(RigidMeshComponent mc)

removeMesh

public RigidMeshComponent removeMesh(java.lang.String name)

setMesh

public void setMesh(PolygonalMesh mesh,
                    java.lang.String fileName,
                    AffineTransform3dBase X)
Description copied from class: RigidBody
Sets a mesh for this body. If the body has a uniform density (i.e., getDensity returns a non-negative value), then the spatial inertia is automatically calculated from the mesh and the uniform density.

Overrides:
setMesh in class RigidBody

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 RigidBody

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
Overrides:
transformGeometry in class RigidBody
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
Overrides:
scaleDistance in class RigidBody
Parameters:
s - scaling factor

updateNameMap

public void updateNameMap(java.lang.String newName,
                          java.lang.String oldName,
                          ModelComponent comp)
Specified by:
updateNameMap in interface CompositeComponent

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.

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.

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

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

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

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

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 RigidBody
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

getChildren

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

hasChildren

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

setSelected

public void setSelected(boolean selected)
Description copied from class: ModelComponentBase
Selects or deselects this component. This method should only be used by the selection manager, since object selection must be coordinated with other system components.

Specified by:
setSelected in interface ModelComponent
Overrides:
setSelected in class ModelComponentBase
Parameters:
selected - if true, this component is selected

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

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.

copy

public RigidCompositeBody copy(int flags,
                               java.util.Map<ModelComponent,ModelComponent> copyMap)
Description copied from interface: CopyableComponent
Create a copy of this component. If COPY_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.

Specified by:
copy in interface CopyableComponent
Overrides:
copy in class RigidBody

hasState

public boolean hasState()
Description copied from class: DynamicMechComponentBase
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 DynamicMechComponentBase

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 RigidBody
Parameters:
pmin - minimum point
pmax - maximum point

getOriginData

public Point3d getOriginData(MouseRayEvent ray)
Description copied from interface: PullController.Pullable
Constructs force origin storage data given a mouse ray (e.g. intersect ray with mesh to determine for origin point) If null, assumes that there is no origin, so no force can be applied

Specified by:
getOriginData in interface PullController.Pullable
Overrides:
getOriginData in class RigidBody