Tulip 5.7.1
Large graphs analysis and drawing
Loading...
Searching...
No Matches
SizeProperty.h
1/*
2 *
3 * This file is part of Tulip (https://tulip.labri.fr)
4 *
5 * Authors: David Auber and the Tulip development Team
6 * from LaBRI, University of Bordeaux
7 *
8 * Tulip is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation, either version 3
11 * of the License, or (at your option) any later version.
12 *
13 * Tulip is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
17 *
18 */
19
20#ifndef TULIP_SIZES_H
21#define TULIP_SIZES_H
22
23#include <unordered_map>
24
25#include <tulip/PropertyTypes.h>
26#include <tulip/AbstractProperty.h>
27#include <tulip/PropertyAlgorithm.h>
28
29namespace tlp {
30
31class PropertyContext;
32
33typedef AbstractProperty<tlp::SizeType, tlp::SizeType> AbstractSizeProperty;
34
35/**
36 * @ingroup Graph
37 * @brief A graph property that maps a tlp::Size value to graph elements.
38 */
39class TLP_SCOPE SizeProperty : public AbstractSizeProperty {
40
41public:
42 SizeProperty(Graph *, const std::string &n = "");
43
44 Size getMax(const Graph *sg = nullptr);
45 Size getMin(const Graph *sg = nullptr);
46 void scale(const tlp::Vector<float, 3> &, const Graph *sg = nullptr);
47 void scale(const tlp::Vector<float, 3> &, Iterator<node> *, Iterator<edge> *);
48
49 // redefinition of some PropertyInterface methods
50 PropertyInterface *clonePrototype(Graph *, const std::string &) const override;
51 static const std::string propertyTypename;
52 const std::string &getTypename() const override {
53 return propertyTypename;
54 }
55 DEFINE_GET_CPP_CLASS_NAME;
56
57 // redefinition of some AbstractProperty methods
58 void setNodeValue(const node n,
59 tlp::StoredType<tlp::SizeType::RealType>::ReturnedConstValue v) override;
60 void setAllNodeValue(tlp::StoredType<tlp::SizeType::RealType>::ReturnedConstValue v) override;
61 void setValueToGraphNodes(tlp::StoredType<tlp::SizeType::RealType>::ReturnedConstValue v,
62 const Graph *graph) override;
63
64 int compare(const node n1, const node n2) const override;
65
66protected:
67 void resetMinMax();
68
69private:
70 std::unordered_map<unsigned int, Size> max, min;
71 std::unordered_map<unsigned int, bool> minMaxOk;
72 void computeMinMax(const Graph *sg = nullptr);
73};
74
75/**
76 * @ingroup Graph
77 * @brief A graph property that maps a std::vector<tlp::Size> value to graph elements.
78 */
79class TLP_SCOPE SizeVectorProperty
80 : public AbstractVectorProperty<tlp::SizeVectorType, tlp::SizeType> {
81public:
82 SizeVectorProperty(Graph *g, const std::string &n = "")
83 : AbstractVectorProperty<SizeVectorType, SizeType>(g, n) {}
84
85 // redefinition of some PropertyInterface methods
86 PropertyInterface *clonePrototype(Graph *, const std::string &) const override;
87 static const std::string propertyTypename;
88 const std::string &getTypename() const override {
89 return propertyTypename;
90 }
91 DEFINE_GET_CPP_CLASS_NAME;
92};
93} // namespace tlp
94#endif
This class extends upon PropertyInterface, and adds type-safe methods to get and set the node and edg...
PropertyInterface describes the interface of a graph property.
A graph property that maps a tlp::Size value to graph elements.
Definition: SizeProperty.h:39
PropertyInterface * clonePrototype(Graph *, const std::string &) const override
Creates a property of the same type (e.g. tlp::DoubleProperty) in the graph. The new property will no...
int compare(const node n1, const node n2) const override
Compares the value this property holds for the two given nodes.
const std::string & getTypename() const override
Gets a string describing the type of the property value (e.g. "graph", "double", "layout",...
Definition: SizeProperty.h:52
A graph property that maps a std::vector<tlp::Size> value to graph elements.
Definition: SizeProperty.h:80
const std::string & getTypename() const override
Gets a string describing the type of the property value (e.g. "graph", "double", "layout",...
Definition: SizeProperty.h:88
PropertyInterface * clonePrototype(Graph *, const std::string &) const override
Creates a property of the same type (e.g. tlp::DoubleProperty) in the graph. The new property will no...
Interface for Tulip iterators. Allows basic iteration operations only.
Definition: Iterator.h:74
The node struct represents a node in a Graph object.
Definition: Node.h:40