Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 09:07:50

0001 //------------------------------- -*- C++ -*- -------------------------------//
0002 // Copyright Celeritas contributors: see top-level COPYRIGHT file for details
0003 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0004 //---------------------------------------------------------------------------//
0005 //! \file orange/transform/VariantTransform.hh
0006 //---------------------------------------------------------------------------//
0007 #pragma once
0008 
0009 #include <variant>
0010 
0011 #include "corecel/cont/VariantUtils.hh"
0012 
0013 #include "NoTransformation.hh"
0014 #include "SignedPermutation.hh"
0015 #include "TransformTypeTraits.hh"
0016 #include "Transformation.hh"
0017 #include "Translation.hh"
0018 
0019 namespace celeritas
0020 {
0021 template<class T>
0022 class BoundingBox;
0023 
0024 //---------------------------------------------------------------------------//
0025 //! std::variant for all transforms.
0026 using VariantTransform = EnumVariant<TransformType, TransformTypeTraits>;
0027 
0028 //---------------------------------------------------------------------------//
0029 // Apply the left "daughter-to-parent" transform to the right
0030 [[nodiscard]] VariantTransform
0031 apply_transform(VariantTransform const& left, VariantTransform const& right);
0032 
0033 //---------------------------------------------------------------------------//
0034 // Calculate the inverse of a transform
0035 [[nodiscard]] VariantTransform calc_inverse(VariantTransform const& transform);
0036 
0037 //---------------------------------------------------------------------------//
0038 // Dispatch "daughter-to-parent" transform to bounding box utilities
0039 [[nodiscard]] BoundingBox<real_type>
0040 apply_transform(VariantTransform const& transform,
0041                 BoundingBox<real_type> const& bbox);
0042 
0043 //---------------------------------------------------------------------------//
0044 }  // namespace celeritas