WARNING: You're viewing the Rhino WIP version of this page! View the current version instead.

Dynamically Draw Geometry when Picking Points

Demonstrates how to dynamically draw geometry during point picking.

partial class Examples
{
  public static Result GetPointDynamicDraw(RhinoDoc doc)
  {
    var gp = new GetPoint();
    gp.SetCommandPrompt("Center point");
    gp.Get();
    if (gp.CommandResult() != Result.Success)
      return gp.CommandResult();
    var center_point = gp.Point();
    if (center_point == Point3d.Unset)
      return Result.Failure;

    var gcp = new GetCircleRadiusPoint(center_point);
    gcp.SetCommandPrompt("Radius");
    gcp.ConstrainToConstructionPlane(false);
    gcp.SetBasePoint(center_point, true);
    gcp.DrawLineFromPoint(center_point, true);
    gcp.Get();
    if (gcp.CommandResult() != Result.Success)
      return gcp.CommandResult();

    var radius = center_point.DistanceTo(gcp.Point());
    var cplane = doc.Views.ActiveView.ActiveViewport.ConstructionPlane();
    doc.Objects.AddCircle(new Circle(cplane, center_point, radius));
    doc.Views.Redraw();
    return Result.Success;
  }
}

public class GetCircleRadiusPoint : GetPoint
{
  private Point3d m_center_point;

  public GetCircleRadiusPoint(Point3d centerPoint)
  {
    m_center_point = centerPoint;
  }

  protected override void OnDynamicDraw(GetPointDrawEventArgs e)
  {
    base.OnDynamicDraw(e);
    var cplane = e.RhinoDoc.Views.ActiveView.ActiveViewport.ConstructionPlane();
    var radius = m_center_point.DistanceTo(e.CurrentPoint);
    var circle = new Circle(cplane, m_center_point, radius);
    e.Display.DrawCircle(circle, System.Drawing.Color.Black);
  }
}
Partial Friend Class Examples
  Public Shared Function GetPointDynamicDraw(ByVal doc As RhinoDoc) As Result
	Dim gp = New GetPoint()
	gp.SetCommandPrompt("Center point")
	gp.Get()
	If gp.CommandResult() <> Result.Success Then
	  Return gp.CommandResult()
	End If
	Dim center_point = gp.Point()
	If center_point Is Point3d.Unset Then
	  Return Result.Failure
	End If

	Dim gcp = New GetCircleRadiusPoint(center_point)
	gcp.SetCommandPrompt("Radius")
	gcp.ConstrainToConstructionPlane(False)
	gcp.SetBasePoint(center_point, True)
	gcp.DrawLineFromPoint(center_point, True)
	gcp.Get()
	If gcp.CommandResult() <> Result.Success Then
	  Return gcp.CommandResult()
	End If

	Dim radius = center_point.DistanceTo(gcp.Point())
	Dim cplane = doc.Views.ActiveView.ActiveViewport.ConstructionPlane()
	doc.Objects.AddCircle(New Circle(cplane, center_point, radius))
	doc.Views.Redraw()
	Return Result.Success
  End Function
End Class

Public Class GetCircleRadiusPoint
	Inherits GetPoint

  Private m_center_point As Point3d

  Public Sub New(ByVal centerPoint As Point3d)
	m_center_point = centerPoint
  End Sub

  Protected Overrides Sub OnDynamicDraw(ByVal e As GetPointDrawEventArgs)
	MyBase.OnDynamicDraw(e)
	Dim cplane = e.RhinoDoc.Views.ActiveView.ActiveViewport.ConstructionPlane()
	Dim radius = m_center_point.DistanceTo(e.CurrentPoint)
	Dim circle = New Circle(cplane, m_center_point, radius)
	e.Display.DrawCircle(circle, System.Drawing.Color.Black)
  End Sub
End Class
from Rhino import *
from Rhino.Geometry import *
from Rhino.Commands import *
from Rhino.Input.Custom import *
from scriptcontext import doc
from System.Drawing import *

def RunCommand():
    gp = GetPoint()
    gp.SetCommandPrompt("Center point")
    gp.Get()
    if gp.CommandResult() != Result.Success:
        return gp.CommandResult()
    center_point = gp.Point()
    if center_point == Point3d.Unset:
        return Result.Failure

    gcp = GetCircleRadiusPoint(center_point)
    gcp.SetCommandPrompt("Radius")
    gcp.ConstrainToConstructionPlane(False)
    gcp.SetBasePoint(center_point, True)
    gcp.DrawLineFromPoint(center_point, True)
    gcp.Get()
    if gcp.CommandResult() != Result.Success:
        return gcp.CommandResult()

    radius = center_point.DistanceTo(gcp.Point())
    cplane = doc.Views.ActiveView.ActiveViewport.ConstructionPlane()
    doc.Objects.AddCircle(Circle(cplane, center_point, radius))
    doc.Views.Redraw()
    return Result.Success

class GetCircleRadiusPoint (GetPoint):
    def __init__(self, centerPoint):
        self.m_center_point = centerPoint

    def OnDynamicDraw(self, e):
        cplane = e.RhinoDoc.Views.ActiveView.ActiveViewport.ConstructionPlane()
        radius = self.m_center_point.DistanceTo(e.CurrentPoint)
        circle = Circle(cplane, self.m_center_point, radius)
        e.Display.DrawCircle(circle, Color.Black)

if __name__ == "__main__":
    RunCommand()