使用ROOT绘图包时出现奇怪的TMarker行为

时间:2012-02-28 14:51:06

标签: c++ root-framework

希望有人在这里有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。有人能够告诉我为什么会这样吗?

0 个答案:

没有答案