@ -31,6 +31,16 @@
* /
package com.jme3.scene.plugins.blender ;
import java.io.IOException ;
import java.util.ArrayList ;
import java.util.EmptyStackException ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
import java.util.Stack ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
import com.jme3.asset.AssetManager ;
import com.jme3.asset.BlenderKey ;
import com.jme3.material.Material ;
@ -44,446 +54,538 @@ import com.jme3.scene.plugins.blender.file.Structure;
import com.jme3.scene.plugins.blender.materials.MaterialContext ;
import com.jme3.scene.plugins.blender.meshes.MeshContext ;
import com.jme3.scene.plugins.blender.modifiers.Modifier ;
import java.io.IOException ;
import java.util.* ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
import com.jme3.scene.plugins.ogre.AnimData ;
/ * *
* The class that stores temporary data and manages it during loading the belnd file . This class is intended to be used
* in a single loading thread . It holds the state of loading operations .
* The class that stores temporary data and manages it during loading the belnd
* file . This class is intended to be used in a single loading thread . It holds
* the state of loading operations .
*
* @author Marcin Roguski ( Kaelthas )
* /
public class BlenderContext {
private static final Logger LOGGER = Logger . getLogger ( BlenderContext . class . getName ( ) ) ;
/** The blender key. */
private BlenderKey blenderKey ;
/** The header of the file block. */
private DnaBlockData dnaBlockData ;
/** The input stream of the blend file. */
private BlenderInputStream inputStream ;
/** The asset manager. */
private AssetManager assetManager ;
/** A map containing the file block headers. The key is the old pointer address. */
private Map < Long , FileBlockHeader > fileBlockHeadersByOma = new HashMap < Long , FileBlockHeader > ( ) ;
/** A map containing the file block headers. The key is the block code. */
private Map < Integer , List < FileBlockHeader > > fileBlockHeadersByCode = new HashMap < Integer , List < FileBlockHeader > > ( ) ;
/ * *
* This map stores the loaded features by their old memory address . The first object in the value table is the
* loaded structure and the second - the structure already converted into proper data .
* /
private Map < Long , Object [ ] > loadedFeatures = new HashMap < Long , Object [ ] > ( ) ;
/ * *
* This map stores the loaded features by their name . Only features with ID structure can be stored here .
* The first object in the value table is the
* loaded structure and the second - the structure already converted into proper data .
* /
private Map < String , Object [ ] > loadedFeaturesByName = new HashMap < String , Object [ ] > ( ) ;
/** A stack that hold the parent structure of currently loaded feature. */
private Stack < Structure > parentStack = new Stack < Structure > ( ) ;
/** A map storing loaded ipos. The key is the ipo's owner old memory address and the value is the ipo. */
private Map < Long , Ipo > loadedIpos = new HashMap < Long , Ipo > ( ) ;
/** A list of modifiers for the specified object. */
protected Map < Long , List < Modifier > > modifiers = new HashMap < Long , List < Modifier > > ( ) ;
/** A list of constraints for the specified object. */
protected Map < Long , List < Constraint > > constraints = new HashMap < Long , List < Constraint > > ( ) ;
/** A map of mesh contexts. */
protected Map < Long , MeshContext > meshContexts = new HashMap < Long , MeshContext > ( ) ;
/** A map of material contexts. */
protected Map < Material , MaterialContext > materialContexts = new HashMap < Material , MaterialContext > ( ) ;
/** A map og helpers that perform loading. */
private Map < String , AbstractBlenderHelper > helpers = new HashMap < String , AbstractBlenderHelper > ( ) ;
/ * *
* This method sets the blender key .
* @param blenderKey
* the blender key
* /
public void setBlenderKey ( BlenderKey blenderKey ) {
this . blenderKey = blenderKey ;
}
/ * *
* This method returns the blender key .
* @return the blender key
* /
public BlenderKey getBlenderKey ( ) {
return blenderKey ;
}
/ * *
* This method sets the dna block data .
* @param dnaBlockData
* the dna block data
* /
public void setBlockData ( DnaBlockData dnaBlockData ) {
this . dnaBlockData = dnaBlockData ;
}
/ * *
* This method returns the dna block data .
* @return the dna block data
* /
public DnaBlockData getDnaBlockData ( ) {
return dnaBlockData ;
}
/ * *
* This method returns the asset manager .
* @return the asset manager
* /
public AssetManager getAssetManager ( ) {
return assetManager ;
}
/ * *
* This method sets the asset manager .
* @param assetManager
* the asset manager
* /
public void setAssetManager ( AssetManager assetManager ) {
this . assetManager = assetManager ;
}
/ * *
* This method returns the input stream of the blend file .
* @return the input stream of the blend file
* /
public BlenderInputStream getInputStream ( ) {
return inputStream ;
}
/ * *
* This method sets the input stream of the blend file .
* @param inputStream
* the input stream of the blend file
* /
public void setInputStream ( BlenderInputStream inputStream ) {
this . inputStream = inputStream ;
}
/ * *
* This method adds a file block header to the map . Its old memory address is the key .
* @param oldMemoryAddress
* the address of the block header
* @param fileBlockHeader
* the block header to store
* /
public void addFileBlockHeader ( Long oldMemoryAddress , FileBlockHeader fileBlockHeader ) {
fileBlockHeadersByOma . put ( oldMemoryAddress , fileBlockHeader ) ;
List < FileBlockHeader > headers = fileBlockHeadersByCode . get ( Integer . valueOf ( fileBlockHeader . getCode ( ) ) ) ;
if ( headers = = null ) {
headers = new ArrayList < FileBlockHeader > ( ) ;
fileBlockHeadersByCode . put ( Integer . valueOf ( fileBlockHeader . getCode ( ) ) , headers ) ;
}
headers . add ( fileBlockHeader ) ;
}
/ * *
* This method returns the block header of a given memory address . If the header is not present then null is
* returned .
* @param oldMemoryAddress
* the address of the block header
* @return loaded header or null if it was not yet loaded
* /
public FileBlockHeader getFileBlock ( Long oldMemoryAddress ) {
return fileBlockHeadersByOma . get ( oldMemoryAddress ) ;
}
/ * *
* This method returns a list of file blocks ' headers of a specified code .
* @param code
* the code of file blocks
* @return a list of file blocks ' headers of a specified code
* /
public List < FileBlockHeader > getFileBlocks ( Integer code ) {
return fileBlockHeadersByCode . get ( code ) ;
}
/ * *
* This method clears the saved block headers stored in the features map .
* /
public void clearFileBlocks ( ) {
fileBlockHeadersByOma . clear ( ) ;
fileBlockHeadersByCode . clear ( ) ;
}
/ * *
* This method adds a helper instance to the helpers ' map .
* @param < T >
* the type of the helper
* @param clazz
* helper ' s class definition
* @param helper
* the helper instance
* /
public < T > void putHelper ( Class < T > clazz , AbstractBlenderHelper helper ) {
helpers . put ( clazz . getSimpleName ( ) , helper ) ;
}
@SuppressWarnings ( "unchecked" )
public < T > T getHelper ( Class < ? > clazz ) {
return ( T ) helpers . get ( clazz . getSimpleName ( ) ) ;
}
/ * *
* This method adds a loaded feature to the map . The key is its unique old memory address .
* @param oldMemoryAddress
* the address of the feature
* @param featureName the name of the feature
* @param structure
* the filled structure of the feature
* @param feature
* the feature we want to store
* /
public void addLoadedFeatures ( Long oldMemoryAddress , String featureName , Structure structure , Object feature ) {
if ( oldMemoryAddress = = null | | structure = = null | | feature = = null ) {
throw new IllegalArgumentException ( "One of the given arguments is null!" ) ;
}
Object [ ] storedData = new Object [ ] { structure , feature } ;
loadedFeatures . put ( oldMemoryAddress , storedData ) ;
if ( featureName ! = null ) {
loadedFeaturesByName . put ( featureName , storedData ) ;
}
}
/ * *
* This method returns the feature of a given memory address . If the feature is not yet loaded then null is
* returned .
* @param oldMemoryAddress
* the address of the feature
* @param loadedFeatureDataType
* the type of data we want to retreive it can be either filled structure or already converted feature
* @return loaded feature or null if it was not yet loaded
* /
public Object getLoadedFeature ( Long oldMemoryAddress , LoadedFeatureDataType loadedFeatureDataType ) {
Object [ ] result = loadedFeatures . get ( oldMemoryAddress ) ;
if ( result ! = null ) {
return result [ loadedFeatureDataType . getIndex ( ) ] ;
}
return null ;
}
/ * *
* This method returns the feature of a given name . If the feature is not yet loaded then null is
* returned .
* @param featureName
* the name of the feature
* @param loadedFeatureDataType
* the type of data we want to retreive it can be either filled structure or already converted feature
* @return loaded feature or null if it was not yet loaded
* /
public Object getLoadedFeature ( String featureName , LoadedFeatureDataType loadedFeatureDataType ) {
Object [ ] result = loadedFeaturesByName . get ( featureName ) ;
if ( result ! = null ) {
return result [ loadedFeatureDataType . getIndex ( ) ] ;
}
return null ;
}
/ * *
* This method clears the saved features stored in the features map .
* /
public void clearLoadedFeatures ( ) {
loadedFeatures . clear ( ) ;
}
/ * *
* This method adds the structure to the parent stack .
* @param parent
* the structure to be added to the stack
* /
public void pushParent ( Structure parent ) {
parentStack . push ( parent ) ;
}
/ * *
* This method removes the structure from the top of the parent ' s stack .
* @return the structure that was removed from the stack
* /
public Structure popParent ( ) {
try {
return parentStack . pop ( ) ;
} catch ( EmptyStackException e ) {
return null ;
}
}
/ * *
* This method retreives the structure at the top of the parent ' s stack but does not remove it .
* @return the structure from the top of the stack
* /
public Structure peekParent ( ) {
try {
return parentStack . peek ( ) ;
} catch ( EmptyStackException e ) {
return null ;
}
}
public void addIpo ( Long ownerOMA , Ipo ipo ) {
loadedIpos . put ( ownerOMA , ipo ) ;
}
public Ipo removeIpo ( Long ownerOma ) {
return loadedIpos . remove ( ownerOma ) ;
}
public Ipo getIpo ( Long ownerOMA ) {
return loadedIpos . get ( ownerOMA ) ;
}
/ * *
* This method adds a new modifier to the list .
* @param ownerOMA
* the owner ' s old memory address
* @param modifier
* the object ' s modifier
* /
public void addModifier ( Long ownerOMA , Modifier modifier ) {
List < Modifier > objectModifiers = this . modifiers . get ( ownerOMA ) ;
if ( objectModifiers = = null ) {
objectModifiers = new ArrayList < Modifier > ( ) ;
this . modifiers . put ( ownerOMA , objectModifiers ) ;
}
objectModifiers . add ( modifier ) ;
}
/ * *
* This method returns modifiers for the object specified by its old memory address and the modifier type . If no
* modifiers are found - empty list is returned . If the type is null - all modifiers for the object are returned .
* @param objectOMA
* object ' s old memory address
* @param type
* the type of the modifier
* @return the list of object ' s modifiers
* /
public List < Modifier > getModifiers ( Long objectOMA , String type ) {
List < Modifier > result = new ArrayList < Modifier > ( ) ;
List < Modifier > readModifiers = modifiers . get ( objectOMA ) ;
if ( readModifiers ! = null & & readModifiers . size ( ) > 0 ) {
for ( Modifier modifier : readModifiers ) {
if ( type = = null | | type . isEmpty ( ) | | modifier . getType ( ) . equals ( type ) ) {
result . add ( modifier ) ;
}
}
}
return result ;
}
/ * *
* This method adds a new modifier to the list .
* @param ownerOMA
* the owner ' s old memory address
* @param constraints
* the object ' s constraints
* /
public void addConstraints ( Long ownerOMA , List < Constraint > constraints ) {
List < Constraint > objectConstraints = this . constraints . get ( ownerOMA ) ;
if ( objectConstraints = = null ) {
objectConstraints = new ArrayList < Constraint > ( ) ;
this . constraints . put ( ownerOMA , objectConstraints ) ;
}
objectConstraints . addAll ( constraints ) ;
}
/ * *
* This method returns constraints for the object specified by its old memory address . If no
* modifiers are found - < b > null < / b > is returned .
* @param objectOMA
* object ' s old memory address
* @return the list of object ' s modifiers or null
* /
public List < Constraint > getConstraints ( Long objectOMA ) {
return constraints . get ( objectOMA ) ;
}
/ * *
private static final Logger LOGGER = Logger . getLogger ( BlenderContext . class . getName ( ) ) ;
/** The blender key. */
private BlenderKey blenderKey ;
/** The header of the file block. */
private DnaBlockData dnaBlockData ;
/** The input stream of the blend file. */
private BlenderInputStream inputStream ;
/** The asset manager. */
private AssetManager assetManager ;
/ * *
* A map containing the file block headers . The key is the old pointer
* address .
* /
private Map < Long , FileBlockHeader > fileBlockHeadersByOma = new HashMap < Long , FileBlockHeader > ( ) ;
/** A map containing the file block headers. The key is the block code. */
private Map < Integer , List < FileBlockHeader > > fileBlockHeadersByCode = new HashMap < Integer , List < FileBlockHeader > > ( ) ;
/ * *
* This map stores the loaded features by their old memory address . The
* first object in the value table is the loaded structure and the second -
* the structure already converted into proper data .
* /
private Map < Long , Object [ ] > loadedFeatures = new HashMap < Long , Object [ ] > ( ) ;
/ * *
* This map stores the loaded features by their name . Only features with ID
* structure can be stored here . The first object in the value table is the
* loaded structure and the second - the structure already converted into
* proper data .
* /
private Map < String , Object [ ] > loadedFeaturesByName = new HashMap < String , Object [ ] > ( ) ;
/** A stack that hold the parent structure of currently loaded feature. */
private Stack < Structure > parentStack = new Stack < Structure > ( ) ;
/ * *
* A map storing loaded ipos . The key is the ipo ' s owner old memory address
* and the value is the ipo .
* /
private Map < Long , Ipo > loadedIpos = new HashMap < Long , Ipo > ( ) ;
/** A list of modifiers for the specified object. */
protected Map < Long , List < Modifier > > modifiers = new HashMap < Long , List < Modifier > > ( ) ;
/** A list of constraints for the specified object. */
protected Map < Long , List < Constraint > > constraints = new HashMap < Long , List < Constraint > > ( ) ;
/** Anim data loaded for features. */
private Map < Long , AnimData > animData = new HashMap < Long , AnimData > ( ) ;
/** A map of mesh contexts. */
protected Map < Long , MeshContext > meshContexts = new HashMap < Long , MeshContext > ( ) ;
/** A map of material contexts. */
protected Map < Material , MaterialContext > materialContexts = new HashMap < Material , MaterialContext > ( ) ;
/** A map og helpers that perform loading. */
private Map < String , AbstractBlenderHelper > helpers = new HashMap < String , AbstractBlenderHelper > ( ) ;
/ * *
* This method sets the blender key .
*
* @param blenderKey
* the blender key
* /
public void setBlenderKey ( BlenderKey blenderKey ) {
this . blenderKey = blenderKey ;
}
/ * *
* This method returns the blender key .
*
* @return the blender key
* /
public BlenderKey getBlenderKey ( ) {
return blenderKey ;
}
/ * *
* This method sets the dna block data .
*
* @param dnaBlockData
* the dna block data
* /
public void setBlockData ( DnaBlockData dnaBlockData ) {
this . dnaBlockData = dnaBlockData ;
}
/ * *
* This method returns the dna block data .
*
* @return the dna block data
* /
public DnaBlockData getDnaBlockData ( ) {
return dnaBlockData ;
}
/ * *
* This method returns the asset manager .
*
* @return the asset manager
* /
public AssetManager getAssetManager ( ) {
return assetManager ;
}
/ * *
* This method sets the asset manager .
*
* @param assetManager
* the asset manager
* /
public void setAssetManager ( AssetManager assetManager ) {
this . assetManager = assetManager ;
}
/ * *
* This method returns the input stream of the blend file .
*
* @return the input stream of the blend file
* /
public BlenderInputStream getInputStream ( ) {
return inputStream ;
}
/ * *
* This method sets the input stream of the blend file .
*
* @param inputStream
* the input stream of the blend file
* /
public void setInputStream ( BlenderInputStream inputStream ) {
this . inputStream = inputStream ;
}
/ * *
* This method adds a file block header to the map . Its old memory address
* is the key .
*
* @param oldMemoryAddress
* the address of the block header
* @param fileBlockHeader
* the block header to store
* /
public void addFileBlockHeader ( Long oldMemoryAddress , FileBlockHeader fileBlockHeader ) {
fileBlockHeadersByOma . put ( oldMemoryAddress , fileBlockHeader ) ;
List < FileBlockHeader > headers = fileBlockHeadersByCode . get ( Integer . valueOf ( fileBlockHeader . getCode ( ) ) ) ;
if ( headers = = null ) {
headers = new ArrayList < FileBlockHeader > ( ) ;
fileBlockHeadersByCode . put ( Integer . valueOf ( fileBlockHeader . getCode ( ) ) , headers ) ;
}
headers . add ( fileBlockHeader ) ;
}
/ * *
* This method returns the block header of a given memory address . If the
* header is not present then null is returned .
*
* @param oldMemoryAddress
* the address of the block header
* @return loaded header or null if it was not yet loaded
* /
public FileBlockHeader getFileBlock ( Long oldMemoryAddress ) {
return fileBlockHeadersByOma . get ( oldMemoryAddress ) ;
}
/ * *
* This method returns a list of file blocks ' headers of a specified code .
*
* @param code
* the code of file blocks
* @return a list of file blocks ' headers of a specified code
* /
public List < FileBlockHeader > getFileBlocks ( Integer code ) {
return fileBlockHeadersByCode . get ( code ) ;
}
/ * *
* This method clears the saved block headers stored in the features map .
* /
public void clearFileBlocks ( ) {
fileBlockHeadersByOma . clear ( ) ;
fileBlockHeadersByCode . clear ( ) ;
}
/ * *
* This method adds a helper instance to the helpers ' map .
*
* @param < T >
* the type of the helper
* @param clazz
* helper ' s class definition
* @param helper
* the helper instance
* /
public < T > void putHelper ( Class < T > clazz , AbstractBlenderHelper helper ) {
helpers . put ( clazz . getSimpleName ( ) , helper ) ;
}
@SuppressWarnings ( "unchecked" )
public < T > T getHelper ( Class < ? > clazz ) {
return ( T ) helpers . get ( clazz . getSimpleName ( ) ) ;
}
/ * *
* This method adds a loaded feature to the map . The key is its unique old
* memory address .
*
* @param oldMemoryAddress
* the address of the feature
* @param featureName
* the name of the feature
* @param structure
* the filled structure of the feature
* @param feature
* the feature we want to store
* /
public void addLoadedFeatures ( Long oldMemoryAddress , String featureName , Structure structure , Object feature ) {
if ( oldMemoryAddress = = null | | structure = = null | | feature = = null ) {
throw new IllegalArgumentException ( "One of the given arguments is null!" ) ;
}
Object [ ] storedData = new Object [ ] { structure , feature } ;
loadedFeatures . put ( oldMemoryAddress , storedData ) ;
if ( featureName ! = null ) {
loadedFeaturesByName . put ( featureName , storedData ) ;
}
}
/ * *
* This method returns the feature of a given memory address . If the feature
* is not yet loaded then null is returned .
*
* @param oldMemoryAddress
* the address of the feature
* @param loadedFeatureDataType
* the type of data we want to retreive it can be either filled
* structure or already converted feature
* @return loaded feature or null if it was not yet loaded
* /
public Object getLoadedFeature ( Long oldMemoryAddress , LoadedFeatureDataType loadedFeatureDataType ) {
Object [ ] result = loadedFeatures . get ( oldMemoryAddress ) ;
if ( result ! = null ) {
return result [ loadedFeatureDataType . getIndex ( ) ] ;
}
return null ;
}
/ * *
* This method returns the feature of a given name . If the feature is not
* yet loaded then null is returned .
*
* @param featureName
* the name of the feature
* @param loadedFeatureDataType
* the type of data we want to retreive it can be either filled
* structure or already converted feature
* @return loaded feature or null if it was not yet loaded
* /
public Object getLoadedFeature ( String featureName , LoadedFeatureDataType loadedFeatureDataType ) {
Object [ ] result = loadedFeaturesByName . get ( featureName ) ;
if ( result ! = null ) {
return result [ loadedFeatureDataType . getIndex ( ) ] ;
}
return null ;
}
/ * *
* This method clears the saved features stored in the features map .
* /
public void clearLoadedFeatures ( ) {
loadedFeatures . clear ( ) ;
}
/ * *
* This method adds the structure to the parent stack .
*
* @param parent
* the structure to be added to the stack
* /
public void pushParent ( Structure parent ) {
parentStack . push ( parent ) ;
}
/ * *
* This method removes the structure from the top of the parent ' s stack .
*
* @return the structure that was removed from the stack
* /
public Structure popParent ( ) {
try {
return parentStack . pop ( ) ;
} catch ( EmptyStackException e ) {
return null ;
}
}
/ * *
* This method retreives the structure at the top of the parent ' s stack but
* does not remove it .
*
* @return the structure from the top of the stack
* /
public Structure peekParent ( ) {
try {
return parentStack . peek ( ) ;
} catch ( EmptyStackException e ) {
return null ;
}
}
/ * *
* This method adds new ipo curve for the feature .
*
* @param ownerOMA
* the OMA of blender feature that owns the ipo
* @param ipo
* the ipo to be added
* /
public void addIpo ( Long ownerOMA , Ipo ipo ) {
loadedIpos . put ( ownerOMA , ipo ) ;
}
/ * *
* This method removes the ipo curve from the feature .
*
* @param ownerOMA
* the OMA of blender feature that owns the ipo
* @param ipo
* the ipo that was just removed
* /
public Ipo removeIpo ( Long ownerOma ) {
return loadedIpos . remove ( ownerOma ) ;
}
/ * *
* This method returns the ipo curve of the feature .
*
* @param ownerOMA
* the OMA of blender feature that owns the ipo
* @param ipo
* the ipo that belongs to the specified owner
* /
public Ipo getIpo ( Long ownerOMA ) {
return loadedIpos . get ( ownerOMA ) ;
}
/ * *
* This method adds a new modifier to the list .
*
* @param ownerOMA
* the owner ' s old memory address
* @param modifier
* the object ' s modifier
* /
public void addModifier ( Long ownerOMA , Modifier modifier ) {
List < Modifier > objectModifiers = this . modifiers . get ( ownerOMA ) ;
if ( objectModifiers = = null ) {
objectModifiers = new ArrayList < Modifier > ( ) ;
this . modifiers . put ( ownerOMA , objectModifiers ) ;
}
objectModifiers . add ( modifier ) ;
}
/ * *
* This method returns modifiers for the object specified by its old memory
* address and the modifier type . If no modifiers are found - empty list is
* returned . If the type is null - all modifiers for the object are
* returned .
*
* @param objectOMA
* object ' s old memory address
* @param type
* the type of the modifier
* @return the list of object ' s modifiers
* /
public List < Modifier > getModifiers ( Long objectOMA , String type ) {
List < Modifier > result = new ArrayList < Modifier > ( ) ;
List < Modifier > readModifiers = modifiers . get ( objectOMA ) ;
if ( readModifiers ! = null & & readModifiers . size ( ) > 0 ) {
for ( Modifier modifier : readModifiers ) {
if ( type = = null | | type . isEmpty ( ) | | modifier . getType ( ) . equals ( type ) ) {
result . add ( modifier ) ;
}
}
}
return result ;
}
/ * *
* This method adds a new modifier to the list .
*
* @param ownerOMA
* the owner ' s old memory address
* @param constraints
* the object ' s constraints
* /
public void addConstraints ( Long ownerOMA , List < Constraint > constraints ) {
List < Constraint > objectConstraints = this . constraints . get ( ownerOMA ) ;
if ( objectConstraints = = null ) {
objectConstraints = new ArrayList < Constraint > ( ) ;
this . constraints . put ( ownerOMA , objectConstraints ) ;
}
objectConstraints . addAll ( constraints ) ;
}
/ * *
* This method returns constraints for the object specified by its old
* memory address . If no modifiers are found - < b > null < / b > is returned .
*
* @param objectOMA
* object ' s old memory address
* @return the list of object ' s modifiers or null
* /
public List < Constraint > getConstraints ( Long objectOMA ) {
return objectOMA = = null ? null : constraints . get ( objectOMA ) ;
}
/ * *
* This method sets the anim data for the specified OMA of its owner .
*
* @param ownerOMA
* the owner ' s old memory address
* @param animData
* the animation data for the feature specified by ownerOMA
* /
public void setAnimData ( Long ownerOMA , AnimData animData ) {
this . animData . put ( ownerOMA , animData ) ;
}
/ * *
* This method returns the animation data for the specified owner .
*
* @param ownerOMA
* the old memory address of the animation data owner
* @return the animation data or null if none exists
* /
public AnimData getAnimData ( Long ownerOMA ) {
return this . animData . get ( ownerOMA ) ;
}
/ * *
* This method sets the mesh context for the given mesh old memory address .
* If the context is already set it will be replaced .
*
* @param meshOMA
* the mesh ' s old memory address
* the mesh ' s old memory address
* @param meshContext
* the mesh ' s context
* the mesh ' s context
* /
public void setMeshContext ( Long meshOMA , MeshContext meshContext ) {
this . meshContexts . put ( meshOMA , meshContext ) ;
}
public void setMeshContext ( Long meshOMA , MeshContext meshContext ) {
this . meshContexts . put ( meshOMA , meshContext ) ;
}
/ * *
* This method returns the mesh context for the given mesh old memory address .
* If no context exists then < b > null < / b > is returned .
/ * *
* This method returns the mesh context for the given mesh old memory
* address . If no context exists then < b > null < / b > is returned .
*
* @param meshOMA
* the mesh ' s old memory address
* the mesh ' s old memory address
* @return mesh ' s context
* /
public MeshContext getMeshContext ( Long meshOMA ) {
return this . meshContexts . get ( meshOMA ) ;
}
public MeshContext getMeshContext ( Long meshOMA ) {
return this . meshContexts . get ( meshOMA ) ;
}
/ * *
* This method sets the material context for the given material .
* If the context is already set it will be replaced .
* This method sets the material context for the given material . If the
* context is already set it will be replaced .
*
* @param material
* the material
* the material
* @param materialContext
* the material ' s context
* the material ' s context
* /
public void setMaterialContext ( Material material , MaterialContext materialContext ) {
this . materialContexts . put ( material , materialContext ) ;
}
/ * *
* This method returns the material context for the given material .
* If no context exists then < b > null < / b > is returned .
* This method returns the material context for the given material . If no
* context exists then < b > null < / b > is returned .
*
* @param material
* the material
* the material
* @return material ' s context
* /
public MaterialContext getMaterialContext ( Material material ) {
return materialContexts . get ( material ) ;
}
/ * *
* This metod returns the default material .
* @return the default material
* /
public synchronized Material getDefaultMaterial ( ) {
if ( blenderKey . getDefaultMaterial ( ) = = null ) {
Material defaultMaterial = new Material ( assetManager , "Common/MatDefs/Misc/Unshaded.j3md" ) ;
defaultMaterial . setColor ( "Color" , ColorRGBA . DarkGray ) ;
blenderKey . setDefaultMaterial ( defaultMaterial ) ;
}
return blenderKey . getDefaultMaterial ( ) ;
}
public void dispose ( ) {
try {
/ * *
* This metod returns the default material .
*
* @return the default material
* /
public synchronized Material getDefaultMaterial ( ) {
if ( blenderKey . getDefaultMaterial ( ) = = null ) {
Material defaultMaterial = new Material ( assetManager , "Common/MatDefs/Misc/Unshaded.j3md" ) ;
defaultMaterial . setColor ( "Color" , ColorRGBA . DarkGray ) ;
blenderKey . setDefaultMaterial ( defaultMaterial ) ;
}
return blenderKey . getDefaultMaterial ( ) ;
}
public void dispose ( ) {
try {
inputStream . close ( ) ;
} catch ( IOException e ) {
LOGGER . log ( Level . SEVERE , e . getLocalizedMessage ( ) , e ) ;
}
loadedFeatures . clear ( ) ;
loadedFeaturesByName . clear ( ) ;
}
/ * *
* This enum defines what loaded data type user wants to retreive . It can be either filled structure or already
* converted data .
* @author Marcin Roguski
* /
public static enum LoadedFeatureDataType {
LOADED_STRUCTURE ( 0 ) , LOADED_FEATURE ( 1 ) ;
private int index ;
private LoadedFeatureDataType ( int index ) {
this . index = index ;
}
public int getIndex ( ) {
return index ;
}
}
}
/ * *
* This enum defines what loaded data type user wants to retreive . It can be
* either filled structure or already converted data .
*
* @author Marcin Roguski
* /
public static enum LoadedFeatureDataType {
LOADED_STRUCTURE ( 0 ) , LOADED_FEATURE ( 1 ) ;
private int index ;
private LoadedFeatureDataType ( int index ) {
this . index = index ;
}
public int getIndex ( ) {
return index ;
}
}
}