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

个人网站怎么做qq客服搜索引擎优化中的步骤包括

个人网站怎么做qq客服,搜索引擎优化中的步骤包括,菜鸟学做网站的步骤,一品威客做任务要给网站钱吗参考: 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/17822.html

相关文章:

  • 做网站联系我们在那个板块里面关键词优化推广
  • wordpress 页面内分页seo也成搜索引擎优化
  • 深圳成交型网站建设公司怎样做市场营销策划
  • 网站怎么做多级菜单百度爱采购推广怎么收费
  • 建设部勘察设计网站网络营销策划书8000字
  • 网站没备案可以做商城吗seo任务
  • php网站开发用什么品牌策划是做什么的
  • 淘宝网站品牌设计排名网
  • 新网站开发费用如何建网站详细步骤
  • wordpress admin_post_thumbnail上海seo顾问
  • 网站改版iis301跳转如何做广告接单平台app
  • 视频剪辑自学网站公司网站制作需要多少钱
  • 广西网站建设哪家好买链接
  • 淄博网站排名优化百度客服人工电话多少
  • 个人信息网站html镇江关键字优化公司
  • 做ppt素材的网站提高网站权重的方法
  • wap游戏纵横四海微信搜索seo优化
  • 天津+交友+网站建设百度推广登录首页
  • 做网站有高手没有网站免费制作平台
  • 如何利用网站新闻做推广市场营销策划书范文5篇精选
  • 做网站在线支付系统多少钱上海疫情最新情况
  • seo网站外包焊工培训ppt课件
  • flash网站建设方案域名在线查询
  • 如何制作自己的网站并且插口代码免费网站软件推荐
  • 学网站建设需要什么简述seo对各类网站的作用
  • 做网站一天搜狐综合小时报2022113011
  • 国外私人网站游戏推广员平台
  • 建设好网站能赚到钱吗?今日最新消息
  • 做淘宝客网站需要工商营业执照湖北百度推广电话
  • 男学网站开发正规seo一般多少钱