1 /**********************************************************
2 * Version $Id$
3 *********************************************************/
4
5 ///////////////////////////////////////////////////////////
6 // //
7 // SAGA //
8 // //
9 // System for Automated Geoscientific Analyses //
10 // //
11 // User Interface //
12 // //
13 // Program: SAGA //
14 // //
15 //-------------------------------------------------------//
16 // //
17 // VIEW_Map_3D.cpp //
18 // //
19 // Copyright (C) 2005 by Olaf Conrad //
20 // //
21 //-------------------------------------------------------//
22 // //
23 // This file is part of 'SAGA - System for Automated //
24 // Geoscientific Analyses'. SAGA is free software; you //
25 // can redistribute it and/or modify it under the terms //
26 // of the GNU General Public License as published by the //
27 // Free Software Foundation, either version 2 of the //
28 // License, or (at your option) any later version. //
29 // //
30 // SAGA is distributed in the hope that it will be //
31 // useful, but WITHOUT ANY WARRANTY; without even the //
32 // implied warranty of MERCHANTABILITY or FITNESS FOR A //
33 // PARTICULAR PURPOSE. See the GNU General Public //
34 // License for more details. //
35 // //
36 // You should have received a copy of the GNU General //
37 // Public License along with this program; if not, see //
38 // <http://www.gnu.org/licenses/>. //
39 // //
40 //-------------------------------------------------------//
41 // //
42 // contact: Olaf Conrad //
43 // Institute of Geography //
44 // University of Goettingen //
45 // Goldschmidtstr. 5 //
46 // 37077 Goettingen //
47 // Germany //
48 // //
49 // e-mail: oconrad@saga-gis.org //
50 // //
51 ///////////////////////////////////////////////////////////
52
53 //---------------------------------------------------------
54
55
56 ///////////////////////////////////////////////////////////
57 // //
58 // //
59 // //
60 ///////////////////////////////////////////////////////////
61
62 //---------------------------------------------------------
63 #include "res_commands.h"
64 #include "res_controls.h"
65 #include "res_dialogs.h"
66 #include "res_images.h"
67
68 #include "helper.h"
69
70 #include "wksp_data_manager.h"
71 #include "wksp_map.h"
72
73 #include "view_map_3d.h"
74 #include "view_map_3d_panel.h"
75
76
77 ///////////////////////////////////////////////////////////
78 // //
79 // //
80 // //
81 ///////////////////////////////////////////////////////////
82
83 //---------------------------------------------------------
84 enum
85 {
86 MAP3D_STATUSBAR_ROTATE_X = 0,
87 MAP3D_STATUSBAR_ROTATE_Y,
88 MAP3D_STATUSBAR_ROTATE_Z,
89 MAP3D_STATUSBAR_SHIFT_X,
90 MAP3D_STATUSBAR_SHIFT_Y,
91 MAP3D_STATUSBAR_SHIFT_Z,
92 MAP3D_STATUSBAR_EXAGGERATION,
93 MAP3D_STATUSBAR_COUNT
94 };
95
96
97 ///////////////////////////////////////////////////////////
98 // //
99 // //
100 // //
101 ///////////////////////////////////////////////////////////
102
103 //---------------------------------------------------------
104 IMPLEMENT_CLASS(CVIEW_Map_3D, CVIEW_Base);
105
106 //---------------------------------------------------------
BEGIN_EVENT_TABLE(CVIEW_Map_3D,CVIEW_Base)107 BEGIN_EVENT_TABLE(CVIEW_Map_3D, CVIEW_Base)
108 EVT_SIZE (CVIEW_Map_3D::On_Size)
109 EVT_MENU_RANGE (ID_CMD_MAP3D_FIRST, ID_CMD_MAP3D_LAST, CVIEW_Map_3D::On_Command)
110 EVT_UPDATE_UI_RANGE (ID_CMD_MAP3D_FIRST, ID_CMD_MAP3D_LAST, CVIEW_Map_3D::On_Command_UI)
111 END_EVENT_TABLE()
112
113
114 ///////////////////////////////////////////////////////////
115 // //
116 // //
117 // //
118 ///////////////////////////////////////////////////////////
119
120 //---------------------------------------------------------
121 CVIEW_Map_3D::CVIEW_Map_3D(CWKSP_Map *pMap)
122 : CVIEW_Base(pMap, ID_VIEW_MAP_3D, _TL("3D View"), ID_IMG_WND_MAP3D, false)
123 {
124 SetTitle(wxString::Format("%s [%s]", pMap->Get_Name().c_str(), _TL("3D View")));
125
126 CreateStatusBar(MAP3D_STATUSBAR_COUNT);
127
128 m_pPanel = new CVIEW_Map_3DPanel(this, pMap);
129 m_pPanel->SetSize(GetClientSize());
130
131 //-----------------------------------------------------
132 Parameters_Create();
133
134 if( DLG_Parameters(&m_Parameters) )
135 {
136 Parameters_Update(false);
137
138 Do_Show();
139
140 m_pPanel->SetFocus();
141 }
142 else
143 {
144 Destroy();
145 }
146 }
147
148 //---------------------------------------------------------
~CVIEW_Map_3D(void)149 CVIEW_Map_3D::~CVIEW_Map_3D(void)
150 {
151 m_pPanel->Destroy();
152 }
153
154
155 ///////////////////////////////////////////////////////////
156 // //
157 // //
158 // //
159 ///////////////////////////////////////////////////////////
160
161 //---------------------------------------------------------
_Create_Menu(void)162 wxMenu * CVIEW_Map_3D::_Create_Menu(void)
163 {
164 wxMenu *pMenu = new wxMenu, *pMenu_Sub;
165
166 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_PARAMETERS);
167
168 pMenu->Append(ID_CMD_MAP3D_FIRST, _TL("Rotation"), pMenu_Sub = new wxMenu());
169 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_ROTATE_X_LESS);
170 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_ROTATE_X_MORE);
171 // pMenu_Sub->AppendSeparator();
172 // CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_ROTATE_Y_LESS);
173 // CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_ROTATE_Y_MORE);
174 pMenu_Sub->AppendSeparator();
175 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_ROTATE_Z_LESS);
176 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_ROTATE_Z_MORE);
177
178 pMenu->Append(ID_CMD_MAP3D_FIRST, _TL("Shift"), pMenu_Sub = new wxMenu());
179 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SHIFT_X_LESS);
180 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SHIFT_X_MORE);
181 pMenu_Sub->AppendSeparator();
182 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SHIFT_Y_LESS);
183 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SHIFT_Y_MORE);
184 pMenu_Sub->AppendSeparator();
185 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SHIFT_Z_LESS);
186 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SHIFT_Z_MORE);
187
188 pMenu->Append(ID_CMD_MAP3D_FIRST, _TL("Sequencer"), pMenu_Sub = new wxMenu());
189 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SEQ_POS_ADD);
190 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SEQ_POS_DEL);
191 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SEQ_POS_DEL_ALL);
192 CMD_Menu_Add_Item(pMenu_Sub, false, ID_CMD_MAP3D_SEQ_POS_EDIT);
193 pMenu_Sub->AppendSeparator();
194 CMD_Menu_Add_Item(pMenu_Sub, true, ID_CMD_MAP3D_SEQ_PLAY);
195 CMD_Menu_Add_Item(pMenu_Sub, true, ID_CMD_MAP3D_SEQ_PLAY_LOOP);
196 CMD_Menu_Add_Item(pMenu_Sub, true, ID_CMD_MAP3D_SEQ_SAVE);
197
198 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_EXAGGERATE_LESS);
199 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_EXAGGERATE_MORE);
200 pMenu->AppendSeparator();
201 CMD_Menu_Add_Item(pMenu , true, ID_CMD_MAP3D_CENTRAL);
202 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_CENTRAL_LESS);
203 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_CENTRAL_MORE);
204 pMenu->AppendSeparator();
205 CMD_Menu_Add_Item(pMenu , true, ID_CMD_MAP3D_STEREO);
206 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_STEREO_LESS);
207 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_STEREO_MORE);
208 pMenu->AppendSeparator();
209 CMD_Menu_Add_Item(pMenu , true, ID_CMD_MAP3D_INTERPOLATED);
210 CMD_Menu_Add_Item(pMenu , false, ID_CMD_MAP3D_SAVE);
211
212 return( pMenu );
213 }
214
215 //---------------------------------------------------------
_Create_ToolBar(void)216 wxToolBarBase * CVIEW_Map_3D::_Create_ToolBar(void)
217 {
218 wxToolBarBase *pToolBar = CMD_ToolBar_Create(ID_TB_VIEW_MAP_3D);
219
220 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_PARAMETERS);
221 CMD_ToolBar_Add_Separator(pToolBar);
222 CMD_ToolBar_Add_Item(pToolBar, true, ID_CMD_MAP3D_STEREO);
223 CMD_ToolBar_Add_Item(pToolBar, true, ID_CMD_MAP3D_INTERPOLATED);
224 CMD_ToolBar_Add_Separator(pToolBar);
225 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_ROTATE_X_LESS);
226 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_ROTATE_X_MORE);
227 // CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_ROTATE_Y_LESS);
228 // CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_ROTATE_Y_MORE);
229 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_ROTATE_Z_LESS);
230 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_ROTATE_Z_MORE);
231 CMD_ToolBar_Add_Separator(pToolBar);
232 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_SHIFT_X_LESS);
233 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_SHIFT_X_MORE);
234 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_SHIFT_Y_LESS);
235 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_SHIFT_Y_MORE);
236 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_SHIFT_Z_LESS);
237 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_SHIFT_Z_MORE);
238 CMD_ToolBar_Add_Separator(pToolBar);
239 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_EXAGGERATE_LESS);
240 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_EXAGGERATE_MORE);
241 CMD_ToolBar_Add_Separator(pToolBar);
242 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_CENTRAL_LESS);
243 CMD_ToolBar_Add_Item(pToolBar, false, ID_CMD_MAP3D_CENTRAL_MORE);
244
245 CMD_ToolBar_Add(pToolBar, _TL("3D-View"));
246
247 return( pToolBar );
248 }
249
250
251 ///////////////////////////////////////////////////////////
252 // //
253 // //
254 // //
255 ///////////////////////////////////////////////////////////
256
257 //---------------------------------------------------------
Do_Update(void)258 void CVIEW_Map_3D::Do_Update(void)
259 {
260 m_pPanel->Update_View(true);
261 }
262
263 //---------------------------------------------------------
Update_StatusBar(void)264 void CVIEW_Map_3D::Update_StatusBar(void)
265 {
266 if( m_pPanel )
267 {
268 SetStatusText(wxString::Format("X %+.1f", m_pPanel->Get_Projector().Get_xRotation() * M_RAD_TO_DEG), MAP3D_STATUSBAR_ROTATE_X);
269 SetStatusText(wxString::Format("Y %+.1f", m_pPanel->Get_Projector().Get_yRotation() * M_RAD_TO_DEG), MAP3D_STATUSBAR_ROTATE_Y);
270 SetStatusText(wxString::Format("Z %+.1f", m_pPanel->Get_Projector().Get_zRotation() * M_RAD_TO_DEG), MAP3D_STATUSBAR_ROTATE_Z);
271
272 SetStatusText(wxString::Format("X %+.1f" , m_pPanel->Get_Projector().Get_xShift()), MAP3D_STATUSBAR_SHIFT_X);
273 SetStatusText(wxString::Format("Y %+.1f" , m_pPanel->Get_Projector().Get_yShift()), MAP3D_STATUSBAR_SHIFT_Y);
274 SetStatusText(wxString::Format("Z %+.1f" , m_pPanel->Get_Projector().Get_zShift()), MAP3D_STATUSBAR_SHIFT_Z);
275
276 SetStatusText(wxString::Format("E %.1f" , m_pPanel->m_zScale), MAP3D_STATUSBAR_EXAGGERATION);
277 }
278 }
279
280
281 ///////////////////////////////////////////////////////////
282 // //
283 // //
284 // //
285 ///////////////////////////////////////////////////////////
286
287 //---------------------------------------------------------
On_Size(wxSizeEvent & event)288 void CVIEW_Map_3D::On_Size(wxSizeEvent &event)
289 {
290 m_pPanel->SetSize(GetClientRect());
291
292 event.Skip();
293 }
294
295
296 ///////////////////////////////////////////////////////////
297 // //
298 // //
299 // //
300 ///////////////////////////////////////////////////////////
301
302 //---------------------------------------------------------
On_Command(wxCommandEvent & event)303 void CVIEW_Map_3D::On_Command(wxCommandEvent &event)
304 {
305 switch( event.GetId() )
306 {
307 default: return;
308
309 //-----------------------------------------------------
310 case ID_CMD_MAP3D_PARAMETERS:
311 {
312 Parameters_Update(true);
313
314 if( DLG_Parameters(&m_Parameters) )
315 {
316 Parameters_Update(false);
317 }
318 }
319 return;
320
321 //-----------------------------------------------------
322 case ID_CMD_MAP3D_SAVE:
323 {
324 int FileType;
325 wxString FileName;
326 CSG_Parameters P(_TL("Image Resolution"));
327
328 P.Add_Int("", "NX", _TL("Width" ), _TL(""), m_pPanel->GetSize().x, 1, true);
329 P.Add_Int("", "NY", _TL("Height"), _TL(""), m_pPanel->GetSize().y, 1, true);
330
331 if( DLG_Image_Save(FileName, FileType) && DLG_Parameters(&P) )
332 {
333 Set_Buisy_Cursor(true);
334
335 if( P("NX")->asInt() == m_pPanel->GetSize().x
336 && P("NY")->asInt() == m_pPanel->GetSize().y )
337 {
338 m_pPanel->Save_asImage(&FileName);
339 }
340 else
341 {
342 wxSize Size(m_pPanel->GetSize());
343
344 Freeze();
345 m_pPanel->SetSize(P("NX")->asInt(), P("NY")->asInt());
346 m_pPanel->Save_asImage(&FileName);
347 m_pPanel->SetSize(Size);
348 Thaw();
349 }
350
351 Set_Buisy_Cursor(false);
352 }
353 }
354 return;
355
356 //-----------------------------------------------------
357 case ID_CMD_MAP3D_SEQ_POS_EDIT:
358 {
359 DLG_Table(_TL("Edit 3D-View Sequencer Positions"), m_pPanel->m_Parameters("PLAY")->asTable());
360 }
361 return;
362
363 //-----------------------------------------------------
364 case ID_CMD_MAP3D_SEQ_POS_ADD : m_pPanel->Play_Pos_Add(); return;
365 case ID_CMD_MAP3D_SEQ_POS_DEL : m_pPanel->Play_Pos_Del(); return;
366 case ID_CMD_MAP3D_SEQ_POS_DEL_ALL: m_pPanel->Play_Pos_Clr(); return;
367 case ID_CMD_MAP3D_SEQ_PLAY : m_pPanel->Play_Once (); return;
368 case ID_CMD_MAP3D_SEQ_PLAY_LOOP : m_pPanel->Play_Loop (); return;
369 case ID_CMD_MAP3D_SEQ_SAVE :
370 {
371 int Type;
372 wxString File;
373
374 if( DLG_Image_Save(File, Type) )
375 {
376 m_pPanel->m_Parameters("PLAY_FILE")->Set_Value(File.wc_str());
377 m_pPanel->Play_Save();
378 }
379 }
380 return;
381
382 //-----------------------------------------------------
383 case ID_CMD_MAP3D_ROTATE_X_LESS : m_pPanel->Get_Projector().Inc_xRotation( 4.0 * M_DEG_TO_RAD); break;
384 case ID_CMD_MAP3D_ROTATE_X_MORE : m_pPanel->Get_Projector().Inc_xRotation(-4.0 * M_DEG_TO_RAD); break;
385 case ID_CMD_MAP3D_ROTATE_Y_LESS : m_pPanel->Get_Projector().Inc_yRotation( 4.0 * M_DEG_TO_RAD); break;
386 case ID_CMD_MAP3D_ROTATE_Y_MORE : m_pPanel->Get_Projector().Inc_yRotation(-4.0 * M_DEG_TO_RAD); break;
387 case ID_CMD_MAP3D_ROTATE_Z_LESS : m_pPanel->Get_Projector().Inc_zRotation( 4.0 * M_DEG_TO_RAD); break;
388 case ID_CMD_MAP3D_ROTATE_Z_MORE : m_pPanel->Get_Projector().Inc_zRotation(-4.0 * M_DEG_TO_RAD); break;
389
390 case ID_CMD_MAP3D_SHIFT_X_LESS : m_pPanel->Get_Projector().Inc_xShift(-10.0); break;
391 case ID_CMD_MAP3D_SHIFT_X_MORE : m_pPanel->Get_Projector().Inc_xShift( 10.0); break;
392 case ID_CMD_MAP3D_SHIFT_Y_LESS : m_pPanel->Get_Projector().Inc_yShift( 10.0); break;
393 case ID_CMD_MAP3D_SHIFT_Y_MORE : m_pPanel->Get_Projector().Inc_yShift(-10.0); break;
394 case ID_CMD_MAP3D_SHIFT_Z_LESS : m_pPanel->Get_Projector().Inc_zShift(-10.0); break;
395 case ID_CMD_MAP3D_SHIFT_Z_MORE : m_pPanel->Get_Projector().Inc_zShift( 10.0); break;
396
397 case ID_CMD_MAP3D_EXAGGERATE_LESS: m_pPanel->m_zScale -= 0.5; break;
398 case ID_CMD_MAP3D_EXAGGERATE_MORE: m_pPanel->m_zScale += 0.5; break;
399
400 case ID_CMD_MAP3D_CENTRAL : m_pPanel->Get_Projector().do_Central(m_pPanel->Get_Projector().is_Central() == false); break;
401 case ID_CMD_MAP3D_CENTRAL_LESS : m_pPanel->Get_Projector().Inc_Central_Distance( 50); break;
402 case ID_CMD_MAP3D_CENTRAL_MORE : m_pPanel->Get_Projector().Inc_Central_Distance(-50); break;
403
404 // case ID_CMD_MAP3D_DRAW_BOX : m_pPanel->m_Parameters("DRAW_BOX" )->Set_Value(m_pPanel->m_Parameters("DRAW_BOX" )->asBool() == true ); break;
405 case ID_CMD_MAP3D_STEREO : m_pPanel->m_Parameters("STEREO" )->Set_Value(m_pPanel->m_Parameters("STEREO" )->asBool() == false ); break;
406 case ID_CMD_MAP3D_STEREO_LESS : m_pPanel->m_Parameters("STEREO_DIST" )->Set_Value(m_pPanel->m_Parameters("STEREO_DIST" )->asDouble() - 2 ); break;
407 case ID_CMD_MAP3D_STEREO_MORE : m_pPanel->m_Parameters("STEREO_DIST" )->Set_Value(m_pPanel->m_Parameters("STEREO_DIST" )->asDouble() + 2 ); break;
408 case ID_CMD_MAP3D_INTERPOLATED : m_pPanel->m_Parameters("DRAPE_MODE" )->Set_Value(m_pPanel->m_Parameters("DRAPE_MODE" )->asInt() == 0 ? 1 : 0 ); break;
409
410 // case ID_CMD_MAP3D_SRC_RES_LESS : m_pPanel->; break;
411 // case ID_CMD_MAP3D_SRC_RES_MORE : m_pPanel->; break;
412 }
413
414 Parameters_Update(true);
415 m_pPanel->Update_View();
416 }
417
418 //---------------------------------------------------------
On_Command_UI(wxUpdateUIEvent & event)419 void CVIEW_Map_3D::On_Command_UI(wxUpdateUIEvent &event)
420 {
421 switch( event.GetId() )
422 {
423 case ID_CMD_MAP3D_CENTRAL:
424 event.Check(m_pPanel->Get_Projector().is_Central());
425 break;
426
427 case ID_CMD_MAP3D_CENTRAL_LESS:
428 case ID_CMD_MAP3D_CENTRAL_MORE:
429 event.Enable(m_pPanel->Get_Projector().is_Central());
430 break;
431
432 case ID_CMD_MAP3D_INTERPOLATED:
433 event.Check(m_pPanel->m_Parameters("DRAPE_MODE")->asInt() != 0);
434 break;
435
436 case ID_CMD_MAP3D_STEREO:
437 event.Check(m_pPanel->m_Parameters("STEREO")->asBool());
438 break;
439
440 case ID_CMD_MAP3D_SEQ_PLAY:
441 event.Check(m_pPanel->Play_Get_State() == SG_3DVIEW_PLAY_RUN_ONCE);
442 break;
443
444 case ID_CMD_MAP3D_SEQ_PLAY_LOOP:
445 event.Check(m_pPanel->Play_Get_State() == SG_3DVIEW_PLAY_RUN_LOOP);
446 break;
447
448 case ID_CMD_MAP3D_SEQ_SAVE:
449 event.Check(m_pPanel->Play_Get_State() == SG_3DVIEW_PLAY_RUN_SAVE);
450 break;
451 }
452 }
453
454
455 ///////////////////////////////////////////////////////////
456 // //
457 // //
458 // //
459 ///////////////////////////////////////////////////////////
460
461
462 ///////////////////////////////////////////////////////////
463 // //
464 ///////////////////////////////////////////////////////////
465
466 //---------------------------------------------------------
Parameters_Update(bool bFromPanel)467 void CVIEW_Map_3D::Parameters_Update(bool bFromPanel)
468 {
469 if( bFromPanel )
470 {
471 m_Parameters("ROTATION_X" )->Set_Value(m_pPanel->Get_Projector().Get_xRotation() * M_RAD_TO_DEG);
472 m_Parameters("ROTATION_Y" )->Set_Value(m_pPanel->Get_Projector().Get_yRotation() * M_RAD_TO_DEG);
473 m_Parameters("ROTATION_Z" )->Set_Value(m_pPanel->Get_Projector().Get_zRotation() * M_RAD_TO_DEG);
474
475 m_Parameters("SHIFT_X" )->Set_Value(m_pPanel->Get_Projector().Get_xShift());
476 m_Parameters("SHIFT_Y" )->Set_Value(m_pPanel->Get_Projector().Get_yShift());
477 m_Parameters("SHIFT_Z" )->Set_Value(m_pPanel->Get_Projector().Get_zShift());
478
479 m_Parameters("CENTRAL" )->Set_Value(m_pPanel->Get_Projector().is_Central() ? 1 : 0);
480 m_Parameters("CENTRAL_DIST")->Set_Value(m_pPanel->Get_Projector().Get_Central_Distance());
481
482 m_Parameters("BGCOLOR" )->Set_Value(m_pPanel->m_Parameters("BGCOLOR" ));
483 m_Parameters("STEREO" )->Set_Value(m_pPanel->m_Parameters("STEREO" ));
484 m_Parameters("STEREO_DIST" )->Set_Value(m_pPanel->m_Parameters("STEREO_DIST"));
485 m_Parameters("DRAW_BOX" )->Set_Value(m_pPanel->m_Parameters("DRAW_BOX" ));
486
487 m_Parameters("Z_SCALE" )->Set_Value(m_pPanel->m_zScale);
488 m_Parameters("DEM_RES" )->Set_Value(m_pPanel->Get_DEM_Res());
489 m_Parameters("MAP_RES" )->Set_Value(m_pPanel->Get_Map_Res());
490 }
491
492 //-----------------------------------------------------
493 else
494 {
495 m_pPanel->Get_Projector().Set_Rotation(
496 m_Parameters("ROTATION_X")->asDouble() * M_DEG_TO_RAD,
497 m_Parameters("ROTATION_Y")->asDouble() * M_DEG_TO_RAD,
498 m_Parameters("ROTATION_Z")->asDouble() * M_DEG_TO_RAD
499 );
500
501 m_pPanel->Get_Projector().Set_Shift(
502 m_Parameters("SHIFT_X" )->asDouble(),
503 m_Parameters("SHIFT_Y" )->asDouble(),
504 m_Parameters("SHIFT_Z" )->asDouble()
505 );
506
507 m_pPanel->Get_Projector().do_Central (m_Parameters("CENTRAL" )->asBool ());
508 m_pPanel->Get_Projector().Set_Central_Distance(m_Parameters("CENTRAL_DIST")->asDouble());
509
510 m_pPanel->m_Parameters("BGCOLOR" )->Set_Value(m_Parameters("BGCOLOR" ));
511 m_pPanel->m_Parameters("STEREO" )->Set_Value(m_Parameters("STEREO" ));
512 m_pPanel->m_Parameters("STEREO_DIST")->Set_Value(m_Parameters("STEREO_DIST"));
513 m_pPanel->m_Parameters("DRAPE_MODE" )->Set_Value(m_Parameters("DRAPE_MODE" ));
514 m_pPanel->m_Parameters("DRAW_BOX" )->Set_Value(m_Parameters("DRAW_BOX" ));
515
516 m_pPanel->m_zScale = m_Parameters("Z_SCALE")->asDouble();
517
518 //-------------------------------------------------
519 CSG_Grid *pDEM = m_Parameters("DEM")->asGrid();
520
521 if( !m_pPanel->Set_Options(
522 SG_Get_Data_Manager().Exists(pDEM) ? pDEM : NULL,
523 m_Parameters("DEM_RES")->asInt(),
524 m_Parameters("MAP_RES")->asInt()) )
525 {
526 m_pPanel->Update_View();
527 }
528 }
529
530 Update_StatusBar();
531 }
532
533 //---------------------------------------------------------
Parameters_Create(void)534 void CVIEW_Map_3D::Parameters_Create(void)
535 {
536 m_Parameters.Create(_TL("3D-View"));
537
538 m_Parameters.Add_Grid ("" , "DEM" , _TL("Elevation" ), _TL(""), PARAMETER_INPUT);
539 m_Parameters.Add_Int ("DEM", "DEM_RES" , _TL("Resolution" ), _TL(""), 100, 2, true);
540 m_Parameters.Add_Double("DEM", "Z_SCALE" , _TL("Exaggeration"), _TL(""), 1.0);
541 m_Parameters.Add_Bool ("DEM", "DRAW_BOX", _TL("Bounding Box"), _TL(""), false);
542
543 m_Parameters.Add_Node ("" , "MAP" , _TL("Map" ), _TL(""));
544 m_Parameters.Add_Int ("MAP", "MAP_RES" , _TL("Resolution" ), _TL(""), 1000, 2, true);
545 m_Parameters.Add_Choice("MAP", "DRAPE_MODE", _TL("Map Draping Interpolation"), _TL(""),
546 CSG_String::Format("%s|%s|%s|%s|%s",
547 _TL("None"),
548 _TL("Bilinear"),
549 _TL("Inverse Distance"),
550 _TL("Bicubic Spline"),
551 _TL("B-Spline")
552 ), 0
553 );
554
555 m_Parameters.Add_Node ("" , "ROTATION" , _TL("Rotation" ), _TL(""));
556 m_Parameters.Add_Double("ROTATION", "ROTATION_X", _TL("X" ), _TL(""), 55.0, -360.0, true, 360.0, true);
557 m_Parameters.Add_Double("ROTATION", "ROTATION_Y", _TL("Y" ), _TL(""), 0.0, -360.0, true, 360.0, true);
558 m_Parameters.Add_Double("ROTATION", "ROTATION_Z", _TL("Z" ), _TL(""), -45.0, -360.0, true, 360.0, true);
559
560 m_Parameters.Add_Node ("" , "SHIFT" , _TL("Shift" ), _TL(""));
561 m_Parameters.Add_Double("SHIFT" , "SHIFT_X" , _TL("Left/Right"), _TL(""), 0.0);
562 m_Parameters.Add_Double("SHIFT" , "SHIFT_Y" , _TL("Up/Down" ), _TL(""), 0.0);
563 m_Parameters.Add_Double("SHIFT" , "SHIFT_Z" , _TL("In/Out" ), _TL(""), 1500.0);
564
565 m_Parameters.Add_Choice("" , "CENTRAL" , _TL("Projection" ), _TL(""), CSG_String::Format("%s|%s|", _TL("parallel"), _TL("central")), 1);
566 m_Parameters.Add_Double("CENTRAL" , "CENTRAL_DIST", _TL("Perspectivic Distance"), _TL(""), 1500, 1, true);
567
568 m_Parameters.Add_Bool ("" , "STEREO" , _TL("Anaglyph" ), _TL(""), false);
569 m_Parameters.Add_Double("STEREO" , "STEREO_DIST", _TL("Eye Distance [Degree]"), _TL(""), 2.0, 0, true, 180, true);
570
571 m_Parameters.Add_Color("", "BGCOLOR", _TL("Background Color"), _TL(""), SG_GET_RGB(255, 255, 255));
572 }
573
574
575 ///////////////////////////////////////////////////////////
576 // //
577 // //
578 // //
579 ///////////////////////////////////////////////////////////
580
581 //---------------------------------------------------------
582