Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGeoCompositeShape.h
Go to the documentation of this file.
1// @(#)root/geom:$Id$
2// Author: Andrei Gheata 31/01/02
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TGeoCompositeShape
13#define ROOT_TGeoCompositeShape
14
15#include "TGeoBBox.h"
16
17/////////////////////////////////////////////////////////////////////////////
18// //
19// TGeoCompositeShape - composite shape class. A composite shape contains //
20// a list of primitive shapes, the list of corresponding transformations //
21// and a boolean finder handling boolean operations among components. //
22// //
23/////////////////////////////////////////////////////////////////////////////
24
25class TGeoBoolNode;
26
28private:
29 // data members
30 TGeoBoolNode *fNode; // top boolean node
31
32protected:
35
36public:
37 // constructors
39 TGeoCompositeShape(const char *name, const char *expression);
40 TGeoCompositeShape(const char *expression);
41 TGeoCompositeShape(const char *name, TGeoBoolNode *node);
42 // destructor
43 ~TGeoCompositeShape() override;
44 // methods
45 Double_t Capacity() const override;
46 void ClearThreadData() const override;
47 void CreateThreadData(Int_t nthreads) override;
48 void ComputeBBox() override;
49 void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override;
50 void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize) override;
51 Bool_t Contains(const Double_t *point) const override;
52 void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const override;
53 Int_t DistancetoPrimitive(Int_t px, Int_t py) override;
54 Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact = 1, Double_t step = TGeoShape::Big(),
55 Double_t *safe = nullptr) const override;
56 void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize,
57 Double_t *step) const override;
58 Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact = 1,
59 Double_t step = TGeoShape::Big(), Double_t *safe = nullptr) const override;
60 void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize,
61 Double_t *step) const override;
63 Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override;
64 TGeoBoolNode *GetBoolNode() const { return fNode; }
65 void GetBoundingCylinder(Double_t * /*param*/) const override {}
66 TGeoShape *GetMakeRuntimeShape(TGeoShape * /*mother*/, TGeoMatrix * /*mat*/) const override { return nullptr; }
67 void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override;
68 Int_t GetNmeshVertices() const override;
69 Bool_t GetPointsOnSegments(Int_t /*npoints*/, Double_t * /*array*/) const override { return kFALSE; }
70 void InspectShape() const override;
71 Bool_t IsComposite() const override { return kTRUE; }
72 Bool_t IsCylType() const override { return kFALSE; }
73 void MakeNode(const char *expression);
74 virtual Bool_t PaintComposite(Option_t *option = "") const;
75 void RegisterYourself();
76 Double_t Safety(const Double_t *point, Bool_t in = kTRUE) const override;
77 void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const override;
78 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
79 void SetDimensions(Double_t * /*param*/) override {}
80 void SetPoints(Double_t *points) const override;
81 void SetPoints(Float_t *points) const override;
82 void Sizeof3D() const override;
83
84 ClassDefOverride(TGeoCompositeShape, 1) // boolean composite shape
85};
86
87#endif
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
float Float_t
Definition RtypesCore.h:57
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t points
char name[80]
Definition TGX11.cxx:110
Box class.
Definition TGeoBBox.h:17
Base class for Boolean operations between two shapes.
Composite shapes are Boolean combinations of two or more shape components.
TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override
Divide all range of iaxis in range/step cells.
void ComputeBBox() override
compute bounding box of the sphere
void Sizeof3D() const override
compute size of this 3D object
TGeoCompositeShape()
Default constructor.
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.
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 this composite shape.
Int_t GetNmeshVertices() const override
Return number of vertices of the mesh representation.
void GetBoundingCylinder(Double_t *) const override
Fill vector param[4] with the bounding cylinder parameters.
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...
Bool_t IsComposite() const override
TGeoBoolNode * GetBoolNode() const
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.
Bool_t GetPointsOnSegments(Int_t, Double_t *) const override
Fills array with n random points located on the line segments of the shape mesh.
void ClearThreadData() const override
Needed just for cleanup.
Double_t Capacity() const override
Computes capacity of this shape [length^3] by sampling with 1% error.
void SetDimensions(Double_t *) override
Set dimensions based on the array of parameters param[0] - half-length in x param[1] - half-length in...
Bool_t IsCylType() const override
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
virtual Bool_t PaintComposite(Option_t *option="") const
Paint this composite shape into the current 3D viewer Returns bool flag indicating if the caller shou...
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 outside of this composite shape.
void InspectShape() const override
print shape parameters
~TGeoCompositeShape() override
destructor
void CreateThreadData(Int_t nthreads) override
Needed just for cleanup.
Bool_t Contains(const Double_t *point) const override
Tests if point is inside the shape.
TGeoCompositeShape(const TGeoCompositeShape &)=delete
void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override
Computes normal vector in POINT to the composite shape.
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.
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...
TGeoShape * GetMakeRuntimeShape(TGeoShape *, TGeoMatrix *) const override
In case shape has some negative parameters, these has to be computed in order to fit the mother.
void RegisterYourself()
Register the shape and all components to TGeoManager class.
void SetPoints(Double_t *points) const override
create points for a composite shape
void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override
Returns numbers of vertices, segments and polygons composing the shape mesh.
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...
void MakeNode(const char *expression)
Make a boolean node according to the top level boolean operation of expression.
TGeoCompositeShape & operator=(const TGeoCompositeShape &)=delete
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute closest distance from point px,py to each corner.
Geometrical transformation package.
Definition TGeoMatrix.h:38
Base abstract class for all shapes.
Definition TGeoShape.h:25
static Double_t Big()
Definition TGeoShape.h:87
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition TGeoVolume.h:43