1 #include "FitCircleFrame.hh"
8 FitCircleFrame(
const wxString& title,
12 : wxDialog((wxFrame *)NULL, -1, title, pos, size,
13 wxRESIZE_BORDER |wxCAPTION | wxSYSTEM_MENU){
20 wxMenu *menuFile =
new wxMenu;
21 menuFile->Append( id_quit, wxT(
"E&xit") );
22 wxMenuBar *menuBar =
new wxMenuBar;
23 menuBar->Append(menuFile, wxT(
"&File"));
39 wxBoxSizer *vbox =
new wxBoxSizer(wxVERTICAL);
40 vbox->Add(
IC_,1, wxGROW |wxALL , 5);
44 int screenWidth, screenHeight;
45 screenDC.GetSize(&screenWidth, &screenHeight);
46 if ((
int)img.
GetWidth() > screenWidth - 100 ||
47 (int)img.
GetHeight() > screenHeight - 100)
49 vbox->SetItemMinSize(
IC_, 800, 600);
52 wxBoxSizer *hbox =
new wxBoxSizer(wxHORIZONTAL);
54 button =
new wxButton(
this,id_left,wxT(
"Left"));
56 button =
new wxButton(
this,id_up,wxT(
"Up"));
58 button =
new wxButton(
this,id_down,wxT(
"Down"));
60 button =
new wxButton(
this,id_right,wxT(
"Right"));
64 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
65 wxStaticText* itemStaticText =
66 new wxStaticText(
this, wxID_STATIC, _(
"Max Camera Angle [degree]"),
67 wxDefaultPosition, wxDefaultSize, 0 );
68 spinCtrlAngle =
new wxSpinCtrl(
this, id_maxangle,wxT(
"40"), wxDefaultPosition,wxSize(50,30),
69 wxSP_ARROW_KEYS,40,360,180,wxT(
"Angle"));
72 hbox->Add(itemStaticText);
75 wxT(
"100"), wxDefaultPosition,wxSize(50,30),
76 wxSP_ARROW_KEYS,10,600,100,wxT(
"Zoom"));
79 wxStaticText *wxText =
new wxStaticText(
this,wxID_STATIC,wxT(
" Zoom (%)"));
82 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
92 hbox =
new wxBoxSizer(wxHORIZONTAL);
93 button =
new wxButton(
this,id_shrink,wxT(
"shrink"));
95 button =
new wxButton(
this,id_expand,wxT(
"Expand"));
97 button =
new wxButton(
this,id_dump,wxT(
"Dump"));
100 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
102 wxSpinCtrl *threshold =
new wxSpinCtrl(
this,id_threshold);
103 threshold->SetRange(0,255);
104 threshold->SetValue(0);
105 hbox->Add(threshold);
107 wxStaticText* itemStaticText2 =
108 new wxStaticText(
this, wxID_STATIC, _(
"Image Threshold"),
109 wxDefaultPosition, wxDefaultSize, 0 );
110 hbox->Add(itemStaticText2);
114 wxSize sliderS(200,35);
116 hbox =
new wxBoxSizer(wxHORIZONTAL);
117 wxStaticText* itemStaticText3 =
118 new wxStaticText(
this, wxID_STATIC, _(
"Circle Size"),
119 wxDefaultPosition,sliderS , 0 );
120 hbox->Add(itemStaticText3);
121 wxStaticText* itemStaticText4 =
122 new wxStaticText(
this, wxID_STATIC, _(
"Circle x Position"),
123 wxDefaultPosition, sliderS, 0 );
124 hbox->Add(itemStaticText4);
125 wxStaticText* itemStaticText5 =
126 new wxStaticText(
this, wxID_STATIC, _(
"Circle y Position"),
127 wxDefaultPosition, sliderS, 0 );
129 hbox->Add(itemStaticText5);
134 hbox =
new wxBoxSizer(wxHORIZONTAL);
137 new wxSlider(
this,id_sizeslider,100,0,5000,
138 wxDefaultPosition,sliderS,
139 wxSL_HORIZONTAL | wxSL_LABELS| wxSL_BOTTOM);
143 new wxSlider(
this,id_xslider,800,0,10000,
144 wxDefaultPosition,sliderS,
145 wxSL_HORIZONTAL | wxSL_LABELS| wxSL_BOTTOM);
151 new wxSlider(
this,id_yslider,600,0,8000,
152 wxDefaultPosition,sliderS,
153 wxSL_HORIZONTAL | wxSL_LABELS| wxSL_BOTTOM);
157 hbox->Add(100, 50, 0,
158 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5);
159 button =
new wxButton(
this,id_quit,wxT(
"OK"));
160 hbox->Add(button,wxALIGN_RIGHT,10);
164 vbox->SetSizeHints(
this);
165 SetMinSize(wxSize(800,600));
183 SetXYRA(
float newx,
float newy,
float newr,
float angle)
197 OnQuit(wxCommandEvent& WXUNUSED(event))
206 unsigned int cutwidth,cutheight;
208 cutwidth = cutheight = 640;
210 cutwidth = cutheight = 384;
212 cout <<
"CutOut of Size: "<<cutwidth<<
" x "<<cutheight<<endl;
213 cout <<
" at: "<<
x-(cutwidth/2)<<
" , "<<
y-(cutwidth/2)<<endl;
215 text.Printf(wxT(
"Center: %3.0f, %3.0f\nRadius: %3.0f\nCutOut size: %d, %d\nOffset: %d, %d"),
216 x,
y,
r, (
int)cutwidth, (
int)cutheight, (
int)(
x-(cutwidth/2)), (
int)(
y-(cutwidth/2)));
217 wxMessageDialog dump(NULL, text);
246 switch(event.GetId()) {
247 case id_left:
x -=
inkr;
break;
248 case id_right:
x +=
inkr;
break;
249 case id_up:
y -=
inkr;
break;
250 case id_down:
y +=
inkr;
break;
251 case id_shrink:
r -=
inkr;
break;
252 case id_expand:
r +=
inkr;
break;
269 switch(event.GetId()) {
286 cout <<
"Key: "<<
event.GetKeyCode()<<endl;
287 switch(event.GetKeyCode()) {
288 case WXK_LEFT:
x -=
inkr;
break;
289 case WXK_RIGHT:
x +=
inkr;
break;
290 case WXK_UP:
y -=
inkr;
break;
291 case WXK_DOWN:
y +=
inkr;
break;
292 case '-':
r -=
inkr;
break;
293 case '+':
r +=
inkr;
break;
303 Threshold_=(
unsigned char)event.GetPosition();
311 maxangle=(float)event.GetPosition();
333 IC_->GetViewStart(&sx, &sy);
int AboveThresholdToValue(StorageType Threshold, StorageType Value)
sets alls pixels with values above Threshold to Value
void OnThreshold(wxSpinEvent &event)
void SetXYRA(float newx, float newy, float newr, float angle)
void SetLowPassType(int lpt)
Sets the lowpass filter by a lowpass filter type.
display image in wx application, provides zoom and investigation functionality
wxSpinCtrl * spinCtrlAngle
BIAS::Rescale< unsigned char, unsigned char > rescaler_
void ListenToChange(float *x, float *y, float *r, float *maxangle)
int Downsample(const Image< InputStorageType > &src, Image< OutputStorageType > &dst)
generic downsample function.
unsigned int GetWidth() const
void OnRescaleImage(wxSpinEvent &event)
void OnSlider(wxScrollEvent &event)
void OnDump(wxCommandEvent &)
static int CircleCenter(Image< StorageType > &im, unsigned int CenterX, unsigned int CenterY, unsigned int Radius, const StorageType Value[]=NULL)
draws a circular line, either using Value or a good contrast value
Image< unsigned char > WorkImg_
unsigned char thecolor[3]
Image< unsigned char > DrawImg_
unsigned int GetHeight() const
void OnKey(wxKeyEvent &event)
int Upsample(const Image< InputStorageType > &src, Image< OutputStorageType > &dst)
generic upsample function
void OnQuit(wxCommandEvent &WXUNUSED(event))
void OnModifyCircle(wxCommandEvent &event)
wxSpinCtrl * spinCtrlRescale
virtual void Show(BIAS::Image< unsigned char > &im, std::string name="")
void OnMaxAngle(wxSpinEvent &event)
double fRescaleImageFactor_
static int ToRGB(const Image< StorageType > &source, Image< StorageType > &dest)
Create a RGB converted copy of source image in this.
Image< unsigned char > OrigImg_