16 #ifndef _A_SUBPIXEL_INTERACTOR_H_
17 #define _A_SUBPIXEL_INTERACTOR_H_
21 #include "vtkInteractorStyleTrackballCamera.h"
22 #include "vtkRenderWindow.h"
23 #include "vtkRenderWindowInteractor.h"
24 #include "vtkRendererCollection.h"
25 #include "vtkRenderer.h"
26 #include "vtkPolyDataMapper2D.h"
27 #include "vtkObjectFactory.h"
28 #include "vtkCellPicker.h"
29 #include "vtkPoints.h"
30 #include "vtkImageReader2.h"
31 #include "vtkImageClip.h"
32 #include "vtkImageData.h"
33 #include "vtkPointData.h"
34 #include "vtkTransform.h"
35 #include "vtkImageShiftScale.h"
53 void set(vtkPoints * points, vtkImageClip * clip,
int maxu,
int maxv)
55 points_ = points; clip_ = clip;
56 maxu_ = maxu; maxv_ = maxv;
59 void setscale(vtkImageShiftScale * scale,
double scale0) {scale_ = scale; scale0_ = scale0;}
61 void SetImage(vtkImageReader2 * image) {image_ = image;}
62 virtual void OnLeftButtonDown()
override;
63 virtual void OnLeftButtonUp()
override;
64 virtual void OnRightButtonDown()
override;
65 virtual void OnRightButtonUp()
override;
66 virtual void OnChar()
override;
86 void clipmove(
int u,
int v);
92 vtkObject* ret = vtkObjectFactory::CreateInstance(
"a_subpixel_interactor");
101 vtkRenderWindow * renWin = this->GetInteractor()->GetRenderWindow();
102 vtkRendererCollection * rens = renWin->GetRenderers();
103 rens->InitTraversal();
104 ren_ = rens->GetNextItem();
119 vtkRenderWindowInteractor *rwi = this->Interactor;
120 int ctrl = rwi->GetControlKey();
121 int shift = rwi->GetShiftKey();
122 if ((ctrl == 0 )&&(shift == 0))
127 else if ((ctrl == 1)&&(shift == 1))
133 vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
140 vtkRenderWindowInteractor *rwi = this->Interactor;
142 rwi->GetEventPosition(X,Y);
145 float Z =
ren_->GetZ(X,Y);
148 ren_->SetDisplayPoint(X,Y,Z);
149 ren_->DisplayToWorld();
150 double * dp =
ren_->GetWorldPoint();
151 for (
int k = 0; k < 3; k++) dp[k] /= dp[3];
153 this->
clipmove(
int(dp[0]),
int(dp[1]));
159 vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
164 vtkRenderWindowInteractor *rwi = this->Interactor;
165 int ctrl = rwi->GetControlKey();
166 int shift = rwi->GetShiftKey();
167 if ((ctrl == 0)&&(shift == 0))
169 if ((ctrl > 1)&&(shift < 1))
172 vtkInteractorStyleTrackballCamera::OnRightButtonDown();
179 vtkRenderWindowInteractor *rwi = this->Interactor;
181 rwi->GetEventPosition(X,Y);
183 float Z =
ren_->GetZ(X,Y);
186 ren_->SetDisplayPoint(X,Y,Z);
187 ren_->DisplayToWorld();
188 double * dp =
ren_->GetWorldPoint();
189 for (
int k = 0; k < 3; k++) dp[k] /= dp[3];
196 vtkRenderWindowInteractor *rwi = this->Interactor;
198 rwi->GetEventPosition(X,Y);
201 float Z =
ren_->GetZ(X,Y);
204 ren_->SetDisplayPoint(X,Y,Z);
205 ren_->DisplayToWorld();
206 double * dp =
ren_->GetWorldPoint();
207 for (
int k = 0; k < 3; k++) dp[k] /= dp[3];
208 int u = int(dp[0]+.5);
209 int v = int(dp[1]+.5);
232 vtkDataArray * scal =
image_->GetOutput()->GetPointData()->GetScalars();
234 image_->GetOutput()->GetExtent(extent);
235 int maxx = extent[1]-extent[0]+1;
239 for (
int y =
fymin_; y <= fymax; y++)
241 for (
int x =
fxmin_; x <= fxmax; x++)
244 scal->GetTuple(x+y*maxx,val);
245 double val2 = 255.-(val[0]+val[0]+val[0])/3.;
259 vtkInteractorStyleTrackballCamera::OnRightButtonUp();
264 vtkRenderWindowInteractor *rwi = this->GetInteractor();
265 char c = rwi->GetKeyCode();
266 if ((c==
'e')||(c==
'E'))
268 else if ((c==
'x')||(c==
'X'))
274 double scale =
scale_->GetScale();
277 scale_->SetScale(scale*1.05);
279 ren_->GetRenderWindow()->Render();
284 double scale =
scale_->GetScale();
287 scale_->SetScale(scale/1.05);
289 ren_->GetRenderWindow()->Render();
294 double shift =
scale_->GetShift();
299 ren_->GetRenderWindow()->Render();
304 double shift =
scale_->GetShift();
309 ren_->GetRenderWindow()->Render();
314 else if ((c!=
'o')&&(c!=
'O')&&(c!=
'r')&&(c!=
'R')&&(c!=
'f')&&(c!=
'F'))
315 vtkInteractorStyleTrackballCamera::OnChar();
322 ren_->GetRenderWindow()->Render();
328 clip_->GetOutputWholeExtent(ext);
330 int dimu = (int)((ext[1]-ext[0]+1.)/2.);
331 int dimv = (int)((ext[3]-ext[2]+1.)/2.);
332 if (u<dimu) u = dimu;
333 if (
v<dimv)
v = dimv;
336 int du = (int)(u-(ext[0]+ext[1]+1.)/2);
337 int dv = (int)(
v-(ext[2]+ext[3]+1.)/2);
342 clip_->SetOutputWholeExtent(ext);
343 float x[4][3]={{
static_cast<float>(ext[0]),
static_cast<float>(ext[2]),0.f},
344 {
static_cast<float>(ext[1]),
static_cast<float>(ext[2]),0.f},
345 {
static_cast<float>(ext[1]),
static_cast<float>(ext[3]),0.f},
346 {
static_cast<float>(ext[0]),
static_cast<float>(ext[3]),0.f}};
347 for (
int i=0; i<4; i++)
points_->SetPoint(i,x[i]);
349 ren_->GetRenderWindow()->Render();
vtkImageShiftScale * scale_
virtual void OnLeftButtonUp() override
void clipmove(int u, int v)
static a_subpixel_interactor * New()
virtual void OnLeftButtonDown() override
vtkTypeMacro(a_subpixel_interactor, vtkInteractorStyleTrackballCamera)
virtual void OnRightButtonUp() override
void setpos(pixelpos_points *pos)
virtual void OnChar() override
virtual void OnRightButtonDown() override
void setscale(vtkImageShiftScale *scale, double scale0)
void SetImage(vtkImageReader2 *image)
void set(vtkPoints *points, vtkImageClip *clip, int maxu, int maxv)
virtual ~a_subpixel_interactor()
void erase_selected_point()
void add_or_moa_point(double u, double v)
int select_point(double u, double v)
void export_selected_point()
double v(const uint32_t step, const uint32_t n)