"Fossies" - the Fresh Open Source Software Archive 
Member "saga-9.0.2/saga-gis/src/tools/visualization/vis_3d_viewer/3d_viewer_tin.cpp" (25 May 2023, 22942 Bytes) of package /linux/misc/saga-9.0.2.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1
2 ///////////////////////////////////////////////////////////
3 // //
4 // SAGA //
5 // //
6 // System for Automated Geoscientific Analyses //
7 // //
8 // Tool Library //
9 // 3d_viewer //
10 // //
11 //-------------------------------------------------------//
12 // //
13 // 3d_viewer_tin.cpp //
14 // //
15 // Copyright (C) 2014 by //
16 // Olaf Conrad //
17 // //
18 //-------------------------------------------------------//
19 // //
20 // This file is part of 'SAGA - System for Automated //
21 // Geoscientific Analyses'. SAGA is free software; you //
22 // can redistribute it and/or modify it under the terms //
23 // of the GNU General Public License as published by the //
24 // Free Software Foundation, either version 2 of the //
25 // License, or (at your option) any later version. //
26 // //
27 // SAGA is distributed in the hope that it will be //
28 // useful, but WITHOUT ANY WARRANTY; without even the //
29 // implied warranty of MERCHANTABILITY or FITNESS FOR A //
30 // PARTICULAR PURPOSE. See the GNU General Public //
31 // License for more details. //
32 // //
33 // You should have received a copy of the GNU General //
34 // Public License along with this program; if not, see //
35 // <http://www.gnu.org/licenses/>. //
36 // //
37 //-------------------------------------------------------//
38 // //
39 // e-mail: oconrad@saga-gis.org //
40 // //
41 // contact: Olaf Conrad //
42 // Institute of Geography //
43 // University of Hamburg //
44 // Germany //
45 // //
46 ///////////////////////////////////////////////////////////
47
48 //---------------------------------------------------------
49 #include <wx/menu.h>
50
51 #include "3d_viewer_tin.h"
52
53
54 ///////////////////////////////////////////////////////////
55 // //
56 // //
57 // //
58 ///////////////////////////////////////////////////////////
59
60 //---------------------------------------------------------
61 class C3D_Viewer_TIN_Panel : public CSG_3DView_Panel
62 {
63 public:
64 C3D_Viewer_TIN_Panel(wxWindow *pParent, CSG_TIN *pTIN, int Field_Z, int Field_Color, CSG_Grid *pDrape);
65
66 static CSG_String Get_Usage (void);
67
68
69 protected:
70
71 virtual int On_Parameters_Enable (CSG_Parameters *pParameters, CSG_Parameter *pParameter);
72
73 virtual void Update_Statistics (void);
74
75 virtual void On_Key_Down (wxKeyEvent &event);
76
77 virtual bool On_Draw (void);
78
79 virtual int Get_Color (double Value);
80
81
82 private:
83
84 bool m_Color_bGrad;
85
86 double m_Color_Min, m_Color_Scale;
87
88 CSG_Colors m_Colors;
89
90 CSG_TIN *m_pTIN;
91
92
93 //-----------------------------------------------------
94 DECLARE_EVENT_TABLE()
95
96 };
97
98
99 ///////////////////////////////////////////////////////////
100 // //
101 ///////////////////////////////////////////////////////////
102
103 //---------------------------------------------------------
104 BEGIN_EVENT_TABLE(C3D_Viewer_TIN_Panel, CSG_3DView_Panel)
105 EVT_KEY_DOWN (C3D_Viewer_TIN_Panel::On_Key_Down)
106 END_EVENT_TABLE()
107
108
109 ///////////////////////////////////////////////////////////
110 // //
111 ///////////////////////////////////////////////////////////
112
113 //---------------------------------------------------------
114 C3D_Viewer_TIN_Panel::C3D_Viewer_TIN_Panel(wxWindow *pParent, CSG_TIN *pTIN, int zField, int cField, CSG_Grid *pDrape)
115 : CSG_3DView_Panel(pParent, pDrape)
116 {
117 m_pTIN = pTIN;
118
119 //-----------------------------------------------------
120 CSG_String Attributes;
121
122 for(int i=0; i<pTIN->Get_Field_Count(); i++)
123 {
124 Attributes += pTIN->Get_Field_Name(i); Attributes += "|";
125 }
126
127 m_Parameters.Add_Choice("GENERAL" , "Z_ATTR" , _TL("Z Attribute" ), _TL(""), Attributes, zField);
128
129 m_Parameters.Add_Bool ("GENERAL" , "DRAW_FACES" , _TL("Draw Faces" ), _TL(""), true);
130
131 m_Parameters.Add_Choice("DRAW_FACES" , "COLORS_ATTR" , _TL("Colour Attribute"), _TL(""), Attributes, cField);
132 m_Parameters.Add_Colors("COLORS_ATTR" , "COLORS" , _TL("Colours" ), _TL(""));
133 m_Parameters.Add_Bool ("COLORS_ATTR" , "COLORS_GRAD" , _TL("Graduated" ), _TL(""), true);
134 m_Parameters.Add_Range ("COLORS_ATTR" , "COLORS_RANGE" , _TL("Value Range" ), _TL(""));
135
136 m_Parameters.Add_Choice("DRAW_FACES" , "SHADING" , _TL("Light Source" ), _TL(""), CSG_String::Format("%s|%s", _TL("no"), _TL("yes")), 1);
137 m_Parameters.Add_Double("SHADING" , "SHADE_DEC" , _TL("Height" ), _TL(""), 45., -180., true, 180., true);
138 m_Parameters.Add_Double("SHADING" , "SHADE_AZI" , _TL("Direction" ), _TL(""), 90., -180., true, 180., true);
139
140 m_Parameters.Add_Bool ("GENERAL" , "DRAW_EDGES" , _TL("Draw Wire" ), _TL(""), false);
141 m_Parameters.Add_Bool ("DRAW_EDGES" , "EDGE_COLOR_UNI", _TL("Single Color" ), _TL(""), false);
142 m_Parameters.Add_Color ("EDGE_COLOR_UNI", "EDGE_COLOR" , _TL("Color" ), _TL(""), SG_GET_RGB(150, 150, 150));
143
144 m_Parameters.Add_Bool ("GENERAL" , "DRAW_NODES" , _TL("Draw Nodes" ), _TL(""), false);
145 m_Parameters.Add_Color ("DRAW_NODES" , "NODE_COLOR" , _TL("Color" ), _TL(""), SG_COLOR_BLACK);
146 m_Parameters.Add_Int ("DRAW_NODES" , "NODE_SIZE" , _TL("Size" ), _TL(""), 2, 1, true);
147 m_Parameters.Add_Double("DRAW_NODES" , "NODE_SCALE" , _TL("Size Scaling" ), _TL(""), 250., 1., true);
148
149 //-----------------------------------------------------
150 Update_Statistics();
151 }
152
153
154 ///////////////////////////////////////////////////////////
155 // //
156 ///////////////////////////////////////////////////////////
157
158 //---------------------------------------------------------
159 int C3D_Viewer_TIN_Panel::On_Parameters_Enable(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
160 {
161 if( pParameter->Cmp_Identifier("DRAW_FACES") )
162 {
163 CSG_Parameter *pDrape = pParameters->Get_Parameter("MAP_DRAPE");
164
165 pParameters->Set_Enabled("COLORS_ATTR" , pParameter->asBool() && (!pDrape || !pDrape->asBool()));
166 pParameters->Set_Enabled("SHADING" , pParameter->asBool());
167 }
168
169 if( pParameter->Cmp_Identifier("MAP_DRAPE") )
170 {
171 CSG_Parameter *pFaces = pParameters->Get_Parameter("DRAW_FACES");
172
173 pParameters->Set_Enabled("COLORS_ATTR" , pParameter->asBool() == false && pFaces->asBool() == true);
174 }
175
176 if( pParameter->Cmp_Identifier("SHADING") )
177 {
178 pParameter->Set_Children_Enabled(pParameter->asInt() > 0);
179 }
180
181 if( pParameter->Cmp_Identifier("DRAW_EDGES") )
182 {
183 pParameters->Set_Enabled("EDGE_COLOR_UNI", pParameter->asBool());
184 }
185
186 if( pParameter->Cmp_Identifier("EDGE_COLOR_UNI") )
187 {
188 pParameters->Set_Enabled("EDGE_COLOR" , pParameter->asBool());
189 }
190
191 if( pParameter->Cmp_Identifier("DRAW_NODES") )
192 {
193 pParameters->Set_Enabled("NODE_COLOR" , pParameter->asBool());
194 pParameters->Set_Enabled("NODE_SIZE" , pParameter->asBool());
195 pParameters->Set_Enabled("NODE_SCALE" , pParameter->asBool());
196 }
197
198 return( CSG_3DView_Panel::On_Parameters_Enable(pParameters, pParameter) );
199 }
200
201
202 ///////////////////////////////////////////////////////////
203 // //
204 ///////////////////////////////////////////////////////////
205
206 //---------------------------------------------------------
207 void C3D_Viewer_TIN_Panel::Update_Statistics(void)
208 {
209 int Field = m_Parameters("COLORS_ATTR")->asInt();
210
211 m_Parameters("COLORS_RANGE")->asRange()->Set_Range(
212 m_pTIN->Get_Mean(Field) - 1.5 * m_pTIN->Get_StdDev(Field),
213 m_pTIN->Get_Mean(Field) + 1.5 * m_pTIN->Get_StdDev(Field)
214 );
215
216 m_Data_Min.x = m_pTIN->Get_Extent().Get_XMin();
217 m_Data_Max.x = m_pTIN->Get_Extent().Get_XMax();
218
219 m_Data_Min.y = m_pTIN->Get_Extent().Get_YMin();
220 m_Data_Max.y = m_pTIN->Get_Extent().Get_YMax();
221
222 m_Data_Min.z = m_pTIN->Get_Minimum(m_Parameters("Z_ATTR")->asInt());
223 m_Data_Max.z = m_pTIN->Get_Maximum(m_Parameters("Z_ATTR")->asInt());
224
225 Update_View();
226 }
227
228
229 ///////////////////////////////////////////////////////////
230 // //
231 ///////////////////////////////////////////////////////////
232
233 //---------------------------------------------------------
234 CSG_String C3D_Viewer_TIN_Panel::Get_Usage(void)
235 {
236 CSG_Table Shortcuts(CSG_3DView_Panel::Get_Shortcuts());
237
238 #define ADD_SHORTCUT(KEY, CMD) { CSG_Table_Record &r = *Shortcuts.Add_Record(); r.Set_Value(0, KEY); r.Set_Value(1, CMD); }
239
240 ADD_SHORTCUT("F3", _TL("Decrease Size" ));
241 ADD_SHORTCUT("F4", _TL("Increase Size" ));
242
243 ADD_SHORTCUT("F5", _TL("Decrease Size Scaling"));
244 ADD_SHORTCUT("F6", _TL("Increase Size Scaling"));
245
246 return( CSG_3DView_Panel::Get_Usage(Shortcuts) );
247 }
248
249 //---------------------------------------------------------
250 void C3D_Viewer_TIN_Panel::On_Key_Down(wxKeyEvent &event)
251 {
252 switch( event.GetKeyCode() )
253 {
254 default: CSG_3DView_Panel::On_Key_Down(event); return;
255
256 case WXK_F3: Parameter_Value_Add("NODE_SIZE" , -1.); break;
257 case WXK_F4: Parameter_Value_Add("NODE_SIZE" , 1.); break;
258
259 case WXK_F5: Parameter_Value_Add("NODE_SCALE", -10.); break;
260 case WXK_F6: Parameter_Value_Add("NODE_SCALE", 10.); break;
261 }
262 }
263
264
265 ///////////////////////////////////////////////////////////
266 // //
267 ///////////////////////////////////////////////////////////
268
269 //---------------------------------------------------------
270 int C3D_Viewer_TIN_Panel::Get_Color(double Value)
271 {
272 if( m_Color_Scale <= 0. )
273 {
274 return( (int)Value );
275 }
276
277 double c = m_Color_Scale * (Value - m_Color_Min);
278
279 return( m_Color_bGrad ? m_Colors.Get_Interpolated(c) : m_Colors[(int)c] );
280 }
281
282
283 ///////////////////////////////////////////////////////////
284 // //
285 ///////////////////////////////////////////////////////////
286
287 //---------------------------------------------------------
288 bool C3D_Viewer_TIN_Panel::On_Draw(void)
289 {
290 int zField = m_Parameters("Z_ATTR" )->asInt();
291 int cField = m_Parameters("COLORS_ATTR")->asInt();
292
293 if( m_Parameters("COLORS_RANGE")->asRange()->Get_Min()
294 >= m_Parameters("COLORS_RANGE")->asRange()->Get_Max() )
295 {
296 m_Parameters("COLORS_RANGE")->asRange()->Set_Range(
297 m_pTIN->Get_Mean(cField) - 1.5 * m_pTIN->Get_StdDev(cField),
298 m_pTIN->Get_Mean(cField) + 1.5 * m_pTIN->Get_StdDev(cField)
299 );
300 }
301
302 m_Colors = *m_Parameters("COLORS")->asColors();
303 m_Color_bGrad = m_Parameters("COLORS_GRAD")->asBool();
304 m_Color_Min = m_Parameters("COLORS_RANGE")->asRange()->Get_Min();
305 m_Color_Scale = m_Colors.Get_Count() / (m_Parameters("COLORS_RANGE")->asRange()->Get_Max() - m_Color_Min);
306
307 //-----------------------------------------------------
308 if( m_Parameters("DRAW_FACES")->asBool() ) // Face
309 {
310 bool bDrape = m_Parameters("MAP_DRAPE") && m_Parameters("MAP_DRAPE")->asBool();
311
312 CSG_Vector LightSource;
313
314 if( m_Parameters("SHADING")->asInt() && LightSource.Create(3) )
315 {
316 double decline = m_Parameters("SHADE_DEC")->asDouble() * -M_DEG_TO_RAD;
317 double azimuth = m_Parameters("SHADE_AZI")->asDouble() * M_DEG_TO_RAD;
318
319 LightSource[0] = sin(decline) * cos(azimuth);
320 LightSource[1] = sin(decline) * sin(azimuth);
321 LightSource[2] = cos(decline);
322 }
323
324 #pragma omp parallel for
325 for(sLong iTriangle=0; iTriangle<m_pTIN->Get_Triangle_Count(); iTriangle++)
326 {
327 CSG_TIN_Triangle *pTriangle = m_pTIN->Get_Triangle(iTriangle); TSG_Triangle_Node p[3];
328
329 for(int i=0; i<3; i++)
330 {
331 CSG_TIN_Node *pNode = pTriangle->Get_Node(i);
332
333 p[i].x = pNode->Get_Point().x;
334 p[i].y = pNode->Get_Point().y;
335 p[i].z = pNode->asDouble(zField);
336
337 if( bDrape )
338 {
339 p[i].c = pNode->Get_Point().x;
340 p[i].d = pNode->Get_Point().y;
341 }
342 else
343 {
344 p[i].c = pNode->asDouble(cField);
345 }
346
347 m_Projector.Get_Projection(p[i].x, p[i].y, p[i].z);
348 }
349
350 //---------------------------------------------
351 if( LightSource.Get_Size() )
352 Draw_Triangle(p, false, LightSource);
353 else
354 Draw_Triangle(p, false);
355 }
356 }
357
358 //-----------------------------------------------------
359 if( m_Parameters("DRAW_EDGES")->asBool() ) // Edges
360 {
361 bool bColor = m_Parameters("EDGE_COLOR_UNI")->asBool();
362 int Color = m_Parameters("EDGE_COLOR" )->asColor();
363
364 #pragma omp parallel for
365 for(sLong iEdge=0; iEdge<m_pTIN->Get_Edge_Count(); iEdge++)
366 {
367 CSG_TIN_Edge *pEdge = m_pTIN->Get_Edge(iEdge); TSG_Triangle_Node p[2];
368
369 for(int i=0; i<2; i++)
370 {
371 CSG_TIN_Node *pNode = pEdge->Get_Node(i);
372
373 p[i].x = pNode->Get_Point().x;
374 p[i].y = pNode->Get_Point().y;
375 p[i].z = pNode->asDouble(zField);
376 p[i].c = Get_Color(pNode->asDouble(cField));
377
378 m_Projector.Get_Projection(p[i].x, p[i].y, p[i].z);
379 }
380
381 //---------------------------------------------
382 if( bColor )
383 {
384 Draw_Line(p[0].x, p[0].y, p[0].z, p[1].x, p[1].y, p[1].z, Color);
385 }
386 else
387 {
388 Draw_Line(p[0].x, p[0].y, p[0].z, p[1].x, p[1].y, p[1].z, p[0].c, p[1].c);
389 }
390 }
391 }
392
393 //-------------------------------------------------
394 if( m_Parameters("DRAW_NODES")->asBool() ) // Nodes
395 {
396 int Color = m_Parameters("NODE_COLOR")->asColor ();
397 int Size = m_Parameters("NODE_SIZE" )->asInt ();
398
399 #pragma omp parallel for
400 for(sLong iNode=0; iNode<m_pTIN->Get_Node_Count(); iNode++)
401 {
402 CSG_TIN_Node *pNode = m_pTIN->Get_Node(iNode); TSG_Point_3D p;
403
404 p.x = pNode->Get_Point().x;
405 p.y = pNode->Get_Point().y;
406 p.z = pNode->asDouble(zField);
407
408 m_Projector.Get_Projection(p.x, p.y, p.z);
409
410 Draw_Point(p.x, p.y, p.z, Color, Size);
411 }
412 }
413
414 //-----------------------------------------------------
415 return( true );
416 }
417
418
419 ///////////////////////////////////////////////////////////
420 // //
421 // //
422 // //
423 ///////////////////////////////////////////////////////////
424
425 //---------------------------------------------------------
426 class C3D_Viewer_TIN_Dialog : public CSG_3DView_Dialog
427 {
428 public:
429 C3D_Viewer_TIN_Dialog(CSG_TIN *pTIN, int Field_Z, int Field_Color, CSG_Grid *pDrape);
430
431 virtual void Update_Controls (void);
432
433
434 protected:
435
436 // wxCheckBox *m_pFaces, *m_pEdges, *m_pNodes;
437
438 wxChoice *m_pField_Z, *m_pField_C;
439
440 CSGDI_Slider *m_pShade[2];
441
442
443 virtual void On_Update_Choices (wxCommandEvent &event);
444 virtual void On_Update_Control (wxCommandEvent &event);
445
446 virtual void Set_Menu (wxMenu &Menu);
447 virtual void On_Menu (wxCommandEvent &event);
448 virtual void On_Menu_UI (wxUpdateUIEvent &event);
449
450
451 //-----------------------------------------------------
452 DECLARE_EVENT_TABLE()
453 };
454
455 //---------------------------------------------------------
456 BEGIN_EVENT_TABLE(C3D_Viewer_TIN_Dialog, CSG_3DView_Dialog)
457 EVT_CHOICE (wxID_ANY, C3D_Viewer_TIN_Dialog::On_Update_Choices)
458 // EVT_CHECKBOX (wxID_ANY, C3D_Viewer_TIN_Dialog::On_Update_Control)
459 EVT_MENU_RANGE (MENU_USER_FIRST, MENU_USER_LAST, C3D_Viewer_TIN_Dialog::On_Menu)
460 EVT_UPDATE_UI_RANGE(MENU_USER_FIRST, MENU_USER_LAST, C3D_Viewer_TIN_Dialog::On_Menu_UI)
461 END_EVENT_TABLE()
462
463 //---------------------------------------------------------
464 C3D_Viewer_TIN_Dialog::C3D_Viewer_TIN_Dialog(CSG_TIN *pTIN, int Field_Z, int Field_Color, CSG_Grid *pDrape)
465 : CSG_3DView_Dialog(_TL("TIN Viewer"))
466 {
467 Create(new C3D_Viewer_TIN_Panel(this, pTIN, Field_Z, Field_Color, pDrape));
468
469 wxArrayString Attributes;
470
471 for(int i=0; i<pTIN->Get_Field_Count(); i++)
472 {
473 Attributes.Add(pTIN->Get_Field_Name(i));
474 }
475
476 Add_Spacer();
477 m_pField_Z = Add_Choice (_TL("Elevation"), Attributes, Field_Z );
478 m_pField_C = Add_Choice (_TL("Colour" ), Attributes, Field_Color);
479
480 Add_Spacer();
481 m_pShade[0] = Add_Slider (_TL("Light Source Height" ), m_pPanel->m_Parameters("SHADE_DEC")->asDouble(), -180., 180.);
482 m_pShade[1] = Add_Slider (_TL("Light Source Direction"), m_pPanel->m_Parameters("SHADE_AZI")->asDouble(), -180., 180.);
483
484 // Add_Spacer();
485 // m_pFaces = Add_CheckBox(_TL("Faces"), m_pPanel->m_Parameters("DRAW_FACES")->asBool());
486 // m_pEdges = Add_CheckBox(_TL("Edges"), m_pPanel->m_Parameters("DRAW_EDGES")->asBool());
487 // m_pNodes = Add_CheckBox(_TL("Nodes"), m_pPanel->m_Parameters("DRAW_NODES")->asBool());
488 }
489
490 //---------------------------------------------------------
491 void C3D_Viewer_TIN_Dialog::On_Update_Choices(wxCommandEvent &event)
492 {
493 if( event.GetEventObject() == m_pField_Z )
494 {
495 m_pPanel->m_Parameters("Z_ATTR")->Set_Value(m_pField_Z->GetSelection()); m_pPanel->Update_View(true);
496 }
497
498 if( event.GetEventObject() == m_pField_C )
499 {
500 m_pPanel->m_Parameters("COLORS_ATTR")->Set_Value(m_pField_C->GetSelection()); m_pPanel->Update_View(true);
501 }
502
503 CSG_3DView_Dialog::On_Update_Choices(event);
504 }
505
506 //---------------------------------------------------------
507 void C3D_Viewer_TIN_Dialog::On_Update_Control(wxCommandEvent &event)
508 {
509 if( event.GetEventObject() == m_pShade[0] ) { m_pPanel->m_Parameters.Set_Parameter("SHADE_DEC", m_pShade[0]->Get_Value()); m_pPanel->Update_View(); }
510 if( event.GetEventObject() == m_pShade[1] ) { m_pPanel->m_Parameters.Set_Parameter("SHADE_AZI", m_pShade[1]->Get_Value()); m_pPanel->Update_View(); }
511
512 // CHECKBOX_UPDATE(m_pFaces, "DRAW_FACES");
513 // CHECKBOX_UPDATE(m_pEdges, "DRAW_EDGES");
514 // CHECKBOX_UPDATE(m_pNodes, "DRAW_NODES");
515
516 CSG_3DView_Dialog::On_Update_Control(event);
517 }
518
519 //---------------------------------------------------------
520 void C3D_Viewer_TIN_Dialog::Update_Controls(void)
521 {
522 m_pField_Z->SetSelection(m_pPanel->m_Parameters("Z_ATTR" )->asInt ());
523 m_pField_C->SetSelection(m_pPanel->m_Parameters("COLORS_ATTR")->asInt ());
524
525 m_pShade[0]->Set_Value (m_pPanel->m_Parameters("SHADE_DEC" )->asDouble());
526 m_pShade[1]->Set_Value (m_pPanel->m_Parameters("SHADE_AZI" )->asDouble());
527
528 // m_pFaces->SetValue(m_pPanel->m_Parameters("DRAW_FACES")->asBool());
529 // m_pEdges->SetValue(m_pPanel->m_Parameters("DRAW_EDGES")->asBool());
530 // m_pNodes->SetValue(m_pPanel->m_Parameters("DRAW_NODES")->asBool());
531
532 CSG_3DView_Dialog::Update_Controls();
533 }
534
535 //---------------------------------------------------------
536 enum
537 {
538 MENU_SCALE_Z_DEC = MENU_USER_FIRST,
539 MENU_SCALE_Z_INC,
540 MENU_COLORS_GRAD,
541 MENU_SHADING,
542 MENU_FACES,
543 MENU_EDGES,
544 MENU_NODES
545 };
546
547 //---------------------------------------------------------
548 void C3D_Viewer_TIN_Dialog::Set_Menu(wxMenu &Menu)
549 {
550 wxMenu *pMenu = Menu.FindChildItem(Menu.FindItem(_TL("Display")))->GetSubMenu();
551
552 pMenu->AppendSeparator();
553 pMenu->Append(MENU_SCALE_Z_DEC, _TL("Decrease Exaggeration [F1]"));
554 pMenu->Append(MENU_SCALE_Z_INC, _TL("Increase Exaggeration [F2]"));
555
556 pMenu->AppendSeparator();
557 pMenu->AppendCheckItem(MENU_COLORS_GRAD, _TL("Graduated Colours"));
558
559 Menu.AppendSeparator();
560 Menu.AppendCheckItem(MENU_SHADING, _TL("Shading"));
561
562 Menu.AppendSeparator();
563 Menu.AppendCheckItem(MENU_FACES, _TL("Faces"));
564 Menu.AppendCheckItem(MENU_EDGES, _TL("Edges"));
565 Menu.AppendCheckItem(MENU_NODES, _TL("Nodes"));
566 }
567
568 //---------------------------------------------------------
569 void C3D_Viewer_TIN_Dialog::On_Menu(wxCommandEvent &event)
570 {
571 switch( event.GetId() )
572 {
573 default: CSG_3DView_Dialog::On_Menu(event); break;
574
575 case MENU_USAGE : SG_UI_Dlg_Info(C3D_Viewer_TIN_Panel::Get_Usage(), _TL("Usage")); return;
576
577 case MENU_SCALE_Z_DEC: m_pPanel->Parameter_Value_Add("Z_SCALE", -0.5); break;
578 case MENU_SCALE_Z_INC: m_pPanel->Parameter_Value_Add("Z_SCALE", 0.5); break;
579
580 case MENU_COLORS_GRAD: m_pPanel->Parameter_Value_Toggle("COLORS_GRAD"); break;
581
582 case MENU_SHADING : m_pPanel->Parameter_Value_Toggle("SHADING" ); break;
583
584 case MENU_FACES : m_pPanel->Parameter_Value_Toggle("DRAW_FACES" ); break;
585 case MENU_EDGES : m_pPanel->Parameter_Value_Toggle("DRAW_EDGES" ); break;
586 case MENU_NODES : m_pPanel->Parameter_Value_Toggle("DRAW_NODES" ); break;
587 }
588 }
589
590 //---------------------------------------------------------
591 void C3D_Viewer_TIN_Dialog::On_Menu_UI(wxUpdateUIEvent &event)
592 {
593 switch( event.GetId() )
594 {
595 default:
596 CSG_3DView_Dialog::On_Menu_UI(event);
597 break;
598
599 case MENU_COLORS_GRAD: event.Check(m_pPanel->m_Parameters("COLORS_GRAD")->asBool()); break;
600
601 case MENU_SHADING : event.Check(m_pPanel->m_Parameters("SHADING" )->asBool()); break;
602
603 case MENU_FACES : event.Check(m_pPanel->m_Parameters("DRAW_FACES" )->asBool()); break;
604 case MENU_EDGES : event.Check(m_pPanel->m_Parameters("DRAW_EDGES" )->asBool()); break;
605 case MENU_NODES : event.Check(m_pPanel->m_Parameters("DRAW_NODES" )->asBool()); break;
606 }
607 }
608
609
610 ///////////////////////////////////////////////////////////
611 // //
612 // //
613 // //
614 ///////////////////////////////////////////////////////////
615
616 //---------------------------------------------------------
617 C3D_Viewer_TIN::C3D_Viewer_TIN(void)
618 {
619 Set_Name (_TL("TIN Viewer"));
620
621 Set_Author ("O.Conrad (c) 2014");
622
623 Set_Description (_TW(
624 "3D viewer for TIN."
625 ));
626
627 Set_Description(Get_Description() + C3D_Viewer_TIN_Panel::Get_Usage());
628
629 //-----------------------------------------------------
630 Parameters.Add_TIN("",
631 "TIN" , _TL("TIN"),
632 _TL(""),
633 PARAMETER_INPUT
634 );
635
636 Parameters.Add_Table_Field("TIN",
637 "HEIGHT" , _TL("Elevation"),
638 _TL("")
639 );
640
641 Parameters.Add_Table_Field("TIN",
642 "COLOR" , _TL("Color"),
643 _TL("")
644 );
645
646 Parameters.Add_Grid("",
647 "DRAPE" , _TL("Map"),
648 _TL("rgb coded raster map to be draped"),
649 PARAMETER_INPUT_OPTIONAL
650 );
651 }
652
653
654 ///////////////////////////////////////////////////////////
655 // //
656 ///////////////////////////////////////////////////////////
657
658 //---------------------------------------------------------
659 bool C3D_Viewer_TIN::On_Execute(void)
660 {
661 CSG_TIN *pTIN = Parameters("TIN")->asTIN();
662
663 if( !pTIN->is_Valid() )
664 {
665 Error_Set(_TL("invalid input data"));
666
667 return( false );
668 }
669
670 C3D_Viewer_TIN_Dialog dlg(pTIN,
671 Parameters("HEIGHT")->asInt(),
672 Parameters("COLOR" )->asInt(),
673 Parameters("DRAPE" )->asGrid()
674 );
675
676 dlg.ShowModal();
677
678 return( true );
679 }
680
681
682 ///////////////////////////////////////////////////////////
683 // //
684 // //
685 // //
686 ///////////////////////////////////////////////////////////
687
688 //---------------------------------------------------------