#ifndef LIBRARY_VTKINTERFACE_H #define LIBRARY_VTKINTERFACE_H #include #include #include #pragma region KevVtkDataDefine /** * @brief 数据类型. */ enum KevVtkDataType { UnknowDataType, MeshDataType, PointDataType, CurveDataType, ImageDataType, WellDataType, //井数据 FaultMeshType, //断层数据 MeshMaskType, //网格图像遮罩 }; /** * @brief 曲线类型. */ enum KevVtkCurveType { UnknowCurveType, Fault,//断层 Boundary,//边界 WorkArea,//工区 MiniRight,//矿权 Contour,//等值线 }; /** * @brief 选择模式. */ enum KevVtkSelectMode { RectangleMode,//矩形 CircleMode,//圆形 }; /** * @brief 曲线类型. */ enum KevVtkPropertyID { UnknowID = 0, ActorAmbientColor, ActorDiffusedColor, ActorSpecularColor, ActorAmbient, ActorDiffused, ActorSpecular, }; /** * @brief 井类型. */ enum KevVtkWellType { UnknowWellType, oil, gas, water, }; /** * @brief 井数据. */ class KevVtkPointData { public: KevVtkWellType m_wellType; std::string m_name; std::string m_layerName; double m_x; double m_y; double m_z; }; /** * @brief 曲线数据. */ class KevVtkCurveData { public: std::string m_name; std::string m_layerName; double* x; double* y; double* z; double* l; long m_nPoint; long m_num; bool isClosed;//是否闭合 }; /** * @brief 颜色对象. */ class KevVtkColorItem { public: double z; unsigned char color[4]; bool gradient; }; /** * @brief 网格数据. */ class KevVtkMeshData { public: KevVtkMeshData() { shadow_u = nullptr; } ~KevVtkMeshData() { if (shadow_u != nullptr) { delete[]shadow_u; shadow_u = nullptr; } for (auto it = m_colorList.begin(); it != m_colorList.end(); ++it) { KevVtkColorItem* ptr = static_cast(*it); // 将 void* 转换为实际类型 delete ptr; // 释放内存 *it = nullptr; // 将指针置为 nullptr } m_colorList.clear(); // 清空列表 } public: double m_zMin; double m_zMax; double *origin_u; double *shadow_u; long n; ///< n表示维数,曲面为2,体网格为3 long *num; ///< 各方向网络个数 long numX; //X方向数据个数 long numY; //X方向数据个数 double x0; double y0; double dx; double dy; double *P0; ///< 原点坐标 double *delt; ///< 间隔 double *range; ///< z值范围,范围外的值认为无效 std::string m_layerName; std::list m_colorList; int64_t id{ -1 }; }; /** * @brief 网格数据. */ class KepVtkMeshData { public: KepVtkMeshData() { n = 2; u = nullptr; } ~KepVtkMeshData() { if (u != nullptr) { delete[] u; u = nullptr; } for (auto it = m_colorList.begin(); it != m_colorList.end(); ++it) { KevVtkColorItem* ptr = static_cast(*it); // 将 void* 转换为实际类型 delete ptr; // 释放内存 *it = nullptr; // 将指针置为 nullptr } m_colorList.clear(); // 清空列表 } public: double x0; double y0; double dx; double dy; long numX; //X方向数据个数 long numY; //X方向数据个数 double m_zMin; double m_zMax; long n; ///< n表示维数,曲面为2,体网格为3 long num[2]; ///< 各方向网络个数 double P0[2]; ///< 原点坐标 double delt[2]; ///< 间隔 double range[2]; ///< z值范围,范围外的值认为无效 double* u; ///< 网格Z数据 std::string m_layerName; std::list m_colorList; }; /** * @brief 图像数据. */ class KevVtkImageData { public: double m_x; double m_y; double m_width; double m_height; std::string m_fileName; std::string m_layerName; }; /** * @brief 三维参数. */ class KevVtkSceneParameter { public: ~KevVtkSceneParameter() { } //general bool m_showAxies; bool m_showScalarBar; bool m_showMeshLinearExtrusion; bool m_ShowCoordinateGridLine; bool m_ShowMeshEdgeColorGradient; int m_zScale; //background double m_background_color_r; double m_background_color_g; double m_background_color_b; //camera double m_camera_distance; double m_camera_position_x; double m_camera_position_y; double m_camera_position_z; double m_camera_focalPoint_x; double m_camera_focalPoint_y; double m_camera_focalPoint_z; double m_camera_viewUp_x; double m_camera_viewUp_y; double m_camera_viewUp_z; double m_camera_azimuth; double m_camera_elevation; double m_camera_roll; double m_camera_viewAngle; double m_camera_clippingRange_0; double m_camera_clippingRange_1; //actor double m_actor_ambientColor_r; double m_actor_ambientColor_g; double m_actor_ambientColor_b; double m_actor_diffuseColor_r; double m_actor_diffuseColor_g; double m_actor_diffuseColor_b; double m_actor_specularColor_r; double m_actor_specularColor_g; double m_actor_specularColor_b; double m_actor_ambient; double m_actor_diffuse; double m_actor_specular; //light int m_light_mode; double m_light_intensity; double m_light_color_r; double m_light_color_g; double m_light_color_b; double m_light_ambientColor_r; double m_light_ambientColor_g; double m_light_ambientColor_b; double m_light_diffuseColor_r; double m_light_diffuseColor_g; double m_light_diffuseColor_b; double m_light_specularColor_r; double m_light_specularColor_g; double m_light_specularColor_b; double m_light_position_x; double m_light_position_y; double m_light_position_z; double m_light_focalPoint_x; double m_light_focalPoint_y; double m_light_focalPoint_z; double m_light_azimuth; double m_light_elevation; //vtk mesh edge color double m_mesh_edge_color_r; double m_mesh_edge_color_g; double m_mesh_edge_color_b; int32_t m_mesh_edge_mode = 0; //面角过滤 bool m_singularValueFilterFlag = false; int32_t m_singularThreshold = 65; // 垂直比例 double m_zMaxScale = 100.0; // 业务参数 int32_t m_thickness = 100; /**** 井显示参数 ***/ int32_t m_wellMode = 0; // 显示模式 double m_wellColumnHeight = 100.0; // 井柱高亮 double m_wellColumnRadius = 10; // 井住半径 uint32_t m_wellColumnColor = 0xffffffff; // 井柱颜色 uint32_t m_wellColumnNameColor = 0xffffffff; // 井名颜色 int32_t m_wellColumnNameSize = 15; // 井名大小 int32_t m_wellColumnNameGap = 10; // 井名间距 int32_t m_faultModeEnum = 0; // 井显示模式 int32_t m_wellSymbalRadius{25}; //井头半径 bool m_wellColumnThrough{false}; std::string m_wellTypeColors; // 井别颜色,为了 C++ 结构体能够直接映射到 C# 结构体,这里使用了 BSTR 这个指针类型,使用 CString 无法做到这一点 }; /** * @BRIEF@END.vtk图层树节点 * 每个节点可能包括网格、点、线、图像数据 * 节点下可能有字节点 * 每个节点可能是选中或非选中状态 * 每个节点对应二维图的图层节点 */ class KevVtkDataNode { public: bool m_checked; bool m_hide; bool m_bCreateVtkObject; bool m_bWellLayer; bool m_bFaultLayer; bool m_bBorderLayer; std::string m_layerName; KevVtkSceneParameter* m_sceneParameter; //data std::list m_pointList;//点数据 std::list m_curveList;//线数据 std::list m_closedFaultVtkCurveList;//双线断层曲线 std::list m_closedBoundaryVtkCurveList;//边界线曲线 std::list m_singleFaultVtkCurveList;//单线断层曲线 std::list m_closedFaultCCurveList;//闭合断层线pCurve指针列表 std::list m_closedBoundaryList;//闭合边界线pCurve指针列表 std::list m_meshList;//网格数据 std::list m_imageList;//图像数据 std::list m_childList;//子数据节点列表 //actor std::list m_meshActor;//网格 std::list m_linearExtrusionActorList;//裙边 std::list m_linearExtrusionPlaneActorList;//水平裙边 std::list m_AxesActorsList;//坐标框 std::list m_pointActorList;//井圈符号 std::list m_textActorList;//井名文字 std::list m_curveActorList;//曲线 std::list m_imageActorList;//图像 public: KevVtkDataNode(); }; class VtkWellCurveVertex { public: double m_x; double m_y; double m_z; double m_depth; int m_type;//井轨迹节点,测井曲线节点 int m_dataState; std::string m_layerName; std::map m_loggingData; }; //class VtkWellData //{ //public: // std::string wellId; // std::string wellName; // std::list vertexList; // std::map m_loggingName; //}; #pragma endregion #endif // !LIBRARY_KEVVTKDATA_H