224 lines
7.6 KiB
C++
224 lines
7.6 KiB
C++
|
////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// SFML - Simple and Fast Multimedia Library
|
||
|
// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org)
|
||
|
//
|
||
|
// This software is provided 'as-is', without any express or implied warranty.
|
||
|
// In no event will the authors be held liable for any damages arising from the use of this software.
|
||
|
//
|
||
|
// Permission is granted to anyone to use this software for any purpose,
|
||
|
// including commercial applications, and to alter it and redistribute it freely,
|
||
|
// subject to the following restrictions:
|
||
|
//
|
||
|
// 1. The origin of this software must not be misrepresented;
|
||
|
// you must not claim that you wrote the original software.
|
||
|
// If you use this software in a product, an acknowledgment
|
||
|
// in the product documentation would be appreciated but is not required.
|
||
|
//
|
||
|
// 2. Altered source versions must be plainly marked as such,
|
||
|
// and must not be misrepresented as being the original software.
|
||
|
//
|
||
|
// 3. This notice may not be removed or altered from any source distribution.
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef SFML_VERTEXARRAY_HPP
|
||
|
#define SFML_VERTEXARRAY_HPP
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
// Headers
|
||
|
////////////////////////////////////////////////////////////
|
||
|
#include <SFML/Graphics/Export.hpp>
|
||
|
#include <SFML/Graphics/Vertex.hpp>
|
||
|
#include <SFML/Graphics/PrimitiveType.hpp>
|
||
|
#include <SFML/Graphics/Rect.hpp>
|
||
|
#include <SFML/Graphics/Drawable.hpp>
|
||
|
#include <vector>
|
||
|
|
||
|
|
||
|
namespace sf
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Define a set of one or more 2D primitives
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
class SFML_GRAPHICS_API VertexArray : public Drawable
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Default constructor
|
||
|
///
|
||
|
/// Creates an empty vertex array.
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
VertexArray();
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Construct the vertex array with a type and an initial number of vertices
|
||
|
///
|
||
|
/// \param type Type of primitives
|
||
|
/// \param vertexCount Initial number of vertices in the array
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
explicit VertexArray(PrimitiveType type, std::size_t vertexCount = 0);
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Return the vertex count
|
||
|
///
|
||
|
/// \return Number of vertices in the array
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
std::size_t getVertexCount() const;
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Get a read-write access to a vertex by its index
|
||
|
///
|
||
|
/// This function doesn't check \a index, it must be in range
|
||
|
/// [0, getVertexCount() - 1]. The behavior is undefined
|
||
|
/// otherwise.
|
||
|
///
|
||
|
/// \param index Index of the vertex to get
|
||
|
///
|
||
|
/// \return Reference to the index-th vertex
|
||
|
///
|
||
|
/// \see getVertexCount
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
Vertex& operator [](std::size_t index);
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Get a read-only access to a vertex by its index
|
||
|
///
|
||
|
/// This function doesn't check \a index, it must be in range
|
||
|
/// [0, getVertexCount() - 1]. The behavior is undefined
|
||
|
/// otherwise.
|
||
|
///
|
||
|
/// \param index Index of the vertex to get
|
||
|
///
|
||
|
/// \return Const reference to the index-th vertex
|
||
|
///
|
||
|
/// \see getVertexCount
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
const Vertex& operator [](std::size_t index) const;
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Clear the vertex array
|
||
|
///
|
||
|
/// This function removes all the vertices from the array.
|
||
|
/// It doesn't deallocate the corresponding memory, so that
|
||
|
/// adding new vertices after clearing doesn't involve
|
||
|
/// reallocating all the memory.
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
void clear();
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Resize the vertex array
|
||
|
///
|
||
|
/// If \a vertexCount is greater than the current size, the previous
|
||
|
/// vertices are kept and new (default-constructed) vertices are
|
||
|
/// added.
|
||
|
/// If \a vertexCount is less than the current size, existing vertices
|
||
|
/// are removed from the array.
|
||
|
///
|
||
|
/// \param vertexCount New size of the array (number of vertices)
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
void resize(std::size_t vertexCount);
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Add a vertex to the array
|
||
|
///
|
||
|
/// \param vertex Vertex to add
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
void append(const Vertex& vertex);
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Set the type of primitives to draw
|
||
|
///
|
||
|
/// This function defines how the vertices must be interpreted
|
||
|
/// when it's time to draw them:
|
||
|
/// \li As points
|
||
|
/// \li As lines
|
||
|
/// \li As triangles
|
||
|
/// \li As quads
|
||
|
/// The default primitive type is sf::Points.
|
||
|
///
|
||
|
/// \param type Type of primitive
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
void setPrimitiveType(PrimitiveType type);
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Get the type of primitives drawn by the vertex array
|
||
|
///
|
||
|
/// \return Primitive type
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
PrimitiveType getPrimitiveType() const;
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Compute the bounding rectangle of the vertex array
|
||
|
///
|
||
|
/// This function returns the minimal axis-aligned rectangle
|
||
|
/// that contains all the vertices of the array.
|
||
|
///
|
||
|
/// \return Bounding rectangle of the vertex array
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
FloatRect getBounds() const;
|
||
|
|
||
|
private:
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \brief Draw the vertex array to a render target
|
||
|
///
|
||
|
/// \param target Render target to draw to
|
||
|
/// \param states Current render states
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|
||
|
virtual void draw(RenderTarget& target, RenderStates states) const;
|
||
|
|
||
|
private:
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
// Member data
|
||
|
////////////////////////////////////////////////////////////
|
||
|
std::vector<Vertex> m_vertices; ///< Vertices contained in the array
|
||
|
PrimitiveType m_primitiveType; ///< Type of primitives to draw
|
||
|
};
|
||
|
|
||
|
} // namespace sf
|
||
|
|
||
|
|
||
|
#endif // SFML_VERTEXARRAY_HPP
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// \class sf::VertexArray
|
||
|
/// \ingroup graphics
|
||
|
///
|
||
|
/// sf::VertexArray is a very simple wrapper around a dynamic
|
||
|
/// array of vertices and a primitives type.
|
||
|
///
|
||
|
/// It inherits sf::Drawable, but unlike other drawables it
|
||
|
/// is not transformable.
|
||
|
///
|
||
|
/// Example:
|
||
|
/// \code
|
||
|
/// sf::VertexArray lines(sf::LineStrip, 4);
|
||
|
/// lines[0].position = sf::Vector2f(10, 0);
|
||
|
/// lines[1].position = sf::Vector2f(20, 0);
|
||
|
/// lines[2].position = sf::Vector2f(30, 5);
|
||
|
/// lines[3].position = sf::Vector2f(40, 2);
|
||
|
///
|
||
|
/// window.draw(lines);
|
||
|
/// \endcode
|
||
|
///
|
||
|
/// \see sf::Vertex
|
||
|
///
|
||
|
////////////////////////////////////////////////////////////
|