//------------------------------------------------------------------------------ bool Target::Initialize() { GmatBase *mapObj = NULL; cloneCount = 0; if ((mapObj = FindObject(solverName)) == NULL) { wxString errorString = wxT("Target command cannot find targeter \""); errorString += solverName; errorString += wxT("\""); throw CommandException(errorString, Gmat::ERROR_); } // Clone the targeter for local use #ifdef DEBUG_TARGET_INIT MessageInterface::ShowMessage (wxT("Target::Initialize() cloning mapObj <%p>'%s'\n"), mapObj, mapObj->GetName().c_str()); MessageInterface::ShowMessage (wxT("mapObj maxIter=%d\n"), mapObj->GetIntegerParameter(mapObj->GetParameterID(wxT("MaximumIterations")))); #endif // Delete the old cloned solver if (theSolver) { #ifdef DEBUG_MEMORY MemoryTracker::Instance()->Remove (theSolver, wxT("local solver", "Target::Initialize()"), wxT("deleting local cloned solver")); #endif delete theSolver; } theSolver = (Solver *)(mapObj->Clone()); if (theSolver != NULL) ++cloneCount; #ifdef DEBUG_MEMORY MemoryTracker::Instance()->Add (theSolver, theSolver->GetName(), wxT("Target::Initialize()"), wxT("theSolver = (Solver *)(mapObj->Clone())")); #endif theSolver->TakeAction(wxT("ResetInstanceCount")); mapObj->TakeAction(wxT("ResetInstanceCount")); theSolver->TakeAction(wxT("IncrementInstanceCount")); mapObj->TakeAction(wxT("IncrementInstanceCount")); if (theSolver->GetStringParameter(wxT("ReportStyle")) == wxT("Debug")) targeterInDebugMode = true; theSolver->SetStringParameter(wxT("SolverMode"), GetStringParameter(SOLVER_SOLVE_MODE)); theSolver->SetStringParameter(wxT("ExitMode"), GetStringParameter(SOLVER_EXIT_MODE)); // Set the local copy of the targeter on each node std::vector<GmatCommand*>::iterator node; GmatCommand *current; specialState = Solver::INITIALIZING; for (node = branch.begin(); node != branch.end(); ++node) { current = *node; #ifdef DEBUG_TARGET_COMMANDS Integer nodeNum = 0; #endif while ((current != NULL) && (current != this)) { #ifdef DEBUG_TARGET_COMMANDS MessageInterface::ShowMessage( wxT(" Target Command %d: %s\n"), ++nodeNum, current->GetTypeName().c_str()); #endif if ((current->GetTypeName() == wxT("Vary")) || (current->GetTypeName() == wxT("Achieve"))) current->SetRefObject(theSolver, Gmat::SOLVER, solverName); current = current->GetNext(); } } bool retval = SolverBranchCommand::Initialize(); if (retval == true) { // Targeter specific initialization goes here: if (FindObject(solverName) == NULL) { wxString errorString = wxT("Target command cannot find targeter \""); errorString += solverName; errorString += wxT("\""); throw CommandException(errorString); } retval = theSolver->Initialize(); } targeterInFunctionInitialized = false; return retval; }
//------------------------------------------------------------------------------ // virtual void SaveData() //------------------------------------------------------------------------------ void GroundTrackPlotPanel::SaveData() { #if DEBUG_PANEL_SAVE MessageInterface::ShowMessage ("GroundTrackPlotPanel::SaveData() entered, mHasCentralBodyChanged=%d, " " mHasObjectListChanged=%d\n mHasIntegerDataChanged=%d, " "mHasTextureMapChanged=%d\n", mHasCentralBodyChanged, mHasObjectListChanged, mHasIntegerDataChanged, mHasTextureMapChanged); #endif canClose = true; std::string str1, str2; Integer collectFreq = 0, updateFreq = 0, pointsToRedraw = 0; //----------------------------------------------------------------- // check values from text field //----------------------------------------------------------------- if (mHasIntegerDataChanged) { CheckInteger(collectFreq, mDataCollectFreqTextCtrl->GetValue().c_str(), "DataCollectFrequency", "Integer Number > 0", false, true, true); CheckInteger(updateFreq, mUpdatePlotFreqTextCtrl->GetValue().c_str(), "UpdatePlotFrequency", "Integer Number > 0", false, true, true); CheckInteger(pointsToRedraw, mNumPointsToRedrawTextCtrl->GetValue().c_str(), "NumPointsToRedraw", "Integer Number >= 0", false, true, true, true); } if (!canClose) return; //----------------------------------------------------------------- // save values to base, base code should do the range checking //----------------------------------------------------------------- GmatBase *clonedObj = mGroundTrackPlot->Clone(); try { if (mHasCentralBodyChanged) { std::string newCentralBody = mCentralBodyComboBox->GetValue().WX_TO_STD_STRING; std::string newTexture = mTextureMapTextCtrl->GetValue().WX_TO_STD_STRING; clonedObj->SetStringParameter("CentralBody", newCentralBody); mHasCentralBodyChanged = false; // Set mHasTextureMapChanged to true so that it can be validated below (LOJ: 2014.11.03) mHasTextureMapChanged = true; } if (mHasObjectListChanged) { #if DEBUG_PANEL_SAVE MessageInterface::ShowMessage(" Saving object list\n"); #endif clonedObj->TakeAction("Clear"); int count = mObjectCheckListBox->GetCount(); for (int i = 0; i < count; i++) { if (mObjectCheckListBox->IsChecked(i)) { std::string objName = mObjectCheckListBox->GetString(i).WX_TO_STD_STRING; #ifdef DEBUG_PANEL_SAVE MessageInterface::ShowMessage(" objName = '%s'\n", objName.c_str()); #endif clonedObj->SetStringParameter("Add", objName); } } mHasObjectListChanged = false; } if (mHasIntegerDataChanged) { #if DEBUG_PANEL_SAVE MessageInterface::ShowMessage(" Saving Integer data\n"); #endif clonedObj->SetIntegerParameter("DataCollectFrequency", collectFreq); clonedObj->SetIntegerParameter("UpdatePlotFrequency", updateFreq); clonedObj->SetIntegerParameter("NumPointsToRedraw", pointsToRedraw); mHasIntegerDataChanged = false; } if (mHasDataOptionChanged) { #if DEBUG_PANEL_SAVE MessageInterface::ShowMessage(" Saving drawing options\n"); #endif clonedObj->SetBooleanParameter("ShowPlot", mShowPlotCheckBox->GetValue()); clonedObj->SetStringParameter("SolverIterations", mSolverIterComboBox->GetValue().c_str()); mHasDataOptionChanged = false; } // Save texture map if (mHasTextureMapChanged) { #if DEBUG_PANEL_SAVE MessageInterface::ShowMessage(" Saving new texture map\n"); #endif // Validate texture map file (LOJ: 2014.10.30) wxString wxTextureMap = mTextureMapTextCtrl->GetValue(); std::string textureMap = wxTextureMap.WX_TO_STD_STRING; if (clonedObj->IsParameterValid("TextureMap", textureMap)) { clonedObj->SetStringParameter("TextureMap", textureMap); // If texture map file is blank, display default one if (wxTextureMap == "") mTextureMapTextCtrl->SetValue(STD_TO_WX_STRING(clonedObj->GetStringParameter("TextureMap").c_str())); mHasTextureMapChanged = false; } else { // Recheck central body mHasCentralBodyChanged = true; canClose = false; MessageInterface::PopupMessage(Gmat::ERROR_, clonedObj->GetLastErrorMessage()); } } #ifdef __USE_COLOR_FROM_SUBSCRIBER__ // Save orbit colors if (mHasOrbitColorChanged) { SaveObjectColors("Orbit", mOrbitColorMap); mHasOrbitColorChanged = false; } // Save target colors if (mHasTargetColorChanged) { SaveObjectColors("Target", mTargetColorMap); mHasTargetColorChanged = false; } #endif // Copy new values to original object (LOJ: 2014.10.30) if (canClose) { mGroundTrackPlot->Copy(clonedObj); mCentralBody = mCentralBodyComboBox->GetValue().c_str(); mTextureFile = mTextureMapTextCtrl->GetValue().c_str(); EnableUpdate(false); } } catch (BaseException &e) { canClose = false; MessageInterface::PopupMessage(Gmat::ERROR_, e.GetFullMessage().c_str()); } delete clonedObj; #if DEBUG_PANEL_SAVE MessageInterface::ShowMessage("GroundTrackPlotPanel::SaveData() exiting.\n"); #endif }