如何从NetLogo中的扩展访问ExtensionManager?

时间:2015-10-02 03:24:26

标签: netlogo

我试图通过扩展程序访问NetLogo模型中的ExtensionManager对象。 ExtensionManager可以访问我想要在外部操作的模型的许多部分,例如PlotManager。

我可以将代理或补丁作为参数传递到扩展程序中,然后可以访问WorldObserverProgram。但是,这些似乎都没有提供回ExtensionManager的路径。

我还试图从控制扩展程序的ExtensionManager和执行扩展程序代码的DefaultClassManager访问DefaultCommand

以下是尝试重置界面上的绘图的示例:

import org.nlogo.api.*;

public class PlotExtensionManager extends DefaultClassManager{

    public void load(PrimitiveManager primitiveManager) throws ExtensionException {
        primitiveManager.addPrimitive("reset-plot", new ResetPlot());

    }

    public static class ResetPlot extends DefaultCommand{

        public Syntax getSyntax() {
            return Syntax.commandSyntax(new int[] { Syntax.StringType(), Syntax.PatchType()});
        }

        public String getAgentClassString() {
            return "OTPL";
        }

        public void perform(Argument[] args, Context context)
                throws ExtensionException, LogoException {

            // take in a plotname as a String and a single path (patch 0 0) to access the Model
            String plotName = (String) args[0].get();
            org.nlogo.agent.Patch patch = (org.nlogo.agent.Patch) args[1].get();


            org.nlogo.agent.World world = patch.world();
            org.nlogo.agent.Observer observer = world.observer();
            org.nlogo.api.Program program = world.program();

            // how to access plot on interface and gain control over it?
            // looking for access to ExtensionManager object

        }   
    }
}

1 个答案:

答案 0 :(得分:1)

你可以get it from the workspace。可以通过将上下文转换为org.nlogo.nvm.ExtensionContext并使用context.workspace()从上下文中获取工作空间。所以Java中的代码是:

((ExtensionContext) context).workspace().getExtensionManager()

只是为了警告你,这些都不在扩展API中,因此可能会随着未来的NetLogo版本而改变。