#ifndef BAR_INTERSECTION_VISUALIZER_H #define BAR_INTERSECTION_VISUALIZER_H #include "BarIntersection.h" #include "VZNL_Types.h" #include #include /** * @brief VTK-based visualizer for bar intersection detection */ class BarIntersectionVisualizer { public: BarIntersectionVisualizer(); ~BarIntersectionVisualizer(); /** @brief Visualize original point cloud */ void VisualizePointCloud( const SVzNLPointXYZ* points, int count, const std::string& title = "Original Point Cloud" ); /** @brief Visualize plane segmentation (plane vs non-plane) */ void VisualizePlaneSegmentation( const SVzNLPointXYZ* planePoints, int planeCount, const SVzNL3DPointF* normal, const SVzNLPointXYZ* allPoints, int totalCount, const std::string& title = "Plane Segmentation" ); /** @brief Visualize aligned point cloud */ void VisualizeAlignedPoints( const SVzNLPointXYZ* alignedPoints, int count, const std::string& title = "Aligned Point Cloud" ); /** @brief Visualize filtered points (bars only) */ void VisualizeFilteredPoints( const SVzNLPointXYZ* filteredPoints, int count, const std::string& title = "Filtered Points (Bars)" ); /** @brief Visualize detected clusters with centroid spheres */ void VisualizeClusters( const SVzNLPointXYZ* points, int count, const SGrowthCluster* clusters, int clusterCount, const std::string& title = "Detected Clusters" ); /** @brief Visualize final detection result */ void VisualizeResult( const SVzNLPointXYZ* points, int rows, int cols, const SBarIntersectionResult& result, const std::string& title = "Detection Result" ); /** @brief Visualize best cluster highlighted (filtered aligned points) */ void VisualizeBestCluster( const SBarIntersectionResult& result, const std::string& title = "Best Cluster" ); void SetInteractive(bool interactive); void SetOutputDirectory(const std::string& dir); void SaveScreenshot(void* renderer, const std::string& filename); private: bool m_interactive; std::string m_outputDir; void* CreatePointCloudActor(const SVzNLPointXYZ* points, int count, double r, double g, double b, double pointSize); void* CreateLineActor(float x1, float y1, float z1, float x2, float y2, float z2, double r, double g, double b, double lineWidth); void* CreateSphereActor(float cx, float cy, float cz, float radius, double r, double g, double b); }; #endif // BAR_INTERSECTION_VISUALIZER_H