Picking Point Objects
Windows only
How To
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, for example:
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 ); } }