87 lines
3.0 KiB
C++
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;
|
|
} |