Странное поведение TMarker с пакетом построения ROOT

Надеюсь, кто-то здесь имеет некоторый опыт работы с пакетом ROOT (root.cern.ch). Я пытаюсь определить свой собственный класс, который использует несколько классов ROOT. Я заметил странное поведение с классом TMarker.

Вот мой код:

Skymap.h:

#ifndef SKYMAP_H_
#define SKYMAP_H_

#include <cmath>
#include <iostream>
#include <cstdlib>
#include <vector>

#include "TCanvas.h"
#include "TMarker.h"

class Skymap {
 public:

  Skymap();

  void PlotSinglePoint(const float&,const float&);
  void Print(const std::string&);

  void DrawAll();

 private:
  TCanvas mCanvas;
  std::vector<TMarker> mMarkers;
};

#endif

Skymap.cpp:

#include "Skymap.h"

Skymap::Skymap() 
  : mCanvas("c1","",0,0,800,800)
{
  mCanvas.Range(-30,-30,30,30);
}

void Skymap::Print(const std::string& filepth)
{
  mCanvas.Print(filepth.c_str());
}


void Skymap::PlotSinglePoint(const float& x,const float& y)
{
  mMarkers.push_back(TMarker(x,y,7));
  mMarkers.back().Draw();
}


void Skymap::DrawAll()
{
  for(int i=0;i<mMarkers.size();++i){
   mMarkers[i].Draw();
  }
}

main.cpp:

#include <cstdlib>
#include <iostream>
#include "Skymap.h"

int main(){
  Skymap test;
  float x1=-10.,y1=15.;
  test.PlotSinglePoint(x1,y1);

  float x2=10.,y2=20.;
  test.PlotSinglePoint(x2,y2);

  //test.DrawAll();
  test.Print("test.eps");
}

Теперь, если я возьму код, как указано выше, и запуском его, только последний нарисованный TMarker в mMarkers появится в конечном изображении, которое я выведу.

Тем не менее, если я закомментирую команду Draw() в PlotSinglePoint и раскомментирую строку DrawAll() в Main.cpp (то есть имею в виду, что я рисую все TMarkers в mMarkers за один вызов функции, а не отрисовываю каждый по мере их добавления), тогда окончательное изображение содержит все мои TMarkers. Может ли кто-нибудь объяснить мне, почему это происходит?

0 ответов

Другие вопросы по тегам