public class RigidBody extends Frame implements CollidableBody, HasSurfaceMesh, ConnectableBody
Modifier and Type | Class and Description |
---|---|
static class |
RigidBody.InertiaMethod |
Collidable.Collidability, Collidable.DefaultCollidable
Modifier and Type | Field and Description |
---|---|
static PropertyList |
myProps |
dynamicVelInWorldCoords, myRenderFrame
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, NULL_OBJ, useCompactPathNames
Default, Deformable, RigidBody, Self
ARTICULATED, SIMULATING
COPY_REFERENCES
TRANSLUCENT, TWO_DIMENSIONAL
Constructor and Description |
---|
RigidBody() |
RigidBody(RigidTransform3d XBodyToWorld,
SpatialInertia M,
PolygonalMesh mesh,
java.lang.String meshFileName) |
RigidBody(java.lang.String name) |
Modifier and Type | Method and Description |
---|---|
void |
addConnector(BodyConnector c) |
void |
addEffectiveInertia(SpatialInertia M) |
void |
addEffectivePointMass(double m,
Vector3d loc)
Adds a point mass to the effective spatial inertia for this Frame.
|
boolean |
allowCollision(ContactPoint cpnt,
Collidable other,
java.util.Set<Vertex3d> attachedVertices)
Returns
true if a collision between this Collidable
and other should be allowed for the contact point
cpnt . |
void |
applyGravity(Vector3d gacc)
Applies a gravity force to this component, given a prescribed
gravity acceleration vector.
|
double |
computeVolume() |
boolean |
containsContactMaster(CollidableDynamicComponent comp)
Returns true if this Collidable contains a specified contact master
component.
|
RigidBody |
copy(int flags,
java.util.Map<ModelComponent,ModelComponent> copyMap)
Create a copy of this component.
|
static RigidBody |
createBox(java.lang.String bodyName,
double wx,
double wy,
double wz,
double density)
Creates a box-shaped RigidBody with a prescribed uniform density.
|
static RigidBody |
createCylinder(java.lang.String bodyName,
double r,
double h,
double density,
int nsides)
Creates a cylindrical RigidBody with a prescribed uniform density.
|
static RigidBody |
createEllipsoid(java.lang.String bodyName,
double a,
double b,
double c,
double density,
int nslices)
Creates an ellipsoidal RigidBody with a prescribed uniform density.
|
static RigidBody |
createFromMesh(java.lang.String bodyName,
java.lang.Object obj,
java.lang.String relPath,
double density,
double scale) |
static RigidBody |
createFromMesh(java.lang.String bodyName,
PolygonalMesh mesh,
double density,
double scale) |
static RigidBody |
createFromMesh(java.lang.String bodyName,
PolygonalMesh mesh,
java.lang.String meshFilePath,
double density,
double scale) |
static RigidBody |
createFromMesh(java.lang.String bodyName,
java.lang.String meshPath,
double density,
double scale) |
static RigidBody |
createIcosahedralSphere(java.lang.String bodyName,
double r,
double density,
int ndivisions)
Creates an icosahedrally spherical RigidBody with a prescribed uniform
density.
|
RenderProps |
createRenderProps()
Factory method to create render properties appropriate to this object.
|
static RigidBody |
createSphere(java.lang.String bodyName,
double r,
double density,
int nslices)
Creates an spherical RigidBody with a prescribed uniform density.
|
void |
extrapolatePose(Twist vel,
double h) |
PropertyList |
getAllPropertyInfo()
Returns a list giving static information about all properties exported by
this object.
|
Point3d |
getCenterOfMass() |
void |
getCenterOfMass(Point3d com) |
Collidable.Collidability |
getCollidable()
Returns the
Collidable.Collidability of this Collidable. |
PolygonalMesh |
getCollisionMesh()
Returns the mesh that should be used for computing collisions, or
null if there is no such mesh. |
java.util.List<BodyConnector> |
getConnectors() |
boolean |
getCopyReferences(java.util.List<ModelComponent> refs,
ModelComponent ancestor)
Collects external references which must also be copied in order to
duplicate this component.
|
double |
getDensity()
Returns the density of this body.
|
Range |
getDensityRange() |
SpatialInertia |
getEffectiveInertia() |
void |
getEffectiveMass(Matrix M,
double t)
Gets the effective mass of this component at a particular time.
|
int |
getEffectiveMassForces(VectorNd f,
double t,
int idx)
Gets the mass forces for this component at a particular time.
|
FrameMarker[] |
getFrameMarkers()
Returns an array of all FrameMarkers currently associated with this rigid
body.
|
void |
getInertia(SpatialInertia M) |
RigidBody.InertiaMethod |
getInertiaMethod() |
void |
getInverseMass(Matrix Minv,
Matrix M)
Inverts a mass for this component.
|
double |
getMass()
Returns the mass of this body.
|
double |
getMass(double t)
Returns the scalar mass of this component at time t.
|
void |
getMass(Matrix M,
double t)
Gets the mass of this component at a particular time.
|
Range |
getMassRange() |
PolygonalMesh |
getMesh() |
java.lang.String |
getMeshFileName() |
AffineTransform3dBase |
getMeshFileTransform()
Returns the file transform associated with this rigid body's mesh.
|
SymmetricMatrix3d |
getRotationalInertia()
Returns the rotational inertia of this body.
|
void |
getRotationalInertia(SymmetricMatrix3d J) |
PolygonalMesh |
getSurfaceMesh()
Returns the surface mesh associated with this component, or
null if no mesh exists. |
PolygonalMesh[] |
getSurfaceMeshes()
Returns an array listing all the (non-null) surface meshes associated
with this component, or a zero-length array if there are none.
|
void |
getVertexMasters(java.util.List<ContactMaster> mlist,
Vertex3d vtx)
Returns all the contact master components associated with a particular
mesh vertex.
|
boolean |
isDeformable()
Returns
true if this collidable is deformable. |
boolean |
isDuplicatable()
Returns true if this component can be duplicated.
|
boolean |
isFreeBody() |
boolean |
isMassConstant() |
int |
mulInverseEffectiveMass(Matrix M,
double[] a,
double[] f,
int idx) |
int |
numSurfaceMeshes()
Returns the number of surfaces meshes associated with this
component, or 0 if no meshes exist.
|
void |
prerender(RenderList list)
Prepare for rendering, and potentially add itself to a list to be drawn
by a GLRenderer.
|
void |
removeConnector(BodyConnector c) |
void |
render(GLRenderer renderer,
int flags)
Render this object using Open GL via the JOGL.
|
void |
resetEffectiveMass()
Resets the effective mass of this component to the nominal mass.
|
void |
scaleDistance(double s)
Scales all distance coordinates.
|
void |
scaleMass(double s)
Scales all mass units.
|
void |
scaleMesh(double s) |
void |
scan(ReaderTokenizer rtok,
java.lang.Object ref)
Scans this element from a ReaderTokenizer.
|
void |
setCenterOfMass(Point3d com) |
void |
setCollidable(Collidable.Collidability c) |
void |
setDensity(double density)
Sets the density for the mesh, which is defined at the mass divided
by the mesh volume.
|
void |
setDynamic(boolean dynamic) |
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) |
void |
setMesh(PolygonalMesh mesh,
java.lang.String fileName) |
void |
setMesh(PolygonalMesh mesh,
java.lang.String fileName,
AffineTransform3dBase X)
Sets a mesh for this body.
|
void |
setMeshFileName(java.lang.String filename) |
void |
setMeshFileTransform(AffineTransform3dBase X)
Sets the transform used to modify a mesh originally read from a file.
|
void |
setPose(double x,
double y,
double z,
double roll,
double pitch,
double yaw) |
void |
setRotationalInertia(SymmetricMatrix3d J)
Explicitly sets the rotational inertia of this body.
|
void |
setSurfaceMesh(PolygonalMesh mesh,
java.lang.String fileName) |
void |
setSurfaceMesh(PolygonalMesh mesh,
java.lang.String fileName,
AffineTransform3dBase X)
Sets a mesh for this body.
|
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 |
updateAttachmentPosStates() |
void |
updateBounds(Point3d pmin,
Point3d pmax)
Update the minimum and maximum points for this object.
|
void |
write(java.io.PrintWriter pw,
NumberFormat fmt,
java.lang.Object ref)
Writes a text description of this element to a PrintWriter.
|
addExternalForce, addForce, addPointForce, addPointForce, addPointMass, addPosImpulse, addPosJacobian, addScaledExternalForce, addSolveBlock, addSolveBlocks, addTargetJacobian, addToPointVelocity, addVelJacobian, applyExternalForces, applyForces, computeAppliedWrench, computeLocalPointForceJacobian, computePointCoriolis, computePointLocation, computePointPosition, computePointVelocity, computePointVelocity, computePointVelocity, computeWorldPointForceJacobian, createFrameAttachment, createMassBlock, createPointAttachment, drawAxes, getAxisLength, getBodyForce, getBodyVelocity, getBodyVelState, getExternalForce, getForce, getForce, getForce, getFrameDamping, getFrameDampingMode, getJacobianType, getMoment, getOrientation, getOrientation, getPosDerivative, getPose, getPose, getPosition, getPosState, getPosStateSize, getRotaryDamping, getRotaryDampingMode, getRotation, getSelection, getTargetActivity, getTargetOrientation, getTargetPos, getTargetPose, getTargetPosition, getTargetVel, getTargetVelocity, getTraceablePositionProperty, getTraceables, getTransForce, getVelocity, getVelocity, getVelState, getVelStateSize, getWorldVelState, resetTargets, setAxisLength, setBodyVelocity, setContactConstraint, setExternalForce, setForce, setForce, setFrameDamping, setFrameDampingMode, setOrientation, setPose, setPosition, setPosState, setRotaryDamping, setRotaryDampingMode, setRotation, setState, setTargetActivity, setTargetOrientation, setTargetPos, setTargetPose, setTargetPosition, setTargetVel, setTargetVelocity, setVelocity, setVelocity, setVelState, subPointForce, subPointForce, transformPose, velocityLimitExceeded, zeroExternalForces, zeroForces
addMasterAttachment, getAttachment, getMasterAttachments, getSolveIndex, hasState, isActive, isAttached, isControllable, isDynamic, isParametric, removeMasterAttachment, setAttached, setSolveIndex
getRenderHints, getRenderProps, isSelectable, numSelectionQueriesNeeded, setRenderProps, updateRenderProps
checkFlag, checkName, checkNameUniqueness, clearFlag, clone, connectToHierarchy, createTempFlag, disconnectFromHierarchy, getChildren, getGrandParent, getHardReferences, getName, getNameRange, getNavpanelVisibility, getNavpanelVisibility, getNumber, getParent, getProperty, getSoftReferences, hasChildren, isConnectedToHierarchy, isFixed, isMarked, isSelected, isWritable, makeValidName, makeValidName, notifyParentOfChange, postscan, printReferences, recursivelyContained, recursivelyContains, removeTempFlag, setFixed, setFlag, setMarked, setName, setNavpanelVisibility, setNavpanelVisibility, setNumber, setParent, setSelected, updateReferences
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
transformPose
createFrameAttachment
createPointAttachment
addMasterAttachment, checkFlag, clearFlag, getAttachment, getMasterAttachments, getSolveIndex, isActive, isAttached, isControllable, isDynamic, isParametric, removeMasterAttachment, setAttached, setFlag, setSolveIndex
public static PropertyList myProps
public RigidBody()
public RigidBody(java.lang.String name)
public RigidBody(RigidTransform3d XBodyToWorld, SpatialInertia M, PolygonalMesh mesh, java.lang.String meshFileName)
public PropertyList getAllPropertyInfo()
HasProperties
getAllPropertyInfo
in interface HasProperties
getAllPropertyInfo
in class Frame
public boolean isMassConstant()
isMassConstant
in interface DynamicComponent
isMassConstant
in class Frame
public double getMass(double t)
DynamicComponent
getMass
in interface DynamicComponent
getMass
in class Frame
public void getMass(Matrix M, double t)
DynamicComponent
getMass
in interface DynamicComponent
getMass
in class Frame
M
- matrix to return the mass int
- current timepublic SpatialInertia getEffectiveInertia()
public void getEffectiveMass(Matrix M, double t)
DynamicComponent
getEffectiveMass
in interface DynamicComponent
getEffectiveMass
in class Frame
M
- matrix to return the mass int
- current timepublic int mulInverseEffectiveMass(Matrix M, double[] a, double[] f, int idx)
mulInverseEffectiveMass
in interface DynamicComponent
mulInverseEffectiveMass
in class Frame
public int getEffectiveMassForces(VectorNd f, double t, int idx)
DynamicComponent
f
, starting at the location
specified by idx
. Upon return, this method should
return the value of idx
incremented by the dimension
of the mass forces.getEffectiveMassForces
in interface DynamicComponent
getEffectiveMassForces
in class Frame
f
- vector to return the forces int
- current timeidx
- starting location within f
where forces should be storedidx
public void resetEffectiveMass()
DynamicComponent
resetEffectiveMass
in interface DynamicComponent
resetEffectiveMass
in class Frame
public void addEffectivePointMass(double m, Vector3d loc)
addEffectivePointMass
in class Frame
m
- mass of the pointloc
- location of the point (in local frame coordinates)public void addEffectiveInertia(SpatialInertia M)
public void getInverseMass(Matrix Minv, Matrix M)
DynamicComponent
getInverseMass
in interface DynamicComponent
getInverseMass
in class DynamicComponentBase
Minv
- matrix to return the inverse mass inM
- matrix containing the mass to be invertedpublic RigidBody.InertiaMethod getInertiaMethod()
public void setInertiaMethod(RigidBody.InertiaMethod method)
InertiaMethod
method used to
determine the inertia for this RigidBody.method
- inertia method for this RigidBodysetInertia(maspack.spatialmotion.SpatialInertia)
,
setInertiaFromDensity(double)
,
setInertiaFromMass(double)
public void getInertia(SpatialInertia M)
public void setCenterOfMass(Point3d com)
public void getCenterOfMass(Point3d com)
public Point3d getCenterOfMass()
public void setInertiaFromDensity(double density)
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
.density
- desired uniform densitypublic void setInertiaFromMass(double mass)
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
.mass
- desired body masspublic double computeVolume()
public void setDensity(double density)
Density
or
Mass
, the other components of
the spatial inertia will also be updated.density
- new density valuepublic Range getDensityRange()
public double getDensity()
setInertiaFromDensity
, or is the
mass/volume ratio for the most recently defined mesh.public void setMass(double mass)
Density
or
Mass
, the
other components of the spatial inertia will also be updated.mass
- new mass valuepublic double getMass()
getMass
in interface CollidableBody
public Range getMassRange()
public void setRotationalInertia(SymmetricMatrix3d J)
getDensity
) to be undefined).public void getRotationalInertia(SymmetricMatrix3d J)
public SymmetricMatrix3d getRotationalInertia()
public void setInertia(SpatialInertia M)
getDensity
) to be undefined).public void setInertia(double m, SymmetricMatrix3d J)
getDensity
) to be
undefined).public void setInertia(double m, SymmetricMatrix3d J, Point3d com)
getDensity
) to be undefined).public void setInertia(double m, double Jxx, double Jyy, double Jzz)
getDensity
) to be
undefined).public PolygonalMesh getMesh()
public PolygonalMesh getSurfaceMesh()
HasSurfaceMesh
null
if no mesh exists. If multiple surface
meshes exist, this should be first one in the array returned
by HasSurfaceMesh.getSurfaceMeshes()
.getSurfaceMesh
in interface HasSurfaceMesh
public int numSurfaceMeshes()
HasSurfaceMesh
HasSurfaceMesh.getSurfaceMesh()
returns null
, then this method should return 0.numSurfaceMeshes
in interface HasSurfaceMesh
public PolygonalMesh[] getSurfaceMeshes()
HasSurfaceMesh
HasSurfaceMesh.getSurfaceMesh()
returns null
, then a
zero-length array should be returned.getSurfaceMeshes
in interface HasSurfaceMesh
public java.lang.String getMeshFileName()
public void setMeshFileName(java.lang.String filename)
public AffineTransform3dBase getMeshFileTransform()
setMeshFileTransform(maspack.matrix.AffineTransform3dBase)
public void setMeshFileTransform(AffineTransform3dBase X)
X
- new mesh file transform, or null
public void setMesh(PolygonalMesh mesh)
public void setMesh(PolygonalMesh mesh, java.lang.String fileName)
public void setSurfaceMesh(PolygonalMesh mesh, java.lang.String fileName)
public void scaleMesh(double s)
public void setMesh(PolygonalMesh mesh, java.lang.String fileName, AffineTransform3dBase X)
getDensity
returns a non-negative value), then the
spatial inertia is automatically calculated from the mesh and the uniform
density.public void setSurfaceMesh(PolygonalMesh mesh, java.lang.String fileName, AffineTransform3dBase X)
getDensity
returns a non-negative value), then the
spatial inertia is automatically calculated from the mesh and the uniform
density.public void setPose(double x, double y, double z, double roll, double pitch, double yaw)
public void extrapolatePose(Twist vel, double h)
public void applyGravity(Vector3d gacc)
Frame
applyGravity
in interface DynamicComponent
applyGravity
in class Frame
public void scan(ReaderTokenizer rtok, java.lang.Object ref) throws java.io.IOException
ModelComponentBase
write
.scan
in interface ModelComponent
scan
in interface Scannable
scan
in class ModelComponentBase
rtok
- 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 void write(java.io.PrintWriter pw, NumberFormat fmt, java.lang.Object ref) throws java.io.IOException
ModelComponentBase
scan
and complete
enough to allow full reconstruction of the element.write
in interface Scannable
write
in class ModelComponentBase
pw
- stream for writing the elementfmt
- numeric formating informationref
- optional reference object which can be used for producing references to
other objectsjava.io.IOException
- if an I/O error occuredpublic RenderProps createRenderProps()
HasRenderProps
createRenderProps
in interface HasRenderProps
createRenderProps
in class Frame
public void updateBounds(Point3d pmin, Point3d pmax)
GLRenderable
updateBounds
in interface GLRenderable
updateBounds
in class Frame
pmin
- minimum pointpmax
- maximum pointpublic void render(GLRenderer renderer, int flags)
GLRenderable
render
in interface GLRenderable
render
in class Frame
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
.public void prerender(RenderList list)
GLRenderable
prerender
in interface GLRenderable
prerender
in class Frame
public void transformGeometry(AffineTransform3dBase X, TransformableGeometry topObject, int flags)
TransformableGeometry
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
.transformGeometry
in interface TransformableGeometry
transformGeometry
in class Frame
X
- affine transformationtopObject
- component on which the method was initially invokedflags
- provides information about the context in which the
transformation is being applied.public void transformGeometry(AffineTransform3dBase X)
TransformableGeometry
transformGeometry (X, this, 0);
transformGeometry
in interface TransformableGeometry
transformGeometry
in class Frame
X
- affine transformationpublic void scaleDistance(double s)
ScalableUnits
scaleDistance
in interface ScalableUnits
scaleDistance
in class Frame
s
- scaling factorpublic void scaleMass(double s)
ScalableUnits
scaleMass
in interface ScalableUnits
scaleMass
in class Frame
s
- scaling factorpublic void setDynamic(boolean dynamic)
public 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 CopyableComponent
isDuplicatable
in class Frame
true
if this component can be duplicated.public boolean getCopyReferences(java.util.List<ModelComponent> refs, ModelComponent ancestor)
true
if and only if CopyableComponent.isDuplicatable()
returns
true.getCopyReferences
in interface CopyableComponent
getCopyReferences
in class Frame
refs
- list to which references are appendedancestor
- root node of the hierarchy from which references are to be excludedpublic RigidBody copy(int flags, java.util.Map<ModelComponent,ModelComponent> copyMap)
CopyableComponent
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
.copy
in interface CopyableComponent
copy
in class Frame
public FrameMarker[] getFrameMarkers()
public void addConnector(BodyConnector c)
addConnector
in interface ConnectableBody
public void removeConnector(BodyConnector c)
removeConnector
in interface ConnectableBody
public java.util.List<BodyConnector> getConnectors()
getConnectors
in interface ConnectableBody
public boolean isFreeBody()
isFreeBody
in interface ConnectableBody
public void updateAttachmentPosStates()
public static RigidBody createSphere(java.lang.String bodyName, double r, double density, int nslices)
bodyName
- name of the RigidBodyr
- radius of the spheredensity
- density of the bodynslices
- number of slices used in creating the meshpublic static RigidBody createIcosahedralSphere(java.lang.String bodyName, double r, double density, int ndivisions)
bodyName
- name of the RigidBodyr
- radius of the spheredensity
- density of the bodyndivisions
- number of divisions used in creating the meshpublic static RigidBody createEllipsoid(java.lang.String bodyName, double a, double b, double c, double density, int nslices)
bodyName
- name of the RigidBodya
- semi-axis length in the x directionb
- semi-axis length in the y directionc
- semi-axis length in the z directiondensity
- density of the bodynslices
- number of slices used in creating the meshpublic static RigidBody createBox(java.lang.String bodyName, double wx, double wy, double wz, double density)
bodyName
- name of the RigidBodywx
- width of the box in the x directionwy
- width of the box in the y directionwz
- width of the box in the z directiondensity
- density of the bodypublic static RigidBody createCylinder(java.lang.String bodyName, double r, double h, double density, int nsides)
bodyName
- name of the RigidBodyr
- cylinder radiush
- cylinder heightdensity
- density of the bodynsides
- number of sides used in creating the cylinder meshpublic static RigidBody createFromMesh(java.lang.String bodyName, PolygonalMesh mesh, double density, double scale)
public static RigidBody createFromMesh(java.lang.String bodyName, PolygonalMesh mesh, java.lang.String meshFilePath, double density, double scale)
public static RigidBody createFromMesh(java.lang.String bodyName, java.lang.String meshPath, double density, double scale)
public static RigidBody createFromMesh(java.lang.String bodyName, java.lang.Object obj, java.lang.String relPath, double density, double scale)
public PolygonalMesh getCollisionMesh()
CollidableBody
null
if there is no such mesh. If this method
returns null
, then no collisions will
be performed for this collidable, regardless any default or explicit
collision behaviors that have been arranged by the system.getCollisionMesh
in interface CollidableBody
public Collidable.Collidability getCollidable()
Collidable
Collidable.Collidability
of this Collidable. This provides
control over whether external and/or internal collisions are enabled for
this Collidable. This setting takes precedence over default and
explicitly requested collision behaviors.
Note that for collisions to actually occur, they still need to be enabled through either a default or explicit collision behavior in the MechModel.
getCollidable
in interface Collidable
public void setCollidable(Collidable.Collidability c)
public boolean isDeformable()
Collidable
true
if this collidable is deformable. Whether or
not a collidable is deformable determines how it responds to default
collision behaviors involving deformable and rigid collidables. Also,
self-collisions among sub-collidables of a collidable A are permitted
only if A is deformable.isDeformable
in interface Collidable
isDeformable
in interface ConnectableBody
true
if this collidable is deformablepublic void getVertexMasters(java.util.List<ContactMaster> mlist, Vertex3d vtx)
CollidableBody
mlist
. The list should not be cleared. The vertex
should be a vertex of the mesh returned by CollidableBody.getCollisionMesh()
.getVertexMasters
in interface CollidableBody
mlist
- collected master component informationvtx
- vertex for which the master components are requestedpublic boolean containsContactMaster(CollidableDynamicComponent comp)
CollidableBody
containsContactMaster
in interface CollidableBody
comp
- component to test fortrue
if comp
is contained in
this Collidablepublic boolean allowCollision(ContactPoint cpnt, Collidable other, java.util.Set<Vertex3d> attachedVertices)
CollidableBody
true
if a collision between this Collidable
and other
should be allowed for the contact point
cpnt
. In making this decision, this method may
refer to attachedVertices
, which supplies a list
of vertices on this Collidable which are attached in some way
to the other Collidable.allowCollision
in interface CollidableBody
cpnt
- contact point being testedother
- opposing collidableattachedVertices
- list of vertices attached to other
.true
if the collision should be allowed