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

VTK|类似CloudCompare的比例尺实现2-vtk实现

文章目录

  • 实现类头文件
  • 实现类源文件
  • 调用逻辑
  • 关键问题
    • 缩放限制问题
    • 投影模式
  • 项目git链接

实现类头文件

以下是对你提供的 ScaleBarController.h 头文件添加详细注释后的版本,帮助你更清晰地理解每个成员和方法的用途,尤其是在 VTK 中的作用:


#ifndef SCALEBARCONTROLLER_H
#define SCALEBARCONTROLLER_H#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkTextActor.h>
#include <vtkLineSource.h>
#include <vtkPolyDataMapper2D.h>
#include <vtkActor2D.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCallbackCommand.h>// 管理并绘制屏幕固定像素长度的比例尺控制器
class ScaleBarController
{
public:// 构造函数,初始化渲染器、窗口和交互器ScaleBarController(vtkSmartPointer<vtkRenderer> renderer,vtkSmartPointer<vtkRenderWindow> renderWindow,vtkSmartPointer<vtkRenderWindowInteractor> interactor);// 更新比例尺显示内容(长度、位置、标签等)void UpdateScaleBar();// 当比例尺需要重新添加回 renderer 时调用(如清空或重建渲染场景后)void ReAddToRenderer();private:// 交互事件的静态回调函数,用于处理缩放限制、比例尺更新等逻辑static void OnInteractionEvent(vtkObject *caller, unsigned long eid,void *clientdata, void *calldata);// 创建比例尺的 VTK 对象,包括线段和文字void CreateScaleBarActors();// 获取当前屏幕下 1 像素对应多少 world 单位(单位:world units / pixel)double GetCurrentScaleFactor();// 根据传入的真实比例长度,计算美观的跳变长度(如:0.5 → 1 → 5 → 10...)double ComputeRoundedLength(double length);// -------------------------// VTK 渲染相关对象// -------------------------vtkSmartPointer<vtkRenderer> renderer_;               // 场景渲染器vtkSmartPointer<vtkRenderWindow> renderWindow_;       // 渲染窗口vtkSmartPointer<vtkRenderWindowInteractor> interactor_; // 用户交互器// -------------------------// 比例尺的绘制元素// -------------------------vtkSmartPointer<vtkLineSource> lineSource_;           // 比例尺的线段vtkSmartPointer<vtkPolyDataMapper2D> lineMapper_;     // 2D 映射器vtkSmartPointer<vtkActor2D> lineActor_;               // 2D 绘制 actorvtkSmartPointer<vtkTextActor> scaleText_;             // 比例尺文字标签(显示数值)vtkSmartPointer<vtkCallbackCommand> interactionCallback_; // 鼠标缩放事件监听回调// -------------------------// 状态控制参数// -------------------------const int pixelLength_ = 200; // 比例尺在屏幕上固定显示的像素长度(单位 px)double lastValidParallelScale_ = 1.0;  // 上一次合法 Parallel 投影的相机缩放值double lastValidCameraDistance_ = 1.0; // 上一次合法 Perspective 投影的相机距离
};#endif // SCALEBARCONTROLLER_H

实现类源文件

以下是你提供的 ScaleBarController.cpp 文件的完整代码分析版,我已逐行添加关键注释,帮助你清晰理解每段逻辑的作用,特别是与 VTK 比例尺渲染、缩放监听、状态回退控制 相关的部分:


#include "ScaleBarController.h"
#include <vtkTextProperty.h>
#include <vtkCoordinate.h>
#include <vtkCamera.h>
#include <sstream>
#include <iomanip>

相关文章:

  • 如何用Redis实现分布式锁?RedLock算法的核心思想?Redisson的看门狗机制原理?
  • C++:二叉搜索树
  • MCP(Model Context Protocol,模型上下文协议)
  • 工具学习_模糊测试
  • Python+大模型 day01
  • Maven 下载安装与配置教程
  • 为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?
  • Python调用SQLite及pandas相关API详解
  • Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯
  • ajax提交form表单数据举例
  • Ubuntu24.04编译ORB_SLAM的一系列报错解决
  • LeetCode 热题 100 105. 从前序与中序遍历序列构造二叉树
  • 季报中的FPGA行业:U型反转,春江水暖
  • Cursor 0.5版本发布,新功能介绍
  • SQL看最多的数据,但想从小到大排列看趋势
  • 家庭宽带的内网穿透实践
  • PyQt5完整指南:从入门到实践
  • 三维CAD皇冠CAD(CrownCAD)建模教程:工程图模块二
  • QT+opencv实现卡尺工具找圆、拟合圆
  • 虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property
  • 泽连斯基启程前往土耳其
  • 我的科学观|梅彦昌:科技创新关键在于能否跑得快,而不是有没有钱
  • 特朗普访中东绕行以色列,专家:凸显美以利益分歧扩大
  • 中国人民抗日战争暨世界反法西斯战争胜利80周年纪念活动标识发布
  • 世界期待中美对话合作带来更多确定性和稳定性
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光