RhinoDoc.BeforeTransformObjects Event

RhinoDocBeforeTransformObjects Event

Called before objects are being transformed

Namespace:  Rhino
Assembly:  RhinoCommon (in RhinoCommon.dll)
Since: 5.10
Syntax
public static event EventHandler<RhinoTransformObjectsEventArgs> BeforeTransformObjects
Public Shared Event BeforeTransformObjects As EventHandler(Of RhinoTransformObjectsEventArgs)

Value

Type: SystemEventHandlerRhinoTransformObjectsEventArgs
Examples
using Rhino;
using Rhino.DocObjects;
using Rhino.Geometry;
using Rhino.Commands;
using Rhino.Input.Custom;
using Rhino.Display;

namespace examples_cs
{
  public class GetTranslation : GetTransform
  {
    public override Transform CalculateTransform(RhinoViewport viewport, Point3d point)
    {
      var xform = Transform.Identity;
      Point3d base_point;
      if (TryGetBasePoint(out base_point))
      {
        var v = point - base_point;
        if (!v.IsZero)
        {
          xform = Transform.Translation(v);
          if (!xform.IsValid)
            xform = Transform.Identity;
        }
      }
      return xform;
    }
  }

  public class RhinoGetTransformCommand : TransformCommand
  {
    public RhinoGetTransformCommand()
    {
      // simple example of handling the BeforeTransformObjects event
      RhinoDoc.BeforeTransformObjects += RhinoDocOnBeforeTransformObjects;
    }

    private void RhinoDocOnBeforeTransformObjects(object sender, RhinoTransformObjectsEventArgs ea)
    {
      RhinoApp.WriteLine("Transform Objects Count: {0}", ea.ObjectCount);
    }

    public override string EnglishName { get { return "csGetTranslation"; } }

    protected override Result RunCommand(RhinoDoc doc, RunMode mode)
    {
      var list = new Rhino.Collections.TransformObjectList();
      var rc = SelectObjects("Select objects to move", list);
      if (rc != Rhino.Commands.Result.Success)
        return rc;

      var gp = new GetPoint();
      gp.SetCommandPrompt("Point to move from");
      gp.Get();
      if (gp.CommandResult() != Result.Success)
        return gp.CommandResult();


      var gt = new GetTranslation();
      gt.SetCommandPrompt("Point to move to");
      gt.SetBasePoint(gp.Point(), true);
      gt.DrawLineFromPoint(gp.Point(), true);
      gt.AddTransformObjects(list);
      gt.GetXform();
      if (gt.CommandResult() != Result.Success)
        return gt.CommandResult();

      var xform = gt.CalculateTransform(gt.View().ActiveViewport, gt.Point());
      TransformObjects(list, xform, false, false);
      doc.Views.Redraw();
      return Result.Success;
    }
  }
}
Imports Rhino
Imports Rhino.DocObjects
Imports Rhino.Geometry
Imports Rhino.Commands
Imports Rhino.Input.Custom
Imports Rhino.Display

Namespace examples_vb
  Public Class GetTranslation
    Inherits GetTransform
    Public Overrides Function CalculateTransform(viewport As RhinoViewport, point As Point3d) As Transform
      Dim xform = Transform.Identity
      Dim base_point As Point3d
      If TryGetBasePoint(base_point) Then
        Dim v = point - base_point
        If Not v.IsZero Then
          xform = Transform.Translation(v)
          If Not xform.IsValid Then
            xform = Transform.Identity
          End If
        End If
      End If
      Return xform
    End Function
  End Class

  Public Class RhinoGetTransformCommand
    Inherits TransformCommand
    Public Sub New()
      ' simple example of handling the BeforeTransformObjects event
      AddHandler RhinoDoc.BeforeTransformObjects, AddressOf RhinoDocOnBeforeTransformObjects
    End Sub

    Private Sub RhinoDocOnBeforeTransformObjects(sender As Object, ea As RhinoTransformObjectsEventArgs)
      RhinoApp.WriteLine("Transform Objects Count: {0}", ea.ObjectCount)
    End Sub

    Public Overrides ReadOnly Property EnglishName() As String
      Get
        Return "vbGetTranslation"
      End Get
    End Property

    Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
      Dim list = New Rhino.Collections.TransformObjectList()
      Dim rc = SelectObjects("Select objects to move", list)
      If rc <> Rhino.Commands.Result.Success Then
        Return rc
      End If

      Dim gp = New GetPoint()
      gp.SetCommandPrompt("Point to move from")
      gp.[Get]()
      If gp.CommandResult() <> Result.Success Then
        Return gp.CommandResult()
      End If


      Dim gt = New GetTranslation()
      gt.SetCommandPrompt("Point to move to")
      gt.SetBasePoint(gp.Point(), True)
      gt.DrawLineFromPoint(gp.Point(), True)
      gt.AddTransformObjects(list)
      gt.GetXform()
      If gt.CommandResult() <> Result.Success Then
        Return gt.CommandResult()
      End If

      Dim xform = gt.CalculateTransform(gt.View().ActiveViewport, gt.Point())
      TransformObjects(list, xform, False, False)
      doc.Views.Redraw()
      Return Result.Success
    End Function
  End Class
End Namespace
See Also