212 Error(
"CheckShape",
"No geometry manager");
216 gGeoManager->CheckShape(shape, testNo, nsamples, option);
228 while (temp2 > 1.0) {
251 return ((
TObject *)
this)->ClassName();
283 if (point[0] *
c1 + point[1] *
s1 >= 0)
285 if (point[0] *
c2 + point[1] * s2 >= 0)
302 if (ddp > phi2 - phi1)
318 Double_t rxy0 = point[0] * cphi + point[1] * sphi;
319 Double_t rdotn = point[0] * nx + point[1] * ny;
331 Double_t ddotn = dir[0] * nx + dir[1] * ny;
334 snext = rdotn / ddotn;
335 rxy = rxy0 + snext * (dir[0] * cphi + dir[1] * sphi);
374 a1 = (x2 * y1 - x1 * y2) / dx1;
375 b1 = (y2 - y1) / dx1;
378 a2 = (x4 * y3 - x3 * y4) / dx2;
379 b2 = (y4 - y3) / dx2;
381 if (stand1 && stand2) {
385 if ((y3 - y1) * (y3 - y2) < -eps || (y4 - y1) * (y4 - y2) < -eps || (y1 - y3) * (y1 - y4) < -eps ||
386 (y2 - y3) * (y2 - y4) < -eps)
410 if ((x3 - x1) * (x3 - x2) < -eps || (x4 - x1) * (x4 - x2) < -eps || (x1 - x3) * (x1 - x4) < -eps ||
411 (x2 - x3) * (x2 - x4) < -eps)
415 xm = (a1 - a2) / (b2 - b1);
416 ym = (a1 * b2 - a2 * b1) / (b2 - b1);
420 Double_t check = (xm - x1) * (xm - x2) + (ym - y1) * (ym - y2);
423 check = (xm - x3) * (xm - x4) + (ym - y3) * (ym - y4);
442 s = -point[0] *
s1 + point[1] *
c1;
447 if (((point[0] + s * dir[0]) * sm - (point[1] + s * dir[1]) * cm) >= 0)
451 un = -dir[0] * s2 + dir[1] *
c2;
455 s = point[0] * s2 - point[1] *
c2;
460 if ((-(point[0] + s * dir[0]) * sm + (point[1] + s * dir[1]) * cm) >= 0)
475 if (point[0] *
c1 + point[1] *
s1 >= 0)
477 if (point[0] *
c2 + point[1] * s2 >= 0)
490 if (dir[0] * norm[0] + dir[1] * norm[1] < 0) {
511 Double_t rsq = point[0] * point[0] + point[1] * point[1];
513 Double_t safsq = rsq - rproj * rproj;
517 rproj = point[0] *
c2 + point[1] * s2;
518 safsq = rsq - rproj * rproj;
536 Double_t crossp = (z2 - z1) * (
r - r1) - (z - z1) * (r2 - r1);
537 crossp *= (outer) ? 1. : -1.;
547 Double_t c1 = (z - z1) * (z2 - z1) + (
r - r1) * (r2 - r1);
550 return TMath::Sqrt((
r - r1) * (
r - r1) + (z - z1) * (z - z1));
552 Double_t c2 = (z - z2) * (z2 - z1) + (
r - r2) * (r2 - r1);
555 return TMath::Sqrt((
r - r2) * (
r - r2) + (z - z2) * (z - z2));
557 c2 = (z2 - z1) * (z2 - z1) + (r2 - r1) * (r2 - r1);
560 Double_t rp = r1 + alpha * (r2 - r1);
561 Double_t zp = z1 + alpha * (z2 - z1);
562 return TMath::Sqrt((
r - rp) * (
r - rp) + (z - zp) * (z - zp));
601 for (j = 0; j < NbPnts; j++) {
605 points[i + 1] = dmaster[1];
606 points[i + 2] = dmaster[2];
614 for (j = 0; j < NbPnts; j++) {
629 points[i + 1] = dmaster[1];
630 points[i + 2] = dmaster[2];
673 if (visdensity > 0 && paintVolume->
GetMedium()) {
683 if (paintVolume && paintVolume->
GetShape()) {
691 buffer.
fReflection = ((r1 & (!r2)) | (r2 & !(r1)));
708 if (!localMasterMat) {
726 Int_t basicColor = 0;
744 Warning(
"GetBuffer3D",
"this must be implemented for shapes in a TGeoPainter hierarchy. This will be come a pure "
745 "virtual fn eventually.");
780 if (option && option[0]) {
783 painter->
DrawShape(
this,
gEnv->GetValue(
"Viewer3D.DefaultDrawOption",
""));
793 if (option && option[0]) {
796 painter->
PaintShape(
this,
gEnv->GetValue(
"Viewer3D.DefaultDrawOption",
""));
int Int_t
Signed integer 4 bytes (int).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
double Double_t
Double 8 bytes.
const char Option_t
Option string (const char).
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
externTGeoManager * 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)
Matrix class used for computing global transformations Should NOT be used for node definition.
The manager class for any TGeo geometry.
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.
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
virtual EInside Inside(const Double_t *point) const
Implementation of the inside function using just Contains and GetNormal.
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
const char * GetName() const override
Returns name of object.
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.
TObject()
TObject constructor.
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.
TGeoShape::EInside Inside(const Double_t *point, Solid const *solid)
Generic implementation of the inside function using just Contains and GetNormal.