// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
// Tests the class vtkImageActorPointPlacer.
//
// A feature central to most widgets is the translation of 2D coordinates to 3D
// coordinates. As you delve down into the inner workings of a widget, you will
// realize that it is critical to define how 2D coordinates are mapped to 3D
// world coordinates.
//
// Note that interactions happen in a 2D window. ie. The XWindow server is going to
// tell us that the user pressed his mouse button at pixel location (X,Y).
//
//  This location (X,Y) could map to any location in 3D space (x,y,z). How do
// we define this mapping ? VTK provides a few standard ways to define this
// mapping and a framework to create your own mapping. This is done via
// vtkPointPlacer.
//
//   * vtkFocalPlanePointPlacer:
//
//       Converts 2D display positions to world positions such that they lie on
//       the focal plane.
//
//   * vtkPolygonalSurfacePointPlacer:
//
//       Converts 2D display positions to world positions such that they lie on
//       the surface of one or more specified polygonal objects.
//
//   * vtkImageActorPointPlacer
//
//       Converts 2D display positions to world positions such that they lie on
//       a specified ImageActor
//
//   * vtkBoundedPlanePointPlacer
//
//       Converts 2D display positions to world positions such that they lie
//       within a set of specified bounding planes.
//
//   * vtkTerrainContourPointPlacer - On a terrain..
//
//
// Point placers provide an extensible framework to specify constraints on the
// placement of widgets.

#include "vtkSmartPointer.h"

#include "vtkCamera.h"
#include "vtkCommand.h"
#include "vtkContourWidget.h"
#include "vtkImageActorPointPlacer.h"
#include "vtkImageData.h"
#include "vtkImageShiftScale.h"
#include "vtkImageViewer2.h"
#include "vtkInteractorEventRecorder.h"
#include "vtkOrientedGlyphContourRepresentation.h"
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkProperty.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkSliderRepresentation.h"
#include "vtkSliderRepresentation2D.h"
#include "vtkSliderWidget.h"
#include "vtkTestUtilities.h"
#include "vtkTesting.h"
#include "vtkVolume16Reader.h"

static char TestImageActorContourWidgetLog[] = "# StreamVersion 1\n"
                                               "ConfigureEvent 0 499 0 0 0 0 0\n"
                                               "RenderEvent 0 499 0 0 0 0 0\n"
                                               "ExposeEvent 0 499 0 0 0 0 0\n"
                                               "RenderEvent 0 499 0 0 0 0 0\n"
                                               "EnterEvent 254 6 0 0 0 0 0\n"
                                               "MouseMoveEvent 252 12 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 16 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 18 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 20 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 23 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 23 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 23 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 249 23 0 0 0 0 0\n"
                                               "RenderEvent 249 23 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 22 0 0 0 0 0\n"
                                               "RenderEvent 249 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 250 22 0 0 0 0 0\n"
                                               "RenderEvent 250 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 22 0 0 0 0 0\n"
                                               "RenderEvent 251 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 252 22 0 0 0 0 0\n"
                                               "RenderEvent 252 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 255 22 0 0 0 0 0\n"
                                               "RenderEvent 255 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 257 22 0 0 0 0 0\n"
                                               "RenderEvent 257 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 259 22 0 0 0 0 0\n"
                                               "RenderEvent 259 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 261 22 0 0 0 0 0\n"
                                               "RenderEvent 261 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 264 22 0 0 0 0 0\n"
                                               "RenderEvent 264 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 267 22 0 0 0 0 0\n"
                                               "RenderEvent 267 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 269 21 0 0 0 0 0\n"
                                               "RenderEvent 269 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 271 21 0 0 0 0 0\n"
                                               "RenderEvent 271 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 273 21 0 0 0 0 0\n"
                                               "RenderEvent 273 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 275 21 0 0 0 0 0\n"
                                               "RenderEvent 275 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 276 21 0 0 0 0 0\n"
                                               "RenderEvent 276 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 277 21 0 0 0 0 0\n"
                                               "RenderEvent 277 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 278 21 0 0 0 0 0\n"
                                               "RenderEvent 278 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 279 21 0 0 0 0 0\n"
                                               "RenderEvent 279 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 280 21 0 0 0 0 0\n"
                                               "RenderEvent 280 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 281 21 0 0 0 0 0\n"
                                               "RenderEvent 281 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 282 21 0 0 0 0 0\n"
                                               "RenderEvent 282 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 21 0 0 0 0 0\n"
                                               "RenderEvent 283 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 285 21 0 0 0 0 0\n"
                                               "RenderEvent 285 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 287 21 0 0 0 0 0\n"
                                               "RenderEvent 287 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 288 21 0 0 0 0 0\n"
                                               "RenderEvent 288 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 290 21 0 0 0 0 0\n"
                                               "RenderEvent 290 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 291 21 0 0 0 0 0\n"
                                               "RenderEvent 291 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 292 21 0 0 0 0 0\n"
                                               "RenderEvent 292 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 293 21 0 0 0 0 0\n"
                                               "RenderEvent 293 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 294 21 0 0 0 0 0\n"
                                               "RenderEvent 294 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 295 21 0 0 0 0 0\n"
                                               "RenderEvent 295 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 296 21 0 0 0 0 0\n"
                                               "RenderEvent 296 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 297 21 0 0 0 0 0\n"
                                               "RenderEvent 297 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 298 21 0 0 0 0 0\n"
                                               "RenderEvent 298 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 299 21 0 0 0 0 0\n"
                                               "RenderEvent 299 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 300 21 0 0 0 0 0\n"
                                               "RenderEvent 300 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 301 21 0 0 0 0 0\n"
                                               "RenderEvent 301 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 302 21 0 0 0 0 0\n"
                                               "RenderEvent 302 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 21 0 0 0 0 0\n"
                                               "RenderEvent 303 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 21 0 0 0 0 0\n"
                                               "RenderEvent 304 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 305 21 0 0 0 0 0\n"
                                               "RenderEvent 305 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 306 21 0 0 0 0 0\n"
                                               "RenderEvent 306 21 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 306 21 0 0 0 0 0\n"
                                               "RenderEvent 306 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 306 20 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 302 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 301 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 300 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 298 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 296 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 295 20 0 0 0 0 0\n"
                                               "MouseMoveEvent 293 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 291 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 290 23 0 0 0 0 0\n"
                                               "MouseMoveEvent 286 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 282 31 0 0 0 0 0\n"
                                               "MouseMoveEvent 281 32 0 0 0 0 0\n"
                                               "MouseMoveEvent 279 38 0 0 0 0 0\n"
                                               "MouseMoveEvent 278 40 0 0 0 0 0\n"
                                               "MouseMoveEvent 274 46 0 0 0 0 0\n"
                                               "MouseMoveEvent 273 48 0 0 0 0 0\n"
                                               "MouseMoveEvent 269 54 0 0 0 0 0\n"
                                               "MouseMoveEvent 267 64 0 0 0 0 0\n"
                                               "MouseMoveEvent 267 74 0 0 0 0 0\n"
                                               "MouseMoveEvent 263 90 0 0 0 0 0\n"
                                               "MouseMoveEvent 261 108 0 0 0 0 0\n"
                                               "MouseMoveEvent 255 124 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 144 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 160 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 172 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 186 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 196 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 204 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 212 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 220 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 228 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 238 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 241 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 244 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 246 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 248 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 249 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 250 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 251 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 253 0 0 0 0 0\n"
                                               "MouseMoveEvent 252 254 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 255 0 0 0 0 0\n"
                                               "MouseMoveEvent 250 256 0 0 0 0 0\n"
                                               "MouseMoveEvent 250 257 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 257 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 258 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 260 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 248 260 0 0 0 0 0\n"
                                               "RenderEvent 248 260 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 248 260 0 0 0 0 0\n"
                                               "MouseMoveEvent 246 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 244 258 0 0 0 0 0\n"
                                               "MouseMoveEvent 238 254 0 0 0 0 0\n"
                                               "MouseMoveEvent 234 248 0 0 0 0 0\n"
                                               "MouseMoveEvent 228 242 0 0 0 0 0\n"
                                               "MouseMoveEvent 222 238 0 0 0 0 0\n"
                                               "MouseMoveEvent 220 232 0 0 0 0 0\n"
                                               "MouseMoveEvent 214 224 0 0 0 0 0\n"
                                               "MouseMoveEvent 210 220 0 0 0 0 0\n"
                                               "MouseMoveEvent 204 212 0 0 0 0 0\n"
                                               "MouseMoveEvent 200 208 0 0 0 0 0\n"
                                               "MouseMoveEvent 200 206 0 0 0 0 0\n"
                                               "MouseMoveEvent 199 204 0 0 0 0 0\n"
                                               "MouseMoveEvent 198 203 0 0 0 0 0\n"
                                               "MouseMoveEvent 198 202 0 0 0 0 0\n"
                                               "MouseMoveEvent 198 201 0 0 0 0 0\n"
                                               "MouseMoveEvent 198 200 0 0 0 0 0\n"
                                               "MouseMoveEvent 198 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 199 199 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 199 199 0 0 0 1 0\n"
                                               "RenderEvent 199 199 0 0 0 1 0\n"
                                               "MouseMoveEvent 199 198 0 0 0 0 0\n"
                                               "MouseMoveEvent 200 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 202 196 0 0 0 0 0\n"
                                               "MouseMoveEvent 206 190 0 0 0 0 0\n"
                                               "MouseMoveEvent 212 188 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 212 188 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 184 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 180 0 0 0 0 0\n"
                                               "MouseMoveEvent 234 176 0 0 0 0 0\n"
                                               "MouseMoveEvent 242 174 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 172 0 0 0 0 0\n"
                                               "MouseMoveEvent 254 170 0 0 0 0 0\n"
                                               "MouseMoveEvent 262 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 270 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 280 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 286 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 288 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 290 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 290 169 0 0 0 0 0\n"
                                               "MouseMoveEvent 291 169 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 291 169 0 0 0 0 0\n"
                                               "RenderEvent 291 169 0 0 0 0 0\n"
                                               "MouseMoveEvent 292 169 0 0 0 0 0\n"
                                               "MouseMoveEvent 292 170 0 0 0 0 0\n"
                                               "MouseMoveEvent 292 171 0 0 0 0 0\n"
                                               "MouseMoveEvent 292 172 0 0 0 0 0\n"
                                               "MouseMoveEvent 293 174 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 293 174 0 0 0 0 0\n"
                                               "MouseMoveEvent 294 175 0 0 0 0 0\n"
                                               "MouseMoveEvent 295 176 0 0 0 0 0\n"
                                               "MouseMoveEvent 296 178 0 0 0 0 0\n"
                                               "MouseMoveEvent 296 181 0 0 0 0 0\n"
                                               "MouseMoveEvent 297 183 0 0 0 0 0\n"
                                               "MouseMoveEvent 297 191 0 0 0 0 0\n"
                                               "MouseMoveEvent 297 193 0 0 0 0 0\n"
                                               "MouseMoveEvent 299 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 301 205 0 0 0 0 0\n"
                                               "MouseMoveEvent 301 207 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 213 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 215 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 217 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 219 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 220 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 222 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 223 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 224 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 225 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 304 225 0 0 0 1 0\n"
                                               "RenderEvent 304 225 0 0 0 1 0\n"
                                               "MouseMoveEvent 304 226 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 227 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 228 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 303 228 0 0 0 0 0\n"
                                               "MouseMoveEvent 302 230 0 0 0 0 0\n"
                                               "MouseMoveEvent 302 231 0 0 0 0 0\n"
                                               "MouseMoveEvent 302 233 0 0 0 0 0\n"
                                               "MouseMoveEvent 298 237 0 0 0 0 0\n"
                                               "MouseMoveEvent 294 245 0 0 0 0 0\n"
                                               "MouseMoveEvent 290 249 0 0 0 0 0\n"
                                               "MouseMoveEvent 289 250 0 0 0 0 0\n"
                                               "MouseMoveEvent 288 251 0 0 0 0 0\n"
                                               "MouseMoveEvent 284 257 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 258 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 260 0 0 0 0 0\n"
                                               "MouseMoveEvent 282 261 0 0 0 0 0\n"
                                               "MouseMoveEvent 281 261 0 0 0 0 0\n"
                                               "MouseMoveEvent 281 262 0 0 0 0 0\n"
                                               "MouseMoveEvent 280 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 279 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 278 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 277 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 276 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 275 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 273 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 273 264 0 0 0 0 0\n"
                                               "MouseMoveEvent 272 264 0 0 0 0 0\n"
                                               "MouseMoveEvent 271 264 0 0 0 0 0\n"
                                               "MouseMoveEvent 270 264 0 0 0 0 0\n"
                                               "MouseMoveEvent 269 264 0 0 0 0 0\n"
                                               "MouseMoveEvent 267 263 0 0 0 0 0\n"
                                               "MouseMoveEvent 266 262 0 0 0 0 0\n"
                                               "MouseMoveEvent 265 262 0 0 0 0 0\n"
                                               "MouseMoveEvent 265 261 0 0 0 0 0\n"
                                               "MouseMoveEvent 264 261 0 0 0 0 0\n"
                                               "MouseMoveEvent 263 261 0 0 0 0 0\n"
                                               "MouseMoveEvent 263 260 0 0 0 0 0\n"
                                               "MouseMoveEvent 262 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 261 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 260 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 259 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 257 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 256 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 255 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 254 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 258 0 0 0 0 0\n"
                                               "MouseMoveEvent 252 258 0 0 0 0 0\n"
                                               "MouseMoveEvent 252 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 250 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 259 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 249 259 0 0 0 0 0\n"
                                               "RenderEvent 249 259 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 249 259 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 258 0 0 0 0 0\n"
                                               "RenderEvent 249 258 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 257 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 256 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 253 0 0 0 0 0\n"
                                               "RenderEvent 249 253 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 250 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 242 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 234 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 222 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 208 0 0 0 0 0\n"
                                               "MouseMoveEvent 255 196 0 0 0 0 0\n"
                                               "MouseMoveEvent 263 184 0 0 0 0 0\n"
                                               "MouseMoveEvent 267 170 0 0 0 0 0\n"
                                               "MouseMoveEvent 271 158 0 0 0 0 0\n"
                                               "MouseMoveEvent 277 144 0 0 0 0 0\n"
                                               "MouseMoveEvent 281 124 0 0 0 0 0\n"
                                               "MouseMoveEvent 281 104 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 86 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 74 0 0 0 0 0\n"
                                               "MouseMoveEvent 287 62 0 0 0 0 0\n"
                                               "MouseMoveEvent 293 52 0 0 0 0 0\n"
                                               "MouseMoveEvent 299 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 307 34 0 0 0 0 0\n"
                                               "MouseMoveEvent 311 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 313 20 0 0 0 0 0\n"
                                               "MouseMoveEvent 314 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 314 18 0 0 0 0 0\n"
                                               "MouseMoveEvent 313 18 0 0 0 0 0\n"
                                               "MouseMoveEvent 313 17 0 0 0 0 0\n"
                                               "MouseMoveEvent 312 18 0 0 0 0 0\n"
                                               "MouseMoveEvent 311 19 0 0 0 0 0\n"
                                               "MouseMoveEvent 311 20 0 0 0 0 0\n"
                                               "MouseMoveEvent 311 21 0 0 0 0 0\n"
                                               "MouseMoveEvent 311 22 0 0 0 0 0\n"
                                               "MouseMoveEvent 311 23 0 0 0 0 0\n"
                                               "MouseMoveEvent 311 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 310 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 309 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 308 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 308 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 307 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 306 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 306 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 305 27 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 305 27 0 0 0 0 0\n"
                                               "RenderEvent 305 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 304 27 0 0 0 0 0\n"
                                               "RenderEvent 304 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 303 28 0 0 0 0 0\n"
                                               "RenderEvent 303 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 301 28 0 0 0 0 0\n"
                                               "RenderEvent 301 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 299 28 0 0 0 0 0\n"
                                               "RenderEvent 299 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 297 28 0 0 0 0 0\n"
                                               "RenderEvent 297 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 295 28 0 0 0 0 0\n"
                                               "RenderEvent 295 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 293 28 0 0 0 0 0\n"
                                               "RenderEvent 293 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 290 28 0 0 0 0 0\n"
                                               "RenderEvent 290 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 288 28 0 0 0 0 0\n"
                                               "RenderEvent 288 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 285 28 0 0 0 0 0\n"
                                               "RenderEvent 285 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 283 28 0 0 0 0 0\n"
                                               "RenderEvent 283 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 281 28 0 0 0 0 0\n"
                                               "RenderEvent 281 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 280 28 0 0 0 0 0\n"
                                               "RenderEvent 280 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 278 28 0 0 0 0 0\n"
                                               "RenderEvent 278 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 277 28 0 0 0 0 0\n"
                                               "RenderEvent 277 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 276 28 0 0 0 0 0\n"
                                               "RenderEvent 276 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 274 28 0 0 0 0 0\n"
                                               "RenderEvent 274 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 272 28 0 0 0 0 0\n"
                                               "RenderEvent 272 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 270 28 0 0 0 0 0\n"
                                               "RenderEvent 270 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 268 28 0 0 0 0 0\n"
                                               "RenderEvent 268 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 266 28 0 0 0 0 0\n"
                                               "RenderEvent 266 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 264 28 0 0 0 0 0\n"
                                               "RenderEvent 264 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 262 27 0 0 0 0 0\n"
                                               "RenderEvent 262 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 261 27 0 0 0 0 0\n"
                                               "RenderEvent 261 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 259 27 0 0 0 0 0\n"
                                               "RenderEvent 259 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 258 27 0 0 0 0 0\n"
                                               "RenderEvent 258 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 256 27 0 0 0 0 0\n"
                                               "RenderEvent 256 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 255 27 0 0 0 0 0\n"
                                               "RenderEvent 255 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 27 0 0 0 0 0\n"
                                               "RenderEvent 253 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 252 27 0 0 0 0 0\n"
                                               "RenderEvent 252 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 27 0 0 0 0 0\n"
                                               "RenderEvent 251 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 250 27 0 0 0 0 0\n"
                                               "RenderEvent 250 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 27 0 0 0 0 0\n"
                                               "RenderEvent 249 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 27 0 0 0 0 0\n"
                                               "RenderEvent 248 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 27 0 0 0 0 0\n"
                                               "RenderEvent 247 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 246 27 0 0 0 0 0\n"
                                               "RenderEvent 246 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 245 27 0 0 0 0 0\n"
                                               "RenderEvent 245 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 244 27 0 0 0 0 0\n"
                                               "RenderEvent 244 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 242 27 0 0 0 0 0\n"
                                               "RenderEvent 242 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 241 27 0 0 0 0 0\n"
                                               "RenderEvent 241 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 240 27 0 0 0 0 0\n"
                                               "RenderEvent 240 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 239 27 0 0 0 0 0\n"
                                               "RenderEvent 239 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 238 27 0 0 0 0 0\n"
                                               "RenderEvent 238 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 237 27 0 0 0 0 0\n"
                                               "RenderEvent 237 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 236 27 0 0 0 0 0\n"
                                               "RenderEvent 236 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 235 27 0 0 0 0 0\n"
                                               "RenderEvent 235 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 234 27 0 0 0 0 0\n"
                                               "RenderEvent 234 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 233 27 0 0 0 0 0\n"
                                               "RenderEvent 233 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 232 27 0 0 0 0 0\n"
                                               "RenderEvent 232 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 231 27 0 0 0 0 0\n"
                                               "RenderEvent 231 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 230 27 0 0 0 0 0\n"
                                               "RenderEvent 230 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 229 27 0 0 0 0 0\n"
                                               "RenderEvent 229 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 228 27 0 0 0 0 0\n"
                                               "RenderEvent 228 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 227 27 0 0 0 0 0\n"
                                               "RenderEvent 227 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 27 0 0 0 0 0\n"
                                               "RenderEvent 226 27 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 226 27 0 0 0 0 0\n"
                                               "RenderEvent 226 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 29 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 31 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 33 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 55 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 65 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 77 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 91 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 103 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 113 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 125 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 135 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 147 0 0 0 0 0\n"
                                               "MouseMoveEvent 224 155 0 0 0 0 0\n"
                                               "MouseMoveEvent 222 163 0 0 0 0 0\n"
                                               "MouseMoveEvent 220 171 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 181 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 184 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 192 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 194 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 196 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 218 198 0 0 0 0 0\n"
                                               "MouseMoveEvent 217 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 217 200 0 0 0 0 0\n"
                                               "MouseMoveEvent 217 201 0 0 0 0 0\n"
                                               "MouseMoveEvent 217 202 0 0 0 0 0\n"
                                               "MouseMoveEvent 217 203 0 0 0 0 0\n"
                                               "MouseMoveEvent 217 204 0 0 0 0 0\n"
                                               "MouseMoveEvent 216 204 0 0 0 0 0\n"
                                               "MouseMoveEvent 215 204 0 0 0 0 0\n"
                                               "MouseMoveEvent 214 203 0 0 0 0 0\n"
                                               "MouseMoveEvent 213 202 0 0 0 0 0\n"
                                               "MouseMoveEvent 211 201 0 0 0 0 0\n"
                                               "MouseMoveEvent 210 201 0 0 0 0 0\n"
                                               "MouseMoveEvent 209 201 0 0 0 0 0\n"
                                               "MouseMoveEvent 207 200 0 0 0 0 0\n"
                                               "MouseMoveEvent 207 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 205 200 0 0 0 0 0\n"
                                               "RenderEvent 205 200 0 0 0 0 0\n"
                                               "MouseMoveEvent 204 200 0 0 0 0 0\n"
                                               "MouseMoveEvent 203 200 0 0 0 0 0\n"
                                               "MouseMoveEvent 202 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 201 199 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 201 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 200 199 0 0 0 0 0\n"
                                               "RenderEvent 200 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 199 199 0 0 0 0 0\n"
                                               "RenderEvent 199 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 198 199 0 0 0 0 0\n"
                                               "RenderEvent 198 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 196 199 0 0 0 0 0\n"
                                               "RenderEvent 196 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 193 199 0 0 0 0 0\n"
                                               "RenderEvent 193 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 190 199 0 0 0 0 0\n"
                                               "RenderEvent 190 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 187 199 0 0 0 0 0\n"
                                               "RenderEvent 187 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 184 199 0 0 0 0 0\n"
                                               "RenderEvent 184 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 181 199 0 0 0 0 0\n"
                                               "RenderEvent 181 199 0 0 0 0 0\n"
                                               "MouseMoveEvent 175 197 0 0 0 0 0\n"
                                               "RenderEvent 175 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 167 197 0 0 0 0 0\n"
                                               "RenderEvent 167 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 164 197 0 0 0 0 0\n"
                                               "RenderEvent 164 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 161 197 0 0 0 0 0\n"
                                               "RenderEvent 161 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 159 197 0 0 0 0 0\n"
                                               "RenderEvent 159 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 157 197 0 0 0 0 0\n"
                                               "RenderEvent 157 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 156 197 0 0 0 0 0\n"
                                               "RenderEvent 156 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 155 197 0 0 0 0 0\n"
                                               "RenderEvent 155 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 154 197 0 0 0 0 0\n"
                                               "RenderEvent 154 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 153 197 0 0 0 0 0\n"
                                               "RenderEvent 153 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 152 197 0 0 0 0 0\n"
                                               "RenderEvent 152 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 151 197 0 0 0 0 0\n"
                                               "RenderEvent 151 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 150 197 0 0 0 0 0\n"
                                               "RenderEvent 150 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 149 197 0 0 0 0 0\n"
                                               "RenderEvent 149 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 148 197 0 0 0 0 0\n"
                                               "RenderEvent 148 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 147 197 0 0 0 0 0\n"
                                               "RenderEvent 147 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 146 197 0 0 0 0 0\n"
                                               "RenderEvent 146 197 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 146 197 0 0 0 0 0\n"
                                               "MouseMoveEvent 146 195 0 0 0 0 0\n"
                                               "MouseMoveEvent 146 193 0 0 0 0 0\n"
                                               "MouseMoveEvent 146 192 0 0 0 0 0\n"
                                               "MouseMoveEvent 148 184 0 0 0 0 0\n"
                                               "RenderEvent 148 184 0 0 0 0 0\n"
                                               "MouseMoveEvent 149 182 0 0 0 0 0\n"
                                               "MouseMoveEvent 151 176 0 0 0 0 0\n"
                                               "MouseMoveEvent 155 168 0 0 0 0 0\n"
                                               "MouseMoveEvent 159 162 0 0 0 0 0\n"
                                               "MouseMoveEvent 161 152 0 0 0 0 0\n"
                                               "MouseMoveEvent 165 144 0 0 0 0 0\n"
                                               "MouseMoveEvent 167 136 0 0 0 0 0\n"
                                               "MouseMoveEvent 169 128 0 0 0 0 0\n"
                                               "MouseMoveEvent 171 120 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 110 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 102 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 94 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 86 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 83 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 75 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 73 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 71 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 68 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 67 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 65 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 63 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 61 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 60 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 58 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 56 0 0 0 0 0\n"
                                               "MouseMoveEvent 173 55 0 0 0 0 0\n"
                                               "MouseMoveEvent 174 54 0 0 0 0 0\n"
                                               "MouseMoveEvent 174 52 0 0 0 0 0\n"
                                               "MouseMoveEvent 175 51 0 0 0 0 0\n"
                                               "MouseMoveEvent 175 50 0 0 0 0 0\n"
                                               "MouseMoveEvent 175 49 0 0 0 0 0\n"
                                               "MouseMoveEvent 176 48 0 0 0 0 0\n"
                                               "MouseMoveEvent 177 47 0 0 0 0 0\n"
                                               "MouseMoveEvent 177 46 0 0 0 0 0\n"
                                               "MouseMoveEvent 177 45 0 0 0 0 0\n"
                                               "MouseMoveEvent 178 44 0 0 0 0 0\n"
                                               "MouseMoveEvent 179 44 0 0 0 0 0\n"
                                               "MouseMoveEvent 180 44 0 0 0 0 0\n"
                                               "MouseMoveEvent 181 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 183 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 184 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 185 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 187 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 189 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 191 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 192 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 194 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 195 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 197 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 198 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 199 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 200 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 201 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 203 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 204 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 207 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 209 43 0 0 0 0 0\n"
                                               "MouseMoveEvent 211 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 213 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 215 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 217 42 0 0 0 0 0\n"
                                               "MouseMoveEvent 219 41 0 0 0 0 0\n"
                                               "MouseMoveEvent 220 41 0 0 0 0 0\n"
                                               "MouseMoveEvent 221 40 0 0 0 0 0\n"
                                               "MouseMoveEvent 222 40 0 0 0 0 0\n"
                                               "MouseMoveEvent 223 40 0 0 0 0 0\n"
                                               "MouseMoveEvent 223 39 0 0 0 0 0\n"
                                               "MouseMoveEvent 223 38 0 0 0 0 0\n"
                                               "MouseMoveEvent 223 37 0 0 0 0 0\n"
                                               "MouseMoveEvent 223 36 0 0 0 0 0\n"
                                               "MouseMoveEvent 223 35 0 0 0 0 0\n"
                                               "MouseMoveEvent 224 34 0 0 0 0 0\n"
                                               "MouseMoveEvent 225 33 0 0 0 0 0\n"
                                               "MouseMoveEvent 225 32 0 0 0 0 0\n"
                                               "MouseMoveEvent 225 31 0 0 0 0 0\n"
                                               "MouseMoveEvent 225 30 0 0 0 0 0\n"
                                               "MouseMoveEvent 225 29 0 0 0 0 0\n"
                                               "MouseMoveEvent 225 28 0 0 0 0 0\n"
                                               "MouseMoveEvent 225 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 27 0 0 0 0 0\n"
                                               "MouseMoveEvent 226 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 227 25 0 0 0 0 0\n"
                                               "LeftButtonPressEvent 227 25 0 0 0 0 0\n"
                                               "RenderEvent 227 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 228 25 0 0 0 0 0\n"
                                               "RenderEvent 228 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 229 25 0 0 0 0 0\n"
                                               "RenderEvent 229 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 230 25 0 0 0 0 0\n"
                                               "RenderEvent 230 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 231 25 0 0 0 0 0\n"
                                               "RenderEvent 231 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 232 25 0 0 0 0 0\n"
                                               "RenderEvent 232 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 234 24 0 0 0 0 0\n"
                                               "RenderEvent 234 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 235 24 0 0 0 0 0\n"
                                               "RenderEvent 235 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 236 24 0 0 0 0 0\n"
                                               "RenderEvent 236 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 237 24 0 0 0 0 0\n"
                                               "RenderEvent 237 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 238 24 0 0 0 0 0\n"
                                               "RenderEvent 238 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 239 24 0 0 0 0 0\n"
                                               "RenderEvent 239 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 240 24 0 0 0 0 0\n"
                                               "RenderEvent 240 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 241 25 0 0 0 0 0\n"
                                               "RenderEvent 241 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 243 25 0 0 0 0 0\n"
                                               "RenderEvent 243 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 244 25 0 0 0 0 0\n"
                                               "RenderEvent 244 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 245 25 0 0 0 0 0\n"
                                               "RenderEvent 245 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 247 25 0 0 0 0 0\n"
                                               "RenderEvent 247 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 248 25 0 0 0 0 0\n"
                                               "RenderEvent 248 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 25 0 0 0 0 0\n"
                                               "RenderEvent 249 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 249 26 0 0 0 0 0\n"
                                               "RenderEvent 249 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 251 26 0 0 0 0 0\n"
                                               "RenderEvent 251 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 253 26 0 0 0 0 0\n"
                                               "RenderEvent 253 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 254 26 0 0 0 0 0\n"
                                               "RenderEvent 254 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 255 26 0 0 0 0 0\n"
                                               "RenderEvent 255 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 257 26 0 0 0 0 0\n"
                                               "RenderEvent 257 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 258 26 0 0 0 0 0\n"
                                               "RenderEvent 258 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 259 26 0 0 0 0 0\n"
                                               "RenderEvent 259 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 260 26 0 0 0 0 0\n"
                                               "RenderEvent 260 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 261 26 0 0 0 0 0\n"
                                               "RenderEvent 261 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 262 26 0 0 0 0 0\n"
                                               "RenderEvent 262 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 263 26 0 0 0 0 0\n"
                                               "RenderEvent 263 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 264 26 0 0 0 0 0\n"
                                               "RenderEvent 264 26 0 0 0 0 0\n"
                                               "MouseMoveEvent 265 25 0 0 0 0 0\n"
                                               "RenderEvent 265 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 266 25 0 0 0 0 0\n"
                                               "RenderEvent 266 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 267 25 0 0 0 0 0\n"
                                               "RenderEvent 267 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 268 25 0 0 0 0 0\n"
                                               "RenderEvent 268 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 269 25 0 0 0 0 0\n"
                                               "RenderEvent 269 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 270 25 0 0 0 0 0\n"
                                               "RenderEvent 270 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 271 24 0 0 0 0 0\n"
                                               "RenderEvent 271 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 272 24 0 0 0 0 0\n"
                                               "RenderEvent 272 24 0 0 0 0 0\n"
                                               "LeftButtonReleaseEvent 272 24 0 0 0 0 0\n"
                                               "RenderEvent 272 24 0 0 0 0 0\n"
                                               "MouseMoveEvent 272 25 0 0 0 0 0\n"
                                               "MouseMoveEvent 272 26 0 0 0 0 0\n"
                                               "ExitEvent 272 26 0 0 113 1 q\n";

class vtkSliderCallback2 : public vtkCommand
{
public:
  static vtkSliderCallback2* New() { return new vtkSliderCallback2; }
  void SetImageViewer(vtkImageViewer2* viewer) { this->Viewer = viewer; }
  void Execute(vtkObject* caller, unsigned long, void*) override
  {
    vtkSliderWidget* slider = static_cast<vtkSliderWidget*>(caller);
    vtkSliderRepresentation* sliderRepres =
      static_cast<vtkSliderRepresentation*>(slider->GetRepresentation());
    int pos = static_cast<int>(sliderRepres->GetValue());

    this->Viewer->SetSlice(pos);
  }

protected:
  vtkImageViewer2* Viewer;
};

int TestImageActorContourWidget(int argc, char* argv[])
{
  bool disableReplay = false, followCursor = false;
  for (int i = 0; i < argc; i++)
  {
    disableReplay |= (strcmp("--DisableReplay", argv[i]) == 0);
    followCursor |= (strcmp("--FollowCursor", argv[i]) == 0);
  }

  char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/headsq/quarter");

  vtkSmartPointer<vtkVolume16Reader> v16 = vtkSmartPointer<vtkVolume16Reader>::New();
  v16->SetDataDimensions(64, 64);
  v16->SetDataByteOrderToLittleEndian();
  v16->SetImageRange(1, 93);
  v16->SetDataSpacing(3.2, 3.2, 1.5);
  v16->SetFilePrefix(fname);
  v16->ReleaseDataFlagOn();
  v16->SetDataMask(0x7fff);
  v16->Update();
  delete[] fname;

  double range[2];
  v16->GetOutput()->GetScalarRange(range);

  vtkSmartPointer<vtkImageShiftScale> shifter = vtkSmartPointer<vtkImageShiftScale>::New();
  shifter->SetShift(-1.0 * range[0]);
  shifter->SetScale(255.0 / (range[1] - range[0]));
  shifter->SetOutputScalarTypeToUnsignedChar();
  shifter->SetInputConnection(v16->GetOutputPort());
  shifter->ReleaseDataFlagOff();
  shifter->Update();

  vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New();
  imageViewer->SetInputConnection(shifter->GetOutputPort());
  imageViewer->SetColorLevel(127);
  imageViewer->SetColorWindow(255);

  vtkSmartPointer<vtkRenderWindowInteractor> iren =
    vtkSmartPointer<vtkRenderWindowInteractor>::New();
  imageViewer->SetupInteractor(iren);
  imageViewer->GetRenderWindow()->SetMultiSamples(0);
  imageViewer->GetRenderWindow()->SetSize(500, 500);

  imageViewer->Render();
  imageViewer->GetRenderer()->ResetCamera();

  imageViewer->Render();

  vtkSmartPointer<vtkSliderRepresentation2D> SliderRepres =
    vtkSmartPointer<vtkSliderRepresentation2D>::New();
  int min = imageViewer->GetSliceMin();
  int max = imageViewer->GetSliceMax();
  SliderRepres->SetMinimumValue(min);
  SliderRepres->SetMaximumValue(max);
  SliderRepres->SetValue(static_cast<int>((min + max) / 2));
  SliderRepres->SetTitleText("Slice");
  SliderRepres->GetPoint1Coordinate()->SetCoordinateSystemToNormalizedDisplay();
  SliderRepres->GetPoint1Coordinate()->SetValue(0.3, 0.05);
  SliderRepres->GetPoint2Coordinate()->SetCoordinateSystemToNormalizedDisplay();
  SliderRepres->GetPoint2Coordinate()->SetValue(0.7, 0.05);
  SliderRepres->SetSliderLength(0.02);
  SliderRepres->SetSliderWidth(0.03);
  SliderRepres->SetEndCapLength(0.01);
  SliderRepres->SetEndCapWidth(0.03);
  SliderRepres->SetTubeWidth(0.005);
  SliderRepres->SetLabelFormat("%3.0lf");
  SliderRepres->SetTitleHeight(0.02);
  SliderRepres->SetLabelHeight(0.02);

  vtkSmartPointer<vtkSliderWidget> SliderWidget = vtkSmartPointer<vtkSliderWidget>::New();
  SliderWidget->SetInteractor(iren);
  SliderWidget->SetRepresentation(SliderRepres);
  SliderWidget->KeyPressActivationOff();
  SliderWidget->SetAnimationModeToAnimate();
  SliderWidget->SetEnabled(true);

  vtkSmartPointer<vtkSliderCallback2> SliderCb = vtkSmartPointer<vtkSliderCallback2>::New();
  SliderCb->SetImageViewer(imageViewer);
  SliderWidget->AddObserver(vtkCommand::InteractionEvent, SliderCb);

  imageViewer->SetSlice(static_cast<int>(SliderRepres->GetValue()));

  vtkSmartPointer<vtkContourWidget> ContourWidget = vtkSmartPointer<vtkContourWidget>::New();

  vtkSmartPointer<vtkOrientedGlyphContourRepresentation> rep =
    vtkSmartPointer<vtkOrientedGlyphContourRepresentation>::New();
  ContourWidget->SetRepresentation(rep);

  vtkSmartPointer<vtkImageActorPointPlacer> imageActorPointPlacer =
    vtkSmartPointer<vtkImageActorPointPlacer>::New();
  imageActorPointPlacer->SetImageActor(imageViewer->GetImageActor());
  rep->SetPointPlacer(imageActorPointPlacer);
  rep->GetProperty()->SetColor(0, 1, 0);

  ContourWidget->SetInteractor(iren);
  ContourWidget->SetFollowCursor(followCursor);
  ContourWidget->SetEnabled(true);
  ContourWidget->ProcessEventsOn();

  imageViewer->GetRenderWindow()->SetSize(500, 500);

  // record events
  vtkSmartPointer<vtkInteractorEventRecorder> recorder =
    vtkSmartPointer<vtkInteractorEventRecorder>::New();
  recorder->SetInteractor(iren);
  // recorder->SetFileName("/tmp/record.log");
  recorder->ReadFromInputStringOn();
  recorder->SetInputString(TestImageActorContourWidgetLog);

  // render the image
  //
  iren->Initialize();
  imageViewer->Render();

  if (!disableReplay)
  {
    recorder->EnabledOn();
    recorder->Play();
  }

  // Remove the observers so we can go interactive. Without this the "-I"
  // testing option fails.
  recorder->Off();

  iren->Start();

  return EXIT_SUCCESS;
}
