I’d like to suggest a filename in the SaveFileDialog based on the filename of the current document.
When the file is already saved as a 3dm file I can use ActiveDoc.Name or Path. If the file is new, both Path and Name are empty and I suggest “Untitled” in analogy with Rhino SaveAs. So far, so good.
However, when I open an IGS or a file format of our own, the Doc.Name and Path are also empty, but the Rhino Titlebar displays the imported file name (without the extension). This is actually the data I need to suggest a filename.
The TemplateFileUsed property also does not reveal this information.
Anyone a suggestion how to get the name of a non-3dm file after it was opened?
I wish it was that trivial. As long as I haven’t saved the file as 3dm, the Name property provides me with an empty string. At my desk which is running Rhino 5.7.
I’m testing using the following code in a command:
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
// todo: how to detect whether a file was new or imported. (And more important, which file was imported.)
RhinoApp.WriteLine("Doc file info: Template file used '{0}', Doc path '{1}', Doc Name '{2}'", doc.TemplateFileUsed, doc.Path, doc.Name);
FileInfo fi = String.IsNullOrWhiteSpace(RhinoDoc.ActiveDoc.Path) ? new FileInfo(Path.Combine(Environment.CurrentDirectory, "untitled")) : new FileInfo(RhinoDoc.ActiveDoc.Path);
SaveFileDialog d = new SaveFileDialog();
d.InitialDirectory = fi.DirectoryName;
d.FileName = Path.GetFileNameWithoutExtension(fi.Name);
d.DefaultExt = ".lis";
d.ShowDialog();
RhinoApp.WriteLine("Filename: {0}", d.FileName);
return Result.Success;
}
Hi Gerco, one alternative would be to parse the reversed command history text. If a file has been opened or imported successfully it is reported in the command history similar like this:
File "D:\Temp\FileName.obj" successfully read
I´ve hacked this together in python which seems to work, note that it reports the last opened file (eg. opened via drag & drop). If multiple files are opened without saving as 3dm, the title text remains at the one imported first.
import Rhino
def LastFileSuccessfullyRead():
# get command history text
ch_text = Rhino.RhinoApp.CommandHistoryWindowText
if not ch_text: return None
# no file yet
file = None
# command history text as line list
lines = [line for line in (ch_text.split('\n'))]
# reverse lines in text to search backwards
lines.reverse()
# find "File ..... successfully read" string
for line in lines:
a = line.find("File")
b = line.find("successfully read")
if a > -1 and b > 5:
file = line[a+6:b-2]
break
return file
if __name__=="__main__":
file = LastFileSuccessfullyRead()
if file:
print "Last imported file:", file
else:
print "Error getting last imported file"