Installation Guides
  Installing and Running ArtiSynth on Windows
    1 Overview
    2 Prerequisites
    3 The ArtiSynth installation folder
    4 Java Requirements
      4.1 Ensuring the JDK is visible to your system
    5 Installing a Precompiled Release
      5.1 Running from the file browser
      5.2 Running from a terminal window
    6 Installing from GitHub
      6.1 Installation using Eclipse
      6.2 Installation using Git for Windows
    7 Loading and Running Models
      7.1 Using the Models menu
      7.2 Other ways to load models
      7.3 Viewing and interacting with models
      7.4 Command line arguments
    8 Creating and Adding Models
      8.1 Model packages
      8.2 Compiling models
      8.3 Finding models in the model menu
    9 Settings and the user configuration folder
    10 Integrating external models
      10.1 Making ArtiSynth visible to the compiler
        10.1.1 Eclipse development
        10.1.2 Command line development
      10.2 Making external models visible to ArtiSynth
        10.2.1 Running from Eclipse
        10.2.2 Using the external classpath
        10.2.3 Setting the CLASSPATH environment variable
        10.2.4 Using the -cp option
    11 Installing artisynth_models
      11.1 Installing a precompiled release
      11.2 Installing from GitHub
        11.2.1 Installation using Eclipse
        11.2.2 Installation using Git for Windows
    12 Updating ArtiSynth
      12.1 Library updates
      12.2 Refused pulls
        12.2.1 Discarding the conflicting files
        12.2.2 Merge the conflicting files
    13 The Eclipse IDE
      13.1 Installing Eclipse
        13.1.1 Setting Eclipse to use a separate Java JDK
        13.1.2 Preventing excess resource copying
      13.2 Importing external projects
      13.3 Making a copy of the ArtiSynth launch configuration
      13.4 Configuring environment variables
        13.4.1 Setting environment variables
      13.5 Command line and JVM arguments
        13.5.1 Setting command line and JVM arguments
      13.6 Adding projects to the build path
      13.7 Adding projects to the ArtiSynth launch configuration
    14 Additional Information
      14.1 Adding Directories to the System Path
      14.2 Environment variables
        14.2.1 Setting environment variables
        14.2.2 Typical environment settings
        14.2.3 GitBash environment settings
      14.3 ArtiSynth Libraries
      14.4 The EXTCLASSPATH File
      14.5 Quick Git Summary
  Installing and Running ArtiSynth on MacOS
    1 Overview
    2 Prerequisites
    3 The ArtiSynth installation folder
    4 Java Requirements
      4.1 Ensuring the JDK is visible to your system
    5 Installing a Precompiled Release
      5.1 Running from the file browser
      5.2 Running from a terminal window
    6 Installing from GitHub
      6.1 Installation using Eclipse
      6.2 Installation using the command line
    7 Loading and Running Models
      7.1 Getting past MacOS security
      7.2 Using the Models menu
      7.3 Other ways to load models
      7.4 Viewing and interacting with models
      7.5 Command line arguments
    8 Creating and Adding Models
      8.1 Model packages
      8.2 Compiling models
      8.3 Finding models in the model menu
    9 Settings and the user configuration folder
    10 Integrating external models
      10.1 Making ArtiSynth visible to the compiler
        10.1.1 Eclipse development
        10.1.2 Command line development
      10.2 Making external models visible to ArtiSynth
        10.2.1 Running from Eclipse
        10.2.2 Using the external classpath
        10.2.3 Setting the CLASSPATH environment variable
        10.2.4 Using the -cp option
    11 Installing artisynth_models
      11.1 Installing a precompiled release
      11.2 Installing from GitHub
        11.2.1 Installation using Eclipse
        11.2.2 Installation from the command line
    12 Updating ArtiSynth
      12.1 Library updates
      12.2 Refused pulls
        12.2.1 Discarding the conflicting files
        12.2.2 Merge the conflicting files
    13 The Eclipse IDE
      13.1 Installing Eclipse
        13.1.1 Setting Eclipse to use a separate Java JDK
        13.1.2 Preventing excess resource copying
      13.2 Importing external projects
      13.3 Making a copy of the ArtiSynth launch configuration
      13.4 Configuring environment variables
        13.4.1 Setting environment variables
      13.5 Command line and JVM arguments
        13.5.1 Setting command line and JVM arguments
      13.6 Adding projects to the build path
      13.7 Adding projects to the ArtiSynth launch configuration
    14 Additional Information
      14.1 Adding Directories to the System Path
      14.2 Environment variables
        14.2.1 Example environment set up for bash
        14.2.2 Example environment setup for csh or tcsh
      14.3 ArtiSynth Libraries
      14.4 The EXTCLASSPATH File
      14.5 Quick Git Summary
  Installing and Running ArtiSynth on Linux
    1 Overview
    2 Prerequisites
    3 The ArtiSynth installation folder
    4 Java Requirements
      4.1 Ensuring the JDK is visible to your system
    5 Installing a Precompiled Release
      5.1 Running from a terminal window
    6 Installing from GitHub
      6.1 Installation using Eclipse
      6.2 Installation using the command line
    7 Loading and Running Models
      7.1 Using the Models menu
      7.2 Other ways to load models
      7.3 Viewing and interacting with models
      7.4 Command line arguments
    8 Creating and Adding Models
      8.1 Model packages
      8.2 Compiling models
      8.3 Finding models in the model menu
    9 Settings and the user configuration folder
    10 Integrating external models
      10.1 Making ArtiSynth visible to the compiler
        10.1.1 Eclipse development
        10.1.2 Command line development
      10.2 Making external models visible to ArtiSynth
        10.2.1 Running from Eclipse
        10.2.2 Using the external classpath
        10.2.3 Setting the CLASSPATH environment variable
        10.2.4 Using the -cp option
    11 Installing artisynth_models
      11.1 Installing a precompiled release
      11.2 Installing from GitHub
        11.2.1 Installation using Eclipse
        11.2.2 Installation from the command line
    12 Updating ArtiSynth
      12.1 Library updates
      12.2 Refused pulls
        12.2.1 Discarding the conflicting files
        12.2.2 Merge the conflicting files
    13 The Eclipse IDE
      13.1 Installing Eclipse
        13.1.1 Setting Eclipse to use a separate Java JDK
        13.1.2 Preventing excess resource copying
      13.2 Importing external projects
      13.3 Making a copy of the ArtiSynth launch configuration
      13.4 Configuring environment variables
        13.4.1 Setting environment variables
      13.5 Command line and JVM arguments
        13.5.1 Setting command line and JVM arguments
      13.6 Adding projects to the build path
      13.7 Adding projects to the ArtiSynth launch configuration
    14 Additional Information
      14.1 Adding Directories to the System Path
      14.2 Environment variables
        14.2.1 Example environment set up for bash
        14.2.2 Example environment setup for csh or tcsh
      14.3 ArtiSynth Libraries
      14.4 The EXTCLASSPATH File
      14.5 Quick Git Summary
  Installing and Running ArtiSynth on Windows
    1 Overview
    2 Prerequisites
    3 The ArtiSynth installation folder
    4 Java Requirements
      4.1 Ensuring the JDK is visible to your system
    5 Installing a Precompiled Release
      5.1 Running from the file browser
      5.2 Running from a terminal window
    6 Installing from GitHub
      6.1 Installation using Eclipse
      6.2 Installation using Git for Windows
    7 Loading and Running Models
      7.1 Using the Models menu
      7.2 Other ways to load models
      7.3 Viewing and interacting with models
      7.4 Command line arguments
    8 Creating and Adding Models
      8.1 Model packages
      8.2 Compiling models
      8.3 Finding models in the model menu
    9 Settings and the user configuration folder
    10 Integrating external models
      10.1 Making ArtiSynth visible to the compiler
        10.1.1 Eclipse development
        10.1.2 Command line development
      10.2 Making external models visible to ArtiSynth
        10.2.1 Running from Eclipse
        10.2.2 Using the external classpath
        10.2.3 Setting the CLASSPATH environment variable
        10.2.4 Using the -cp option
    11 Installing artisynth_models
      11.1 Installing a precompiled release
      11.2 Installing from GitHub
        11.2.1 Installation using Eclipse
        11.2.2 Installation using Git for Windows
    12 Updating ArtiSynth
      12.1 Library updates
      12.2 Refused pulls
        12.2.1 Discarding the conflicting files
        12.2.2 Merge the conflicting files
    13 The Eclipse IDE
      13.1 Installing Eclipse
        13.1.1 Setting Eclipse to use a separate Java JDK
        13.1.2 Preventing excess resource copying
      13.2 Importing external projects
      13.3 Making a copy of the ArtiSynth launch configuration
      13.4 Configuring environment variables
        13.4.1 Setting environment variables
      13.5 Command line and JVM arguments
        13.5.1 Setting command line and JVM arguments
      13.6 Adding projects to the build path
      13.7 Adding projects to the ArtiSynth launch configuration
    14 Additional Information
      14.1 Adding Directories to the System Path
      14.2 Environment variables
        14.2.1 Setting environment variables
        14.2.2 Typical environment settings
        14.2.3 GitBash environment settings
      14.3 ArtiSynth Libraries
      14.4 The EXTCLASSPATH File
      14.5 Quick Git Summary
  Installing and Running ArtiSynth on MacOS
    1 Overview
    2 Prerequisites
    3 The ArtiSynth installation folder
    4 Java Requirements
      4.1 Ensuring the JDK is visible to your system
    5 Installing a Precompiled Release
      5.1 Running from the file browser
      5.2 Running from a terminal window
    6 Installing from GitHub
      6.1 Installation using Eclipse
      6.2 Installation using the command line
    7 Loading and Running Models
      7.1 Getting past MacOS security
      7.2 Using the Models menu
      7.3 Other ways to load models
      7.4 Viewing and interacting with models
      7.5 Command line arguments
    8 Creating and Adding Models
      8.1 Model packages
      8.2 Compiling models
      8.3 Finding models in the model menu
    9 Settings and the user configuration folder
    10 Integrating external models
      10.1 Making ArtiSynth visible to the compiler
        10.1.1 Eclipse development
        10.1.2 Command line development
      10.2 Making external models visible to ArtiSynth
        10.2.1 Running from Eclipse
        10.2.2 Using the external classpath
        10.2.3 Setting the CLASSPATH environment variable
        10.2.4 Using the -cp option
    11 Installing artisynth_models
      11.1 Installing a precompiled release
      11.2 Installing from GitHub
        11.2.1 Installation using Eclipse
        11.2.2 Installation from the command line
    12 Updating ArtiSynth
      12.1 Library updates
      12.2 Refused pulls
        12.2.1 Discarding the conflicting files
        12.2.2 Merge the conflicting files
    13 The Eclipse IDE
      13.1 Installing Eclipse
        13.1.1 Setting Eclipse to use a separate Java JDK
        13.1.2 Preventing excess resource copying
      13.2 Importing external projects
      13.3 Making a copy of the ArtiSynth launch configuration
      13.4 Configuring environment variables
        13.4.1 Setting environment variables
      13.5 Command line and JVM arguments
        13.5.1 Setting command line and JVM arguments
      13.6 Adding projects to the build path
      13.7 Adding projects to the ArtiSynth launch configuration
    14 Additional Information
      14.1 Adding Directories to the System Path
      14.2 Environment variables
        14.2.1 Example environment set up for bash
        14.2.2 Example environment setup for csh or tcsh
      14.3 ArtiSynth Libraries
      14.4 The EXTCLASSPATH File
      14.5 Quick Git Summary
  Installing and Running ArtiSynth on Linux
    1 Overview
    2 Prerequisites
    3 The ArtiSynth installation folder
    4 Java Requirements
      4.1 Ensuring the JDK is visible to your system
    5 Installing a Precompiled Release
      5.1 Running from a terminal window
    6 Installing from GitHub
      6.1 Installation using Eclipse
      6.2 Installation using the command line
    7 Loading and Running Models
      7.1 Using the Models menu
      7.2 Other ways to load models
      7.3 Viewing and interacting with models
      7.4 Command line arguments
    8 Creating and Adding Models
      8.1 Model packages
      8.2 Compiling models
      8.3 Finding models in the model menu
    9 Settings and the user configuration folder
    10 Integrating external models
      10.1 Making ArtiSynth visible to the compiler
        10.1.1 Eclipse development
        10.1.2 Command line development
      10.2 Making external models visible to ArtiSynth
        10.2.1 Running from Eclipse
        10.2.2 Using the external classpath
        10.2.3 Setting the CLASSPATH environment variable
        10.2.4 Using the -cp option
    11 Installing artisynth_models
      11.1 Installing a precompiled release
      11.2 Installing from GitHub
        11.2.1 Installation using Eclipse
        11.2.2 Installation from the command line
    12 Updating ArtiSynth
      12.1 Library updates
      12.2 Refused pulls
        12.2.1 Discarding the conflicting files
        12.2.2 Merge the conflicting files
    13 The Eclipse IDE
      13.1 Installing Eclipse
        13.1.1 Setting Eclipse to use a separate Java JDK
        13.1.2 Preventing excess resource copying
      13.2 Importing external projects
      13.3 Making a copy of the ArtiSynth launch configuration
      13.4 Configuring environment variables
        13.4.1 Setting environment variables
      13.5 Command line and JVM arguments
        13.5.1 Setting command line and JVM arguments
      13.6 Adding projects to the build path
      13.7 Adding projects to the ArtiSynth launch configuration
    14 Additional Information
      14.1 Adding Directories to the System Path
      14.2 Environment variables
        14.2.1 Example environment set up for bash
        14.2.2 Example environment setup for csh or tcsh
      14.3 ArtiSynth Libraries
      14.4 The EXTCLASSPATH File
      14.5 Quick Git Summary
ArtiSynth Modeling Guide
  Preface
    How to read this guide
  Chapter 1 ArtiSynth Overview
    1.1 System structure
      1.1.1 Simulation components
      1.1.2 The MechModel
      1.1.3 Instrumentation components
      1.1.4 The RootModel
      1.1.5 Component numbers, names and path names
    1.2 Simulation overview
      1.2.1 Model advancement
      1.2.2 Full coordinate formulation
      1.2.3 Time stepping and integration physics
      1.2.4 Parametric and attached dynamic components
    1.3 Basic packages
      1.3.1 maspack
      1.3.2 artisynth.core
      1.3.3 artisynth.demos
    1.4 Properties
      1.4.1 Querying and setting property values
      1.4.2 Property handles and paths
      1.4.3 Composite and inheritable properties
    1.5 Creating an application model
      1.5.1 Implementing the build() method
      1.5.2 Making models visible to ArtiSynth
      1.5.3 Loading and running a model
  Chapter 2 Supporting classes
    2.1 Vectors and matrices
    2.2 Rotations and transformations
    2.3 Points and Vectors
    2.4 Spatial vectors and inertias
    2.5 Meshes
      2.5.1 Mesh creation
      2.5.2 Setting normals, colors, and textures
      2.5.3 Automatic creation of normals and hard edges
      2.5.4 Vertex and feature coloring
      2.5.5 Reading and writing mesh files
      2.5.6 Reading and writing normal and texture information
      2.5.7 Constructive solid geometry
    2.6 Reading source relative files
    2.7 Reading and caching remote files
  Chapter 3 Mechanical Models I
    3.1 Points, particles, and springs
      3.1.1 Points
      3.1.2 Particles
      3.1.3 Axial springs and materials
      3.1.4 Axial spring components
      3.1.5 Example: a simple particle-spring model
      3.1.6 Damping parameters
      3.1.7 Axial materials
    3.2 Rigid bodies
      3.2.1 Frame markers
      3.2.2 Example: a simple rigid body-spring model
      3.2.3 Creating rigid bodies
      3.2.4 Pose and velocity
      3.2.5 Inertia and the surface mesh
      3.2.6 Coordinate frames and the center of mass
      3.2.7 Damping parameters
      3.2.8 Rendering rigid bodies
      3.2.9 Multiple meshes
      3.2.10 Example: a composite rigid body
    3.3 Mesh components
      3.3.1 Fixed mesh bodies
      3.3.2 Example: adding mesh bodies to MechModel
    3.4 Joints and connectors
      3.4.1 Joints and coordinate frames
      3.4.2 Joint coordinates, constraints, and errors
      3.4.3 Creating joints
      3.4.4 Working with coordinates
      3.4.5 Coordinate limits and locking
      3.4.6 Example: a simple hinge joint
      3.4.7 Joint coordinate handles
      3.4.8 Constraint forces
      3.4.9 Compliance and regularization
      3.4.10 Example: an overconstrained linkage
      3.4.11 Rendering joints
    3.5 Joint components
      3.5.1 Hinge joint
      3.5.2 Slider joint
      3.5.3 Cylindrical joint
      3.5.4 Slotted hinge joint
      3.5.5 Universal joint
      3.5.6 Skewed universal joint
      3.5.7 Gimbal joint
      3.5.8 Spherical joint
      3.5.9 Planar joint
      3.5.10 Planar translation joint
      3.5.11 Ellipsoid joint
        3.5.11.1 OpenSim compatibility
      3.5.12 Solid joint
      3.5.13 Planar Connector
      3.5.14 Segmented Planar Connector
      3.5.15 Legacy Joints
      3.5.16 Example: A multijointed arm
    3.6 Setting joint coordinates
      3.6.1 Using the CoordinateSetter
      3.6.2 Coordinates in closed kinematic chains
    3.7 Frame springs
      3.7.1 Frame spring coordinate frames
      3.7.2 Frame materials
        3.7.2.1 PowerFrameMaterial
      3.7.3 Creating frame springs
      3.7.4 Example: two bodies connected by a frame spring
    3.8 Other point-based forces
      3.8.1 Forces between points and planes or meshes
      3.8.2 Example: point plane forces
      3.8.3 Example: point mesh forces
    3.9 Attachments
      3.9.1 Point attachments
      3.9.2 Example: model with particle attachments
      3.9.3 Frame attachments
      3.9.4 Example: model with frame attachments
    3.10 Attached frames
      3.10.1 Frame attached frames
      3.10.2 Example: attached frames for a rigid body
  Chapter 4 Mechanical Models II
    4.1 Simulation control properties
      4.1.1 Simulation step size
      4.1.2 Integrator
      4.1.3 Position stabilization
    4.2 Units
      4.2.1 Scaling units
    4.3 Render properties
      4.3.1 Render property taxonomy
      4.3.2 Setting render properties
      4.3.3 Texture mapping
    4.4 Custom rendering
      4.4.1 Component render() methods
      4.4.2 Implementing custom rendering
      4.4.3 Example: rendering body forces
      4.4.4 The prerender() method
    4.5 Point-to-point muscles, tendons and ligaments
      4.5.1 Simple muscle materials
        4.5.1.1 SimpleAxialMuscle
        4.5.1.2 ConstantAxialMuscle
        4.5.1.3 LinearAxialMuscle
        4.5.1.4 PeckAxialMuscle
        4.5.1.5 BlemkerAxialMuscle
      4.5.2 Example: muscle attached to a rigid body
      4.5.3 Equilibrium muscles
      4.5.4 Equilibrium muscle materials
        4.5.4.1 Millard2012AxialMuscle
        4.5.4.2 Thelen2003AxialMuscle
      4.5.5 Tendons and ligaments
        4.5.5.1 Millard2012AxialTendon
        4.5.5.2 Thelen2003AxialTendon
        4.5.5.3 Blankevoort1991AxialLigament
      4.5.6 Example: muscles with separate tendons
    4.6 Distance Grids and Components
    4.7 Transforming geometry
      4.7.1 Nonlinear transformations
      4.7.2 Example: the FemModelDeformer class
      4.7.3 Implementation and behavior
      4.7.4 Use in model registration
    4.8 General component arrangements
      4.8.1 Container components
      4.8.2 Example: a net formed from balls and springs
      4.8.3 Adding containers to other models
      4.8.4 Reference lists for grouping components
      4.8.5 Example: reference lists in NetDemo
    4.9 Custom Joints
      4.9.1 Joint constraints
      4.9.2 Unilateral constraint engagement
      4.9.3 Implementing a custom joint
      4.9.4 Implementing a custom coupling
      4.9.5 Example: a simple custom joint
  Chapter 5 Simulation Control
    5.1 Control Panels
      5.1.1 General principles
      5.1.2 Example: Creating a simple control panel
      5.1.3 Example: Controlling properties in multiple components
      5.1.4 Coordinate panels
        5.1.4.1 Panel settings
        5.1.4.2 Coordinate setting methods
    5.2 Custom properties
      5.2.1 Adding properties to a component
      5.2.2 Example: a visibility property
    5.3 Controllers and monitors
      5.3.1 Implementation
        5.3.1.1 Target positions and velocities
      5.3.2 Example: A controller to move a point
    5.4 Probes
      5.4.1 Numeric probe structure
      5.4.2 Creating probes in code
      5.4.3 Example: probes connected to SimpleMuscle
      5.4.4 Data file format
      5.4.5 Adding input probe data in code
        5.4.5.1 Extending data to the start and end
      5.4.6 Setting data from text or CSV files and other probes
      5.4.7 Tracing probes
      5.4.8 Position probes
      5.4.9 Velocity probes
      5.4.10 Example: controlling a point and frame
      5.4.11 Numeric monitor probes
      5.4.12 Numeric control probes
    5.5 Working with TRC data
      5.5.1 TRC reader
      5.5.2 TRC writer
      5.5.3 Example: moving MultiJointedArm with TRC data
    5.6 Application-Defined Menu Items
      5.6.1 Smoothing probe data
  Chapter 6 Finite Element Models
    6.1 Overview
      6.1.1 FemModel3d
      6.1.2 Component Structure
        6.1.2.1 Nodes
        6.1.2.2 Elements
        6.1.2.3 Shell elements
        6.1.2.4 Meshes
      6.1.3 Materials
      6.1.4 Boundary conditions
    6.2 FEM model creation
      6.2.1 Factory methods
      6.2.2 Loading external FEM meshes
      6.2.3 Generating from surfaces
      6.2.4 Building elements in code
      6.2.5 Example: a simple beam model
    6.3 FEM Geometry
      6.3.1 Surface meshes
      6.3.2 Embedding geometry within an FEM
      6.3.3 Example: a beam with an embedded sphere
    6.4 Connecting FEM models to other components
      6.4.1 Connecting nodes to rigid bodies or particles
      6.4.2 Example: connecting a beam to a block
      6.4.3 Connecting nodes directly to elements
      6.4.4 Example: connecting two FEMs together
      6.4.5 Finding which nodes to attach
      6.4.6 Selecting nodes in the viewer
      6.4.7 Example: two bodies connected by an FEM ?spring?
      6.4.8 Nodal-based attachments
      6.4.9 Example: element vs. nodal-based attachments
    6.5 FEM markers
      6.5.1 Example: attaching an FEM beam to a muscle
    6.6 Frame attachments
      6.6.1 Example: attaching frames to an FEM beam
      6.6.2 Attached frames
      6.6.3 Example: attached frames for an FE model
      6.6.4 Adding joints to FEM models
      6.6.5 Example: two FEM beams connected by a joint
    6.7 Incompressibility
      6.7.1 Volume regions and locking
      6.7.2 Hard incompressibility
      6.7.3 Soft incompressibility
      6.7.4 Incompressibility and linear materials
      6.7.5 Using incompressibility in practice
    6.8 Varying and augmenting material behaviors
      6.8.1 Example: FEM sheet with a stiff spine
    6.9 Muscle activated FEM models
      6.9.1 FemMuscleModel
        6.9.1.1 Bundles
        6.9.1.2 Exciters
      6.9.2 Fibre-based muscles
      6.9.3 Material-based muscles
      6.9.4 Example: toy FEM muscle model
      6.9.5 Example: comparison with two beam examples
    6.10 Material types
      6.10.1 Linear
        6.10.1.1 LinearMaterial
        6.10.1.2 TransverseLinearMaterial
        6.10.1.3 AnisotropicLinearMaterial
      6.10.2 Hyperelastic materials
        6.10.2.1 St Venant-Kirchoff material
        6.10.2.2 Neo-Hookean material
        6.10.2.3 Incompressible neo-Hookean material
        6.10.2.4 Mooney-Rivlin material
        6.10.2.5 Ogden material
        6.10.2.6 Fung orthotropic material
        6.10.2.7 Yeoh material
        6.10.2.8 Arruda-Boyce material
        6.10.2.9 Veronda-Westmann material
        6.10.2.10 Incompressible material
      6.10.3 Muscle materials
        6.10.3.1 Generic muscle
        6.10.3.2 Blemker muscle
        6.10.3.3 Full Blemker muscle
        6.10.3.4 Simple force muscle
    6.11 Stress, strain and strain energy
      6.11.1 Computing nodal values
      6.11.2 Scalar stress/strain measures
      6.11.3 Strain energy
    6.12 Rendering and Visualizations
      6.12.1 Nodes
      6.12.2 Elements
      6.12.3 Surface and other meshes
      6.12.4 FEM-based muscles
      6.12.5 Color bars
      6.12.6 Example: stress/strain plotting with color bars
      6.12.7 Cut planes
      6.12.8 Example: FEM model with a cut plane
  Chapter 7 Fields
    7.1 Grid fields
    7.2 FEM fields
      7.2.1 Nodal fields
      7.2.2 Element fields
      7.2.3 Sub-element fields
    7.3 Mesh fields
      7.3.1 Vertex fields
      7.3.2 Face fields
    7.4 Fields for VectorNd, MatrixNd and Vector3d
    7.5 Binding material properties
      7.5.1 Example: FEM with variable stiffness
      7.5.2 Example: specifying FEM muscle directions
    7.6 Visualizing fields
      7.6.1 Scalar fields
      7.6.2 Vector fields
      7.6.3 Grid fields
      7.6.4 Render meshes
      7.6.5 Example: Visualizing a scalar nodal field
      7.6.6 Examples: Visualizing other fields
  Chapter 8 Contact and Collision
    8.1 Enabling collisions
      8.1.1 Collisions between specific bodies
      8.1.2 Default collisions between groups
      8.1.3 Example: collision with a plane
      8.1.4 Collisions for FEM models
      8.1.5 Example: FEM models and rigid bodies
    8.2 Collision behaviors and collidability
      8.2.1 Collision behaviors
      8.2.2 Collidability
    8.3 Collision meshes and compound collidables
      8.3.1 Example: redefining a rigid body collision mesh
      8.3.2 Compound collidables and self-collision
      8.3.3 Example: FEM model with self-collision
      8.3.4 Collidable bodies
      8.3.5 Nested MechModels
    8.4 Implementation
      8.4.1 Contact methods
        8.4.1.1 Contour region
        8.4.1.2 Vertex penetration
        8.4.1.3 Setting the contact method
      8.4.2 Collider types
        8.4.2.1 Collision meshes and signed distance grids
    8.5 Contact rendering
      8.5.1 Example: rendering normals and contours
      8.5.2 Example: rendering a color map
      8.5.3 Example: rendering contact pressures
    8.6 Overconstrained contact
      8.6.1 Constraint reduction
    8.7 Contact regularization
      8.7.1 Compliant contact
      8.7.2 Contact force behaviors
        8.7.2.1 Computing forces based on pressure
      8.7.3 Area compliant contact
        8.7.3.1 Choosing the stiffness
        8.7.3.2 Choosing the damping
      8.7.4 Elastic foundation contact
      8.7.5 Example: elastic foundation contact of a ball in a bowl
      8.7.6 Example: binding EFC properties to fields
    8.8 Monitoring collisions
      8.8.1 Collision responses
      8.8.2 Available information
      8.8.3 Example: monitoring contact forces
      8.8.4 Example: forces and pressures on mesh vertices
    8.9 Tips and limitations
      8.9.1 Contact jitter
      8.9.2 Passing through objects
      8.9.3 Stray vertices
      8.9.4 Coulomb friction and stability
  Chapter 9 Muscle Wrapping and Via Points
    9.1 Via Points
      9.1.1 Example: a muscle with via points
    9.2 Obstacle Wrapping
      9.2.1 Example: wrapping around a cylinder
    9.3 General Surfaces and Distance Grids
      9.3.1 Example: wrapping around a bone
    9.4 Initializing the Wrap Path
      9.4.1 Example: wrapping around a torus
    9.5 Alternate Wrapping Surfaces
      9.5.1 Example: wrapping for a finger joint
      9.5.2 Example: toy muscle arm with wrapping
    9.6 Tuning the Wrapping Behavior
  Chapter 10 Inverse Simulation
    10.1 Overview
      10.1.1 Tracking controller operation
      10.1.2 Motion tracking
        10.1.2.1 Chase control
        10.1.2.2 PD control
      10.1.3 Generating excitations using a quadratic program
      10.1.4 Force tracking
      10.1.5 Incremental computation
      10.1.6 Setting up the tracking controller
      10.1.7 Example: moving a point with multiple Muscles
    10.2 Tracking controller components
      10.2.1 Exciters
        10.2.1.1 Excitation coloring
      10.2.2 Motion targets
        10.2.2.1 Motion target term
        10.2.2.2 Motion target rendering
      10.2.3 Regularization
        10.2.3.1 L2 Regularization
        10.2.3.2 Excitation damping
      10.2.4 Example: controlling ToyMuscleArm
      10.2.5 Example: controlling an FEM muscle model
      10.2.6 Force effector targets
        10.2.6.1 Force effector term
      10.2.7 Example: controlling tension in a spring
      10.2.8 Target components
      10.2.9 Point and frame exciters
      10.2.10 Example: controlling ToyMuscleArm with FrameExciters
    10.3 Tracking controller structure and settings
      10.3.1 Controller structure
      10.3.2 Controller properties
      10.3.3 Motion term properties
      10.3.4 Properties for other cost terms
    10.4 Managing probes and control panels
      10.4.1 Inverse simulation probes
      10.4.2 Example: using InverseManager probes
      10.4.3 Inverse control panel
    10.5 Inverse kinematics
      10.5.1 Inverse kinematics solver
      10.5.2 Creating probes with IKSolver
      10.5.3 Using IKSolver in a simulation context
      10.5.4 Example: moving MultiJointedArm with an IKProbe
      10.5.5 Example: controlling ToyMuscleArm with inverse kinematics
    10.6 Caveats and limitations
  Chapter 11 Skinning
    11.1 Implementation
    11.2 Creating a skin mesh
      11.2.1 Example: skinning over rigid bodies
    11.3 Computing weights
      11.3.1 Setting weights explicitly
    11.4 Markers and point attachments
      11.4.1 Markers
      11.4.2 Point attachments
      11.4.3 Example: skinning rigid bodies and FEM models
      11.4.4 Mesh-based markers and attachments
    11.5 Resolution and Limitations
    11.6 Collisions
      11.6.1 Example: collision with a cylinder
    11.7 Application to muscle wrapping
      11.7.1 Example: wrapping for a finger joint
  Chapter 12 Importing OpenSim Models
    12.1 Overview
    12.2 Importing the OpenSim model
    12.3 The component hierarchy
      12.3.1 Ground
      12.3.2 Body set
      12.3.3 Joint set
      12.3.4 Force set
      12.3.5 Constraint set
      12.3.6 Marker set
    12.4 Inspecting and tuning the model
      12.4.1 Visualization
      12.4.2 Interactive control panels
      12.4.3 Model tuning
    12.5 Model editing
      12.5.1 Finding components
      12.5.2 Removing components
      12.5.3 Attaching and transferring to ArtiSynth components
      12.5.4 Example: replacing the elbow joint with a contact FEM model
      12.5.5 Example: replacing the humerus with a FEM model
  Chapter 13 DICOM Images
    13.1 The DICOM file format
    13.2 The DICOM classes
      13.2.1 DicomElement
      13.2.2 DicomHeader
      13.2.3 DicomPixelBuffer
      13.2.4 DicomSlice
      13.2.5 DicomImage
    13.3 Loading a DicomImage
      13.3.1 Time-dependent images
      13.3.2 Image formats
    13.4 The DicomViewer
    13.5 DICOM example
  Appendix A Mathematical Review
    A.1 Rotation transforms
    A.2 Rigid transforms
    A.3 Affine transforms
    A.4 Rotational velocity
    A.5 Spatial velocities and forces
    A.6 Spatial inertia
  Bibliography
  Preface
    How to read this guide
  Chapter 1 ArtiSynth Overview
    1.1 System structure
      1.1.1 Simulation components
      1.1.2 The MechModel
      1.1.3 Instrumentation components
      1.1.4 The RootModel
      1.1.5 Component numbers, names and path names
    1.2 Simulation overview
      1.2.1 Model advancement
      1.2.2 Full coordinate formulation
      1.2.3 Time stepping and integration physics
      1.2.4 Parametric and attached dynamic components
    1.3 Basic packages
      1.3.1 maspack
      1.3.2 artisynth.core
      1.3.3 artisynth.demos
    1.4 Properties
      1.4.1 Querying and setting property values
      1.4.2 Property handles and paths
      1.4.3 Composite and inheritable properties
    1.5 Creating an application model
      1.5.1 Implementing the build() method
      1.5.2 Making models visible to ArtiSynth
      1.5.3 Loading and running a model
  Chapter 2 Supporting classes
    2.1 Vectors and matrices
    2.2 Rotations and transformations
    2.3 Points and Vectors
    2.4 Spatial vectors and inertias
    2.5 Meshes
      2.5.1 Mesh creation
      2.5.2 Setting normals, colors, and textures
      2.5.3 Automatic creation of normals and hard edges
      2.5.4 Vertex and feature coloring
      2.5.5 Reading and writing mesh files
      2.5.6 Reading and writing normal and texture information
      2.5.7 Constructive solid geometry
    2.6 Reading source relative files
    2.7 Reading and caching remote files
  Chapter 3 Mechanical Models I
    3.1 Points, particles, and springs
      3.1.1 Points
      3.1.2 Particles
      3.1.3 Axial springs and materials
      3.1.4 Axial spring components
      3.1.5 Example: a simple particle-spring model
      3.1.6 Damping parameters
      3.1.7 Axial materials
    3.2 Rigid bodies
      3.2.1 Frame markers
      3.2.2 Example: a simple rigid body-spring model
      3.2.3 Creating rigid bodies
      3.2.4 Pose and velocity
      3.2.5 Inertia and the surface mesh
      3.2.6 Coordinate frames and the center of mass
      3.2.7 Damping parameters
      3.2.8 Rendering rigid bodies
      3.2.9 Multiple meshes
      3.2.10 Example: a composite rigid body
    3.3 Mesh components
      3.3.1 Fixed mesh bodies
      3.3.2 Example: adding mesh bodies to MechModel
    3.4 Joints and connectors
      3.4.1 Joints and coordinate frames
      3.4.2 Joint coordinates, constraints, and errors
      3.4.3 Creating joints
      3.4.4 Working with coordinates
      3.4.5 Coordinate limits and locking
      3.4.6 Example: a simple hinge joint
      3.4.7 Joint coordinate handles
      3.4.8 Constraint forces
      3.4.9 Compliance and regularization
      3.4.10 Example: an overconstrained linkage
      3.4.11 Rendering joints
    3.5 Joint components
      3.5.1 Hinge joint
      3.5.2 Slider joint
      3.5.3 Cylindrical joint
      3.5.4 Slotted hinge joint
      3.5.5 Universal joint
      3.5.6 Skewed universal joint
      3.5.7 Gimbal joint
      3.5.8 Spherical joint
      3.5.9 Planar joint
      3.5.10 Planar translation joint
      3.5.11 Ellipsoid joint
        3.5.11.1 OpenSim compatibility
      3.5.12 Solid joint
      3.5.13 Planar Connector
      3.5.14 Segmented Planar Connector
      3.5.15 Legacy Joints
      3.5.16 Example: A multijointed arm
    3.6 Setting joint coordinates
      3.6.1 Using the CoordinateSetter
      3.6.2 Coordinates in closed kinematic chains
    3.7 Frame springs
      3.7.1 Frame spring coordinate frames
      3.7.2 Frame materials
        3.7.2.1 PowerFrameMaterial
      3.7.3 Creating frame springs
      3.7.4 Example: two bodies connected by a frame spring
    3.8 Other point-based forces
      3.8.1 Forces between points and planes or meshes
      3.8.2 Example: point plane forces
      3.8.3 Example: point mesh forces
    3.9 Attachments
      3.9.1 Point attachments
      3.9.2 Example: model with particle attachments
      3.9.3 Frame attachments
      3.9.4 Example: model with frame attachments
    3.10 Attached frames
      3.10.1 Frame attached frames
      3.10.2 Example: attached frames for a rigid body
  Chapter 4 Mechanical Models II
    4.1 Simulation control properties
      4.1.1 Simulation step size
      4.1.2 Integrator
      4.1.3 Position stabilization
    4.2 Units
      4.2.1 Scaling units
    4.3 Render properties
      4.3.1 Render property taxonomy
      4.3.2 Setting render properties
      4.3.3 Texture mapping
    4.4 Custom rendering
      4.4.1 Component render() methods
      4.4.2 Implementing custom rendering
      4.4.3 Example: rendering body forces
      4.4.4 The prerender() method
    4.5 Point-to-point muscles, tendons and ligaments
      4.5.1 Simple muscle materials
        4.5.1.1 SimpleAxialMuscle
        4.5.1.2 ConstantAxialMuscle
        4.5.1.3 LinearAxialMuscle
        4.5.1.4 PeckAxialMuscle
        4.5.1.5 BlemkerAxialMuscle
      4.5.2 Example: muscle attached to a rigid body
      4.5.3 Equilibrium muscles
      4.5.4 Equilibrium muscle materials
        4.5.4.1 Millard2012AxialMuscle
        4.5.4.2 Thelen2003AxialMuscle
      4.5.5 Tendons and ligaments
        4.5.5.1 Millard2012AxialTendon
        4.5.5.2 Thelen2003AxialTendon
        4.5.5.3 Blankevoort1991AxialLigament
      4.5.6 Example: muscles with separate tendons
    4.6 Distance Grids and Components
    4.7 Transforming geometry
      4.7.1 Nonlinear transformations
      4.7.2 Example: the FemModelDeformer class
      4.7.3 Implementation and behavior
      4.7.4 Use in model registration
    4.8 General component arrangements
      4.8.1 Container components
      4.8.2 Example: a net formed from balls and springs
      4.8.3 Adding containers to other models
      4.8.4 Reference lists for grouping components
      4.8.5 Example: reference lists in NetDemo
    4.9 Custom Joints
      4.9.1 Joint constraints
      4.9.2 Unilateral constraint engagement
      4.9.3 Implementing a custom joint
      4.9.4 Implementing a custom coupling
      4.9.5 Example: a simple custom joint
  Chapter 5 Simulation Control
    5.1 Control Panels
      5.1.1 General principles
      5.1.2 Example: Creating a simple control panel
      5.1.3 Example: Controlling properties in multiple components
      5.1.4 Coordinate panels
        5.1.4.1 Panel settings
        5.1.4.2 Coordinate setting methods
    5.2 Custom properties
      5.2.1 Adding properties to a component
      5.2.2 Example: a visibility property
    5.3 Controllers and monitors
      5.3.1 Implementation
        5.3.1.1 Target positions and velocities
      5.3.2 Example: A controller to move a point
    5.4 Probes
      5.4.1 Numeric probe structure
      5.4.2 Creating probes in code
      5.4.3 Example: probes connected to SimpleMuscle
      5.4.4 Data file format
      5.4.5 Adding input probe data in code
        5.4.5.1 Extending data to the start and end
      5.4.6 Setting data from text or CSV files and other probes
      5.4.7 Tracing probes
      5.4.8 Position probes
      5.4.9 Velocity probes
      5.4.10 Example: controlling a point and frame
      5.4.11 Numeric monitor probes
      5.4.12 Numeric control probes
    5.5 Working with TRC data
      5.5.1 TRC reader
      5.5.2 TRC writer
      5.5.3 Example: moving MultiJointedArm with TRC data
    5.6 Application-Defined Menu Items
      5.6.1 Smoothing probe data
  Chapter 6 Finite Element Models
    6.1 Overview
      6.1.1 FemModel3d
      6.1.2 Component Structure
        6.1.2.1 Nodes
        6.1.2.2 Elements
        6.1.2.3 Shell elements
        6.1.2.4 Meshes
      6.1.3 Materials
      6.1.4 Boundary conditions
    6.2 FEM model creation
      6.2.1 Factory methods
      6.2.2 Loading external FEM meshes
      6.2.3 Generating from surfaces
      6.2.4 Building elements in code
      6.2.5 Example: a simple beam model
    6.3 FEM Geometry
      6.3.1 Surface meshes
      6.3.2 Embedding geometry within an FEM
      6.3.3 Example: a beam with an embedded sphere
    6.4 Connecting FEM models to other components
      6.4.1 Connecting nodes to rigid bodies or particles
      6.4.2 Example: connecting a beam to a block
      6.4.3 Connecting nodes directly to elements
      6.4.4 Example: connecting two FEMs together
      6.4.5 Finding which nodes to attach
      6.4.6 Selecting nodes in the viewer
      6.4.7 Example: two bodies connected by an FEM ?spring?
      6.4.8 Nodal-based attachments
      6.4.9 Example: element vs. nodal-based attachments
    6.5 FEM markers
      6.5.1 Example: attaching an FEM beam to a muscle
    6.6 Frame attachments
      6.6.1 Example: attaching frames to an FEM beam
      6.6.2 Attached frames
      6.6.3 Example: attached frames for an FE model
      6.6.4 Adding joints to FEM models
      6.6.5 Example: two FEM beams connected by a joint
    6.7 Incompressibility
      6.7.1 Volume regions and locking
      6.7.2 Hard incompressibility
      6.7.3 Soft incompressibility
      6.7.4 Incompressibility and linear materials
      6.7.5 Using incompressibility in practice
    6.8 Varying and augmenting material behaviors
      6.8.1 Example: FEM sheet with a stiff spine
    6.9 Muscle activated FEM models
      6.9.1 FemMuscleModel
        6.9.1.1 Bundles
        6.9.1.2 Exciters
      6.9.2 Fibre-based muscles
      6.9.3 Material-based muscles
      6.9.4 Example: toy FEM muscle model
      6.9.5 Example: comparison with two beam examples
    6.10 Material types
      6.10.1 Linear
        6.10.1.1 LinearMaterial
        6.10.1.2 TransverseLinearMaterial
        6.10.1.3 AnisotropicLinearMaterial
      6.10.2 Hyperelastic materials
        6.10.2.1 St Venant-Kirchoff material
        6.10.2.2 Neo-Hookean material
        6.10.2.3 Incompressible neo-Hookean material
        6.10.2.4 Mooney-Rivlin material
        6.10.2.5 Ogden material
        6.10.2.6 Fung orthotropic material
        6.10.2.7 Yeoh material
        6.10.2.8 Arruda-Boyce material
        6.10.2.9 Veronda-Westmann material
        6.10.2.10 Incompressible material
      6.10.3 Muscle materials
        6.10.3.1 Generic muscle
        6.10.3.2 Blemker muscle
        6.10.3.3 Full Blemker muscle
        6.10.3.4 Simple force muscle
    6.11 Stress, strain and strain energy
      6.11.1 Computing nodal values
      6.11.2 Scalar stress/strain measures
      6.11.3 Strain energy
    6.12 Rendering and Visualizations
      6.12.1 Nodes
      6.12.2 Elements
      6.12.3 Surface and other meshes
      6.12.4 FEM-based muscles
      6.12.5 Color bars
      6.12.6 Example: stress/strain plotting with color bars
      6.12.7 Cut planes
      6.12.8 Example: FEM model with a cut plane
  Chapter 7 Fields
    7.1 Grid fields
    7.2 FEM fields
      7.2.1 Nodal fields
      7.2.2 Element fields
      7.2.3 Sub-element fields
    7.3 Mesh fields
      7.3.1 Vertex fields
      7.3.2 Face fields
    7.4 Fields for VectorNd, MatrixNd and Vector3d
    7.5 Binding material properties
      7.5.1 Example: FEM with variable stiffness
      7.5.2 Example: specifying FEM muscle directions
    7.6 Visualizing fields
      7.6.1 Scalar fields
      7.6.2 Vector fields
      7.6.3 Grid fields
      7.6.4 Render meshes
      7.6.5 Example: Visualizing a scalar nodal field
      7.6.6 Examples: Visualizing other fields
  Chapter 8 Contact and Collision
    8.1 Enabling collisions
      8.1.1 Collisions between specific bodies
      8.1.2 Default collisions between groups
      8.1.3 Example: collision with a plane
      8.1.4 Collisions for FEM models
      8.1.5 Example: FEM models and rigid bodies
    8.2 Collision behaviors and collidability
      8.2.1 Collision behaviors
      8.2.2 Collidability
    8.3 Collision meshes and compound collidables
      8.3.1 Example: redefining a rigid body collision mesh
      8.3.2 Compound collidables and self-collision
      8.3.3 Example: FEM model with self-collision
      8.3.4 Collidable bodies
      8.3.5 Nested MechModels
    8.4 Implementation
      8.4.1 Contact methods
        8.4.1.1 Contour region
        8.4.1.2 Vertex penetration
        8.4.1.3 Setting the contact method
      8.4.2 Collider types
        8.4.2.1 Collision meshes and signed distance grids
    8.5 Contact rendering
      8.5.1 Example: rendering normals and contours
      8.5.2 Example: rendering a color map
      8.5.3 Example: rendering contact pressures
    8.6 Overconstrained contact
      8.6.1 Constraint reduction
    8.7 Contact regularization
      8.7.1 Compliant contact
      8.7.2 Contact force behaviors
        8.7.2.1 Computing forces based on pressure
      8.7.3 Area compliant contact
        8.7.3.1 Choosing the stiffness
        8.7.3.2 Choosing the damping
      8.7.4 Elastic foundation contact
      8.7.5 Example: elastic foundation contact of a ball in a bowl
      8.7.6 Example: binding EFC properties to fields
    8.8 Monitoring collisions
      8.8.1 Collision responses
      8.8.2 Available information
      8.8.3 Example: monitoring contact forces
      8.8.4 Example: forces and pressures on mesh vertices
    8.9 Tips and limitations
      8.9.1 Contact jitter
      8.9.2 Passing through objects
      8.9.3 Stray vertices
      8.9.4 Coulomb friction and stability
  Chapter 9 Muscle Wrapping and Via Points
    9.1 Via Points
      9.1.1 Example: a muscle with via points
    9.2 Obstacle Wrapping
      9.2.1 Example: wrapping around a cylinder
    9.3 General Surfaces and Distance Grids
      9.3.1 Example: wrapping around a bone
    9.4 Initializing the Wrap Path
      9.4.1 Example: wrapping around a torus
    9.5 Alternate Wrapping Surfaces
      9.5.1 Example: wrapping for a finger joint
      9.5.2 Example: toy muscle arm with wrapping
    9.6 Tuning the Wrapping Behavior
  Chapter 10 Inverse Simulation
    10.1 Overview
      10.1.1 Tracking controller operation
      10.1.2 Motion tracking
        10.1.2.1 Chase control
        10.1.2.2 PD control
      10.1.3 Generating excitations using a quadratic program
      10.1.4 Force tracking
      10.1.5 Incremental computation
      10.1.6 Setting up the tracking controller
      10.1.7 Example: moving a point with multiple Muscles
    10.2 Tracking controller components
      10.2.1 Exciters
        10.2.1.1 Excitation coloring
      10.2.2 Motion targets
        10.2.2.1 Motion target term
        10.2.2.2 Motion target rendering
      10.2.3 Regularization
        10.2.3.1 L2 Regularization
        10.2.3.2 Excitation damping
      10.2.4 Example: controlling ToyMuscleArm
      10.2.5 Example: controlling an FEM muscle model
      10.2.6 Force effector targets
        10.2.6.1 Force effector term
      10.2.7 Example: controlling tension in a spring
      10.2.8 Target components
      10.2.9 Point and frame exciters
      10.2.10 Example: controlling ToyMuscleArm with FrameExciters
    10.3 Tracking controller structure and settings
      10.3.1 Controller structure
      10.3.2 Controller properties
      10.3.3 Motion term properties
      10.3.4 Properties for other cost terms
    10.4 Managing probes and control panels
      10.4.1 Inverse simulation probes
      10.4.2 Example: using InverseManager probes
      10.4.3 Inverse control panel
    10.5 Inverse kinematics
      10.5.1 Inverse kinematics solver
      10.5.2 Creating probes with IKSolver
      10.5.3 Using IKSolver in a simulation context
      10.5.4 Example: moving MultiJointedArm with an IKProbe
      10.5.5 Example: controlling ToyMuscleArm with inverse kinematics
    10.6 Caveats and limitations
  Chapter 11 Skinning
    11.1 Implementation
    11.2 Creating a skin mesh
      11.2.1 Example: skinning over rigid bodies
    11.3 Computing weights
      11.3.1 Setting weights explicitly
    11.4 Markers and point attachments
      11.4.1 Markers
      11.4.2 Point attachments
      11.4.3 Example: skinning rigid bodies and FEM models
      11.4.4 Mesh-based markers and attachments
    11.5 Resolution and Limitations
    11.6 Collisions
      11.6.1 Example: collision with a cylinder
    11.7 Application to muscle wrapping
      11.7.1 Example: wrapping for a finger joint
  Chapter 12 Importing OpenSim Models
    12.1 Overview
    12.2 Importing the OpenSim model
    12.3 The component hierarchy
      12.3.1 Ground
      12.3.2 Body set
      12.3.3 Joint set
      12.3.4 Force set
      12.3.5 Constraint set
      12.3.6 Marker set
    12.4 Inspecting and tuning the model
      12.4.1 Visualization
      12.4.2 Interactive control panels
      12.4.3 Model tuning
    12.5 Model editing
      12.5.1 Finding components
      12.5.2 Removing components
      12.5.3 Attaching and transferring to ArtiSynth components
      12.5.4 Example: replacing the elbow joint with a contact FEM model
      12.5.5 Example: replacing the humerus with a FEM model
  Chapter 13 DICOM Images
    13.1 The DICOM file format
    13.2 The DICOM classes
      13.2.1 DicomElement
      13.2.2 DicomHeader
      13.2.3 DicomPixelBuffer
      13.2.4 DicomSlice
      13.2.5 DicomImage
    13.3 Loading a DicomImage
      13.3.1 Time-dependent images
      13.3.2 Image formats
    13.4 The DicomViewer
    13.5 DICOM example
  Appendix A Mathematical Review
    A.1 Rotation transforms
    A.2 Rigid transforms
    A.3 Affine transforms
    A.4 Rotational velocity
    A.5 Spatial velocities and forces
    A.6 Spatial inertia
  Bibliography
Maspack Reference Manual
  Preface
  Chapter 1 Properties
    1.1 Accessing Properties
      1.1.1 Why Property Handles?
    1.2 Property Ranges
    1.3 Obtaining Property Information
    1.4 Exporting Properties from a Class
      1.4.1 Read-only properties
      1.4.2 Inheriting Properties from a superclass
    1.5 Composite Properties
    1.6 Reading and Writing to Persistent Storage
    1.7 Inheritable Properties
    1.8 Exporting Inheritable Properties
    1.9 Inheritable and Composite Properties
  Chapter 2 Rendering
    2.1 Overview
      2.1.1 Renderables and Viewers
      2.1.2 A Complete Example
    2.2 Viewers
      2.2.1 Render lists
      2.2.2 Prerendering and Rendering
      2.2.3 Viewer renderables and external render lists
      2.2.4 Coordinate frames and view point control
      2.2.5 Lights
    2.3 The Renderer Interface
      2.3.1 Drawing single points and lines
      2.3.2 Drawing single triangles
      2.3.3 Colors and associated attributes
        2.3.3.1 Highlighting
      2.3.4 Drawing using draw mode
      2.3.5 Drawing solid shapes
      2.3.6 Shading and color mixing
      2.3.7 Vertex coloring, and color mixing and interpolation
      2.3.8 Changing the model matrix
      2.3.9 Render properties and RenderProps
        2.3.9.1 Drawing points and lines as 3D solid objects
        2.3.9.2 RenderProps taxonomy
        2.3.9.3 Renderer methods that use RenderProps
      2.3.10 Screen information and 2D rendering
      2.3.11 Depth offsets
      2.3.12 Maintaining the graphics state
      2.3.13 Text rendering
    2.4 Render Objects
      2.4.1 Building a render object
      2.4.2 ?Current? attributes
      2.4.3 Maintaining consistent attributes
      2.4.4 Adding primitives in ?build? mode
      2.4.5 Modifying render objects
      2.4.6 Drawing RenderObjects
      2.4.7 Multiple primitive groups
      2.4.8 Drawing primitive subsets
    2.5 Texture mapping
      2.5.1 Texture mapping properties
      2.5.2 Texturing example using draw mode
      2.5.3 Texturing example using a render object
    2.6 Mesh Renderers
    2.7 Object Selection
      2.7.1 Implementing custom selection
      2.7.2 Selection Events
  Preface
  Chapter 1 Properties
    1.1 Accessing Properties
      1.1.1 Why Property Handles?
    1.2 Property Ranges
    1.3 Obtaining Property Information
    1.4 Exporting Properties from a Class
      1.4.1 Read-only properties
      1.4.2 Inheriting Properties from a superclass
    1.5 Composite Properties
    1.6 Reading and Writing to Persistent Storage
    1.7 Inheritable Properties
    1.8 Exporting Inheritable Properties
    1.9 Inheritable and Composite Properties
  Chapter 2 Rendering
    2.1 Overview
      2.1.1 Renderables and Viewers
      2.1.2 A Complete Example
    2.2 Viewers
      2.2.1 Render lists
      2.2.2 Prerendering and Rendering
      2.2.3 Viewer renderables and external render lists
      2.2.4 Coordinate frames and view point control
      2.2.5 Lights
    2.3 The Renderer Interface
      2.3.1 Drawing single points and lines
      2.3.2 Drawing single triangles
      2.3.3 Colors and associated attributes
        2.3.3.1 Highlighting
      2.3.4 Drawing using draw mode
      2.3.5 Drawing solid shapes
      2.3.6 Shading and color mixing
      2.3.7 Vertex coloring, and color mixing and interpolation
      2.3.8 Changing the model matrix
      2.3.9 Render properties and RenderProps
        2.3.9.1 Drawing points and lines as 3D solid objects
        2.3.9.2 RenderProps taxonomy
        2.3.9.3 Renderer methods that use RenderProps
      2.3.10 Screen information and 2D rendering
      2.3.11 Depth offsets
      2.3.12 Maintaining the graphics state
      2.3.13 Text rendering
    2.4 Render Objects
      2.4.1 Building a render object
      2.4.2 ?Current? attributes
      2.4.3 Maintaining consistent attributes
      2.4.4 Adding primitives in ?build? mode
      2.4.5 Modifying render objects
      2.4.6 Drawing RenderObjects
      2.4.7 Multiple primitive groups
      2.4.8 Drawing primitive subsets
    2.5 Texture mapping
      2.5.1 Texture mapping properties
      2.5.2 Texturing example using draw mode
      2.5.3 Texturing example using a render object
    2.6 Mesh Renderers
    2.7 Object Selection
      2.7.1 Implementing custom selection
      2.7.2 Selection Events
ArtiSynth Reference Manual
  1 Component Hierarchy
    1.1 Model Components
    1.2 Component References
    1.3 Composite Components
    1.4 CompositeComponentBase, ComponentList, and ComponentListImpl
  2 Models
    2.1 Models and State
    2.2 Model Agents
      2.2.1 Probes
      2.2.2 Controllers and monitors
      2.2.3 Models associated with agents
      2.2.4 Model agent state
    2.3 The Root Model
    2.4 Advancing Models in Time
    2.5 Adaptive Stepping
  3 Writing and Scanning Components
    3.1 Writing components
      3.1.1 Writing references
      3.1.2 Writing child components
    3.2 Scanning components
      3.2.1 Scanning references and post-scanning
      3.2.2 Scanning child components
      3.2.3 Post-scanning implementation
      3.2.4 Post-scanning property values
      3.2.5 Invoking the complete scan process
    3.3 File and token structure
    3.4 Debugging
    3.5 Summary
  1 Component Hierarchy
    1.1 Model Components
    1.2 Component References
    1.3 Composite Components
    1.4 CompositeComponentBase, ComponentList, and ComponentListImpl
  2 Models
    2.1 Models and State
    2.2 Model Agents
      2.2.1 Probes
      2.2.2 Controllers and monitors
      2.2.3 Models associated with agents
      2.2.4 Model agent state
    2.3 The Root Model
    2.4 Advancing Models in Time
    2.5 Adaptive Stepping
  3 Writing and Scanning Components
    3.1 Writing components
      3.1.1 Writing references
      3.1.2 Writing child components
    3.2 Scanning components
      3.2.1 Scanning references and post-scanning
      3.2.2 Scanning child components
      3.2.3 Post-scanning implementation
      3.2.4 Post-scanning property values
      3.2.5 Invoking the complete scan process
    3.3 File and token structure
    3.4 Debugging
    3.5 Summary
Interfacing ArtiSynth to MATLAB
  1 Introduction
  2 Requirements and configuration
    2.1 Java restrictions
    2.2 Configuring MATLAB for ArtiSynth
  3 Starting ArtiSynth
  4 Querying ArtiSynth structures and models
  5 Scripting commands
  6 Java memory limits
  7 Setting the classpath for ArtiSynth
  8 Setting the classpath for models
  9 Connecting to an external MATLAB process
  10 Managing an external MATLAB connection from code
  11 Summary of scripting functions
  1 Introduction
  2 Requirements and configuration
    2.1 Java restrictions
    2.2 Configuring MATLAB for ArtiSynth
  3 Starting ArtiSynth
  4 Querying ArtiSynth structures and models
  5 Scripting commands
  6 Java memory limits
  7 Setting the classpath for ArtiSynth
  8 Setting the classpath for models
  9 Connecting to an external MATLAB process
  10 Managing an external MATLAB connection from code
  11 Summary of scripting functions
Writing Documentation for ArtiSynth
  1 Introduction
  2 How Documents Are Created
    2.1 Document Source Code Organization
    2.2 Makefile commands to build documents
      2.2.1 Javadocs
      2.2.2 HTML files
      2.2.3 PDF files
      2.2.4 Other Commands
    2.3 Building single HTML files
    2.4 Building sectioned HTML files
    2.5 Building PDF files
    2.6 Installing Documents on the Webserver
  3 LaTeX usage and conventions
    3.1 LaTeXML restrictions
    3.2 Font conventions
    3.3 Code blocks
    3.4 Side blocks
    3.5 Inserting Images
    3.6 Javadoc References
      3.6.1 Class references
      3.6.2 Method references
      3.6.3 How it works
    3.7 References to other ArtiSynth documents
  4 Adding a New Document
    4.1 Creating and Updating the Makefiles
    4.2 Updating the InfoCenter
    4.3 Updating the ArtiSynth website
  5 Images, IDraw and Xfig
  6 Eclipse InfoCenter
  7 External Software Required
    7.1 Installing LaTeXML
  8 Local Customizations
    8.1 setJavadocLinks script
    8.2 fixLatexmlOutput script
  1 Introduction
  2 How Documents Are Created
    2.1 Document Source Code Organization
    2.2 Makefile commands to build documents
      2.2.1 Javadocs
      2.2.2 HTML files
      2.2.3 PDF files
      2.2.4 Other Commands
    2.3 Building single HTML files
    2.4 Building sectioned HTML files
    2.5 Building PDF files
    2.6 Installing Documents on the Webserver
  3 LaTeX usage and conventions
    3.1 LaTeXML restrictions
    3.2 Font conventions
    3.3 Code blocks
    3.4 Side blocks
    3.5 Inserting Images
    3.6 Javadoc References
      3.6.1 Class references
      3.6.2 Method references
      3.6.3 How it works
    3.7 References to other ArtiSynth documents
  4 Adding a New Document
    4.1 Creating and Updating the Makefiles
    4.2 Updating the InfoCenter
    4.3 Updating the ArtiSynth website
  5 Images, IDraw and Xfig
  6 Eclipse InfoCenter
  7 External Software Required
    7.1 Installing LaTeXML
  8 Local Customizations
    8.1 setJavadocLinks script
    8.2 fixLatexmlOutput script
ArtiSynth Coding Standard
  1 Introduction
  2 Cuddle braces and indent by 3
  3 Always used braced blocks
  4 Do not use tabs
  5 Keep line widths to 80 columns
  6 Break lines at the beginning of argument lists
  7 Break lines after assignment operators
  8 Align conditional expressions with the opening parentheses
  9 No space before empty argument lists
  1 Introduction
  2 Cuddle braces and indent by 3
  3 Always used braced blocks
  4 Do not use tabs
  5 Keep line widths to 80 columns
  6 Break lines at the beginning of argument lists
  7 Break lines after assignment operators
  8 Align conditional expressions with the opening parentheses
  9 No space before empty argument lists