制作颜色表



给大家贴一个关于制作颜色

  1. #include <vtkLookupTable.h>
  2. #include <vtkScalarBarActor.h>
  3. #include <vtkRenderer.h>
  4. #include <vtkRenderWindow.h>
  5. #include <vtkRenderWindowInteractor.h>
  6. #include <vtkInteractorStyleTrackballCamera.h>
  7. #include <vtkCallbackCommand.h>

  8. vtkRenderer *ren;
  9. vtkRenderWindow *win;
  10. vtkRenderWindowInteractor *iren;
  11. vtkInteractorStyleTrackballCamera *style;
  12. vtkCallbackCommand *callback;

  13. vtkLookupTable *lut1;
  14. vtkScalarBarActor *bar1;

  15. void OnRightButtonPress(vtkObject *, unsigned long, void *, void *)
  16. {
  17.     double table[2], xCoord;
  18.     table[0]=rand()%100;
  19.     table[1]=rand()%100+100;
  20.     xCoord=(rand()%10)/10.0;
  21.     lut1->SetTableRange(table);
  22.     bar1->GetPositionCoordinate()->SetValue(xCoord, 0.1);
  23.     win->Render();
  24. }

  25. void Setup()
  26. {
  27.     ren=vtkRenderer::New();
  28.     win=vtkRenderWindow::New();
  29.     win->AddRenderer(ren);
  30.     iren=vtkRenderWindowInteractor::New();
  31.     iren->SetRenderWindow(win);
  32.     style=vtkInteractorStyleTrackballCamera::New();
  33.     iren->SetInteractorStyle(style);
  34.     style->SetInteractor(iren);
  35.     callback=vtkCallbackCommand::New();

  36.     callback->SetCallback(OnRightButtonPress);
  37.     style->AddObserver(vtkCommand::RightButtonPressEvent, callback);
  38.     ren->SetBackground(0.5, 0.5, 0.5);

  39.     lut1=vtkLookupTable::New();
  40.     bar1=vtkScalarBarActor::New();
  41. }

  42. void mainloop()
  43. {
  44.     win->Render();
  45.     iren->Start();
  46. }

  47. void DeleteAll()
  48. {
  49.     ren->Delete();
  50.     win->Delete();
  51.     iren->Delete();
  52.     style->Delete();
  53.     callback->Delete();
  54.     lut1->Delete();
  55.     bar1->Delete();
  56. }


  57. int main()
  58. {
  59.     Setup();

  60.     lut1->SetTableRange(13, 28);
  61.     lut1->Build();
  62.     bar1->SetLookupTable(lut1);
  63.     bar1->SetTitle("Scalar & Color");
  64.     bar1->GetPositionCoordinate()-> SetValue(0.1, 0.1);
  65.     bar1->SetOrientationToVertical();
  66.     bar1->SetWidth (0.1);
  67.     bar1->SetHeight (0.8);
  68.     ren->AddActor(bar1);

  69.     mainloop();
  70.     DeleteAll();
  71.     return 0;
  72. }
复制代码
1

评分人数

传个图片看看。
附件: 您需要登录才可以下载或查看附件。没有帐号?新用户注册(用户名请以vis开头,否则不予通过)

TOP

 
颜色表上的标注是scalar的取值,现在scalar的取值范围可以修改,然而表上的颜色怎么更改呢?
好像默认的是从高到低对应从红到蓝。
继续研究中……

TOP

 
不错,但是楼主,控制台程序最好尽量少的使用全局变量,象ren等等。
这样,效率就好点。

TOP

 
更改main函数如下可以修改颜色表的颜色范围!
我是通过加了一个间接层来实现的,先用rgb得到hsv,然后设定了颜色范围,不知道有没有直接利用rgb来完成的?!
  1. int main()
  2. {
  3.     Setup();

  4.     double color1[3]={1, 1, 0}, hsv1[3];
  5.     double color2[3]={1, 0, 0}, hsv2[3];
  6.     vtkMath::RGBToHSV(color1, hsv1);
  7.     vtkMath::RGBToHSV(color2, hsv2);
  8.     lut1->SetTableRange(13, 14);
  9.     lut1->SetHueRange(hsv1[0], hsv2[0]);
  10.     lut1->SetSaturationRange(hsv1[1], hsv2[1]);
  11.     lut1->SetValueRange(hsv1[2], hsv2[2]);
  12.     lut1->SetNumberOfTableValues(512);
  13.     lut1->Build();
  14.     bar1->SetLookupTable(lut1);
  15.     const char *title="Scalar & Color";
  16.     bar1->SetTitle(title);
  17.     bar1->GetPositionCoordinate()-> SetValue(0.1, 0.1);
  18.     bar1->SetOrientationToVertical();
  19.     bar1->SetWidth (0.1);
  20.     bar1->SetHeight (0.8);
  21.     ren->AddActor(bar1);

  22.     mainloop();
  23.     DeleteAll();
  24.     return 0;
  25. }
复制代码




我这段代码的结构不推荐在实际工作中应用,但是对于讲解一个问题还是挺方便的,就象VTK 5.1.0 Documentation提供的例子一样。
谢谢网友一个人走提的宝贵意见!

TOP

 
结果截屏如下:颜色取值范围修改为从黄到红!

同时继续提一个问题:能不能在某一特定的scalar值对应一个color呢?同时保持其他scalar对应的颜色值不变。
我看了VTK 5.1.0 Documentation提供的帮助,如果利用vtkLookupTable的成员函数SetTableValue,整个颜色的取值区间就变了。
附件: 您需要登录才可以下载或查看附件。没有帐号?新用户注册(用户名请以vis开头,否则不予通过)

TOP

 
再贴一个设置某一特定scalar的color后,自动插值其余scalar的color的例子:

  1. #include <string>
  2. #include <vtkMath.h>
  3. #include <vtkLookupTable.h>
  4. #include <vtkColorTransferFunction.h>
  5. #include <vtkScalarBarActor.h>
  6. #include <vtkRenderer.h>
  7. #include <vtkRenderWindow.h>
  8. #include <vtkRenderWindowInteractor.h>
  9. #include <vtkInteractorStyleTrackballCamera.h>
  10. #include <vtkCallbackCommand.h>

  11. vtkRenderer *ren;
  12. vtkRenderWindow *win;
  13. vtkRenderWindowInteractor *iren;
  14. vtkInteractorStyleTrackballCamera *style;
  15. vtkCallbackCommand *callback;

  16. vtkColorTransferFunction *lut1;
  17. vtkScalarBarActor *bar1;

  18. void OnRightButtonPress(vtkObject *, unsigned long, void *, void *)
  19. {
  20.     double red=(rand()%10)/10.0;
  21.     lut1->AddRGBPoint(13.5, red, 0, 0);
  22.     printf("point num: %d, red value: %f\n", lut1->GetSize(), red);
  23.     win->Render();
  24. }

  25. void Setup()
  26. {
  27.     ren=vtkRenderer::New();
  28.     win=vtkRenderWindow::New();
  29.     win->AddRenderer(ren);
  30.     iren=vtkRenderWindowInteractor::New();
  31.     iren->SetRenderWindow(win);
  32.     style=vtkInteractorStyleTrackballCamera::New();
  33.     iren->SetInteractorStyle(style);
  34.     style->SetInteractor(iren);
  35.     callback=vtkCallbackCommand::New();

  36.     callback->SetCallback(OnRightButtonPress);
  37.     style->AddObserver(vtkCommand::RightButtonPressEvent, callback);
  38.     ren->SetBackground(0.5, 0.5, 0.5);

  39.     lut1=vtkColorTransferFunction::New();
  40.     bar1=vtkScalarBarActor::New();
  41. }

  42. void mainloop()
  43. {
  44.     win->Render();
  45.     iren->Start();
  46. }

  47. void DeleteAll()
  48. {
  49.     ren->Delete();
  50.     win->Delete();
  51.     iren->Delete();
  52.     style->Delete();
  53.     callback->Delete();
  54.     lut1->Delete();
  55.     bar1->Delete();
  56. }

  57. void Description()
  58. {
  59.    std::string des="点击右键设置scalar13.5的红颜色值\n";
  60.    cout<<des;
  61. }

  62. void Result()
  63. {
  64.         std::string res="本例说明:\n\
  65.             vtkColorTransferFunction可以用于设置对应某个scalar的color,然后插值其余scalar对应的color\n\
  66.             对应同一个scalar调用AddRGBPoint,并不会增加点的个数\n\n按回车退出";
  67.         cout<<res;
  68.         getchar();
  69. }
  70. int main()
  71. {
  72.     Description();
  73.     Setup();

  74.     double color1[3]={1, 1, 0}, hsv1[3];
  75.     double color2[3]={0, 1, 1}, hsv2[3];
  76.     vtkMath::RGBToHSV(color1, hsv1);
  77.     vtkMath::RGBToHSV(color2, hsv2);
  78.     lut1->AddRGBPoint(13, 0, 0, 0);
  79.     lut1->AddRGBPoint(14, 0, 0, 0);
  80.     bar1->SetLookupTable(lut1);
  81.     const char *title="Scalar & Color";
  82.     bar1->SetTitle(title);
  83.     bar1->GetPositionCoordinate()-> SetValue(0.1, 0.1);
  84.     bar1->SetOrientationToVertical();
  85.     bar1->SetWidth (0.1);
  86.     bar1->SetHeight (0.8);
  87.     ren->AddActor(bar1);

  88.     mainloop();
  89.     DeleteAll();
  90.     Result();
  91.     return 0;
  92. }
复制代码

TOP

 
结果截屏如下:
附件: 您需要登录才可以下载或查看附件。没有帐号?新用户注册(用户名请以vis开头,否则不予通过)

TOP

 
楼主的这种贴代码贴结果的方式很好,看了一目了然,谢谢~

TOP

 
谢谢LZ了,帮助很大~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值