Open a 3DM file
Windows only
Problem
You would like to open a 3DM file, or an STL file, or any other file type that Rhino supports, from your C/C++ plugin.
Solution
As each type of file, support by Rhino for opening or importing, has a different set of options, it not possible to write a single, generic file open function and hope to support all formats. Thus, if you want to open or import a file from a plugin command, then simply script either Rhino’s Open or Import command using CRhinoApp::RunScript()
.
Sample
The following example command demonstrates how to open a Rhino 3DM file from a plugin command. You can use this same technique to open other support file types, such as STL, IGES, DWG, and others.
CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
{
// Prompt the user for the name of a 3dm file to open
ON_wString filename;
CWnd* pParentWnd = CWnd::FromHandle( RhinoApp().MainWnd() );
CRhinoGetFileDialog gf;
gf.SetScriptMode( context.IsInteractive() ? FALSE : TRUE );
BOOL rc = gf.DisplayFileDialog( CRhinoGetFileDialog::open_rhino_only_dialog, filename, pParentWnd );
if( !rc )
return CRhinoCommand::cancel;
// Verify the file name string
filename = gf.FileName();
filename.TrimLeftAndRight();
if( filename.IsEmpty() )
return CRhinoCommand::nothing;
// Verify the file
if( !CRhinoFileUtilities::FileExists(filename) )
{
RhinoApp().Print( L"File not found.\n" );
return CRhinoCommand::failure;
}
// Script Rhino's open command. Note, in case the file name
// string contains spaces, we will want to surround the string
// with double-quote characters so the command line parser
// will deal with the string property.
ON_wString script;
script.Format( L"_-Open \"%s\"", filename );
RhinoApp().RunScript( script, 0 );
return CRhinoCommand::success;
}