#ifndef GEOMETRYUTILS_H #define GEOMETRYUTILS_H #include #include #include //#include #include #include #include #pragma execution_character_set("utf-8") //const double PI = osg::PI; const double PI = 3.14159265358979323846; struct LayerInfo { QString name; float top; float bottom; float rlev; int shape; QUuid m_DataSourceX; QUuid m_DataSourceY; QUuid m_DataSourceZ; std::vector m_vXData; std::vector m_vYData; std::vector m_vZData; public: void SetDataSourceX(QUuid id) { m_DataSourceX = id; } void SetDataSourceY(QUuid id) { m_DataSourceY = id; } void SetDataSourceZ(QUuid id) { m_DataSourceZ = id; } QUuid GetDataSourceX() { return m_DataSourceX; } QUuid GetDataSourceY() { return m_DataSourceY; } QUuid GetDataSourceZ() { return m_DataSourceZ; } }; QString GetProjectFolder(); QString GetLogdataPath(); void GetWellNameAndPath(QString slf,QString &wellname,QString &path); int chakan(QString path, QStringList &wellfs, QString strSuffix); QString GetOilFieldName(QString c=QDir::separator()); QString ReadOilFieldName(); QString GetLogPlusPath(); QMap GetZoneOrder(QString table,bool isOilFile=true,QWidget *pW=NULL); QMap GetZoneOrder(bool isOilFile=true,QWidget *pW=NULL); bool IsInvalidString(QString filename); bool IsValidWellName(QString wellname); QString toString(QString cs); QString toString(int value,char f='f',int dem=3,bool iscut=1,bool ise=true); QString toString(float value,char f='f',int dem=3,bool iscut=1,bool ise=true); QString toString(double value,char f='f',int dem=3,bool iscut=1,bool ise=true); QString setdec(QString text,int dec=2,bool all=false); QStringList GetSimilarCurves(QString curvename,char *INI=NULL,bool isEQU=true); QString GetImagePath(); QString GetOutDataPath(); QString GetDate(time_t mDate); QString GetConfPath(); bool RenameWellName(QString filename, QString strNewName); void ComboxFromConfigFile( QComboBox *aCombox ,QString configCategory); QStatusBar * GetStatusBar(); QString DoubleToString(double dValue, int nDecimal,int *pReallyDecimal); void SetSystemExisting(bool exiting); bool SystemExiting(); bool getAllSlf(QString prjname, QVector &vecSlfList, QVector &vecWellList);//直方图,获取当前工程下的slf struct WellHead { WellHead() { rlev=0.125; //深度采样间隔 x=0,y=0,z=0; //井口坐标 dxe=0,dyn=0; //xy偏移 tvd=0; //井口垂直高度 depth=0; //测量深度 earthEle=0; //地面海拔 dEle=0; // 补心高 azca=0; // 闭合方位,磁偏角 m_ShowWellHead=true; //是否显示井 m_ShowLabel=true; //是否显示井标注 strWellType="";//1表示采油井、2 注水井、产水井、气井、干井、报废井、设计井 WellID=0; //井的内置ID号 wellName=""; //井名 startDepth=0; //起始深度 endDepth=0; //终止深度 _ProjAngle=0; _HorizBoreXE=0; _HorizBoreYN=0; _EndXE=0; _EndYN=0;// maxz=-9999999; minz=9999999; }; ~WellHead() { }; bool m_ShowWellHead; //是否显示井头 bool m_ShowLabel; //是否显示井标注 bool m_bShowCurve; //是否显示测井曲线 bool m_bShow; //是否显示井 //======================================================== QColor lableColor; //是否显示井标注 //======================================================== public: QString strWellType;//1表示采油井、2 注水井、产水井、气井、干井、报废井、设计井 int WellID; //井的内置ID号 QString wellName; //井名 float startDepth; //起始深度 float endDepth; //终止深度 float rlev; //深度采样间隔 double x,y,z; //井口坐标 float dxe,dyn; //xy偏移 float tvd; //井口垂直高度 float depth; //测量深度 float earthEle ; //地面海拔 float dEle; // 补心高 float azca; // 闭合方位,磁偏角 float _ProjAngle; double _HorizBoreXE; double _HorizBoreYN; double _EndXE, _EndYN;// float maxz; float minz; QString path; void Serializable(QDataStream& ds) { if(ds.device()->isWritable()) { ds<>m_ShowWellHead; //是否显示井头 ds>>m_ShowLabel; //是否显示井标注 ds>>lableColor; //是否显示井标注 ds>>strWellType;//1表示采油井、2 注水井、产水井、气井、干井、报废井、设计井 ds>>WellID; //井的内置ID号 ds>>wellName; //井名 ds>>path; ds>>startDepth; //起始深度 ds>>endDepth; //终止深度 ds>>rlev; //深度采样间隔 ds>>x>>y>>z; //井口坐标 ds>>dxe,dyn; //xy偏移 ds>>tvd; //井口垂直高度 ds>>depth; //测量深度 ds>>earthEle; //地面海拔 ds>>dEle; // 补心高 ds>>azca; // 闭合方位,磁偏角 } } void Method(float DEVI,float AZIM,float &AZCA,float &RLEA,float &AZA0,int &FLAG,float &DEV1,float &AZIM1,float &DEV2,float &AZIM2,float &FLSA,float &XE,float &YN,float &DZDA,float &ZD,float &TVDS,float &HOFF,float &HOAZ) { float RLES,DX,DY,TVD,DDB,DDV,DDE,DDA,X,Y; DEVI=(DEVI/180.)*PI; AZIM= fmod(AZIM+AZCA+360.0,360.0); //AZCA=??? RLES=RLEA; AZIM=(AZIM/360.)*(2*PI); //AZA0=??? if(RLEA==0.1524) { if((AZA0>=90.0) && (AZA0<180.0)) RLES=0.15241f; if((AZA0>=180.0) && (AZA0<270.0)) RLES=0.152422f; if((AZA0>=270.0) && (AZA0<=360.0)) RLES=0.1524333f; if((AZA0>=0.0) && (AZA0 <15.0)) RLES=0.152388f; if((AZA0>=15.0) && (AZA0 <90.0)) RLES=0.15242f; } if(RLEA==0.0762) { if((AZA0>=90.0) && (AZA0<140.0)) RLES=0.07623f; if((AZA0>=140.0) && (AZA0<180.0)) RLES=0.0762332f; if((AZA0>=180.0) && (AZA0<270.0)) RLES=0.0762331f; if((AZA0>=270.0) && (AZA0<=360.0)) RLES=0.0762332f; if((AZA0>=0.0) && (AZA0<15.0)) RLES=0.076188f; if((AZA0>=15.0) && (AZA0<90.0)) RLES=0.07623325f; } if(FLAG==1.0) // FLAG =???? goto label_22; FLAG=1.0; DEV1=DEVI; AZIM1=AZIM; goto label_11; label_22 : DEV2=DEVI; AZIM2=AZIM; if(FLSA==0.0) { if((DEV2==DEV1) && (AZIM2==AZIM1)) goto label_100; if((DEV2==DEV1) && (AZIM2!=AZIM1)) goto label_300; if((DEV2!=DEV1) && (AZIM2==AZIM1)) goto label_200; if ((AZIM1<=1.5*PI) && (AZIM1>=0.5*PI)) goto label_500; if((AZIM2<=1.5*PI) && (AZIM2>=0.5*PI)) goto label_500; if((AZIM1>1.5*PI) && (AZIM2>1.5*PI)) goto label_500; if((AZIM1<0.5*PI) && (AZIM2<0.5*PI)) goto label_500; if((AZIM1<0.5*PI) && (AZIM2>1.5*PI)) goto label_400; DDA=(DEV2-DEV1)*(AZIM2+2*PI-AZIM1); DDV=(cos(DEV1)-cos(DEV2))*(cos(AZIM1)-cos(AZIM2)); DDE=(cos(DEV1)-cos(DEV2))*(sin(AZIM2)-sin(AZIM1)); DX=(RLES*DDV)/DDA; DY=(RLES*DDE)/DDA; goto label_510; label_400 : DDB=(DEV2-DEV1)*(AZIM2-2*PI-AZIM1); DDV=(cos(DEV1)-cos(DEV2))*(cos(AZIM1)-cos(AZIM2)); DDE=(cos(DEV1)-cos(DEV2))*(sin(AZIM2)-sin(AZIM1)); DX=(RLES*DDV)/DDB; DY=(RLES*DDE)/DDB; goto label_510; label_500 : DDB=(DEV2-DEV1)*(AZIM2-AZIM1); DDV=(cos(DEV1)-cos(DEV2))*(cos(AZIM1)-cos(AZIM2)); DDE=(cos(DEV1)-cos(DEV2))*(sin(AZIM2)-sin(AZIM1)); DX=(RLES*DDV)/DDB; DY=(RLES*DDE)/DDB; label_510 : TVD=(RLES*(sin(DEV2)-sin(DEV1)))/(DEV2-DEV1); goto label_666; label_100 : DX=RLES*sin(DEV2)*sin(AZIM2); DY=RLES*sin(DEV2)*cos(AZIM2); TVD=RLES*cos(DEV2); goto label_666; label_200 : DX=(RLES*(cos(DEV1)-cos(DEV2))*sin(AZIM2))/(DEV2-DEV1); DY=(RLES*(cos(DEV1)-cos(DEV2))*cos(AZIM2))/(DEV2-DEV1); TVD=(RLES*(sin(DEV2)-sin(DEV1)))/(DEV2-DEV1); goto label_666; label_300 : if ((AZIM1<=1.5*PI) && (AZIM1>=0.5*PI)) goto label_600; if((AZIM2<=1.5*PI) && (AZIM2>=0.5*PI)) goto label_600; if((AZIM1>1.5*PI) && (AZIM2>1.5*PI)) goto label_600; if((AZIM1<0.5*PI) && (AZIM2<0.5*PI)) goto label_600; if((AZIM1<0.5*PI) && (AZIM2>1.5*PI)) goto label_550; DX=(RLES*(cos(AZIM1)-cos(AZIM2))*sin(DEV2))/(2*PI+AZIM2-AZIM1); DY=(RLES*(sin(AZIM2)-sin(AZIM1))*sin(DEV2))/(2*PI+AZIM2-AZIM1); goto label_650; label_550 : DX=(RLES*(cos(AZIM1)-cos(AZIM2))*sin(DEV2))/(AZIM2-AZIM1-2*PI); DY=(RLES*(sin(AZIM2)-sin(AZIM1))*sin(DEV2))/(AZIM2-AZIM1-2*PI); goto label_650; label_600 : DX=(RLES*(cos(AZIM1)-cos(AZIM2))*sin(DEV2))/(AZIM2-AZIM1); DY=(RLES*(sin(AZIM2)-sin(AZIM1))*sin(DEV2))/(AZIM2-AZIM1); label_650 : TVD=RLES*cos(DEV2); label_666 : XE=XE+DX; YN=YN+DY; DZDA=DZDA+TVD; //DZDA=? ZD=TVDS+DZDA; //TVDS=? } if(FLSA==1.0) { DX=RLES*sin(DEV2)*sin(AZIM2); DY=RLES*sin(DEV2)*cos(AZIM2); TVD=RLES*cos(DEV2); XE=XE+DX; YN=YN+DY; DZDA=DZDA+TVD; ZD=TVDS+DZDA; } DEV1=DEV2; AZIM1=AZIM2; HOFF=sqrt(XE*XE+YN*YN); X=abs(XE); Y=abs(YN) ; if((XE>0.0) && (YN>0.0)) HOAZ=atan2(X,Y) ; if((XE>0.0) && (YN<0.0)) HOAZ=PI-atan2(X,Y); if((XE<0.0) && (YN<0.0)) HOAZ=PI+atan2(X,Y); if((XE<0.0) && (YN>0.0)) HOAZ=2*PI-atan2(X,Y) ; if((XE==0.0) && (YN>0.0)) HOAZ=0.; if((YN==0.0) && (XE>0.0)) HOAZ=0.5*PI; if((XE==0.0) && (YN<0.0)) HOAZ=PI ; if((YN==0.0) && (XE<0.0)) HOAZ=1.5*PI ; HOAZ=(HOAZ*360.)/(2*PI) ; label_11 : ; } }; #endif // GEOMETRYUTILS_H