diff --git a/geometry/Line.cpp b/geometry/Line.cpp index 33a93e98f2f5cc8e4faa32baafb07ef1dbc8061f..ec60436656c1d28c885d487e431f104ceba6d975 100644 --- a/geometry/Line.cpp +++ b/geometry/Line.cpp @@ -81,6 +81,7 @@ Line::~Line() ************************************************************/ void Line::SetPoint1(const Point& p) { + //if we call this setter and change line, it should get a new UID (ar.graf) @todo: _point1 = p; _centre = (_point1+_point2)*0.5; _length = (_point1 - _point2).Norm(); @@ -88,6 +89,7 @@ void Line::SetPoint1(const Point& p) void Line::SetPoint2(const Point& p) { + //if we call this setter and change line, it should get a new UID (ar.graf) @todo: _point2 = p; _centre = (_point1+_point2)*0.5; _length = (_point1 - _point2).Norm(); diff --git a/routing/ff_router/UnivFFviaFM.cpp b/routing/ff_router/UnivFFviaFM.cpp index 40077cf332ed9465ae45cf8a899b09be5bc1d0bb..ad3d5f9da36e09b5ee9ac102d1184d1d05fedcb6 100644 --- a/routing/ff_router/UnivFFviaFM.cpp +++ b/routing/ff_router/UnivFFviaFM.cpp @@ -85,9 +85,11 @@ UnivFFviaFM::UnivFFviaFM(Room* roomArg, Configuration* const confArg, double hx, if (!isOpen) { //will be added twice! is it a problem? lines.emplace_back((Line)*cross); - } else if ((tmpDoors.count(uidNotConst) == 0)) { - tmpDoors.emplace(std::make_pair(uidNotConst, (Line) *cross)); - anyDoor = Line{*cross}; + } else { + anyDoor = Line{*cross}; + if (tmpDoors.count(uidNotConst) == 0) { + tmpDoors.emplace(std::make_pair(uidNotConst, (Line) *cross)); + } } } for (auto& trans : tmpTrans) { @@ -96,9 +98,11 @@ UnivFFviaFM::UnivFFviaFM(Room* roomArg, Configuration* const confArg, double hx, if (!isOpen) { //will be added twice! is it a problem? lines.emplace_back((Line)*trans); - } else if (tmpDoors.count(uidNotConst) == 0) { - tmpDoors.emplace(std::make_pair(uidNotConst, (Line) *trans)); - anyDoor = Line{*trans}; + } else { + anyDoor = Line{*trans}; + if (tmpDoors.count(uidNotConst) == 0) { + tmpDoors.emplace(std::make_pair(uidNotConst, (Line) *trans)); + } } } //find insidePoint and save it, together with UID diff --git a/routing/ff_router/ffRouter.cpp b/routing/ff_router/ffRouter.cpp index 007091e2adcbf90bb323d8e3ad822aacc3509072..6cd23169d937e40e594f2a8dddbc1e4c1a3578f5 100644 --- a/routing/ff_router/ffRouter.cpp +++ b/routing/ff_router/ffRouter.cpp @@ -228,7 +228,7 @@ bool FFRouter::Init(Building* building) double tempDistance = locffptr->getDistanceBetweenDoors(rctIt->second, otherDoor.second); if (tempDistance < locffptr->getGrid()->Gethx()) { - Log->Write("WARNING:\tDistance of doors %d and %d is too small: %f",rctIt->second, otherDoor.second, tempDistance); + Log->Write("WARNING:\tIgnoring distance of doors %d and %d because it is too small: %f",rctIt->second, otherDoor.second, tempDistance); //Log->Write("^^^^^^^^\tIf there are scattered subrooms, which are not connected, this is ok."); continue; } @@ -498,6 +498,7 @@ int FFRouter::FindExit(Pedestrian* p) void FFRouter::FloydWarshall() { bool change = false; + double savedDistance = 0.; int totalnum = _allDoorUIDs.size(); for(int k = 0; k<totalnum; ++k) { for(int i = 0; i<totalnum; ++i) { @@ -508,6 +509,7 @@ void FFRouter::FloydWarshall() if ((_distMatrix[key_ik] < DBL_MAX) && (_distMatrix[key_kj] < DBL_MAX) && (_distMatrix[key_ik] + _distMatrix[key_kj] < _distMatrix[key_ij])) { + savedDistance = _distMatrix[key_ij] - _distMatrix[key_ik] - _distMatrix[key_kj]; _distMatrix.erase(key_ij); _distMatrix.insert(std::make_pair(key_ij, _distMatrix[key_ik] + _distMatrix[key_kj])); _pathsMatrix.erase(key_ij); @@ -518,7 +520,7 @@ void FFRouter::FloydWarshall() } } if (change) { - Log->Write("Floyd nochmal!!!"); + Log->Write("Floyd nochmal!!! %f", savedDistance); FloydWarshall(); } else { Log->Write("Floyd fertig");