白封羽 2022-10-11 19:57:38 +08:00
commit 11bed6c706
2 changed files with 25 additions and 16 deletions

View File

@ -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);
}
for (int& lineIndex : v) {
nowTreeNode.lineSet.push_back(lineIndex);
else {
pointSet.insert({ lineIndexBegin, lineIndexEnd });
}
}
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++;
}
}

View File

@ -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;