test/Cone.cxx

87 lines
3.0 KiB
C++

#include <vtkActor.h>
#include <vtkConeSource.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSliderWidget.h>
#include <vtkSliderRepresentation2D.h>
#include <vtkCommand.h>
#include <vtkSmartPointer.h>
// 滑动条回调类
class SliderCallback : public vtkCommand {
public:
static SliderCallback* New() { return new SliderCallback; }
void SetConeSource(vtkConeSource* cone) { ConeSource = cone; }
virtual void Execute(vtkObject* caller, unsigned long, void*) {
vtkSliderWidget* slider = static_cast<vtkSliderWidget*>(caller);
double value = static_cast<vtkSliderRepresentation2D*>(slider->GetRepresentation())->GetValue();
ConeSource->SetResolution(static_cast<int>(value));
ConeSource->Modified();
}
private:
vtkConeSource* ConeSource;
};
int main() {
// 创建圆锥源
auto coneSource = vtkSmartPointer<vtkConeSource>::New();
coneSource->SetHeight(3.0);
coneSource->SetRadius(1.0);
coneSource->SetResolution(6); // 初始边数
// 创建Mapper和Actor
auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(coneSource->GetOutputPort());
auto actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// 创建渲染器和窗口
auto renderer = vtkSmartPointer<vtkRenderer>::New();
auto renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
// 创建交互器
auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renderWindow);
interactor->SetInteractorStyle(vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New());
// 添加Actor到渲染器
renderer->AddActor(actor);
renderer->SetBackground(0.2, 0.3, 0.4);
// 创建滑动条
auto sliderRep = vtkSmartPointer<vtkSliderRepresentation2D>::New();
sliderRep->SetMinimumValue(3.0); // 最小边数
sliderRep->SetMaximumValue(50.0); // 最大边数
sliderRep->SetValue(6.0); // 初始值
sliderRep->SetTitleText("Resolution");
sliderRep->GetPoint1Coordinate()->SetCoordinateSystemToNormalizedDisplay();
sliderRep->GetPoint1Coordinate()->SetValue(0.1, 0.1);
sliderRep->GetPoint2Coordinate()->SetCoordinateSystemToNormalizedDisplay();
sliderRep->GetPoint2Coordinate()->SetValue(0.9, 0.1);
auto sliderWidget = vtkSmartPointer<vtkSliderWidget>::New();
sliderWidget->SetInteractor(interactor);
sliderWidget->SetRepresentation(sliderRep);
sliderWidget->SetAnimationModeToAnimate();
// 设置滑动条回调
auto callback = vtkSmartPointer<SliderCallback>::New();
callback->SetConeSource(coneSource);
sliderWidget->AddObserver(vtkCommand::InteractionEvent, callback);
// 启动程序
renderWindow->SetSize(800, 600);
renderWindow->Render();
sliderWidget->EnabledOn();
interactor->Start();
return 0;
}