-
Notifications
You must be signed in to change notification settings - Fork 299
/
SphereLoader.h
95 lines (83 loc) · 4.14 KB
/
SphereLoader.h
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
/******************************************************************************
* SOFA, Simulation Open-Framework Architecture *
* (c) 2006 INRIA, USTL, UJF, CNRS, MGH *
* *
* This program 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 program 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 program. If not, see <http://www.gnu.org/licenses/>. *
*******************************************************************************
* Authors: The SOFA Team and external contributors (see Authors.txt) *
* *
* Contact information: contact@sofa-framework.org *
******************************************************************************/
#ifndef SOFA_HELPER_IO_SPHERELOADER_H
#define SOFA_HELPER_IO_SPHERELOADER_H
#include <sofa/helper/config.h>
#include <sofa/type/Vec.h>
namespace sofa::helper::io
{
/// @brief Inherit this class to load data from sphere description.
///
/// To connect client-code data structure with the XspLoader you need to
/// Inherit from this class and override the virtual methods to you fill your
/// structures from the SphereLoader events.
/// @see SphereLoader for an example of use.
class SOFA_HELPER_API SphereLoaderDataHook
{
public:
virtual ~SphereLoaderDataHook(){}
/// @brief Called by the XspLoader when the loading is done.
///
/// This method is called by the XspLoader when the loading is done.
/// Overriding this method allows client-code to implement post-loading checking.
/// @param isOk is set to false this means that the loading code detected a
/// problem and that the loaded informations are invalid and should be removed from
/// the container.
virtual void finalizeLoading(const bool isOk){ SOFA_UNUSED(isOk); }
/// @brief Called by the XspLoader to specify before loading the number of spheres.
/// @param n number of sphere.
virtual void setNumSpheres(const int n) { SOFA_UNUSED(n); }
/// @brief Called by the Loader to specify the number of Spheres before actual loading.
/// @param px, py, pz 3D position of the center.
/// @param r the radius of the sphere.
virtual void addSphere(const SReal /*px*/, const SReal /*py*/, const SReal /*pz*/, const SReal /*r*/) {}
};
class SOFA_HELPER_API SphereLoader
{
public:
/// @brief Call this method to load a Sphere files.
/// @param filename the name of the file in the RessourceRepository to read data from.
/// @param data pass a object of this type (or inherit one) to load the file in caller's data
/// structures
/// @return wheter the loading succeded.
/// @example
/// class MySphereData : public SphereLoaderDataHook
/// {
/// std::vector<double> mx;
/// public:
/// void addSpere(SReal px, SReal py, SReal pz, SReal r) override
/// {
/// mx.push_back(px);
/// }
/// void finalizeLoading(bool isOk) override
/// {
/// if(!isOk)
/// mx.clear();
/// }
/// };
///
/// MySphereData loadedData;
/// SphereLoader::Load("myfile.sphere", loadedData);
static bool Load(const std::string& filename, SphereLoaderDataHook& data);
};
} // namespace sofa::helper::io
#endif