clippingPresets.h 5.3 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
/*******************************************************************************
* 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>
31
#include <cmath>
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

namespace CGoGN
{

namespace Utils
{

class ClippingPreset
{


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

public :

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

	/**
	 * public static constructor
	 * @param center center between planes
57
	 * @param size distance between planes
58 59 60
	 * @param axis axis on which planes are aligned (0 for x, 1 for y, 2 for z)
	 * @param facing true means having facing planes
	 */
61
	static ClippingPreset* CreateDualPlanesPreset(Geom::Vec3f center, float size, int axis, bool facing);
62 63 64 65

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

71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
	/**
	 * public static constructor
	 * @param center center of the tube
	 * @param size tube diameter
	 * @param axis axis of the tube (0 for x, 1 for y, 2 for z)
	 * @param precision planes count used to build tube
	 * @param facing true means an outer tube, false an inner tube
	 */
	static ClippingPreset* CreateTubePreset(Geom::Vec3f center, float size, int axis, int precision, bool facing);

	/**
	 * public static constructor
	 * @param center center of molecule
	 * @param size molecule size
	 * @param atomsRadiuses radiuses of atoms
	 * @param orClipping set it to true for OR clipping mode
	 */
	static ClippingPreset* CreateMoleculePreset(Geom::Vec3f center, float size, float atomsRadiuses, bool orClipping);

90
protected :
91

92
	/// protected constructor (used by public static constructors or child class)
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 154 155 156 157 158 159 160 161
	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
162
	 * @warning clipShader, planesIds and spheresIds must not be NULL, otherwise the function does nothing
163
	 */
164
	virtual void apply(ClippingShader* clipShader, std::vector<unsigned int> *planesIds, std::vector<unsigned int> *spheresIds);
165 166 167 168 169 170 171 172 173


};

} // namespace Utils

} // namespace CGoGN

#endif