Loading src/core/geometry/DetectorModel.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -325,7 +325,12 @@ std::optional<ROOT::Math::XYZPoint> DetectorModel::Implant::intersect(const ROOT // Shift position to implant coordinate system and apply rotation around z axis! if(shape_ == Implant::Shape::RECTANGLE) { // Use Liang-Barsky line clipping method: return LiangBarsky::closestIntersection(orientation_(direction), orientation_(position - offset_), size_); auto intercept = LiangBarsky::closestIntersection(orientation_(direction), orientation_(position - offset_), size_); if(intercept.has_value()) { // Translate back into local coordinates of the sensor: intercept = orientation_.Inverse()(intercept.value()) + offset_; } return intercept; } else if(shape_ == Implant::Shape::ELLIPSE) { // Translate so the ellipse is centered at the origin. auto pos = orientation_(position - offset_); Loading Loading
src/core/geometry/DetectorModel.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -325,7 +325,12 @@ std::optional<ROOT::Math::XYZPoint> DetectorModel::Implant::intersect(const ROOT // Shift position to implant coordinate system and apply rotation around z axis! if(shape_ == Implant::Shape::RECTANGLE) { // Use Liang-Barsky line clipping method: return LiangBarsky::closestIntersection(orientation_(direction), orientation_(position - offset_), size_); auto intercept = LiangBarsky::closestIntersection(orientation_(direction), orientation_(position - offset_), size_); if(intercept.has_value()) { // Translate back into local coordinates of the sensor: intercept = orientation_.Inverse()(intercept.value()) + offset_; } return intercept; } else if(shape_ == Implant::Shape::ELLIPSE) { // Translate so the ellipse is centered at the origin. auto pos = orientation_(position - offset_); Loading