Skip to content

Commit aa6eb33

Browse files
committed
Refactor subdivide
1 parent 5064ded commit aa6eb33

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

src/rl/plan/AdvancedOptimizer.cpp

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,9 @@ namespace rl
9797
}
9898
}
9999

100-
for (VectorList::iterator i = path.begin(), j = ::std::next(i); i != path.end() && j != path.end(); ++i, ++j)
100+
if (this->subdivide(path, this->length))
101101
{
102-
if (this->getModel()->distance(*i, *j) > length)
103-
{
104-
this->getModel()->interpolate(*i, *j, static_cast<::rl::math::Real>(0.5), inter);
105-
i = path.insert(j, inter);
106-
107-
if (nullptr != this->getViewer())
108-
{
109-
this->getViewer()->drawConfigurationPath(path);
110-
}
111-
112-
changed = true;
113-
}
102+
changed = true;
114103
}
115104
}
116105
}

src/rl/plan/Optimizer.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
//
2626

2727
#include "Optimizer.h"
28+
#include "SimpleModel.h"
29+
#include "Viewer.h"
2830

2931
namespace rl
3032
{
@@ -76,5 +78,30 @@ namespace rl
7678
{
7779
this->viewer = viewer;
7880
}
81+
82+
bool
83+
Optimizer::subdivide(VectorList& path, const ::rl::math::Real& length)
84+
{
85+
bool changed = false;
86+
::rl::math::Vector inter(this->getModel()->getDofPosition());
87+
88+
for (VectorList::iterator i = path.begin(), j = ::std::next(i); i != path.end() && j != path.end(); ++i, ++j)
89+
{
90+
if (0 == length || this->getModel()->distance(*i, *j) > length)
91+
{
92+
this->getModel()->interpolate(*i, *j, static_cast<::rl::math::Real>(0.5), inter);
93+
i = path.insert(j, inter);
94+
95+
if (nullptr != this->getViewer())
96+
{
97+
this->getViewer()->drawConfigurationPath(path);
98+
}
99+
100+
changed = true;
101+
}
102+
}
103+
104+
return changed;
105+
}
79106
}
80107
}

src/rl/plan/Optimizer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ namespace rl
6060

6161
void setViewer(Viewer* viewer);
6262

63+
bool subdivide(VectorList& path, const ::rl::math::Real& length = 0);
64+
6365
SimpleModel* model;
6466

6567
Verifier* verifier;

0 commit comments

Comments
 (0)