Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
127d8834
Commit
127d8834
authored
Apr 03, 2025
by
Riegel
Browse files
Refactor: Decouple Renderer setup from data model
parent
7810d1f0
Pipeline
#11041
passed with stage
in 1 minute and 27 seconds
Changes
3
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/CityObjectCollector.java
View file @
127d8834
...
...
@@ -6,13 +6,12 @@ import de.hft.stuttgart.citydoctor2.check.Requirement;
import
de.hft.stuttgart.citydoctor2.check.RequirementType
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.HashSet
;
import
java.util.Set
;
public
class
CityObjectCollector
extends
Check
{
private
final
Lis
t
<
CityObject
>
objects
=
new
ArrayLis
t
<>();
private
final
Se
t
<
CityObject
>
objects
=
new
HashSe
t
<>();
@Override
public
Set
<
Requirement
>
appliesToRequirements
()
{
...
...
@@ -39,7 +38,7 @@ public class CityObjectCollector extends Check {
return
false
;
}
public
Lis
t
<
CityObject
>
getCityObjects
()
{
public
Se
t
<
CityObject
>
getCityObjects
()
{
return
objects
;
}
...
...
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java
View file @
127d8834
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java
View file @
127d8834
package
de.hft.stuttgart.citydoctor2.gui
;
import
de.hft.stuttgart.citydoctor2.checks.util.CityObjectCollector
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.*
;
import
de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter
;
...
...
@@ -12,6 +13,7 @@ import javafx.scene.paint.PhongMaterial;
import
javafx.scene.shape.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
public
class
TriangulatedGeometry
{
...
...
@@ -75,22 +77,17 @@ public class TriangulatedGeometry {
public
static
TriangulatedGeometry
of
(
CityDoctorModel
model
,
List
<
ViewFilter
>
filters
)
{
List
<
Vector3d
>
points
=
new
ArrayList
<>();
addPointsFromBuildings
(
model
.
getBuildings
(),
points
);
addPointsFromCityObject
(
model
.
getBridges
(),
points
);
addPointsFromCityObject
(
model
.
getLand
(),
points
);
addPointsFromTransportationObjects
(
model
.
getTransportation
(),
points
);
addPointsFromCityObject
(
model
.
getVegetation
(),
points
);
addPointsFromCityObject
(
model
.
getWater
(),
points
);
addPointsFromCityObject
(
model
.
createFeatureStream
().
toList
(),
points
);
TriangulatedGeometry
triGeom
=
new
TriangulatedGeometry
();
triGeom
.
materials
=
new
ArrayList
<>();
triGeom
.
meshes
=
new
ArrayList
<>();
triGeom
.
movedBy
=
triGeom
.
findCenter
(
points
);
addPolygonDataFrom
Building
s
(
model
.
getBuildings
(),
triGeom
,
filters
);
addPolygonDataFrom
Bridge
s
(
model
.
getBridges
(),
triGeom
,
filters
);
addPolygonDataFrom
CityObject
s
(
model
.
getBuildings
(),
triGeom
,
Color
.
WHITE
,
filters
);
addPolygonDataFrom
CityObject
s
(
model
.
getBridges
(),
triGeom
,
Color
.
CORAL
,
filters
);
addPolygonDataFromCityObjects
(
model
.
getLand
(),
triGeom
,
Color
.
BROWN
,
filters
);
addPolygonDataFrom
Transportation
Objects
(
model
.
getTransportation
(),
triGeom
,
filters
);
addPolygonDataFrom
City
Objects
(
model
.
getTransportation
(),
triGeom
,
Color
.
YELLOW
,
filters
);
addPolygonDataFromCityObjects
(
model
.
getVegetation
(),
triGeom
,
Color
.
LIGHTGREEN
,
filters
);
addPolygonDataFromCityObjects
(
model
.
getWater
(),
triGeom
,
Color
.
LIGHTSKYBLUE
,
filters
);
addPolygonDataFromCityObjects
(
model
.
getCityFurniture
(),
triGeom
,
Color
.
BLUEVIOLET
,
filters
);
...
...
@@ -98,94 +95,14 @@ public class TriangulatedGeometry {
return
triGeom
;
}
private
static
void
addPolygonDataFromBuildings
(
List
<
Building
>
buildings
,
TriangulatedGeometry
triGeom
,
List
<
ViewFilter
>
filters
)
{
for
(
Building
b
:
buildings
)
{
addPolygonData
(
b
,
triGeom
,
Color
.
WHITE
,
filters
);
addPolygonDataFromBoundarySurfaces
(
b
.
getBoundarySurfaces
(),
triGeom
,
filters
);
addPolygonDataFromCityObjects
(
b
.
getBuildingInstallations
(),
triGeom
,
Color
.
WHITE
,
filters
);
for
(
Installation
bi
:
b
.
getBuildingInstallations
())
{
addPolygonDataFromCityObjects
(
bi
.
getBoundarySurfaces
(),
triGeom
,
Color
.
WHITE
,
filters
);
}
for
(
BuildingPart
bp
:
b
.
getBuildingParts
())
{
addPolygonData
(
bp
,
triGeom
,
Color
.
WHITE
,
filters
);
addPolygonDataFromBoundarySurfaces
(
bp
.
getBoundarySurfaces
(),
triGeom
,
filters
);
addPolygonDataFromCityObjects
(
bp
.
getBuildingInstallations
(),
triGeom
,
Color
.
WHITE
,
filters
);
}
}
}
private
static
void
addPolygonDataFromBridges
(
List
<
BridgeObject
>
bridges
,
TriangulatedGeometry
triGeom
,
List
<
ViewFilter
>
filters
)
{
for
(
BridgeObject
b
:
bridges
)
{
addPolygonData
(
b
,
triGeom
,
Color
.
CORAL
,
filters
);
addPolygonDataFromBoundarySurfaces
(
b
.
getBoundarySurfaces
(),
triGeom
,
filters
);
addPolygonDataFromCityObjects
(
b
.
getBridgeInstallations
(),
triGeom
,
Color
.
CORAL
,
filters
);
for
(
Installation
bi
:
b
.
getBridgeInstallations
())
{
addPolygonData
(
bi
,
triGeom
,
Color
.
CORAL
,
filters
);
addPolygonDataFromCityObjects
(
bi
.
getBoundarySurfaces
(),
triGeom
,
Color
.
CORAL
,
filters
);
}
for
(
BridgeConstructiveElement
bce
:
b
.
getConstructiveElements
())
{
addPolygonData
(
bce
,
triGeom
,
Color
.
CORAL
,
filters
);
addPolygonDataFromCityObjects
(
bce
.
getBoundarySurfaces
(),
triGeom
,
Color
.
CORAL
,
filters
);
}
addPolygonDataFromBridges
(
b
.
getParts
(),
triGeom
,
filters
);
}
}
private
static
void
addPolygonDataFromTransportationObjects
(
List
<
TransportationObject
>
tos
,
TriangulatedGeometry
triGeom
,
List
<
ViewFilter
>
filters
)
{
for
(
TransportationObject
to
:
tos
)
{
if
(
to
instanceof
TransportationSpace
tsp
)
{
addPolygonDataFromTransportationSpace
(
tsp
,
triGeom
,
filters
);
if
(
tsp
instanceof
TopLevelTransportFeature
top
)
{
for
(
TransportSection
tse
:
top
.
getSections
())
{
addPolygonDataFromTransportationSpace
(
tse
,
triGeom
,
filters
);
}
for
(
TransportSection
tse
:
top
.
getIntersections
())
{
addPolygonDataFromTransportationSpace
(
tse
,
triGeom
,
filters
);
}
}
}
else
{
addPolygonData
(
to
,
triGeom
,
Color
.
YELLOW
,
filters
);
}
}
}
private
static
void
addPolygonDataFromTransportationSpace
(
TransportationSpace
ts
,
TriangulatedGeometry
triGeom
,
List
<
ViewFilter
>
filters
)
{
addPolygonData
(
ts
,
triGeom
,
Color
.
YELLOW
,
filters
);
addPolygonDataFromTrafficSpaces
(
ts
.
getTrafficSpaces
(),
triGeom
,
filters
);
addPolygonDataFromTrafficSpaces
(
ts
.
getAuxTrafficSpaces
(),
triGeom
,
filters
);
}
private
static
void
addPolygonDataFromTrafficSpaces
(
List
<
TrafficSpaceObject
>
spaces
,
TriangulatedGeometry
triGeom
,
List
<
ViewFilter
>
filters
)
{
for
(
TrafficSpaceObject
space
:
spaces
)
{
addPolygonData
(
space
,
triGeom
,
Color
.
YELLOW
,
filters
);
for
(
TrafficAreaObject
area
:
space
.
getTrafficAreas
())
{
addPolygonData
(
area
,
triGeom
,
Color
.
YELLOW
,
filters
);
}
}
}
private
static
void
addPolygonDataFromBoundarySurfaces
(
List
<
BoundarySurface
>
boundarySurfaces
,
TriangulatedGeometry
triGeom
,
List
<
ViewFilter
>
filters
)
{
for
(
BoundarySurface
bs
:
boundarySurfaces
)
{
addPolygonData
(
bs
,
triGeom
,
Color
.
WHITE
,
filters
);
for
(
Opening
o
:
bs
.
getOpenings
())
{
addPolygonData
(
o
,
triGeom
,
Color
.
WHITE
,
filters
);
}
}
}
private
static
void
addPolygonDataFromCityObjects
(
List
<?
extends
CityObject
>
cos
,
TriangulatedGeometry
triGeom
,
Color
color
,
List
<
ViewFilter
>
filters
)
{
for
(
CityObject
co
:
cos
)
{
addPolygonData
(
co
,
triGeom
,
color
,
filters
);
}
CityObject
Collector
collector
=
new
CityObjectCollector
();
cos
.
forEach
(
cityObject
->
cityObject
.
accept
(
collector
)
);
collector
.
getCityObjects
().
forEach
(
cityObject
->
addPolygonData
(
cityObject
,
triGeom
,
color
,
filters
));
}
private
static
void
addPolygonData
(
CityObject
co
,
TriangulatedGeometry
triGeom
,
Color
color
,
List
<
ViewFilter
>
filters
)
{
...
...
@@ -213,46 +130,10 @@ public class TriangulatedGeometry {
return
true
;
}
private
static
void
addPointsFromBuildings
(
List
<
Building
>
buildings
,
List
<
Vector3d
>
points
)
{
for
(
Building
b
:
buildings
)
{
addPoints
(
b
,
points
);
for
(
BuildingPart
bp
:
b
.
getBuildingParts
())
{
addPoints
(
bp
,
points
);
addPointsFromCityObject
(
bp
.
getBoundarySurfaces
(),
points
);
addPointsFromCityObject
(
bp
.
getBuildingInstallations
(),
points
);
}
addPointsFromCityObject
(
b
.
getBoundarySurfaces
(),
points
);
addPointsFromCityObject
(
b
.
getBuildingInstallations
(),
points
);
}
}
private
static
void
addPointsFromTransportationObjects
(
List
<?
extends
TransportationObject
>
tos
,
List
<
Vector3d
>
points
)
{
for
(
TransportationObject
to
:
tos
)
{
addPoints
(
to
,
points
);
if
(
to
instanceof
TransportationSpace
ts
)
{
addPointsFromTrafficSpace
(
ts
.
getTrafficSpaces
(),
points
);
addPointsFromTrafficSpace
(
ts
.
getAuxTrafficSpaces
(),
points
);
if
(
ts
instanceof
TopLevelTransportFeature
top
)
{
addPointsFromTransportationObjects
(
top
.
getSections
(),
points
);
addPointsFromTransportationObjects
(
top
.
getIntersections
(),
points
);
}
}
}
}
private
static
void
addPointsFromTrafficSpace
(
List
<
TrafficSpaceObject
>
tos
,
List
<
Vector3d
>
points
)
{
for
(
TrafficSpaceObject
to
:
tos
)
{
addPoints
(
to
,
points
);
for
(
TrafficAreaObject
area
:
to
.
getTrafficAreas
())
{
addPoints
(
area
,
points
);
}
}
}
private
static
void
addPointsFromCityObject
(
List
<?
extends
CityObject
>
cos
,
List
<
Vector3d
>
points
)
{
for
(
CityObject
co
:
cos
)
{
addPoints
(
co
,
points
);
}
CityObject
Collector
collector
=
new
CityObjectCollector
();
cos
.
forEach
(
cityObject
->
cityObject
.
accept
(
collector
)
);
collector
.
getCityObjects
().
forEach
(
cityObject
->
addPoints
(
cityObject
,
points
));
}
private
static
void
addPoints
(
CityObject
co
,
List
<
Vector3d
>
points
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment