package org.openrndr.extra.objloader import kotlin.jvm.JvmRecord /** * Mesh data interface */ interface IMeshData { val vertexData: IVertexData val polygons: List fun triangulate(): IMeshData fun toPolygons(): List } /** * Immutable mesh data implementation */ @JvmRecord data class MeshData( override val vertexData: VertexData, override val polygons: List, ) : IMeshData { override fun triangulate(): MeshData { return copy(polygons = polygons.flatMap { polygon -> polygon.triangulate(vertexData) }) } override fun toPolygons(): List { return polygons.map { ip -> ip.toPolygon(vertexData) } } } /** * Mutable mesh data implementation */ data class MutableMeshData( override val vertexData: MutableVertexData, override val polygons: MutableList ) : IMeshData { override fun triangulate(): MutableMeshData { return copy(polygons = polygons.flatMap { it.triangulate(vertexData) }.toMutableList()) } override fun toPolygons(): List { return polygons.map { it.toPolygon(vertexData) } } }