Пример #1
0
//------------------------------------------------------------------------------
// void LoadData()
//------------------------------------------------------------------------------
void VaryPanel::LoadData()
{
   #ifdef DEBUG_VARYPANEL_LOAD
   MessageInterface::ShowMessage("VaryPanel::LoadData() entered\n");
   MessageInterface::ShowMessage
      ("   Command=<%p>'%s'\n", mVaryCommand, mVaryCommand ?
       mVaryCommand->GetTypeName().c_str() : "NULL");
   #endif
   
   mVarNameTextCtrl->Disable(); // we don't want user to edit this box
   mViewVarButton->Enable();
   
   if (mVaryCommand == NULL)
   {
      MessageInterface::PopupMessage(Gmat::ERROR_, "The Vary command is NULL\n");
      return;
   }
   
   try
   {
      // Set the pointer for the "Show Script" button
      mObject = mVaryCommand;
      
      solverName =
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("SolverName"));
      
      #ifdef DEBUG_VARYPANEL_LOAD
      MessageInterface::ShowMessage("   solverName=%s\n", solverName.c_str());
      #endif
      
      variableName =
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("Variable"));
      
      #ifdef DEBUG_VARYPANEL_LOAD
      MessageInterface::ShowMessage("   variableName=%s\n", variableName.c_str());
      #endif
      
      wxString initValStr = 
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("InitialValue")).c_str();
      wxString pertStr = 
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("Perturbation")).c_str();
      wxString lowerStr = 
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("Lower")).c_str();
      wxString upperStr = 
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("Upper")).c_str();      
      wxString maxStepStr = 
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("MaxStep")).c_str();
      wxString addSfStr = 
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("AdditiveScaleFactor")).c_str();
      wxString multCfStr =
         mVaryCommand->GetStringParameter(mVaryCommand->GetParameterID("MultiplicativeScaleFactor")).c_str();
      
      mSolverComboBox->SetStringSelection(solverName.c_str());
      mVarNameTextCtrl->SetValue(variableName.c_str());
      
      mInitialTextCtrl->SetValue(initValStr);
      mPertTextCtrl->SetValue(pertStr);
      mLowerValueTextCtrl->SetValue(lowerStr);
      mUpperValueTextCtrl->SetValue(upperStr);
      mMaxStepTextCtrl->SetValue(maxStepStr);
      mAdditiveTextCtrl->SetValue(addSfStr);
      mMultiplicativeTextCtrl->SetValue(multCfStr);
      
      //  Enalbe or disable fields depends on the solver type
      GmatBase *solver = theGuiInterpreter->GetConfiguredObject(solverName);
      if (solver != NULL)
      {
//         mVaryCommand->SetRefObject(solver, Gmat::SOLVER, solverName);
         solver->SetStringParameter
            (solver->GetParameterID("Variables"), variableName);
         SetControlEnabling(solver);
      }
   }
   catch (BaseException &e)
   {
      MessageInterface::PopupMessage(Gmat::ERROR_, e.GetFullMessage());
   }
   
   #ifdef DEBUG_VARYPANEL_LOAD
   MessageInterface::ShowMessage("VaryPanel::LoadData() leaving\n");
   #endif
}
Пример #2
0
//------------------------------------------------------------------------------
// 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
}