Надеюсь, кто-то здесь имеет некоторый опыт работы с пакетом 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. Может ли кто-нибудь объяснить мне, почему это происходит?