コード例 #1
0
CRhinoCommand::result CCommandSampleMeshDir::RunCommand( const CRhinoCommandContext& context )
{
  CRhinoGetObject go;
  go.SetGeometryFilter( CRhinoObject::mesh_object | CRhinoObject::surface_object | CRhinoObject::polysrf_object | CRhinoObject::instance_reference );
  go.SetCommandPrompt( L"Select mesh, surface, or polysurface objects" );
  go.GetObjects(1,0);
  if( go.Result() != CRhinoGet::object )
    return CRhinoCommand::cancel;

  int i = 0;
  ON_SimpleArray<const CRhinoObject*> objects( go.ObjectCount() );
  for( i = 0; i < go.ObjectCount(); i++ )
    objects.Append( go.Object(i).Object() );

  ON_ClassArray<CRhinoObjRef> render_meshes;
  int count = RhinoGetRenderMeshes( objects, render_meshes, true, false );
  if( count > 0 )
  {
    CMeshDirDrawCallback callback;
    callback.m_mesh_list.Reserve( count );
    for( i = 0; i < render_meshes.Count(); i++ )
    {
      const ON_Mesh* mesh = render_meshes[i].Mesh();
      if( mesh )
        callback.m_mesh_list.AppendNew().SetMesh( mesh );
    }

    CRhinoGetOption go;
    go.SetCommandPrompt( L"Press Enter when done" );
    go.AcceptNothing();
    go.AddCommandOptionToggle( RHCMDOPTNAME(L"FaceNormals"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Yes"), m_draw_face_normals, &m_draw_face_normals );
    go.AddCommandOptionToggle( RHCMDOPTNAME(L"VertexNormals"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Yes"), m_draw_vertex_normals, &m_draw_vertex_normals );

    CRhinoGet::result res = CRhinoGet::nothing;
    for( ;; )
    {
      callback.m_draw_face_normals = m_draw_face_normals;
      callback.m_draw_vertex_normals = m_draw_vertex_normals;

      CRhinoView::AddDrawCallback( &callback );
      context.m_doc.Redraw( CRhinoView::regenerate_display_hint );

      res = go.GetOption();
      CRhinoView::RemoveDrawCallback( &callback );

      if( res == CRhinoGet::option )
        continue;
      break;
    }
  }

  context.m_doc.Redraw( CRhinoView::regenerate_display_hint );
  
  return CRhinoCommand::success;
}
コード例 #2
0
CRhinoCommand::result CCommandSampleOrientOnCrv::SelectObjects( CRhinoXformObjectList& object_list )
{
  object_list.Empty();

  CRhinoGetObject get;
  get.SetCommandPrompt( L"Select objects to orient" );
  get.EnablePreSelect();
  get.EnableSubObjectSelect( FALSE );
  get.AcceptNothing();
  get.GetObjects(1, 0);
  
  CRhinoCommand::result rc = get.CommandResult();
  if( rc == CRhinoCommand::success )
  {
    if( object_list.AddObjects( get ) < 1 )
      rc = CRhinoCommand::failure;
  }

  return rc;
}
コード例 #3
0
CRhinoCommand::result CCommandSampleOrientOnCrv::GetPathCurve( const ON_Curve*& path_curve )
{
  CRhinoGetObject get;
  get.SetCommandPrompt( L"Select path curve" );
  get.SetGeometryFilter( CRhinoGetObject::curve_object );
  get.EnableDeselectAllBeforePostSelect( false );
  get.EnablePreSelect( FALSE );
  get.AcceptNothing();
  get.GetObjects( 1, 1 );

  CRhinoCommand::result rc = get.CommandResult();
  if( rc == CRhinoCommand::success )
  {
    CRhinoObjRef objRef = get.Object(0);
    path_curve = objRef.Curve();
    if( !path_curve )
      rc = CRhinoCommand::failure;
  }

  return rc;
}
コード例 #4
0
CRhinoCommand::result CCommandSampleObjectCursor::RunCommand( const CRhinoCommandContext& context )
{
  CRhinoGetObject go;
  go.SetCommandPrompt( L"Select object to delete" );
  go.AcceptNothing( FALSE );

  HCURSOR hCursor = SampleCursorPlugIn().Cursor();
  if( 0 != hCursor )
    RhinoSetCursor( hCursor );

  go.GetObjects( 1, 1 );

  if( 0 != hCursor )
    RhinoSetCursor( 0 );

  if (go.CommandResult() != CRhinoCommand::success )
    return go.CommandResult();

  context.m_doc.DeleteObject( go.Object(0) );
  context.m_doc.Redraw();

  return CRhinoCommand::success;
}