Developer Documentation
Loading...
Searching...
No Matches
wayfind.hh
1
/*===========================================================================*\
2
* *
3
* OpenFlipper *
4
* Copyright (c) 2001-2015, RWTH-Aachen University *
5
* Department of Computer Graphics and Multimedia *
6
* All rights reserved. *
7
* www.openflipper.org *
8
* *
9
*---------------------------------------------------------------------------*
10
* This file is part of OpenFlipper. *
11
*---------------------------------------------------------------------------*
12
* *
13
* Redistribution and use in source and binary forms, with or without *
14
* modification, are permitted provided that the following conditions *
15
* are met: *
16
* *
17
* 1. Redistributions of source code must retain the above copyright notice, *
18
* this list of conditions and the following disclaimer. *
19
* *
20
* 2. Redistributions in binary form must reproduce the above copyright *
21
* notice, this list of conditions and the following disclaimer in the *
22
* documentation and/or other materials provided with the distribution. *
23
* *
24
* 3. Neither the name of the copyright holder nor the names of its *
25
* contributors may be used to endorse or promote products derived from *
26
* this software without specific prior written permission. *
27
* *
28
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39
* *
40
\*===========================================================================*/
41
42
43
44
#ifndef VSI_WAYFIND_HH
45
#define VSI_WAYFIND_HH
46
47
//== INCLUDES =================================================================
48
#include <QRegion>
49
#include <QPolygonF>
50
#include <QPoint>
51
#include <QHash>
52
#include <list>
53
54
//== NAMESPACES ===============================================================
55
namespace
VSI {
56
57
//== FORWARDDECLARATIONS ======================================================
58
class
GraphicsScene;
59
class
Connection;
60
61
//== CLASS DEFINITION =========================================================
62
65
class
WayFind
{
66
67
public
:
69
explicit
WayFind
(
GraphicsScene
*_scene);
70
72
~WayFind
();
73
75
QPolygonF
findWay
(
Connection
*_conn, QPoint _from, QPoint _to);
76
77
private
:
78
79
// Area node class
80
class
Node
{
81
public
:
82
83
// node direction
84
enum
Type {
85
Vertical,
86
Horizontal
87
};
88
89
explicit
Node
(
unsigned
int
_counter);
90
~Node
();
91
92
public
:
93
// last used counter
94
unsigned
int
counter_;
95
96
// current direction
97
Type type_;
98
99
// neighbor nodes
100
Node
*n_[4];
101
102
// linked list handling
103
Node
*prev_;
104
Node
*next_;
105
106
// node position
107
QPoint pos_;
108
109
// initialized from
110
Node
*from_;
111
112
// A-Star consts
113
unsigned
int
g_;
114
unsigned
int
f_;
115
unsigned
int
h_;
116
117
// node cost
118
unsigned
int
cost_;
119
120
// already traversed
121
bool
closed_;
122
};
123
124
// Next position in distance _step from _pnt in direction _dir
125
QPoint validPos (
unsigned
int
_dir,
int
_step, QPoint _pnt);
126
127
// Heuristic distance from _from to _to
128
int
heuristicDistance (
const
QPoint &_from,
const
QPoint &_to)
const
;
129
130
// cleanup ununsed nodes
131
void
cleanup ();
132
133
private
:
134
135
GraphicsScene
*scene_;
136
137
unsigned
int
counter_;
138
139
std::list<Node *> nodes_;
140
QHash<QPair<int, int>,
Node
*> map_;
141
142
Node
*ll_;
143
QPoint oldFrom_;
144
QRegion oldReg_;
145
};
146
147
}
148
149
#endif
VSI::Connection
Definition
connection.hh:67
VSI::GraphicsScene
Definition
graphicsScene.hh:80
VSI::WayFind::Node
Definition
wayfind.hh:80
VSI::WayFind
Definition
wayfind.hh:65
VSI::WayFind::findWay
QPolygonF findWay(Connection *_conn, QPoint _from, QPoint _to)
Finds a way from _from to _to ignoring any already existent connections from _conn.
Definition
wayfind.cc:95
VSI::WayFind::~WayFind
~WayFind()
Destructor.
Definition
wayfind.cc:85
Plugin-VSI
scene
wayfind.hh
Generated on Fri Mar 6 2026 08:31:11 for Developer Documentation by
1.9.8