Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /// \file persistency/gdml/G03/src/G03ColorWriter.cc 27 /// \brief Implementation of the G03ColorWriter class 28 // 29 // 30 // -------------------------------------------------------------------- 31 32 #include "G03ColorWriter.hh" 33 34 #include "G4LogicalVolume.hh" 35 #include "G4VisAttributes.hh" 36 37 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 38 39 G03ColorWriter::G03ColorWriter() : G4GDMLWriteStructure() {} 40 41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 42 43 G03ColorWriter::~G03ColorWriter() {} 44 45 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 46 47 void G03ColorWriter::AddExtension(xercesc::DOMElement* volumeElement, 48 const G4LogicalVolume* const vol) 49 { 50 const G4VisAttributes* vis = vol->GetVisAttributes(); 51 if (vis) { 52 ColorWrite(volumeElement, vis); 53 } 54 } 55 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 57 58 void G03ColorWriter::ExtensionWrite(xercesc::DOMElement* element) 59 { 60 G4cout << "G4GDML: Writing GDML extension..." << G4endl; 61 62 // Mandatory calls the -first- time an extension is created 63 // 64 extElement = NewElement("extension"); 65 element->appendChild(extElement); 66 } 67 68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 69 70 void G03ColorWriter::ColorWrite(xercesc::DOMElement* volumeElement, 71 const G4VisAttributes* const att) 72 { 73 G4bool book = BookAttribute(att); 74 G4Color color = att->GetColor(); 75 76 const G4String& name = GenerateName("test_color", att); 77 G4double r = color.GetRed(), g = color.GetGreen(), b = color.GetBlue(), a = color.GetAlpha(); 78 79 if (book) { 80 xercesc::DOMElement* colElement = NewElement("color"); 81 colElement->setAttributeNode(NewAttribute("name", name)); 82 colElement->setAttributeNode(NewAttribute("R", r)); 83 colElement->setAttributeNode(NewAttribute("G", g)); 84 colElement->setAttributeNode(NewAttribute("B", b)); 85 colElement->setAttributeNode(NewAttribute("A", a)); 86 extElement->appendChild(colElement); 87 } 88 89 xercesc::DOMElement* colorrefElement = NewElement("colorref"); 90 colorrefElement->setAttributeNode(NewAttribute("ref", name)); 91 volumeElement->appendChild(colorrefElement); 92 93 G4cout << "Written color attribute (R,G,B,A) is: " << r << ", " << g << ", " << b << ", " << a 94 << " !" << G4endl; 95 } 96 97 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 98 99 G4bool G03ColorWriter::BookAttribute(const G4VisAttributes* const ref) 100 { 101 G4bool booking = true; 102 std::vector<const G4VisAttributes*>::const_iterator pos = 103 std::find(fAttribs.begin(), fAttribs.end(), ref); 104 105 if (pos != fAttribs.end()) { 106 booking = false; 107 } 108 else { 109 fAttribs.push_back(ref); 110 } 111 112 return booking; 113 } 114