系统版本:Win8.1
Qt版本:5.2.1
Qt Creator版本:3.0.1
VTK版本:6.2.0
1 空间距离测量
1.1 实例
在VTK中,专门用于测量距离的类为vtkDistanceWidget,具体的使用方法在VTK源码提供的实QtVTKRenderWindows中说明,此外,参考资料[2][3]中也对vtkDistanceWidget的使用进行了实例说明。然而,上述的实例都是针对2D的,关于3D的测量,见实例TestDistanceWidget3D.cxx,为了便于测试,对其进行一些小修改后,如下所示:
#include <QCoreApplication> #include <QDebug> #define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL) #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL) #include "vtkDistanceWidget.h" #include "vtkDistanceRepresentation3D.h" #include "vtkSphereSource.h" #include "vtkPolyDataMapper.h" #include "vtkActor.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkSmartPointer.h" #include "vtkCommand.h" #include "vtkInteractorEventRecorder.h" #include "vtkRegressionTestImage.h" #include "vtkDebugLeaks.h" #include "vtkCoordinate.h" #include "vtkMath.h" #include "vtkHandleWidget.h" #include "vtkPointHandleRepresentation3D.h" #include "vtkProperty.h" #include "vtkCamera.h" #include "vtkFollower.h" #define VTK_CREATE(type, name) \ vtkSmartPointer<type> name = vtkSmartPointer<type>::New() int TestDistanceWidget3D(int, char*[]); int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); TestDistanceWidget3D(argc, argv ); return a.exec(); } const char TestDistanceWidget3DEventLog[] = "# StreamVersion 1\n" "RenderEvent 0 0 0 0 0 0 0\n" "EnterEvent 292 123 0 0 0 0 0\n" "MouseMoveEvent 280 131 0 0 0 0 0\n" "MouseMoveEvent 268 137 0 0 0 0 0\n" "MouseMoveEvent 258 143 0 0 0 0 0\n" "MouseMoveEvent 250 147 0 0 0 0 0\n" "MouseMoveEvent 246 153 0 0 0 0 0\n" "MouseMoveEvent 245 155 0 0 0 0 0\n" "MouseMoveEvent 244 157 0 0 0 0 0\n" "MouseMoveEvent 240 161 0 0 0 0 0\n" "MouseMoveEvent 239 163 0 0 0 0 0\n" "MouseMoveEvent 235 167 0 0 0 0 0\n" "MouseMoveEvent 233 173 0 0 0 0 0\n" "MouseMoveEvent 229 177 0 0 0 0 0\n" "MouseMoveEvent 223 183 0 0 0 0 0\n" "MouseMoveEvent 222 184 0 0 0 0 0\n" "MouseMoveEvent 221 186 0 0 0 0 0\n" "MouseMoveEvent 220 187 0 0 0 0 0\n" "MouseMoveEvent 219 188 0 0 0 0 0\n" "MouseMoveEvent 219 189 0 0 0 0 0\n" "LeftButtonPressEvent 219 189 0 0 0 0 0\n" "RenderEvent 219 189 0 0 0 0 0\n" "LeftButtonReleaseEvent 219 189 0 0 0 0 0\n" "MouseMoveEvent 218 189 0 0 0 0 0\n" "RenderEvent 218 189 0 0 0 0 0\n" "MouseMoveEvent 218 188 0 0 0 0 0\n" "RenderEvent 218 188 0 0 0 0 0\n" "MouseMoveEvent 216 187 0 0 0 0 0\n" "RenderEvent 216 187 0 0 0 0 0\n" "MouseMoveEvent 212 183 0 0 0 0 0\n" "RenderEvent 212 183 0 0 0 0 0\n" "MouseMoveEvent 206 179 0 0 0 0 0\n" "RenderEvent 206 179 0 0 0 0 0\n" "MouseMoveEvent 202 175 0 0 0 0 0\n" "RenderEvent 202 175 0 0 0 0 0\n" "MouseMoveEvent 194 169 0 0 0 0 0\n" "RenderEvent 194 169 0 0 0 0 0\n" "MouseMoveEvent 188 165 0 0 0 0 0\n" "RenderEvent 188 165 0 0 0 0 0\n" "MouseMoveEvent 182 159 0 0 0 0 0\n" "RenderEvent 182 159 0 0 0 0 0\n" "MouseMoveEvent 174 153 0 0 0 0 0\n" "RenderEvent 174 153 0 0 0 0 0\n" "MouseMoveEvent 166 149 0 0 0 0 0\n" "RenderEvent 166 149 0 0 0 0 0\n" "MouseMoveEvent 162 143 0 0 0 0 0\n" "RenderEvent 162 143 0 0 0 0 0\n" "MouseMoveEvent 156 137 0 0 0 0 0\n" "RenderEvent 156 137 0 0 0 0 0\n" "MouseMoveEvent 148 135 0 0 0 0 0\n" "RenderEvent 148 135 0 0 0 0 0\n" "MouseMoveEvent 144 129 0 0 0 0 0\n" "RenderEvent 144 129 0 0 0 0 0\n" "MouseMoveEvent 140 125 0 0 0 0 0\n" "RenderEvent 140 125 0 0 0 0 0\n" "MouseMoveEvent 136 119 0 0 0 0 0\n" "RenderEvent 136 119 0 0 0 0 0\n" "MouseMoveEvent 134 118 0 0 0 0 0\n" "RenderEvent 134 118 0 0 0 0 0\n" "MouseMoveEvent 130 114 0 0 0 0 0\n" "RenderEvent 130 114 0 0 0 0 0\n" "MouseMoveEvent 128 113 0 0 0 0 0\n" "RenderEvent 128 113 0 0 0 0 0\n" "MouseMoveEvent 124 109 0 0 0 0 0\n" "RenderEvent 124 109 0 0 0 0 0\n" "MouseMoveEvent 118 105 0 0 0 0 0\n" "RenderEvent 118 105 0 0 0 0 0\n" "MouseMoveEvent 116 104 0 0 0 0 0\n" "RenderEvent 116 104 0 0 0 0 0\n" "MouseMoveEvent 112 100 0 0 0 0 0\n" "RenderEvent 112 100 0 0 0 0 0\n" "MouseMoveEvent 110 99 0 0 0 0 0\n" "RenderEvent 110 99 0 0 0 0 0\n" "MouseMoveEvent 106 95 0 0 0 0 0\n" "RenderEvent 106 95 0 0 0 0 0\n" "MouseMoveEvent 105 94 0 0 0 0 0\n" "RenderEvent 105 94 0 0 0 0 0\n" "MouseMoveEvent 104 93 0 0 0 0 0\n" "RenderEvent 104 93 0 0 0 0 0\n" "MouseMoveEvent 102 92 0 0 0 0 0\n" "RenderEvent 102 92 0 0 0 0 0\n" "MouseMoveEvent 101 91 0 0 0 0 0\n" "RenderEvent 101 91 0 0 0 0 0\n" "MouseMoveEvent 99 90 0 0 0 0 0\n" "RenderEvent 99 90 0 0 0 0 0\n" "MouseMoveEvent 97 89 0 0 0 0 0\n" "RenderEvent 97 89 0 0 0 0 0\n" "MouseMoveEvent 96 87 0 0 0 0 0\n" "RenderEvent 96 87 0 0 0 0 0\n" "MouseMoveEvent 94 86 0 0 0 0 0\n" "RenderEvent 94 86 0 0 0 0 0\n" "MouseMoveEvent 93 85 0 0 0 0 0\n" "RenderEvent 93 85 0 0 0 0 0\n" "MouseMoveEvent 92 85 0 0 0 0 0\n" "RenderEvent 92 85 0 0 0 0 0\n" "MouseMoveEvent 92 84 0 0 0 0 0\n" "RenderEvent 92 84 0 0 0 0 0\n" "MouseMoveEvent 90 84 0 0 0 0 0\n" "RenderEvent 90 84 0 0 0 0 0\n" "MouseMoveEvent 90 83 0 0 0 0 0\n" "RenderEvent 90 83 0 0 0 0 0\n" "MouseMoveEvent 89 83 0 0 0 0 0\n" "RenderEvent 89 83 0 0 0 0 0\n" "MouseMoveEvent 89 82 0 0 0 0 0\n" "RenderEvent 89 82 0 0 0 0 0\n" "LeftButtonPressEvent 89 82 0 0 0 0 0\n" "RenderEvent 89 82 0 0 0 0 0\n" "LeftButtonReleaseEvent 89 82 0 0 0 0 0\n" "MouseMoveEvent 89 81 0 0 0 0 0\n" "RenderEvent 89 81 0 0 0 0 0\n" "MouseMoveEvent 89 80 0 0 0 0 0\n" "RenderEvent 89 80 0 0 0 0 0\n" "MouseMoveEvent 88 80 0 0 0 0 0\n" "RenderEvent 88 80 0 0 0 0 0\n" "MouseMoveEvent 88 79 0 0 0 0 0\n" "RenderEvent 88 79 0 0 0 0 0\n" "MouseMoveEvent 87 78 0 0 0 0 0\n" "RenderEvent 87 78 0 0 0 0 0\n" "MouseMoveEvent 87 77 0 0 0 0 0\n" "RenderEvent 87 77 0 0 0 0 0\n" "MouseMoveEvent 86 76 0 0 0 0 0\n" "RenderEvent 86 76 0 0 0 0 0\n" "MouseMoveEvent 86 74 0 0 0 0 0\n" "RenderEvent 86 74 0 0 0 0 0\n" "MouseMoveEvent 85 72 0 0 0 0 0\n" "RenderEvent 85 72 0 0 0 0 0\n" "MouseMoveEvent 85 71 0 0 0 0 0\n" "RenderEvent 85 71 0 0 0 0 0\n" "MouseMoveEvent 81 67 0 0 0 0 0\n" "RenderEvent 81 67 0 0 0 0 0\n" "MouseMoveEvent 81 64 0 0 0 0 0\n" "RenderEvent 81 64 0 0 0 0 0\n" "MouseMoveEvent 80 62 0 0 0 0 0\n" "RenderEvent 80 62 0 0 0 0 0\n" "MouseMoveEvent 79 60 0 0 0 0 0\n" "RenderEvent 79 60 0 0 0 0 0\n" "MouseMoveEvent 79 58 0 0 0 0 0\n" "RenderEvent 79 58 0 0 0 0 0\n" "MouseMoveEvent 78 56 0 0 0 0 0\n" "RenderEvent 78 56 0 0 0 0 0\n" "MouseMoveEvent 77 55 0 0 0 0 0\n" "RenderEvent 77 55 0 0 0 0 0\n" "MouseMoveEvent 77 54 0 0 0 0 0\n" "RenderEvent 77 54 0 0 0 0 0\n" "MouseMoveEvent 77 53 0 0 0 0 0\n" "RenderEvent 77 53 0 0 0 0 0\n" "MouseMoveEvent 78 53 0 0 0 0 0\n" "RenderEvent 78 53 0 0 0 0 0\n" "MouseMoveEvent 78 52 0 0 0 0 0\n" "RenderEvent 78 52 0 0 0 0 0\n" "MouseMoveEvent 79 52 0 0 0 0 0\n" "RenderEvent 79 52 0 0 0 0 0\n" "MouseMoveEvent 80 52 0 0 0 0 0\n" "RenderEvent 80 52 0 0 0 0 0\n" "MouseMoveEvent 80 53 0 0 0 0 0\n" "RenderEvent 80 53 0 0 0 0 0\n" "MouseMoveEvent 81 53 0 0 0 0 0\n" "RenderEvent 81 53 0 0 0 0 0\n" "MouseMoveEvent 81 54 0 0 0 0 0\n" "RenderEvent 81 54 0 0 0 0 0\n" "MouseMoveEvent 83 55 0 0 0 0 0\n" "RenderEvent 83 55 0 0 0 0 0\n" "MouseMoveEvent 84 56 0 0 0 0 0\n" "RenderEvent 84 56 0 0 0 0 0\n" "MouseMoveEvent 90 58 0 0 0 0 0\n" "RenderEvent 90 58 0 0 0 0 0\n" "MouseMoveEvent 92 59 0 0 0 0 0\n" "RenderEvent 92 59 0 0 0 0 0\n" "MouseMoveEvent 94 60 0 0 0 0 0\n" "RenderEvent 94 60 0 0 0 0 0\n" "MouseMoveEvent 102 64 0 0 0 0 0\n" "RenderEvent 102 64 0 0 0 0 0\n" "MouseMoveEvent 106 68 0 0 0 0 0\n" "RenderEvent 106 68 0 0 0 0 0\n" "MouseMoveEvent 114 74 0 0 0 0 0\n" "RenderEvent 114 74 0 0 0 0 0\n" "MouseMoveEvent 122 80 0 0 0 0 0\n" "RenderEvent 122 80 0 0 0 0 0\n" "MouseMoveEvent 130 86 0 0 0 0 0\n" "RenderEvent 130 86 0 0 0 0 0\n" "MouseMoveEvent 140 94 0 0 0 0 0\n" "RenderEvent 140 94 0 0 0 0 0\n" "MouseMoveEvent 150 102 0 0 0 0 0\n" "RenderEvent 150 102 0 0 0 0 0\n" "MouseMoveEvent 156 106 0 0 0 0 0\n" "RenderEvent 156 106 0 0 0 0 0\n" "MouseMoveEvent 166 112 0 0 0 0 0\n" "RenderEvent 166 112 0 0 0 0 0\n" "MouseMoveEvent 174 120 0 0 0 0 0\n" "RenderEvent 174 120 0 0 0 0 0\n" "MouseMoveEvent 182 128 0 0 0 0 0\n" "RenderEvent 182 128 0 0 0 0 0\n" "MouseMoveEvent 188 132 0 0 0 0 0\n" "RenderEvent 188 132 0 0 0 0 0\n" "MouseMoveEvent 194 138 0 0 0 0 0\n" "RenderEvent 194 138 0 0 0 0 0\n" "MouseMoveEvent 198 144 0 0 0 0 0\n" "RenderEvent 198 144 0 0 0 0 0\n" "MouseMoveEvent 199 146 0 0 0 0 0\n" "RenderEvent 199 146 0 0 0 0 0\n" "MouseMoveEvent 203 152 0 0 0 0 0\n" "RenderEvent 203 152 0 0 0 0 0\n" "MouseMoveEvent 204 154 0 0 0 0 0\n" "RenderEvent 204 154 0 0 0 0 0\n" "MouseMoveEvent 205 156 0 0 0 0 0\n" "RenderEvent 205 156 0 0 0 0 0\n" "MouseMoveEvent 206 157 0 0 0 0 0\n" "RenderEvent 206 157 0 0 0 0 0\n" "MouseMoveEvent 207 158 0 0 0 0 0\n" "RenderEvent 207 158 0 0 0 0 0\n" "MouseMoveEvent 207 159 0 0 0 0 0\n" "RenderEvent 207 159 0 0 0 0 0\n" "MouseMoveEvent 207 161 0 0 0 0 0\n" "RenderEvent 207 161 0 0 0 0 0\n" "MouseMoveEvent 208 162 0 0 0 0 0\n" "RenderEvent 208 162 0 0 0 0 0\n" "MouseMoveEvent 209 163 0 0 0 0 0\n" "RenderEvent 209 163 0 0 0 0 0\n" "MouseMoveEvent 210 164 0 0 0 0 0\n" "RenderEvent 210 164 0 0 0 0 0\n" "MouseMoveEvent 211 165 0 0 0 0 0\n" "RenderEvent 211 165 0 0 0 0 0\n" "MouseMoveEvent 211 166 0 0 0 0 0\n" "RenderEvent 211 166 0 0 0 0 0\n" "MouseMoveEvent 212 166 0 0 0 0 0\n" "RenderEvent 212 166 0 0 0 0 0\n" "MouseMoveEvent 212 167 0 0 0 0 0\n" "RenderEvent 212 167 0 0 0 0 0\n" "MouseMoveEvent 213 167 0 0 0 0 0\n" "RenderEvent 213 167 0 0 0 0 0\n" "MouseMoveEvent 213 168 0 0 0 0 0\n" "RenderEvent 213 168 0 0 0 0 0\n" "MouseMoveEvent 214 169 0 0 0 0 0\n" "RenderEvent 214 169 0 0 0 0 0\n" "MouseMoveEvent 215 170 0 0 0 0 0\n" "RenderEvent 215 170 0 0 0 0 0\n" "MouseMoveEvent 215 171 0 0 0 0 0\n" "RenderEvent 215 171 0 0 0 0 0\n" "MouseMoveEvent 216 172 0 0 0 0 0\n" "RenderEvent 216 172 0 0 0 0 0\n" "MouseMoveEvent 216 173 0 0 0 0 0\n" "RenderEvent 216 173 0 0 0 0 0\n" "MouseMoveEvent 217 174 0 0 0 0 0\n" "RenderEvent 217 174 0 0 0 0 0\n" "MouseMoveEvent 217 175 0 0 0 0 0\n" "RenderEvent 217 175 0 0 0 0 0\n" "MouseMoveEvent 217 176 0 0 0 0 0\n" "RenderEvent 217 176 0 0 0 0 0\n" "MouseMoveEvent 217 177 0 0 0 0 0\n" "RenderEvent 217 177 0 0 0 0 0\n" "MouseMoveEvent 217 178 0 0 0 0 0\n" "RenderEvent 217 178 0 0 0 0 0\n" "MouseMoveEvent 217 179 0 0 0 0 0\n" "RenderEvent 217 179 0 0 0 0 0\n" "MouseMoveEvent 217 180 0 0 0 0 0\n" "RenderEvent 217 180 0 0 0 0 0\n" "MouseMoveEvent 217 181 0 0 0 0 0\n" "RenderEvent 217 181 0 0 0 0 0\n" "MouseMoveEvent 217 182 0 0 0 0 0\n" "RenderEvent 217 182 0 0 0 0 0\n" "MouseMoveEvent 217 183 0 0 0 0 0\n" "RenderEvent 217 183 0 0 0 0 0\n" "MouseMoveEvent 217 184 0 0 0 0 0\n" "RenderEvent 217 184 0 0 0 0 0\n" "MouseMoveEvent 217 185 0 0 0 0 0\n" "RenderEvent 217 185 0 0 0 0 0\n" "MouseMoveEvent 217 186 0 0 0 0 0\n" "RenderEvent 217 186 0 0 0 0 0\n" "MouseMoveEvent 217 187 0 0 0 0 0\n" "RenderEvent 217 187 0 0 0 0 0\n" "MouseMoveEvent 216 188 0 0 0 0 0\n" "RenderEvent 216 188 0 0 0 0 0\n" "MouseMoveEvent 216 189 0 0 0 0 0\n" "RenderEvent 216 189 0 0 0 0 0\n" "LeftButtonPressEvent 216 189 0 0 0 0 0\n" "RenderEvent 216 189 0 0 0 0 0\n" "MouseMoveEvent 215 190 0 0 0 0 0\n" "RenderEvent 215 190 0 0 0 0 0\n" "MouseMoveEvent 213 191 0 0 0 0 0\n" "RenderEvent 213 191 0 0 0 0 0\n" "MouseMoveEvent 207 193 0 0 0 0 0\n" "RenderEvent 207 193 0 0 0 0 0\n" "MouseMoveEvent 199 197 0 0 0 0 0\n" "RenderEvent 199 197 0 0 0 0 0\n" "MouseMoveEvent 191 199 0 0 0 0 0\n" "RenderEvent 191 199 0 0 0 0 0\n" "MouseMoveEvent 183 203 0 0 0 0 0\n" "RenderEvent 183 203 0 0 0 0 0\n" "MouseMoveEvent 173 207 0 0 0 0 0\n" "RenderEvent 173 207 0 0 0 0 0\n" "MouseMoveEvent 165 211 0 0 0 0 0\n" "RenderEvent 165 211 0 0 0 0 0\n" "MouseMoveEvent 155 215 0 0 0 0 0\n" "RenderEvent 155 215 0 0 0 0 0\n" "MouseMoveEvent 147 219 0 0 0 0 0\n" "RenderEvent 147 219 0 0 0 0 0\n" "MouseMoveEvent 139 221 0 0 0 0 0\n" "RenderEvent 139 221 0 0 0 0 0\n" "MouseMoveEvent 131 223 0 0 0 0 0\n" "RenderEvent 131 223 0 0 0 0 0\n" "MouseMoveEvent 125 227 0 0 0 0 0\n" "RenderEvent 125 227 0 0 0 0 0\n" "MouseMoveEvent 119 229 0 0 0 0 0\n" "RenderEvent 119 229 0 0 0 0 0\n" "MouseMoveEvent 113 231 0 0 0 0 0\n" "RenderEvent 113 231 0 0 0 0 0\n" "MouseMoveEvent 107 233 0 0 0 0 0\n" "RenderEvent 107 233 0 0 0 0 0\n" "MouseMoveEvent 101 235 0 0 0 0 0\n" "RenderEvent 101 235 0 0 0 0 0\n" "MouseMoveEvent 99 236 0 0 0 0 0\n" "RenderEvent 99 236 0 0 0 0 0\n" "MouseMoveEvent 97 237 0 0 0 0 0\n" "RenderEvent 97 237 0 0 0 0 0\n" "MouseMoveEvent 95 237 0 0 0 0 0\n" "RenderEvent 95 237 0 0 0 0 0\n" "MouseMoveEvent 94 238 0 0 0 0 0\n" "RenderEvent 94 238 0 0 0 0 0\n" "MouseMoveEvent 92 239 0 0 0 0 0\n" "RenderEvent 92 239 0 0 0 0 0\n" "MouseMoveEvent 90 239 0 0 0 0 0\n" "RenderEvent 90 239 0 0 0 0 0\n" "MouseMoveEvent 88 239 0 0 0 0 0\n" "RenderEvent 88 239 0 0 0 0 0\n" "MouseMoveEvent 87 240 0 0 0 0 0\n" "RenderEvent 87 240 0 0 0 0 0\n" "MouseMoveEvent 86 240 0 0 0 0 0\n" "RenderEvent 86 240 0 0 0 0 0\n" "MouseMoveEvent 85 240 0 0 0 0 0\n" "RenderEvent 85 240 0 0 0 0 0\n" "MouseMoveEvent 84 240 0 0 0 0 0\n" "RenderEvent 84 240 0 0 0 0 0\n" "MouseMoveEvent 83 240 0 0 0 0 0\n" "RenderEvent 83 240 0 0 0 0 0\n" "MouseMoveEvent 82 240 0 0 0 0 0\n" "RenderEvent 82 240 0 0 0 0 0\n" "MouseMoveEvent 81 240 0 0 0 0 0\n" "RenderEvent 81 240 0 0 0 0 0\n" "MouseMoveEvent 80 241 0 0 0 0 0\n" "RenderEvent 80 241 0 0 0 0 0\n" "MouseMoveEvent 79 241 0 0 0 0 0\n" "RenderEvent 79 241 0 0 0 0 0\n" "MouseMoveEvent 77 241 0 0 0 0 0\n" "RenderEvent 77 241 0 0 0 0 0\n" "MouseMoveEvent 75 241 0 0 0 0 0\n" "RenderEvent 75 241 0 0 0 0 0\n" "MouseMoveEvent 74 241 0 0 0 0 0\n" "RenderEvent 74 241 0 0 0 0 0\n" "MouseMoveEvent 74 242 0 0 0 0 0\n" "RenderEvent 74 242 0 0 0 0 0\n" "MouseMoveEvent 73 242 0 0 0 0 0\n" "RenderEvent 73 242 0 0 0 0 0\n" "MouseMoveEvent 72 242 0 0 0 0 0\n" "RenderEvent 72 242 0 0 0 0 0\n" "MouseMoveEvent 71 242 0 0 0 0 0\n" "RenderEvent 71 242 0 0 0 0 0\n" "MouseMoveEvent 70 242 0 0 0 0 0\n" "RenderEvent 70 242 0 0 0 0 0\n" "MouseMoveEvent 69 242 0 0 0 0 0\n" "RenderEvent 69 242 0 0 0 0 0\n" "MouseMoveEvent 68 242 0 0 0 0 0\n" "RenderEvent 68 242 0 0 0 0 0\n" "MouseMoveEvent 67 242 0 0 0 0 0\n" "RenderEvent 67 242 0 0 0 0 0\n" "MouseMoveEvent 66 242 0 0 0 0 0\n" "RenderEvent 66 242 0 0 0 0 0\n" "MouseMoveEvent 65 242 0 0 0 0 0\n" "RenderEvent 65 242 0 0 0 0 0\n" "MouseMoveEvent 64 242 0 0 0 0 0\n" "RenderEvent 64 242 0 0 0 0 0\n" "MouseMoveEvent 64 241 0 0 0 0 0\n" "RenderEvent 64 241 0 0 0 0 0\n" "MouseMoveEvent 63 241 0 0 0 0 0\n" "RenderEvent 63 241 0 0 0 0 0\n" "MouseMoveEvent 63 240 0 0 0 0 0\n" "RenderEvent 63 240 0 0 0 0 0\n" "MouseMoveEvent 62 240 0 0 0 0 0\n" "RenderEvent 62 240 0 0 0 0 0\n" "MouseMoveEvent 62 239 0 0 0 0 0\n" "RenderEvent 62 239 0 0 0 0 0\n" "MouseMoveEvent 61 239 0 0 0 0 0\n" "RenderEvent 61 239 0 0 0 0 0\n" "MouseMoveEvent 60 239 0 0 0 0 0\n" "RenderEvent 60 239 0 0 0 0 0\n" "MouseMoveEvent 60 238 0 0 0 0 0\n" "RenderEvent 60 238 0 0 0 0 0\n" "MouseMoveEvent 60 237 0 0 0 0 0\n" "RenderEvent 60 237 0 0 0 0 0\n" "MouseMoveEvent 60 236 0 0 0 0 0\n" "RenderEvent 60 236 0 0 0 0 0\n" "MouseMoveEvent 60 235 0 0 0 0 0\n" "RenderEvent 60 235 0 0 0 0 0\n" "MouseMoveEvent 60 234 0 0 0 0 0\n" "RenderEvent 60 234 0 0 0 0 0\n" "MouseMoveEvent 60 233 0 0 0 0 0\n" "RenderEvent 60 233 0 0 0 0 0\n" "MouseMoveEvent 60 232 0 0 0 0 0\n" "RenderEvent 60 232 0 0 0 0 0\n" "MouseMoveEvent 60 231 0 0 0 0 0\n" "RenderEvent 60 231 0 0 0 0 0\n" "MouseMoveEvent 60 230 0 0 0 0 0\n" "RenderEvent 60 230 0 0 0 0 0\n" "MouseMoveEvent 60 229 0 0 0 0 0\n" "RenderEvent 60 229 0 0 0 0 0\n" "MouseMoveEvent 60 228 0 0 0 0 0\n" "RenderEvent 60 228 0 0 0 0 0\n" "MouseMoveEvent 60 227 0 0 0 0 0\n" "RenderEvent 60 227 0 0 0 0 0\n" "MouseMoveEvent 60 226 0 0 0 0 0\n" "RenderEvent 60 226 0 0 0 0 0\n" "MouseMoveEvent 60 225 0 0 0 0 0\n" "RenderEvent 60 225 0 0 0 0 0\n" "MouseMoveEvent 60 224 0 0 0 0 0\n" "RenderEvent 60 224 0 0 0 0 0\n" "MouseMoveEvent 60 223 0 0 0 0 0\n" "RenderEvent 60 223 0 0 0 0 0\n" "MouseMoveEvent 61 222 0 0 0 0 0\n" "RenderEvent 61 222 0 0 0 0 0\n" "MouseMoveEvent 61 221 0 0 0 0 0\n" "RenderEvent 61 221 0 0 0 0 0\n" "MouseMoveEvent 61 220 0 0 0 0 0\n" "RenderEvent 61 220 0 0 0 0 0\n" "MouseMoveEvent 61 219 0 0 0 0 0\n" "RenderEvent 61 219 0 0 0 0 0\n" "MouseMoveEvent 62 219 0 0 0 0 0\n" "RenderEvent 62 219 0 0 0 0 0\n" "MouseMoveEvent 62 218 0 0 0 0 0\n" "RenderEvent 62 218 0 0 0 0 0\n" "MouseMoveEvent 62 217 0 0 0 0 0\n" "RenderEvent 62 217 0 0 0 0 0\n" "LeftButtonReleaseEvent 62 217 0 0 0 0 0\n" "RenderEvent 62 217 0 0 0 0 0\n" "MouseMoveEvent 62 216 0 0 0 0 0\n" "RenderEvent 62 216 0 0 0 0 0\n" "MouseMoveEvent 62 215 0 0 0 0 0\n" "RenderEvent 62 215 0 0 0 0 0\n" "MouseMoveEvent 62 214 0 0 0 0 0\n" "RenderEvent 62 214 0 0 0 0 0\n" "MouseMoveEvent 63 214 0 0 0 0 0\n" "RenderEvent 63 214 0 0 0 0 0\n" "MouseMoveEvent 63 213 0 0 0 0 0\n" "RenderEvent 63 213 0 0 0 0 0\n" "MouseMoveEvent 64 211 0 0 0 0 0\n" "RenderEvent 64 211 0 0 0 0 0\n" "MouseMoveEvent 64 209 0 0 0 0 0\n" "RenderEvent 64 209 0 0 0 0 0\n" "MouseMoveEvent 65 207 0 0 0 0 0\n" "RenderEvent 65 207 0 0 0 0 0\n" "MouseMoveEvent 67 199 0 0 0 0 0\n" "RenderEvent 67 199 0 0 0 0 0\n" "MouseMoveEvent 67 191 0 0 0 0 0\n" "RenderEvent 67 191 0 0 0 0 0\n" "MouseMoveEvent 69 183 0 0 0 0 0\n" "RenderEvent 69 183 0 0 0 0 0\n" "MouseMoveEvent 71 175 0 0 0 0 0\n" "RenderEvent 71 175 0 0 0 0 0\n" "MouseMoveEvent 73 165 0 0 0 0 0\n" "RenderEvent 73 165 0 0 0 0 0\n" "MouseMoveEvent 73 155 0 0 0 0 0\n" "RenderEvent 73 155 0 0 0 0 0\n" "MouseMoveEvent 75 145 0 0 0 0 0\n" "RenderEvent 75 145 0 0 0 0 0\n" "MouseMoveEvent 77 133 0 0 0 0 0\n" "RenderEvent 77 133 0 0 0 0 0\n" "MouseMoveEvent 79 123 0 0 0 0 0\n" "RenderEvent 79 123 0 0 0 0 0\n" "MouseMoveEvent 81 113 0 0 0 0 0\n" "RenderEvent 81 113 0 0 0 0 0\n" "MouseMoveEvent 83 103 0 0 0 0 0\n" "RenderEvent 83 103 0 0 0 0 0\n" "MouseMoveEvent 83 95 0 0 0 0 0\n" "RenderEvent 83 95 0 0 0 0 0\n" "MouseMoveEvent 87 89 0 0 0 0 0\n" "RenderEvent 87 89 0 0 0 0 0\n" "MouseMoveEvent 89 83 0 0 0 0 0\n" "RenderEvent 89 83 0 0 0 0 0\n" "MouseMoveEvent 89 80 0 0 0 0 0\n" "RenderEvent 89 80 0 0 0 0 0\n" "MouseMoveEvent 89 78 0 0 0 0 0\n" "RenderEvent 89 78 0 0 0 0 0\n" "MouseMoveEvent 90 76 0 0 0 0 0\n" "RenderEvent 90 76 0 0 0 0 0\n" "MouseMoveEvent 90 75 0 0 0 0 0\n" "RenderEvent 90 75 0 0 0 0 0\n" "MouseMoveEvent 90 74 0 0 0 0 0\n" "RenderEvent 90 74 0 0 0 0 0\n" "MouseMoveEvent 90 73 0 0 0 0 0\n" "RenderEvent 90 73 0 0 0 0 0\n" "MouseMoveEvent 91 73 0 0 0 0 0\n" "RenderEvent 91 73 0 0 0 0 0\n" "MouseMoveEvent 91 74 0 0 0 0 0\n" "RenderEvent 91 74 0 0 0 0 0\n" "MouseMoveEvent 91 75 0 0 0 0 0\n" "RenderEvent 91 75 0 0 0 0 0\n" "MouseMoveEvent 91 76 0 0 0 0 0\n" "RenderEvent 91 76 0 0 0 0 0\n" "MouseMoveEvent 92 77 0 0 0 0 0\n" "RenderEvent 92 77 0 0 0 0 0\n" "MouseMoveEvent 92 78 0 0 0 0 0\n" "RenderEvent 92 78 0 0 0 0 0\n" "MouseMoveEvent 92 79 0 0 0 0 0\n" "RenderEvent 92 79 0 0 0 0 0\n" "MouseMoveEvent 92 80 0 0 0 0 0\n" "RenderEvent 92 80 0 0 0 0 0\n" "MouseMoveEvent 92 81 0 0 0 0 0\n" "RenderEvent 92 81 0 0 0 0 0\n" "LeftButtonPressEvent 92 81 0 0 0 0 0\n" "RenderEvent 92 81 0 0 0 0 0\n" "MouseMoveEvent 93 81 0 0 0 0 0\n" "RenderEvent 93 81 0 0 0 0 0\n" "MouseMoveEvent 94 81 0 0 0 0 0\n" "RenderEvent 94 81 0 0 0 0 0\n" "MouseMoveEvent 94 82 0 0 0 0 0\n" "RenderEvent 94 82 0 0 0 0 0\n" "MouseMoveEvent 95 83 0 0 0 0 0\n" "RenderEvent 95 83 0 0 0 0 0\n" "MouseMoveEvent 97 84 0 0 0 0 0\n" "RenderEvent 97 84 0 0 0 0 0\n" "MouseMoveEvent 98 86 0 0 0 0 0\n" "RenderEvent 98 86 0 0 0 0 0\n" "MouseMoveEvent 99 88 0 0 0 0 0\n" "RenderEvent 99 88 0 0 0 0 0\n" "MouseMoveEvent 101 89 0 0 0 0 0\n" "RenderEvent 101 89 0 0 0 0 0\n" "MouseMoveEvent 107 93 0 0 0 0 0\n" "RenderEvent 107 93 0 0 0 0 0\n" "MouseMoveEvent 113 97 0 0 0 0 0\n" "RenderEvent 113 97 0 0 0 0 0\n" "MouseMoveEvent 115 98 0 0 0 0 0\n" "RenderEvent 115 98 0 0 0 0 0\n" "MouseMoveEvent 119 102 0 0 0 0 0\n" "RenderEvent 119 102 0 0 0 0 0\n" "MouseMoveEvent 125 106 0 0 0 0 0\n" "RenderEvent 125 106 0 0 0 0 0\n" "MouseMoveEvent 129 110 0 0 0 0 0\n" "RenderEvent 129 110 0 0 0 0 0\n" "MouseMoveEvent 135 112 0 0 0 0 0\n" "RenderEvent 135 112 0 0 0 0 0\n" "MouseMoveEvent 139 116 0 0 0 0 0\n" "RenderEvent 139 116 0 0 0 0 0\n" "MouseMoveEvent 143 120 0 0 0 0 0\n" "RenderEvent 143 120 0 0 0 0 0\n" "MouseMoveEvent 145 121 0 0 0 0 0\n" "RenderEvent 145 121 0 0 0 0 0\n" "MouseMoveEvent 149 125 0 0 0 0 0\n" "RenderEvent 149 125 0 0 0 0 0\n" "MouseMoveEvent 151 126 0 0 0 0 0\n" "RenderEvent 151 126 0 0 0 0 0\n" "MouseMoveEvent 155 130 0 0 0 0 0\n" "RenderEvent 155 130 0 0 0 0 0\n" "MouseMoveEvent 157 131 0 0 0 0 0\n" "RenderEvent 157 131 0 0 0 0 0\n" "MouseMoveEvent 160 131 0 0 0 0 0\n" "RenderEvent 160 131 0 0 0 0 0\n" "MouseMoveEvent 162 132 0 0 0 0 0\n" "RenderEvent 162 132 0 0 0 0 0\n" "MouseMoveEvent 163 134 0 0 0 0 0\n" "RenderEvent 163 134 0 0 0 0 0\n" "MouseMoveEvent 165 135 0 0 0 0 0\n" "RenderEvent 165 135 0 0 0 0 0\n" "MouseMoveEvent 169 139 0 0 0 0 0\n" "RenderEvent 169 139 0 0 0 0 0\n" "MouseMoveEvent 171 140 0 0 0 0 0\n" "RenderEvent 171 140 0 0 0 0 0\n" "MouseMoveEvent 173 141 0 0 0 0 0\n" "RenderEvent 173 141 0 0 0 0 0\n" "MouseMoveEvent 174 143 0 0 0 0 0\n" "RenderEvent 174 143 0 0 0 0 0\n" "MouseMoveEvent 176 144 0 0 0 0 0\n" "RenderEvent 176 144 0 0 0 0 0\n" "MouseMoveEvent 178 144 0 0 0 0 0\n" "RenderEvent 178 144 0 0 0 0 0\n" "MouseMoveEvent 180 145 0 0 0 0 0\n" "RenderEvent 180 145 0 0 0 0 0\n" "MouseMoveEvent 182 146 0 0 0 0 0\n" "RenderEvent 182 146 0 0 0 0 0\n" "MouseMoveEvent 184 146 0 0 0 0 0\n" "RenderEvent 184 146 0 0 0 0 0\n" "MouseMoveEvent 186 147 0 0 0 0 0\n" "RenderEvent 186 147 0 0 0 0 0\n" "MouseMoveEvent 187 148 0 0 0 0 0\n" "RenderEvent 187 148 0 0 0 0 0\n" "MouseMoveEvent 189 148 0 0 0 0 0\n" "RenderEvent 189 148 0 0 0 0 0\n" "MouseMoveEvent 190 149 0 0 0 0 0\n" "RenderEvent 190 149 0 0 0 0 0\n" "MouseMoveEvent 191 149 0 0 0 0 0\n" "RenderEvent 191 149 0 0 0 0 0\n" "MouseMoveEvent 192 150 0 0 0 0 0\n" "RenderEvent 192 150 0 0 0 0 0\n" "MouseMoveEvent 194 150 0 0 0 0 0\n" "RenderEvent 194 150 0 0 0 0 0\n" "MouseMoveEvent 195 151 0 0 0 0 0\n" "RenderEvent 195 151 0 0 0 0 0\n" "MouseMoveEvent 196 151 0 0 0 0 0\n" "RenderEvent 196 151 0 0 0 0 0\n" "MouseMoveEvent 198 151 0 0 0 0 0\n" "RenderEvent 198 151 0 0 0 0 0\n" "MouseMoveEvent 199 152 0 0 0 0 0\n" "RenderEvent 199 152 0 0 0 0 0\n" "MouseMoveEvent 201 152 0 0 0 0 0\n" "RenderEvent 201 152 0 0 0 0 0\n" "MouseMoveEvent 203 153 0 0 0 0 0\n" "RenderEvent 203 153 0 0 0 0 0\n" "MouseMoveEvent 205 153 0 0 0 0 0\n" "RenderEvent 205 153 0 0 0 0 0\n" "MouseMoveEvent 207 153 0 0 0 0 0\n" "RenderEvent 207 153 0 0 0 0 0\n" "MouseMoveEvent 209 153 0 0 0 0 0\n" "RenderEvent 209 153 0 0 0 0 0\n" "MouseMoveEvent 210 153 0 0 0 0 0\n" "RenderEvent 210 153 0 0 0 0 0\n" "MouseMoveEvent 213 153 0 0 0 0 0\n" "RenderEvent 213 153 0 0 0 0 0\n" "MouseMoveEvent 215 153 0 0 0 0 0\n" "RenderEvent 215 153 0 0 0 0 0\n" "MouseMoveEvent 217 153 0 0 0 0 0\n" "RenderEvent 217 153 0 0 0 0 0\n" "MouseMoveEvent 219 153 0 0 0 0 0\n" "RenderEvent 219 153 0 0 0 0 0\n" "MouseMoveEvent 220 153 0 0 0 0 0\n" "RenderEvent 220 153 0 0 0 0 0\n" "MouseMoveEvent 221 153 0 0 0 0 0\n" "RenderEvent 221 153 0 0 0 0 0\n" "MouseMoveEvent 222 153 0 0 0 0 0\n" "RenderEvent 222 153 0 0 0 0 0\n" "MouseMoveEvent 224 153 0 0 0 0 0\n" "RenderEvent 224 153 0 0 0 0 0\n" "MouseMoveEvent 227 153 0 0 0 0 0\n" "RenderEvent 227 153 0 0 0 0 0\n" "MouseMoveEvent 228 153 0 0 0 0 0\n" "RenderEvent 228 153 0 0 0 0 0\n" "MouseMoveEvent 229 153 0 0 0 0 0\n" "RenderEvent 229 153 0 0 0 0 0\n" "MouseMoveEvent 230 153 0 0 0 0 0\n" "RenderEvent 230 153 0 0 0 0 0\n" "MouseMoveEvent 231 153 0 0 0 0 0\n" "RenderEvent 231 153 0 0 0 0 0\n" "MouseMoveEvent 232 153 0 0 0 0 0\n" "RenderEvent 232 153 0 0 0 0 0\n" "MouseMoveEvent 233 153 0 0 0 0 0\n" "RenderEvent 233 153 0 0 0 0 0\n" "MouseMoveEvent 234 153 0 0 0 0 0\n" "RenderEvent 234 153 0 0 0 0 0\n" "MouseMoveEvent 235 153 0 0 0 0 0\n" "RenderEvent 235 153 0 0 0 0 0\n" "MouseMoveEvent 236 153 0 0 0 0 0\n" "RenderEvent 236 153 0 0 0 0 0\n" "MouseMoveEvent 237 153 0 0 0 0 0\n" "RenderEvent 237 153 0 0 0 0 0\n" "MouseMoveEvent 238 153 0 0 0 0 0\n" "RenderEvent 238 153 0 0 0 0 0\n" "MouseMoveEvent 239 153 0 0 0 0 0\n" "RenderEvent 239 153 0 0 0 0 0\n" "MouseMoveEvent 240 153 0 0 0 0 0\n" "RenderEvent 240 153 0 0 0 0 0\n" "MouseMoveEvent 241 153 0 0 0 0 0\n" "RenderEvent 241 153 0 0 0 0 0\n" "MouseMoveEvent 242 153 0 0 0 0 0\n" "RenderEvent 242 153 0 0 0 0 0\n" "MouseMoveEvent 243 153 0 0 0 0 0\n" "RenderEvent 243 153 0 0 0 0 0\n" "MouseMoveEvent 244 153 0 0 0 0 0\n" "RenderEvent 244 153 0 0 0 0 0\n" "MouseMoveEvent 245 153 0 0 0 0 0\n" "RenderEvent 245 153 0 0 0 0 0\n" "MouseMoveEvent 246 153 0 0 0 0 0\n" "RenderEvent 246 153 0 0 0 0 0\n" "MouseMoveEvent 247 153 0 0 0 0 0\n" "RenderEvent 247 153 0 0 0 0 0\n" "MouseMoveEvent 248 153 0 0 0 0 0\n" "RenderEvent 248 153 0 0 0 0 0\n" "MouseMoveEvent 249 153 0 0 0 0 0\n" "RenderEvent 249 153 0 0 0 0 0\n" "MouseMoveEvent 250 153 0 0 0 0 0\n" "RenderEvent 250 153 0 0 0 0 0\n" "MouseMoveEvent 251 153 0 0 0 0 0\n" "RenderEvent 251 153 0 0 0 0 0\n" "MouseMoveEvent 252 153 0 0 0 0 0\n" "RenderEvent 252 153 0 0 0 0 0\n" "MouseMoveEvent 253 153 0 0 0 0 0\n" "RenderEvent 253 153 0 0 0 0 0\n" "MouseMoveEvent 254 153 0 0 0 0 0\n" "RenderEvent 254 153 0 0 0 0 0\n" "MouseMoveEvent 255 153 0 0 0 0 0\n" "RenderEvent 255 153 0 0 0 0 0\n" "MouseMoveEvent 256 153 0 0 0 0 0\n" "RenderEvent 256 153 0 0 0 0 0\n" "LeftButtonReleaseEvent 256 153 0 0 0 0 0\n" "RenderEvent 256 153 0 0 0 0 0\n" "MouseMoveEvent 256 152 0 0 0 0 0\n" "RenderEvent 256 152 0 0 0 0 0\n" "MouseMoveEvent 255 152 0 0 0 0 0\n" "RenderEvent 255 152 0 0 0 0 0\n" "MouseMoveEvent 255 150 0 0 0 0 0\n" "RenderEvent 255 150 0 0 0 0 0\n" "MouseMoveEvent 254 149 0 0 0 0 0\n" "RenderEvent 254 149 0 0 0 0 0\n" "MouseMoveEvent 253 148 0 0 0 0 0\n" "RenderEvent 253 148 0 0 0 0 0\n" "MouseMoveEvent 251 147 0 0 0 0 0\n" "RenderEvent 251 147 0 0 0 0 0\n" "MouseMoveEvent 250 146 0 0 0 0 0\n" "RenderEvent 250 146 0 0 0 0 0\n" "MouseMoveEvent 249 145 0 0 0 0 0\n" "RenderEvent 249 145 0 0 0 0 0\n" "MouseMoveEvent 247 144 0 0 0 0 0\n" "RenderEvent 247 144 0 0 0 0 0\n" "MouseMoveEvent 246 143 0 0 0 0 0\n" "RenderEvent 246 143 0 0 0 0 0\n" "MouseMoveEvent 244 142 0 0 0 0 0\n" "RenderEvent 244 142 0 0 0 0 0\n" "MouseMoveEvent 243 140 0 0 0 0 0\n" "RenderEvent 243 140 0 0 0 0 0\n" "MouseMoveEvent 241 139 0 0 0 0 0\n" "RenderEvent 241 139 0 0 0 0 0\n" "MouseMoveEvent 239 133 0 0 0 0 0\n" "RenderEvent 239 133 0 0 0 0 0\n" "MouseMoveEvent 235 127 0 0 0 0 0\n" "RenderEvent 235 127 0 0 0 0 0\n" "MouseMoveEvent 231 121 0 0 0 0 0\n" "RenderEvent 231 121 0 0 0 0 0\n" "MouseMoveEvent 229 113 0 0 0 0 0\n" "RenderEvent 229 113 0 0 0 0 0\n" "MouseMoveEvent 227 107 0 0 0 0 0\n" "RenderEvent 227 107 0 0 0 0 0\n" "MouseMoveEvent 223 101 0 0 0 0 0\n" "RenderEvent 223 101 0 0 0 0 0\n" "MouseMoveEvent 221 95 0 0 0 0 0\n" "RenderEvent 221 95 0 0 0 0 0\n" "MouseMoveEvent 219 87 0 0 0 0 0\n" "RenderEvent 219 87 0 0 0 0 0\n" "MouseMoveEvent 215 83 0 0 0 0 0\n" "RenderEvent 215 83 0 0 0 0 0\n" "MouseMoveEvent 213 77 0 0 0 0 0\n" "RenderEvent 213 77 0 0 0 0 0\n" "MouseMoveEvent 211 71 0 0 0 0 0\n" "RenderEvent 211 71 0 0 0 0 0\n" "MouseMoveEvent 209 65 0 0 0 0 0\n" "RenderEvent 209 65 0 0 0 0 0\n" "MouseMoveEvent 208 63 0 0 0 0 0\n" "RenderEvent 208 63 0 0 0 0 0\n" "MouseMoveEvent 207 61 0 0 0 0 0\n" "RenderEvent 207 61 0 0 0 0 0\n" "MouseMoveEvent 206 59 0 0 0 0 0\n" "RenderEvent 206 59 0 0 0 0 0\n" "MouseMoveEvent 206 56 0 0 0 0 0\n" "RenderEvent 206 56 0 0 0 0 0\n" "MouseMoveEvent 205 55 0 0 0 0 0\n" "RenderEvent 205 55 0 0 0 0 0\n" "MouseMoveEvent 204 53 0 0 0 0 0\n" "RenderEvent 204 53 0 0 0 0 0\n" "MouseMoveEvent 204 52 0 0 0 0 0\n" "RenderEvent 204 52 0 0 0 0 0\n" "MouseMoveEvent 203 50 0 0 0 0 0\n" "RenderEvent 203 50 0 0 0 0 0\n" "MouseMoveEvent 202 49 0 0 0 0 0\n" "RenderEvent 202 49 0 0 0 0 0\n" "MouseMoveEvent 201 48 0 0 0 0 0\n" "RenderEvent 201 48 0 0 0 0 0\n" "MouseMoveEvent 200 48 0 0 0 0 0\n" "RenderEvent 200 48 0 0 0 0 0\n" "KeyPressEvent 222 88 0 0 113 1 q\n" "CharEvent 222 88 0 0 113 1 q\n" "ExitEvent 222 88 0 0 113 1 q\n" ; // This callback is responsible for adjusting the point position. // It looks in the region around the point and finds the maximum or // minimum value. class vtkDistanceWidget3DCallback : public vtkCommand { public: static vtkDistanceWidget3DCallback *New() { return new vtkDistanceWidget3DCallback; } virtual void Execute(vtkObject *caller, unsigned long, void*); vtkDistanceWidget3DCallback():Renderer(0),RenderWindow(0),DistanceWidget(0),Distance(0) {} vtkRenderer *Renderer; vtkRenderWindow *RenderWindow; vtkDistanceWidget *DistanceWidget; vtkDistanceRepresentation3D *Distance; }; // Method re-positions the points using random perturbation void vtkDistanceWidget3DCallback::Execute(vtkObject*, unsigned long eid, void* callData) { if ( eid == vtkCommand::InteractionEvent || eid == vtkCommand::EndInteractionEvent ) { double pos1[3], pos2[3]; // Modify the measure axis this->Distance->GetPoint1WorldPosition(pos1); this->Distance->GetPoint2WorldPosition(pos2); double dist=sqrt(vtkMath::Distance2BetweenPoints(pos1,pos2)); char title[256]; // this->Distance->GetAxis()->SetRange(0.0,dist); // sprintf(title,"%-#6.3g",dist); // commented by liyihai // this->Distance->GetAxis()->SetTitle(title); qDebug() << "dist:" << dist; // added by liyihai } else { int pid = *(reinterpret_cast<int*>(callData)); //From the point id, get the display coordinates double pos1[3], pos2[3], *pos; this->Distance->GetPoint1DisplayPosition(pos1); this->Distance->GetPoint2DisplayPosition(pos2); if ( pid == 0 ) { pos = pos1; } else { pos = pos2; } // Okay, render without the widget, and get the color buffer int enabled = this->DistanceWidget->GetEnabled(); if ( enabled ) { this->DistanceWidget->SetEnabled(0); //does a Render() as a side effect } // Pretend we are doing something serious....just randomly bump the // location of the point. double p[3]; p[0] = pos[0] + static_cast<int>(vtkMath::Random(-5.5,5.5)); p[1] = pos[1] + static_cast<int>(vtkMath::Random(-5.5,5.5)); p[2] = 0.0; // Set the new position if ( pid == 0 ) { this->Distance->SetPoint1DisplayPosition(p); } else { this->Distance->SetPoint2DisplayPosition(p); } // Side effect of a render here if ( enabled ) { this->DistanceWidget->SetEnabled(1); } } } // The actual test function int TestDistanceWidget3D( int argc, char *argv[] ) { // Create the RenderWindow, Renderer and both Actors // VTK_CREATE(vtkRenderer, ren1); VTK_CREATE(vtkRenderWindow, renWin); renWin->AddRenderer(ren1); VTK_CREATE(vtkRenderWindowInteractor, iren);; iren->SetRenderWindow(renWin); // Create a test pipeline // VTK_CREATE(vtkSphereSource, ss); VTK_CREATE(vtkPolyDataMapper, mapper); mapper->SetInputConnection(ss->GetOutputPort()); VTK_CREATE(vtkActor, actor); actor->SetMapper(mapper); // Create the widget and its representation VTK_CREATE(vtkPointHandleRepresentation3D, handle); handle->GetProperty()->SetColor(1,0,0); VTK_CREATE(vtkDistanceRepresentation3D, rep); rep->SetHandleRepresentation(handle); rep->RulerModeOn(); rep->SetRulerDistance(0.1); rep->SetNumberOfRulerTicks(4); double glyphScale = rep->GetGlyphScale(); rep->SetGlyphScale(2.0); if (rep->GetGlyphScale() != 2.0) { std::cerr << "Error setting glyph scale to 2.0, returned " << rep->GetGlyphScale() << std::endl; return EXIT_FAILURE; } rep->SetGlyphScale(glyphScale); if (rep->GetGlyphScale() != glyphScale) { std::cerr << "Error setting glyph scale to " << glyphScale << ", returned " << rep->GetGlyphScale() << std::endl; return EXIT_FAILURE; } rep->SetGlyphScale(0.1); if (rep->GetGlyphScale() != 0.1) { cerr << "Error setting glyph scale to 0.1, returned " << rep->GetGlyphScale() << std::endl; return EXIT_FAILURE; } if (!rep->GetLineProperty()) { std::cerr << "Error getting representation line property" << endl; return EXIT_FAILURE; } rep->GetLineProperty()->SetColor(1.0, 0.0, 1.0); rep->SetLabelPosition(0.45); if (rep->GetLabelPosition() != 0.45) { std::cerr << "Error setting label position to 0.45, returned : " << rep->GetLabelPosition() << std::endl; return EXIT_FAILURE; } for (int maxTicks = 1; maxTicks < 100; maxTicks += 10) { rep->SetMaximumNumberOfRulerTicks(maxTicks); if (rep->GetMaximumNumberOfRulerTicks() != maxTicks) { std::cerr << "Error setting maximum number of ruler ticks to " << maxTicks << ", get returned " << rep->GetMaximumNumberOfRulerTicks() << std::endl; return EXIT_FAILURE; } } vtkActor *glyphActor = rep->GetGlyphActor(); if (!glyphActor) { std::cerr << "Error getting glyph actor" << std::endl; return EXIT_FAILURE; } glyphActor->GetProperty()->SetColor(1.0, 0.0, 0.0); vtkFollower *labelActor = rep->GetLabelActor(); if (!labelActor) { std::cerr << "Error getting label actor" << std::endl; return EXIT_FAILURE; } labelActor->GetProperty()->SetColor(0.0, 1.0, 0.0); VTK_CREATE(vtkDistanceWidget, widget); widget->SetInteractor(iren); widget->SetRepresentation(rep); VTK_CREATE(vtkDistanceWidget3DCallback, mcbk); mcbk->Renderer = ren1; mcbk->RenderWindow = renWin; mcbk->Distance = rep; mcbk->DistanceWidget = widget; // Add Observer // widget->AddObserver(vtkCommand::InteractionEvent, mcbk); // added by liyihai // Add the actors to the renderer, set the background and size // ren1->AddActor(actor); ren1->SetBackground(0.1, 0.2, 0.4); renWin->SetSize(300, 300); // record events VTK_CREATE(vtkInteractorEventRecorder, recorder); recorder->SetInteractor(iren); recorder->On(); //recorder->SetFileName("/tmp/record2.log"); //recorder->Record(); recorder->ReadFromInputStringOn(); recorder->SetInputString(TestDistanceWidget3DEventLog); // render the image // iren->Initialize(); renWin->Render(); widget->On(); renWin->Render(); renWin->Start(); recorder->Play(); // Remove the observers so we can go interactive. Without this the "-I" // testing option fails. // int retVal = vtkRegressionTestImage( renWin ); // if ( retVal == vtkRegressionTester::DO_INTERACTOR) // commented by liyihai { iren->Start(); } recorder->Off(); widget->Off(); widget->RemoveObserver(mcbk); return 0; // added by liyihai // return !retVal; // commented by liyihai }
运行效果如图1.1所示
图1.1
1.2 vtkDistanceRepresentation3D函数分析
在1.1小节所示的代码中,用到了vtkDistanceRepresentation3D这个类,在回调函数中使用了两个函数:
void vtkDistanceRepresentation3D::GetPoint1WorldPosition(double pos[3]) void vtkDistanceRepresentation3D::GetPoint2WorldPosition(double pos[3])这两个函数获得的坐标分别是图1.1中pos1和pos2两个端点处的世界坐标。图1.1中的绿色标号1.28就是pos1与pos2之间的世界坐标距离。
此外,还可以通过下面的函数来获取端点pos1和pos2的屏幕坐标:
void vtkDistanceRepresentation3D::GetPoint1DisplayPosition(double pos[3]) void vtkDistanceRepresentation3D::GetPoint2DisplayPosition(double pos[3])
1.3 实际距离
正如参考资料[10]所言的,上述例子测量的只是体数之间的坐标距离,并非实际的距离。在CT图像三维显示中,往往需要测量空间实际距离。那么,该如何实现呢?
经过测试发现,并不需要对vtkDistanceWidget做任何设置,只需要在使用图像读取类(例如vtkTIFFReader)读取图像的时候设置通过其SetDataSpacing()将像素间的距离设置为实际距离即可!这时候再测量距离时,得到的就是实际距离。
2 角度测量
关于角度的测量,有不同的实现方法。参考资料[12]中,通过定义两条直线,然后计算线之间的夹角的方法来实现角度的测量。然而在VTK6.2.0中,有更加方便快捷的方法,就是使用vtkAngleWidget类,具体使用方法见实例TestAngleWidget3D.cxx。
3 体积&表面积测量
由于篇幅限制,详见《VTK体积&表面积测量》。
4 曲线长度测量
由于篇幅限制,详见《VTK曲线长度测量》。
参考资料
[1]vtk计算Polydata的面积和体积
[2]VTK距离测量
[3]VTK中实现距离测量
[4]DistanceWidget
[5]VTK DICOM 图像显示以及距离角度测量
[6]VTK-Widgets在医学图像交互测量中的研究
[7]基于VTK的医学图像交互式三维测量技术研究
[8]VTK-Widgets在医学图像交互测量中的研究
[9]DistanceBetweenPoints
[10]real distance with diantance widget
[11]DistanceWidget
[12]VTK的角度测量
[13]vtk计算Polydata的面积和体积
[14]ExtractOutsideSurface
[15]Calculating the area of a polygon
[16]Automated collection of volume and area info from vtk models
[17]How to calculate volume of convex hull and volume of a 3D object
[18]如何求三维重建后的表面积和体积????
[19]Visualization, volume and surface area calculation of three dimensional (3D) ultrasound images
[20]Measurement of surface area of biological structures, based on 3D microscopic image data