对象-求助:vtk callback并没有完成预期的效果

问题描述

求助:vtk callback并没有完成预期的效果

我按照官网的例子自己写了一个callback函数,设定为初始的renderer背景颜色为黑色,点击鼠标右键后renderer的背景颜色设置为(1.0,0.0,0.0)
但是这段代码跑起来 renderer的背景颜色就是红色(1.0,0.0,0.0)。

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

// The callback does the work.
// The callback keeps a pointer to the sphere whose resolution is
// controlled. After constructing the callback, the program sets the
// SphereSource of the callback to
// the object to be controlled.
class vtkSliderCallback : public vtkCommand
{
public:
static vtkSliderCallback New()
{
return new vtkSliderCallback;
}
virtual void Execute(vtkObject *caller, unsigned long, void
)
{
vtkSliderWidget sliderWidget =
reinterpret_cast<vtkSliderWidget
>(caller);
int value = static_cast(static_cast(sliderWidget->GetRepresentation())->GetValue());
this->SphereSource->SetPhiResolution(value/2);
this->SphereSource->SetThetaResolution(value);
}
vtkSliderCallback():SphereSource(0) {}
vtkSphereSource *SphereSource;
};

class vtkMouseCallback: public vtkCommand
{
public:
int slicing;
static vtkMouseCallback* New()
{
return new vtkMouseCallback;
}

virtual void Execute(vtkObject *caller, unsigned long event, void *)
{
slicing = 0;
vtkRenderer *ren1 = vtkRenderer::SafeDownCast(caller);
if(vtkCommand::RightButtonPressEvent){
slicing = 1;
}
if(slicing){
ren1->SetBackground(1.0,0.0,0.0);
}
}

};

int main()
{
// A sphere
vtkSmartPointer sphereSource = vtkSmartPointer::New();
sphereSource->SetCenter(0.0, 0.0, 0.0);
sphereSource->SetRadius(4.0);
sphereSource->SetPhiResolution(2);
sphereSource->SetThetaResolution(1);

vtkSmartPointer mapper = vtkSmartPointer::New();
mapper->SetInput(sphereSource->GetOutput());

vtkSmartPointer actor = vtkSmartPointer::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetInterpolationToFlat();

// A renderer and render window
vtkSmartPointer renderer = vtkSmartPointer::New();
vtkSmartPointer renderWindow = vtkSmartPointer::New();
renderWindow->AddRenderer(renderer);

// An interactor
vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New();
renderWindowInteractor->SetRenderWindow(renderWindow);

// Add the actors to the scene
renderer->AddActor(actor);

// Render an image (lights and cameras are created automatically)
renderWindow->Render();

// Here we describe the representation of the widget.
vtkSmartPointer sliderRep = vtkSmartPointer::New();
sliderRep->SetMinimumValue(3.0);
sliderRep->SetMaximumValue(1000.0);
sliderRep->SetValue(sphereSource->GetThetaResolution());
sliderRep->SetTitleText("Sphere Resolution");

// Here we use normalized display coordinates (0,1) so that the
// slider will stay in the same proportionate location if the window
// is resized.
sliderRep->GetPoint1Coordinate()->SetCoordinateSystemToNormalizedDisplay();
sliderRep->GetPoint1Coordinate()->SetValue(.1 ,.1);
sliderRep->GetPoint2Coordinate()->SetCoordinateSystemToNormalizedDisplay();
sliderRep->GetPoint2Coordinate()->SetValue(.3, .1);

// Create the callback and pass it the sphereSource to be controlled
vtkSmartPointer callback = vtkSmartPointer::New();
callback->SphereSource = sphereSource;

vtkSmartPointer call = vtkMouseCallback::New();
renderWindowInteractor->AddObserver(vtkCommand::InteractionEvent,call);
// The widget is the controller for the interction.
vtkSmartPointer sliderWidget = vtkSmartPointer::New();
sliderWidget->SetInteractor(renderWindowInteractor);
sliderWidget->SetRepresentation(sliderRep);
sliderWidget->SetAnimationModeToAnimate();
sliderWidget->EnabledOn();
//renderWindowInteractor->Initialize();
renderWindow->Render();
// Observe the interaction events of the widget. If the computation
// in the callback is time consuming, observe the
// EndInteractionEvent instead.
sliderWidget->AddObserver(vtkCommand::InteractionEvent,callback);

renderWindowInteractor->Start();

return 0;
}

解决方案

http://tieba.baidu.com/p/3171604615

时间: 2024-11-03 09:24:48

对象-求助:vtk callback并没有完成预期的效果的相关文章

callback-创建handler对象指定一个Callback的代码报错

问题描述 创建handler对象指定一个Callback的代码报错 public class MainActivity extends Activity implements OnClickListener{ private TextView textView; private ImageView imageView; private int index; private int images [] = {R.drawable.image1,R.drawable.image2,R.drawabl

如何在百度经验上推广才能达到预期的效果

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 百度经验的推出时间已经有一年多了,百度经验是百度推出的一款关于生活知识的新产品.百度经验集中解决互联网用户关于"怎样做 ""怎么办"这一类的问题,主要是在解决实际的问题提供帮助.百度经验作为百度旗下的产品,它的权重之高和浏览量之大是毋庸置 疑的,所以站长们利用好百度经验去推广自己的网站和产品,可以达到事

求助:想要输出到浏览器,效果却是下载该程序。

问题描述 环境是linux下,webserver使用的是thttpd,cgi程序使用c语言.预期目标为:某连接指向一个cgi程序,点击该连接效果为该cgi会调用execl执行另一个程序,将该程序执行结果输出到浏览器上.问题为:使用Content-Type:text/plain这个MIME头,在本机通过,用另一台机子测试结果为:chrome浏览器通过,而IE和firefox却是弹出下载该cgi的对话框.将MIME头改为Content-Type:text/html,都通过,但是html格式会去除多余

对“网络求助”的多维思考

□张北坪 网络求助,即通过网络寻求帮助并获得帮助的事实.狭义上,就其所借助的手段来说,它属于媒体救助的范畴:广义上,就其所作用的对象来说,它属于社会救助的范畴,因而,对网络求助的定位应以对媒体救助和社会救助的理解为前提. 媒体救助的内涵界定 媒体救助是媒体履行社会责任的重要部分,是大众传媒人文关怀和服务功能的体现.依靠其迅捷性.互动性和舆论正义,媒体越来越成为困难社会成员的首要选择与获取帮助的重要途径.今天,媒体救助已成为政府职能部门(如民政部门)救助.慈善和非赢利性社会组织救助的重要补充.媒体

JQuery笔记:Ajax和延迟对象

一.Ajax方法   1.发送请求 Ajax方法 说明 $.ajax([url],options) 使用传入的options发送一次Ajax请求 .load(url,[data],[callback]) 向传入的url生成一次Ajax请求,然后将响应放在匹配的元素中 $.get(url,[data],[callback],[returnType]) 向传入的url发送一个get请求 $.getJSON(url,[data],[callback]) 向传入的url发送一个Ajax请求,将响应作为J

jquery对象访问是什么及使用方法介绍_jquery

本篇是继上篇jQuery核心函数之后介绍如何访问jQuery对象. jquery对象访问 each(callback) size() length selector context get() get(index) index([subject]) 测试用例 以下是通过代码的方式测试上述jQuery对象访问,供不明白的朋友们参考: <!DOCTYPE html> <html> <head> <title>jquery对象访问</title> &l

【Ajax技术】使用XHR对象发送和接受数据

紧接着上一篇,我们获取XMLHttpRequest之后,就要使用XHR对象发送和接受数据了,继续完善我们的javascript脚本文件: verifyown.js: //用户名校验的方法 //这个方法使用AMLHttpRequest对象来进行AJAX的异步数据交互 var xmlhttp; function verify(){ //1.使用最基本的DOM_API来获取文本框中的值 //document.getElementById("username")是dom中获取元素节点的一种方法

发送json对象到action后台并处理

问题描述 前台构造10个数组,数组里面包含的是json对象,然后通过表单向后台提交这个数组.前段代码:for(i=0;i<10;i++){ jsonObj={"field":"field:+i,"name":"name"+i}; inFoArray.push(jsonObj);}function postToAction(){ form1.action="Test!generateTemp.action?inFoArra

jQuery对数组和对象的操作例子

对数组遍历 $().each();专门用于遍历jQuery对象; $.each(object , [callback]) 是jQuery通用遍历方法,可用于遍历对象和数组; 例子: 1.遍历数组,同时使用元素索引和内容  代码如下 复制代码 $.each([0,1,2], function(i, n){ console.log('item:'+ i +',value:'+ n); }); 2.遍历对象,同时使用成员名称和变量内容  代码如下 复制代码 $.each({name:'chenwei'