Cant not turn off object grips in v5 (c#)

Hi;
I run this core in v5 sr14, after the program stop, the surface’s grips still turn on.How cant I turn off the surface’s grips?

            Rhino.DocObjects.ObjRef objRef;
            Rhino.Commands.Result rc = Rhino.Input.RhinoGet.GetOneObject("Select surface for control point editing", false, Rhino.DocObjects.ObjectType.Surface, out objRef);
            if (rc != Rhino.Commands.Result.Success)
                return rc;
            Rhino.DocObjects.RhinoObject obj = objRef.Object();
            if (null == obj)
                return Rhino.Commands.Result.Failure;
            Rhino.Geometry.Surface srf = objRef.Surface();
            if (null == srf)
                return Rhino.Commands.Result.Failure;
            obj.GripsOn = true;
            doc.Views.Redraw();
            Rhino.DocObjects.GripObject[] grips = obj.GetGrips();
            for (int i = 0; i < grips.Length; i++)
            {
                Rhino.DocObjects.GripObject grip = grips[i];
                double u, v;
                if (srf.ClosestPoint(grip.CurrentLocation, out u, out v))
                {
                    Rhino.Geometry.Vector3d dir = srf.NormalAt(u, v);
                    dir.Unitize();
                    dir *= 0.5;
                    grip.Move(dir);
                }

            }
            doc.Objects.GripUpdate(obj, true);

            obj.GripsOn = false;//Cant not turn off object grips

            doc.Views.Redraw();
            return Rhino.Commands.Result.Success;

Hi @pythonuser,

This should do the trick…

protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
  var rc = RhinoGet.GetOneObject(
    "Select surface for control point editing", 
    false, 
    ObjectType.Surface, 
    out var obj_ref
    );

  if (rc != Rhino.Commands.Result.Success)
    return rc;

  var obj = obj_ref.Object();
  if (null == obj)
    return Result.Failure;

  Rhino.Geometry.Surface srf = obj_ref.Surface();
  if (null == srf)
    return Rhino.Commands.Result.Failure;

  obj.GripsOn = true;
  doc.Views.Redraw();

  var grips = obj.GetGrips();
  foreach (var grip in grips)
  {
    if (srf.ClosestPoint(grip.CurrentLocation, out var u, out var v))
    {
      var dir = srf.NormalAt(u, v);
      dir.Unitize();
      dir *= 0.5;
      grip.Move(dir);
    }
  }

  var obj_id = obj.Id;
  doc.Objects.GripUpdate(obj, true);

  // Object has changed, so 'obj' is no longer valid
  // So, reacquire the object...
  obj = doc.Objects.FindId(obj_id);
  if (null != obj)
    obj.GripsOn = false;

  doc.Views.Redraw();
  return Result.Success;
}

– Dale

Hi @dale:

Think you, it run good.