File: ContextBasedFeature.h

package info (click to toggle)
cloudcompare 2.13.2%2Bgit20240821%2Bds-1
  • links: PTS
  • area: main
  • in suites: trixie
  • size: 151,152 kB
  • sloc: cpp: 687,217; ansic: 165,269; python: 31,109; xml: 25,906; sh: 940; makefile: 509; java: 229; asm: 204; fortran: 160; javascript: 73; perl: 18
file content (107 lines) | stat: -rw-r--r-- 3,527 bytes parent folder | download | duplicates (2)
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
#pragma once

//##########################################################################
//#                                                                        #
//#                     CLOUDCOMPARE PLUGIN: q3DMASC                       #
//#                                                                        #
//#  This program is free software; you can redistribute it and/or modify  #
//#  it under the terms of the GNU General Public License as published by  #
//#  the Free Software Foundation; version 2 or later of the License.      #
//#                                                                        #
//#  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 General Public License for more details.                          #
//#                                                                        #
//#                 COPYRIGHT: Dimitri Lague / CNRS / UEB                  #
//#                                                                        #
//##########################################################################

//Local
#include "FeaturesInterface.h"

namespace masc
{
	//! Context-based feature
	struct ContextBasedFeature : public Feature
	{
	public: //ContextBasedFeatureType

		typedef QSharedPointer<ContextBasedFeature> Shared;

		enum ContextBasedFeatureType
		{
			Invalid = 0
			, DZ
			, DH
		};

		static QString ToString(ContextBasedFeatureType type)
		{
			switch (type)
			{
			case Invalid:
				return "Invalid";
			case DZ:
				return "DZ";
			case DH:
				return "DH";
			default:
				assert(false);
				break;
			}
			return "Invalid";
		}

		static inline ContextBasedFeatureType FromString(const QString& token) { return FromUpperString(token.toUpper()); }
		static ContextBasedFeatureType FromUpperString(const QString& token)
		{
			if (token.startsWith("DZ"))
				return DZ;
			else if (token.startsWith("DH"))
				return DH;

			return Invalid;
		}

	public: //methods

		//! Default constructor
		ContextBasedFeature(ContextBasedFeatureType p_type,
							int p_kNN = 1,
							double p_scale = std::numeric_limits<double>::quiet_NaN(),
							int p_ctxClassLabel = 0)
			: type(p_type)
			, kNN(p_kNN)
			, ctxClassLabel(p_ctxClassLabel)
			, sf(nullptr)
		{
			scale = p_scale;
		}

		//inherited from Feature
		virtual Type getType() const override { return Type::ContextBasedFeature; }
		virtual Feature::Shared clone() const override { return Feature::Shared(new ContextBasedFeature(*this)); }
		virtual bool prepare(const CorePoints& corePoints, QString& error, CCCoreLib::GenericProgressCallback* progressCb = nullptr, SFCollector* generatedScalarFields = nullptr) override;
		virtual bool finish(const CorePoints& corePoints, QString& error) override;
		virtual bool checkValidity(QString corePointRole, QString &error) const override;
		virtual QString toString() const override;

		//! Compute the feature value on a set of points
		bool computeValue(CCCoreLib::DgmOctree::NeighboursSet& pointsInNeighbourhood, const CCVector3& queryPoint, ScalarType& outputValue) const;

	public: //members

		//! Neighborhood feature type
		/** \warning different from the feature type
		**/
		ContextBasedFeatureType type;

		//Number of neighbors
		int kNN;
		//! Context class (label)
		int ctxClassLabel;
		//! The computed scalar
		CCCoreLib::ScalarField* sf;
	};
}