/** * @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 #include #include #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& GetDepths() { return m_vDepths; } std::vector& 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::vectorm_vLayers; CObjWell *m_pObjWell; std::vector m_vDepths; //深度序列. std::vector 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 void AddToWellRound(QString objname,T *aclass,char* ID,int Type); using namespace pai::datamodel; using namespace pai::ios::welllog; END_OSGDATAMODEL_NAMESPACE #endif