Re: Redraw

Rene Brun (Rene.Brun@cern.ch)
Wed, 27 May 1998 08:13:40 +0200


Paul Nord wrote:
>
> Forgive a new user if this is a silly question...
> How do I make it redraw a 3D object?
>
> I'd like to create several buttons for "standard" detector views. These
> buttons would then bring the rotation of the display to the end view, the top
> view, or the size view.
>
> I can c1->GetView()->SetLatitude(0);
> But then c1->Draw(); doesn't change anything. However c1->x3d(); Will then
> view with the new rotation setting. And if you then quit x3d, the canvas will
> display in the new rotation.
>
> Thanks,
> Paul Nord

I suggest you look into the ATLFast example at URL:
http://root.cern.ch/root/Atlfast.html

You can download the source code and look in the class ATLFDisplay.
http://root.cern.ch/root/html/atlfast/src/ATLFDisplay.cxx.html

An example of event with buttons producing a front/top/side/all view
is available at
http://root.cern.ch/Pictures.html

The function below is extracted from ATLFDisplay. It is called
to set the viewing angles:

void ATLFDisplay::DrawView(Float_t theta, Float_t phi)
{
// Draw a view of ATLAS

gPad->SetFillColor(1);
// Display ATLAS outline
gPad->Clear();

Int_t iret;
TView *view = new TView(1);
view->SetRange(-m_Rin, -m_Rin, -m_Zin, m_Rin, m_Rin, m_Zin);

m_Nodin->Draw("same");

// add itself to the list
AppendPad();

//Loop on all makers to add their products to the pad
TIter next(gATLFast->Makers());
ATLFMaker *maker;
while ((maker = (ATLFMaker*)next())) {
maker->Draw();
}
view->SetView(phi, theta, 0, iret);
}

Rene Brun