利用控制台可以直接调用插件。直接调用插件的好处是免去了打开程序的等待时间、打开图片的时间、拖入swc和marker等的时间,可以加速调试。
不方便的是插件的数值输入可能不太方便。
采用控制台直接运行方式,调用的是dofunc,从图形界面上运行的是domenu。
调用格式如下
vaa3d -x plugin_name -f funcname -i <inimg_file> -o <outswc_file> -p <para>
比如调用APP2的示例如下
"D:\v3d_external\bin\vaa3d_msvc.exe" /x "D:\v3d_external\bin\plugins\neuron_tracing\Vaa3D_Neuron2\vn2.dll" /f "app2" /i "C:\Users\204\Desktop\data analyse\friutfly\fruitfly-1\fruitfly1.v3draw"
ubuntu上是-x,windows上是/x
在路径包含空格的时候,需要在两边加上双引号。
APP2代码中的参数解析,可以参考如下:
QString plugin_name = "vn2";
QString func_name = "app2";
V3DPluginArgList input;
V3DPluginArgList output;
V3DPluginArgItem arg_in1, arg_in2, arg_out1;
arg_in1.type="random"; vector<char*> arg_imgfile;
arg_imgfile.push_back(outimg_file.toUtf8().data());
arg_in1.p = (void *) & arg_imgfile; input << arg_in1;
arg_in2.type="random"; vector<char*> arg_para;
arg_para.push_back(QString("NULL").toUtf8().data());
arg_para.push_back(QString("0").toUtf8().data());
arg_para.push_back(QString("-1").toUtf8().data());
arg_para.push_back(QString("0").toUtf8().data());
arg_in2.p = (void *) & arg_para; input << arg_in2;
arg_out1.type="random"; vector<char*> arg_outswc;
arg_outswc.clear();
arg_out1.p = (void *) & arg_outswc; output << arg_out1;
callback.callPluginFunc(plugin_name,func_name,input,output);