logplus/OSGDataModel/include/ObjWelllog.h

287 lines
7.1 KiB
C
Raw Normal View History

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"
#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和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