saveScriptOutput.C

Go to the documentation of this file.
00001 #include "TString.h"
00002 #include "TSystem.h"
00003 #include "TGWindow.h"
00004 #include "TGClient.h"
00005 #include "TClass.h"
00006 #include "THashList.h"
00007 #include "TROOT.h"
00008 #include "TInterpreter.h"
00009 #include "TRootCanvas.h"
00010 #include "TCanvas.h"
00011 #include "TVirtualViewer3D.h"
00012 #include "TEnv.h"
00013 #include "TVirtualX.h"
00014 
00015 int saveScriptOutput(const char* script, const char* outdir, Bool_t compiled) {
00016    // Run script and save all windows to
00017    // outdir/script_0.png, outdir/script_1.png, ...
00018 
00019    enum EErrorCodes {
00020       kSuccess,
00021       kScriptDirNotFound,
00022       kCannotRunScript,
00023       kOutDirNotFound,
00024       kNumErrorCodes
00025    };
00026 
00027    TString pwd(gSystem->pwd());
00028    if (!gSystem->cd(gSystem->DirName(script)))
00029       return kScriptDirNotFound;
00030    Int_t err = 0;
00031    TString cmd(".x ");
00032    cmd += gSystem->BaseName(script);
00033    if (compiled)
00034       cmd += "+";
00035    if (!gROOT->IsBatch())
00036       gVirtualX->Sync(1);
00037    gROOT->ProcessLine(cmd, &err);
00038    if (err != TInterpreter::kNoError)
00039       return kCannotRunScript;
00040 
00041    gSystem->cd(pwd);
00042    if (!gSystem->cd(outdir))
00043       return kOutDirNotFound;
00044 
00045    UInt_t nCanvases = 0;
00046    if (gClient) {
00047       TClass* clRootCanvas = TClass::GetClass("TRootCanvas");
00048       TClass* clGMainFrame = TClass::GetClass("TGMainFrame");
00049       TGWindow* win = 0;
00050       TIter iWin(gClient->GetListOfWindows());
00051       while((win = (TGWindow*)iWin())) {
00052          const TObject* winGetParent = win->GetParent();
00053          Bool_t winIsMapped = kFALSE;
00054          if (winGetParent == gClient->GetDefaultRoot())
00055             winIsMapped = win->IsMapped();
00056          if (winIsMapped && win->InheritsFrom(clGMainFrame)) {
00057             win->MapRaised();
00058             Bool_t isRootCanvas = win->InheritsFrom(clRootCanvas);
00059             Bool_t hasEditor = false;
00060             if (isRootCanvas) {
00061                hasEditor = ((TRootCanvas*)win)->HasEditor();
00062             }
00063             if (isRootCanvas && !hasEditor) {
00064                TVirtualPad* pad = ((TRootCanvas*)win)->Canvas();
00065                if (!pad->HasViewer3D() || pad->GetViewer3D()->InheritsFrom("TViewer3DPad")) {
00066                   pad->SaveAs(TString::Format("%s_%d.png", gSystem->BaseName(script), nCanvases++));
00067                }
00068             } else
00069                win->SaveAs(TString::Format("%s_%d.png", gSystem->BaseName(script), nCanvases++));
00070          }
00071       }
00072    } else {
00073       // no gClient
00074       TVirtualPad* pad = 0;
00075       TIter iCanvas(gROOT->GetListOfCanvases());
00076       while ((pad = (TVirtualPad*) iCanvas())) {
00077          pad->SaveAs(TString::Format("%s_%d.png", gSystem->BaseName(script), nCanvases++));
00078       }
00079    }
00080    if (!gROOT->IsBatch() && !gEnv->GetValue("X11.Sync", 0))
00081       gVirtualX->Sync(0);
00082    return kSuccess;
00083 }

Generated on Tue Jul 5 14:12:07 2011 for ROOT_528-00b_version by  doxygen 1.5.1