Easy3D 2.6.1
Loading...
Searching...
No Matches
Tutorial_110_Graph_Property/main.cpp

This example shows how to add per-vertex/per-edge properties to a graph, and how to access existing properties.

1/********************************************************************
2 * Copyright (C) 2015 Liangliang Nan <liangliang.nan@gmail.com>
3 * https://3d.bk.tudelft.nl/liangliang/
4 *
5 * This file is part of Easy3D. If it is useful in your research/work,
6 * I would be grateful if you show your appreciation by citing it:
7 * ------------------------------------------------------------------
8 * Liangliang Nan.
9 * Easy3D: a lightweight, easy-to-use, and efficient C++ library
10 * for processing and rendering 3D data.
11 * Journal of Open Source Software, 6(64), 3255, 2021.
12 * ------------------------------------------------------------------
13 *
14 * Easy3D is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License Version 3
16 * as published by the Free Software Foundation.
17 *
18 * Easy3D is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 ********************************************************************/
26
27#include <easy3d/core/graph.h>
28#include <easy3d/util/initializer.h>
29
34
35using namespace easy3d;
36
37
38// the graph created in the previous tutorial (so you can skip it)
39Graph* old_graph_from_previous_example() {
40 // Create a graph
41 auto graph = new Graph;
42
43 // Add 4 vertices
44 Graph::Vertex v0 = graph->add_vertex(vec3(0, 0, 0));
45 Graph::Vertex v1 = graph->add_vertex(vec3(1, 0, 0));
46 Graph::Vertex v2 = graph->add_vertex(vec3(0, 1, 0));
47 Graph::Vertex v3 = graph->add_vertex(vec3(0, 0, 1));
48
49 // Add some edges
50 graph->add_edge(v0, v1); // e0
51 graph->add_edge(v1, v2); // e1
52 graph->add_edge(v2, v3); // e2
53 graph->add_edge(v3, v0); // e3
54 graph->add_edge(v1, v3); // e4
55
56 return graph;
57}
58
59
60int main(int argc, char** argv) {
61 // initialize Easy3D.
62 initialize();
63
64 Graph* graph = old_graph_from_previous_example();
65
66 auto points = graph->vertex_property<vec3>("v:point");
67
68 // We add a per-vertex property "v:color" to assign a color to each vertex
69 auto colors = graph->add_vertex_property<vec3>("v:color");
70 for (auto v : graph->vertices()) {
71 // We assign each vertex a color that is equal to his position (you should
72 // assign a more meaningful color in practice).
73 colors[v] = points[v];
74 std::cout << "vertex: " << v << ", position: " << points[v] << ", color: " << colors[v] << std::endl;
75 }
76
77 // We add a per-edge property "e:length" to store the edge lengths
78 auto lengths = graph->add_edge_property<float>("e:length");
79 for (auto e : graph->edges()) {
80 lengths[e] = graph->edge_length(e);
81 std::cout << "edge: " << e << ", length: " << lengths[e] << std::endl;
82 }
83
84 delete graph;
85
86 return EXIT_SUCCESS;
87}
88
A Graph data structure with easy property management.
Definition graph.h:50
EdgeContainer edges() const
Returns the edge container for range-based for-loops.
Definition graph.h:1153
VertexContainer vertices() const
Returns the vertex container for range-based for-loops.
Definition graph.h:1126
VertexProperty< T > vertex_property(const std::string &name, const T t=T())
Gets or adds a vertex property.
Definition graph.h:978
VertexProperty< T > add_vertex_property(const std::string &name, const T t=T())
Adds a vertex property.
Definition graph.h:908
float edge_length(Edge e) const
Computes the length of an edge.
Definition graph.cpp:256
EdgeProperty< T > add_edge_property(const std::string &name, const T t=T())
Adds an edge property.
Definition graph.h:920
Definition collider.cpp:182
Vec< 3, float > vec3
A 3D point/vector of float type.
Definition types.h:44
void initialize(bool info_to_stdout, bool use_log_file, bool use_setting_file, const std::string &resource_dir)
Initialization of Easy3D.
Definition initializer.cpp:39
This type represents a vertex (internally it is basically an index).
Definition graph.h:132