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
f57a3515
Commit
f57a3515
authored
Mar 04, 2026
by
Luna Riegel
Browse files
Feat: Add data model classes for filling elements
parent
37d7d93f
Changes
5
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractConstructiveFillingElement.java
0 → 100644
View file @
f57a3515
package
de.hft.stuttgart.citydoctor2.datastructure
;
import
de.hft.stuttgart.citydoctor2.check.CheckableVisitor
;
import
de.hft.stuttgart.citydoctor2.parser.ParserConfiguration
;
import
de.hft.stuttgart.citydoctor2.utils.CityGmlUtils
;
import
org.citygml4j.core.model.construction.AbstractFillingElement
;
import
org.citygml4j.core.model.core.AbstractCityObject
;
import
org.citygml4j.core.util.geometry.GeometryFactory
;
import
org.xmlobjects.gml.model.geometry.GeometryProperty
;
import
org.xmlobjects.gml.model.geometry.aggregates.MultiSurface
;
import
org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty
;
import
org.xmlobjects.gml.model.geometry.complexes.CompositeSurface
;
import
org.xmlobjects.gml.model.geometry.primitives.Solid
;
import
org.xmlobjects.gml.model.geometry.primitives.SolidProperty
;
import
java.io.Serial
;
import
java.util.ArrayList
;
import
java.util.List
;
public
abstract
class
AbstractConstructiveFillingElement
extends
CityObject
{
private
static
final
String
CANNOT_ADD
=
"Cannot add "
;
@Serial
private
static
final
long
serialVersionUID
=
-
4183072041020247520L
;
private
CityObject
parent
;
private
final
List
<
BoundarySurface
>
boundarySurfaceList
=
new
ArrayList
<>();
private
AbstractFillingElement
gmlElement
;
protected
AbstractConstructiveFillingElement
(
AbstractFillingElement
gmlElement
)
{
this
.
gmlElement
=
gmlElement
;
}
@Override
public
void
accept
(
CheckableVisitor
c
){
super
.
accept
(
c
);
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
bs
.
accept
(
c
);
}
}
public
void
setParent
(
CityObject
parent
)
{
this
.
parent
=
parent
;
}
public
CityObject
getParent
()
{
return
parent
;
}
@Override
public
void
rebuildGeometries
(
GeometryFactory
factory
,
ParserConfiguration
config
)
{
// only handles CityGML2 for now
// unknown which CityGML is handled here
// need context information to decide
for
(
Geometry
geom
:
getGeometries
())
{
if
(
geom
instanceof
ImplicitGeometryHolder
)
{
continue
;
}
switch
(
geom
.
getType
())
{
case
SOLID:
Solid
solid
=
CityGmlUtils
.
createSolid
(
geom
,
factory
,
config
);
setSolidAccordingToLod
(
geom
,
solid
);
break
;
case
MULTI_SURFACE:
MultiSurface
ms
=
CityGmlUtils
.
createMultiSurface
(
geom
,
factory
,
config
);
setMultiSurfaceAccordingToLod
(
geom
,
ms
);
break
;
}
}
}
private
void
setSolidAccordingToLod
(
Geometry
geom
,
Solid
solid
)
{
switch
(
geom
.
getLod
())
{
case
LOD1:
gmlElement
.
setLod1Solid
(
new
SolidProperty
(
solid
));
break
;
case
LOD2:
gmlElement
.
setLod2Solid
(
new
SolidProperty
(
solid
));
break
;
case
LOD3:
gmlElement
.
setLod3Solid
(
new
SolidProperty
(
solid
));
break
;
default
:
throw
new
IllegalStateException
(
CANNOT_ADD
+
geom
.
getLod
()
+
" solid to buildings"
);
}
}
private
void
setMultiSurfaceAccordingToLod
(
Geometry
geom
,
MultiSurface
ms
)
{
switch
(
geom
.
getLod
())
{
case
LOD0:
gmlElement
.
setLod0MultiSurface
(
new
MultiSurfaceProperty
(
ms
));
break
;
case
LOD2:
gmlElement
.
setLod2MultiSurface
(
new
MultiSurfaceProperty
(
ms
));
break
;
case
LOD3:
gmlElement
.
setLod3MultiSurface
(
new
MultiSurfaceProperty
(
ms
));
break
;
default
:
throw
new
IllegalStateException
(
CANNOT_ADD
+
geom
.
getLod
()
+
" multi surface to buildings"
);
}
}
@Override
public
AbstractCityObject
getGmlObject
()
{
return
gmlElement
;
}
@Override
public
void
unsetGmlGeometries
()
{
gmlElement
.
setLod0MultiSurface
(
null
);
gmlElement
.
setLod1Solid
(
null
);
gmlElement
.
setLod2Solid
(
null
);
gmlElement
.
setLod2MultiSurface
(
null
);
gmlElement
.
setLod3Solid
(
null
);
gmlElement
.
setLod3MultiSurface
(
null
);
}
@Override
public
CityObject
getTopLevelCityObject
()
{
return
parent
.
getTopLevelCityObject
();
}
public
void
addBoundarySurface
(
BoundarySurface
bs
)
{
boundarySurfaceList
.
add
(
bs
);
bs
.
setParent
(
this
);
}
public
List
<
BoundarySurface
>
getBoundarySurfaces
()
{
return
boundarySurfaceList
;
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/BoundarySurfaceType.java
View file @
f57a3515
...
...
@@ -25,6 +25,6 @@ package de.hft.stuttgart.citydoctor2.datastructure;
*/
public
enum
BoundarySurfaceType
{
UNDEFINED
,
ROOF
,
WALL
,
GROUND
,
CLOSURE
,
OUTER_FLOOR
,
OUTER_CEILING
,
CEILING
,
INTERIOR_WALL
,
FLOOR
UNDEFINED
,
ROOF
,
WALL
,
GROUND
,
CLOSURE
,
OUTER_FLOOR
,
OUTER_CEILING
,
CEILING
,
INTERIOR_WALL
,
FLOOR
,
WINDOW
,
DOOR
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/DoorObject.java
0 → 100644
View file @
f57a3515
package
de.hft.stuttgart.citydoctor2.datastructure
;
import
javafx.scene.paint.Color
;
public
class
DoorObject
extends
AbstractConstructiveFillingElement
{
public
DoorObject
(
org
.
citygml4j
.
core
.
model
.
construction
.
Door
door
)
{
super
(
door
);
}
public
String
getDisplayText
()
{
return
String
.
format
(
"[Door] %s"
,
this
.
getGmlId
().
toString
());
}
@Override
public
Color
getRenderColor
()
{
return
Color
.
ORANGE
;
}
@Override
public
FeatureType
getFeatureType
()
{
return
FeatureType
.
DOOR
;
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/FeatureType.java
View file @
f57a3515
...
...
@@ -29,7 +29,7 @@ public enum FeatureType {
BUILDING
,
TRANSPORTATION
,
VEGETATION
,
BRIDGE
,
LAND
,
WATER
,
BOUNDARY_SURFACE
,
INSTALLATION
,
OPENING
,
BUILDING_PART
,
BUILDING_SUBDIVISION
,
BRIDGE_CONSTRUCTION_ELEMENT
,
BRIDGE_INSTALLATION
,
ROOM
,
FURNITURE
,
CITY_FURNITURE
,
OTHER_CITY_OBJECT
,
TUNNEL
,
TUNNEL_PART
,
TUNNEL_CONSTRUCTION_ELEMENT
,
TUNNEL_INSTALLATION
;
OTHER_CITY_OBJECT
,
TUNNEL
,
TUNNEL_PART
,
TUNNEL_CONSTRUCTION_ELEMENT
,
TUNNEL_INSTALLATION
,
WINDOW
,
DOOR
;
public
TopLevelFeatureType
mapToTopLevelFeatureType
()
{
return
switch
(
this
)
{
...
...
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/WindowObject.java
0 → 100644
View file @
f57a3515
package
de.hft.stuttgart.citydoctor2.datastructure
;
import
javafx.scene.paint.Color
;
;
public
class
WindowObject
extends
AbstractConstructiveFillingElement
{
public
WindowObject
(
org
.
citygml4j
.
core
.
model
.
construction
.
Window
window
)
{
super
(
window
);
}
@Override
public
String
getDisplayText
()
{
return
String
.
format
(
"[Window] %s"
,
this
.
getGmlId
().
toString
());
}
@Override
public
Color
getRenderColor
()
{
return
Color
.
TEAL
;
}
@Override
public
FeatureType
getFeatureType
()
{
return
FeatureType
.
WINDOW
;
}
}
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