从VTK继承的类要保持VTK传统命名规则。VTK的代码设计标准参考如下:
1.1 命名风格
RASToSlicer RasToSlicer;vtkMRML vtkMrml;vtkSlicer vTKSlicer;
TestMyFeature.c Test_My_Feature.c
Millimeter Millimetre;Color Colour;
1.2 注释风格
- 头文件中注释全面的注释信息;
- 当代码发生改变时应该及时进行标注;
- 需要重新考虑的代码,应该用关键词‘todo’进行标记;
- 在源代码文件中尽量不要使用注释快
1.3 功能风格
例如,当我们处理文件名和文件路径的时候,应该使用VTK类中的kwsys::SystemTool、Qt类中的QFileInfo/QDir、或者Python中的os.path。而不是人工进行字符串操作:
QString filePath = directoryPath + ''/'' + fileName + ''.exe'';
应该采用:
SystemTools::JoinPath();SystemTools::GetFilenameName();
QFileInfo(QDir directorty, QString fileName);QFileInfo::suffix();QFileInfo::absoluteFilePath();
os.path.join();os.path.splitext();os.path.abspath();
注意:
1.在Qt文件中,更提倡应用Qt容器类而不是标准模板库;
2.vtkCollection和std::list<vtkSmartPointer<vtkObject*>>具有相同的功能。
1.4 语言风格
C++、Python、CMake
1.5 库依赖风格
- MRML类只依赖vtk和itk(并不依赖Slicer logic和Qt哦)
- 逻辑类Logic依赖MRML存储状态
- 逻辑类Logic能够封装vtk/itk,实现特定的Slicer任务(例如对体数据重采样后显示)
- GUI类依赖MRML、Logic、Qt
1.6 坐标系风格
- 3D世界空间坐标系采用RAS空间坐标系。世界坐标系、解剖坐标系、图像坐标系如下图:
itk/vtk/qt、std::cout、std::cerr......错误日志里面所有的错误都可以根据他们的类型(debug/warning/error),利用文件过滤器找到。
- Qt:qCritical()、qWarning()、qDebug()
对于Error信息使用qCritical():
if (somethingWrongHappened)
{
qCritical() << "I encountered an error";
return;
}
对于Warning信息使用qWarning():
qWarning() << "Be careful here, this is dangerous";
对于Debug信息使用qDebug():
qDebug() << "This variable has the value: "<< value;
- VTK-based:vtkErrorMacro()、vtkWarningMacro()、vtkDebugMacro()
对于Error信息使用vtkErrorMacro():
if (somethingWrongHappened)
{
vtkErrorMacro("I encountered an error");
return;
}
对于Warning信息使用vtkWarningMacro():
vtkWarningMacro("Be careful here, this is dangerous");
对于Debug信息使用vtkDebugMacro():
vtkDebugMacro("This variable has the value: "<< value);