From afafd7d1a5277021ee440975a2efcd33a43cb16f Mon Sep 17 00:00:00 2001 From: Christof Kraus <christof.j.kraus@gmail.com> Date: Fri, 17 Jul 2020 03:19:16 +0200 Subject: [PATCH] fixing bounding box of dipoles --- src/Algorithms/OrbitThreader.cpp | 17 --------------- src/Classic/AbsBeamline/Bend2D.cpp | 33 +++++++++++++----------------- 2 files changed, 14 insertions(+), 36 deletions(-) diff --git a/src/Algorithms/OrbitThreader.cpp b/src/Algorithms/OrbitThreader.cpp index c340a5374..400671ea8 100644 --- a/src/Algorithms/OrbitThreader.cpp +++ b/src/Algorithms/OrbitThreader.cpp @@ -402,23 +402,6 @@ void OrbitThreader::computeBoundingBox() { ElementBase::BoundingBox other = it->getBoundingBoxInLabCoords(); globalBoundingBox_m.getCombinedBoundingBox(other); } - - Vector_t const& X = globalBoundingBox_m.lowerLeftCorner; - Vector_t const& Y = globalBoundingBox_m.upperRightCorner; - Vector_t delta = Y - X; - Vector_t dX(delta(0), 0, 0), dY(0, delta(1), 0), dZ(0, 0, delta(2)); - std::vector<Vector_t> corners{X, X + dX, X + dX + dY, X + dY, Y, Y - dX, Y - dX - dY, Y - dY}; - std::vector<std::vector<unsigned int>> paths{{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 1, 7, 6}, {1, 2, 4, 7}, {2, 3, 5, 4}, {3, 0, 6, 5}}; - - std::ofstream out("boundingBox.gpl"); - std::ofstream traj("trajectories.gpl"); - for (std::vector<unsigned int> const& path: paths) { - for (unsigned int i = 0; i < 5; ++ i) { - Vector_t const& point = corners[path[i % 4]]; - out << point(0) << "\t" << point(1) << "\t" << point(2) << std::endl; - } - out << std::endl; - } } double OrbitThreader::computeDriftLengthToBoundingBox(const std::set<std::shared_ptr<Component>> & elements, diff --git a/src/Classic/AbsBeamline/Bend2D.cpp b/src/Classic/AbsBeamline/Bend2D.cpp index 56da740a8..e26cd3e29 100644 --- a/src/Classic/AbsBeamline/Bend2D.cpp +++ b/src/Classic/AbsBeamline/Bend2D.cpp @@ -1686,28 +1686,23 @@ ElementBase::BoundingBox Bend2D::getBoundingBoxInLabCoords() const { CoordinateSystemTrafo toBegin = getEdgeToBegin() * csTrafoGlobal2Local_m; CoordinateSystemTrafo toEnd = getEdgeToEnd() * csTrafoGlobal2Local_m; - const double &x = aperture_m.second[0]; - const double &y = aperture_m.second[1]; - - std::vector<Vector_t> corners(8); - for (int i = -1; i < 2; i += 2) { - for (int j = -1; j < 2; j += 2) { - unsigned int idx = (i + 1)/2 + (j + 1); - corners[idx] = toBegin.transformFrom(Vector_t(i * x, j * y, 0.0)); - corners[idx + 4] = toEnd.transformFrom(Vector_t(i * x, j * y, 0.0)); - } - } + std::vector<Vector_t> outline = getOutline(); BoundingBox bb; - bb.lowerLeftCorner = bb.upperRightCorner = corners[0]; + bb.lowerLeftCorner = std::numeric_limits<double>::max(); + bb.upperRightCorner = std::numeric_limits<double>::lowest(); - for (unsigned int i = 1; i < 8u; ++ i) { - for (unsigned int d; d < 3u; ++ d) { - if (bb.lowerLeftCorner(d) > corners[i](d)) { - bb.lowerLeftCorner(d) = corners[i](d); - } - if (bb.upperRightCorner(d) < corners[i](d)) { - bb.upperRightCorner(d) = corners[i](d); + Vector_t dY(0, 0.5 * getFullGap(), 0); + for (int i = -1; i < 2; i += 2) { + for (const Vector_t & vec: outline) { + Vector_t vecInLabCoords = csTrafoGlobal2Local_m.transformFrom(vec + i * dY); + for (unsigned int d = 0; d < 3; ++ d) { + if (vecInLabCoords(d) < bb.lowerLeftCorner(d)) { + bb.lowerLeftCorner(d) = vecInLabCoords(d); + } + if (vecInLabCoords(d) > bb.upperRightCorner(d)) { + bb.upperRightCorner(d) = vecInLabCoords(d); + } } } } -- GitLab