2 * Copyright (c) 2011 Kazuhiko Kobayashi
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * * Neither the name of 'MMDLoaderJME' nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 package projectkyoto.mmd.file.util2;
35 import java.io.Serializable;
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.List;
40 import projectkyoto.mmd.file.PMDMaterial;
41 import projectkyoto.mmd.file.PMDModel;
42 import projectkyoto.mmd.file.PMDSkinData;
43 import projectkyoto.mmd.file.PMDVertex;
49 public class SkinMeshData implements Serializable{
52 List<Integer> boneList = new ArrayList<Integer>();
53 List<PMDVertex> vertexList = new ArrayList<PMDVertex>();
54 Map<PMDMaterial, List<Integer>> indexMap = new HashMap<PMDMaterial, List<Integer>>();
56 public SkinMeshData(MeshConverter mc, PMDModel model) {
58 for(PMDSkinData sd : model.getSkinData()) {
59 if (sd.getSkinType() == 0) {
60 for(int i=0;i<sd.getSkinVertCount();i++) {
61 PMDVertex v = model.getVertex(sd.getSkinVertData()[i].getSkinVertIndex());
63 mc.skinTmpVertMap.put(sd.getSkinVertData()[i].getSkinVertIndex(), i);
69 public void addTriangle(MeshConverter mc, PMDMaterial material, int i1, int i2, int i3) {
73 List<Integer> indexList = indexMap.get(material);
74 if (indexList == null) {
75 indexList = new ArrayList<Integer>();
76 indexMap.put(material, indexList);
78 addVertex(mc, indexList,i1);
79 addVertex(mc, indexList,i2);
80 addVertex(mc, indexList,i3);
83 private void addBoneList(int vertIndex) {
84 PMDVertex v = model.getVertex(vertIndex);
85 if (!boneList.contains(v.getBoneNum1())) {
86 boneList.add(v.getBoneNum1());
88 if (!boneList.contains(v.getBoneNum2())) {
89 boneList.add(v.getBoneNum2());
93 private void addVertex(MeshConverter mc, List<Integer>indexList, int vertIndex) {
94 PMDVertex v = model.getVertex(vertIndex);
95 Integer index = mc.skinTmpVertMap.get(vertIndex);
97 if (index != null /*vertexList.contains(v)*/) {
98 newVertIndex = index.intValue(); //vertexList.indexOf(v);
100 newVertIndex = vertexList.size();
102 mc.skinTmpVertMap.put(vertIndex, newVertIndex);
103 index = newVertIndex;
105 indexList.add(index/*newVertIndex*/);
108 public List<Integer> getBoneList() {
112 public void setBoneList(List<Integer> boneList) {
113 this.boneList = boneList;
117 public PMDModel getModel() {
121 public void setModel(PMDModel model) {
125 public List<PMDVertex> getVertexList() {
129 public void setVertexList(List<PMDVertex> vertexList) {
130 this.vertexList = vertexList;
133 public Map<PMDMaterial, List<Integer>> getIndexMap() {
137 public void setIndexMap(Map<PMDMaterial, List<Integer>> indexMap) {
138 this.indexMap = indexMap;