<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Cory,<div class=""><br class=""></div><div class="">If possible I’d like to splat them into an existing image. When repeating the process many times for a large image, surely it becomes rather slow to create a new image each time and set all the other values to zero?</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">Richard</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 06 Jan 2016, at 15:19, Cory Quammen <<a href="mailto:cory.quammen@kitware.com" class="">cory.quammen@kitware.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Richard,</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Not sure what you mean. You are splatting a vtkImageData at the 5</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">points you defined into a new image. Do you mean you want to splat</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">them into an existing image?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Thanks,</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Cory</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">On Wed, Jan 6, 2016 at 6:19 AM, Richard Brown</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><</span><a href="mailto:richard.j.brown@live.co.uk" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">richard.j.brown@live.co.uk</a><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">> wrote:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Cory,<br class=""><br class="">Thanks for the help. Still trying to wrap my head around it though - is there any way to splat a pre-existing vtkImageData?<br class=""><br class="">Regards,<br class="">Richard<br class=""><br class=""><blockquote type="cite" class="">On 05 Jan 2016, at 21:59, Cory Quammen <<a href="mailto:cory.quammen@kitware.com" class="">cory.quammen@kitware.com</a>> wrote:<br class=""><br class="">Hi Richard,<br class=""><br class="">I think you had two problems in your code:<br class=""><br class="">1). The vtkFastSplatter was auto-determining the origin and pixel<br class="">spacing of the output image. When you moved the one point around, the<br class="">origin was adjusted so that it was always at the location of the one<br class="">point. This appeared in the renderer as though nothing was happening.<br class="">You can fix this by adding a call to<br class=""><br class="">splatter->SetModelBounds(...)<br class=""><br class="">to some fixed bounding box.<br class=""><br class="">2). Moving points 2-5 by 1 unit in space won't really be visible in an<br class="">image where the voxel size is also 1 and the splat is relatively<br class="">large. You can fix this by moving the points a further distance.<br class=""><br class="">Here is a modified version of your example where the points show up<br class="">where expected:<br class=""><br class="">/*<br class="">* Copyright 2004 Sandia Corporation.<br class="">* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive<br class="">* license for use of this work by or on behalf of the<br class="">* U.S. Government. Redistribution and use in source and binary forms, with<br class="">* or without modification, are permitted provided that this Notice and any<br class="">* statement of authorship are reproduced on all copies.<br class="">*/<br class=""><br class="">// Simple test of vtkFastSplatter<br class="">#include "vtkImageData.h"<br class="">#include "vtkImageShiftScale.h"<br class="">#include "vtkFastSplatter.h"<br class="">#include "vtkImageViewer2.h"<br class="">#include "vtkPoints.h"<br class="">#include "vtkPolyData.h"<br class="">#include "vtkRenderer.h"<br class="">#include "vtkRenderWindow.h"<br class="">#include "vtkRenderWindowInteractor.h"<br class=""><br class="">#include "vtkSmartPointer.h"<br class="">#define VTK_CREATE(type, name) \<br class=""><br class="">vtkSmartPointer<type> name = vtkSmartPointer<type>::New()<br class=""><br class="">#include <math.h><br class=""><br class="">const int SPLAT_IMAGE_SIZE = 100;<br class=""><br class="">int main(int, char *[])<br class="">{<br class="">// For the purposes of this example we'll build the splat image by<br class="">// hand.<br class=""><br class="">VTK_CREATE(vtkImageData, SplatImage);<br class="">SplatImage->SetDimensions(SPLAT_IMAGE_SIZE, SPLAT_IMAGE_SIZE, 1);<br class="">SplatImage->AllocateScalars(VTK_FLOAT, 1);<br class=""><br class="">for (int i = 0; i < SPLAT_IMAGE_SIZE; ++i)<br class=""> {<br class=""> for (int j = 0; j < SPLAT_IMAGE_SIZE; ++j)<br class=""> {<br class=""> double xCoord = 1 - fabs( (i - SPLAT_IMAGE_SIZE/2)<br class=""> / (SPLAT_IMAGE_SIZE/2.0) );<br class=""> double yCoord = 1 - fabs( (j - SPLAT_IMAGE_SIZE/2)<br class=""> / (SPLAT_IMAGE_SIZE/2.0) );<br class=""><br class=""> SplatImage->SetScalarComponentFromDouble(i, j, 0, 0,<br class=""> xCoord * yCoord );<br class=""> }<br class=""> }<br class=""><br class="">VTK_CREATE(vtkPolyData, SplatPoints);<br class="">VTK_CREATE(vtkPoints, Points);<br class=""><br class="">Points->SetNumberOfPoints( 5 );<br class="">double point[3];<br class=""><br class="">// Move the points further<br class="">point[0] = 100;<br class="">point[1] = 100;<br class="">point[2] = 0;<br class="">Points->SetPoint( 0, point );<br class=""><br class="">point[0] = 100;<br class="">point[1] = 0;<br class="">point[2] = 0;<br class="">Points->SetPoint( 1, point );<br class=""><br class="">point[0] = 0;<br class="">point[1] = 100;<br class="">point[2] = 0;<br class="">Points->SetPoint( 2, point );<br class=""><br class="">point[0] = 0;<br class="">point[1] = 0;<br class="">point[2] = 0;<br class="">Points->SetPoint( 3, point );<br class=""><br class="">point[0] = 199;<br class="">point[1] = 199;<br class="">point[2] = 0;<br class="">Points->SetPoint( 4, point );<br class=""><br class="">SplatPoints->SetPoints(Points);<br class=""><br class="">VTK_CREATE(vtkFastSplatter, splatter);<br class="">splatter->SetInputData( SplatPoints );<br class="">splatter->SetOutputDimensions( 2*SPLAT_IMAGE_SIZE,<br class=""> 2*SPLAT_IMAGE_SIZE,<br class=""> 1 );<br class=""><br class="">// Fix the model bounds rather than relying on vtkFastSplatter to<br class="">calculate them<br class="">splatter->SetModelBounds(0, 199, 0, 199, 0, 0);<br class="">splatter->SetInputData(1, SplatImage );<br class=""><br class="">// The image viewers and writers are only happy with unsigned char<br class="">// images. This will convert the floats into that format.<br class="">VTK_CREATE(vtkImageShiftScale, resultScale);<br class="">resultScale->SetOutputScalarTypeToUnsignedChar();<br class="">resultScale->SetShift(0);<br class="">resultScale->SetScale(255);<br class="">resultScale->SetInputConnection( splatter->GetOutputPort() );<br class=""><br class="">splatter->Update();<br class="">resultScale->Update();<br class=""><br class="">splatter->GetOutput()->Print(cout);<br class=""><br class="">// Set up a viewer for the image. vtkImageViewer and<br class="">// vtkImageViewer2 are convenient wrappers around vtkActor2D,<br class="">// vtkImageMapper, vtkRenderer, and vtkRenderWindow. All you need<br class="">// to supply is the interactor and hooray, Bob's your uncle.<br class="">VTK_CREATE(vtkImageViewer2, ImageViewer);<br class="">ImageViewer->SetInputConnection( resultScale->GetOutputPort() );<br class="">ImageViewer->SetColorLevel(127);<br class="">ImageViewer->SetColorWindow(255);<br class=""><br class="">VTK_CREATE(vtkRenderWindowInteractor, iren);<br class="">ImageViewer->SetupInteractor(iren);<br class=""><br class="">ImageViewer->Render();<br class="">ImageViewer->GetRenderer()->ResetCamera();<br class=""><br class="">iren->Initialize();<br class="">ImageViewer->Render();<br class="">iren->Start();<br class=""><br class="">return EXIT_SUCCESS;<br class="">}<br class=""><br class="">HTH,<br class="">Cory<br class=""><br class=""><br class="">On Thu, Dec 17, 2015 at 6:58 AM, mbcx9rb9 <<a href="mailto:richard.j.brown@live.co.uk" class="">richard.j.brown@live.co.uk</a>> wrote:<br class=""><blockquote type="cite" class="">Hi all,<br class=""><br class="">I was hoping to use vtkFastSplatter so I took a look at the test. However,<br class="">it doesn't work how I expected (or how it should, I think).<br class=""><br class="">The example places 5 splatters at various coordinates. But I can't control<br class="">the position of those splats. If I comment out all but the first splat and<br class="">then change the coordinates, it doesn't move!<br class=""><br class="">Below is the relevant code, can someone confirm that if they change point[0]<br class="">and point[1], nothing happens? Then, try adding in a second splat (remember<br class="">to change Points->SetNumberOfPoints( 1 ) to 2), changing its coordinates and<br class="">observe that weird things start happening...<br class=""><br class=""><br class="">/*<br class="">* Copyright 2004 Sandia Corporation.<br class="">* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive<br class="">* license for use of this work by or on behalf of the<br class="">* U.S. Government. Redistribution and use in source and binary forms, with<br class="">* or without modification, are permitted provided that this Notice and any<br class="">* statement of authorship are reproduced on all copies.<br class="">*/<br class=""><br class="">// Simple test of vtkFastSplatter<br class=""><br class="">#include "vtkImageData.h"<br class="">#include "vtkImageShiftScale.h"<br class="">#include "vtkFastSplatter.h"<br class="">#include "vtkImageViewer2.h"<br class="">#include "vtkPoints.h"<br class="">#include "vtkPolyData.h"<br class="">#include "vtkRenderer.h"<br class="">#include "vtkRenderWindow.h"<br class="">#include "vtkRenderWindowInteractor.h"<br class=""><br class="">#include "vtkSmartPointer.h"<br class="">#define VTK_CREATE(type, name) \<br class="">vtkSmartPointer<type> name = vtkSmartPointer<type>::New()<br class=""><br class="">#include <math.h><br class=""><br class="">const int SPLAT_IMAGE_SIZE = 100;<br class=""><br class="">int main(int, char *[])<br class="">{<br class="">// For the purposes of this example we'll build the splat image by<br class="">// hand.<br class=""><br class="">VTK_CREATE(vtkImageData, SplatImage);<br class="">SplatImage->SetDimensions(SPLAT_IMAGE_SIZE, SPLAT_IMAGE_SIZE, 1);<br class="">SplatImage->AllocateScalars(VTK_FLOAT, 1);<br class=""><br class="">for (int i = 0; i < SPLAT_IMAGE_SIZE; ++i)<br class=""> {<br class=""> for (int j = 0; j < SPLAT_IMAGE_SIZE; ++j)<br class=""> {<br class=""> double xCoord = 1 - fabs( (i - SPLAT_IMAGE_SIZE/2)<br class=""> / (SPLAT_IMAGE_SIZE/2.0) );<br class=""> double yCoord = 1 - fabs( (j - SPLAT_IMAGE_SIZE/2)<br class=""> / (SPLAT_IMAGE_SIZE/2.0) );<br class=""><br class=""> SplatImage->SetScalarComponentFromDouble(i, j, 0, 0,<br class=""> xCoord * yCoord );<br class=""> }<br class=""> }<br class=""><br class="">VTK_CREATE(vtkPolyData, SplatPoints);<br class="">VTK_CREATE(vtkPoints, Points);<br class=""><br class="">Points->SetNumberOfPoints( 1 );<br class="">double point[3];<br class=""><br class="">point[0] = 0;<br class="">point[1] = 0;<br class="">point[2] = 0;<br class="">Points->SetPoint( 0, point );<br class="">/*<br class="">point[0] = 1;<br class="">point[1] = 0;<br class="">point[2] = 0;<br class="">Points->SetPoint( 1, point );<br class=""><br class="">point[0] = -1;<br class="">point[1] = 1;<br class="">point[2] = 0;<br class="">Points->SetPoint( 2, point );<br class=""><br class="">point[0] = 1;<br class="">point[1] = -1;<br class="">point[2] = 0;<br class="">Points->SetPoint( 3, point );<br class=""><br class="">point[0] = -1;<br class="">point[1] = -1;<br class="">point[2] = 0;<br class="">Points->SetPoint( 4, point );<br class="">*/<br class="">SplatPoints->SetPoints(Points);<br class=""><br class="">VTK_CREATE(vtkFastSplatter, splatter);<br class="">splatter->SetInputData( SplatPoints );<br class="">splatter->SetOutputDimensions( 2*SPLAT_IMAGE_SIZE,<br class=""> 2*SPLAT_IMAGE_SIZE,<br class=""> 1 );<br class="">splatter->SetInputData(1, SplatImage );<br class=""><br class="">// The image viewers and writers are only happy with unsigned char<br class="">// images. This will convert the floats into that format.<br class="">VTK_CREATE(vtkImageShiftScale, resultScale);<br class="">resultScale->SetOutputScalarTypeToUnsignedChar();<br class="">resultScale->SetShift(0);<br class="">resultScale->SetScale(255);<br class="">resultScale->SetInputConnection( splatter->GetOutputPort() );<br class=""><br class="">splatter->Update();<br class="">resultScale->Update();<br class=""><br class="">// Set up a viewer for the image. vtkImageViewer and<br class="">// vtkImageViewer2 are convenient wrappers around vtkActor2D,<br class="">// vtkImageMapper, vtkRenderer, and vtkRenderWindow. All you need<br class="">// to supply is the interactor and hooray, Bob's your uncle.<br class="">VTK_CREATE(vtkImageViewer2, ImageViewer);<br class="">ImageViewer->SetInputConnection( resultScale->GetOutputPort() );<br class="">ImageViewer->SetColorLevel(127);<br class="">ImageViewer->SetColorWindow(255);<br class=""><br class="">VTK_CREATE(vtkRenderWindowInteractor, iren);<br class="">ImageViewer->SetupInteractor(iren);<br class=""><br class="">ImageViewer->Render();<br class="">ImageViewer->GetRenderer()->ResetCamera();<br class=""><br class="">iren->Initialize();<br class="">ImageViewer->Render();<br class="">iren->Start();<br class=""><br class="">return EXIT_SUCCESS;<br class="">}<br class=""><br class=""><br class=""><br class=""><br class="">--<br class="">View this message in context: <a href="http://vtk.1045678.n5.nabble.com/vtkFastSplatter-broken-tp5735566.html" class="">http://vtk.1045678.n5.nabble.com/vtkFastSplatter-broken-tp5735566.html</a><br class="">Sent from the VTK - Users mailing list archive at <a href="http://Nabble.com" class="">Nabble.com</a>.<br class="">_______________________________________________<br class="">Powered by <a href="http://www.kitware.com" class="">www.kitware.com</a><br class=""><br class="">Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" class="">http://www.kitware.com/opensource/opensource.html</a><br class=""><br class="">Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" class="">http://www.vtk.org/Wiki/VTK_FAQ</a><br class=""><br class="">Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" class="">http://markmail.org/search/?q=vtkusers</a><br class=""><br class="">Follow this link to subscribe/unsubscribe:<br class=""><a href="http://public.kitware.com/mailman/listinfo/vtkusers" class="">http://public.kitware.com/mailman/listinfo/vtkusers</a><br class=""></blockquote><br class=""><br class=""><br class="">--<br class="">Cory Quammen<br class="">R&D Engineer<br class="">Kitware, Inc.<br class=""></blockquote><br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">--<span class="Apple-converted-space"> </span></span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Cory Quammen</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">R&D Engineer</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Kitware, Inc.</span></div></blockquote></div><br class=""></div></body></html>