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
3fe565d8
Commit
3fe565d8
authored
4 months ago
by
Riegel
Browse files
Options
Download
Email Patches
Plain Diff
Fix Bugs in parsing and rendering of CompositeSurfaces
parent
c0a82926
Pipeline
#10294
passed with stage
in 1 minute and 23 seconds
Changes
6
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CompositePolygon.java
+9
-85
...stuttgart/citydoctor2/datastructure/CompositePolygon.java
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
+3
-7
...rt/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization.properties
+1
-1
...odel/src/main/resources/CityDoctorLocalization.properties
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization_de.properties
+1
-1
...l/src/main/resources/CityDoctorLocalization_de.properties
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java
+4
-0
.../main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java
+4
-11
...e/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java
with
22 additions
and
105 deletions
+22
-105
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CompositePolygon.java
+
9
-
85
View file @
3fe565d8
...
...
@@ -14,9 +14,9 @@ import java.io.Serial;
import
java.util.*
;
/**
*
*
Dataholding class for parsing and resolving of CompositeSurfaces.
*/
public
class
CompositePolygon
extends
ConcretePolygon
{
public
final
class
CompositePolygon
extends
ConcretePolygon
{
@Serial
private
static
final
long
serialVersionUID
=
-
1867197873443341287L
;
...
...
@@ -25,20 +25,14 @@ public class CompositePolygon extends ConcretePolygon{
private
BoundarySurface
partOfSurface
;
private
Installation
partOfInstallation
;
private
List
<
ConcretePolygon
>
compositeMembers
=
new
ArrayList
<>();
private
LinearRing
exterior
=
null
;
@Override
public
Vector3d
calculateNormalNormalized
()
{
return
this
.
calculateNormal
().
normalize
()
;
return
null
;
}
@Override
public
void
accept
(
Check
c
){
for
(
Polygon
p
:
compositeMembers
){
p
.
accept
(
c
);
}
setValidated
(
true
);
}
public
void
accept
(
Check
c
){}
@Override
public
Class
<?
extends
Checkable
>
getCheckClass
()
{
...
...
@@ -47,33 +41,17 @@ public class CompositePolygon extends ConcretePolygon{
@Override
public
boolean
containsAnyError
(){
if
(
super
.
containsAnyError
()){
return
true
;
}
for
(
Polygon
p
:
compositeMembers
){
if
(
p
.
containsAnyError
()){
return
true
;
}
}
return
false
;
}
@Override
public
void
collectContainedErrors
(
List
<
CheckError
>
errors
)
{
super
.
collectContainedErrors
(
errors
);
for
(
Polygon
p
:
compositeMembers
){
p
.
collectContainedErrors
(
errors
);
}
}
public
void
collectContainedErrors
(
List
<
CheckError
>
errors
)
{}
@Override
public
void
clearAllContainedCheckResults
()
{
super
.
clearCheckResults
();
for
(
Polygon
p
:
compositeMembers
){
p
.
clearAllContainedCheckResults
();
}
}
public
void
addCompositeMember
(
ConcretePolygon
p
){
compositeMembers
.
add
(
p
);
}
...
...
@@ -84,15 +62,6 @@ public class CompositePolygon extends ConcretePolygon{
@Override
public
boolean
containsError
(
CheckId
checkIdentifier
)
{
boolean
hasError
=
super
.
containsError
(
checkIdentifier
);
if
(
hasError
)
{
return
true
;
}
for
(
Polygon
p
:
compositeMembers
){
if
(
p
.
containsError
(
checkIdentifier
))
{
return
true
;
}
}
return
false
;
}
...
...
@@ -100,59 +69,27 @@ public class CompositePolygon extends ConcretePolygon{
@Override
public
Vector3d
calculateNormal
()
{
return
this
.
getExteriorRing
(
).
calculateNormal
();
return
compositeMembers
.
get
(
0
).
calculateNormal
();
}
@Override
public
TesselatedPolygon
tesselate
()
{
List
<
Triangle3d
>
tessPolys
=
new
ArrayList
<>();
for
(
Polygon
p
:
compositeMembers
){
TesselatedPolygon
t
=
p
.
tesselate
();
tessPolys
.
addAll
(
t
.
getTriangles
());
}
return
new
TesselatedPolygon
(
tessPolys
,
this
);
}
@Override
public
LinearRing
getExteriorRing
()
{
if
(
exterior
!=
null
){
return
exterior
;
}
Map
<
Vertex
,
Integer
>
outerVertices
=
new
HashMap
<>();
for
(
Polygon
p
:
compositeMembers
){
for
(
Vertex
v:
p
.
getExteriorRing
().
getVertices
()){
outerVertices
.
merge
(
v
,
1
,
Integer:
:
sum
);
}
}
List
<
Vertex
>
vertices
=
new
ArrayList
<>();
for
(
Vertex
v
:
outerVertices
.
keySet
()){
if
(
outerVertices
.
get
(
v
)
<=
3
){
vertices
.
add
(
v
);
}
}
LinearRing
ext
=
new
LinearRing
(
LinearRing
.
LinearRingType
.
EXTERIOR
);
ext
.
setParent
(
this
);
ext
.
addAllVertices
(
vertices
);
exterior
=
ext
;
return
ext
;
return
new
LinearRing
(
LinearRing
.
LinearRingType
.
EXTERIOR
);
}
@Override
public
List
<
LinearRing
>
getInnerRings
()
{
List
<
LinearRing
>
innerRings
=
new
ArrayList
<>();
for
(
Polygon
p
:
compositeMembers
){
innerRings
.
addAll
(
p
.
getInnerRings
());
}
return
innerRings
;
return
Collections
.
emptyList
();
}
@Override
public
boolean
isPointInsideExteriorRing
(
Vector3d
v
)
{
for
(
Polygon
p
:
compositeMembers
)
{
if
(
p
.
isPointInsideExteriorRing
(
v
))
{
return
true
;
}
}
return
false
;
}
...
...
@@ -173,11 +110,6 @@ public class CompositePolygon extends ConcretePolygon{
@Override
public
boolean
isPolygonConnectedViaPoint
(
Polygon
other
)
{
for
(
Polygon
p
:
compositeMembers
)
{
if
(
p
.
isPolygonConnectedViaPoint
(
other
))
{
return
true
;
}
}
return
false
;
}
...
...
@@ -198,9 +130,6 @@ public class CompositePolygon extends ConcretePolygon{
@Override
public
void
removeInnerRing
(
LinearRing
ring
)
{
for
(
Polygon
p
:
compositeMembers
)
{
p
.
removeInnerRing
(
ring
);
}
}
@Override
...
...
@@ -215,11 +144,6 @@ public class CompositePolygon extends ConcretePolygon{
@Override
public
boolean
hasPointAsCorner
(
Vertex
v
)
{
for
(
Polygon
p
:
compositeMembers
){
if
(
p
.
hasPointAsCorner
(
v
))
{
return
true
;
}
}
return
false
;
}
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3FeatureMapper.java
+
3
-
7
View file @
3fe565d8
...
...
@@ -239,9 +239,6 @@ public class Citygml3FeatureMapper extends ObjectWalker {
parseAndAddMultiSurface
(
as
.
getLod0MultiSurface
(),
Lod
.
LOD0
,
co
);
parseAndAddMultiSurface
(
as
.
getLod2MultiSurface
(),
Lod
.
LOD2
,
co
);
parseAndAddMultiSurface
(
as
.
getLod3MultiSurface
(),
Lod
.
LOD3
,
co
);
parseAndAddCompositeSurface
(
as
.
getLod0MultiSurface
(),
Lod
.
LOD0
,
co
);
parseAndAddCompositeSurface
(
as
.
getLod2MultiSurface
(),
Lod
.
LOD2
,
co
);
parseAndAddCompositeSurface
(
as
.
getLod3MultiSurface
(),
Lod
.
LOD3
,
co
);
parseAndAddSolid
(
as
.
getLod1Solid
(),
Lod
.
LOD1
,
co
);
parseAndAddSolid
(
as
.
getLod2Solid
(),
Lod
.
LOD2
,
co
);
parseAndAddSolid
(
as
.
getLod3Solid
(),
Lod
.
LOD3
,
co
);
...
...
@@ -718,9 +715,6 @@ public class Citygml3FeatureMapper extends ObjectWalker {
parseAndAddMultiSurface
(
as
.
getLod0MultiSurface
(),
Lod
.
LOD0
,
co
);
parseAndAddMultiSurface
(
as
.
getLod2MultiSurface
(),
Lod
.
LOD2
,
co
);
parseAndAddMultiSurface
(
as
.
getLod3MultiSurface
(),
Lod
.
LOD3
,
co
);
parseAndAddCompositeSurface
(
as
.
getLod0MultiSurface
(),
Lod
.
LOD0
,
co
);
parseAndAddCompositeSurface
(
as
.
getLod2MultiSurface
(),
Lod
.
LOD2
,
co
);
parseAndAddCompositeSurface
(
as
.
getLod3MultiSurface
(),
Lod
.
LOD3
,
co
);
parseAndAddSolid
(
as
.
getLod1Solid
(),
Lod
.
LOD1
,
co
);
parseAndAddSolid
(
as
.
getLod2Solid
(),
Lod
.
LOD2
,
co
);
parseAndAddSolid
(
as
.
getLod3Solid
(),
Lod
.
LOD3
,
co
);
...
...
@@ -826,7 +820,6 @@ public class Citygml3FeatureMapper extends ObjectWalker {
}
continue
;
}
// TODO: Insert handling of compPoly dummy objects
if
(
concPoly
instanceof
CompositePolygon
comp
)
{
resolveCompositePolygon
(
comp
).
forEach
(
geom:
:
addPolygon
);
}
else
{
...
...
@@ -1201,6 +1194,9 @@ public class Citygml3FeatureMapper extends ObjectWalker {
for
(
Geometry
geom
:
co
.
getGeometries
())
{
KDTree
tree
=
new
KDTree
();
for
(
Polygon
poly
:
geom
.
getPolygons
())
{
if
(
poly
instanceof
CompositePolygon
){
continue
;
}
LinearRing
lr
=
poly
.
getExteriorRing
();
updateRing
(
tree
,
lr
);
for
(
LinearRing
innerRing
:
poly
.
getInnerRings
())
{
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization.properties
+
1
-
1
View file @
3fe565d8
...
...
@@ -31,7 +31,7 @@ MainToolBar.writeReports=Write Reports
MainToolBar.executeChecks
=
Execute Checks
MainToolBar.showWorld
=
Show entire city model
MainToolBar.resetCamera
=
Reset view
MainToolBar.hideRoof
=
Show/Hide roof
s in object view
MainToolBar.hideRoof
=
Show/Hide roof
BoundarySurfaces
MainWindow.missingConfig
=
Could not find configuration file.
MainWindow.loadGivenFile
=
Loading given file, please wait
MainWindow.finishedLoading
=
Finished loading
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/CityDoctorModel/src/main/resources/CityDoctorLocalization_de.properties
+
1
-
1
View file @
3fe565d8
...
...
@@ -29,7 +29,7 @@ MainToolBar.writeReports=Schreibe Reports
MainToolBar.executeChecks
=
F
\u
00fchre Pr
\u
00fcfungen aus
MainToolBar.showWorld
=
Gesamtes Stadtmodell anzeigen
MainToolBar.resetCamera
=
Ansicht zur
\u
00fccksetzen
MainToolBar.hideRoof
=
Zeige/Verstecke D
\u
00e4cher in Objektansicht
MainToolBar.hideRoof
=
Zeige/Verstecke D
ach BoundarySurfaces
MainWindow.missingConfig
=
Konnte Konfigurationsdatei nicht finden.
MainWindow.loadGivenFile
=
Lade vorhandene Datei, bitte warten
MainWindow.finishedLoading
=
Fertig geladen
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/Renderer.java
+
4
-
0
View file @
3fe565d8
...
...
@@ -669,6 +669,9 @@ public class Renderer {
private
void
addGeometryDataToView
(
Geometry
geom
)
{
for
(
Polygon
p
:
geom
.
getPolygons
())
{
if
(
p
instanceof
CompositePolygon
){
continue
;
}
addPolygonToView
(
p
);
}
for
(
Edge
e
:
geom
.
getEdges
())
{
...
...
@@ -979,6 +982,7 @@ public class Renderer {
for
(
Polygon
p
:
geom
.
getPolygons
())
{
if
(
p
.
getOriginal
().
getPartOfSurface
()
!=
null
&&
!
roofFilter
.
allowedToUse
(
p
.
getOriginal
().
getPartOfSurface
(),
p
.
getParent
()))
continue
;
if
(
p
instanceof
CompositePolygon
)
continue
;
polygons
.
add
(
p
.
getOriginal
());
}
}
...
...
This diff is collapsed.
Click to expand it.
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/TriangulatedGeometry.java
+
4
-
11
View file @
3fe565d8
...
...
@@ -6,17 +6,7 @@ import java.util.HashMap;
import
java.util.List
;
import
java.util.Map
;
import
de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface
;
import
de.hft.stuttgart.citydoctor2.datastructure.BoundarySurfaceType
;
import
de.hft.stuttgart.citydoctor2.datastructure.Building
;
import
de.hft.stuttgart.citydoctor2.datastructure.Installation
;
import
de.hft.stuttgart.citydoctor2.datastructure.BuildingPart
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityDoctorModel
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.Geometry
;
import
de.hft.stuttgart.citydoctor2.datastructure.Opening
;
import
de.hft.stuttgart.citydoctor2.datastructure.OpeningType
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.*
;
import
de.hft.stuttgart.citydoctor2.gui.filter.ViewFilter
;
import
de.hft.stuttgart.citydoctor2.math.Triangle3d
;
import
de.hft.stuttgart.citydoctor2.math.UnitVector3d
;
...
...
@@ -62,6 +52,9 @@ public class TriangulatedGeometry {
private
static
void
addPolygonDataToTriGeom
(
Collection
<?
extends
Polygon
>
polygons
,
Color
basePolygonColor
,
TriangulatedGeometry
triGeom
)
{
for
(
Polygon
p
:
polygons
)
{
if
(
p
instanceof
CompositePolygon
){
continue
;
}
TesselatedPolygon
tp
=
p
.
tesselate
();
TriangleMesh
triMesh
=
new
TriangleMesh
(
VertexFormat
.
POINT_TEXCOORD
);
Map
<
Vector3d
,
Integer
>
indexMap
=
new
HashMap
<>();
...
...
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