文章目錄
- 實現類頭文件
- 實現類源文件
- 調用邏輯
- 關鍵問題
- 縮放限制問題
- 投影模式
- 項目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>