61 line.TLine::Copy(*
this);
69 src.TLine::Copy(*
this);
91 if (!
gPad)
return 9999;
134 if (!
gPad || !
gPad->IsEditable())
return;
136 constexpr Int_t kMaxDiff = 20;
137 static Double_t oldX1, oldY1, oldX2, oldY2;
138 static Int_t pxold,pyold, selectPoint;
140 auto &parent = *
gPad;
142 Bool_t opaque = parent.OpaqueMoving();
144 auto paint = [
this, &parent]() {
145 auto pp = parent.GetPainter();
146 pp->SetAttLine(*
this);
150 pp->DrawLine(parent.XtoPad(
GetX1()), parent.YtoPad(
GetY1()), parent.XtoPad(
GetX2()), parent.YtoPad(
GetY2()));
155 if (selectPoint & 1) {
159 if (selectPoint & 2) {
177 Int_t px1, py1, px2, py2;
180 px1 = parent.UtoAbsPixel(
GetX1());
181 py1 = parent.VtoAbsPixel(
GetY1());
182 px2 = parent.UtoAbsPixel(
GetX2());
183 py2 = parent.VtoAbsPixel(
GetY2());
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()));
204 if (abs(px1 - px) + abs(py1 - py) < kMaxDiff) {
207 }
else if (abs(px2 - px) + abs(py2 - py) < kMaxDiff) {
214 parent.SetCursor(
kMove);
224 if (selectPoint == 1) {
225 set_coord(px, py, 0, 0);
226 }
else if (selectPoint == 2) {
227 set_coord(0, 0, px, py);
230 }
else if (selectPoint == 3) {
231 set_coord(px1 + px - pxold, py1 + py - pyold, px2 + px - pxold, py2 + py - pyold);
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' } }
246 guide = GUIDES[selectPoint-1][x_idx][y_idx];
249 parent.ShowGuidelines(
this, event, guide,
true);
250 parent.ModifiedUpdate();
256 if (
gROOT->IsEscaped()) {
263 parent.ShowGuidelines(
this, event);
264 parent.ModifiedUpdate();
269 parent.ShowGuidelines(
this, event);
271 parent.ModifiedUpdate();
280 event = parent.GetCanvasImp()->RequestLocator(px, py);
299 Error(
"GetSlope",
"This line is vertical. The slope in undefined");
314 Error(
"GetYIntercept",
"This line is vertical. The Y-Intercept in undefined");
378 SavePrimitiveConstructor(out,
Class(),
"line",
TString::Format(
"%g, %g, %g, %g",
fX1,
fY1,
fX2,
fY2),
kFALSE);
383 out <<
" line->SetNDC();\n";
386 out <<
" line->SetBit(TLine::kVertical);\n";
389 out <<
" line->SetBit(TLine::kHorizontal);\n";
434 else fX2 =
gPad->AbsPixeltoX(px1-
l);
455 else fY2 =
gPad->AbsPixeltoY(py1+
l);
505 bbox.fWidth = px2 - px1;
506 bbox.fHeight = py2 - py1;
bool Bool_t
Boolean (0=false, 1=true) (bool)
int Int_t
Signed integer 4 bytes (int)
short Version_t
Class version identifier (short)
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
float Float_t
Float 4 bytes (float)
double Double_t
Double 8 bytes.
const char Option_t
Option string (const char)
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
Abstract base class for elements drawn in the editor.
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...
virtual void Streamer(TBuffer &)
virtual Color_t GetLineColor() const
Return the line color.
virtual Width_t GetLineWidth() const
Return the line width.
TAttLine()
AttLine default constructor.
virtual Style_t GetLineStyle() const
Return the line style.
virtual void Modify()
Change current line attributes if necessary.
void Copy(TAttLine &attline) const
Copy this line attributes to a new TAttLine.
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.
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.
Buffer base class used for serializing objects.
virtual Version_t ReadVersion(UInt_t *start=nullptr, UInt_t *bcnt=nullptr, const TClass *cl=nullptr)=0
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=nullptr)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
@ kLineNDC
Use NDC coordinates.
@ kHorizontal
Line is horizontal.
@ kVertical
Line is vertical.
void ls(Option_t *option="") const override
List this line with its attributes.
virtual void SetY2(Double_t y2)
Double_t fY1
Y of 1st point.
Double_t fX1
X of 1st point.
Double_t GetYIntercept() const
Get the Y-Intercept of this TLine.
virtual void SetX2(Double_t x2)
Bool_t IsVertical()
Check whether this line is to be drawn vertically.
virtual TLine * DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw this line with new coordinates.
void SetBBoxY1(const Int_t y) override
Set top of BoundingBox to a value (resize in y direction on top)
void SetVertical(Bool_t set=kTRUE)
Force the line to be drawn vertically.
virtual void PaintLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw this line with new coordinates.
Double_t GetSlope() const
Get the slope of this TLine.
void SetBBoxCenterY(const Int_t y) override
Set Y coordinate of the center of the BoundingBox.
void SetBBoxX2(const Int_t x) override
Set right hand side of BoundingBox to a value (resize in x direction on right)
virtual TLine * DrawLineNDC(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
Draw this line with new coordinates in NDC.
Bool_t IsHorizontal()
Check whether this line is to be drawn horizontally.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
void Copy(TObject &line) const override
Copy this line to line.
void Print(Option_t *option="") const override
Dump this line with its attributes.
Double_t fX2
X of 2nd point.
void SetBBoxX1(const Int_t x) override
Set left hand side of BoundingBox to a value (resize in x direction on left)
void Paint(Option_t *option="") override
Paint this line with its current attributes.
void SetBBoxY2(const Int_t y) override
Set bottom of BoundingBox to a value (resize in y direction on bottom)
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a line.
virtual void SetX1(Double_t x1)
TLine & operator=(const TLine &src)
Assignment operator.
Double_t fY2
Y of 2nd point.
virtual void PaintLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2)
Draw this line with new coordinates in NDC.
void Streamer(TBuffer &) override
Stream an object of class TLine.
void SetBBoxCenterX(const Int_t x) override
Set X coordinate of the center of the BoundingBox.
TClass * IsA() const override
virtual void SetY1(Double_t y1)
virtual void SetNDC(Bool_t isNDC=kTRUE)
Set NDC mode on if isNDC = kTRUE, off otherwise.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
Rectangle_t GetBBox() override
Return the bounding Box of the Line.
void SetHorizontal(Bool_t set=kTRUE)
Force the line to be drawn horizontally.
virtual const char * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Streamer(TBuffer &)
Stream an object of class TObject.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Copy(TObject &object) const
Copy this to obj.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
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.
TObject()
TObject constructor.
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".
@ kCanDelete
if object in a list can be deleted
static void IndentLevel()
Functions used by ls() to indent an object hierarchy.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Double_t Infinity()
Returns an infinity as defined by the IEEE standard.
Rectangle structure (maps to the X11 XRectangle structure)