Skip to content
GitLab
Explore
Projects
Groups
Snippets
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
33f39d03
Commit
33f39d03
authored
4 months ago
by
Riegel
Browse files
Options
Download
Email Patches
Plain Diff
Add support TunnelConstructiveElements
parent
55b7c505
master
107-opengl-view
dev
dev_cpp_code_conversion
dev_gui_features
dev_gui_features_zip_loading
3.16.0
archive/dev_gui_features_zip_loading
archive/dev_citygml3
2 merge requests
!11
CityDoctor Release Version 3.16.0
,
!10
CityGML 3.0. Support
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnel.java
+43
-0
...t/stuttgart/citydoctor2/datastructure/AbstractTunnel.java
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/FeatureType.java
+1
-1
.../hft/stuttgart/citydoctor2/datastructure/FeatureType.java
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelConstructiveElement.java
+233
-0
.../citydoctor2/datastructure/TunnelConstructiveElement.java
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
+39
-0
...rt/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java
+6
-0
.../main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java
with
322 additions
and
1 deletion
+322
-1
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractTunnel.java
+
43
-
0
View file @
33f39d03
...
...
@@ -32,6 +32,7 @@ public abstract class AbstractTunnel extends CityObject {
private
final
List
<
TunnelHollow
>
tunnelHollows
=
new
ArrayList
<>();
private
final
List
<
TunnelPart
>
tunnelParts
=
new
ArrayList
<>();
private
final
List
<
TunnelFurniture
>
tunnelFurnitureList
=
new
ArrayList
<>();
private
final
List
<
TunnelConstructiveElement
>
tunnelConstructiveElements
=
new
ArrayList
<>();
private
org
.
citygml4j
.
core
.
model
.
tunnel
.
AbstractTunnel
at
;
/**
...
...
@@ -76,6 +77,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
tfr
:
tunnelFurnitureList
)
{
tfr
.
unsetGmlGeometries
();
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
te
.
unsetGmlGeometries
();
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
tp
.
unsetGmlGeometries
();
}
...
...
@@ -107,6 +111,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
tfr
:
tunnelFurnitureList
)
{
tfr
.
reCreateGeometries
(
factory
,
config
);
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
te
.
reCreateGeometries
(
factory
,
config
);
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
tp
.
reCreateGeometries
(
factory
,
config
);
}
...
...
@@ -185,6 +192,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
tfr
:
tunnelFurnitureList
)
{
tfr
.
accept
(
c
);
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
te
.
accept
(
c
);
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
tp
.
accept
(
c
);
}
...
...
@@ -205,6 +215,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
tfr
:
tunnelFurnitureList
)
{
tfr
.
collectContainedErrors
(
errors
);
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
te
.
collectContainedErrors
(
errors
);
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
tp
.
collectContainedErrors
(
errors
);
}
...
...
@@ -225,6 +238,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
tfr
:
tunnelFurnitureList
)
{
tfr
.
clearAllContainedCheckResults
();
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
te
.
clearAllContainedCheckResults
();
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
tp
.
clearAllContainedCheckResults
();
}
...
...
@@ -256,6 +272,11 @@ public abstract class AbstractTunnel extends CityObject {
return
true
;
}
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
if
(
te
.
containsError
(
checkIdentifier
))
{
return
true
;
}
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
if
(
tp
.
containsError
(
checkIdentifier
))
{
return
true
;
...
...
@@ -290,6 +311,11 @@ public abstract class AbstractTunnel extends CityObject {
return
true
;
}
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
if
(
te
.
containsAnyError
())
{
return
true
;
}
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
if
(
tp
.
containsAnyError
())
{
return
true
;
...
...
@@ -322,6 +348,9 @@ public abstract class AbstractTunnel extends CityObject {
furniture
.
setParent
(
this
);
}
public
void
addTunnelConstructiveElement
(
TunnelConstructiveElement
te
)
{
tunnelConstructiveElements
.
add
(
te
);
}
public
void
addTunnelPart
(
TunnelPart
tunnelPart
)
{
tunnelParts
.
add
(
tunnelPart
);
...
...
@@ -347,6 +376,10 @@ public abstract class AbstractTunnel extends CityObject {
return
tunnelParts
;
}
public
List
<
TunnelConstructiveElement
>
getTunnelConstructiveElements
()
{
return
tunnelConstructiveElements
;
}
@Override
public
void
prepareForChecking
()
{
super
.
prepareForChecking
();
...
...
@@ -362,6 +395,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
tfr
:
tunnelFurnitureList
)
{
tfr
.
prepareForChecking
();
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
te
.
prepareForChecking
();
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
tp
.
prepareForChecking
();
}
...
...
@@ -382,6 +418,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
tfr
:
tunnelFurnitureList
)
{
tfr
.
clearMetaInformation
();
}
for
(
TunnelConstructiveElement
te
:
tunnelConstructiveElements
)
{
te
.
clearMetaInformation
();
}
for
(
TunnelPart
tp
:
tunnelParts
)
{
tp
.
clearMetaInformation
();
}
...
...
@@ -394,6 +433,7 @@ public abstract class AbstractTunnel extends CityObject {
handler
.
addInstance
(
tunnelInstallations
);
handler
.
addInstance
(
tunnelHollows
);
handler
.
addInstance
(
tunnelFurnitureList
);
handler
.
addInstance
(
tunnelConstructiveElements
);
handler
.
addInstance
(
tunnelParts
);
}
...
...
@@ -413,6 +453,9 @@ public abstract class AbstractTunnel extends CityObject {
for
(
TunnelFurniture
originalTFR
:
originalAt
.
tunnelFurnitureList
)
{
tunnelFurnitureList
.
add
(
handler
.
getCopyInstance
(
originalTFR
));
}
for
(
TunnelConstructiveElement
originalTE
:
originalAt
.
tunnelConstructiveElements
)
{
tunnelConstructiveElements
.
add
(
handler
.
getCopyInstance
(
originalTE
));
}
for
(
TunnelPart
originalTp
:
originalAt
.
tunnelParts
)
{
tunnelParts
.
add
(
handler
.
getCopyInstance
(
originalTp
));
}
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/FeatureType.java
+
1
-
1
View file @
33f39d03
...
...
@@ -27,5 +27,5 @@ 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
,
GENERIC_CITY_OBJECT
,
TUNNEL
,
TUNNEL_PART
GENERIC_CITY_OBJECT
,
TUNNEL
,
TUNNEL_PART
,
TUNNEL_CONSTRUCTION_ELEMENT
,
TUNNEL_INSTALLATION
,
}
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TunnelConstructiveElement.java
0 → 100644
+
233
-
0
View file @
33f39d03
package
de.hft.stuttgart.citydoctor2.datastructure
;
import
de.hft.stuttgart.citydoctor2.check.Check
;
import
de.hft.stuttgart.citydoctor2.check.CheckError
;
import
de.hft.stuttgart.citydoctor2.check.CheckId
;
import
de.hft.stuttgart.citydoctor2.parser.ParserConfiguration
;
import
de.hft.stuttgart.citydoctor2.utils.CityGmlUtils
;
import
de.hft.stuttgart.citydoctor2.utils.CopyHandler
;
import
de.hft.stuttgart.citydoctor2.utils.Copyable
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.citygml4j.core.model.core.AbstractSpaceBoundaryProperty
;
import
org.citygml4j.core.util.geometry.GeometryFactory
;
import
org.xmlobjects.gml.model.geometry.aggregates.MultiSurface
;
import
org.xmlobjects.gml.model.geometry.aggregates.MultiSurfaceProperty
;
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
class
TunnelConstructiveElement
extends
CityObject
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
TunnelConstructiveElement
.
class
);
private
static
final
String
CANNOT_ADD
=
"Cannot add "
;
@Serial
private
static
final
long
serialVersionUID
=
7353233899458901155L
;
private
final
org
.
citygml4j
.
core
.
model
.
tunnel
.
TunnelConstructiveElement
gmlTunnelElement
;
private
final
List
<
BoundarySurface
>
boundarySurfaceList
=
new
ArrayList
<>();
public
TunnelConstructiveElement
(
org
.
citygml4j
.
core
.
model
.
tunnel
.
TunnelConstructiveElement
gmlObject
)
{
this
.
gmlTunnelElement
=
gmlObject
;
}
@Override
public
Copyable
createCopyInstance
()
{
return
new
TunnelConstructiveElement
(
gmlTunnelElement
);
}
@Override
public
void
reCreateGeometries
(
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
;
}
}
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
reCreateBoundarySurface
(
factory
,
config
,
bs
);
}
}
@Override
public
void
accept
(
Check
c
)
{
super
.
accept
(
c
);
if
(
c
.
canExecute
(
this
))
{
c
.
check
(
this
);
}
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
bs
.
accept
(
c
);
}
}
@Override
public
void
collectContainedErrors
(
List
<
CheckError
>
errors
)
{
super
.
collectContainedErrors
(
errors
);
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
bs
.
collectContainedErrors
(
errors
);
}
}
@Override
public
void
clearAllContainedCheckResults
()
{
super
.
clearAllContainedCheckResults
();
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
bs
.
clearAllContainedCheckResults
();
}
}
@Override
public
boolean
containsError
(
CheckId
checkIdentifier
)
{
boolean
hasError
=
super
.
containsError
(
checkIdentifier
);
if
(
hasError
)
{
return
true
;
}
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
if
(
bs
.
containsError
(
checkIdentifier
))
{
return
true
;
}
}
return
false
;
}
@Override
public
boolean
containsAnyError
()
{
boolean
hasError
=
super
.
containsAnyError
();
if
(
hasError
)
{
return
true
;
}
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
if
(
bs
.
containsAnyError
())
{
return
true
;
}
}
return
false
;
}
private
void
reCreateBoundarySurface
(
GeometryFactory
factory
,
ParserConfiguration
config
,
BoundarySurface
bs
)
{
if
(
bs
.
getGeometries
().
isEmpty
())
{
for
(
AbstractSpaceBoundaryProperty
bsp
:
gmlTunnelElement
.
getBoundaries
())
{
if
(
bsp
.
getObject
()
!=
null
&&
bsp
.
getObject
()
==
bs
.
getGmlObject
())
{
logger
.
warn
(
"Found empty boundary surface: {}, removing from TunnelConstructiveElement"
,
bs
.
getGmlId
());
gmlTunnelElement
.
getBoundaries
().
remove
(
bsp
);
break
;
}
}
return
;
}
bs
.
reCreateGeometries
(
factory
,
config
);
}
private
void
setSolidAccordingToLod
(
Geometry
geom
,
Solid
solid
)
{
switch
(
geom
.
getLod
())
{
case
LOD1:
gmlTunnelElement
.
setLod1Solid
(
new
SolidProperty
(
solid
));
break
;
case
LOD2:
gmlTunnelElement
.
setLod2Solid
(
new
SolidProperty
(
solid
));
break
;
case
LOD3:
gmlTunnelElement
.
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:
gmlTunnelElement
.
setLod0MultiSurface
(
new
MultiSurfaceProperty
(
ms
));
break
;
case
LOD2:
gmlTunnelElement
.
setLod2MultiSurface
(
new
MultiSurfaceProperty
(
ms
));
break
;
case
LOD3:
gmlTunnelElement
.
setLod3MultiSurface
(
new
MultiSurfaceProperty
(
ms
));
break
;
default
:
throw
new
IllegalStateException
(
CANNOT_ADD
+
geom
.
getLod
()
+
" multi surface to buildings"
);
}
}
@Override
public
org
.
citygml4j
.
core
.
model
.
tunnel
.
TunnelConstructiveElement
getGmlObject
()
{
return
gmlTunnelElement
;
}
@Override
public
void
unsetGmlGeometries
()
{
gmlTunnelElement
.
setLod0MultiSurface
(
null
);
gmlTunnelElement
.
setLod2MultiSurface
(
null
);
gmlTunnelElement
.
setLod3MultiSurface
(
null
);
gmlTunnelElement
.
setLod1Solid
(
null
);
gmlTunnelElement
.
setLod2Solid
(
null
);
gmlTunnelElement
.
setLod3Solid
(
null
);
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
bs
.
unsetGmlGeometries
();
}
}
@Override
public
FeatureType
getFeatureType
()
{
return
FeatureType
.
TUNNEL_CONSTRUCTION_ELEMENT
;
}
public
void
addBoundarySurface
(
BoundarySurface
bs
)
{
boundarySurfaceList
.
add
(
bs
);
bs
.
setParent
(
this
);
}
public
List
<
BoundarySurface
>
getBoundarySurfaces
()
{
return
boundarySurfaceList
;
}
@Override
public
void
prepareForChecking
()
{
super
.
prepareForChecking
();
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
bs
.
prepareForChecking
();
}
}
@Override
public
void
clearMetaInformation
()
{
super
.
clearMetaInformation
();
for
(
BoundarySurface
bs
:
boundarySurfaceList
)
{
bs
.
clearMetaInformation
();
}
}
@Override
public
void
collectInstances
(
CopyHandler
handler
)
{
super
.
collectInstances
(
handler
);
handler
.
addInstance
(
boundarySurfaceList
);
}
@Override
public
void
fillValues
(
Copyable
original
,
CopyHandler
handler
)
{
super
.
fillValues
(
original
,
handler
);
TunnelConstructiveElement
originalTce
=
(
TunnelConstructiveElement
)
original
;
for
(
BoundarySurface
originalTs
:
originalTce
.
boundarySurfaceList
)
{
boundarySurfaceList
.
add
(
handler
.
getCopyInstance
(
originalTs
));
}
}
}
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
+
39
-
0
View file @
33f39d03
...
...
@@ -28,6 +28,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.BuildingRoom;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.BridgeObject.BridgeType
;
import
de.hft.stuttgart.citydoctor2.datastructure.TunnelConstructiveElement
;
import
de.hft.stuttgart.citydoctor2.datastructure.TunnelFurniture
;
import
de.hft.stuttgart.citydoctor2.datastructure.TunnelPart
;
import
de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType
;
...
...
@@ -407,6 +408,14 @@ public class Citygml3FeatureMapper extends ObjectWalker {
cdTunnel
.
addTunnelFurniture
(
tf
);
}
for
(
TunnelConstructiveElementProperty
teProp
:
gmlTunnel
.
getTunnelConstructiveElements
())
{
var
gmlTc
=
teProp
.
getObject
();
if
(
gmlTc
==
null
)
{
continue
;
}
TunnelConstructiveElement
tc
=
mapTunnelConstructiveElement
(
gmlTc
);
cdTunnel
.
addTunnelConstructiveElement
(
tc
);
}
SurfaceMapper
surfaceMapper
=
new
SurfaceMapper
(
polygonMap
,
references
,
vertexMap
,
config
);
for
(
AbstractSpaceBoundaryProperty
surfaceProp
:
gmlTunnel
.
getBoundaries
())
{
...
...
@@ -416,6 +425,13 @@ public class Citygml3FeatureMapper extends ObjectWalker {
AbstractSpaceBoundary
surface
=
surfaceProp
.
getObject
();
surface
.
accept
(
surfaceMapper
);
}
for
(
BoundarySurface
bs
:
surfaceMapper
.
getSurfaces
())
{
updateEdgesAndVertices
(
bs
);
for
(
Opening
o
:
bs
.
getOpenings
())
{
updateEdgesAndVertices
(
o
);
}
}
cdTunnel
.
unsetGmlGeometries
();
resolveAndClearReferences
();
...
...
@@ -524,6 +540,29 @@ public class Citygml3FeatureMapper extends ObjectWalker {
return
tf
;
}
private
TunnelConstructiveElement
mapTunnelConstructiveElement
(
org
.
citygml4j
.
core
.
model
.
tunnel
.
TunnelConstructiveElement
gmlTe
)
{
TunnelConstructiveElement
te
=
new
TunnelConstructiveElement
(
gmlTe
);
mapAbstractOccupiedSpace
(
gmlTe
,
te
);
te
.
unsetGmlGeometries
();
SurfaceMapper
surfaceMapper
=
new
SurfaceMapper
(
polygonMap
,
references
,
vertexMap
,
config
);
for
(
AbstractSpaceBoundaryProperty
surfaceProp
:
gmlTe
.
getBoundaries
())
{
if
(!
surfaceProp
.
isSetObject
())
{
continue
;
}
AbstractSpaceBoundary
surface
=
surfaceProp
.
getObject
();
surface
.
accept
(
surfaceMapper
);
}
for
(
BoundarySurface
bs
:
surfaceMapper
.
getSurfaces
())
{
te
.
addBoundarySurface
(
bs
);
for
(
Geometry
geom
:
bs
.
getGeometries
())
{
for
(
Polygon
p
:
geom
.
getPolygons
())
{
p
.
setPartOfSurface
(
bs
);
}
}
}
return
te
;
}
private
void
updatePartOfSurface
(
BridgeObject
bo
,
SurfaceMapper
surfaceMapper
)
{
for
(
BoundarySurface
bs
:
surfaceMapper
.
getSurfaces
())
{
bo
.
addBoundarySurface
(
bs
);
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java
+
6
-
0
View file @
33f39d03
...
...
@@ -1038,6 +1038,12 @@ public class Renderer {
addPolygons
(
bs
,
polygons
);
}
}
for
(
TunnelConstructiveElement
tce
:
at
.
getTunnelConstructiveElements
())
{
addPolygons
(
tce
,
polygons
);
for
(
BoundarySurface
bs
:
tce
.
getBoundarySurfaces
())
{
addPolygons
(
bs
,
polygons
);
}
}
for
(
BoundarySurface
bs
:
at
.
getBoundarySurfaces
())
{
addPolygons
(
bs
,
polygons
);
for
(
Opening
o
:
bs
.
getOpenings
())
{
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Explore
Projects
Groups
Snippets