Visual Servoing Platform version 3.6.0
Loading...
Searching...
No Matches
vpFeatureMomentDatabase.h
1/****************************************************************************
2 *
3 * ViSP, open source Visual Servoing Platform software.
4 * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
5 *
6 * This software is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 * See the file LICENSE.txt at the root directory of this source
11 * distribution for additional information about the GNU GPL.
12 *
13 * For using ViSP with software that can not be combined with the GNU
14 * GPL, please contact Inria about acquiring a ViSP Professional
15 * Edition License.
16 *
17 * See https://visp.inria.fr for more information.
18 *
19 * This software was developed at:
20 * Inria Rennes - Bretagne Atlantique
21 * Campus Universitaire de Beaulieu
22 * 35042 Rennes Cedex
23 * France
24 *
25 * If you have questions regarding the use of this file, please contact
26 * Inria at visp@inria.fr
27 *
28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30 *
31 * Description:
32 * Pseudo-database used to handle dependencies between moment features.
33 *
34 * Authors:
35 * Filip Novotny
36 *
37*****************************************************************************/
38
43
44#ifndef _vpFeatureMomentDatabase_h_
45#define _vpFeatureMomentDatabase_h_
46
47#include <cstring>
48#include <iostream>
49#include <map>
50#include <visp3/core/vpConfig.h>
51
52class vpFeatureMoment;
53class vpMomentObject;
108 vpMomentObject obj(6); // Init object of order 6 because we are
109 // computing C-invariants
110 obj.setType(vpMomentObject::DISCRETE); // Discrete mode for object
111 obj.fromVector(vec_p);
112
113 vpMomentDatabase mdb; // database for moment primitives. This will
114 // only contain the basic moment.
115 vpMomentCentered mc; // Centered moment
116 vpMomentBasic bm; // Basic moment
117 vpMomentGravityCenter gc; // gravity center
118 vpMomentCInvariant ci; // C-type invariant
119
120 bm.linkTo(mdb); //add basic moment to moment database
121 mc.linkTo(mdb); //add centered moment to moment database
122 gc.linkTo(mdb); //add gravity center to moment database
123 ci.linkTo(mdb); //add C-invariant to moment database
124
125 vpFeatureMomentDatabase fmdb; // feature moment database to store
126 // feature dependencies
127
128 // Declare and link moments to database
129 vpFeatureMomentBasic fmb(mdb,0.,0.,1.,&fmdb); fmb.linkTo(fmdb);
130 vpFeatureMomentCentered fmc(mdb,0.,0.,1.,&fmdb); fmc.linkTo(fmdb);
131 vpFeatureMomentCInvariant fci(mdb,0.,0.,1.,&fmdb); fci.linkTo(fmdb);
132
133 // update the whole moment database
134 mdb.updateAll(obj);
135
136 // Compute moments in the correct order with the object
137 bm.compute();
138 gc.compute();
139 mc.compute();
140 ci.compute();
141
142 // update the whole feature moment database with a plane
143 fmb.update(0.,0.,1.);
144 fmc.update(0.,0.,1.);
145 fci.update(0.,0.,1.);
146
147 std::cout << fci.interaction(vpFeatureMomentCInvariant::selectC1()) << std::endl;
148 }
149 catch(const vpException &e){
150 std::cout << e.getMessage() << std::endl;
151 }
152
153 return 0;
154}
155\endcode
156*/
157class VISP_EXPORT vpFeatureMomentDatabase
158{
159private:
160 struct vpCmpStr_t {
161 bool operator()(const char *a, const char *b) const { return std::strcmp(a, b) < 0; }
162 char *operator=(const char *) { return NULL; } // Only to avoid a warning under Visual with /Wall flag
163 };
164 std::map<const char *, vpFeatureMoment *, vpCmpStr_t> featureMomentsDataBase;
165 void add(vpFeatureMoment &featureMoment, char *name);
166
167public:
171 vpFeatureMomentDatabase() : featureMomentsDataBase() {}
176 virtual void updateAll(double A = 0.0, double B = 0.0, double C = 1.0);
177
178 vpFeatureMoment &get(const char *type, bool &found);
179
180 // friend VISP_EXPORT std::ostream & operator<<(std::ostream& os, const
181 // vpFeatureMomentDatabase& m);
182 friend class vpFeatureMoment;
183};
184
185#endif
This class defines shared system methods/attributes for 2D moment features but no functional code....
Class for generic objects.