logplus/OSGDataModel/include/ObjWelllog.h
2025-11-10 16:35:40 +08:00

287 lines
7.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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和AliasNamename就是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