ObjParser class

Пакет: com.hypixel.hytale.builtin.buildertools.objimport

Файл: com/hypixel/hytale/builtin/buildertools/objimport/ObjParser.java

Поля (49)

МодификаторыТипИмя
break
break
break
break
List var1
float var1
var1
float[] var1
int var10
String[] var10
String[] var11
int var11
int var14
int var15
int var15
List var2
float var2
var2
List var3
float var3
float var3
float var3
var3
float var3
float var3
List var4
float var4
float var4
float var4
var4
float var4
float var4
List var5
float var5
int[] var5
float var5
var5
String var6
var6
int[] var6
float var6
var6
String var7
var7
boolean var7
var7
String var9
var9
String var9

Методы (32)

МодификаторыВозвратСигнатура
public record ObjMeshrecord ObjMesh(List<float[]> vertices, List<float[]> uvCoordinates, List<int[]> faces, List<int[]> faceUvIndices, List<String> faceMaterials, @Nullable String mtlLib)
public ObjParseExceptionpublic ObjParseException(String var1)
public ObjParseExceptionpublic ObjParseException(String var1, Throwable var2)
for for(int var16 = 0; var16 < var15; var16++)
for for(int var8 = 1; var8 < var0.length; var8++)
for for(int var14 = 1; var14 < var5.length - 1; var14++)
for for(float[] var8 : this.vertices)
for for(float[] var2 : this.vertices)
for for(float[] var2 : this.vertices)
public float[] getBoundspublic float[] getBounds()
public float getHeightpublic float getHeight()
public boolean hasMaterialspublic boolean hasMaterials()
public boolean hasUvCoordinatespublic boolean hasUvCoordinates()
if if(var11.length != 0)
if if(var11.length > 1)
if if(var11.length > 1)
if if(var0.length < 4)
if if(var0.length < 3)
if if(var0.length < 4)
if if(var5.length == 3)
if if(var7)
if if(var7)
static void parseFacevoid parseFace(String[] var0, List<int[]> var1, List<int[]> var2, int var3, int var4)
static void parseUvCoordinatevoid parseUvCoordinate(String[] var0, List<float[]> var1, int var2)
abstract parseUvCoordinate parseUvCoordinate(var11, var2, var10)
static void parseVertexvoid parseVertex(String[] var0, List<float[]> var1, int var2)
abstract parseVertex parseVertex(var11, var1, var10)
abstract super super(var1)
abstract super super(var1, var2)
switch switch(var11[0])
public void transformXUpToYUppublic void transformXUpToYUp()
public void transformZUpToYUppublic void transformZUpToYUp()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.objimport;

class="kw">import java.io.BufferedReader;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class="kw">final class ObjParser {
   class="kw">private ObjParser() {
   }

   @Nonnull
   class="kw">public class="kw">static ObjParser.ObjMesh parse(@Nonnull Path var0) class="kw">throws IOException, ObjParser.ObjParseException {
      List var1 = new ArrayList<>();
      List var2 = new ArrayList<>();
      List var3 = new ArrayList<>();
      List var4 = new ArrayList<>();
      List var5 = new ArrayList<>();
      String var6 = null;
      String var7 = null;

      try (BufferedReader var8 = Files.newBufferedReader(var0)) {
         int var10 = 0;

         String var9;
         while ((var9 = var8.readLine()) != null) {
            var10++;
            var9 = var9.trim();
            if (!var9.isEmpty() && !var9.startsWith("#")) {
               String[] var11 = var9.split("\\s+", 0);
               if (var11.length != 0) {
                  class="kw">switch (var11[0]) {
                     case "v":
                        parseVertex(var11, var1, var10);
                        break;
                     case "vt":
                        parseUvCoordinate(var11, var2, var10);
                        break;
                     case "f":
                        int var14 = var3.size();
                        parseFace(var11, var3, var4, var2.size(), var10);
                        int var15 = var3.size() - var14;

                        for (int var16 = 0; var16 < var15; var16++) {
                           var5.add(var7);
                        }
                        break;
                     case "mtllib":
                        if (var11.length > 1) {
                           var6 = var11[1].trim();
                        }
                        break;
                     case "usemtl":
                        if (var11.length > 1) {
                           var7 = var11[1].trim();
                        }
                  }
               }
            }
         }
      }

      if (var1.isEmpty()) {
         throw new ObjParser.ObjParseException("OBJ file contains no vertices");
      } else if (var3.isEmpty()) {
         throw new ObjParser.ObjParseException("OBJ file contains no faces");
      } else {
         class="kw">return new ObjParser.ObjMesh(var1, var2, var3, var4, var5, var6);
      }
   }

   class="kw">private class="kw">static void parseVertex(String[] var0, List<float[]> var1, int var2) class="kw">throws ObjParser.ObjParseException {
      if (var0.length < 4) {
         throw new ObjParser.ObjParseException("Invalid vertex at line " + var2 + ": expected at least 3 coordinates");
      }

      try {
         float var3 = Float.parseFloat(var0[1]);
         float var4 = Float.parseFloat(var0[2]);
         float var5 = Float.parseFloat(var0[3]);
         var1.add(new float[]{var3, var4, var5});
      } catch (NumberFormatException var6) {
         throw new ObjParser.ObjParseException("Invalid vertex coordinates at line " + var2, var6);
      }
   }

   class="kw">private class="kw">static void parseUvCoordinate(String[] var0, List<float[]> var1, int var2) class="kw">throws ObjParser.ObjParseException {
      if (var0.length < 3) {
         throw new ObjParser.ObjParseException("Invalid UV coordinate at line " + var2 + ": expected at least 2 values");
      }

      try {
         float var3 = Float.parseFloat(var0[1]);
         float var4 = Float.parseFloat(var0[2]);
         var1.add(new float[]{var3, var4});
      } catch (NumberFormatException var5) {
         throw new ObjParser.ObjParseException("Invalid UV coordinates at line " + var2, var5);
      }
   }

   class="kw">private class="kw">static void parseFace(String[] var0, List<int[]> var1, List<int[]> var2, int var3, int var4) class="kw">throws ObjParser.ObjParseException {
      if (var0.length < 4) {
         throw new ObjParser.ObjParseException("Invalid face at line " + var4 + ": expected at least 3 vertices");
      }

      int[] var5 = new int[var0.length - 1];
      int[] var6 = new int[var0.length - 1];
      boolean var7 = false;

      for (int var8 = 1; var8 < var0.length; var8++) {
         String var9 = var0[var8];
         String[] var10 = var9.split("/", -1);

         try {
            int var11 = Integer.parseInt(var10[0]);
            var5[var8 - 1] = var11 > 0 ? var11 - 1 : var11;
         } catch (NumberFormatException var13) {
            throw new ObjParser.ObjParseException("Invalid face vertex index at line " + var4, var13);
         }

         if (var10.length >= 2 && !var10[1].isEmpty()) {
            try {
               int var15 = Integer.parseInt(var10[1]);
               var6[var8 - 1] = var15 > 0 ? var15 - 1 : var15 + var3;
               var7 = true;
            } catch (NumberFormatException var12) {
               var6[var8 - 1] = -1;
            }
         } else {
            var6[var8 - 1] = -1;
         }
      }

      if (var5.length == 3) {
         var1.add(var5);
         var2.add(var7 ? var6 : null);
      } else if (var5.length == 4) {
         var1.add(new int[]{var5[0], var5[1], var5[2]});
         var1.add(new int[]{var5[0], var5[2], var5[3]});
         if (var7) {
            var2.add(new int[]{var6[0], var6[1], var6[2]});
            var2.add(new int[]{var6[0], var6[2], var6[3]});
         } else {
            var2.add(null);
            var2.add(null);
         }
      } else {
         for (int var14 = 1; var14 < var5.length - 1; var14++) {
            var1.add(new int[]{var5[0], var5[var14], var5[var14 + 1]});
            if (var7) {
               var2.add(new int[]{var6[0], var6[var14], var6[var14 + 1]});
            } else {
               var2.add(null);
            }
         }
      }
   }

   class="kw">public record ObjMesh(
      List<float[]> vertices, List<float[]> uvCoordinates, List<int[]> faces, List<int[]> faceUvIndices, List<String> faceMaterials, @Nullable String mtlLib
   ) {
      class="kw">public ObjMesh {
      }

      class="kw">public float[] getBounds() {
         float var1 = Float.MAX_VALUE;
         float var2 = Float.MAX_VALUE;
         float var3 = Float.MAX_VALUE;
         float var4 = -Float.MAX_VALUE;
         float var5 = -Float.MAX_VALUE;
         float var6 = -Float.MAX_VALUE;

         for (float[] var8 : this.vertices) {
            var1 = Math.min(var1, var8[0]);
            var2 = Math.min(var2, var8[1]);
            var3 = Math.min(var3, var8[2]);
            var4 = Math.max(var4, var8[0]);
            var5 = Math.max(var5, var8[1]);
            var6 = Math.max(var6, var8[2]);
         }

         class="kw">return new float[]{var1, var2, var3, var4, var5, var6};
      }

      class="kw">public float getHeight() {
         float[] var1 = this.getBounds();
         class="kw">return var1[4] - var1[1];
      }

      class="kw">public boolean hasMaterials() {
         class="kw">return this.mtlLib != null && !this.faceMaterials.isEmpty() && this.faceMaterials.stream().anyMatch(var0 -> var0 != null);
      }

      class="kw">public boolean hasUvCoordinates() {
         class="kw">return !this.uvCoordinates.isEmpty() && this.faceUvIndices.stream().anyMatch(var0 -> var0 != null);
      }

      class="kw">public void transformZUpToYUp() {
         for (float[] var2 : this.vertices) {
            float var3 = var2[1];
            float var4 = var2[2];
            var2[1] = var4;
            var2[2] = -var3;
         }
      }

      class="kw">public void transformXUpToYUp() {
         for (float[] var2 : this.vertices) {
            float var3 = var2[0];
            float var4 = var2[1];
            var2[0] = var4;
            var2[1] = var3;
         }
      }
   }

   class="kw">public class="kw">static class ObjParseException class="kw">extends Exception {
      class="kw">public ObjParseException(String var1) {
         super(var1);
      }

      class="kw">public ObjParseException(String var1, Throwable var2) {
         super(var1, var2);
      }
   }
}