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
853e25ab
Commit
853e25ab
authored
Mar 04, 2026
by
Luna Riegel
Browse files
Feat: Add support for LinearRing proxies
parent
5d77ba78
Changes
9
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/database/ProxyLoader.java
0 → 100644
View file @
853e25ab
package
de.hft.stuttgart.citydoctor2.database
;
import
de.hft.stuttgart.citydoctor2.datastructure.GmlId
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
org.apache.commons.lang3.NotImplementedException
;
public
class
ProxyLoader
{
private
final
CityObjectCache
cache
;
ProxyLoader
(
CityObjectCache
cache
)
{
this
.
cache
=
cache
;
}
public
LinearRing
load
(
GmlId
id
){
// return cache.get(id);
throw
new
NotImplementedException
();
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/AbstractLinearRing.java
0 → 100644
View file @
853e25ab
package
de.hft.stuttgart.citydoctor2.datastructure
;
import
de.hft.stuttgart.citydoctor2.math.Ray
;
import
de.hft.stuttgart.citydoctor2.math.UnitVector3d
;
import
de.hft.stuttgart.citydoctor2.math.Vector3d
;
import
java.util.List
;
public
abstract
class
AbstractLinearRing
extends
GmlElement
{
//TODO: Proxy this
public
enum
LinearRingType
{
EXTERIOR
,
INTERIOR
}
/**
* Checks whether a point is inside this ring. A point on the edge does count as
* inside.
*
* @param v the point.
* @return true if the point is inside or on an edge, false if it is outside.
*/
public
abstract
boolean
isPointInside
(
Vector3d
v
);
/**
* Calculates the normal vector of the ring. Method by Newell. If the Newell
* method would return a (0, 0, 0) vector a cross product is formed from the
* first 3 vertices. If there are no 3 vertices available (1, 0, 0) is returned.
*
* @return the normal as a normalized vector
*/
public
abstract
UnitVector3d
calculateNormalNormalized
();
/**
* Calculates the normal vector of the ring. Method by Newell. If the Newell
* method would return a (0, 0, 0) vector a cross product is formed from the
* first 3 vertices. If there are no 3 vertices available (1, 0, 0) is returned.
*
* @return the normal vector
*/
public
abstract
Vector3d
calculateNormal
();
public
abstract
double
getArea
();
public
abstract
void
setParent
(
Polygon
polygon
);
public
abstract
Polygon
getParent
();
public
abstract
LinearRingType
getType
();
public
abstract
List
<
Vertex
>
getVertices
();
public
abstract
void
addVertex
(
Vertex
v
);
public
abstract
void
addVertex
(
int
i
,
Vertex
v
);
public
abstract
void
setVertex
(
int
i
,
Vertex
v
);
public
abstract
boolean
isRingConnectedViaPoint
(
LinearRing
other
);
public
abstract
List
<
Ray
>
getEdgeRays
();
public
abstract
boolean
hasPointAsCorner
(
Vertex
v
);
public
abstract
void
setType
(
LinearRing
.
LinearRingType
type
);
public
abstract
void
addAllVertices
(
List
<
Vertex
>
extRing
);
public
abstract
void
prepareLowMemoryUsageMode
();
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinearRing.java
View file @
853e25ab
...
...
@@ -30,7 +30,7 @@ import java.util.List;
*
* @author Matthias Betz
*/
public
class
LinearRing
extends
GmlElement
{
public
class
LinearRing
extends
AbstractLinearRing
{
@Serial
private
static
final
long
serialVersionUID
=
-
2488180830514940722L
;
...
...
@@ -40,9 +40,6 @@ public class LinearRing extends GmlElement {
private
final
List
<
Vertex
>
vertices
=
new
ArrayList
<>();
public
enum
LinearRingType
{
EXTERIOR
,
INTERIOR
}
public
LinearRing
(
LinearRingType
type
)
{
this
.
type
=
type
;
...
...
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/LinearRingProxy.java
0 → 100644
View file @
853e25ab
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.check.CheckResult
;
import
de.hft.stuttgart.citydoctor2.check.Checkable
;
import
de.hft.stuttgart.citydoctor2.check.CheckableVisitor
;
import
de.hft.stuttgart.citydoctor2.database.ProxyLoader
;
import
de.hft.stuttgart.citydoctor2.math.Ray
;
import
de.hft.stuttgart.citydoctor2.math.UnitVector3d
;
import
de.hft.stuttgart.citydoctor2.math.Vector3d
;
import
java.util.List
;
import
java.util.Map
;
public
class
LinearRingProxy
extends
AbstractLinearRing
{
private
final
ProxyLoader
loader
;
private
GmlId
referenceId
;
LinearRingProxy
(
LinearRing
ring
,
ProxyLoader
loader
){
referenceId
=
ring
.
getGmlId
();
this
.
loader
=
loader
;
}
@Override
public
void
setGmlId
(
GmlId
id
)
{
loader
.
load
(
referenceId
).
setGmlId
(
id
);
this
.
referenceId
=
id
;
}
@Override
public
void
setValidated
(
boolean
validated
)
{
super
.
setValidated
(
validated
);
loader
.
load
(
referenceId
).
setValidated
(
validated
);
}
@Override
public
void
accept
(
CheckableVisitor
c
)
{
loader
.
load
(
referenceId
).
accept
(
c
);
}
@Override
public
void
prepareForChecking
()
{
loader
.
load
(
referenceId
).
prepareForChecking
();
}
@Override
public
void
clearMetaInformation
()
{
loader
.
load
(
referenceId
).
clearMetaInformation
();
}
@Override
public
boolean
containsError
(
CheckId
checkIdentifier
)
{
return
loader
.
load
(
referenceId
).
containsError
(
checkIdentifier
);
}
@Override
public
boolean
hasError
(
CheckId
checkIdentifier
)
{
return
loader
.
load
(
referenceId
).
hasError
(
checkIdentifier
);
}
@Override
public
CheckResult
getCheckResult
(
CheckId
id
)
{
return
loader
.
load
(
referenceId
).
getCheckResult
(
id
);
}
@Override
public
CheckResult
getCheckResult
(
Check
c
)
{
return
loader
.
load
(
referenceId
).
getCheckResult
(
c
);
}
@Override
public
Map
<
CheckId
,
CheckResult
>
getAllCheckResults
()
{
return
loader
.
load
(
referenceId
).
getAllCheckResults
();
}
@Override
public
boolean
hasDependencyNotMetError
(
CheckId
id
)
{
return
loader
.
load
(
referenceId
).
hasDependencyNotMetError
(
id
);
}
@Override
public
boolean
hasAnyErrorWithoutDependencies
()
{
return
loader
.
load
(
referenceId
).
hasAnyErrorWithoutDependencies
();
}
@Override
public
boolean
hasCheckResults
()
{
return
loader
.
load
(
referenceId
).
hasCheckResults
();
}
@Override
public
void
addCheckResult
(
CheckResult
cr
)
{
loader
.
load
(
referenceId
).
addCheckResult
(
cr
);
}
@Override
public
void
clearCheckResults
()
{
loader
.
load
(
referenceId
).
clearCheckResults
();
}
@Override
public
boolean
hasAnyError
()
{
return
loader
.
load
(
referenceId
).
hasAnyError
();
}
@Override
public
void
collectContainedErrors
(
List
<
CheckError
>
errors
)
{
loader
.
load
(
referenceId
).
collectContainedErrors
(
errors
);
}
@Override
public
void
collectErrors
(
List
<
CheckError
>
errors
)
{
loader
.
load
(
referenceId
).
collectErrors
(
errors
);
}
@Override
public
Class
<?
extends
Checkable
>
getCheckClass
()
{
return
loader
.
load
(
referenceId
).
getCheckClass
();
}
@Override
public
boolean
isPointInside
(
Vector3d
v
)
{
return
loader
.
load
(
referenceId
).
isPointInside
(
v
);
}
@Override
public
UnitVector3d
calculateNormalNormalized
()
{
return
loader
.
load
(
referenceId
).
calculateNormalNormalized
();
}
@Override
public
Vector3d
calculateNormal
()
{
return
loader
.
load
(
referenceId
).
calculateNormal
();
}
@Override
public
double
getArea
()
{
return
loader
.
load
(
referenceId
).
getArea
();
}
@Override
public
void
setParent
(
Polygon
polygon
)
{
loader
.
load
(
referenceId
).
setParent
(
polygon
);
}
@Override
public
Polygon
getParent
()
{
return
loader
.
load
(
referenceId
).
getParent
();
}
@Override
public
LinearRingType
getType
()
{
return
loader
.
load
(
referenceId
).
getType
();
}
@Override
public
List
<
Vertex
>
getVertices
()
{
return
loader
.
load
(
referenceId
).
getVertices
();
}
@Override
public
void
addVertex
(
Vertex
v
)
{
loader
.
load
(
referenceId
).
addVertex
(
v
);
}
@Override
public
void
addVertex
(
int
i
,
Vertex
v
)
{
loader
.
load
(
referenceId
).
addVertex
(
i
,
v
);
}
@Override
public
void
setVertex
(
int
i
,
Vertex
v
)
{
loader
.
load
(
referenceId
).
setVertex
(
i
,
v
);
}
@Override
public
boolean
isRingConnectedViaPoint
(
LinearRing
other
)
{
return
loader
.
load
(
referenceId
).
isRingConnectedViaPoint
(
other
);
}
@Override
public
List
<
Ray
>
getEdgeRays
()
{
return
loader
.
load
(
referenceId
).
getEdgeRays
();
}
@Override
public
boolean
hasPointAsCorner
(
Vertex
v
)
{
return
loader
.
load
(
referenceId
).
hasPointAsCorner
(
v
);
}
@Override
public
void
setType
(
LinearRingType
type
)
{
loader
.
load
(
referenceId
).
setType
(
type
);
}
@Override
public
void
addAllVertices
(
List
<
Vertex
>
extRing
)
{
loader
.
load
(
referenceId
).
addAllVertices
(
extRing
);
}
@Override
public
void
prepareLowMemoryUsageMode
()
{
loader
.
load
(
referenceId
).
prepareLowMemoryUsageMode
();
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/citygml3/Citygml3GeometryMapper.java
View file @
853e25ab
...
...
@@ -20,7 +20,7 @@ package de.hft.stuttgart.citydoctor2.mapper.citygml3;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
de.hft.stuttgart.citydoctor2.datastructure.*
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.
Abstract
LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.parser.ParserConfiguration
;
import
de.hft.stuttgart.citydoctor2.utils.Localization
;
import
org.apache.logging.log4j.LogManager
;
...
...
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/checks/util/SelfIntersectionUtil.java
View file @
853e25ab
...
...
@@ -44,7 +44,7 @@ import de.hft.stuttgart.citydoctor2.check.GeometrySelfIntersection;
import
de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.Geometry
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.
Abstract
LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.Vertex
;
import
de.hft.stuttgart.citydoctor2.edge.EdgePolygon
;
...
...
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/reporting/XmlStreamErrorHandler.java
View file @
853e25ab
...
...
@@ -42,7 +42,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.BoundarySurface;
import
de.hft.stuttgart.citydoctor2.datastructure.Edge
;
import
de.hft.stuttgart.citydoctor2.datastructure.Geometry
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.
Abstract
LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.Vertex
;
import
de.hft.stuttgart.citydoctor2.math.Vector3d
;
...
...
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/HighlightController.java
View file @
853e25ab
...
...
@@ -13,7 +13,7 @@ import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.Vertex
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.
Abstract
LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.math.Triangle3d
;
import
de.hft.stuttgart.citydoctor2.math.Vector3d
;
import
de.hft.stuttgart.citydoctor2.utils.CollisionRecord
;
...
...
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/tree/ErrorItemVisitor.java
View file @
853e25ab
...
...
@@ -44,7 +44,7 @@ import de.hft.stuttgart.citydoctor2.check.error.UnknownCheckError;
import
de.hft.stuttgart.citydoctor2.datastructure.ConcretePolygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.Edge
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.
Abstract
LinearRing.LinearRingType
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.Vertex
;
import
de.hft.stuttgart.citydoctor2.gui.CheckStatus
;
...
...
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