initial version, DXFs can b...
Stefan Schuermans authored 11 years ago
|
7)
8) #include "gcode.h"
9) #include "layer.h"
10) #include "path.h"
11) #include "settings.h"
12)
13) /**
14) * @brief add a new empty path to the layer
15) * @return reference to new empty path
16) */
17) Path & Layer::addPath()
18) {
19) mPaths.push_back(Path());
20) return mPaths.back();
21) }
22)
|
implement joining and impro...
Stefan Schuermans authored 11 years ago
|
23) /**
24) * @brief improve paths
25) * @param[in] eqDist maximum distance of two points to be considered equal
26) */
27) void Layer::improvePaths(double eqDist)
28) {
29) Paths::iterator path, other;
30) bool change;
31)
32) // join paths with equal begin/end points
33) do {
34) change = false;
35) for (path = mPaths.begin(); path != mPaths.end(); ++path) {
36) other = path;
37) ++other;
38) while (other != mPaths.end()) {
39) if (other->mPoints.front().equals(path->mPoints.back(),
40) eqDist)) {
41) path->appendPath(*other);
42) other = mPaths.erase(other);
43) change = true;
44) }
45) else if (other->mPoints.back().equals(path->mPoints.back(),
46) eqDist)) {
47) path->appendReversedPath(*other);
48) other = mPaths.erase(other);
49) change = true;
50) }
51) else if (other->mPoints.back().equals(path->mPoints.front(),
52) eqDist)) {
53) path->prependPath(*other);
54) other = mPaths.erase(other);
55) change = true;
56) }
57) else if (other->mPoints.front().equals(path->mPoints.front(),
58) eqDist)) {
59) path->prependReversedPath(*other);
60) other = mPaths.erase(other);
61) change = true;
62) }
63) else
64) ++other;
65) }
66) }
67) } while (change);
68)
69) // remove nearby points in paths
70) for (path = mPaths.begin(); path != mPaths.end(); ++path)
71) path->removeEqPoints(eqDist);
72)
73) // remove empty paths
74) path = mPaths.begin();
75) while (path != mPaths.end())
76) if (path->mPoints.empty())
77) path = mPaths.erase(path);
78) else
79) ++path;
80) }
81)
|