214 Error(
"CheckShape",
"No geometry manager");
230 while (temp2 > 1.0) {
253 return ((
TObject *)
this)->ClassName();
277 if (point[0] *
c1 + point[1] *
s1 >= 0)
279 if (point[0] *
c2 + point[1] * s2 >= 0)
296 if (ddp > phi2 - phi1)
312 Double_t rxy0 = point[0] * cphi + point[1] * sphi;
313 Double_t rdotn = point[0] * nx + point[1] * ny;
325 Double_t ddotn = dir[0] * nx + dir[1] * ny;
328 snext = rdotn / ddotn;
329 rxy = rxy0 + snext * (dir[0] * cphi + dir[1] * sphi);
369 b1 = (
y2 -
y1) / dx1;
372 a2 = (x4 * y3 - x3 * y4) / dx2;
373 b2 = (y4 - y3) / dx2;
375 if (stand1 && stand2) {
379 if ((y3 -
y1) * (y3 -
y2) < -eps || (y4 -
y1) * (y4 -
y2) < -eps || (
y1 - y3) * (
y1 - y4) < -eps ||
380 (
y2 - y3) * (
y2 - y4) < -eps)
404 if ((x3 -
x1) * (x3 -
x2) < -eps || (x4 -
x1) * (x4 -
x2) < -eps || (
x1 - x3) * (
x1 - x4) < -eps ||
405 (
x2 - x3) * (
x2 - x4) < -eps)
409 xm = (a1 - a2) / (b2 - b1);
410 ym = (a1 * b2 - a2 * b1) / (b2 - b1);
417 check = (xm - x3) * (xm - x4) + (ym - y3) * (ym - y4);
436 s = -point[0] *
s1 + point[1] *
c1;
441 if (((point[0] + s * dir[0]) * sm - (point[1] + s * dir[1]) * cm) >= 0)
445 un = -dir[0] * s2 + dir[1] *
c2;
449 s = point[0] * s2 - point[1] *
c2;
454 if ((-(point[0] + s * dir[0]) * sm + (point[1] + s * dir[1]) * cm) >= 0)
469 if (point[0] *
c1 + point[1] *
s1 >= 0)
471 if (point[0] *
c2 + point[1] * s2 >= 0)
484 if (dir[0] * norm[0] + dir[1] * norm[1] < 0) {
505 Double_t rsq = point[0] * point[0] + point[1] * point[1];
507 Double_t safsq = rsq - rproj * rproj;
511 rproj = point[0] *
c2 + point[1] * s2;
512 safsq = rsq - rproj * rproj;
530 Double_t crossp = (z2 - z1) * (
r - r1) - (z - z1) * (r2 - r1);
531 crossp *= (outer) ? 1. : -1.;
541 Double_t c1 = (z - z1) * (z2 - z1) + (
r - r1) * (r2 - r1);
544 return TMath::Sqrt((
r - r1) * (
r - r1) + (z - z1) * (z - z1));
546 Double_t c2 = (z - z2) * (z2 - z1) + (
r - r2) * (r2 - r1);
549 return TMath::Sqrt((
r - r2) * (
r - r2) + (z - z2) * (z - z2));
551 c2 = (z2 - z1) * (z2 - z1) + (r2 - r1) * (r2 - r1);
554 Double_t rp = r1 + alpha * (r2 - r1);
555 Double_t zp = z1 + alpha * (z2 - z1);
556 return TMath::Sqrt((
r - rp) * (
r - rp) + (z - zp) * (z - zp));
595 for (j = 0; j < NbPnts; j++) {
599 points[i + 1] = dmaster[1];
600 points[i + 2] = dmaster[2];
608 for (j = 0; j < NbPnts; j++) {
623 points[i + 1] = dmaster[1];
624 points[i + 2] = dmaster[2];
667 if (visdensity > 0 && paintVolume->
GetMedium()) {
677 if (paintVolume && paintVolume->
GetShape()) {
685 buffer.
fReflection = ((r1 & (!r2)) | (r2 & !(r1)));
702 if (!localMasterMat) {
720 Int_t basicColor = 0;
738 Warning(
"GetBuffer3D",
"this must be implemented for shapes in a TGeoPainter hierarchy. This will be come a pure "
739 "virtual fn eventually.");
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
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
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t points
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TGeoManager * gGeoManager
virtual Color_t GetLineColor() const
Return the line color.
Generic 3D primitive description class.
void SetLocalMasterIdentity()
Set kRaw tessellation section of buffer with supplied sizes.
Bool_t SectionsValid(UInt_t mask) const
Double_t fLocalMaster[16]
void ClearSectionsValid()
Clear any sections marked valid.
void SetSectionsValid(UInt_t mask)
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Matrix class used for computing global transformations Should NOT be used for node definition.
The manager class for any TGeo geometry.
TGeoHMatrix * GetGLMatrix() const
Bool_t IsMatrixTransform() const
void LocalToMaster(const Double_t *local, Double_t *master) const
TGeoVolume * GetPaintVolume() const
TVirtualGeoPainter * GetGeomPainter()
Make a default painter if none present. Returns pointer to it.
Double_t GetVisDensity() const
void LocalToMasterBomb(const Double_t *local, Double_t *master) const
void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option)
Test for shape navigation methods.
TGeoHMatrix * GetCurrentMatrix() const
Bool_t IsMatrixReflection() const
TVirtualGeoPainter * GetPainter() const
Int_t GetBombMode() const
TObjArray * GetListOfShapes() const
TGeoVolume * GetTopVolume() const
Bool_t IsCleaning() const
Int_t AddShape(const TGeoShape *shape)
Add a shape to the list. Returns index of the shape in list.
virtual Double_t GetDensity() const
Geometrical transformation package.
virtual void LocalToMasterBomb(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
void GetHomogenousMatrix(Double_t *hmat) const
The homogenous matrix associated with the transformation is used for piling up's and visualization.
Base abstract class for all shapes.
virtual const TBuffer3D & GetBuffer3D(Int_t reqSections, Bool_t localFrame) const
Stub implementation to avoid forcing implementation at this stage.
Int_t GetBasicColor() const
Get the basic color (0-7).
static Bool_t IsSegCrossing(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t x3, Double_t y3, Double_t x4, Double_t y4)
Check if segments (A,B) and (C,D) are crossing, where: A(x1,y1), B(x2,y2), C(x3,y3),...
void TransformPoints(Double_t *points, UInt_t NbPoints) const
Tranform a set of points (LocalToMaster)
void SetShapeBit(UInt_t f, Bool_t set)
Equivalent of TObject::SetBit.
void ResetShapeBit(UInt_t f)
static Double_t DistToPhiMin(const Double_t *point, const Double_t *dir, Double_t s1, Double_t c1, Double_t s2, Double_t c2, Double_t sm, Double_t cm, Bool_t in=kTRUE)
compute distance from point (inside phi) to both phi planes. Return minimum.
TGeoShape()
Default constructor.
static Double_t SafetyPhi(const Double_t *point, Bool_t in, Double_t phi1, Double_t phi2)
Static method to compute safety w.r.t a phi corner defined by cosines/sines of the angles phi1,...
static void SetTransform(TGeoMatrix *matrix)
Set current transformation matrix that applies to shape.
virtual Bool_t IsComposite() const
void Draw(Option_t *option="") override
Draw this shape.
static Bool_t IsSameWithinTolerance(Double_t a, Double_t b)
Check if two numbers differ with less than a tolerance.
const char * GetPointerName() const
Provide a pointer name containing uid.
virtual void FillBuffer3D(TBuffer3D &buffer, Int_t reqSections, Bool_t localFrame) const
Fill the supplied buffer, with sections in desired frame See TBuffer3D.h for explanation of sections,...
void CheckShape(Int_t testNo, Int_t nsamples=10000, Option_t *option="")
Test for shape navigation methods.
static Double_t EpsMch()
static function returning the machine round-off error
static Bool_t IsInPhiRange(const Double_t *point, Double_t phi1, Double_t phi2)
Static method to check if a point is in the phi range (phi1, phi2) [degrees].
static Double_t ComputeEpsMch()
Compute machine round-off double precision error as the smallest number that if added to 1....
void Paint(Option_t *option="") override
Paint this shape.
~TGeoShape() override
Destructor.
static TGeoMatrix * fgTransform
virtual Bool_t IsReflected() const
Int_t ShapeDistancetoPrimitive(Int_t numpoints, Int_t px, Int_t py) const
Returns distance to shape primitive mesh.
static void NormalPhi(const Double_t *point, const Double_t *dir, Double_t *norm, Double_t c1, Double_t s1, Double_t c2, Double_t s2)
Static method to compute normal to phi planes.
static Double_t SafetySeg(Double_t r, Double_t z, Double_t r1, Double_t z1, Double_t r2, Double_t z2, Bool_t outer)
Compute distance from point of coordinates (r,z) to segment (r1,z1):(r2,z2)
static Bool_t IsCrossingSemiplane(const Double_t *point, const Double_t *dir, Double_t cphi, Double_t sphi, Double_t &snext, Double_t &rxy)
Compute distance from POINT to semiplane defined by PHI angle along DIR.
const char * GetName() const override
Get the shape name.
static TGeoMatrix * GetTransform()
Returns current transformation matrix that applies to shape.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute mouse actions on this shape.
static Double_t Tolerance()
static Bool_t IsCloseToPhi(Double_t epsil, const Double_t *point, Double_t c1, Double_t s1, Double_t c2, Double_t s2)
True if point is closer than epsil to one of the phi planes defined by c1,s1 or c2,...
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
TGeoMedium * GetMedium() const
TGeoMaterial * GetMaterial() const
TGeoShape * GetShape() const
Char_t GetTransparency() const
The TNamed class is the base class for all named ROOT classes.
const char * GetName() const override
Returns name of object.
TObject * Remove(TObject *obj) override
Remove object from array.
Mother of all ROOT objects.
virtual UInt_t GetUniqueID() const
Return the unique object id.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Abstract class for geometry painters.
virtual void DrawShape(TGeoShape *shape, Option_t *option="")=0
virtual void PaintShape(TGeoShape *shape, Option_t *option="")=0
virtual void ExecuteShapeEvent(TGeoShape *shape, Int_t event, Int_t px, Int_t py)=0
virtual Int_t ShapeDistancetoPrimitive(const TGeoShape *shape, Int_t numpoints, Int_t px, Int_t py) const =0
Double_t ATan2(Double_t y, Double_t x)
Returns the principal value of the arc tangent of y/x, expressed in radians.
constexpr Double_t DegToRad()
Conversion from degree to radian: .
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
constexpr Double_t RadToDeg()
Conversion from radian to degree: .
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.