2025-11-10 16:35:40 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @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"
|
2025-12-02 15:23:42 +08:00
|
|
|
|
#include "geometryutils.h"
|
2025-11-10 16:35:40 +08:00
|
|
|
|
#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
|