clippingPresets.h 4.55 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
* version 0.1                                                                  *
* Copyright (C) 2009-2011, IGG Team, LSIIT, University of Strasbourg           *
*                                                                              *
* This library is free software; you can redistribute it and/or modify it      *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your     *
* option) any later version.                                                   *
*                                                                              *
* This library is distributed in the hope that it will be useful, but WITHOUT  *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License  *
* for more details.                                                            *
*                                                                              *
* You should have received a copy of the GNU Lesser General Public License     *
* along with this library; if not, write to the Free Software Foundation,      *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.           *
*                                                                              *
* Web site: http://cgogn.u-strasbg.fr/                                         *
* Contact information: cgogn@unistra.fr                                        *
*                                                                              *
*******************************************************************************/

#ifndef _CGoGN_CLIPPINGPRESETS_H_
#define _CGoGN_CLIPPINGPRESETS_H_

#include "Utils/clippingShader.h"
#include "Geometry/vector_gen.h"
#include <vector>

namespace CGoGN
{

namespace Utils
{

class ClippingPreset
{


	/***********************************************
	 *
	 * 		Constructors
	 *
	 ***********************************************/

public :

	/// public static constructor
	static ClippingPreset* CreateEmptyPreset();

	/**
	 * public static constructor
	 * @param center center between planes
	 * @param distance distance between planes
	 * @param axis axis on which planes are aligned (0 for x, 1 for y, 2 for z)
	 * @param facing true means having facing planes
	 */
	static ClippingPreset* CreateDualPlanesPreset(Geom::Vec3f center, float distance, int axis, bool facing);

	/**
	 * public static constructor
	 * @param center center between planes
	 * @param distance distance between planes
	 * @param facing true means having facing planes
	 */
	static ClippingPreset* CreateCubePreset(Geom::Vec3f center, float distance, bool facing);

private :

	/// private constructor (used by public static constructors)
	ClippingPreset();


	/***********************************************
	 *
	 * 		Preset settings
	 *
	 ***********************************************/

public :

	/**
	 * adds a clip plane to the preset
	 * @param normal clip plane normal
	 * @param origin clip plane origin
	 */
	void addClipPlane(Geom::Vec3f normal, Geom::Vec3f origin);

	/**
	 * adds a clip sphere to the preset
	 * @param center clip sphere center
	 * @param radius clip sphere radius
	 */
	void addClipSphere(Geom::Vec3f center, float radius);

	/**
	 * sets the clipping mode
	 * @param clipMode clipping mode
	 */
	void setClippingMode(ClippingShader::clippingMode clipMode);

private :

	/// clip planes structure
	struct clipPlane
	{
		Geom::Vec3f normal, origin;
	};

	/// clip planes array
	std::vector<clipPlane> m_clipPlanes;

	/// clip spheres structure
	struct clipSphere
	{
		Geom::Vec3f center;
		float radius;
	};

	/// clip spheres array
	std::vector<clipSphere> m_clipSpheres;

	/// clipping mode
	ClippingShader::clippingMode m_clipMode;


	/***********************************************
	 *
	 * 		Preset application
	 *
	 ***********************************************/

public :

	/**
	 * applies the preset on a clipping shader
	 * @param clipShader pointer to the clipping shader object
	 * @param planesIds returns the new added planes ids
	 * @param spheresIds returns the new added spheres ids
	 * @warning planesIds and spheresIds must not be NULL, otherwise the function does nothing
	 */
	void apply(ClippingShader* clipShader, std::vector<unsigned int> *planesIds, std::vector<unsigned int> *spheresIds);


};

} // namespace Utils

} // namespace CGoGN

#endif