Re: problem in TView::SetView

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Sep 09 1998 - 00:33:13 MEST


Shuwei,
When you call TGeometry::Draw or TNode::Draw, these functions
create a TView object in the pad, unless you Draw("same").
I have modified your macro below and suggested two possibilities.

Rene Brun

//method1
{
 new TCanvas("can","test",700,500);
 TPad *m_Pad = (TPad*)gPad;

 TGeometry *ams = new TGeometry("ams","ams.C");
 mat   = new TMaterial("mat16","VACUUM",0,0,0);
 AMSG  = new TBRIK("AMSG","AMSG","mat16",190,190,190);
 node1 = new TNode("AMSG1","AMSG1","AMSG");

   Float_t theta=90; Float_t phi=0;

   gPad->SetFillColor(10);
   gPad->Clear();

   ams->Draw();
   TView *view = gPad->GetView();
   view->SetRange(-800.0, -800.0, -520.0, 800.0, 800.0, 520.0);  
   Int_t iret;
   if ( theta != 9999 && phi != 9999 ) view->SetView(phi, theta, 0,
iret);
   gPad->Modified();
   gPad->Update();
}


//method2
{
 new TCanvas("can","test",700,500);
 TPad *m_Pad = (TPad*)gPad;

 TGeometry *ams = new TGeometry("ams","ams.C");
 mat   = new TMaterial("mat16","VACUUM",0,0,0);
 AMSG  = new TBRIK("AMSG","AMSG","mat16",190,190,190);
 node1 = new TNode("AMSG1","AMSG1","AMSG");

   Float_t theta=90; Float_t phi=0;

   gPad->SetFillColor(10);
   gPad->Clear();
   TView *view = new TView(1);
   view->SetRange(-800.0, -800.0, -520.0, 800.0, 800.0, 520.0);  
   ams->Draw("same");
   Int_t iret;
   if ( theta != 9999 && phi != 9999 ) view->SetView(phi, theta, 0,
iret);
   gPad->Modified();
   gPad->Update();
}





Ye Shuwei wrote:
> 
> Hi, ROOT team,
> 
>     When I use TView::SetView to change the view angle, it always cause
> " *** Break *** segmentation violation " in case TGeometry is drawn.
> 
>     Here is the macro I used:
> 
> {
>  new TCanvas("can","test",700,500);
>  TPad *m_Pad = (TPad*)gPad;
> 
>  TGeometry *ams = new TGeometry("ams","ams.C");
>  mat   = new TMaterial("mat16","VACUUM",0,0,0);
>  AMSG  = new TBRIK("AMSG","AMSG","mat16",190,190,190);
>  node1 = new TNode("AMSG1","AMSG1","AMSG");
> 
>    Float_t theta=90; Float_t phi=0;
> 
>    gPad->SetFillColor(10);
>    gPad->Clear();
> 
> //   gPad->SetPhi(-90-phi); gPad->SetTheta(90-theta);
> 
>    TView *view = new TView(1);
>    view->SetRange(-800.0, -800.0, -520.0, 800.0, 800.0, 520.0);
>    ams->Draw();
> 
>    Int_t iret;
>    if ( theta != 9999 && phi != 9999 ) view->SetView(phi, theta, 0, iret);
> 
>    gPad->Modified();
>    gPad->Update();
> }
> 
>    If I use gPad->SetPhi/SetTheta to change instead of view->SetView, it is
> OK.
> 
>     Did I invoke in a wrong way to change view angle ?
> 
>     Thanks in advance  --Shuwei



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:37 MET