如何在 dm 脚本中将 ImageDocument 设置为不脏
How to set an ImageDocument to be not dirty in dm-script
如何在 python dm-script 中设置 ImageDocument
不再脏而不保存?
我在下面发布了 python 代码,可以用以下 dm-script
代码表示。
String file_path = GetApplicationDirectory(0, 1).PathConcatenate("test-image.dm4");
Image img := realimage("test", 4, 64, 64);
ImageDocument doc = img.ImageGetOrCreateImageDocument();
doc.ImageDocumentSaveToFile("Gatan Format", file_path);
doc.ImageDocumentShowAtRect(100, 100, 164, 164);
(下面的 python 代码)创建并显示 ImageDocument
。图像已经保存。但即使直接将其保存在 DigitalMicrograph 中并带有自己的模块,它也无法识别已保存。我可以手动 link 文件(通过执行 python 中的 dm-script
代码)但我不能告诉程序图像没有被修改。
有一个函数ImageDocumentIsDirty()
。但是这个函数只returns 图像是否被修改。无法设置。
我的程序创建了一个新工作区并加载了 100 多张图像。当关闭 DigitalMicrograph 时,它会询问是否应保存 100 张图像中的每一张。我不能让用户点击 100 次 No。特别是因为文件被保存了。
那么,如何告诉 dm-script 图片已经保存了?
try:
import DigitalMicrograph as DM
import numpy as np
import execdmscript
import os
name = "Test image"
file_path = os.path.join(os.getcwd(), "test-image.dm4")
# create image
image_data = np.random.random((64, 64))
image = DM.CreateImage(image_data)
image.SetName(name)
# create, save and show image document
image_doc = image.GetOrCreateImageDocument()
image_doc.SetName(name)
image_doc.SaveToFile("Gatan Format", file_path)
print("Saving image to", file_path)
image_doc.ShowAtRect(100, 100, 164, 164)
# link the image to the file
dmscript = "\n".join((
"for(number i = CountImageDocuments() - 1; i >= 0; i--){",
"ImageDocument img_doc = GetImageDocument(i);",
"if(img_doc.ImageDocumentGetName() == name){",
"img_doc.ImageDocumentSetCurrentFile(path);",
"break;",
"}",
"}"
))
svars = {
"name": image_doc.GetName(),
"path": file_path
}
with execdmscript.exec_dmscript(dmscript, setvars=svars):
pass
except Exception as e:
print("{}: ".format(e.__class__.__name__), e)
import traceback
traceback.print_exc()
您要查找的命令是
void ImageDocumentClean( ImageDocument imgDoc )
如
image img := realimage("test",4,100,100)
img.ShowImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
Result("\n Dirty? " + doc.ImageDocumentIsDirty())
doc.ImageDocumentClean()
Result("\n Dirty? " + doc.ImageDocumentIsDirty())
另外:它首先变脏的原因是,window-positions 作为文档的一部分存储。 (标签等其他内容也适用。)
如何在 python dm-script 中设置 ImageDocument
不再脏而不保存?
我在下面发布了 python 代码,可以用以下 dm-script
代码表示。
String file_path = GetApplicationDirectory(0, 1).PathConcatenate("test-image.dm4");
Image img := realimage("test", 4, 64, 64);
ImageDocument doc = img.ImageGetOrCreateImageDocument();
doc.ImageDocumentSaveToFile("Gatan Format", file_path);
doc.ImageDocumentShowAtRect(100, 100, 164, 164);
(下面的 python 代码)创建并显示 ImageDocument
。图像已经保存。但即使直接将其保存在 DigitalMicrograph 中并带有自己的模块,它也无法识别已保存。我可以手动 link 文件(通过执行 python 中的 dm-script
代码)但我不能告诉程序图像没有被修改。
有一个函数ImageDocumentIsDirty()
。但是这个函数只returns 图像是否被修改。无法设置。
我的程序创建了一个新工作区并加载了 100 多张图像。当关闭 DigitalMicrograph 时,它会询问是否应保存 100 张图像中的每一张。我不能让用户点击 100 次 No。特别是因为文件被保存了。
那么,如何告诉 dm-script 图片已经保存了?
try:
import DigitalMicrograph as DM
import numpy as np
import execdmscript
import os
name = "Test image"
file_path = os.path.join(os.getcwd(), "test-image.dm4")
# create image
image_data = np.random.random((64, 64))
image = DM.CreateImage(image_data)
image.SetName(name)
# create, save and show image document
image_doc = image.GetOrCreateImageDocument()
image_doc.SetName(name)
image_doc.SaveToFile("Gatan Format", file_path)
print("Saving image to", file_path)
image_doc.ShowAtRect(100, 100, 164, 164)
# link the image to the file
dmscript = "\n".join((
"for(number i = CountImageDocuments() - 1; i >= 0; i--){",
"ImageDocument img_doc = GetImageDocument(i);",
"if(img_doc.ImageDocumentGetName() == name){",
"img_doc.ImageDocumentSetCurrentFile(path);",
"break;",
"}",
"}"
))
svars = {
"name": image_doc.GetName(),
"path": file_path
}
with execdmscript.exec_dmscript(dmscript, setvars=svars):
pass
except Exception as e:
print("{}: ".format(e.__class__.__name__), e)
import traceback
traceback.print_exc()
您要查找的命令是
void ImageDocumentClean( ImageDocument imgDoc )
如
image img := realimage("test",4,100,100)
img.ShowImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
Result("\n Dirty? " + doc.ImageDocumentIsDirty())
doc.ImageDocumentClean()
Result("\n Dirty? " + doc.ImageDocumentIsDirty())
另外:它首先变脏的原因是,window-positions 作为文档的一部分存储。 (标签等其他内容也适用。)