virtual TGeoVolume* MakeCopyVolume(TGeoShape *newshape) { // make a copy of this volume. build a volume with same name, shape and medium TGeoVolume *vol = _copyVol(newshape); vol->SetVisibility(IsVisible()); vol->SetLineColor(GetLineColor()); vol->SetLineStyle(GetLineStyle()); vol->SetLineWidth(GetLineWidth()); vol->SetFillColor(GetFillColor()); vol->SetFillStyle(GetFillStyle()); vol->SetField(fField); if (fFinder) vol->SetFinder(fFinder); CloneNodesAndConnect(vol); ((TObject*) vol)->SetBit(kVolumeClone); return vol; }
virtual TGeoVolume* CloneVolume() const { TGeoVolume *vol = _copyVol(fShape); Int_t i; // copy volume attributes vol->SetLineColor(GetLineColor()); vol->SetLineStyle(GetLineStyle()); vol->SetLineWidth(GetLineWidth()); vol->SetFillColor(GetFillColor()); vol->SetFillStyle(GetFillStyle()); // copy other attributes Int_t nbits = 8 * sizeof(UInt_t); for (i = 0; i < nbits; i++) vol->SetAttBit(1 << i, TGeoAtt::TestAttBit(1 << i)); for (i = 14; i < 24; i++) vol->SetBit(1 << i, this->TGeoVolume::TestBit(1 << i)); // copy field vol->SetField(fField); // Set bits for (i = 0; i < nbits; i++) vol->SetBit(1 << i, this->TGeoVolume::TestBit(1 << i)); vol->SetBit(kVolumeClone); // copy nodes // CloneNodesAndConnect(vol); vol->MakeCopyNodes(this); // if volume is divided, copy finder vol->SetFinder(fFinder); // copy voxels if (fVoxels) { TGeoVoxelFinder *voxels = new TGeoVoxelFinder(vol); vol->SetVoxelFinder(voxels); } // copy option, uid vol->SetOption(fOption); vol->SetNumber(fNumber); vol->SetNtotal(fNtotal); return vol; }