37 TMarker::TMarker(): TObject(), TAttMarker()
46 TMarker::TMarker(Double_t x, Double_t y, Int_t marker)
47 :TObject(), TAttMarker()
51 fMarkerStyle = marker;
64 TMarker::TMarker(
const TMarker &marker) : TObject(marker), TAttMarker(marker), TAttBBox2D(marker)
68 ((TMarker&)marker).Copy(*
this);
74 void TMarker::Copy(TObject &obj)
const
77 TAttMarker::Copy(((TMarker&)obj));
78 ((TMarker&)obj).fX = fX;
79 ((TMarker&)obj).fY = fY;
85 void TMarker::DisplayMarkerTypes()
87 TMarker *marker =
new TMarker();
88 marker->SetMarkerSize(3);
89 TText *text =
new TText();
90 text->SetTextFont(62);
91 text->SetTextAlign(22);
92 text->SetTextSize(0.1);
96 for (Int_t i=1;i<16;i++) {
98 snprintf(atext,7,
"%d",i);
99 marker->SetMarkerStyle(i);
100 marker->DrawMarker(x,.25);
101 text->DrawText(x,.12,atext);
102 snprintf(atext,7,
"%d",i+19);
103 marker->SetMarkerStyle(i+19);
104 marker->DrawMarker(x,.55);
105 text->DrawText(x,.42,atext);
106 snprintf(atext,7,
"%d",i+34);
107 marker->SetMarkerStyle(i+34);
108 marker->DrawMarker(x,.85);
109 text->DrawText(x,.72,atext);
121 Int_t TMarker::DistancetoPrimitive(Int_t px, Int_t py)
124 if (TestBit(kMarkerNDC)) {
125 pxm = gPad->UtoPixel(fX);
126 pym = gPad->VtoPixel(fY);
128 pxm = gPad->XtoAbsPixel(gPad->XtoPad(fX));
129 pym = gPad->YtoAbsPixel(gPad->YtoPad(fY));
131 Int_t dist = (Int_t)TMath::Sqrt((px-pxm)*(px-pxm) + (py-pym)*(py-pym));
134 Int_t markerRadius = Int_t(4*fMarkerSize);
135 if (dist <= markerRadius)
return 0;
136 if (dist > markerRadius+3)
return 999;
143 void TMarker::Draw(Option_t *option)
152 void TMarker::DrawMarker(Double_t x, Double_t y)
154 TMarker *newmarker =
new TMarker(x, y, 1);
155 TAttMarker::Copy(*newmarker);
156 newmarker->SetBit(kCanDelete);
157 newmarker->AppendPad();
168 void TMarker::ExecuteEvent(Int_t event, Int_t px, Int_t py)
173 static Int_t pxold, pyold;
174 static Bool_t ndcsav;
175 Double_t dpx, dpy, xp1,yp1;
176 Bool_t opaque = gPad->OpaqueMoving();
178 if (!gPad->IsEditable())
return;
183 ndcsav = TestBit(kMarkerNDC);
185 gVirtualX->SetTextColor(-1);
186 TAttMarker::Modify();
191 pxold = px; pyold = py;
192 gPad->SetCursor(kMove);
196 p.fX = pxold; p.fY = pyold;
197 if (!opaque) gVirtualX->DrawPolyMarker(1, &p);
198 p.fX = px; p.fY = py;
199 if (!opaque) gVirtualX->DrawPolyMarker(1, &p);
200 pxold = px; pyold = py;
202 if (ndcsav) this->SetNDC(kFALSE);
203 this->SetX(gPad->PadtoX(gPad->AbsPixeltoX(px)));
204 this->SetY(gPad->PadtoY(gPad->AbsPixeltoY(py)));
205 gPad->ShowGuidelines(
this, event,
'i',
true);
206 gPad->Modified(kTRUE);
213 if (ndcsav && !this->TestBit(kMarkerNDC)) {
214 this->SetX((fX - gPad->GetX1())/(gPad->GetX2()-gPad->GetX1()));
215 this->SetY((fY - gPad->GetY1())/(gPad->GetY2()-gPad->GetY1()));
218 gPad->ShowGuidelines(
this, event);
220 if (TestBit(kMarkerNDC)) {
221 dpx = gPad->GetX2() - gPad->GetX1();
222 dpy = gPad->GetY2() - gPad->GetY1();
225 fX = (gPad->AbsPixeltoX(pxold)-xp1)/dpx;
226 fY = (gPad->AbsPixeltoY(pyold)-yp1)/dpy;
228 fX = gPad->PadtoX(gPad->AbsPixeltoX(px));
229 fY = gPad->PadtoY(gPad->AbsPixeltoY(py));
231 gPad->Modified(kTRUE);
233 gVirtualX->SetTextColor(-1);
242 void TMarker::ls(Option_t *)
const
244 TROOT::IndentLevel();
245 printf(
"Marker X=%f Y=%f marker type=%d\n",fX,fY,fMarkerStyle);
251 void TMarker::Paint(Option_t *)
253 if (TestBit(kMarkerNDC)) {
254 Double_t u = gPad->GetX1() + fX*(gPad->GetX2()-gPad->GetX1());
255 Double_t v = gPad->GetY1() + fY*(gPad->GetY2()-gPad->GetY1());
258 PaintMarker(gPad->XtoPad(fX),gPad->YtoPad(fY));
265 void TMarker::PaintMarker(Double_t x, Double_t y)
267 TAttMarker::Modify();
268 gPad->PaintPolyMarker(-1,&x,&y,
"");
274 void TMarker::PaintMarkerNDC(Double_t, Double_t)
281 void TMarker::Print(Option_t *)
const
283 printf(
"Marker X=%f Y=%f",fX,fY);
284 if (GetMarkerColor() != 1) printf(
" Color=%d",GetMarkerColor());
285 if (GetMarkerStyle() != 1) printf(
" MarkerStyle=%d",GetMarkerStyle());
286 if (GetMarkerSize() != 1) printf(
" MarkerSize=%f",GetMarkerSize());
293 void TMarker::SavePrimitive(std::ostream &out, Option_t * )
295 if (gROOT->ClassSaved(TMarker::Class())) {
300 out<<
"marker = new TMarker("<<fX<<
","<<fY<<
","<<fMarkerStyle<<
");"<<std::endl;
302 SaveMarkerAttributes(out,
"marker",1,1,1);
304 out<<
" marker->Draw();"<<std::endl;
310 void TMarker::SetNDC(Bool_t isNDC)
312 ResetBit(kMarkerNDC);
313 if (isNDC) SetBit(kMarkerNDC);
319 void TMarker::Streamer(TBuffer &R__b)
321 if (R__b.IsReading()) {
323 Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
325 R__b.ReadClassBuffer(TMarker::Class(),
this, R__v, R__s, R__c);
329 TObject::Streamer(R__b);
330 TAttMarker::Streamer(R__b);
337 R__b.WriteClassBuffer(TMarker::Class(),
this);
344 Rectangle_t TMarker::GetBBox()
346 Double_t size = this->GetMarkerSize();
349 BBox.fX = gPad->XtoPixel(fX)+(Int_t)(2*size);
350 BBox.fY = gPad->YtoPixel(fY)-(Int_t)(2*size);
351 BBox.fWidth = 2*size;
352 BBox.fHeight = 2*size;
359 TPoint TMarker::GetBBoxCenter()
362 p.SetX(gPad->XtoPixel(fX));
363 p.SetY(gPad->YtoPixel(fY));
370 void TMarker::SetBBoxCenter(
const TPoint &p)
372 fX = gPad->PixeltoX(p.GetX());
373 fY = gPad->PixeltoY(p.GetY() - gPad->VtoPixel(0));
379 void TMarker::SetBBoxCenterX(
const Int_t x)
381 fX = gPad->PixeltoX(x);
387 void TMarker::SetBBoxCenterY(
const Int_t y)
389 fY = gPad->PixeltoY(y - gPad->VtoPixel(0));
396 void TMarker::SetBBoxX1(
const Int_t x)
398 Double_t size = this->GetMarkerSize();
399 fX = gPad->PixeltoX(x + (Int_t)size);
406 void TMarker::SetBBoxX2(
const Int_t x)
408 Double_t size = this->GetMarkerSize();
409 fX = gPad->PixeltoX(x - (Int_t)size);
415 void TMarker::SetBBoxY1(
const Int_t y)
417 Double_t size = this->GetMarkerSize();
418 fY = gPad->PixeltoY(y - (Int_t)size - gPad->VtoPixel(0));
425 void TMarker::SetBBoxY2(
const Int_t y)
427 Double_t size = this->GetMarkerSize();
428 fY = gPad->PixeltoY(y + (Int_t)size - gPad->VtoPixel(0));