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
8ef604ae
Commit
8ef604ae
authored
Jun 19, 2026
by
Matthias Betz
Browse files
Add TriangleMeta and IndexSetBuilder for filter-driven draw sets
parent
8bcfc6b2
Changes
3
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/gl/IndexSetBuilder.java
0 → 100644
View file @
8ef604ae
package
de.hft.stuttgart.citydoctor2.gui.gl
;
import
java.util.List
;
import
java.util.function.Predicate
;
/** Builds the element index set (triangle vertex indices) for the triangles passing the filter. */
public
final
class
IndexSetBuilder
{
private
IndexSetBuilder
()
{}
public
static
int
[]
build
(
List
<
TriangleMeta
>
metas
,
Predicate
<
TriangleMeta
>
include
)
{
IntList
out
=
new
IntList
();
for
(
TriangleMeta
m
:
metas
)
{
if
(
include
.
test
(
m
))
{
int
base
=
m
.
triangleIndex
()
*
3
;
out
.
add
(
base
);
out
.
add
(
base
+
1
);
out
.
add
(
base
+
2
);
}
}
return
out
.
toArray
();
}
}
CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/gl/TriangleMeta.java
0 → 100644
View file @
8ef604ae
package
de.hft.stuttgart.citydoctor2.gui.gl
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
/**
* Metadata for one triangle in the global buffer.
* @param triangleIndex index of this triangle (vertices are 3*triangleIndex .. +2)
* @param polygon source polygon (for picking/highlight resolution); may be null in tests
* @param lod LOD ordinal (Lod.ordinal()) of the owning geometry
* @param roof true if the triangle belongs to a ROOF boundary surface
*/
public
record
TriangleMeta
(
int
triangleIndex
,
Polygon
polygon
,
int
lod
,
boolean
roof
)
{}
CityDoctorParent/Extensions/CityDoctorGUI/src/test/java/de/hft/stuttgart/citydoctor2/gui/gl/IndexSetBuilderTest.java
0 → 100644
View file @
8ef604ae
package
de.hft.stuttgart.citydoctor2.gui.gl
;
import
static
org
.
junit
.
Assert
.
assertArrayEquals
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.function.Predicate
;
import
org.junit.Test
;
public
class
IndexSetBuilderTest
{
@Test
public
void
includesOnlyTrianglesMatchingThePredicate
()
{
List
<
TriangleMeta
>
metas
=
Arrays
.
asList
(
new
TriangleMeta
(
0
,
null
,
1
,
false
),
new
TriangleMeta
(
1
,
null
,
2
,
false
),
new
TriangleMeta
(
2
,
null
,
1
,
false
));
Predicate
<
TriangleMeta
>
onlyGroup1
=
m
->
m
.
lod
()
==
1
;
int
[]
indices
=
IndexSetBuilder
.
build
(
metas
,
onlyGroup1
);
assertArrayEquals
(
new
int
[]{
0
,
1
,
2
,
6
,
7
,
8
},
indices
);
}
@Test
public
void
emptyWhenNothingMatches
()
{
List
<
TriangleMeta
>
metas
=
Arrays
.
asList
(
new
TriangleMeta
(
0
,
null
,
1
,
false
));
int
[]
indices
=
IndexSetBuilder
.
build
(
metas
,
m
->
false
);
assertArrayEquals
(
new
int
[]{},
indices
);
}
}
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