developer:sdksamples:pickpoint


How To: Pick Point Objects

C++, .NET

Summary: Demonstrates how to use CRhinoGetObject to pick point objects.

If you need the user to define a 3D point location, you can use a CRhinoGetPoint object. But, if the points already exist as objects in Rhino, you will need to use a CRhinoGetObject object to pick them. Then, you can determine the 3D coordinates of that point object.

C++

 
CRhinoGetObject go;
go.SetCommandPrompt( L"Select point" );
go.SetGeometryFilter( CRhinoGetObject::point_object );
CRhinoGet::result res = go.GetObjects( 1, 1 );
if( res == CRhinoGet::object )
{
  const CRhinoObjRef& objref = go.Object(0);
  const ON_Point* pt = objref.Point();
  if( pt )
    RhinoApp().Print(L"Point: %f,%f,%f", pt->point.x, pt->point.y, pt->point.z);
}

If you needed access to the CRhinoPointObject object, you could do this:

CRhinoGetObject go;
go.SetCommandPrompt( L"Select point" );
go.SetGeometryFilter( CRhinoGetObject::point_object );
CRhinoGet::result res = go.GetObjects( 1, 1 );
if( res == CRhinoGet::object )
{
  const CRhinoObjRef& objref = go.Object(0);
  const CRhinoPointObject* point_object = CRhinoPointObject::Cast( objref.Object() );
  if( point_object )
  {
    const ON_Point& pt = point_object->Point();
    RhinoApp().Print(L"Point: %f,%f,%f", pt.point.x, pt.point.y, pt.point.z);
  }
}

Here is how you can pick one or more point objects:

CRhinoGetObject go;
go.SetCommandPrompt( L"Select points" );
go.SetGeometryFilter( CRhinoGetObject::point_object );
CRhinoGet::result res = go.GetObjects( 1, 0 );
if( res == CRhinoGet::object )
{
  int i;
  for( i = 0; i < go.ObjectCount(); i++ )
  {
    const CRhinoObjRef& objref = go.Object(i);
    const ON_Point* point = objref.Point();
    if( point )
      RhinoApp().Print( L"Point %d: %f,%f,%f",
                        i,
                        point->point.x,
                        point->point.y,
                        point->point.z );
  }
}

VB.NET

Public Overrides Function RunCommand(ByVal context As IRhinoCommandContext)_
  As RMA.Rhino.IRhinoCommand.result
 
  Dim go As New MRhinoGetObject()
  go.SetCommandPrompt("Select point")
  go.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.point_object)
  Dim res As IRhinoGet.result = go.GetObjects(1, 1)
  If (res = IRhinoGet.result.object) Then
    Dim objref As IRhinoObjRef = go.Object(0)
    Dim point As IOnPoint = objref.Point()
    If (point IsNot Nothing) Then
      RhUtil.RhinoApp.Print(String.Format("Point: {0},{1},{2}" + vbCrLf,_
                                          point.point.x,_
                                          point.point.y,_
                                          point.point.z))
    End If
  End If
 
  res = go.GetObjects(1, 0)
  If (res = IRhinoGet.result.object) Then
    For i As Integer = 0 To go.ObjectCount() - 1
      Dim objref As IRhinoObjRef = go.Object(i)
      Dim point As IOnPoint = objref.Point()
      If (point IsNot Nothing) Then
        RhUtil.RhinoApp.Print(String.Format("Point {3}: {0},{1},{2}" + vbCrLf,_
                                            point.point.x,_
                                            point.point.y,_
                                            point.point.z, i))
      End If
    Next i
  End If
 
  Return IRhinoCommand.result.success
End Function

C#

public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
{
   MRhinoGetObject go = new MRhinoGetObject();
   go.SetCommandPrompt("Select Point");
   go.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.point_object);
   IRhinoGet.result res = go.GetObjects(1,0);
   if (res == IRhinoGet.result.@object)
   {
     for (int i = 0; i < go.ObjectCount(); i++)
     {
       IRhinoObjRef objref = go.Object(i);
       IOnPoint point = objref.Point();
       if (point != null)
       {
         RhUtil.RhinoApp().Print(string.Format("Point {3}: {0},{1},{2} \n",
                                               point.point.x,
                                               point.point.y,
                                               point.point.z, i));
       }
     }
   }
   return IRhinoCommand.result.success;
}
developer/sdksamples/pickpoint.txt · Last modified: 2010/01/26 16:37 (external edit) Driven by DokuWiki Recent changes RSS feed

 © 1997-2012 

McNeel North America Europe Latin AmericaAsia