File indexing completed on 2026-04-17 08:35:33
0001 #ifndef VECGEOM_SURFACE_GENTRAPCONVERTER_H_
0002 #define VECGEOM_SURFACE_GENTRAPCONVERTER_H_
0003
0004 #include <VecGeom/surfaces/conv/Builder.h>
0005 #include <VecGeom/surfaces/Model.h>
0006
0007 #include <VecGeom/volumes/GenTrap.h>
0008
0009 namespace vgbrep {
0010 namespace conv {
0011
0012
0013
0014
0015
0016
0017 template <typename Real_t>
0018 bool CreateGenTrapSurfaces(vecgeom::UnplacedGenTrap const >rap, int logical_id, bool intersection = false)
0019 {
0020 using Vector3 = vecgeom::Vector3D<Real_t>;
0021 int isurf;
0022 LogicExpressionCPU logic;
0023
0024 auto vertices = gtrap.GetVertices();
0025
0026
0027 std::vector<Vector3> corners = {vertices[0], vertices[3], vertices[2], vertices[1],
0028 vertices[4], vertices[7], vertices[6], vertices[5]};
0029
0030 std::vector<Vector3> vert;
0031
0032
0033 vert = {corners[3], corners[0], corners[4], corners[7]};
0034 isurf = builder::CreateLocalSurfaceFromVertices<Real_t>(vert, logical_id);
0035 if (intersection) builder::GetSurface<Real_t>(isurf).fSkipConvexity = true;
0036 logic.push_back(isurf);
0037
0038
0039 vert = {corners[1], corners[2], corners[6], corners[5]};
0040 isurf = builder::CreateLocalSurfaceFromVertices<Real_t>(vert, logical_id);
0041 if (intersection) builder::GetSurface<Real_t>(isurf).fSkipConvexity = true;
0042 logic.push_back(land);
0043 logic.push_back(isurf);
0044
0045
0046 vert = {corners[0], corners[1], corners[5], corners[4]};
0047 isurf = builder::CreateLocalSurfaceFromVertices<Real_t>(vert, logical_id);
0048 if (intersection) builder::GetSurface<Real_t>(isurf).fSkipConvexity = true;
0049 logic.push_back(land);
0050 logic.push_back(isurf);
0051
0052
0053 vert = {corners[2], corners[3], corners[7], corners[6]};
0054 isurf = builder::CreateLocalSurfaceFromVertices<Real_t>(vert, logical_id);
0055 if (intersection) builder::GetSurface<Real_t>(isurf).fSkipConvexity = true;
0056 logic.push_back(land);
0057 logic.push_back(isurf);
0058
0059
0060 vert = {corners[0], corners[3], corners[2], corners[1]};
0061 isurf = builder::CreateLocalSurfaceFromVertices<Real_t>(vert, logical_id);
0062 if (intersection) builder::GetSurface<Real_t>(isurf).fSkipConvexity = true;
0063 logic.push_back(land);
0064 logic.push_back(isurf);
0065
0066
0067 vert = {corners[4], corners[5], corners[6], corners[7]};
0068 isurf = builder::CreateLocalSurfaceFromVertices<Real_t>(vert, logical_id);
0069 if (intersection) builder::GetSurface<Real_t>(isurf).fSkipConvexity = true;
0070 logic.push_back(land);
0071 logic.push_back(isurf);
0072
0073 builder::AddLogicToShell<Real_t>(logical_id, logic);
0074 return true;
0075 }
0076
0077 }
0078 }
0079 #endif