ObjParseException class
Пакет: com.hypixel.hytale.builtin.buildertools.objimport
Файл: com/hypixel/hytale/builtin/buildertools/objimport/ObjParser.java
extends: Exception
Методы (2)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
super super(var1) |
abstract |
|
super super(var1, var2) |
Исходный код
Показать/скрыть
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);
}
}
}