Vaa3d调试的主要步骤中一般包括打开图片、打开marker文件、打开swc文件这三个打开操作,GUI参数的输入操作,对话框选取文件保存位置的操作等,这几个步骤都会占用调试的时间而且当针对同一张图片时,图片、marker文件、参数等基本不发生变化,这就给我们节省调试时间带来了方便。
同时,将程序分块并加入在if(1)模块内可以保证当不需要该功能时可以快速屏蔽该功能。
同时,每一个if(1)
快速屏蔽对应功能
通过预处理命令,能够实现对应的功能的开关。
#define readMarkerFromFile 1
if(readMarkerFromFile)
{
//readMarkerFromFile
}
自动读入图像、marker、swc
//首先给定图片文件名、marker文件名、swc文件名
//在已打开图片、已存在marker、swc时不执行该代码,从而使得能够避免意外
QString img_name_need_read;
QString marker_name_need_read;
QString nt_name_need_read;
unsigned char threthold;
switch (2) {
case 1:
//fruitfly5_cut.tif
img_name_need_read="***\\fruitfly5_cut.tif";
marker_name_need_read="***\\fruitfly5_cut.tif_1.marker";
nt_name_need_read="***\\fruitfly5_cut.tif_oneBranch_sort.swc";
threthold=20;
break;
case 2:
//fruitfly1
img_name_need_read="***\\fruitfly4_cut.tif";
marker_name_need_read="***\\fruitfly4_cut.tif_1.marker";
nt_name_need_read="***\\fruitfly4_cut.tif_oneBranch_sort.swc";
threthold=20;
break;
default:
return;
}
//此处读取图片
if(1)
{
//fetch image
QFileInfo img_name_info(img_name_need_read);
if(!img_name_info.exists())
{
cout<<"!img_name_info.exists()"<<endl;
return;
}
if(!callback.currentImageWindow())
{
cout<<"read image from img_name_need_read"<<endl;
Image4DSimple * newimg=callback.loadImage(img_name_need_read.toUtf8().data());
v3dhandle newwin=callback.newImageWindow(img_name_need_read);
// Image4DSimple
callback.setImage(newwin,newimg);
}
}
v3dhandle curwin = callback.currentImageWindow();
if (!curwin)
{
v3d_msg("You don't have any image open in the main window.");
return;
}
NeuronTree nt;
if(1)
{
//此处nt只用于处理 没有显示在图上 如需显示可以自行添加代码
// cout<<"read SWC from 3d Viewer "<<endl;
bool exist_neuronTree=false;
QList <V3dR_MainWindow *> list_3dviewer = callback.getListAll3DViewers();
if (list_3dviewer.size() >= 1)
{
V3dR_MainWindow *surface_win = list_3dviewer[0];
if (surface_win)
{
QList<NeuronTree> * mTreeList = callback.getHandleNeuronTrees_Any3DViewer(surface_win);
if(mTreeList->size()>0)
{
nt=mTreeList->at(mTreeList->size()-1);
exist_neuronTree=true ;
}
}
}
if(!exist_neuronTree)
{
cout<<"read neuronTree from nt_name_need_read"<<endl;
QFileInfo nt_name_info(nt_name_need_read);
if(!nt_name_info.exists())
{
cout<<"!nt_name_info.exists()"<<endl;
return;
}
nt=readSWC_file(nt_name_need_read);
if(nt.listNeuron.isEmpty())
{
cout<<"nt.listNeuron.isEmpty()"<<endl;
return;
}
}
cout<<"read SWC from 3d Viewer over "<<endl;
}
if(1)
{
//fetch marker
QFileInfo marker_name_info(marker_name_need_read);
if(!marker_name_info.exists())
{
cout<<"!marker_name_info.exists()"<<endl;
return;
}
if(callback.getLandmark(curwin).isEmpty())
{
//避免已经输出marker而覆盖
cout<<"read marker from marker_name_need_read"<<endl;
LandmarkList s=ReadLandmarkList(marker_name_need_read);
if(s.isEmpty())
{cout<<"s.isEmpty()"<<endl;return;}
callback.setLandmark(curwin,s);
callback.open3DWindow(curwin);
callback.pushObjectIn3DWindow(curwin);
}
}
选取文件保存位置。
if(1)
{
QString swcfile="D:\\111\\";
QFileInfo fileinfo(QString(p4DImage->getFileName()));
swcfile.append(fileinfo.baseName());
swcfile.append(QString::number(rand()%200+100));
//加100保证随机数都是三位数
swcfile.append("_tracing.swc");
writeSWC_file(swcfile,outTree);
cout<<"over\n\n"<<endl;
}
marker点在程序运行完成以后即时更新
if(1)
{
//这样可以避免在3D界面上按下“Sync Tri-view Objs”marker点才更新显示的问题
//从而加快调试进度
callback.open3DWindow(curwin);
callback.setLandmark(curwin,needtoshow);
callback.pushObjectIn3DWindow(curwin);
}