ROOT  6.07/01
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 #ifndef ROOT_TGeoBBox
16 #include "TGeoBBox.h"
17 #endif
18 
19 ////////////////////////////////////////////////////////////////////////////
20 // //
21 // TGeoCompositeShape - composite shape class. A composite shape contains //
22 // a list of primitive shapes, the list of coresponding transformations //
23 // and a boolean finder handling boolean operations among components. //
24 // //
25 ////////////////////////////////////////////////////////////////////////////
26 
27 class TGeoBoolNode;
28 
30 {
31 private :
32 // data members
33  TGeoBoolNode *fNode; // top boolean node
34 
35 protected:
37  : TGeoBBox(gcs), fNode(gcs.fNode) { }
39  {if(this!=&gcs) {TGeoBBox::operator=(gcs); fNode=gcs.fNode;} return *this;}
40 
41 public:
42  // constructors
44  TGeoCompositeShape(const char *name, const char *expression);
45  TGeoCompositeShape(const char *expression);
46  TGeoCompositeShape(const char *name, TGeoBoolNode *node);
47  // destructor
48  virtual ~TGeoCompositeShape();
49  // methods
50  virtual Double_t Capacity() const;
51  virtual void ClearThreadData() const;
52  virtual void CreateThreadData(Int_t nthreads);
53  virtual void ComputeBBox();
54  virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm);
55  virtual void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize);
56  virtual Bool_t Contains(const Double_t *point) const;
57  virtual void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const;
59  virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1,
60  Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
61  virtual void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
62  virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1,
63  Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
64  virtual void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
65  virtual TGeoVolume *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv,
66  Double_t start, Double_t step);
67  TGeoBoolNode *GetBoolNode() const {return fNode;}
68  virtual void GetBoundingCylinder(Double_t * /*param*/) const {;}
69  virtual TGeoShape *GetMakeRuntimeShape(TGeoShape * /*mother*/, TGeoMatrix * /*mat*/) const {return 0;}
70  virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
71  virtual Int_t GetNmeshVertices() const;
72  virtual Bool_t GetPointsOnSegments(Int_t /*npoints*/, Double_t * /*array*/) const {return kFALSE;}
73  virtual void InspectShape() const;
74  virtual Bool_t IsComposite() const {return kTRUE;}
75  virtual Bool_t IsCylType() const {return kFALSE;}
76  void MakeNode(const char *expression);
77  virtual Bool_t PaintComposite(Option_t *option = "") const;
78  void RegisterYourself();
79  virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const;
80  virtual void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const;
81  virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
82  virtual void SetDimensions(Double_t * /*param*/) {;}
83  virtual void SetPoints(Double_t *points) const;
84  virtual void SetPoints(Float_t *points) const;
85  virtual void Sizeof3D() const;
86 
87  ClassDef(TGeoCompositeShape, 1) // boolean composite shape
88 };
89 
90 
91 
92 #endif
93 
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const
computes the closest distance from given point to this shape, according to option.
virtual TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step)
Divide all range of iaxis in range/step cells.
virtual Int_t GetNmeshVertices() const
Return number of vertices of the mesh representation.
void MakeNode(const char *expression)
Make a booleann node according to the top level boolean operation of expression.
float Float_t
Definition: RtypesCore.h:53
TGeoCompositeShape(const TGeoCompositeShape &gcs)
const char Option_t
Definition: RtypesCore.h:62
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...
void RegisterYourself()
Register the shape and all components to TGeoManager class.
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=0) const
Compute distance from inside point to outside of this composite shape.
Float_t py
Definition: hprod.C:33
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=0) const
Compute distance from outside point to this composite shape.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual void SetDimensions(Double_t *)
Set dimensions based on the array of parameters param[0] - half-length in x param[1] - half-length in...
virtual void ClearThreadData() const
#define ClassDef(name, id)
Definition: Rtypes.h:254
virtual void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const
Compute distance from array of input points having directions specisied by dirs. Store output in dist...
virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const
Returns numbers of vertices, segments and polygons composing the shape mesh.
char * out
Definition: TBase64.cxx:29
point * points
Definition: X3DBuffer.c:20
virtual Bool_t IsComposite() const
virtual void SetPoints(Double_t *points) const
create points for a composite shape
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
Definition: TNamed.cxx:40
virtual void CreateThreadData(Int_t nthreads)
virtual void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize)
Compute the normal for an array o points so that norm.dot.dir is positive Input: Arrays of point coor...
virtual TGeoShape * GetMakeRuntimeShape(TGeoShape *, TGeoMatrix *) const
In case shape has some negative parameters, these has to be computed in order to fit the mother...
TGeoBoolNode * GetBoolNode() const
virtual void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const
Check the inside status for each of the points in the array.
virtual Bool_t Contains(const Double_t *point) const
Tests if point is inside the shape.
TGeoBoolNode * fNode
virtual void InspectShape() const
print shape parameters
virtual void GetBoundingCylinder(Double_t *) const
Fill vector param[4] with the bounding cylinder parameters.
virtual Double_t Capacity() const
Computes capacity of this shape [length^3] by sampling with 1% error.
virtual Bool_t GetPointsOnSegments(Int_t, Double_t *) const
Fills array with n random points located on the line segments of the shape mesh.
virtual void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const
Compute distance from array of input points having directions specisied by dirs. Store output in dist...
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)
Computes normal vector in POINT to the composite shape.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute closest distance from point px,py to each corner.
double Double_t
Definition: RtypesCore.h:55
TGeoCompositeShape()
Default constructor.
static Double_t Big()
Definition: TGeoShape.h:98
#define name(a, b)
Definition: linkTestLib0.cpp:5
Float_t px
Definition: hprod.C:33
TGeoCompositeShape & operator=(const TGeoCompositeShape &gcs)
virtual Bool_t IsCylType() const
virtual void Sizeof3D() const
compute size of this 3D object
virtual void ComputeBBox()
compute bounding box of the sphere
virtual void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const
Compute safe distance from each of the points in the input array.
const Bool_t kTRUE
Definition: Rtypes.h:91
double norm(double *x, double *p)
Definition: unuranDistr.cxx:40
virtual ~TGeoCompositeShape()
destructor