4.多Actor组装体,鼠标响应问题
vtk吧
全部回复
仅看楼主
level 9
描述:
物体通常由多个部分按一定的几何关系组装而成,如核电站中的压力容器有顶盖、筒体管嘴及法兰段还有下部组件。我们希望将这些部分组装起来,同时也希望具备对组装部分单独操作交互能力。
——————————————————————————————————————
方法一:
直接向vtkRenderer中添加Actor
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor( actorSTL1);
renderer->AddActor( actorSTL2 );
renderer->AddActor( actorSTL3 );
方法二:
使用assembly类函数
vtkSmartPointer<vtkAssembly> assembly =
vtkSmartPointer<vtkAssembly>::New();
assembly->AddPart(actorSTL1);
assembly->AddPart(actorSTL2);
assembly->AddPart(actorSTL3);
renderer->AddActor( assembly );
输出结果同上
2015年11月02日 02点11分 1
level 9
将输入法切换到英文,按“a”,按鼠标中键仍然是所有小球作为整体移动。
2015年11月04日 02点11分 3
level 9
https://tieba.baidu.com/p/3714632261
在吧主留下的痕迹中,找到了解决问题的方法
各个组件移动后,如果有个一键还原就好了
2015年11月08日 10点11分 4
level 9
**********************************************************************************************
// Handle mouse events
class PropPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
static PropPickerInteractorStyle* New();
vtkTypeMacro(PropPickerInteractorStyle, vtkInteractorStyleTrackballCamera);
PropPickerInteractorStyle()
{
LastPickedActor = NULL;
LastPickedProperty = vtkProperty::New();
}
virtual ~PropPickerInteractorStyle()
{
LastPickedProperty->Delete();
}
virtual void OnLeftButtonDown()
{
int* clickPos = this->GetInteractor()->GetEventPosition();
// Pick from this location.
vtkSmartPointer<vtkPropPicker> picker =
vtkSmartPointer<vtkPropPicker>::New();
picker->Pick(clickPos[0], clickPos[1], 0, this->GetDefaultRenderer());
double* pos = picker->GetPickPosition();
// If we picked something before, reset its property
if (this->LastPickedActor)
{
this->LastPickedActor->GetProperty()->DeepCopy(this->LastPickedProperty);
}
this->LastPickedActor = picker->GetActor();
if (this->LastPickedActor)
{
// Save the property of the picked actor so that we can restore it next time
this->LastPickedProperty->DeepCopy(this->LastPickedActor->GetProperty());
// Highlight the picked actor by changing its properties
this->LastPickedActor->GetProperty()->SetColor(1.0, 0.0, 0.0);
this->LastPickedActor->GetProperty()->SetDiffuse(1.0);
this->LastPickedActor->GetProperty()->SetSpecular(0.0);
}
// Forward events
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
}
private:
vtkActor *LastPickedActor;
vtkProperty *LastPickedProperty;
};
vtkStandardNewMacro(PropPickerInteractorStyle);
*****************************************************************************************************
上面代码功能:当用户单机渲染场景中的某个对象时,所拾取的对象进行红色高亮显示。
不知道为啥,我带入后无效。。。
2015年11月08日 11点11分 5
@drift💦 如果调用默认的pick函数那么他会在render取Collection,这个里面只有一个根assembly,没有子actor
2021年05月17日 03点05分
请问现在成了吗?
2016年03月24日 06点03分
@语赟 嗯嗯,这个例子是OK的
2016年03月25日 04点03分
请问还有源码吗?[email protected]
2016年03月25日 08点03分
1