我知道编辑这个网站吗?
the Fiji distribution of ImageJ本页介绍与 the Fiji distribution of ImageJ 相关的内容。点击徽标查看详情。

如何为 TrackMate 编写自定义操作

简介

操作是我对向TrackMate添加随机功能问题这个粗略解决方案,而增加过多更改GUI。添加按钮、对话框或额外的面板很麻烦,我认为这使GUI变得复杂,而GUI本来应该很简单。TrackMate操作是解决此问题的一种指示方法。您必须记住,这是随机功能想法的占位符,并提供了一种快速而干净的方法来测试它们。

TrackMate 操作采用 GUI 最后一个面板的下拉列表中的用户项目的形式。它可以做任何事情,因为我们将所有内容传递给操作,甚至是对 GUI 本身的引用。感谢SciJava发现机制,我们不必担心将其添加到 GUI 上:它会自动列在操作列表中。这种简单性的缺点是您无法使用它来提供的详细交互机制,例如您可以在视图中找到该机制。

在本教程中,我们将使用它来启动我们在本系列第 §§7§§§ 中创建的事件记录器。如果您还记得,我们在上一段时间中看到了如何使用 visible = false 参数和 SciJava 注释将其视图菜单中隐藏。从而阻止用户访问它。没有问题,我们现在将构建一个操作,将其作为视图启动的补充。

TrackMateAction界面

TrackMate 中的动作行为将其集成分为两类。该行为由 TrackMateActionFactory 接口描述组成。集成由 TrackMateModule 接口控制,该接口扩展了 TrackMateActionFactory 接口。

SciJava参数回顾

工厂本身并没有指定。这是必须注释的类

@Plugin( type = TrackMateActionFactory.class )

所有 SciJava 注释参数均适用,它们具有以下含义:

  • enabled = true/false参数是否控制启用该操作。禁用该操作直至没有被实例化。
  • visible = true/false参数确定该操作是否在操作面板中注册。如果为 false,则创建自定义操作工厂,但相应的操作不会在操作面板中注册,从而阻止任何使用。
  • priority = double参数此处仅用于特定操作项在列表中出现的顺序。高优先级列在最后。

###动作工厂方法

TrackMate 版本 7(2021 年 8 月)开始,操作是唯一使用 getIcon() 方法的 TrackMate 模块。然后该图标将显示在操作列表中的操作名称旁边。这就是 TrackMateModule 部分。

具体到动作的方法就更有趣了:

@Override
public TrackMateAction create()

该方法没有任何参数。

重要字段(例如模型等)会在操作类本身交付给操作中,但不会在工厂中交付

package plugin.trackmate.examples.action;

import javax.swing.ImageIcon;

import org.scijava.plugin.Plugin;

import fiji.plugin.trackmate.TrackMatePlugIn;
import fiji.plugin.trackmate.action.TrackMateAction;
import fiji.plugin.trackmate.action.TrackMateActionFactory;
import ij.ImageJ;
import ij.ImagePlus;

@Plugin( type = TrackMateActionFactory.class )
public class LaunchEventLoggerActionFactory implements TrackMateActionFactory
{

	private static final String INFO_TEXT = "<html>This action will launch a new event logger, that uses the ImageJ log window to append TrackMate events.</html>";

	private static final String KEY = "LAUNCH_EVENT_LOGGER";

	private static final String NAME = "Launch the event logger";

	@Override
	public String getInfoText()
	{
		return INFO_TEXT;
	}

	@Override
	public ImageIcon getIcon()
	{
		return null; // No icon for this one.
	}

	@Override
	public String getKey()
	{
		return KEY;
	}

	@Override
	public String getName()
	{
		return NAME;
	}

	@Override
	public TrackMateAction create()
	{
		return new LaunchEventLoggerAction();
	}
}

没什么复杂的。

TrackMateAction界面

该接口仅由两个方法组成:

    public void execute( TrackMate trackmate, SelectionModel selectionModel, DisplaySettings displaySettings, Frame parent );
    
    public void setLogger(Logger logger);

execute方法是用户单击执行按钮时触发的方法。它接收:

  • TrackMate实例,包含当前模型和设置。
  • 当前在GUI中使用的选择模型。
  • 当前视图中当前使用的DisplaySettings
  • Frame参考,如果您需要的话制作模式对话框。
  • 这可能有用。在我们的例子中,正如您在工厂类中的那样,我们通过控制器获取了模型并选择模型。

另一种用于传递特定于 GUI 操作面板的记录器实例的方法。发送到此记录器的所有消息和更新都将显示在操作面板上。

以下是在简单启动器中的简单转换方式:

package plugin.trackmate.examples.action;

import java.awt.Frame;

import fiji.plugin.trackmate.Logger;
import fiji.plugin.trackmate.SelectionModel;
import fiji.plugin.trackmate.TrackMate;
import fiji.plugin.trackmate.action.TrackMateAction;
import fiji.plugin.trackmate.gui.displaysettings.DisplaySettings;
import plugin.trackmate.examples.view.EventLoggerView;

public class LaunchEventLoggerAction implements TrackMateAction
{

	private Logger logger;

	@Override
	public void execute( final TrackMate trackmate, final SelectionModel selectionModel, final DisplaySettings displaySettings, final Frame parent )
	{
		logger.log( "Launching a new event logger..." );
		final EventLoggerView view = new EventLoggerView( trackmate.getModel(), selectionModel );
		view.render();
		logger.log( " Done.\n" );
	}

	@Override
	public void setLogger( final Logger logger )
	{
		this.logger = logger;
	}
}

总结

结果如下:

/media/plugins/trackmate/trackmate-customaction-1.png

您可以想象有很多应用程序。由于它们使您可以访问接下来的大部分插件,您基本上可以在那里插入任何内容。一个限制是它并不完全适合现有的 GUI:操作仅显示为下拉列表中的项目。但在大多数情况下,这并不重要。操作对于将一个新功能快速移植到 TrackMate 上非常有用。

本教程到此结束,非常快速且简单。不幸的是,这是本系列中最后一次简单而简短的事情。下一个教程将是关于实现自定义检测器,由于明显错误的原因,这将变得相当复杂。到时见!