55 memcpy(¶m[3],
n, 3 *
sizeof(
Double_t));
80 if (norm[0] * dir[0] + norm[1] * dir[1] + norm[2] * dir[2] < 0) {
93 r[0] =
fP[0] - point[0];
94 r[1] =
fP[1] - point[1];
95 r[2] =
fP[2] - point[2];
117 r[0] =
fP[0] - point[0];
118 r[1] =
fP[1] - point[1];
119 r[2] =
fP[2] - point[2];
121 if (iact < 3 && safe) {
125 if ((iact == 1) && (*safe > step))
130 Double_t ddotn = dir[0] *
fN[0] + dir[1] *
fN[1] + dir[2] *
fN[2];
133 snxt = rdotn / ddotn;
146 r[0] =
fP[0] - point[0];
147 r[1] =
fP[1] - point[1];
148 r[2] =
fP[2] - point[2];
150 if (iact < 3 && safe) {
154 if ((iact == 1) && (step < *safe))
159 Double_t ddotn = dir[0] *
fN[0] + dir[1] *
fN[1] + dir[2] *
fN[2];
162 snxt = rdotn / ddotn;
174 Error(
"Divide",
"Half-spaces cannot be divided");
193 printf(
"*** Shape %s: TGeoHalfSpace ***\n",
GetName());
194 printf(
" Point : %11.5f, %11.5f, %11.5f\n",
fP[0],
fP[1],
fP[2]);
195 printf(
" Normal : %11.5f, %11.5f, %11.5f\n",
fN[0],
fN[1],
fN[2]);
205 r[0] =
fP[0] - point[0];
206 r[1] =
fP[1] - point[1];
207 r[2] =
fP[2] - point[2];
220 out <<
" point[0] = " <<
fP[0] <<
";" << std::endl;
221 out <<
" point[1] = " <<
fP[1] <<
";" << std::endl;
222 out <<
" point[2] = " <<
fP[2] <<
";" << std::endl;
223 out <<
" norm[0] = " <<
fN[0] <<
";" << std::endl;
224 out <<
" norm[1] = " <<
fN[1] <<
";" << std::endl;
225 out <<
" norm[2] = " <<
fN[2] <<
";" << std::endl;
226 out <<
" TGeoShape *" <<
GetPointerName() <<
" = new TGeoHalfSpace(\"" <<
GetName() <<
"\", point,norm);"
251 for (
Int_t i = 0; i < vecsize; i++)
262 for (
Int_t i = 0; i < vecsize; i++)
272 for (
Int_t i = 0; i < vecsize; i++)
282 for (
Int_t i = 0; i < vecsize; i++)
293 for (
Int_t i = 0; i < vecsize; i++)
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
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t points
A half space is limited just by a plane, defined by a point and the normal direction.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
A half-space does not have a mesh primitive.
void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override
Compute normal to closest surface from POINT.
void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const override
Compute distance from array of input points having directions specified by dirs. Store output in dist...
void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const override
Compute safe distance from each of the points in the input array.
Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const override
computes the closest distance from given point to this shape, according to option.
void SetDimensions(Double_t *param) override
Set half-space parameters as stored in an array.
void InspectShape() const override
print shape parameters
void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize) override
Compute the normal for an array o points so that norm.dot.dir is positive Input: Arrays of point coor...
Bool_t Contains(const Double_t *point) const override
test if point is inside the half-space
TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override
Divide the shape along one axis.
~TGeoHalfSpace() override
destructor
void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override
Returns numbers of vertices, segments and polygons composing the shape mesh.
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 the plane
void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const override
Check the inside status for each of the points in the array.
TGeoHalfSpace()
Dummy constructor.
void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const override
Compute distance from array of input points having directions specified by dirs. Store output in dist...
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 inside point to the plane
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
void SetShapeBit(UInt_t f, Bool_t set)
Equivalent of TObject::SetBit.
const char * GetPointerName() const
Provide a pointer name containing uid.
const char * GetName() const override
Get the shape name.
static Double_t Tolerance()
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual const char * ClassName() const
Returns name of class to which the object belongs.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.