You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
4.4 KiB
C++

#pragma once
#include "xjobject.h"
#include "AlgoPeriodicLattice.h"
#include "OMUndoRedo.h"
class XJ_OM_EXPORT OMPeriodicLattice : public CXJObject
{
public:
friend class CXJObjectManager;
friend class CXJObjectGroup;
//加载文件
int LoadData(const char* fname, bool isOffset);
//保存文件
int SaveData(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);
//设置颜色
void SetColorList(const std::vector<ColorItem>& colorList);
//设置等值线
void SetContourList(const std::vector<PlineList>& contourList);
//设置断层线
void SetFaultList(const std::vector<PlineList>& faultList, bool isOffset);
//设置控制点
void SetControlPointList(const std::vector<ControlPoint2d>& pointList);
//设置边界线
void SetBound(const PlineList& bound);
void SetOtherLines(const PlineList& lines);
//更新计算等值线
void UpdateIsopleth();
//设置无效值颜色
void SetInvalidColor(int r, int g, int b);
//设置井点颜色
void SetWellColor(int r, int g, int b);
const Point3D& GetWellColor() const { return m_wellColor; }
void SetWellTxtSize(float size) { m_wellTxtSize = size; }
float GetWellTxtSize() { return m_wellTxtSize; }
double* GetValue();
double GetZMin() const;
double GetZMax() const;
void GetContourList(std::vector<PlineList>& contourList);
const AlgoPeriodicLattice* GetData() const {return m_periodicLattice;}
void GetVerData(std::vector<float>& data);
void BrushMesh(const Point3D& cen, float rad, float per, int type, float wellrad = 0);
void DuabMesh(const Point3D& cen1, const Point3D& cen2, float rad, float per, int type, float wellrad = 0);
void SmoothMesh(const Point3D& cen, float rad, float per, int type, float wellrad = 0);
void ShowIsopleth(bool bFlag);
bool IsShowIsopleth() const { return m_bShowIsopleth; }
void ShowFault(bool bFlag);
bool IsShowFault() const { return m_bShowFault; }
void ShowControlPoint(bool bFlag);
bool IsShowControlPoint() const {return m_bShowControlPoint;}
void ShowBound(bool bFlag);
bool IsShowBound() const { return m_bShowBound; }
void ShowOtherLines(bool bFlag);
bool IsShowOtherLines() const { return m_bShowOtherLine; }
void ShowMeshVertex(bool bFlag);
bool IsShowVertex() const { return m_bShowVertex; }
void ShowFilledFault(bool bFlag);
bool IsShowFilledFault() const { return m_bFillFault; }
//获取等值线间隔
void GetIsoplethProperty(double& isopStep, int& markStep, double& minIsop, double& maxIsop,
double& zMin, double& zMax) const;
void SetIsoplethProperty(double isopStep, int markStep, double minIsop, double maxIsop,
double zMin, double zMax);
//表达式合法检测
bool CompileExpressionZ(const char* expression);
//计算Z值
bool CalculateZByExpression(const char* expression);
//优化等值线
void OptimizeIsopleths();
//内缩断层区域
void OffsetFault();
//求最近点
double GetNearPoint(Point2D& pt);
//井点匹配
void AdjuestWithWellPoint(double rad, double range, double miu);
//过滤等值线
void FilterIsopleths(int per);
//设置修改范围多边形
void SetPolygon(const std::vector<Point2D>& poly);
void StretchlUpPolygon(const std::vector<Point2D>& poly, float per, float wellrad, bool state = false);
void SmoothPolygon(const std::vector<Point2D>& poly, float per, float wellrad, bool state = false);
//平滑断层
void TransitFault(const Point3D& cen1, const Point3D& cen2, float rad, float per = 0.5f);
//**************************对象操作************************
virtual void CopyProperty(const CXJObject* pObj);
void ExchangeData(CommandInfo& info, MeshDataInfo& dataInfo);
void Clear();
void GetBoundingBox(Point2D& minPt, Point2D& maxPt);
void SetDecimalNumber(int num);
int GetDecimalNumber();
void SetFaultControlState(bool state);
bool GetFaultControlState();
bool RectificationMeshWellCompute(double deltaz, int type = 0, double factor = 1);
void MeshWellThreadStop();
int GetMeshWellRectificationProgress();
void UpdataMeshWellRectificationView();
protected:
OMPeriodicLattice(void);
OMPeriodicLattice(OMPeriodicLattice*obj);
~OMPeriodicLattice(void);
virtual OMPeriodicLattice* Copy();
private:
AlgoPeriodicLattice* m_periodicLattice;
bool m_bShowIsopleth;
bool m_bShowFault;
bool m_bShowControlPoint;
bool m_bShowBound;
bool m_bShowOtherLine;
bool m_bShowVertex;
Point3D m_wellColor; //井口颜色
float m_wellTxtSize; //井口字体大小
bool m_bFillFault; //是否填充断层
};