⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seisinversionproceeds.cpp

📁 石油勘探专业算法
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// SeisInversion.cpp: implementation of the TravInter class.////////////////////////////////////////////////////////////////////////#include "SeisInversion.h"#include "newsGeneralHeader.hh"#include "wDGColorPlateDialog.hh"#include "wDBScatterCurveInSurvey.hh"#include "wURSeis3DTemplate.hh"#include "wURSeis3D.hh"#include "wDBTempHorDataVolume.hh"#include "wPRSeisAttrsBase.hh"#include "newsSeisAttrs.hh"#include "wDGSeis2DRangeDialog1.h"#include "wDGSeis3DRangeDialog.h"#include "stdio.h"#include "string.h"#include "stdlib.h"#include "SeisInversion.h"#include "X11/Xos.h"#include "time.h"//////////////////////////////////////////////////////////////////Top menu:Toolsvoid SeisInversion::OnProceedRange(){	while(_grid_value_lines){		GridValueLine* temp = _grid_value_lines->next;		delete _grid_value_lines;		_grid_value_lines = temp;	}//	RemoveMouseEvent(-1);//	UnloadPopupMenu(-1);	if(_seis_tpt == NULL) return;	if( (_seis_tpt->GetSurveyType() != Seis2Dsurvey)&&(_seis_tpt->GetSurveyType() != Seis3Dsurvey)) return;	if(_seis_tpt->GetSurveyType() == Seis2Dsurvey){		wDGSeis2DRangeDialog2 *dlg1 = NULL;		dlg1 = new wDGSeis2DRangeDialog2(this);		dlg1->SetName("SeisInversionSeis2DProceedRange");		dlg1->SetControlMode(ControlDialogByUser);		dlg1->Create2DRangeDialog(ObtainTopShell());		dlg1->SetPars(_seis_tpt->Obtain2DTemplate());		dlg1->Manage();		if(dlg1->GetUserAnwser() == 1) {			dlg1->GetPars(_seis_tpt->Obtain2DTemplate());			_seis_tpt->Obtain2DTemplate()->ObtainSeis2D()->GetT0DepthRange(_st0,_et0,_dt0);		}		delete dlg1;		dlg1 = NULL;			} else {		wDGSeis3DRangeDialog2 *dlg2 = NULL;		dlg2 = new wDGSeis3DRangeDialog2(this);		dlg2->SetName("SeisInversionSeis3DProceedRange");		dlg2->SetControlMode(ControlDialogByUser);		dlg2->CreateDialogBox(ObtainTopShell());		dlg2->SetPars(_seis_tpt->Obtain3DTemplate());		dlg2->Manage();		int status = 0;		if(dlg2->GetUserAnwser() == 1) {			dlg2->GetPars(_seis_tpt->Obtain3DTemplate());			_seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->SetCurrentType(_otype);			if(_otype == InLineIn3DSurvey){				status = _seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->SetCurrentLine(_oid);			}			if(_otype == XLineIn3DSurvey) {				status = _seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->SetCurrentCDP(_oid);			}		}		delete dlg2;		dlg2 = NULL;	}}void SeisInversion::OnProceedSectionDefine(){	while(_grid_value_lines){		GridValueLine* temp = _grid_value_lines->next;		delete _grid_value_lines;		_grid_value_lines = temp;	}	int status = 0;	if(_seis_tpt == NULL) return;	wURScatterDataInSection* data = NULL;	data = _seis_tpt->ObtainScatterSection();//	RemoveMouseEvent(-1);//	UnloadPopupMenu(-1);	if(_seis_tpt->GetSurveyType() == Seis2Dsurvey) {		SetOwnerType(LineIn2DSurvey,_seis_tpt->Obtain2DTemplate()->ObtainSeis2D()->GetCurrentLine());		data->SetSeisPars(_seis_tpt->Obtain2DTemplate());		wURSeis2D* seis_2D_range = NULL;		seis_2D_range = _seis_tpt->Obtain2DTemplate()->ObtainSeis2D();		seis_2D_range->GetT0DepthRange(_st0,_et0,_dt0);		char sc_id[16];		data->GetScatterID(sc_id);		if(strlen(sc_id) == 0) {			status = data->InitScatterData(seis_2D_range->GetSurveyID(),				"LowFreqVel");		}		status = data->ReadScatterData(LineIn2DSurvey,_seis_tpt->Obtain2DTemplate()->GetLineID());		return;	}	if(_section_define_dlg == NULL) {		_section_define_dlg = new SeisInversionSectionDefineDialog(this,_seis_tpt);		_section_define_dlg->SetPars(0);	} else {			_section_define_dlg->SetPars(0);			_section_define_dlg->Manage();	}}void SeisInversion::OnProceedCurve(){	while(_grid_value_lines){		GridValueLine* temp = _grid_value_lines->next;		delete _grid_value_lines;		_grid_value_lines = temp;	}	RemoveMouseEvent(-1);	AddMouseEvent(1);	UnloadPopupMenu(-1);	LoadPopupMenu(1001);}void SeisInversion::OnProceedGrid(){	RemoveMouseEvent(-1);	UnloadPopupMenu(-1);	_grid_value = 0.0;	if(!_grid_dialog) _grid_dialog = new SeisInversionGridDialog(ObtainTopShell(),this);	else _grid_dialog->Manage();}void SeisInversion::OnProceedInsertWell(){	while(_grid_value_lines){		GridValueLine* temp = _grid_value_lines->next;		delete _grid_value_lines;		_grid_value_lines = temp;	}	RemoveMouseEvent(-1);	UnloadPopupMenu(-1);	AddMouseEvent(4);}void SeisInversion::OnProceedInitModel(){	while(_grid_value_lines){		GridValueLine* temp = _grid_value_lines->next;		delete _grid_value_lines;		_grid_value_lines = temp;	}	RemoveMouseEvent(-1);	UnloadPopupMenu(-1);	SeisInversionHorizonRestictDialog* dlg = new SeisInversionHorizonRestictDialog(this);	dlg->Manage();	if(dlg->GetUserAnwser() == 1) {		wURHorizonRestrictPars* pars = NULL;		int num = 0;		pars = dlg->ObtainRestrictPars(num);		if(pars){			_seis_tpt->SetHorizonPars(pars,num);			if(_current_path[0] != '\0')				_seis_tpt->SaveInversionTemp(_current_path);			if(_seis_tpt->GetSurveyType() == Seis3Dsurvey)				InterpolateOperation();			if(_seis_tpt->GetSurveyType() == Seis2Dsurvey)				Interpolate2DOperation();		}	}}void SeisInversion::SetControlCurvePoints(wDBScatterCurveInSurvey* curve){	if(_curve == NULL) return;	wDBScatterDataPoint *points = NULL;	int points_num;	points = curve->GetPoints(points_num);	if( (points == NULL)||(points_num == 0) ) return;	wURScatterDataInSection* data = NULL;	data = _seis_tpt->ObtainScatterSection();	_curve->SetPoints(points,points_num);	if((_curve_new_flag > 0)&&(_is_added_flag == 0) ) {		int status = data->AddOneCurve(_curve);		_is_added_flag = 100;	}	delete[] points;	OnDrawsReflash();}int SeisInversion::SelectControlCurve(){	wDBScatterCurveInSurvey **scatter_curves = NULL;	int scatter_curves_num = 0;	wURScatterDataInSection* data = NULL;	data = _seis_tpt->ObtainScatterSection();	scatter_curves = data->ObtainAllCurves(scatter_curves_num);	int line_id;	int cdp;	float tr;	_seis_draw->GetTraceValue(_db_mouse_x,tr);	_cdp = (int)tr;	if( (scatter_curves_num > 0)&&(scatter_curves != NULL) ) {		int i = 0;		for(i = 0;i<scatter_curves_num;i++) {			scatter_curves[i]->GetLineAndCDP(line_id,cdp);			if(_cdp == cdp) break;		}		if(i < scatter_curves_num) {			_line_id = line_id;			if( (_curve_new_flag > 0)&&(_curve) ) delete _curve;			_curve = scatter_curves[i];			_curve_new_flag = 0;			_is_added_flag = 100;			if(_ctrl_curve_dlg == NULL) {				_ctrl_curve_dlg = new wDGControlCurveForInitialModelDialog(this,_seis_draw);			}			_ctrl_curve_dlg->Manage();			_ctrl_curve_dlg->SetPars(_st0,_et0,scatter_curves[i],line_id,cdp);			return 0;		}	}	if( (_curve_new_flag > 0)&&(_curve) ) delete _curve;	_curve = NULL;	_curve_new_flag = 100;	_is_added_flag = 0;	_curve = new wDBScatterCurveInSurvey();////////////////////////////////////////////////////////////////	if(_seis_tpt->GetSurveyType() == Seis2Dsurvey) {		_line_id = _seis_tpt->Obtain2DTemplate()->GetLineID();		_curve->SetLineAndCDP(_line_id,_cdp);	} else {		if(_seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentType() == InLineIn3DSurvey) {			_line_id = _seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentLine();			_curve->SetLineAndCDP(_line_id,_cdp);		}		if(_seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentType() == XLineIn3DSurvey) {			_line_id = _seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentCDP();			_curve->SetLineAndCDP(_cdp,_line_id);		}	}////////////////////////////////////////////////////////////////	char sc_id[16];	data->GetScatterID(sc_id);	_curve->SetScatterDataID(sc_id);	if(_ctrl_curve_dlg == NULL) {		_ctrl_curve_dlg = new wDGControlCurveForInitialModelDialog(this,_seis_draw);	}	_ctrl_curve_dlg->Manage();	_ctrl_curve_dlg->SetPars(_st0,_et0,NULL,_line_id,_cdp);	return 0;}void SeisInversion::InsertGridValue(int *xs,int *ys,int num){	if(!_grid_value_lines) {		_grid_value_lines = new GridValueLine();		_grid_value_lines->next = NULL;		_grid_value_lines->xs = new int[num];		_grid_value_lines->ys = new int[num];		_grid_value_lines->num = num;		_grid_value_lines->value = _grid_value;		memcpy(_grid_value_lines->xs,xs,num * sizeof(int));		memcpy(_grid_value_lines->ys,ys,num * sizeof(int));	} else {		GridValueLine* p = new GridValueLine();		p->next = _grid_value_lines;		p->xs = new int[num];		p->ys = new int[num];		p->num = num;		p->value = _grid_value;		memcpy(p->xs,xs,num * sizeof(int));		memcpy(p->ys,ys,num * sizeof(int));		_grid_value_lines = p;	}	if(_grid_value <= 0.0) return;	int *cdps = new int[num];	int *t0_deps = new int[num];	int line_id;	int cdp;	int t0_dep;	float tr;	float time;	for(int j = 0;j<num;j++) {		_seis_draw->GetTimeValue(ys[j],time);		_seis_draw->GetTraceValue(xs[j],tr);		cdps[j] = (int)tr;		t0_deps[j] = (int)time;	}	wDBScatterCurveInSurvey **scatter_curves = NULL;	int scatter_curves_num = 0;	wURScatterDataInSection* data = NULL;	data = _seis_tpt->ObtainScatterSection();	scatter_curves = data->ObtainAllCurves(scatter_curves_num);	if( (scatter_curves_num > 0)&&(scatter_curves != NULL) ) {		int i = 0;		for(i = 0;i<scatter_curves_num;i++) {			scatter_curves[i]->GetLineAndCDP(line_id,cdp);			FindInsectPoint(cdps,t0_deps,num,cdp,t0_dep);			int status = 0;			status = scatter_curves[i]->InsertOnePoint((float)t0_dep,_grid_value);		}	}	OnDrawsReflash();}void SeisInversion::FindInsectPoint(int *cdps,int *t0_deps,int num,int cdp,int& t0_dep){	int i = 0;	for(i = 0;i<num - 1;i++) {		if( (cdps[i] <= cdp)&&(cdps[i + 1] >= cdp) ) break;	}	if(i >= num - 1) {		t0_dep = -1;		return;	}	t0_dep = t0_deps[i] + (cdp - cdps[i])/(cdps[i + 1] - cdps[i])*(t0_deps[i + 1] - t0_deps[i]);}void SeisInversion::WellInsertOper(){	SeisInversionInsertWellDialog* dlg = new SeisInversionInsertWellDialog(this,_seis_tpt);	dlg->CreateInsertWellDialog(ObtainTopShell());	dlg->SetFreqPars(_freq1,_freq2);	dlg->Manage();	if(dlg->GetUserAnwser() == 1) {		int linear_flag = 0;		float default_value = 0.0;		int well_id = 0;		int vel_idx = 0;		int freq_flag = 0;		char* cali_id = NULL;		int den_idx = 0;		float a_val;		float b_val;		dlg->GetPars(linear_flag,default_value,freq_flag,well_id,			cali_id,vel_idx,den_idx,a_val,b_val,_freq1,_freq2);		wDBSyntheticTraceOfVerticalWell* well_vel_data = NULL;		wDBSyntheticTraceOfVerticalWell* well_den_data = NULL;		well_vel_data = new wDBSyntheticTraceOfVerticalWell(cali_id,vel_idx);		well_den_data = new wDBSyntheticTraceOfVerticalWell(cali_id,den_idx);		int status = well_vel_data->OpenVWSynTrace();		if(status != OK_STATUS) return;		if(den_idx > 0)			status = well_den_data->OpenVWSynTrace();		if(status != OK_STATUS) return;		float tr;		_seis_draw->GetTraceValue(_db_mouse_x,tr);		_cdp = (int)tr;		wDBScatterCurveInSurvey* curve = NULL;		curve = new wDBScatterCurveInSurvey();////////////////////////////////////////////////////////////////		if(_seis_tpt->GetSurveyType() == Seis2Dsurvey) {			_line_id = _seis_tpt->Obtain2DTemplate()->GetLineID();			curve->SetLineAndCDP(_line_id,_cdp);		} else {				if(_seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentType()					== InLineIn3DSurvey) {					_line_id = _seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentLine();					curve->SetLineAndCDP(_line_id,_cdp);				}				if(_seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentType()					== XLineIn3DSurvey) {					_line_id = _seis_tpt->Obtain3DTemplate()->ObtainSeis3D()->GetCurrentCDP();					curve->SetLineAndCDP(_cdp,_line_id);				}		}////////////////////////////////////////////////////////////////		wURScatterDataInSection* data = NULL;		data = _seis_tpt->ObtainScatterSection();		char sc_id[16];		data->GetScatterID(sc_id);		curve->SetScatterDataID(sc_id);		int st0,et0,dt0,st01,et01,dt01;		float* vel_values = NULL;		float* den_values = NULL;		float temp = 0.0;		float* values1 = NULL;		int vel_num = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -