希望有人在这里有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");
}
现在,如果我按照上面的代码运行它,那么只有最近绘制的mMarkers中的TMarker出现在我输出的最终图像中。
但是,如果我在PlotSinglePoint中注释掉Draw()命令并取消注释Main.cpp中的DrawAll()行(也就是说我在一个函数调用中绘制了mMarkers中的所有TMarkers,而不是在我添加时绘制每个TMarkers然后最终的图像包含我所有的TMarkers。有人能够告诉我为什么会这样吗?