#ifndef G4Lab_DigitsCollectionAccessor_h #define G4Lab_DigitsCollectionAccessor_h // Inheritance : #include #include class G4VDigiCollection; class G4VDigi; class G4LogicalVolume; class G4Colour; namespace Slash {namespace Core {class ISession;}} namespace Slash {namespace Core {class IWriter;}} #include #include #include namespace G4Lab { class DigitsCollectionBaseAccessor : public OnX::InventorAccessor { public: //Slash::Data::IAccessor virtual std::string name() const; virtual Slash::Core::IValue* findValue(Slash::Data::IAccessor::Data,const std::string&,void*); public: //Slash::Data::IVisualizer virtual void beginVisualize(); virtual void visualize(Slash::Data::IAccessor::Data,void*); public: DigitsCollectionBaseAccessor(Slash::Core::ISession&,const std::string& = ""); virtual ~DigitsCollectionBaseAccessor(); const std::string& DCName() const; protected: static G4VDigiCollection* getCollection(Slash::Core::IWriter&,const std::string&); static G4LogicalVolume* digiLogicalVolume(const G4VDigi&); static G4Transform3D* digiTransform3D(const G4VDigi&); static bool digiColor(const G4VDigi&,G4Colour&); void setProperties(G4VDigi&); protected: std::string fType; std::map* fAttDefs; std::string fDC; }; } #include #include #include namespace G4Lab { template class DigitsCollectionAccessor : public DigitsCollectionBaseAccessor { public: //Slash::Data::IAccessor virtual Slash::Data::IIterator* iterator() { const std::vector& args = iteratorArguments(); if(args.size()) fDC = args[0]; clearProperties(); fAttDefs = 0; G4VDigiCollection* vdc = getCollection(printer(),fDC); if(!vdc) return 0; typedef G4TDigiCollection Collection; Collection* dc = dynamic_cast(vdc); if(!dc) return 0; if(dc->entries()) { G4VDigi* digi = (*dc)[0]; if(digi) setProperties(*digi); } class Iterator : public virtual Slash::Data::IIterator { public: //Slash::Data::IIterator virtual Slash::Data::IAccessor::Data object() { if(fCurrent>=fVector.entries()) return 0; G4VDigi* digi = fVector[fCurrent]; return digi; } virtual void next() { fCurrent++;} virtual void* tag() { return 0;} public: Iterator(Collection& aVector):fVector(aVector),fCurrent(0) {} virtual ~Iterator() {} private: Collection& fVector; int fCurrent; }; return new Iterator(*dc); } public: DigitsCollectionAccessor(Slash::Core::ISession& aSession,const std::string& aName = "") :DigitsCollectionBaseAccessor(aSession,aName){} virtual ~DigitsCollectionAccessor(){} }; } #endif