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

白天做彩票维护的网站什么是搜索引擎优化?

白天做彩票维护的网站,什么是搜索引擎优化?,网站建设步骤大全,wordpress 上传 重命名参考: VTK显示三维图像的二维切片 文章目录 实现类头文件实现类源文件如何调用项目git链接 以中心点坐标横切面 实现类头文件 /*** file MeshSliceController.h* brief 该头文件定义了 MeshSliceController 类,用于显示切面图。* details 该类负责处理与…

参考:
VTK显示三维图像的二维切片

文章目录

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

以中心点坐标横切面

实现类头文件


/*** @file MeshSliceController.h* @brief 该头文件定义了 MeshSliceController 类,用于显示切面图。* @details 该类负责处理与网格切面相关的操作,包括创建切面、显示和隐藏切面,以及更新用于切面操作的网格数据。*          注意注释中提到的比例尺相关内容可能是文档编写错误,实际该类与比例尺无关。* @author qtree* @date 2025年5月14日*/
#ifndef MESHSLICECONTROLLER_H
#define MESHSLICECONTROLLER_H#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <vtkPlane.h>
#include <vtkCutter.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>/*** @enum SliceDirection* @brief 定义切面的方向枚举类型。*/
enum SliceDirection
{SLICE_X, ///< 沿 X 轴方向进行切面SLICE_Y, ///< 沿 Y 轴方向进行切面SLICE_Z  ///< 沿 Z 轴方向进行切面
};/*** @class MeshSliceController* @brief 用于管理和显示网格数据切面的类。** 该类提供了显示、隐藏切面,以及更新网格数据的功能。*/
class MeshSliceController
{
public:/*** @brief 构造函数。* @param renderer 用于渲染切面的渲染器。*/MeshSliceController(vtkSmartPointer<vtkRenderer> renderer);/*** @brief 根据指定方向显示切面。* @param direction 切面的方向,取值为 SliceDirection 枚举类型。*/void ShowSlice(SliceDirection direction);/*** @brief 隐藏当前显示的切面。*/void HideSlice();/*** @brief 更新用于切面操作的网格数据。* @param polyData 新的网格数据。*/void UpdatePolyData(vtkSmartPointer<vtkPolyData> polyData);/*** @brief 设置原始网格数据的 Actor。* @param actor 原始网格数据的 Actor。*/void SetOriginalActor(vtkSmartPointer<vtkActor> actor);private:vtkSmartPointer<vtkRenderer> renderer_; ///< 用于渲染切面的渲染器vtkSmartPointer<vtkPolyData> polyData_; ///< 用于切面操作的网格数据vtkSmartPointer<vtkPlane> slicePlane_;           ///< 定义切面的平面vtkSmartPointer<vtkCutter> cutter_;              ///< 用于切割网格数据的切割器vtkSmartPointer<vtkPolyDataMapper> sliceMapper_; ///< 切面数据的映射器vtkSmartPointer<vtkActor> sliceActor_;           ///< 用于显示切面的 ActorvtkSmartPointer<vtkActor> originalActor_; ///< 原始网格数据的 Actor
};#endif // MESHSLICECONTROLLER_H

实现类源文件

#include "MeshSliceController.h"
#include <vtkProperty.h>
#include <vtkBoundingBox.h>
#include <iostream> // 添加标准输出MeshSliceController::MeshSliceController(vtkSmartPointer<vtkRenderer> renderer): renderer_(renderer)
{std::cout << "[MeshSliceController] Constructor called." << std::endl;slicePlane_ = vtkSmartPointer<vtkPlane>::New();cutter_ = vtkSmartPointer<vtkCutter>::New();cutter_->SetCutFunction(slicePlane_);sliceMapper_ = vtkSmartPointer<vtkPolyDataMapper>::New();sliceMapper_->SetInputConnection(cutter_->GetOutputPort());sliceActor_ = vtkSmartPointer<vtkActor>::New();sliceActor_->SetMapper(sliceMapper_);sliceActor_->GetProperty()->SetColor(1.0, 0.0, 0.0); // 红色切面sliceActor_->GetProperty()->SetLineWidth(2.0);sliceActor_->GetProperty()->SetOpacity(1.0);
}void MeshSliceController::ShowSlice(SliceDirection direction)
{if (!polyData_){std::cerr << "[MeshSliceController] polyData_ is null. Cannot show slice." << std::endl;return;}if (originalActor_){std::cout << "[ShowSlice] Hiding original actor." << std::endl;originalActor_->VisibilityOff();}std::cout << "[MeshSliceController] ShowSlice called." << std::endl;double bounds[6];polyData_->GetBounds(bounds);double center[3] = {(bounds[0] + bounds[1]) / 2.0,(bounds[2] + bounds[3]) / 2.0,(bounds[4] + bounds[5]) / 2.0};std::cout << "PolyData bounds: ["<< bounds[0] << ", " << bounds[1] << ", "<< bounds[2] << ", " << bounds[3] << ", "<< bounds[4] << ", " << bounds[5] << "]" << std::endl;switch (direction){case SLICE_X:std::cout << "Slice along X-axis." << std::endl;slicePlane_->SetOrigin(center[0], center[1], center[2]);slicePlane_->SetNormal(1.0, 0.0, 0.0);break;case SLICE_Y:std::cout << "Slice along Y-axis." << std::endl;slicePlane_->SetOrigin(center[0], center[1], center[2]);slicePlane_->SetNormal(0.0, 1.0, 0.0);break;case SLICE_Z:std::cout << "Slice along Z-axis." << std::endl;slicePlane_->SetOrigin(center[0], center[1], center[2]);slicePlane_->SetNormal(0.0, 0.0, 1.0);break;default:std::cerr << "Unknown slice direction!" << std::endl;return;}std::cout << "Origin: (" << center[0] << ", " << center[1] << ", " << center[2] << ")" << std::endl;cutter_->Update();vtkSmartPointer<vtkPolyData> sliceOutput = cutter_->GetOutput();std::cout << "Number of points in slice: " << sliceOutput->GetNumberOfPoints() << std::endl;std::cout << "Number of cells in slice: " << sliceOutput->GetNumberOfCells() << std::endl;if (!renderer_->HasViewProp(sliceActor_)){std::cout << "[MeshSliceController] Adding slice actor to renderer." << std::endl;renderer_->AddActor(sliceActor_);}else{std::cout << "[ShowSlice] Slice actor already exists in renderer." << std::endl;}sliceMapper_->SetInputConnection(cutter_->GetOutputPort());sliceMapper_->Update();renderer_->Render();
}void MeshSliceController::HideSlice()
{if (originalActor_){std::cout << "[HideSlice] Restoring original actor visibility." << std::endl;originalActor_->VisibilityOn();}if (renderer_->HasViewProp(sliceActor_)){std::cout << "[HideSlice] Removing slice actor." << std::endl;renderer_->RemoveActor(sliceActor_);renderer_->Render();}
}void MeshSliceController::UpdatePolyData(vtkSmartPointer<vtkPolyData> polyData)
{std::cout << "[UpdatePolyData] Updating slice polyData, number of points: "<< (polyData ? polyData->GetNumberOfPoints() : 0) << std::endl;polyData_ = polyData;cutter_->SetInputData(polyData_); // 更新切割输入cutter_->Update();
}void MeshSliceController::SetOriginalActor(vtkSmartPointer<vtkActor> actor)
{originalActor_ = actor;
}

如何调用

头文件声明

// 切面图
std::unique_ptr<MeshSliceController> meshSliceController_;

构造函数初始化一次

// 切面图
meshSliceController_ = std::make_unique<MeshSliceController>(renderer_);
meshSliceController_->SetOriginalActor(testActor);
// 传入最终用于渲染的 polydata
meshSliceController_->UpdatePolyData(cylinderSource->GetOutput()); 

构造函数里xyz轴以及隐藏 切面按钮槽函数

connect(btnSliceX, &QPushButton::clicked, this, [=](){ meshSliceController_->ShowSlice(SLICE_X); renderWindow_->Render(); });connect(btnSliceY, &QPushButton::clicked, this, [=](){ meshSliceController_->ShowSlice(SLICE_Y); renderWindow_->Render(); });connect(btnSliceZ, &QPushButton::clicked, this, [=](){ meshSliceController_->ShowSlice(SLICE_Z); renderWindow_->Render(); });connect(hideSlice, &QPushButton::clicked, this, [=](){
if (meshSliceController_)meshSliceController_->HideSlice(); renderWindow_->Render(); });

更新PolyData,通常在加载新的ply和obj文件之后调用


// ✅ 更新切面数据
if (meshSliceController_)
{meshSliceController_->SetOriginalActor(ply_point_actor_);// 传入最终用于渲染的 polydatameshSliceController_->UpdatePolyData(vertexGlyphFilter->GetOutput()); 
}

项目git链接

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

http://www.dtcms.com/wzjs/801741.html

相关文章:

  • 网站域名后缀那个好企业建站业务还能做吗
  • ps个人网站怎么做企业科技网站建设
  • 网站建设文本居中代码wordpress漏洞利用工具
  • 网站上传文件存储方式在线设计平台canva
  • php 做视频网站wordpress略缩图压缩
  • 门户网站如何建设网站多语言建设方案
  • seo网站优化知识要建设一个网站需要什么
  • 宿迁网站建设SEO优化营销国示建设网站
  • 网站切换语言怎么做的长沙市网站推广电话
  • 2017年做那个网站致富WordPress快捷登录如何关闭
  • 网站单页支付宝支付怎么做的成都大丰五块石网站建设
  • 完成门户网站建设制作企业网站的公司
  • 做信息发布类网站用什么语言服务器销售
  • 图片抗锯齿网站临沂网站建设教程
  • 青岛企业如何建网站网站页面维护
  • 网站备案个人信息网站建设优化开发公司排名
  • 南通建设中标查询网站中小企业的网站建设论文
  • 淘宝做网站推广手机网站设计只选亿企邦
  • c asp.net 做网站大丰网站制作
  • 备案查询站长工具绿色资源网下载
  • 公司网站建设规划建设网站具备的知识
  • 重庆知名做网站的公司软件开发业务流程图
  • 高端网站设计怎么样宁波seo推广公司排名
  • 织梦的手机端网站模板管理咨询公司能给接受咨询企业提供资金支持吗
  • 永春网站建设常州城乡建设局网站
  • 珠宝网站官网建设需求建材新型项目加盟代理
  • 宠物网站策划书云南网页设计与制作
  • 诏安县建设局网站指数基金怎么买
  • 优惠网站代理怎么做php 用什么做网站服务器吗
  • 提交网站到谷歌网站建设公司哪家比较好