#pragma once

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

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

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

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

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

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

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

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