19#include "VecGeom/volumes/PlacedVolume.h" 
   20#include "VecGeom/volumes/UnplacedVolume.h" 
   21#include "VecGeom/volumes/UnplacedBox.h" 
   22#include "VecGeom/volumes/UnplacedTube.h" 
   23#include "VecGeom/volumes/UnplacedCone.h" 
   24#include "VecGeom/volumes/UnplacedParaboloid.h" 
   25#include "VecGeom/volumes/UnplacedParallelepiped.h" 
   26#include "VecGeom/volumes/UnplacedPolyhedron.h" 
   27#include "VecGeom/volumes/UnplacedTrd.h" 
   28#include "VecGeom/volumes/UnplacedOrb.h" 
   29#include "VecGeom/volumes/UnplacedSphere.h" 
   30#include "VecGeom/volumes/UnplacedBooleanVolume.h" 
   31#include "VecGeom/volumes/UnplacedTorus2.h" 
   32#include "VecGeom/volumes/UnplacedTrapezoid.h" 
   33#include "VecGeom/volumes/UnplacedPolycone.h" 
   34#include "VecGeom/volumes/UnplacedScaledShape.h" 
   35#include "VecGeom/volumes/UnplacedGenTrap.h" 
   36#include "VecGeom/volumes/UnplacedSExtruVolume.h" 
   37#include "VecGeom/volumes/UnplacedTessellated.h" 
   38#include "VecGeom/volumes/UnplacedEllipticalTube.h" 
   39#include "VecGeom/volumes/UnplacedHype.h" 
   40#include "VecGeom/volumes/UnplacedCutTube.h" 
  113   vecgeom::cxx::LogicalVolume *
lvol = 
new vecgeom::cxx::LogicalVolume(
"", 
unplaced);
 
  114   return (
lvol->Place());
 
 
  125      new vecgeom::cxx::Transformation3D(t[0], t[1], t[2], 
r[0], 
r[1], 
r[2], 
r[3], 
r[4], 
r[5], 
r[6], 
r[7], 
r[8]);
 
 
  135   using Vector3D = vecgeom::cxx::Vector3D<Precision>;
 
  148         GeoManager::MakeInstance<UnplacedTube>(
tube->GetRmin(), 
tube->GetRmax(), 
tube->GetDz(), 0., 
kTwoPi);
 
  177      unplaced_volume = GeoManager::MakeInstance<UnplacedParaboloid>(
p->GetRlo(), 
p->GetRhi(), 
p->GetDz());
 
  183      unplaced_volume = GeoManager::MakeInstance<UnplacedParallelepiped>(
p->GetX(), 
p->GetY(), 
p->GetZ(), 
p->GetAlpha(),
 
  184                                                                         p->GetTheta(), 
p->GetPhi());
 
  204         GeoManager::MakeInstance<UnplacedTrd>(
p->GetDx1(), 
p->GetDx2(), 
p->GetDy1(), 
p->GetDy2(), 
p->GetDz());
 
  210      unplaced_volume = GeoManager::MakeInstance<UnplacedTrd>(
p->GetDx1(), 
p->GetDx2(), 
p->GetDy(), 
p->GetDz());
 
  218         std::tan(
p->GetAlpha1() * 
kDegToRad), 
p->GetH2(), 
p->GetBl2(), 
p->GetTl2(),
 
  226      if (
p->GetRmin() == 0. && 
p->GetTheta2() - 
p->GetTheta1() == 180. && 
p->GetPhi2() - 
p->GetPhi1() == 360.) {
 
  278      unplaced_volume = GeoManager::MakeInstance<UnplacedTorus2>(
p->GetRmin(), 
p->GetRmax(), 
p->GetR(),
 
  286                                                                   p->GetNz(), 
p->GetZ(), 
p->GetRmin(), 
p->GetRmax());
 
  296      const double *
scale_root = 
p->GetScale()->GetScale();
 
  304      auto low = 
p->GetNlow();
 
  305      auto high = 
p->GetNhigh();
 
  310         GeoManager::MakeInstance<UnplacedCutTube>(
p->GetRmin(), 
p->GetRmax(), 
p->GetDz(), 
kDegToRad * 
p->GetPhi1(),
 
  317      unplaced_volume = GeoManager::MakeInstance<UnplacedEllipticalTube>(
p->GetA(), 
p->GetB(), 
p->GetDz());
 
  331      const double *vertices = 
p->GetVertices();
 
  344      if (
p->GetNz() == 2) {
 
  346         size_t Nvert = (size_t)
p->GetNvert();
 
  347         double *
x = 
new double[
Nvert];
 
  348         double *
y = 
new double[
Nvert];
 
  349         for (
size_t i = 0; i < 
Nvert; ++i) {
 
  354         if (PlanarPolygon::GetOrientation(
x, 
y, 
Nvert) > 0.) {
 
  356            for (
size_t i = 0; i < 
Nvert; ++i) {
 
  362            GeoManager::MakeInstance<UnplacedSExtruVolume>(
p->GetNvert(), 
x, 
y, 
p->GetZ()[0], 
p->GetZ()[1]);
 
  374      for (
auto i = 0; i < 
tsl->GetNfacets(); ++i) {
 
  375         auto const &
facet = 
tsl->GetFacet(i);
 
  383         } 
else if (
nvert == 4) {
 
  402      printf(
"Unsupported shape for ROOT shape \"%s\" of type %s. " 
  403             "Using ROOT implementation.\n",
 
 
  432   vecgeom::cxx::Vector3D<Double_t> 
vnorm;
 
  433   fVGShape->Normal(vecgeom::cxx::Vector3D<Double_t>(point[0], point[1], point[2]), 
vnorm);
 
 
  443   return (
fVGShape->Contains(vecgeom::cxx::Vector3D<Double_t>(point[0], point[1], point[2])));
 
 
  451   Double_t dist = 
fVGShape->DistanceToOut(vecgeom::cxx::Vector3D<Double_t>(point[0], point[1], point[2]),
 
  452                                           vecgeom::cxx::Vector3D<Double_t>(dir[0], dir[1], dir[2]), step);
 
  453   return ((dist < 0.) ? 0. : dist);
 
 
  461   Double_t dist = 
fVGShape->DistanceToIn(vecgeom::cxx::Vector3D<Double_t>(point[0], point[1], point[2]),
 
  462                                          vecgeom::cxx::Vector3D<Double_t>(dir[0], dir[1], dir[2]), step);
 
  463   return ((dist < 0.) ? 0. : dist);
 
 
  470   Double_t safety = (in) ? 
fVGShape->SafetyToOut(vecgeom::cxx::Vector3D<Double_t>(point[0], point[1], point[2]))
 
  471                          : 
fVGShape->SafetyToIn(vecgeom::cxx::Vector3D<Double_t>(point[0], point[1], point[2]));
 
 
  480   fVGShape->GetUnplacedVolume()->Print();
 
 
  489   if (
R__b.IsReading()) {
 
  493               "This geometry contains solids converted to VecGeom and needs a VecGeom-enabled ROOT to read.");
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Buffer base class used for serializing objects.
An arbitrary trapezoid with less than 8 vertices standing on two parallel planes perpendicular to Z a...
void SetBoxDimensions(Double_t dx, Double_t dy, Double_t dz, Double_t *origin=nullptr)
Set parameters of the box.
Base class for Boolean operations between two shapes.
Composite shapes are Boolean combinations of two or more shape components.
A cone segment is a cone having a range in phi.
The cones are defined by 5 parameters:
The cut tubes constructor has the form:
An elliptical tube is defined by the two semi-axes A and B.
A hyperboloid is represented as a solid limited by two planes perpendicular to the Z axis (top and bo...
Geometrical transformation package.
A paraboloid is defined by the revolution surface generated by a parabola and is bounded by two plane...
A polycone is represented by a sequence of tubes/cones, glued together at defined Z planes.
Polygons are defined in the same way as polycones, the difference being just that the segments betwee...
A shape scaled by a TGeoScale transformation.
Base abstract class for all shapes.
const char * GetName() const override
Get the shape name.
virtual void ComputeBBox()=0
TClass * IsA() const override
TGeoSphere are not just balls having internal and external radii, but sectors of a sphere having defi...
The torus is defined by its axial radius, its inner and outer radius.
A trapezoid with only X varying with Z.
A trapezoid with only X varying with Z.
A tube segment is a tube having a range in phi.
Bridge class for using a VecGeom solid as TGeoShape.
~TGeoVGShape() override
Destructor.
static vecgeom::cxx::VPlacedVolume * CreateVecGeomSolid(TGeoShape *shape)
Conversion method to create VecGeom solid corresponding to TGeoShape.
static TGeoVGShape * Create(TGeoShape *shape)
Factory creating TGeoVGShape from a Root shape.
TGeoShape * fShape
VecGeom placed solid.
Bool_t Contains(const Double_t *point) const override
Test if point is inside this shape.
Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=nullptr) const override
Compute distance from outside point to surface of the box.
Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const override
Computes the closest distance from given point to this shape.
void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override
Normal computation.
Double_t Capacity() const override
Returns analytic capacity of the solid.
vecgeom::cxx::VPlacedVolume * fVGShape
void ComputeBBox() override
Compute bounding box.
Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=nullptr) const override
Compute distance from inside point to surface of the box.
void InspectShape() const override
Print info about the VecGeom solid.
static vecgeom::cxx::Transformation3D * Convert(TGeoMatrix const *const geomatrix)
Convert a TGeoMatrix to a TRansformation3D.
A TGeoXtru shape is represented by the extrusion of an arbitrary polygon with fixed outline between s...
void Streamer(TBuffer &) override
Stream an object of class TObject.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
static TVirtualGeoConverter * Instance(TGeoManager *geom=nullptr)
Static function returning a pointer to the current geometry converter.
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)