287 lines
7.1 KiB
C++
287 lines
7.1 KiB
C++
/**
|
||
* @file ObjWellLog.h
|
||
* @brief 测井曲线数据模型
|
||
* @date 2014-6-3
|
||
* @author: liyonggang
|
||
*/
|
||
#ifndef PAI_FRAME_OSGWELLLOG_H
|
||
#define PAI_FRAME_OSGWELLLOG_H
|
||
#pragma warning( push ,0)
|
||
#include "MemRdWt.h"
|
||
#include <vector>
|
||
#include <QUuid>
|
||
#include <QSharedMemory>
|
||
#include "BaseObject.h"
|
||
// #include "WelllogCurve.h"
|
||
#include "GeometryUtils.h"
|
||
#include "BaseFun.h"
|
||
// #include "ObjBaseObject.h"
|
||
#pragma warning( pop )
|
||
|
||
BEGIN_OSGDATAMODEL_NAMESPACE;
|
||
|
||
class CObjWell;
|
||
class CObjWelllogRound;
|
||
class CObjWellLogTrack;
|
||
class CObjWellTrack;
|
||
class OSGDATAMODEL_EXPORT CObjWellLog: public QObject
|
||
{
|
||
Q_OBJECT
|
||
public:
|
||
CObjWellLog();
|
||
CObjWellLog(bool visible);
|
||
~CObjWellLog();
|
||
Slf_CURVE acurveinfo;
|
||
CObjWell *GetWell();
|
||
CObjWelllogRound *GetWelllogRound();
|
||
std::vector<float>& GetDepths()
|
||
{
|
||
return m_vDepths;
|
||
}
|
||
std::vector<char>& GetFlags()
|
||
{
|
||
return m_vFlags;
|
||
}
|
||
void SetModify(bool ischange)
|
||
{
|
||
// SetModified(ischange,false);
|
||
}
|
||
bool ExpendData(bool isHead,float EDepth);
|
||
bool DeleteData(float Stdep,float Endep);
|
||
|
||
/**
|
||
* @brief 设置对象的名字标识
|
||
* @param[in] name 名字标识
|
||
*/
|
||
virtual void SetName(const QString & name);
|
||
/**
|
||
* @brief 得到属性的最小最大值
|
||
*/
|
||
|
||
virtual float GetPropertyMin();
|
||
|
||
virtual float GetPropertyMax();
|
||
|
||
virtual void SetpropertyMin(float Propertymin);
|
||
|
||
virtual void SetpropertyMax(float Propertymax);
|
||
/**
|
||
* @brief 重新计算最大最小值
|
||
*/
|
||
void ReCalculateMinMax();
|
||
|
||
// virtual bool Serialize( CObjectArchive &ar );
|
||
|
||
virtual QUuid GetTypeID()const;
|
||
|
||
virtual double GetShiftTopDepth();
|
||
virtual double GetTopDepth();
|
||
|
||
virtual double GetShiftBottomDepth();
|
||
virtual double GetBottomDepth();
|
||
|
||
virtual void SetShiftBottomDepth(double bottomDepth);
|
||
virtual void SetBottomDepth(double bottomDepth);
|
||
|
||
virtual void SetShiftTopDepth(double topDepth);
|
||
virtual void SetTopDepth(double topDepth);
|
||
|
||
virtual pai::ios::welllog::DataObject *GetDbObject();
|
||
virtual QStringList GetColumnHeadList();
|
||
virtual CBaseObject *CloneObject();
|
||
//从slf加载数据
|
||
virtual bool LoadFromSLF();
|
||
//数据变化后写入slf数据
|
||
virtual bool SaveToSLF();
|
||
//从slf文件删除
|
||
virtual bool DeleteFromSLF();
|
||
virtual bool CopyToSLFFile(QString targetSLFFileName,bool deleteFromSrc=false,char*newCurveName=NULL);
|
||
virtual bool RenameToSLF(){return true;};
|
||
virtual bool CloneInSlfFile(QString newname);
|
||
virtual bool RenName(const QString & name);
|
||
virtual void AddShiftDepth(double shiftdepth);
|
||
virtual void ChangeDepth(double shiftdepth);
|
||
virtual void ApplyShiftDepth();
|
||
double GetShiftOffset();
|
||
void SetShiftOffset(double DepthOffset);
|
||
void EShiftDepth(int count,float *sdeps,float *edeps);
|
||
void MoveShift(float sdep,float edep,float dmove);
|
||
void MoveShift();
|
||
double GetRlev();
|
||
void SetRlev(float rlev);
|
||
bool IsLoaded() {
|
||
return isRun;
|
||
}
|
||
//说明:对象有两个名字,Name和AliasName,name就是slf文件中的curveName
|
||
virtual void SetAliasName(QString AliasName)
|
||
{
|
||
m_AliasName=AliasName;
|
||
}
|
||
virtual QString GetAliasName()
|
||
{
|
||
return m_AliasName;
|
||
}
|
||
|
||
virtual void SetUnit(QString Unit)
|
||
{
|
||
m_Unit=Unit;
|
||
}
|
||
virtual QString GetUnit()
|
||
{
|
||
return m_Unit;
|
||
}
|
||
|
||
virtual void SetAliasUnit(QString AliasUnit)
|
||
{
|
||
m_AliasUnit=AliasUnit;
|
||
}
|
||
virtual QString GetAliasUnit()
|
||
{
|
||
return m_AliasUnit;
|
||
}
|
||
|
||
virtual void SetDepthAliasUnit(QString DepthAliasUnit)
|
||
{
|
||
m_DepthAliasUnit=DepthAliasUnit;
|
||
}
|
||
virtual QString GetDepthAliasUnit()
|
||
{
|
||
return m_DepthAliasUnit;
|
||
}
|
||
|
||
virtual void SetDepthUnit(QString DepthUnit)
|
||
{
|
||
m_DepthUnit=DepthUnit;
|
||
}
|
||
virtual QString GetDepthUnit()
|
||
{
|
||
return m_DepthUnit;
|
||
}
|
||
|
||
void SetWell(CObjWell *pObjWell)
|
||
{
|
||
m_pObjWell=pObjWell;
|
||
}
|
||
|
||
/**
|
||
* @brief 根据读取的曲线名称进行自动匹配
|
||
*/
|
||
void AutoMatchFamily();
|
||
/**
|
||
* @brief familytype初始化曲线名和单位
|
||
*/
|
||
void InitCurveNameAndUnitByFamily(std::string familyType);
|
||
|
||
//重采样 intervel采样间隔
|
||
void ReSample(double newDelta);
|
||
/**
|
||
* @brief 得到去掉无效值后的MD,Property
|
||
*/
|
||
virtual void GetValidMDProperty(PFLOATPROPERTY &vMD,PFLOATPROPERTY &vProperty,float sdep=0,float edep=7000 );
|
||
|
||
/**
|
||
* @brief 获得所有的无效和有效的Property
|
||
*/
|
||
void GetMDProperty(FLOATPROPERTY &vMD,FLOATPROPERTY &vProperty );
|
||
/**
|
||
* @brief 获得深度范围内所有的无效和有效的Property
|
||
*/
|
||
void GetZoneMDProperty(FLOATPROPERTY &vMD,FLOATPROPERTY &vProperty ,float sdep=0,float edep=7000);
|
||
|
||
void SetMD(PFLOATPROPERTY *vMD );
|
||
void SetProperty(PFLOATPROPERTY *vMD,PFLOATPROPERTY *vProperty );
|
||
void SetProperty(PFLOATPROPERTY *vMD,FLOATPROPERTY *vProperty );
|
||
/**
|
||
* @brief 得到DB 测井对象
|
||
*/
|
||
// pai::ios::welllog::WelllogCurve &GetLogCurve();
|
||
|
||
/**
|
||
* @brief Get/Set MD,Proeprty
|
||
*/
|
||
PFLOATPROPERTY &GetProperty( );
|
||
PFLOATPROPERTY &GetMD( );
|
||
void SetProperty(FLOATPROPERTY *vMD, FLOATPROPERTY *vProperty );
|
||
void SetMD(FLOATPROPERTY *vMD );
|
||
//将内存数据清空
|
||
void clearData();
|
||
void SetSlfFileName(QString filePath);
|
||
QString GetSlfFileName();
|
||
virtual QString GetDescription();
|
||
void SetData(int repCode,char *buffer,double yy);
|
||
double GetData(int repCode,char *buffer,int repLen);
|
||
void SetData(int i,float *buffer);//按行写入一个数据
|
||
double GetData(int i,char *buffer=NULL);//按行杜一个数据
|
||
double GetData(float dep,char *buffer=NULL);//按深度取一个数据
|
||
void SetData(float dep,float *value);//按深度写入一个数据
|
||
void SetData(float dep,float value);
|
||
CObjWellLogTrack *GetWellLogTrack();
|
||
CObjWellTrack *GetWellTrack();
|
||
/************************************************************************/
|
||
/* @brief 得到该对象的模板关键字,例如井曲线对象的family名字 */
|
||
/************************************************************************/
|
||
virtual QVariant GetTemplateKey();
|
||
QString GetName(){return m_name;}
|
||
protected:
|
||
QString m_SlfFileName;
|
||
//private:
|
||
|
||
void _CalculateMinMax(bool force = false);
|
||
/**
|
||
* @brief 设置数据所属ID
|
||
*/
|
||
void SetBelongID();
|
||
|
||
|
||
float m_fPropertMin;
|
||
float m_fPropertMax;
|
||
double m_TopDepth;
|
||
double m_BottomDepth;
|
||
|
||
double m_ShiftTopDepth;
|
||
double m_ShiftBottomDepth;
|
||
double m_DepthOffset;
|
||
|
||
// pai::ios::welllog::WelllogCurve m_logCurve;
|
||
protected:
|
||
PFLOATPROPERTY m_vMD;
|
||
FLOATPROPERTY m_vMDShifting;
|
||
PFLOATPROPERTY m_vProperty;
|
||
LPSTR *m_SharedMemory;
|
||
HANDLE m_Handle;
|
||
QString key;
|
||
public:
|
||
char m_strValue[200];
|
||
QString m_AliasName;
|
||
int m_ObjectType;
|
||
float m_Rlev;
|
||
int IsObjectExist(QString name);
|
||
int m_ChangeNo;
|
||
std::vector<LayerInfo>m_vLayers;
|
||
CObjWell *m_pObjWell;
|
||
std::vector<float> m_vDepths; //深度序列.
|
||
std::vector<char> m_vFlags; //绘制标志.
|
||
bool isRun;
|
||
void loadInfo();
|
||
bool isLoad;
|
||
bool isUsing;
|
||
///////////////////////
|
||
QString m_Unit;
|
||
QString m_AliasUnit;
|
||
QString m_DepthUnit;
|
||
QString m_DepthAliasUnit;
|
||
QString m_name;
|
||
public slots:
|
||
void slotRefreshData(QString slf,QString curname,QObject*rec=NULL);
|
||
void slotDeAttchData(QString slf,QString curname);
|
||
public:
|
||
};
|
||
template <typename T>
|
||
void AddToWellRound(QString objname,T *aclass,char* ID,int Type);
|
||
|
||
using namespace pai::datamodel;
|
||
using namespace pai::ios::welllog;
|
||
|
||
END_OSGDATAMODEL_NAMESPACE
|
||
#endif
|