#pragma once #include "dllExport.h" #include "PeriodicLattice.h" #include "XJPoint3D.h" #include #include class PeriodicLattice; class XJ_ALGO_EXPORT AlgoPeriodicLattice { public: AlgoPeriodicLattice(void); AlgoPeriodicLattice(const AlgoPeriodicLattice* pc); ~AlgoPeriodicLattice(void); bool ReadFile(const char* fname, bool isOffset); bool WriteFile(const char* fname); int Create(unsigned int numx, unsigned int numy, double x0, double y0, double dx, double dy, double* values); //设置Z值范围 void SetZRange(double zMin, double zMax); double GetZMin() const; double GetZMax() const; void SetColorList(const std::vector& colorList); //设置等值线 void SetContourList(const std::vector& contourList); //设置断层线 void SetFaultList(const std::vector& faultList, bool isOffset); //设置控制点 void SetControlPointList(const std::vector& pointList); //设置边界线 void SetBound(const PlineList& bound); // 设置其它线 void SetOtherLines(const PlineList& bound); double* GetValue(); void GetContourList(std::vector& contourList); /****************************************************************/ void BrushMesh(const Point2D& cen, float rad, float per, int type, float wellrad); void DuabAway(const Point2D& cen1, const Point2D& cen2, float rad, float per, int type, float wellrad); void Smooth(const Point2D& cen, float rad, float per, int type, float wellrad); void CopyData(const AlgoPeriodicLattice* pc); void GetData(std::vector& pts); unsigned int GetRawCount() const; unsigned int GetColCount() const; Point2D GetMinPoint() const; Point2D GetMaxPoint() const; const std::vector& GetBackupIdxs() const; const std::vector& GetBackupValues()const; //得到点颜色 void GetColorData(std::vector& colors) const; void GetColorData2(std::vector& colors) const; void GetDirtyColorData(unsigned& minX, unsigned& maxX, unsigned& minY, unsigned& maxY, std::vector& colors) const; // const BBox& GetBBox() const; //等值线 void GetDirtyLays(std::vector& layList) const; void GetDirtyPlineEdges(unsigned ilay, std::vector>& layEdges) const; double GetLayZValue(unsigned ilay) const; bool IsLayMarked(unsigned ilay) const; void GetPlineEdges(std::vector>& edges) const; void GetContourList(std::vector& contourList) const; //断层 void GetFaultData(std::vector>& faults, std::vector& vClosed) const; //断层下盘线 const std::vector& GetFaultFootwallData() const; //控制点 void GetControlPointData(std::vector& cps, std::vector& names) const; const std::vector& GetControlPointData() const; void ClearWellPointsDirty() const; //边界 const std::vector& GetBoundaryData() const; // 其它线数据 const std::vector& GetOtherLineData() const; //undo交换数据 void ExchangeData(const BBox& bbox, const std::vector& idxList, std::vector& valList, double isopStep, int markStep,double zMin,double zMax, double isoplethMin, double isoplethMax); //获取等值线间隔 double GetIsoplethStep() const; //获取上数间隔 int GetMarkIsoplethStep() const; //获取等值线计算范围 double GetMinIsopleth() const; double GetMaxIsopleth() const; void SetIsoplethParameter(double isopStep, int markStep, double minIsop, double maxIsop, double zMin, double zMax); void SetIsoplethProperty(double isopStep, int markStep, double minIsop, double maxIsop, double showMinIsop, double showMaxIsop); void SetInvalidColor(int r, int g, int b); bool CompileExpressionZ(const char* expression); bool CalculateZByExpression(const char* expression); //更新等值线 void UpdateIsopleth(); //优化等值线 void OptimizeIsopleths(); //内缩断层区域 void OffsetFault(); //鼠标最近点 double GetNearPoint(Point2D& pt); //井点周围的适应调整 void WellAdaptiveAdjustment(double rad, double range, double miu); void FilterIsopleths(int per); //设置修改范围多边形 void SetPolygon(const std::vector& poly); void StretchlUpPolygon(const std::vector& poly, float per, float wellrad, bool state = false); void SmoothPolygon(const std::vector& poly, float per, float wellrad, bool state = false); //平滑断层 void TransitFault(const Point2D& cen1, const Point2D& cen2, float rad, float per); void setDecimalNumber(int num); //获取小数位数设置 int getDecimalNumber() const; //设置断层控制点状态 void SetFaultControlState(bool state); bool GetFaultControlState(); //井点校正 bool RectificationMeshWellCompute(double deltaz, int type = 0, double factor = 1); void MeshWellThreadStop(); int GetMeshWellRectificationProgress(); void UpdataMeshWellRectificationView(); private: PeriodicLattice* m_pl; };