Package org.jwildfire.create.tina.meshgen

Source Code of org.jwildfire.create.tina.meshgen.ReducedPreviewMeshCreator

/*
  JWildfire - an image and animation processor written in Java
  Copyright (C) 1995-2013 Andreas Maschke

  This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
  General Public License as published by the Free Software Foundation; either version 2.1 of the
  License, or (at your option) any later version.
  This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License along with this software;
  if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jwildfire.create.tina.meshgen;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.jwildfire.create.tina.meshgen.marchingcubes.Face;
import org.jwildfire.create.tina.meshgen.marchingcubes.Mesh;
import org.jwildfire.create.tina.meshgen.marchingcubes.Point;

public class ReducedPreviewMeshCreator {

  public static Mesh createReducedMesh(Mesh pMesh, int pFaceCount) {
    if (pFaceCount * 0.9 > pMesh.getFaces().size()) {
      return pMesh;
    }

    List<Point> points = new ArrayList<Point>();
    List<Face> faces = new ArrayList<Face>();

    List<Face> allFaces = new ArrayList<Face>(pMesh.getFaces());
    List<Point> allPoints = pMesh.getVertices();
    long t0 = System.currentTimeMillis();
    Set<Integer> indexSet = new HashSet<Integer>();

    for (int i = 0; i < pFaceCount; i++) {

      int fIdx = -1;
      for (int j = 0; j < 7; j++) {
        int idx = (int) (Math.random() * allFaces.size());
        if (!indexSet.contains(idx)) {
          fIdx = idx;
          break;
        }
      }
      if (fIdx >= 0) {
        Face face = new Face(allFaces.get(fIdx));
        Point p1 = new Point(allPoints.get(face.a));
        Point p2 = new Point(allPoints.get(face.b));
        Point p3 = new Point(allPoints.get(face.c));
        face.a = points.size();
        face.b = points.size() + 1;
        face.c = points.size() + 2;

        points.add(p1);
        points.add(p2);
        points.add(p3);
        faces.add(face);
      }
    }
    long t1 = System.currentTimeMillis();
    System.out.println("REDUCE MESH: " + (t1 - t0) / 1000.0 + "s");

    return new Mesh(points, faces);
  }
}
TOP

Related Classes of org.jwildfire.create.tina.meshgen.ReducedPreviewMeshCreator

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.