00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #ifdef __GNUG__
00014 #pragma implementation "CRVtkCaptureControl.h"
00015 #endif
00016
00017 #include <wxGuiTest/VtkGuiTesting/CRVtkCaptureControl.h>
00018
00019 #include <vtkCamera.h>
00020
00021 #include <wx/xrc/xmlres.h>
00022
00023 #include <wxGuiTest/WxGuiTestHelper.h>
00024 #include <wxGuiTest/VtkGuiTesting/VtkWxGuiTestHelper.h>
00025 #include <wxGuiTest/VtkGuiTesting/VtkInteractorEventRecorder.h>
00026 #include <wxGuiTest/CRCppEmitter.h>
00027
00028 BEGIN_EVENT_TABLE(wxTst::CRVtkCaptureControl, CRCaptureControl)
00029 EVT_BUTTON( XRCID("ResetRecordingButton"), CRVtkCaptureControl::OnResetWxVtkRecording )
00030 EVT_BUTTON( XRCID("StartRecordingButton"), CRVtkCaptureControl::OnStartWxVtkRecording )
00031 EVT_BUTTON( XRCID("AddRecordingButton"), CRVtkCaptureControl::OnAddWxVtkRecording )
00032 END_EVENT_TABLE()
00033
00034 using namespace wxTst;
00035
00036
00037 CRVtkCaptureControl::CRVtkCaptureControl (wxDialog *dialog) :
00038 CRCaptureControl (dialog)
00039 {
00040
00041 }
00042
00043
00044 CRVtkCaptureControl::~CRVtkCaptureControl ()
00045 {
00046
00047 }
00048
00049
00050 void CRVtkCaptureControl::OnResetWxVtkRecording (wxCommandEvent& WXUNUSED(event))
00051 {
00052 VtkWxGuiTestHelper::RecorderMap::iterator it;
00053 VtkWxGuiTestHelper::RecorderMap &recorders =
00054 VtkWxGuiTestHelper::GetInstance ()->GetWxVtkRecorders ();
00055
00056 for (it = recorders.begin (); it != recorders.end (); it++) {
00057
00058 (*it).second->ResetRecording ();
00059 }
00060 }
00061
00062
00063 void CRVtkCaptureControl::OnStartWxVtkRecording (wxCommandEvent& WXUNUSED(event))
00064 {
00065 VtkWxGuiTestHelper::RecorderMap::iterator it;
00066 VtkWxGuiTestHelper::RecorderMap &recorders =
00067 VtkWxGuiTestHelper::GetInstance ()->GetWxVtkRecorders ();
00068
00069 for (it = recorders.begin (); it != recorders.end (); it++) {
00070
00071 (*it).second->On ();
00072 (*it).second->Record ();
00073 }
00074 }
00075
00076
00077 void CRVtkCaptureControl::OnAddWxVtkRecording (wxCommandEvent& WXUNUSED(event))
00078 {
00079 VtkWxGuiTestHelper::RecorderMap &recorders =
00080 VtkWxGuiTestHelper::GetInstance ()->GetWxVtkRecorders ();
00081
00082 CRCppEmitter *emitter = CRCppEmitter::GetInstance ();
00083
00084 VtkWxGuiTestHelper::RecorderMap::iterator it;
00085 for (it = recorders.begin (); it != recorders.end (); it++) {
00086
00087 WxVtkInteractorEventRecorder *wxVtkRec = (*it).second;
00088 wxVtkRec->Stop ();
00089 wxVtkRec->Off ();
00090
00091 if (!wxVtkRec->IsEmptyRecording ()) {
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 wxString str;
00140
00141 wxString recorderVarName = emitter->MakeVarName ((*it).first, _T("Recorder"));
00142
00143 str << _T("wxTst::WxVtkInteractorEventRecorder *") << recorderVarName <<
00144 _T(" = wxTst::VtkWxGuiTestHelper::GetInstance ()->GetWxVtkRecorder (_T(\"") <<
00145 (*it).first << _T("\"));");
00146 emitter->AddCode (str);
00147
00148
00149 wxString wdwStackVarName = emitter->MakeVarName (_T("wdwStack"));
00150
00151 str.Clear ();
00152 str << _T("std::stack< wxWindow *, std::list< wxWindow * > > ") <<
00153 wdwStackVarName << _T(";");
00154 emitter->AddCode (str);
00155
00156 wxString wdwVarName = emitter->MakeVarName (_T("wdw"));
00157
00158 str.Clear ();
00159 str << _T("wxWindow *") << wdwVarName << _T(" = NULL;");
00160 emitter->AddCode (str);
00161
00162 const WxVtkInteractorEventRecorder::WxVtkMap & wxVtkMap =
00163 wxVtkRec->GetWxVtkMap ();
00164
00165 WxVtkInteractorEventRecorder::WxVtkMap::const_iterator it2;
00166 for (it2 = wxVtkMap.begin (); it2 != wxVtkMap.end (); it2++) {
00167
00168 wxASSERT ((*it2).second->camera != NULL);
00169
00170
00171 wxString rwiVarName = emitter->MakeVarName ((*it2).first, _T("WxVtkRwi"));
00172
00173 str.Clear ();
00174 str << _T("wxVTKRenderWindowInteractor * ") << rwiVarName <<
00175 _T(" = ") << recorderVarName << _T("->GetInteractor (_T(\"") <<
00176 (*it2).first << _T("\"));");
00177 emitter->AddCode (str);
00178
00179 wxString rwiWdwVarName = emitter->MakeVarName ((*it2).first, _T("Wdw"));
00180
00181 str.Clear ();
00182 str << _T("wxWindow *") << rwiWdwVarName << _T(" = ") << rwiVarName << _T(";");
00183 emitter->AddCode (str);
00184
00185 str.Clear ();
00186 str << wdwVarName << _T(" = ") << rwiWdwVarName << _T(";");
00187 emitter->AddCode (str);
00188
00189 str.Clear ();
00190 str << wdwStackVarName << _T(".push (") << wdwVarName << _T(");");
00191 emitter->AddCode (str);
00192
00193 str.Clear ();
00194 str << _T("while (") << wdwVarName << _T("->GetParent () != NULL) {");
00195 emitter->AddCode (str);
00196
00197 emitter->AddCode (_T(""));
00198
00199 str.Clear ();
00200 str << emitter->GetTab () << wdwVarName << _T(" = ") <<
00201 wdwVarName << _T("->GetParent ();");
00202 emitter->AddCode (str);
00203
00204 str.Clear ();
00205 str << emitter->GetTab () << wdwStackVarName << _T(".push (") <<
00206 wdwVarName << _T(");");
00207 emitter->AddCode (str);
00208
00209 emitter->AddCode (_T("}"));
00210
00211 str.Clear ();
00212 str << wdwVarName << _T("->Move (") <<
00213 (*it2).second->position.x << _T(", ") <<
00214 (*it2).second->position.y << _T(");");
00215 emitter->AddCode (str);
00216
00217 WxVtkInteractorEventRecorder::SizeList::const_iterator sizeIt =
00218 (*it2).second->sizeList.begin ();
00219 while (sizeIt != (*it2).second->sizeList.end ()) {
00220
00221 str.Clear ();
00222 str << wdwStackVarName << _T(".top ()->SetSize (") <<
00223 (*sizeIt).GetWidth () << _T(", ") <<
00224 (*sizeIt).GetHeight () << _T(");");
00225 emitter->AddCode (str);
00226
00227 str.Clear ();
00228 str << wdwStackVarName << _T(".pop ();");
00229 emitter->AddCode (str);
00230
00231 sizeIt++;
00232 }
00233
00234 str.Clear ();
00235 str << _T("wxASSERT (") << wdwStackVarName << _T(".empty ());");
00236 emitter->AddCode (str);
00237
00238
00239 wxString renderersVarName = emitter->MakeVarName (_T("renderers"));
00240
00241 str.Clear ();
00242 str << _T("vtkRendererCollection *") << renderersVarName <<
00243 _T(" = ") << rwiVarName << _T("->GetRenderWindow ()->GetRenderers ();");
00244 emitter->AddCode (str);
00245
00246 str.Clear ();
00247 str << _T("wxASSERT_MSG (") << renderersVarName << _T("->GetNumberOfItems () > 0, _T(\"At least one renderer must exist in each render window; and only the first one is fully supported.\"));");
00248 emitter->AddCode (str);
00249
00250 str.Clear ();
00251 str << _T("if (") << renderersVarName << _T("->GetNumberOfItems () != 1) {");
00252 emitter->AddCode (str);
00253
00254 str.Clear ();
00255 str << emitter->GetTab () << _T("::wxLogTrace (_T(\"VtkWxwxGuiTest\"), _T(\"Currently only one renderer per render window interactor is supported\"));");
00256 emitter->AddCode (str);
00257
00258 str.Clear ();
00259 str << _T("}");
00260 emitter->AddCode (str);
00261
00262 wxString cameraVarName = emitter->MakeVarName (_T("camera"));
00263
00264 str.Clear ();
00265 str << _T("vtkCamera *") << cameraVarName << _T(" = ") <<
00266 renderersVarName << _T("->GetFirstRenderer ()->GetActiveCamera ();");
00267 emitter->AddCode (str);
00268
00269 str.Clear ();
00270 str << cameraVarName << _T("->SetParallelScale (") <<
00271 (*it2).second->camera->GetParallelScale () << _T(");");
00272 emitter->AddCode (str);
00273
00274 str.Clear ();
00275 str << cameraVarName << _T("->SetViewAngle (") <<
00276 (*it2).second->camera->GetViewAngle () << _T(");");
00277 emitter->AddCode (str);
00278
00279 double array[3];
00280
00281 (*it2).second->camera->GetClippingRange (array);
00282 str.Clear ();
00283 str << cameraVarName << _T("->SetClippingRange (") << array[0] <<
00284 _T(", ") << array[1] << _T(");");
00285 emitter->AddCode (str);
00286
00287 (*it2).second->camera->GetFocalPoint (array);
00288 str.Clear ();
00289 str << cameraVarName << _T("->SetFocalPoint (") << array[0] <<
00290 _T(", ") << array[1] << _T(", ") << array[2] << _T(");");
00291 emitter->AddCode (str);
00292
00293 (*it2).second->camera->GetPosition (array);
00294 str.Clear ();
00295 str << cameraVarName << _T("->SetPosition (") << array[0] <<
00296 _T(", ") << array[1] << _T(", ") << array[2] << _T(");");
00297 emitter->AddCode (str);
00298
00299 (*it2).second->camera->GetViewUp (array);
00300 str.Clear ();
00301 str << cameraVarName << _T("->SetViewUp (") << array[0] <<
00302 _T(", ") << array[1] << _T(", ") << array[2] << _T(");");
00303 emitter->AddCode (str);
00304 }
00305
00306 str.Clear ();
00307 str << recorderVarName << _T("->ReadFromInputStringOn ();");
00308 emitter->AddCode (str);
00309
00310 str.Clear ();
00311 str << recorderVarName << _T("->SetInputString (");
00312 emitter->AddCode (str);
00313
00314 emitter->AddVerbatimStringWithLineBreaks (
00315 wxVtkRec->GetRecordingAsEmitString (emitter->GetTab ()).RemoveLast ());
00316
00317 str.Clear ();
00318 str << _T(");");
00319 emitter->AddCode (str);
00320
00321 str.Clear ();
00322 str << recorderVarName << _T("->Play ();");
00323 emitter->AddCode (str);
00324 }
00325 }
00326 }
00327
00328