Re: [ROOT] Calling macro from method

From: Rene Brun (Rene.Brun@cern.ch)
Date: Mon Aug 05 2002 - 18:31:16 MEST


Hi Christian,

Example:

//-----file mymacro.C
void mymacro(Myclass *a) {
  printf("fX=%g\n",a->getX());
}


and in ClassA::DoMacro(const char *macro, int n)
  gROOT->ProcessLine(Form("%s((ClassA*)0x%lx,%d",(Long_t)this,n));

Rene Brun


On Sun, 4 Aug 2002, cstrato wrote:

> Dear Rooters
> 
> Root offers the nice possibility to execute macros from user code. As
> far as I understand, this is ultimately done by calling
> gROOT->ProcessLine() or gInterpreter->ProcessLine().
> 
> My question is, if I can also call a macro from a class method, where
> the macro needs to have access to the class members. For example:
> 
> ClassA: public TNamed {
> private:
>       float fX;
>       float fY;
> public:
>       void DoSomething( int n);
>       void DoMacro(const char *macro, int n);
>       int    GetX() {return fX;}
>       void SetY(float y) {fY=y;}
> }
> 
> The main program does:
> Class *a=new ClassA();
> a->DoSomething(3);
> a->DoMacro(".x MyMacro.C+", 3);
> 
> where the macro MyMacro should be able to access both fX and n:
> MyMacro()  // or: MyMacro(int n) ?
> {
>       float x=this->GetX();  //??
>       float y=x*n;
>       this->SetY(y);
> }
> 
> Is this in principle possible, and what would be the best way to do it?
> 
> Thank you in advance for your help
> 
> Best regards
> Christian
> _._._._._._._._._._._._._._._._._
> C.h.r.i.s.t.i.a.n S.t.r.a.t.o.w.a
> V.i.e.n.n.a         A.u.s.t.r.i.a
> _._._._._._._._._._._._._._._._._
> 
> 



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:03 MET