Skip to content

Commit ed66276

Browse files
committed
add mesh recipes
1 parent 70b1ce4 commit ed66276

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

REQUIRE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
StaticArrays
22
Tables
33
StructArrays
4+
AbstractPlotting # temporary dependency for convenience

src/abstractplotting.jl

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using AbstractPlotting
2+
import GeometryTypes
3+
4+
function to_triangle(triangles, tetra)
5+
push!(triangles, GeometryTypes.GLTriangle(tetra[1], tetra[2], tetra[3]))
6+
push!(triangles, GeometryTypes.GLTriangle(tetra[2], tetra[3], tetra[4]))
7+
push!(triangles, GeometryTypes.GLTriangle(tetra[2], tetra[3], tetra[4]))
8+
push!(triangles, GeometryTypes.GLTriangle(tetra[3], tetra[1], tetra[4]))
9+
end
10+
function to_lines(lines, tetra)
11+
push!(lines, tetra[1], tetra[2])
12+
push!(lines, tetra[2], tetra[3])
13+
push!(lines, tetra[3], tetra[4])
14+
push!(lines, tetra[2], tetra[4])
15+
push!(lines, tetra[1], tetra[4])
16+
end
17+
18+
19+
function AbstractPlotting.convert_arguments(T::Type{<: AbstractPlotting.Lines}, mesh::AbstractVector{<: GeometryBasics.Tetrahedron})
20+
points = GeometryTypes.Point3f0[]
21+
for elem in mesh
22+
to_lines(points, elem)
23+
end
24+
return (points,)
25+
end
26+
27+
function AbstractPlotting.convert_arguments(::Type{<: AbstractPlotting.Mesh}, mesh::GeometryBasics.Mesh{T, N, <: GeometryBasics.Tetrahedron}) where {T, N}
28+
points = GeometryTypes.Point3f0.(coordinates(mesh))
29+
triangles = GeometryTypes.GLTriangle[]
30+
for elem in faces(mesh)
31+
to_triangle(triangles, elem)
32+
end
33+
return (GeometryTypes.GLNormalMesh(points, triangles),)
34+
end
35+
36+
function AbstractPlotting.convert_arguments(T::Type{<: AbstractPlotting.Wireframe}, mesh::GeometryBasics.Mesh)
37+
m = convert_arguments(AbstractPlotting.Mesh, mesh)[1]
38+
return convert_arguments(T, m)
39+
end
40+
function AbstractPlotting.convert_arguments(p::AbstractPlotting.PointBased, mesh::GeometryBasics.Mesh)
41+
return convert_arguments(p, GeometryTypes.Point.(coordinates(mesh)))
42+
end
43+
44+
function AbstractPlotting.convert_arguments(::Type{<: AbstractPlotting.Mesh}, mesh::GeometryBasics.Mesh)
45+
(GeometryTypes.GLNormalMesh(
46+
GeometryTypes.Point3f0.(coordinates(mesh)),
47+
GeometryTypes.GLTriangle.(faces(mesh))
48+
),)
49+
end

0 commit comments

Comments
 (0)