artisynth.core.renderables
Class EditableMesh

java.lang.Object
  extended by artisynth.core.modelbase.ModelComponentBase
      extended by artisynth.core.modelbase.RenderableComponentBase
          extended by artisynth.core.mechmodels.MeshComponent
              extended by artisynth.core.renderables.EditableMesh
All Implemented Interfaces:
ComponentChangeListener, CompositeComponent, IndexedComponentList, ModelComponent, RenderableComponent, ScalableUnits, TransformableGeometry, java.lang.Cloneable, HasProperties, HierarchyNode, GLRenderable, GLSelectable, HasRenderProps, Renderable, Scannable
Direct Known Subclasses:
EditablePolygonalMesh

public class EditableMesh
extends MeshComponent
implements CompositeComponent


Nested Class Summary
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.CompositeComponent
CompositeComponent.NavpanelDisplay
 
Nested classes/interfaces inherited from interface artisynth.core.modelbase.ModelComponent
ModelComponent.NavpanelVisibility
 
Field Summary
 
Fields inherited from class artisynth.core.mechmodels.MeshComponent
myProps
 
Fields inherited from class artisynth.core.modelbase.ModelComponentBase
enforceUniqueCompositeNames, enforceUniqueNames, myNumber, NULL_OBJ, useCompactPathNames
 
Fields inherited from interface artisynth.core.util.TransformableGeometry
ARTICULATED, SIMULATING
 
Fields inherited from interface maspack.render.GLRenderable
TRANSLUCENT, TWO_DIMENSIONAL
 
Constructor Summary
EditableMesh(MeshBase mesh)
           
 
Method Summary
 void componentChanged(ComponentChangeEvent e)
          Notifies this composite component that a change has occured within one or more of its descendants.
 EditableMesh copy(int flags, java.util.Map<ModelComponent,ModelComponent> copyMap)
           
 RenderProps createRenderProps()
          Factory method to create render properties appropriate to this object.
 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()
           
 MeshBase getMesh()
           
 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.
 VertexList<VertexComponent> getVertexComponents()
           
 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.
 void render(GLRenderer renderer, int flags)
          Render this object using Open GL via the JOGL.
 void scaleDistance(double s)
          Scales all distance coordinates.
 void scan(ReaderTokenizer rtok, java.lang.Object ref)
          Scans this element from a ReaderTokenizer.
 void setDisplayMode(CompositeComponent.NavpanelDisplay mode)
          Sets the display mode for this component.
 void setSelected(boolean selected)
          Selects or deselects this component.
 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)
           
 void updateSlavePos()
           
 void updateVertices()
           
 
Methods inherited from class artisynth.core.mechmodels.MeshComponent
getAllPropertyInfo, getVertex, numVertices, render, scaleMass, setDefaultValues, setMesh, setMesh, setMesh, transformGeometry, transformGeometry, transformGeometry, updatePosition
 
Methods inherited from class artisynth.core.modelbase.RenderableComponentBase
getRenderHints, getRenderProps, getSelection, 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, 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, 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
 

Constructor Detail

EditableMesh

public EditableMesh(MeshBase mesh)
Method Detail

createRenderProps

public RenderProps createRenderProps()
Description copied from interface: HasRenderProps
Factory method to create render properties appropriate to this object.

Specified by:
createRenderProps in interface HasRenderProps
Overrides:
createRenderProps in class MeshComponent
Returns:
new render properties for this object

updateVertices

public void updateVertices()

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 ModelComponentBase
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 EditableMesh copy(int flags,
                         java.util.Map<ModelComponent,ModelComponent> copyMap)
Overrides:
copy in class MeshComponent

hasState

public boolean hasState()
Description copied from interface: ModelComponent
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 ModelComponentBase

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

prerender

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

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

updateSlavePos

public void updateSlavePos()
Overrides:
updateSlavePos in class MeshComponent

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 MeshComponent
Parameters:
s - scaling factor

getMesh

public MeshBase getMesh()
Overrides:
getMesh in class MeshComponent

render

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

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

getVertexComponents

public VertexList<VertexComponent> getVertexComponents()