📄 seisinversionproceeds.cpp
字号:
// 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 + -