00001 // $Id: CompositeMedium.h,v 1.3 2001/01/23 03:41:32 burnett Exp $ 00002 // 00003 // This file is part of Gismo 2 00004 // 00005 #ifndef GISMO_COMPOSITEMEDIUM_H 00006 #define GISMO_COMPOSITEMEDIUM_H 00007 00008 00009 #include "gismo/Medium.h" 00010 00011 #include <vector> 00012 00013 typedef std::vector<Medium*> MediumList; 00014 00025 class CompositeMedium : public Medium , public MediumList 00026 { 00027 public: 00028 00030 CompositeMedium(Medium* =0, float size=100); 00031 00033 00039 CompositeMedium(Medium* mother, Shape* vol, const char* mat= "vacuum", Detector * det= 0); 00041 virtual ~CompositeMedium(); 00042 00044 virtual Medium& addMedium(Medium* nextMedium); 00046 virtual Medium& removeMedium (Medium* oldMedium); 00048 void deleteInnerMedia(); 00049 00051 int innerMediaCount()const {return size();} 00053 unsigned int size()const { return MediumList::size();} 00054 00056 const Medium* innerMedium(int i)const{return operator[](i);} 00058 const char* nameOf() const; 00060 int isComposite() const; 00061 00063 virtual Medium& setKECutOff(float keCut); 00065 virtual Medium& setMaxStep(float mxStep); 00067 virtual Medium& setField(Field* ); 00068 00070 00071 GeomObject& transform(const CoordTransform& ); 00072 00074 virtual double distanceToLeave( const Ray& r, 00075 const Medium*& 00076 newstuff, 00077 double maxStep ) const; 00079 00081 virtual const Medium * inside(const Point& r)const; 00082 00083 00084 virtual void clear(); 00085 virtual void generateResponse(); 00086 virtual void accept(DetectorVisitor&); 00087 virtual void readData(std::istream&); 00088 virtual void writeData(std::ostream&); 00089 virtual void notify(); 00090 00091 00093 virtual void printOn( std::ostream& os = std::cout ) const; 00095 virtual void printResponse(std::ostream& = std::cout) const; 00096 00097 // Methods associated with GUI and Printing and I/O 00098 00100 virtual void createDetectorView(gui::DisplayRep& v); 00102 virtual void createResponseView(gui::DisplayRep& v); 00103 00104 00105 private: 00106 00107 }; 00108 00109 00110 #endif 00111
1.2.3 written by Dimitri van Heesch,
© 1997-2000