bool RefCellContainer::AddNew( const RefObject &obj, AddRet *ret ) { if( m_usedCellCnt >= m_maxCellCnt ) return false; for( size_t i = 0; i < m_cells.size(); ++ i ) { CellContainer::Cell &cell = m_cells[i]; if( cell.status == CellContainer::Cell::EMPTY ) { // put it here. cell.status = CellContainer::Cell::USED; cell.id = obj.id; ret->id = cell.id; ret->pos = (long) i; ret->op = AddRet::NEW; AddNewObject( obj, (long) i ); return true; } } return false; }
void AutoFieldSetup() { MenuRootC::currTreeObj = NULL; fieldDataRoot.CloseUI(); bool multiWells = MultiWellIDS() && processTestZonePressureData; autoRoot = &fieldDataRoot; // just for effect fieldDataRoot.pageLeafs[0]->pageObjects[0]->SetID("Pens&ColorMaps"); fieldDataRoot.pageLeafs[0]->pageSelected = false; fieldDataRoot.pageLeafs[0]->pageExpanded = false; fieldDataRoot.pageLeafs[0]->UpdatePage(); // delete downstream pages DeleteFieldPage(processTestZonePressureData, "P_Cartesian", 0); DeleteFieldPage(processTestZoneFlowData, "Q_Cartesian", 0); // FuncObjArray fieldPFO, fieldQFO, simPFO, simQFO; if (multiWells) { for (int i = 0; i < currentWells.Size(); i++) { MenuPageC* currWell = fieldDataRoot.FindPage(currentWells[i], 0); if (currWell) { DeleteFieldPages(currWell); if (currWell->childPages.IsEmpty()) DeleteFieldPage(true, currentWells[i], 0); } } for (int i = 0; i < currentWells.Size(); i++) { wellID = currentWells[i]; MenuPageC* currWell = fieldDataRoot.FindPage(wellID, 0); if (!currWell) { AddNewDataPage(wellID, 0); currWell = autoPage; } AddFieldPages(autoPage, i == 0, fieldPFO, fieldQFO); simPFO += DataCaptureStaticSupport::GetWellPFO(wellID); simQFO += DataCaptureStaticSupport::GetWellQFO(wellID); } } else { DeleteFieldPages(0); wellID = currentWells[0]; AddFieldPages(0, true, fieldPFO, fieldQFO); simPFO += DataCaptureStaticSupport::GetWellPFO(wellID); simQFO += DataCaptureStaticSupport::GetWellQFO(wellID); } // set data capture // dataCapture.SetToInitial(); // sets s_PDAT & s_QDAT FuncObjC* pressSimFO = 0; FuncObjC* flowSimFO = 0; if (dataCapture.DataCaptureOK()) { pressSimFO = dataCaptureData[0]->GetObjRef(); if (processTestZoneFlowData) flowSimFO = dataCaptureData[1]->GetObjRef(); } if (createPressurePlot && processTestZonePressureData) { AddNewXYPage("Fld", "P_Cartesian", true, true); if (multiWells) { for (int i = 0; i < currentWells.Size(); i++) { char objID[80]; MakeString(objID, currentWells[i], "_Pressure", 80); PFO_2DXYData* currXY = AddXYDataPFO(objID); MakeString(objID, currentWells[i], " measured pressure", 80); SetXYDisplay(*currXY, 0, FuncObjRef(fieldPFO[i], 0), ps_FCircle, objID); currXY->xySeries[0].seriesPen = i + 1; MakeString(objID, currentWells[i], " simulated pressure", 80); SetXYDisplay(*currXY, 1, FuncObjRef(simPFO[i], 0), "Simulated pressure"); currXY->xySeries[1].seriesPen = i + 1; } } else { PFO_2DXYData* currXY = AddXYDataPFO("Pressure"); SetXYDisplay(*currXY, 0, FuncObjRef(fieldPFO[0], 0), ps_FCircle, "Measured pressure"); SetXYDisplay(*currXY, 1, FuncObjRef(simPFO[0], 0), "Simulated pressure"); } AddNewObject("PPO_SequenceGridLines", "Sequences", true); RecalcPage(); } if (createFlowPlot && processTestZoneFlowData) { AddNewXYPage("Fld", "Q_Cartesian", true, true); PFO_2DXYData* currXY = AddXYDataPFO("Flow"); SetXYDisplay(*currXY, 0, FuncObjRef(fieldQFO[0], 0), ps_FCircle, "Field flow rate"); SetXYDisplay(*currXY, 1, FuncObjRef(simQFO[0], 0), "Simulated flow rate"); AddNewObject("PPO_SequenceGridLines", "Sequences", true); RecalcPage(); } RecalcAll(); }
static void AddFieldPages(MenuPageC* parent, bool isMainWell, FuncObjArray& fieldPFO, FuncObjArray& fieldQFO) { FuncObjC* pressXYFO = 0; FuncObjC* flowXYFO = 0; char pressureID[80]; MakeString(pressureID, "fP", wellID, 80); char flowID[80]; MakeString(flowID, "fQ", wellID, 80); if ((inputDataFormat == idfTable) || (inputDataFormat == idfMiniTroll)) { MenuObjC* pressTblObj = 0; MenuObjC* flowTblObj = 0; MenuPageC* flowPage = 0; MenuPageC* pressPage = 0; const char* readObj = "DPO_ReadTable"; if (inputDataFormat == idfMiniTroll) readObj = "DPO_ReadMiniTroll"; if (isMainWell && processTestZonePressureData && processTestZoneFlowData && bothInSameFile) { DeleteFieldPage(true, "PQ_Input", parent); AddNewDataPage("PQ_Input", parent); pressTblObj = AddNewObject(readObj, "PQ_Input"); flowTblObj = pressTblObj; flowPage = autoPage; pressPage = autoPage; } else { // seperate pages if (processTestZonePressureData) { AddNewDataPage("P_Input", parent); pressTblObj = AddNewObject(readObj, "P_Input"); pressPage = autoPage; } if (isMainWell && processTestZoneFlowData) { AddNewDataPage("Q_Input", parent); flowTblObj = AddNewObject(readObj, "Q_Input"); flowPage = autoPage; } } if (processTestZonePressureData) { pressPage->pageSelected = true; pressTblObj->objSelected = true; } else if (isMainWell) { flowPage->pageSelected = true; flowTblObj->objSelected = true; } if (processTestZonePressureData) { autoPage = pressPage; MenuObjC* pressXYObj = AddNewObject("DPO_SelectXY", pressureID); DFO_SelectXY* currXY = static_cast<DFO_SelectXY*>(pressXYObj->objFunction); currXY->xyDataArrayObjRef = FuncObjRef(*(pressTblObj->objFunction)); pressXYFO = currXY; } if (isMainWell && processTestZoneFlowData) { autoPage = flowPage; MenuObjC* flowXYObj = AddNewObject("DPO_SelectXY", flowID); DFO_SelectXY* currXY = static_cast<DFO_SelectXY*>(flowXYObj->objFunction); currXY->xyDataArrayObjRef = FuncObjRef(*(flowTblObj->objFunction)); flowXYFO = currXY; } } else { if (processTestZonePressureData) { AddNewDataPage("P_Input", parent); MenuObjC* pressObj = AddNewObject("DPO_ReadXY", pressureID); autoPage->pageSelected = true; pressObj->objSelected = true; pressXYFO = pressObj->objFunction; } if (isMainWell && processTestZoneFlowData) { AddNewDataPage("Q_Input", parent); MenuObjC* flowObj = AddNewObject("DPO_ReadXY", flowID); if (!processTestZonePressureData) { autoPage->pageSelected = true; flowObj->objSelected = true; } flowXYFO = flowObj->objFunction; } } // check for post processing if (processDups || processReduce || processST) { if (processTestZonePressureData) { DeleteFieldPage(true, "P_Process", parent); AddNewDataPage("P_Process", parent); FieldProcessing(pressXYFO); } if (isMainWell && processTestZoneFlowData) { DeleteFieldPage(true, "Q_Process", parent); AddNewDataPage("Q_Process",parent); FieldProcessing(flowXYFO); } } fieldPFO += pressXYFO; fieldQFO += flowXYFO; }