DigitalMicrograph 脚本对象是否可以收到图像 ROI 变化的通知?

2023-12-08

DigitalMicrograph 脚本文档提到了各种类型的 Listener 对象,这些对象可用于向脚本对象通知各种类型的事件。特别是,ImageDisplay 对象对按键侦听器具有显式支持,以便当击键事件针对特定图像显示时可以通知脚本对象。是否可以通过类似的机制接收图像上的 ROI 的大小或位置已更改的通知?


是的,有。事实上,就投资回报率而言,有两种可能性。


第一个选项:听取特定的投资回报率

DigitalMicrograph 中的任何 ROI 都有一个唯一的 ID 号。您可以使用下面的脚本向该特定 ROI-ID 添加侦听器。请注意,完全相同的ROI 可以同时放置在多个 ImageDisplay 上。 (“链接的投资回报率”)。只要 ROI 对象不释放,连接的侦听器对象就不会被释放,但您也可以显式删除连接。

Class myRListen : object
{
    myRListen( object self )  { Result( "\n myRListen " + self.ScriptObjectGetID() + " created.\n" ); }
    ~myRListen( object self ) { Result( "\n myRListen " + self.ScriptObjectGetID() + " destroyed.\n" ); }   
    void DoStuff( object self, ROI thisROI ){ Result( "ROI ID:" + thisROI.ROIGetID() + " acted!\n" ); }
}

// Main 
{
    Image   img1 := RealImage( "Test 1", 4, 256, 256 )
    img1 = iradius
    img1.ShowImage()
    Image   img2 := RealImage( "Test 2", 4, 256, 256 )
    img2 = icol
    img2.ShowImage()

    ROI testROI = NewROI()
    testROI.ROISetVolatile(0)
    testROI.ROISetRectangle( 50, 50, 100, 100 )
    img1.ImageGetImageDisplay(0).ImageDisplayAddROI(testROI)
    img2.ImageGetImageDisplay(0).ImageDisplayAddROI(testROI)

    // Connect the ROI of specific ID to the "DoStuff" method of listener on "changed" message.
    // The signature of the "DoStuff" method has to be of form ( object self , ROI thisROI )
    // The method returns a unique ID for this connection.

    Number roiID    = testROI.ROIGetID()
    object listener = Alloc(myRListen)          
    ConnectObject( roiID, "changed", "ConnectionID", listener, "DoStuff" )      
    if ( TwoButtonDialog( "Immediately disconnect?", "Yes", "No" ) )
        DisConnectObject( roiID, "changed", "ConnectionID" )
}

此方法仅接受“已更改”作为消息,并且第三个参数字符串(ConnectionID)应该是唯一的,以便可以使用它来删除此特定连接,如图所示。 这种方法的主要优点是它的简单性。


第二个选项:收听特定的图像显示

还有一些侦听器可以连接到 imageDisplay 对象。这允许捕获来自此 imageDisplay 上“任何”ROI 的消息,但您可以再次使用 unique-ROI-ID 来过滤掉您感兴趣的消息。只要 imageDisplay 未释放,侦听器对象就不会被释放,但是您可以再次手动取消注册。

Class myRListen : object
{
    myRListen( object self )  { Result( "\n myRListen " + self.ScriptObjectGetID() + " created.\n" ); }
    ~myRListen( object self ) { Result( "\n myRListen " + self.ScriptObjectGetID() + " destroyed.\n" ); }   
    void DoROIStuff( object self, Number e_fl, ImageDisplay idisp, Number r_fl, Number r_fl2, ROI thisROI ){ Result( "ROI ID:" + thisROI.ROIGetID() + " acted!\n" ); }
}

// Main 
{
    Image   img := RealImage( "Test", 4, 256, 256 )
    img = iradius
    img.ShowImage()

    ROI testROI1 = NewROI()
    testROI1.ROISetVolatile( 0 )
    testROI1.ROISetRectangle( 50, 50, 100, 100 )
    ROI testROI2 = NewROI()
    testROI2.ROISetVolatile( 0 )
    testROI2.ROISetRectangle( 150, 150, 200, 200 )
    testROI2.ROISetColor( 0, 0, 1 )
    ImageDisplay disp = img.ImageGetImageDisplay( 0 )
    disp.ImageDisplayAddROI( testROI1 )
    disp.ImageDisplayAddROI( testROI2 ) 

    // Connect the ROI of specific ID to the "DoStuff" method of listener on "changed" message.
    // The signature of the "DoStuff" method has to be of form ( object self , ROI thisROI )
    // The method returns a unique ID for this connection.

    object listener = Alloc(myRListen)          
    Number listenerID = ImageDisplayAddEventListener( disp, listener, "roi_changed:DoROIStuff" )
    if ( TwoButtonDialog( "Immediately disconnect?", "Yes", "No" ) )
        ImageDisplayRemoveEventListener( disp, listenerID )
}

除非您必须在多个图像显示器上监视特定的 ROI,否则第二个选项是更通用的选项。注册 roi_changed 事件的方法不仅可以为您提供 ROI 的句柄,还可以为您提供它所在的显示器的句柄。数字变量包含事件标志,告诉您发生了什么变化。

在 GMS 2.3.1 中,当前提供以下 ROI 消息:

roi_added, 
roi_removed, 
roi_begin_track,
roi_end_track, 
roi_property_changed,
roi_display_changed, 
roi_changed

并且它们需要连接到签名方法

void RAction( object self, Number e_fl, ImageDisplay idisp, Number r_fl, Number r_fl2, ROI r )

Examples

您可以在以下位置找到侦听器打字稿示例FELIM 脚本数据库, i.e.:

  • 交互式旋转轮廓
  • SI 的 3D 线轮廓
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DigitalMicrograph 脚本对象是否可以收到图像 ROI 变化的通知? 的相关文章

  • Beforeunload 无法将用户重定向到另一个页面,当用户尝试关闭窗口/选项卡时,如何将用户重定向到另一个页面/URL?

    我的以下代码无法将用户重定向到另一个页面 window on beforeunload function window location href http www google com 我希望用户在尝试关闭选项卡时被重定向到另一个页面 实
  • 如何检测 Android 上的触摸输入

    现在我想做的就是检测何时按下屏幕 然后显示一条日志消息以确认它发生了 到目前为止 我的代码是根据 CameraPreview 示例代码修改的 它最终会拍摄一张照片 因此大部分代码位于扩展 SurfaceView 的类中 SDK 中示例代码的
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • iPhone 上的全屏视频播放器是否有“onClose”事件?

    我在网站上使用 html5 视频播放器 当用户开始播放时 播放器进入全屏模式并播放视频 视频结束后 我看到ended事件并通过关闭视频播放器myvideo webkitExitFullScreen 现在 当玩家实际获得时我需要另一个事件cl
  • Office 2007 文档中 Sharepoint 中的 ItemUpdate 后数据消失

    我有一个简单的事件处理程序 其中包含 ItemAdding 事件 该事件会更改 ItemUpdated 方法中所需的列值 上传 Word 2007 文档 docx pptx 或 xlsx 后 该列的值发生更改 但是当我保护该文档时 该列的值
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • C# 中的应用程序关闭事件

    我正在使用 NAudio 编写音乐播放器 在关闭播放器之前 我想调用一些停止播放的方法 我该怎么做呢 WinForms 订阅Application ApplicationExit http msdn microsoft com en us
  • Javascript hasOwnProperty 在事件对象上总是 false?

    我希望有人可以帮助澄清与事件对象相关的 hasOwnProperty 方法 我正在尝试克隆鼠标事件 最终该对象将被传递到 iframe 我已经构建了一个 克隆 函数 但每当我尝试克隆窗口事件 即滚动 单击等 时 hasOwnProperty
  • 静态EventHandler事件的发送者

    我有静态课程EventHandler event public static event EventHandler MyEvent static void RaiseEvent EventHandler p MyEvent if p nul
  • 单击事件不适用于动态生成的元素[重复]

    这个问题在这里已经有答案了
  • asp.net 页面的 preinit 事件

    我是 ASP NET 新手 我有一个 aspx 页面 我必须在其 PreInit 事件中编写一些代码 从我在页面上找到 PreInit 事件的地方 当我们双击按钮来获取按钮单击事件 或从属性窗格中选择按钮并选择事件 请尽快回复我 老兄 你为
  • wxWidgets:检测自定义控件上的单击事件

    如何向使用 wxWidgets 制作的自定义控件添加单击事件侦听器 自定义控件使用wxWindow作为基础 在活动列表中我看到 wxEVT LEFT DOWN wxEVT LEFT UP wxEVT LEFT DCLICK wxEVT MI
  • 我能否找出 ASP 回发时将触发哪些控制事件?

    是否有可能在发生之前获取将要触发的控制事件列表 例如在Page Load处理程序 例如 如果单击了一个按钮 我可以在button click事件处理程序被调用 您选择了一个非常棘手的问题 原因是事件触发的方式有多种 1 EVENTTARGE
  • 跟踪滚动位置并通知其他组件

    有没有一种简单的方法来跟踪浏览器滚动位置并通知多个组件 用例 在滚动时 我希望能够根据我所在的位置更改页面上各种元素的类 在 Angular 的早期版本中 通过插件可以实现这一点 对于 jQuery 也是如此 当然 可以选择编写裸 JS 在
  • Javascript dispatchEvent click 在 IE9 和 IE10 中不起作用

    我正在尝试在 ExtJs 中构建应用程序时模拟鼠标事件 例如单击 鼠标悬停等 我使用下面的代码来模拟点击 function triggerEvent element eventName if document createEvent var
  • 如何调用分组精灵的函数?

    我有一个Sprite我在一个小组中上的课 每次单击鼠标按钮时 我想从类中调用一个函数 应该为组中的每个项目调用该函数 我只知道如何调用update组中每个项目的函数 但如果不是在每次鼠标单击时调用该函数 而是在每一帧上调用它 代码会非常慢
  • 创建活动时如何更改 Google 日历上的活动组织者?

    我正在使用 Google Calendar Api 创建事件 我试图将参数组织者与我想成为所有者的人的电子邮件一起传递 但它不起作用 并且组织者始终是同一创建者 None
  • jQuery mousemove 性能 - 节流事件?

    我们面临着与 mousemove 连接的 jQuery 事件传播性能问题 我们有一个屏幕填充画布 需要跟踪用户是否在其上拖动鼠标 因此我们在该对象上添加了一个鼠标移动侦听器 如下所示 ourCanvas on mousemove funct
  • Flash AS3 EventDispatcher - 有什么方法可以获取已注册侦听器的列表吗?

    有没有什么方法可以获取注册监听器的列表EventDispatcher 我知道EventDispatcher有hasEventListener方法告诉您是否注册了任何侦听器 但是有没有一种简单的方法来询问EventDispatcher找出听众
  • SVG 用事件触发动画

    如何通过 javascript 使用任意事件触发 svg 动画元素开始动画 我在想象类似的事情begin mySpecialEvent 然后我可以发送mySpecialEvent并且动画将开始 如果已经播放则再次开始 这是一篇涵盖您需要的文

随机推荐

  • 标准 TFlite 对象检测模型在 MLKit 中不起作用

    如果我使用预训练的 TFLite 对象检测模型在 MLKit 中 我收到以下错误 CalculatorGraph Run failed in Run Calculator Open for node BoxClassifierCalcula
  • 如何离开办公室使用另一个邮箱

    我正在尝试使用 EWS EWS 托管 API 2 0 获取给定邮箱的 离开办公室 设置 设置如下 单个 服务帐户 邮箱 可读取其他邮箱日历和外出设置 使用 EWS 托管 API 可以轻松完成日历部分 但我似乎无法弄清楚如何使用 API 获取
  • 将 jquery 数据表导出到带有附加行的 Excel 不起作用 IE

    我正在尝试使用 jquery 导出按钮选项将数据表导出到 Excel 工作表 我希望在 Excel 文件中的表数据之前添加额外的行 我在小提琴中做了一个类似的演示https jsfiddle net xevpdeo1 17 它在 Chrom
  • 以编程方式将文件夹添加到 Finder 中的“位置”

    我正在尝试弄清楚如何以编程方式将文件夹添加到 Finder 的 位置 侧边栏 我已经看到了通过 Finder 首选项修改它的方法 但我也看到一些应用程序实际上将文件夹添加到侧边栏 如果有人对我应该查找的内容有任何建议 指示 我将不胜感激 这
  • 从向量对中获取值时出错

    为什么在访问对向量的迭代器中对的值时会出现以下错误 vector lt pair
  • 使用 php 从非公共 html 文件夹下载文件

    我有许多文件存储在服务器上 但不在 public html 目录中 这个想法是 登录的用户可以下载文件 使用 SESSION 变量来检查他们是否登录 但如果其他人使用他们的计算机 他们就无法在浏览器历史记录中看到直接文件路径 即使他们这样做
  • Gluon Mobile 项目不适用于 gradle 6

    我有一个 Gluon 移动项目 其 build gradle 如下所示 buildscript repositories jcenter google mavenCentral maven url http nexus gluonhq co
  • 如何从 R 中的流式 MapReduce 作业获取文件名?

    我正在流式处理 R mapreduce 作业 并且需要获取文件名 我知道 Hadoop 在当前作业启动之前设置环境变量 并且我可以使用 Sys getenv 访问 R 中的环境变量 我发现 获取流式hadoop程序中的输入文件名 和 Sys
  • 正交船体算法

    我正在尝试找到一种方法来确定直线多边形来自一组整数点 由下图中的红点表示 下图显示了我想要实现的目标 1 我只需要定义直线多边形边界的最小点集 我能找到的大多数船体算法都不满足这个问题的正交性质 例如礼物包装算法 产生以下结果 即not我想
  • 哈斯克尔:记忆化

    在离开多年并忘记一切之后 我正在尝试重新学习 Haskell 但我发现自己仍然感到困惑记忆化 特别是 我正在尝试编写一个程序来生成混乱的数量D n of n对象 原始位置没有任何项目的排列 号码D n 可以递归地定义为D 1 0 D 2 1
  • OpenCV 3.0 线迭代器

    我想使用线迭代器在使用 Python 的 OpenCV 3 0 中 为 Python 构建的 OpenCV 3 0 仍然可用吗 看来网上的答案都指向cv InitLineIterator这是cv模块 我尝试导入此模块 但似乎它不包含在当前版
  • 使用 Kubernetes 部署并通过 Ingress 连接后 SSE 损坏

    我有一个使用 EventStream 的 ReactJS 客户端和一个实现 SSE 的 golang 后端 当我将浏览器连接到在 localhost 上运行的后端时 以及当我的后端在带有端口转发的 k8s 上运行时 一切似乎都正常 一旦我使
  • 在 Java 中使用 XSOM 解析 XSD 架构。如何访问元素和复杂类型

    我在使用 Java 中的 XSOM 解析 XSD 文件时遇到了很多困难 我有两个 XSD 文件 一个定义日历 第二个定义全局类型 我希望能够读取日历文件并确定 日历有 3 个属性 有效的是一个名为 eYN 的 ENUM Cal 是一个字符串
  • 从 Java/ Android 线程返回值

    我的 android 类中有以下线程 如何从线程中获取 err 的值 public int method new Thread new Runnable int err Override public void run err device
  • 使用 @XmlPath 和 jaxb/MOXy 来映射复杂类型

    我有一个深层 XML 结构 其中有许多无意义的包装器 我将其映射到单个 Java 类 使用 XmlPath 映射简单的数据类型就像在公园散步 但是当涉及到实际需要自己的类的类型时 我不太确定如何做到这一点 特别是当这些类型也应该放入列表中时
  • PHP 的字母等效项 is_numeric

    我正在寻找一个与 is numeric 按字母顺序等效的函数 如果字符串中只有字母 则返回 true 否则返回 false PHP 中是否存在内置函数 你要ctype alpha
  • 我的代码中的未知修饰符[重复]

    这个问题在这里已经有答案了 输出错误 未知修饰符 p 你的字符串包含一团糟 这需要转义为 使用时 作为正则表达式分隔符 代替 作为正则表达式分隔符 使用不会出现在字符串中的内容 例如 例如 你must选择有保证的定界字符not出现在 Src
  • jQuery 停止 fadeTo 效果

    我想要的是一种鼠标轨迹效果 当你将鼠标悬停在 div 上或向下时 但是 如果您将鼠标悬停过快几次然后停止 效果就会自行重复 我该如何解决这个问题 我想我需要某种出队的东西 比如动画选项 但对于 fadeTo 功能 有任何想法吗 test m
  • 根据条件连接data.table中的列名[重复]

    这个问题在这里已经有答案了 这就是我的 data table 的样子 最右边的一列PASTE是我想要的专栏 library data table dt lt fread A B C PASTE TRUE FALSE TRUE A C TRU
  • DigitalMicrograph 脚本对象是否可以收到图像 ROI 变化的通知?

    DigitalMicrograph 脚本文档提到了各种类型的 Listener 对象 这些对象可用于向脚本对象通知各种类型的事件 特别是 ImageDisplay 对象对按键侦听器具有显式支持 以便当击键事件针对特定图像显示时可以通知脚本对