初步减少了ShortCutSegment的重复
parent
a3f7123a6f
commit
dcb882fb86
|
@ -46,11 +46,10 @@ void ShortCutTree::monotonization(vector<PointVector>& inL, vector<LinePtr>& out
|
|||
|
||||
void ShortCutTree::generateShortCutsegmentement(ShortCutNode& nowTreeNode) {
|
||||
Point p = {0, 0};
|
||||
vector<int> v;
|
||||
set<pair<int, int> > pointSet;
|
||||
for (int & lineIndex : nowTreeNode.lineSet) {
|
||||
int type = allLine[lineIndex]->judgeBoundIntersection(nowTreeNode.bound.z(), nowTreeNode.bound.y(), nowTreeNode.bound.w(), false), lineIndexBegin, lineIndexEnd;
|
||||
if (type >= 2) {
|
||||
v.push_back(numLine);
|
||||
if (type == 2) {
|
||||
p = allLine[lineIndex]->getEnd();
|
||||
}
|
||||
|
@ -59,25 +58,33 @@ void ShortCutTree::generateShortCutsegmentement(ShortCutNode& nowTreeNode) {
|
|||
}
|
||||
lineIndexBegin = getPointIndex({ p.x, nowTreeNode.bound.w() });
|
||||
lineIndexEnd = getPointIndex(p);
|
||||
lineIndexs.push_back(lineIndexBegin);
|
||||
lineIndexs.push_back(lineIndexBegin);
|
||||
lineIndexs.push_back(lineIndexEnd);
|
||||
lineIndexs.push_back(lineIndexEnd);
|
||||
numLine++;
|
||||
auto iter = pointSet.find({ lineIndexBegin, lineIndexEnd });
|
||||
if (iter != pointSet.end()) {
|
||||
pointSet.erase(iter);
|
||||
}
|
||||
else {
|
||||
pointSet.insert({ lineIndexBegin, lineIndexEnd });
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nowTreeNode.windingIncrement != 0) {
|
||||
v.push_back(numLine);
|
||||
int lineIndexBegin = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.y()});
|
||||
int lineIndexEnd = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.w() });
|
||||
lineIndexs.push_back(lineIndexBegin);
|
||||
lineIndexs.push_back(lineIndexBegin);
|
||||
lineIndexs.push_back(lineIndexEnd);
|
||||
lineIndexs.push_back(lineIndexEnd);
|
||||
numLine++;
|
||||
auto iter = pointSet.find({ lineIndexBegin, lineIndexEnd });
|
||||
if (iter != pointSet.end()) {
|
||||
pointSet.erase(iter);
|
||||
}
|
||||
else {
|
||||
pointSet.insert({ lineIndexBegin, lineIndexEnd });
|
||||
}
|
||||
}
|
||||
for (int& lineIndex : v) {
|
||||
nowTreeNode.lineSet.push_back(lineIndex);
|
||||
for (auto& iter : pointSet) {
|
||||
nowTreeNode.lineSet.push_back(numLine);
|
||||
lineIndexs.push_back(iter.first);
|
||||
lineIndexs.push_back(iter.first);
|
||||
lineIndexs.push_back(iter.second);
|
||||
lineIndexs.push_back(iter.second);
|
||||
numLine++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,10 +3,12 @@
|
|||
#include "StraightLine.h"
|
||||
#include "BvhTree.h"
|
||||
#include <queue>
|
||||
#include <set>
|
||||
|
||||
using std::queue;
|
||||
using std::map;
|
||||
using std::for_each;
|
||||
using std::set;
|
||||
|
||||
struct ShortCutNode {
|
||||
typedef vector<Point> vectorPoint;
|
||||
|
|
Loading…
Reference in New Issue