174 for (
int i=0;i<3;i++) {
199 static Int_t pxold, pyold;
200 static Int_t px0, py0;
201 static Int_t linedrawn;
213 gPad->TAttLine::Modify();
214 ((
TPad *)
gPad)->AbsPixeltoXY(px,py,x0,y0);
216 pxold = px; pyold = py;
230 gPad->SetDoubleBuffer(1);
235 Double_t min[3],max[3],viewCenter[3],viewCenterNDC[3];
238 for (i =0; i<3;i++) viewCenter[i] = (max[i]+min[i])/2;
239 view->
WCtoNDC(viewCenter,viewCenterNDC);
241 Double_t center[3],pointNDC[3],size[3],oldSize[3];
243 pointNDC[0] = (x0+
x1)/2; pointNDC[1] = (y0+y1)/2;
244 pointNDC[2] = viewCenterNDC[2];
245 view->
NDCtoWC(pointNDC, center);
247 for (i =0; i<3;i++) oldSize[i] = size[i]= (max[i]-min[i])/2;
252 for (i =0; i<3;i++) size[i] = -1;
254 pointNDC[0] = x0; pointNDC[1] = y0;
256 view->
NDCtoWC(pointNDC, newEdge);
257 for (i =0; i<3;i++) {
259 if ( newSize/oldSize[i] > 0.002)
262 size[i] = oldSize[i];
265 pointNDC[0] =
x1; pointNDC[1] = y1;
267 view->
NDCtoWC(pointNDC, newEdge);
268 for (i =0; i<3;i++) {
270 if ( newSize/oldSize[i] > 0.002)
273 size[i] = oldSize[i];
276 if (fZooms == kMAXZOOMS) fZoom = 0;
278 memcpy(fZoomMin[fZooms],min,3*
sizeof(
Float_t));
279 memcpy(fZoomMax[fZooms],max,3*
sizeof(
Float_t));
282 for (i =0; i<3;i++) {
283 max[i] = center[i] + size[i];
284 min[i] = center[i] - size[i];
303 return (
char*)
"axis3d";
330 Double_t x1[3],
x2[3], y1[3], y2[3], z1[3], z2[3], av[24] ;
332 Int_t ix1, ix2, iy1, iy2, iz1, iz2;
337 Error(
"PaintAxis",
"no TView in current pad");
345 view->
AxisVertex(ang, av, ix1, ix2, iy1, iy2, iz1, iz2);
346 for (i = 1; i <= 8; ++i) {
347 r[i*3 - 3] = av[i*3 - 3] + av[i*3 - 2]*cosa;
348 r[i*3 - 2] = av[i*3 - 2]*sina;
349 r[i*3 - 1] = av[i*3 - 1];
371 memset(chopax,0,
sizeof(chopax));
374 ax[0] =
x1[0]; ax[1] =
x2[0];
375 ay[0] =
x1[1]; ay[1] =
x2[1];
376 logAx =
gPad->GetLogx();
379 if (
TMath::Abs(y1[0] - y2[0]) < epsil) y2[0] = y1[0];
380 ax[0] = y1[0]; ax[1] = y2[0];
381 ay[0] = y1[1]; ay[1] = y2[1];
382 logAx =
gPad->GetLogy();
385 ax[0] = z1[0]; ax[1] = z2[0];
386 ay[0] = z1[1]; ay[1] = z2[1];
387 strlcpy(chopax,
"SDH+=",10);
388 logAx =
gPad->GetLogz();
399 if (ax[0] > ax[1]) strlcpy(chopax,
"SDHV=+",10);
400 else strlcpy(chopax,
"SDHV=-",10);
404 strlcpy(chopax,
"SDH+=",10);
408 strlcat(chopax,
"G",10);
427 enum { kCenterTitle =
BIT(12) };
439 if (
fAxis[i].GetTimeDisplay()) {
440 strlcat(chopax,
"t",10);
441 if (strlen(
fAxis[i].GetTimeFormatOnly()) == 0) {
448 axis->
PaintAxis(ax[0], ay[0], ax[1], ay[1], bmin, bmax, ndiv, chopax);
459 if (!view &&
gPad) view =
gPad->GetView();
465 for (i =0; i<3;i++) min[i] = (max[i]+min[i])/2;
467 min[0] =
x[0]; min[1] =
x[1];
470 for (i=0;i<3;i++) point3D[i] =
x[i];
544 char achoice = toupper(axis[0]);
545 if (achoice ==
'X')
return 0;
546 if (achoice ==
'Y')
return 1;
547 if (achoice ==
'Z')
return 2;
557 if (ax < 0)
return 0;
567 if (ax < 0)
return 0;
577 if (ax < 0)
return 0;
587 if (ax < 0)
return 0;
597 if (ax < 0)
return 0;
607 if (ax < 0)
return 0;
617 if (ax < 0)
return 0;
627 if (ax < 0)
return 0;
634 Int_t i = AxisChoice(axis); \
636 if (i == -1) { i = 0; nax = 3;}\
637 for (Int_t ax=i;ax<nax+i;ax++)
724 if (!thisPad) thisPad =
gPad;
741 if (!thisPad) thisPad =
gPad;
742 if (thisPad && thisPad->
GetView() ) {
769 if (!thisPad) thisPad =
gPad;
770 if (thisPad && thisPad->
GetView()) {
775 if (o !=
l->Last()) {
static const double x2[5]
static const double x1[5]
R__EXTERN TStyle * gStyle
virtual Color_t GetLabelColor() const
virtual Int_t GetNdivisions() const
virtual Color_t GetAxisColor() const
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title.
virtual Float_t GetLabelOffset() const
virtual void SetAxisColor(Color_t color=1, Float_t alpha=1.)
Set color of the line axis and tick marks.
virtual void SetLabelSize(Float_t size=0.04)
Set size of axis labels.
virtual Style_t GetLabelFont() const
virtual void SetLabelOffset(Float_t offset=0.005)
Set distance between the axis and the labels.
virtual void SetLabelFont(Style_t font=62)
Set labels' font.
virtual Float_t GetLabelSize() const
virtual Float_t GetTickLength() const
virtual void ResetAttAxis(Option_t *option="")
Reset axis attributes.
virtual Float_t GetTitleOffset() const
virtual void SetTickLength(Float_t length=0.03)
Set tick mark length.
virtual void SetNdivisions(Int_t n=510, Bool_t optim=kTRUE)
Set the number of divisions for this axis.
virtual void SetLabelColor(Color_t color=1, Float_t alpha=1.)
Set color of labels.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
The 3D axis painter class.
virtual Float_t GetLabelSize(Option_t *axis="X") const
Get label size.
virtual void SetNdivisions(Int_t n=510, Option_t *axis="*")
Set number of divisions.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual void Paint(Option_t *option="")
Paint axis over 3D view on the TPad.
static TAxis3D * ToggleZoom(TVirtualPad *pad=0)
Turn ON / OFF the "Ruler" and "zoom mode" of the TAxis3D object attached to the current pad (if pad =...
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute distance from point px,py to a line.
void PaintAxis(TGaxis *axis, Float_t ang)
Draw the axis for TView object.
virtual void SetLabelOffset(Float_t offset=0.005, Option_t *axis="*")
Set label offset.
virtual void SetLabelFont(Style_t font=62, Option_t *axis="*")
Set label font.
static Double_t * PixeltoXYZ(Double_t px, Double_t py, Double_t *point3D, TView *view=0)
Convert "screen pixel" coordinates to some center of 3D WC coordinate if view and gPad present.
virtual Style_t GetLabelFont(Option_t *axis="X") const
Get label font.
static TAxis3D * GetPadAxis(TVirtualPad *pad=0)
Returns the "pad" Axis3D object pointer if any.
virtual Float_t GetLabelOffset(Option_t *axis="X") const
Get label offset.
virtual void SetAxisRange(Double_t xmin, Double_t xmax, Option_t *axis="*")
Set axis range.
virtual Float_t GetTickLength(Option_t *axis="X") const
Get tick mark length.
virtual void SetLabelSize(Float_t size=0.02, Option_t *axis="*")
Set label size.
Int_t AxisChoice(Option_t *axis) const
Return the axis index by its name.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save primitive as a C++ statement(s) on output stream out.
virtual Color_t GetAxisColor(Option_t *axis="X") const
Get axis color.
virtual void SetAxisColor(Color_t color=1, Option_t *axis="*")
Set axis color.
virtual Color_t GetLabelColor(Option_t *axis="X") const
Get label color.
virtual void Browse(TBrowser *b)
Add all 3 axes to the TBrowser.
Bool_t fZoomMode
The selected axis to play with.
virtual Float_t GetTitleOffset(Option_t *axis="X") const
Get title offset.
void InitSet()
Initialization.
void UseCurrentStyle()
Replace current attributes by current style.
virtual Int_t GetNdivisions(Option_t *axis="X") const
Get number of divisions.
static const char * fgRulerName
virtual void SetTickLength(Float_t length=0.02, Option_t *axis="*")
Set tick mark length.
static TAxis3D * ToggleRulers(TVirtualPad *pad=0)
Turn ON / OFF the "Ruler", TAxis3D object attached to the current pad.
virtual void Copy(TObject &hnew) const
Copy axis3d.
virtual char * GetObjectInfo(Int_t px, Int_t py) const
Dummy method returns the const char * to "axis3d".
virtual void SetLabelColor(Color_t color=1, Option_t *axis="*")
Set label color.
TAxis3D()
Normal constructor.
virtual void SetTitleOffset(Float_t offset=1, Option_t *axis="*")
Set title offset.
Class to manage histogram axis.
virtual void SaveAttributes(std::ostream &out, const char *name, const char *subname)
Save axis attributes as C++ statement(s) on output stream out.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual Int_t FindBin(Double_t x)
Find bin number corresponding to abscissa x.
virtual void Set(Int_t nbins, Double_t xmin, Double_t xmax)
Initialize axis with fix bins.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Compute distance from point px,py to an axis.
const char * GetTitle() const
Returns title of object.
virtual void SetRange(Int_t first=0, Int_t last=0)
Set the viewing range for the axis using bin numbers.
Using a TBrowser one can browse all ROOT objects.
void SetTimeFormat(const char *tformat)
Change the format used for time plotting.
virtual void PaintAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, Double_t &wmin, Double_t &wmax, Int_t &ndiv, Option_t *chopt="", Double_t gridlength=0, Bool_t drawGridOnly=kFALSE)
Control function to draw an axis.
void SetTitleOffset(Float_t titleoffset=1)
void SetLabelFont(Int_t labelfont)
void SetTitleSize(Float_t titlesize)
virtual void SetTitle(const char *title="")
Change the title of the axis.
void SetLabelOffset(Float_t labeloffset)
void SetLabelColor(Int_t labelcolor)
void SetTickSize(Float_t ticksize)
void SetLabelSize(Float_t labelsize)
void SetOption(Option_t *option="")
To set axis options.
The TNamed class is the base class for all named ROOT classes.
virtual void Copy(TObject &named) const
Copy this to obj.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual TObject * FindObject(const char *name) const
Must be redefined in derived classes.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
@ kCanDelete
if object in a list can be deleted
The most important graphics class in the ROOT system.
void SetAxisColor(Color_t color=1, Option_t *axis="X")
Set color to draw the axis line and tick marks.
void SetTitleFont(Style_t font=62, Option_t *axis="X")
void SetTitleOffset(Float_t offset=1, Option_t *axis="X")
Specify a parameter offset to control the distance between the axis and the axis title.
void SetTitleColor(Color_t color=1, Option_t *axis="X")
void SetLabelFont(Style_t font=62, Option_t *axis="X")
Set font number used to draw axis labels.
void SetLabelOffset(Float_t offset=0.005, Option_t *axis="X")
Set offset between axis and axis labels.
void SetTitleSize(Float_t size=0.02, Option_t *axis="X")
void SetTickLength(Float_t length=0.03, Option_t *axis="X")
Set the tick marks length for an axis.
void SetNdivisions(Int_t n=510, Option_t *axis="X")
Set the number of divisions to draw an axis.
void SetLabelColor(Color_t color=1, Option_t *axis="X")
Set axis labels color.
void SetLabelSize(Float_t size=0.04, Option_t *axis="X")
Set size of axis labels.
virtual Double_t * GetRmax()=0
virtual void SetAxisNDC(const Double_t *x1, const Double_t *x2, const Double_t *y1, const Double_t *y2, const Double_t *z1, const Double_t *z2)=0
virtual Double_t * GetRmin()=0
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)=0
virtual void NDCtoWC(const Float_t *pn, Float_t *pw)=0
virtual void GetRange(Float_t *min, Float_t *max)=0
virtual void SetRange(const Double_t *min, const Double_t *max)=0
virtual void AxisVertex(Double_t ang, Double_t *av, Int_t &ix1, Int_t &ix2, Int_t &iy1, Int_t &iy2, Int_t &iz1, Int_t &iz2)=0
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual void Modified(Bool_t flag=1)=0
virtual TList * GetListOfPrimitives() const =0
virtual TView * GetView() const =0
Short_t Max(Short_t a, Short_t b)
LongDouble_t Power(LongDouble_t x, LongDouble_t y)