Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TLine.cxx
Go to the documentation of this file.
1// @(#)root/graf:$Id$
2// Author: Rene Brun 12/12/94
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#include <cstdlib>
13
14#include <iostream>
15#include "TROOT.h"
16#include "TBuffer.h"
17#include "TLine.h"
18#include "TVirtualPad.h"
19#include "TClass.h"
20#include "TVirtualPadPainter.h"
21#include "TCanvasImp.h"
22#include "TMath.h"
23#include "TPoint.h"
24
25
26/** \class TLine
27\ingroup BasicGraphics
28
29Use the TLine constructor to create a simple line.
30
31~~~ {.cpp}
32 TLine(Double_t x1,Double_t y1,Double_t x2,Double_t y2)
33~~~
34
35`x1`, `y1`, `x2`, `y2` are the coordinates of the first and the second point.
36
37_**Example**_:
38
39~~~ {.cpp}
40 root[] l = new TLine(0.2,0.2,0.8,0.3)
41 root[] l->Draw()
42~~~
43*/
44
45
46////////////////////////////////////////////////////////////////////////////////
47/// Line normal constructor.
48
54
55
56////////////////////////////////////////////////////////////////////////////////
57/// Line copy constructor.
58
60{
61 line.TLine::Copy(*this);
62}
63
64////////////////////////////////////////////////////////////////////////////////
65/// Assignment operator
66
68{
69 src.TLine::Copy(*this);
70 return *this;
71}
72
73////////////////////////////////////////////////////////////////////////////////
74/// Copy this line to line.
75
76void TLine::Copy(TObject &obj) const
77{
78 TObject::Copy(obj);
79 TAttLine::Copy(((TLine&)obj));
80 ((TLine&)obj).fX1 = fX1;
81 ((TLine&)obj).fY1 = fY1;
82 ((TLine&)obj).fX2 = fX2;
83 ((TLine&)obj).fY2 = fY2;
84}
85
86////////////////////////////////////////////////////////////////////////////////
87/// Compute distance from point px,py to a line.
88
90{
91 if (!gPad) return 9999;
92 if (!TestBit(kLineNDC)) return DistancetoLine(px,py,gPad->XtoPad(fX1),gPad->YtoPad(fY1),gPad->XtoPad(fX2),gPad->YtoPad(fY2));
93 Double_t x1 = gPad->GetX1() + fX1*(gPad->GetX2()-gPad->GetX1());
94 Double_t y1 = gPad->GetY1() + fY1*(gPad->GetY2()-gPad->GetY1());
95 Double_t x2 = gPad->GetX1() + fX2*(gPad->GetX2()-gPad->GetX1());
96 Double_t y2 = gPad->GetY1() + fY2*(gPad->GetY2()-gPad->GetY1());
97 return DistancetoLine(px,py,x1,y1,x2,y2);
98}
99
100////////////////////////////////////////////////////////////////////////////////
101/// Draw this line with new coordinates.
102
104{
105 TLine *newline = new TLine(x1, y1, x2, y2);
107 newline->SetBit(kCanDelete);
108 newline->AppendPad();
109 return newline;
110}
111
112////////////////////////////////////////////////////////////////////////////////
113/// Draw this line with new coordinates in NDC.
114
121
122////////////////////////////////////////////////////////////////////////////////
123/// Execute action corresponding to one event.
124/// This member function is called when a line is clicked with the locator
125///
126/// If Left button clicked on one of the line end points, this point
127/// follows the cursor until button is released.
128///
129/// if Middle button clicked, the line is moved parallel to itself
130/// until the button is released.
131
133{
134 if (!gPad || !gPad->IsEditable()) return;
135
136 constexpr Int_t kMaxDiff = 20;
137 static Double_t oldX1, oldY1, oldX2, oldY2;
139
140 auto &parent = *gPad;
141
142 Bool_t opaque = parent.OpaqueMoving();
143
144 auto paint = [this, &parent]() {
145 auto pp = parent.GetPainter();
146 pp->SetAttLine(*this);
147 if (TestBit(kLineNDC))
148 pp->DrawLineNDC(GetX1(), GetY1(), GetX2(), GetY2());
149 else
150 pp->DrawLine(parent.XtoPad(GetX1()), parent.YtoPad(GetY1()), parent.XtoPad(GetX2()), parent.YtoPad(GetY2()));
151 };
152
153 auto set_coord = [this](Int_t _x1, Int_t _y1, Int_t _x2, Int_t _y2) {
155 if (selectPoint & 1) {
156 SetX1(GetXCoord(_x1, isndc, kTRUE));
158 }
159 if (selectPoint & 2) {
160 SetX2(GetXCoord(_x2, isndc, kTRUE));
162 }
163 if (TestBit(kVertical)) {
164 if (selectPoint & 1)
165 SetX2(GetX1());
166 else
167 SetX1(GetX2());
168 }
169 if (TestBit(kHorizontal)) {
170 if (selectPoint & 1)
171 SetY2(GetY1());
172 else
173 SetY1(GetY2());
174 }
175 };
176
177 Int_t px1, py1, px2, py2;
178
179 if (TestBit(kLineNDC)) {
180 px1 = parent.UtoAbsPixel(GetX1());
181 py1 = parent.VtoAbsPixel(GetY1());
182 px2 = parent.UtoAbsPixel(GetX2());
183 py2 = parent.VtoAbsPixel(GetY2());
184 } else {
185 px1 = parent.XtoAbsPixel(parent.XtoPad(GetX1()));
186 py1 = parent.YtoAbsPixel(parent.YtoPad(GetY1()));
187 px2 = parent.XtoAbsPixel(parent.XtoPad(GetX2()));
188 py2 = parent.YtoAbsPixel(parent.YtoPad(GetY2()));
189 }
190
191 switch (event) {
192
193 case kArrowKeyPress:
194 case kButton1Down:
195 oldX1 = GetX1();
196 oldY1 = GetY1();
197 oldX2 = GetX2();
198 oldY2 = GetY2();
199
200 // No break !!!
201
202 case kMouseMotion: {
203 //simply take sum of pixels differences
204 if (abs(px1 - px) + abs(py1 - py) < kMaxDiff) {
205 selectPoint = 1;
206 parent.SetCursor(kPointer);
207 } else if (abs(px2 - px) + abs(py2 - py) < kMaxDiff) {
208 selectPoint = 2;
209 parent.SetCursor(kPointer);
210 } else {
211 selectPoint = 3;
212 pxold = px;
213 pyold = py;
214 parent.SetCursor(kMove);
215 }
216
217 break;
218 }
219
220 case kArrowKeyRelease:
221 case kButton1Motion:
222 if (!opaque)
223 paint();
224 if (selectPoint == 1) {
225 set_coord(px, py, 0, 0);
226 } else if (selectPoint == 2) {
227 set_coord(0, 0, px, py);
228 px2 = px;
229 py2 = py;
230 } else if (selectPoint == 3) {
231 set_coord(px1 + px - pxold, py1 + py - pyold, px2 + px - pxold, py2 + py - pyold);
232 pxold = px;
233 pyold = py;
234 }
235 if (!opaque)
236 paint();
237 else {
238 char guide = selectPoint == 3 ? 'i' : '\0';
239 if ((selectPoint == 1) || (selectPoint == 2)) {
240 static const char GUIDES[2][2][2] = {
241 { { '4', '1' }, { '3', '2' } },
242 { { '2', '3' }, { '1', '4' } }
243 };
244 int x_idx = GetX1() > GetX2() ? 1 : 0;
245 int y_idx = GetY1() > GetY2() ? 1 : 0;
247 }
248 if (guide)
249 parent.ShowGuidelines(this, event, guide, true);
250 parent.ModifiedUpdate();
251 }
252 break;
253
254 case kButton1Up:
255
256 if (gROOT->IsEscaped()) {
257 gROOT->SetEscape(kFALSE);
258 if (opaque) {
259 SetX1(oldX1);
260 SetY1(oldY1);
261 SetX2(oldX2);
262 SetY2(oldY2);
263 parent.ShowGuidelines(this, event);
264 parent.ModifiedUpdate();
265 }
266 break;
267 }
268 if (opaque)
269 parent.ShowGuidelines(this, event);
270 else
271 parent.ModifiedUpdate();
272 selectPoint = 0;
273 break;
274
275 case kButton1Locate:
276 // Sergey: code is never used, has to be removed in ROOT7
277 ExecuteEvent(kButton1Down, px, py);
278 while (true) {
279 px = py = 0;
280 event = parent.GetCanvasImp()->RequestLocator(px, py);
281
283
284 if (event != -1) { // button is released
285 ExecuteEvent(kButton1Up, px, py);
286 return;
287 }
288 }
289 }
290}
291
292////////////////////////////////////////////////////////////////////////////////
293/// Get the slope of this TLine
294
296{
297 Double_t m = 0;
298 if (fX2 == fX1) {
299 Error("GetSlope", "This line is vertical. The slope in undefined");
300 m = TMath::Infinity();
301 } else {
302 m = (fY2-fY1)/(fX2-fX1);
303 }
304 return m;
305}
306
307////////////////////////////////////////////////////////////////////////////////
308/// Get the Y-Intercept of this TLine
309
311{
312 Double_t b = 0;
313 if (fX2 == fX1) {
314 Error("GetYIntercept", "This line is vertical. The Y-Intercept in undefined");
315 b = TMath::Infinity();
316 } else {
317 b = (fY1*fX2-fY2*fX1)/(fX2-fX1);
318 }
319 return b;
320}
321
322////////////////////////////////////////////////////////////////////////////////
323/// List this line with its attributes.
324
325void TLine::ls(Option_t *) const
326{
328 printf("%s X1=%f Y1=%f X2=%f Y2=%f\n",IsA()->GetName(),fX1,fY1,fX2,fY2);
329}
330
331////////////////////////////////////////////////////////////////////////////////
332/// Paint this line with its current attributes.
333
335{
336 if (!gPad) return;
338 else PaintLine(gPad->XtoPad(fX1),gPad->YtoPad(fY1),gPad->XtoPad(fX2),gPad->YtoPad(fY2));
339}
340
341////////////////////////////////////////////////////////////////////////////////
342/// Draw this line with new coordinates.
343
345{
346 if (!gPad) return;
347 TAttLine::Modify(); //Change line attributes only if necessary
348 gPad->PaintLine(x1,y1,x2,y2);
349}
350
351////////////////////////////////////////////////////////////////////////////////
352/// Draw this line with new coordinates in NDC.
353
355{
356 if (!gPad) return;
357 TAttLine::Modify(); //Change line attributes only if necessary
358 gPad->PaintLineNDC(u1,v1,u2,v2);
359}
360
361////////////////////////////////////////////////////////////////////////////////
362/// Dump this line with its attributes.
363
365{
366 printf("%s X1=%f Y1=%f X2=%f Y2=%f",IsA()->GetName(),fX1,fY1,fX2,fY2);
367 if (GetLineColor() != 1) printf(" Color=%d",GetLineColor());
368 if (GetLineStyle() != 1) printf(" Style=%d",GetLineStyle());
369 if (GetLineWidth() != 1) printf(" Width=%d",GetLineWidth());
370 printf("\n");
371}
372
373////////////////////////////////////////////////////////////////////////////////
374/// Save primitive as a C++ statement(s) on output stream out
375
376void TLine::SavePrimitive(std::ostream &out, Option_t *option)
377{
378 SavePrimitiveConstructor(out, Class(), "line", TString::Format("%g, %g, %g, %g", fX1, fY1, fX2, fY2), kFALSE);
379
380 SaveLineAttributes(out, "line", 1, 1, 1);
381
382 if (TestBit(kLineNDC))
383 out << " line->SetNDC();\n";
384
385 if (TestBit(kVertical))
386 out << " line->SetBit(TLine::kVertical);\n";
387
388 if (TestBit(kHorizontal))
389 out << " line->SetBit(TLine::kHorizontal);\n";
390
391 SavePrimitiveDraw(out, "line", option);
392}
393
394////////////////////////////////////////////////////////////////////////////////
395/// Check whether this line is to be drawn horizontally.
396
401
402////////////////////////////////////////////////////////////////////////////////
403/// Check whether this line is to be drawn vertically.
404
406{
407 return TestBit(kVertical);
408}
409
410////////////////////////////////////////////////////////////////////////////////
411/// Set NDC mode on if isNDC = kTRUE, off otherwise
412
417
418////////////////////////////////////////////////////////////////////////////////
419/// Force the line to be drawn horizontally.
420/// Makes fY2 equal to fY1. The line length is kept.
421/// TArrow and TGaxis also get this function by inheritance.
422
423void TLine::SetHorizontal(Bool_t set /*= kTRUE*/)
424{
425 SetBit(kHorizontal, set);
426 if (set && gPad) {
428 Int_t px1 = gPad->XtoAbsPixel(fX1);
429 Int_t px2 = gPad->XtoAbsPixel(fX2);
430 Int_t py1 = gPad->YtoAbsPixel(fY1);
431 Int_t py2 = gPad->YtoAbsPixel(fY2);
432 Int_t l = Int_t(TMath::Sqrt((px2-px1)*(px2-px1)+(py2-py1)*(py2-py1)));
433 if (fX2 >= fX1) fX2 = gPad->AbsPixeltoX(px1+l);
434 else fX2 = gPad->AbsPixeltoX(px1-l);
435 fY2 = fY1;
436 }
437}
438
439////////////////////////////////////////////////////////////////////////////////
440/// Force the line to be drawn vertically.
441/// Makes fX2 equal to fX1. The line length is kept.
442/// TArrow and TGaxis also get this function by inheritance.
443
444void TLine::SetVertical(Bool_t set /*= kTRUE*/)
445{
446 SetBit(kVertical, set);
447 if (set && gPad) {
449 Int_t px1 = gPad->XtoAbsPixel(fX1);
450 Int_t px2 = gPad->XtoAbsPixel(fX2);
451 Int_t py1 = gPad->YtoAbsPixel(fY1);
452 Int_t py2 = gPad->YtoAbsPixel(fY2);
453 Int_t l = Int_t(TMath::Sqrt((px2-px1)*(px2-px1)+(py2-py1)*(py2-py1)));
454 if (fY2 >= fY1) fY2 = gPad->AbsPixeltoY(py1-l);
455 else fY2 = gPad->AbsPixeltoY(py1+l);
456 fX2 = fX1;
457 }
458}
459
460////////////////////////////////////////////////////////////////////////////////
461/// Stream an object of class TLine.
462
464{
465 if (R__b.IsReading()) {
467 Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
468 if (R__v > 1) {
469 R__b.ReadClassBuffer(TLine::Class(), this, R__v, R__s, R__c);
470 return;
471 }
472 //====process old versions before automatic schema evolution
475 Float_t x1,y1,x2,y2;
476 R__b >> x1; fX1 = x1;
477 R__b >> y1; fY1 = y1;
478 R__b >> x2; fX2 = x2;
479 R__b >> y2; fY2 = y2;
480 //====end of old versions
481
482 } else {
483 R__b.WriteClassBuffer(TLine::Class(),this);
484 }
485}
486////////////////////////////////////////////////////////////////////////////////
487/// Return the bounding Box of the Line
488
490{
491 Rectangle_t bbox{0, 0, 0, 0};
492 if (gPad) {
493 Int_t px1 = TestBit(kLineNDC) ? gPad->UtoPixel(fX1) : gPad->XtoPixel(fX1);
494 Int_t px2 = TestBit(kLineNDC) ? gPad->UtoPixel(fX2) : gPad->XtoPixel(fX2);
495 Int_t py1 = TestBit(kLineNDC) ? gPad->VtoPixel(fY1) : gPad->YtoPixel(fY1);
496 Int_t py2 = TestBit(kLineNDC) ? gPad->VtoPixel(fY2) : gPad->YtoPixel(fY2);
497
498 if (px1 > px2)
499 std::swap(px1, px2);
500 if (py1 > py2)
501 std::swap(py1, py2);
502
503 bbox.fX = px1;
504 bbox.fY = py1;
505 bbox.fWidth = px2 - px1;
506 bbox.fHeight = py2 - py1;
507 }
508 return bbox;
509}
510
511////////////////////////////////////////////////////////////////////////////////
512/// Set X coordinate of the center of the BoundingBox
513
515{
516 Double_t w2 = 0.5 * (fX2 - fX1);
518 SetX1(midx - w2);
519 SetX2(midx + w2);
520}
521
522////////////////////////////////////////////////////////////////////////////////
523/// Set Y coordinate of the center of the BoundingBox
524
526{
527 Double_t h2 = 0.5 * (fY2 - fY1);
529 SetY1(midy - h2);
530 SetY2(midy + h2);
531}
532
533////////////////////////////////////////////////////////////////////////////////
534/// Set left hand side of BoundingBox to a value
535/// (resize in x direction on left)
536
538{
539 auto xx = GetXCoord(x, TestBit(kLineNDC));
540 if (fX2 > fX1)
541 SetX1(xx);
542 else
543 SetX2(xx);
544}
545
546////////////////////////////////////////////////////////////////////////////////
547/// Set right hand side of BoundingBox to a value
548/// (resize in x direction on right)
549
551{
552 auto xx = GetXCoord(x, TestBit(kLineNDC));
553 if (fX2 > fX1)
554 SetX2(xx);
555 else
556 SetX1(xx);
557}
558
559////////////////////////////////////////////////////////////////////////////////
560/// Set top of BoundingBox to a value (resize in y direction on top)
561
563{
564 auto yy = GetYCoord(y, TestBit(kLineNDC));
565 if (fY2 > fY1)
566 SetY2(yy);
567 else
568 SetY1(yy);
569}
570
571////////////////////////////////////////////////////////////////////////////////
572/// Set bottom of BoundingBox to a value
573/// (resize in y direction on bottom)
574
576{
577 auto yy = GetYCoord(y, TestBit(kLineNDC));
578 if (fY2 > fY1)
579 SetY1(yy);
580 else
581 SetY2(yy);
582}
@ kMouseMotion
Definition Buttons.h:23
@ kArrowKeyRelease
Definition Buttons.h:21
@ kButton1Motion
Definition Buttons.h:20
@ kButton1Up
Definition Buttons.h:19
@ kArrowKeyPress
Definition Buttons.h:21
@ kButton1Down
Definition Buttons.h:17
@ kButton1Locate
Definition Buttons.h:22
@ kMove
Definition GuiTypes.h:375
@ kPointer
Definition GuiTypes.h:376
#define b(i)
Definition RSha256.hxx:100
int Int_t
Signed integer 4 bytes (int)
Definition RtypesCore.h:59
short Version_t
Class version identifier (short)
Definition RtypesCore.h:79
float Float_t
Float 4 bytes (float)
Definition RtypesCore.h:71
constexpr Bool_t kFALSE
Definition RtypesCore.h:108
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
const char Option_t
Option string (const char)
Definition RtypesCore.h:80
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t option
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char DrawLine
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
Option_t Option_t TPoint TPoint const char y1
#define gROOT
Definition TROOT.h:417
#define gPad
Abstract base class for elements drawn in the editor.
Definition TAttBBox2D.h:19
Double_t GetYCoord(const Int_t y, Bool_t is_ndc=kFALSE, Bool_t is_absolute=kFALSE)
Can return ndc or normal values Also one can specify to use absolute coordinates for input parameter ...
Double_t GetXCoord(const Int_t x, Bool_t is_ndc=kFALSE, Bool_t is_absolute=kFALSE)
Return user X coordinate for pixel X value Can return ndc or normal values Also one can specify to us...
Line Attributes class.
Definition TAttLine.h:21
virtual void Streamer(TBuffer &)
virtual Color_t GetLineColor() const
Return the line color.
Definition TAttLine.h:36
virtual Width_t GetLineWidth() const
Return the line width.
Definition TAttLine.h:38
virtual Style_t GetLineStyle() const
Return the line style.
Definition TAttLine.h:37
virtual void Modify()
Change current line attributes if necessary.
Definition TAttLine.cxx:246
void Copy(TAttLine &attline) const
Copy this line attributes to a new TAttLine.
Definition TAttLine.cxx:176
Int_t DistancetoLine(Int_t px, Int_t py, Double_t xp1, Double_t yp1, Double_t xp2, Double_t yp2)
Compute distance from point px,py to a line.
Definition TAttLine.cxx:210
virtual void SaveLineAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t widdef=1)
Save line attributes as C++ statement(s) on output stream out.
Definition TAttLine.cxx:289
Buffer base class used for serializing objects.
Definition TBuffer.h:43
Use the TLine constructor to create a simple line.
Definition TLine.h:22
void ls(Option_t *option="") const override
List this line with its attributes.
Definition TLine.cxx:325
virtual void SetY2(Double_t y2)
Definition TLine.h:70
static TClass * Class()
Double_t fY1
Y of 1st point.
Definition TLine.h:26
Double_t fX1
X of 1st point.
Definition TLine.h:25
Double_t GetYIntercept() const
Get the Y-Intercept of this TLine.
Definition TLine.cxx:310
virtual void SetX2(Double_t x2)
Definition TLine.h:68
@ kLineNDC
Use NDC coordinates.
Definition TLine.h:33
@ kHorizontal
Line is horizontal.
Definition TLine.h:35
@ kVertical
Line is vertical.
Definition TLine.h:34
Bool_t IsVertical()
Check whether this line is to be drawn vertically.
Definition TLine.cxx:405
virtual TLine * DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw this line with new coordinates.
Definition TLine.cxx:103
void SetBBoxY1(const Int_t y) override
Set top of BoundingBox to a value (resize in y direction on top)
Definition TLine.cxx:562
void SetVertical(Bool_t set=kTRUE)
Force the line to be drawn vertically.
Definition TLine.cxx:444
virtual void PaintLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw this line with new coordinates.
Definition TLine.cxx:344
Double_t GetSlope() const
Get the slope of this TLine.
Definition TLine.cxx:295
TLine()
Definition TLine.h:38
void SetBBoxCenterY(const Int_t y) override
Set Y coordinate of the center of the BoundingBox.
Definition TLine.cxx:525
void SetBBoxX2(const Int_t x) override
Set right hand side of BoundingBox to a value (resize in x direction on right)
Definition TLine.cxx:550
virtual TLine * DrawLineNDC(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw this line with new coordinates in NDC.
Definition TLine.cxx:115
Bool_t IsHorizontal()
Check whether this line is to be drawn horizontally.
Definition TLine.cxx:397
Double_t GetY1() const
Definition TLine.h:52
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
Definition TLine.cxx:376
void Copy(TObject &line) const override
Copy this line to line.
Definition TLine.cxx:76
Double_t GetX2() const
Definition TLine.h:51
void Print(Option_t *option="") const override
Dump this line with its attributes.
Definition TLine.cxx:364
Double_t fX2
X of 2nd point.
Definition TLine.h:27
void SetBBoxX1(const Int_t x) override
Set left hand side of BoundingBox to a value (resize in x direction on left)
Definition TLine.cxx:537
void Paint(Option_t *option="") override
Paint this line with its current attributes.
Definition TLine.cxx:334
void SetBBoxY2(const Int_t y) override
Set bottom of BoundingBox to a value (resize in y direction on bottom)
Definition TLine.cxx:575
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a line.
Definition TLine.cxx:89
virtual void SetX1(Double_t x1)
Definition TLine.h:67
TLine & operator=(const TLine &src)
Assignment operator.
Definition TLine.cxx:67
Double_t fY2
Y of 2nd point.
Definition TLine.h:28
virtual void PaintLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2)
Draw this line with new coordinates in NDC.
Definition TLine.cxx:354
void Streamer(TBuffer &) override
Stream an object of class TLine.
Definition TLine.cxx:463
void SetBBoxCenterX(const Int_t x) override
Set X coordinate of the center of the BoundingBox.
Definition TLine.cxx:514
TClass * IsA() const override
Definition TLine.h:79
virtual void SetY1(Double_t y1)
Definition TLine.h:69
virtual void SetNDC(Bool_t isNDC=kTRUE)
Set NDC mode on if isNDC = kTRUE, off otherwise.
Definition TLine.cxx:413
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
Definition TLine.cxx:132
Double_t GetX1() const
Definition TLine.h:50
Rectangle_t GetBBox() override
Return the bounding Box of the Line.
Definition TLine.cxx:489
void SetHorizontal(Bool_t set=kTRUE)
Force the line to be drawn horizontally.
Definition TLine.cxx:423
Double_t GetY2() const
Definition TLine.h:53
Mother of all ROOT objects.
Definition TObject.h:42
virtual const char * GetName() const
Returns name of object.
Definition TObject.cxx:462
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition TObject.h:204
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
Definition TObject.cxx:997
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition TObject.cxx:888
virtual void Copy(TObject &object) const
Copy this to obj.
Definition TObject.cxx:159
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition TObject.cxx:1098
static void SavePrimitiveDraw(std::ostream &out, const char *variable_name, Option_t *option=nullptr)
Save invocation of primitive Draw() method Skipped if option contains "nodraw" string.
Definition TObject.cxx:845
static void SavePrimitiveConstructor(std::ostream &out, TClass *cl, const char *variable_name, const char *constructor_agrs="", Bool_t empty_line=kTRUE)
Save object constructor in the output stream "out".
Definition TObject.cxx:777
@ kCanDelete
if object in a list can be deleted
Definition TObject.h:71
static void IndentLevel()
Functions used by ls() to indent an object hierarchy.
Definition TROOT.cxx:3052
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition TString.cxx:2385
TLine * line
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
Double_t Sqrt(Double_t x)
Returns the square root of x.
Definition TMath.h:673
Double_t Infinity()
Returns an infinity as defined by the IEEE standard.
Definition TMath.h:928
Rectangle structure (maps to the X11 XRectangle structure)
Definition GuiTypes.h:362
TMarker m
Definition textangle.C:8
TLine l
Definition textangle.C:4