当前位置: 首页 > wzjs >正文

江西做网站的建设网站方法有哪些内容

江西做网站的,建设网站方法有哪些内容,专业seo优化推广,手机版网站嵌入代码文章目录 效果实现类头文件实现类源文件如何调用项目git链接 效果 实现类头文件 /*** file BoxClipperController.h* brief 该头文件定义了 BoxClipperController 类,用于管理基于盒子的网格数据裁剪操作。* details 该类提供了使用 vtkBoxWidget 对网格数据进行裁…

文章目录

  • 效果
  • 实现类头文件
  • 实现类源文件
  • 如何调用
  • 项目git链接

效果

请添加图片描述

实现类头文件

/*** @file BoxClipperController.h* @brief 该头文件定义了 BoxClipperController 类,用于管理基于盒子的网格数据裁剪操作。* @details 该类提供了使用 vtkBoxWidget 对网格数据进行裁剪的功能,允许用户通过交互方式调整裁剪盒子的位置和大小,*          并实时更新裁剪结果。* @author qtree* @date 2025年5月16日*/
#ifndef BOXCLIPPERCONTROLLER_H
#define BOXCLIPPERCONTROLLER_H#include <vtkSmartPointer.h>
#include <vtkCallbackCommand.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkObjectBase.h>class vtkRenderWindowInteractor;
class vtkBoxWidget;
class vtkPlanes;
class vtkClipPolyData;
class vtkPolyData;
class vtkActor;
class vtkRenderer;/*** @class BoxClipperController* @brief 用于管理基于盒子的网格数据裁剪操作的控制器类。** 该类提供了使用 vtkBoxWidget 对网格数据进行裁剪的功能,允许用户通过交互方式调整裁剪盒子的位置和大小,* 并实时更新裁剪结果。*/
class BoxClipperController
{
public:/*** @brief 构造函数。** 初始化 BoxClipperController 实例,并关联渲染窗口交互器和渲染器。** @param interactor 用于处理用户交互的渲染窗口交互器。* @param renderer 用于渲染裁剪结果的渲染器。*/BoxClipperController(vtkRenderWindowInteractor *interactor, vtkRenderer *renderer);/*** @brief 设置输入数据并替换原始的 Actor。** 该方法设置用于裁剪的输入网格数据,并将原始的 Actor 替换为裁剪后的 Actor。** @param input 用于裁剪的输入网格数据。* @param originalActor 原始的 Actor,将被裁剪后的 Actor 替换。*/void SetInputDataAndReplaceOriginal(vtkSmartPointer<vtkPolyData> input, vtkActor *originalActor);/*** @brief 启用或禁用裁剪功能。** 该方法控制 vtkBoxWidget 的显示和交互状态,从而启用或禁用裁剪功能。** @param enabled 若为 true,则启用裁剪功能;若为 false,则禁用裁剪功能。*/void SetEnabled(bool enabled);/*** @brief 获取裁剪后的 Actor。** 返回经过裁剪操作后生成的 Actor。** @return 裁剪后的 Actor 的智能指针。*/vtkSmartPointer<vtkActor> GetClippedActor();private:vtkSmartPointer<vtkBoxWidget> boxWidget;               ///< 用于用户交互的盒子小部件,用于定义裁剪区域vtkSmartPointer<vtkPlanes> clipPlanes;                 ///< 由盒子小部件定义的裁剪平面vtkSmartPointer<vtkClipPolyData> clipper;              ///< 用于执行裁剪操作的 VTK 过滤器vtkSmartPointer<vtkActor> clippedActor;                ///< 裁剪后的网格数据对应的 ActorvtkSmartPointer<vtkPolyData> inputData;                ///< 用于裁剪的输入网格数据vtkSmartPointer<vtkRenderer> renderer;                 ///< 用于渲染裁剪结果的渲染器vtkSmartPointer<vtkRenderWindowInteractor> interactor; ///< 用于处理用户交互的渲染窗口交互器vtkActor *originalActor;                               ///< 原始的 Actor,将被裁剪后的 Actor 替换/*** @brief 更新裁剪结果。** 当盒子小部件的位置或大小发生变化时,该方法会重新执行裁剪操作并更新裁剪后的 Actor。*/void UpdateClipping();
};#endif // BOXCLIPPERCONTROLLER_H

实现类源文件

#include "BoxClipperController.h"#include <vtkBoxWidget.h>
#include <vtkPlanes.h>
#include <vtkPolyData.h>
#include <vtkClipPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkCommand.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>BoxClipperController::BoxClipperController(vtkRenderWindowInteractor *interactor, vtkRenderer *renderer): interactor(interactor), renderer(renderer)
{originalActor = nullptr;// 裁剪用平面集(由 BoxWidget 生成)clipPlanes = vtkSmartPointer<vtkPlanes>::New();// 裁剪器:使用 box widget 的平面集进行裁剪clipper = vtkSmartPointer<vtkClipPolyData>::New();// 映射器连接裁剪器的输出vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(clipper->GetOutputPort());// 显示裁剪后模型的 actorclippedActor = vtkSmartPointer<vtkActor>::New();clippedActor->SetMapper(mapper);// 初始化 box widget 控件boxWidget = vtkSmartPointer<vtkBoxWidget>::New();boxWidget->SetInteractor(interactor); // 控制器绑定boxWidget->SetPlaceFactor(1.0);       // 控制缩放比例boxWidget->HandlesOn();               // 显示操作手柄// 添加裁剪更新事件监听器vtkSmartPointer<vtkCallbackCommand> callback = vtkSmartPointer<vtkCallbackCommand>::New();callback->SetClientData(this); // 把当前类传入回调中callback->SetCallback([](vtkObject *caller, unsigned long, void *clientData, void *callData){auto self = static_cast<BoxClipperController *>(clientData);self->UpdateClipping(); // 当 box widget 改变时更新裁剪});boxWidget->AddObserver(vtkCommand::InteractionEvent, callback); // 绑定观察者
}
// 设置原始输入数据与原始 actor(不拥有生命周期)
void BoxClipperController::SetInputDataAndReplaceOriginal(vtkSmartPointer<vtkPolyData> input, vtkActor *original)
{originalActor = original; // 不用智能指针,不控制生命周期inputData = input;clipper->SetInputData(inputData);boxWidget->SetInputData(inputData);boxWidget->PlaceWidget();UpdateClipping(); // 更新 planes 和裁剪结果
}void BoxClipperController::SetEnabled(bool enabled)
{boxWidget->SetEnabled(enabled ? 1 : 0); // 开启或关闭 box 控件if (enabled){if (originalActor && renderer->HasViewProp(originalActor)){renderer->RemoveActor(originalActor); // 移除原始 actor}renderer->AddActor(clippedActor); // 启用裁剪后显示 actor}else{renderer->RemoveActor(clippedActor);if (originalActor){renderer->AddActor(originalActor);}}renderer->GetRenderWindow()->Render();
}void BoxClipperController::UpdateClipping()
{vtkSmartPointer<vtkPlanes> planes = vtkSmartPointer<vtkPlanes>::New();boxWidget->GetPlanes(planes);     // 获取当前 box widget 对应的平面clipper->SetClipFunction(planes); // 使用这些平面裁剪clipper->InsideOutOn();           // 保留 box 内部数据clipper->Update();                // 更新裁剪结果
}vtkSmartPointer<vtkActor> BoxClipperController::GetClippedActor()
{return clippedActor;
}

如何调用

头文件声明

// 箱形剪控制器
std::unique_ptr<BoxClipperController> boxClipper_;
bool boxClipper_enabled_;

构造函数里初始化
切割需要把原来的模型隐藏才能看出切割后的,所以把原始数据和原模型都传递到类中控制显隐


boxClipper_ = std::make_unique<BoxClipperController>(interactor_, renderer_);
boxClipper_enabled_ = false;
boxClipper_->SetInputDataAndReplaceOriginal(cylinderSource->GetOutput(), testActor);

控制箱体切割器显隐按钮槽函数


connect(cross_section, &QPushButton::clicked, this, [=](){ boxClipper_enabled_ = !boxClipper_enabled_;boxClipper_->SetEnabled(boxClipper_enabled_); });

更新数据之后调用


boxClipper_->SetInputDataAndReplaceOriginal(vertexGlyphFilter->GetOutput(),ply_point_actor_);
boxClipper_enabled_ = false;
boxClipper_->SetEnabled(boxClipper_enabled_);

项目git链接

gitee:https://gitee.com/strange-tree-qian/vtktest
github:https://github.com/qishuqian666/project-vtk-test


文章转载自:

http://eyUXtr60.grpfj.cn
http://03yVv9qZ.grpfj.cn
http://IYc0wtmv.grpfj.cn
http://cC0ZvqKe.grpfj.cn
http://pNLNZH9G.grpfj.cn
http://15pAaFJb.grpfj.cn
http://we1nNaLU.grpfj.cn
http://WjVPJxTj.grpfj.cn
http://c0aQT68b.grpfj.cn
http://OteYCUq9.grpfj.cn
http://lOPKhcpa.grpfj.cn
http://StMpou1I.grpfj.cn
http://ZBEtLQsv.grpfj.cn
http://o6LrgPR0.grpfj.cn
http://3fYyi3bC.grpfj.cn
http://ShXZTTdK.grpfj.cn
http://ApOUdT9v.grpfj.cn
http://ytyzQoxk.grpfj.cn
http://CLkSf9x8.grpfj.cn
http://VsPfwiJV.grpfj.cn
http://WQDbGkIy.grpfj.cn
http://qA8yHQnd.grpfj.cn
http://WvxWUG6u.grpfj.cn
http://qoiOqaAF.grpfj.cn
http://GYS8zlTk.grpfj.cn
http://mKKC9eM6.grpfj.cn
http://SM13LnZF.grpfj.cn
http://X1PAGGXl.grpfj.cn
http://o4XeySV9.grpfj.cn
http://TwWzyjNM.grpfj.cn
http://www.dtcms.com/wzjs/749454.html

相关文章:

  • 网站可以做多少个关键词北戴河区建设局网站
  • h5手机网站源码下载全球最大购物网站
  • 织梦怎么修改网站模板平台宣传推广方案
  • 网站建设的500字小结品牌设计logo图片
  • 企业展示网站模板黄页88推广多少钱一年
  • 招聘网站建设推广面试学校网站开发
  • 企业为什么要做网站建设网站备案的重要性
  • 如何创建网站推广产品wap网站 html5
  • 网站建设的问题个人网页设计作品ps
  • 做网站分pc端和移动端的吗热狗seo外包
  • 湖南网站设计制作工业设计和产品设计的区别
  • 亚翔建设集团有限公司网站建立网站程序
  • 专业做网站的顺德公司贵州政务网站建设规范
  • 知名网站定制报价婚庆公司名字大全
  • 网站零基础学电脑培训班爱网站查询挖掘工具
  • 长沙市网站开发网址生成app
  • 安装php和mysql网站自己做的网站外国人能访问吗
  • 知名高端网站建设浦口区建设中学网站
  • 做微商代理去哪个网站图片在线编辑网站
  • 个人网站的制作步骤做机器设备的网站
  • 放网站的服务器吗网站后台设置
  • 写的网站怎么做接口五路居网站建设
  • 大连专业网站设计服务商增城网站建设公司
  • 广西网站建设推广服务凡科网站代理登录入口
  • 如何建立官网网络优化软件
  • 微信网站公司wordpress 导航网站主题
  • 天津网站制作企业网站优化及推广
  • 网站计数器phpseo比较好的公司
  • 青岛网站制作服务公司在选择网站时应考虑什么问题
  • 查询备案网站百度搜索推广和信息流推广