Package com.ardor3d.extension.model.collada.jdom.data

Source Code of com.ardor3d.extension.model.collada.jdom.data.ColladaStorage

/**
* Copyright (c) 2008-2012 Ardor Labs, Inc.
*
* This file is part of Ardor3D.
*
* Ardor3D is free software: you can redistribute it and/or modify it
* under the terms of its license which may be found in the accompanying
* LICENSE file or at <http://www.ardor3d.com/LICENSE>.
*/

package com.ardor3d.extension.model.collada.jdom.data;

import java.io.IOException;
import java.nio.FloatBuffer;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import com.ardor3d.extension.animation.skeletal.clip.AbstractAnimationChannel;
import com.ardor3d.extension.animation.skeletal.clip.AnimationClip;
import com.ardor3d.extension.animation.skeletal.clip.TransformChannel;
import com.ardor3d.scenegraph.Mesh;
import com.ardor3d.scenegraph.MeshData;
import com.ardor3d.scenegraph.Node;
import com.ardor3d.util.export.InputCapsule;
import com.ardor3d.util.export.OutputCapsule;
import com.ardor3d.util.export.Savable;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;

/**
* Data storage object meant to hold objects parsed from a Collada file that the user might want to directly access.
*/
public class ColladaStorage implements Savable {

    private Node _scene;
    private final List<SkinData> _skins = Lists.newArrayList();
    private AssetData _assetData;

    private final List<AbstractAnimationChannel> _transformChannels = Lists.newArrayList();
    private AnimationItem _animationItemRoot;

    // List of parsed color buffers, useful if collada includes multiple color channels per meshdata object
    // Transient because the key is identity - meshdata.
    private transient Multimap<MeshData, FloatBuffer> _parsedVertexColors;

    // Map of parsed material information, useful for doing post-manipulation of model information.
    // Transient because the key is identity - mesh.
    private transient Map<Mesh, String> _meshMaterialInfo;
    private transient Map<String, MaterialInfo> _materialMap;

    public void setScene(final Node scene) {
        _scene = scene;
    }

    /**
     * @return a Node representing the parsed "visual scene".
     */
    public Node getScene() {
        return _scene;
    }

    /**
     * @return a list of data objects representing each <skin> tag parsed during reading of the visual scene.
     */
    public List<SkinData> getSkins() {
        return _skins;
    }

    public AssetData getAssetData() {
        return _assetData;
    }

    public void setAssetData(final AssetData assetData) {
        _assetData = assetData;
    }

    public List<AbstractAnimationChannel> getAnimationChannels() {
        return _transformChannels;
    }

    /**
     * @return the root of our animation library. We can use this to walk through all animations in the Collada file.
     */
    public AnimationItem getAnimationItemRoot() {
        return _animationItemRoot;
    }

    public void setAnimationItemRoot(final AnimationItem animationItemRoot) {
        _animationItemRoot = animationItemRoot;
    }

    /**
     * Extract all animation channels in the Collada file as a single, unified AnimationClip.
     *
     * @param name
     *            the name to give our new clip.
     * @return the new AnimationClip.
     */
    public AnimationClip extractChannelsAsClip(final String name) {
        final AnimationClip clip = new AnimationClip(name);
        for (final AbstractAnimationChannel channel : getAnimationChannels()) {
            clip.addChannel(channel);
        }
        return clip;
    }

    /**
     * @return a transient Multimap of MeshData -> List of parsed vertex colors. Only MeshData objects that had multiple
     *         vertex colors parsed will show up in this map.
     */
    public Multimap<MeshData, FloatBuffer> getParsedVertexColors() {
        return _parsedVertexColors;
    }

    public void setParsedVertexColors(final Multimap<MeshData, FloatBuffer> parsedVertexColors) {
        _parsedVertexColors = parsedVertexColors;
    }

    public Map<String, MaterialInfo> getMaterialMap() {
        return _materialMap;
    }

    public void setMaterialMap(final Map<String, MaterialInfo> materialMap) {
        _materialMap = materialMap;
    }

    public Map<Mesh, String> getMeshMaterialInfo() {
        return _meshMaterialInfo;
    }

    public void setMeshMaterialInfo(final Map<Mesh, String> meshMaterialInfo) {
        _meshMaterialInfo = meshMaterialInfo;
    }

    // /////////////////
    // Methods for Savable
    // /////////////////

    @Override
    public Class<?> getClassTag() {
        return this.getClass();
    }

    @Override
    public void read(final InputCapsule capsule) throws IOException {
        _assetData = (AssetData) capsule.readSavable("assetData", null);
        _scene = (Node) capsule.readSavable("scene", null);
        _skins.addAll(capsule.readSavableList("skins", new LinkedList<SkinData>()));
        _transformChannels.clear();
        _transformChannels.addAll(capsule.readSavableList("jointChannels", new LinkedList<TransformChannel>()));
    }

    @Override
    public void write(final OutputCapsule capsule) throws IOException {
        capsule.write(_assetData, "assetData", null);
        capsule.write(_scene, "scene", null);
        capsule.writeSavableList(_skins, "skins", new LinkedList<SkinData>());
        capsule.writeSavableList(_transformChannels, "jointChannels", new LinkedList<TransformChannel>());
    }
}
TOP

Related Classes of com.ardor3d.extension.model.collada.jdom.data.ColladaStorage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.