#pragma once

#include "TriMesh.h"
#include "LineMesh.h"

class MeshPrimitives
{
public:
    static std::unique_ptr<TriMesh> buildCircleAsTriMesh(std::size_t numSegments = 24);

    static std::unique_ptr<LineMesh> buildCircleAsLineMesh(std::size_t numSegments = 24);

    static std::unique_ptr<TriMesh> buildRectangleAsTriMesh();

    static std::unique_ptr<LineMesh> buildRectangleAsLineMesh();

    static std::unique_ptr<TriMesh> buildExplodedGridAsTriMesh(std::size_t numX, std::size_t numY);

    static std::unique_ptr<LineMesh> buildExplodedGridAsLineMesh(std::size_t numX, std::size_t numY);

    static std::unique_ptr<TriMesh> buildRoundedRectangleAsTriMesh(double radius, double aspect_ratio = 1.0, std::size_t num_segments = 4);
};
