Modify morph control vertex coordinates in plugin codes

I try to modify morph control vertex coordinates in my codes,
control vertex can accessed by these codes, as below

//----------------------------------------------
  const ON_MorphControl* ctr = src->Control();  // CRhinoMorphControl::Control()
  ON_NurbsCage* cage = (ON_NurbsCage*)(&ctr->m_nurbs_cage); // [const ON_NurbsCage] to [ON_NurbsCage]

  //
  int i_num = cage->m_cv_count[0]; // vertex number at x direction 
  int j_num = cage->m_cv_count[1]; // vertex number at y direction
  int k_num = cage->m_cv_count[2]; // vertex number at z direction
  int i,j,k;

  for (i=0; i<i_num; i++)
  {
    for (j=0; j<j_num; j++)
    {
      for (k=0; k<k_num; k++)
      {
        ON_3dPoint pt;
        cage->GetCV(i,j,k, pt);          // get original position of morph control vertex at (i,j,k)
        pt.x = pt.x + pt3ds[i][j][k].x;  // x displacement of control vertex(i,j,k)
        pt.y = pt.y + pt3ds[i][j][k].y;  // y displacement of control vertex(i,j,k)
        pt.z = pt.z + pt3ds[i][j][k].z;  // z displacement of control vertex(i,j,k)
        cage->SetCV(i,j,k, pt);         // set new position to the morph cage
      }
    }
  }
  //

but these didn’t work,

seems CRhinoMorphControl::Control() returns a const pointer, so it’s member ON_MorphControl::m_nurbs_cage
this member can not modify.

is there a method that can modify morph control vertex coordinatess, instead of manipulating on screen .
thanks!!

Here are a couple of examples you may find useful:

https://github.com/mcneel/Rhino5Samples_CPP/blob/master/SampleCommands/cmdSampleCageEdit.cpp

https://github.com/mcneel/Rhino5Samples_CPP/blob/master/SampleCommands/cmdSampleMoveGrips.cpp