Commit 120466a0 authored by Riegel's avatar Riegel
Browse files

Refactor: Simplify PhongMaterial calculation

parent 5d718df1
Pipeline #11088 passed with stage
in 1 minute and 24 seconds
...@@ -92,7 +92,13 @@ public class BoundarySurface extends CityObject { ...@@ -92,7 +92,13 @@ public class BoundarySurface extends CityObject {
return switch (type) { return switch (type) {
case ROOF -> Color.RED; case ROOF -> Color.RED;
case GROUND -> Color.KHAKI; case GROUND -> Color.KHAKI;
default -> Color.WHITE; default -> {
if (parent != null) {
yield parent.getRenderColor();
} else {
yield Color.WHITE;
}
}
}; };
} }
......
...@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.Checkable; ...@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.Checkable;
import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.JoglTesselator; import de.hft.stuttgart.citydoctor2.tesselation.JoglTesselator;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
import javafx.scene.paint.Color;
import java.io.Serial; import java.io.Serial;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -412,6 +413,11 @@ public class ConcretePolygon extends Polygon { ...@@ -412,6 +413,11 @@ public class ConcretePolygon extends Polygon {
} }
return area; return area;
} }
@Override
public Color getRenderColor() {
return parent.getRenderColor();
}
......
...@@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d; ...@@ -25,6 +25,7 @@ import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
import de.hft.stuttgart.citydoctor2.utils.BoundingBoxCalculator; import de.hft.stuttgart.citydoctor2.utils.BoundingBoxCalculator;
import de.hft.stuttgart.citydoctor2.utils.SerializablePair; import de.hft.stuttgart.citydoctor2.utils.SerializablePair;
import javafx.scene.paint.Color;
import java.io.Serial; import java.io.Serial;
import java.util.*; import java.util.*;
...@@ -342,4 +343,8 @@ public class Geometry extends GmlElement { ...@@ -342,4 +343,8 @@ public class Geometry extends GmlElement {
edges = null; edges = null;
edgeMap = null; edgeMap = null;
} }
public Color getRenderColor() {
return parent.getRenderColor();
}
} }
...@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckId; ...@@ -23,6 +23,7 @@ import de.hft.stuttgart.citydoctor2.check.CheckId;
import de.hft.stuttgart.citydoctor2.check.CheckResult; import de.hft.stuttgart.citydoctor2.check.CheckResult;
import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
import javafx.scene.paint.Color;
import java.io.Serial; import java.io.Serial;
import java.util.List; import java.util.List;
...@@ -259,4 +260,9 @@ public class LinkedPolygon extends Polygon { ...@@ -259,4 +260,9 @@ public class LinkedPolygon extends Polygon {
return poly.getArea(); return poly.getArea();
} }
@Override
public Color getRenderColor() {
return poly.getRenderColor();
}
} }
...@@ -21,6 +21,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; ...@@ -21,6 +21,7 @@ package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.check.Check; import de.hft.stuttgart.citydoctor2.check.Check;
import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration; import de.hft.stuttgart.citydoctor2.parser.ParserConfiguration;
import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils; import de.hft.stuttgart.citydoctor2.utils.CityGmlUtils;
import javafx.scene.paint.Color;
import org.citygml4j.core.model.construction.AbstractFillingSurface; import org.citygml4j.core.model.construction.AbstractFillingSurface;
import org.citygml4j.core.model.core.AbstractCityObject; import org.citygml4j.core.model.core.AbstractCityObject;
import org.citygml4j.core.util.geometry.GeometryFactory; import org.citygml4j.core.util.geometry.GeometryFactory;
...@@ -152,4 +153,13 @@ public class Opening extends CityObject { ...@@ -152,4 +153,13 @@ public class Opening extends CityObject {
return FeatureType.OPENING; return FeatureType.OPENING;
} }
@Override
public Color getRenderColor() {
return switch (type) {
case DOOR -> Color.ORANGE;
case WINDOW -> Color.TEAL;
default -> Color.BLACK;
};
}
} }
...@@ -20,6 +20,7 @@ package de.hft.stuttgart.citydoctor2.datastructure; ...@@ -20,6 +20,7 @@ package de.hft.stuttgart.citydoctor2.datastructure;
import de.hft.stuttgart.citydoctor2.math.Vector3d; import de.hft.stuttgart.citydoctor2.math.Vector3d;
import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon; import de.hft.stuttgart.citydoctor2.tesselation.TesselatedPolygon;
import javafx.scene.paint.Color;
import java.io.Serial; import java.io.Serial;
import java.util.List; import java.util.List;
...@@ -86,4 +87,6 @@ public abstract class Polygon extends GmlElement { ...@@ -86,4 +87,6 @@ public abstract class Polygon extends GmlElement {
public abstract double getArea(); public abstract double getArea();
public abstract Color getRenderColor();
} }
\ No newline at end of file
...@@ -167,17 +167,10 @@ public class TriangulatedGeometry { ...@@ -167,17 +167,10 @@ public class TriangulatedGeometry {
private PhongMaterial calculateMaterial(Polygon p, Color baseColor) { private PhongMaterial calculateMaterial(Polygon p, Color baseColor) {
Vector3d normal = p.calculateNormalNormalized(); Vector3d normal = p.calculateNormalNormalized();
BoundarySurface bs = p.getPartOfSurface(); if (p.getRenderColor() != null && p.getRenderColor() != Color.WHITE) {
if (bs != null) { baseColor = p.getRenderColor();
if (bs.getType() == BoundarySurfaceType.ROOF) {
baseColor = Color.RED;
} else if (bs.getType() == BoundarySurfaceType.GROUND) {
baseColor = Color.KHAKI;
}
} }
baseColor = determineColorDependingOnParentType(p, baseColor);
double cos = normal.dot(AXIS); double cos = normal.dot(AXIS);
double acos = Math.acos(cos); double acos = Math.acos(cos);
// normalize to range [0.3, 0.9] // normalize to range [0.3, 0.9]
...@@ -188,37 +181,6 @@ public class TriangulatedGeometry { ...@@ -188,37 +181,6 @@ public class TriangulatedGeometry {
return new PhongMaterial(derivedColor); return new PhongMaterial(derivedColor);
} }
private Color determineColorDependingOnParentType(Polygon p, Color baseColor) {
p = p.getOriginal();
Polygon p1 = p.getLinkedFromPolygon();
Color parentColor = null;
if (p1 != null) {
parentColor = p1.getParent().getParent().getRenderColor();
} else {
parentColor = baseColor = p.getParent().getParent().getRenderColor();
}
if (parentColor != null && parentColor != Color.WHITE) {
baseColor = parentColor;
}
baseColor = changeBaseColorIfPolygonHasOpeningParent(p1, baseColor);
baseColor = changeBaseColorIfPolygonHasOpeningParent(p, baseColor);
return baseColor;
}
private Color changeBaseColorIfPolygonHasOpeningParent(Polygon p, Color baseColor) {
if (p == null) {
return baseColor;
}
CityObject parent = p.getParent().getParent();
if (parent instanceof Opening op) {
if (op.getType() == OpeningType.DOOR) {
baseColor = Color.ORANGE;
} else {
baseColor = Color.TEAL;
}
}
return baseColor;
}
private Vector3d findCenter(List<Vector3d> points) { private Vector3d findCenter(List<Vector3d> points) {
double xMin = Double.MAX_VALUE; double xMin = Double.MAX_VALUE;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment