1 #include "bgui_vsol2D_tableau.h"
2 //:
3 // \file
4 #include <bgui/bgui_vsol_soview2D.h>
5 #include "vgui/vgui.h"
6 #include "vgui/vgui_style.h"
7 #include <vsol/vsol_spatial_object_2d.h>
8 #include <vsol/vsol_point_2d.h>
9 #include <vsol/vsol_line_2d.h>
10 #include <vsol/vsol_polyline_2d.h>
11 #include <vsol/vsol_conic_2d.h>
12 #include <vsol/vsol_polygon_2d.h>
13 #include <vdgl/vdgl_digital_curve.h>
14 #include <cassert>
15 #ifdef _MSC_VER
16 # include "vcl_msvc_warnings.h"
17 #endif
18
bgui_vsol2D_tableau(const char * n)19 bgui_vsol2D_tableau::bgui_vsol2D_tableau(const char* n) :
20 vgui_easy2D_tableau(n) { this->init(); }
21
bgui_vsol2D_tableau(vgui_image_tableau_sptr const & it,const char * n)22 bgui_vsol2D_tableau::bgui_vsol2D_tableau(vgui_image_tableau_sptr const& it,
23 const char* n) :
24 vgui_easy2D_tableau(it, n) { this->init(); }
25
bgui_vsol2D_tableau(vgui_tableau_sptr const & t,const char * n)26 bgui_vsol2D_tableau::bgui_vsol2D_tableau(vgui_tableau_sptr const& t,
27 const char* n) :
28 vgui_easy2D_tableau(t, n) { this->init(); }
29
~bgui_vsol2D_tableau()30 bgui_vsol2D_tableau::~bgui_vsol2D_tableau()
31 {
32 }
33
init()34 void bgui_vsol2D_tableau::init()
35 {
36 //define default soview styles
37 //these can be overridden by later set_*_syle commands prior to drawing.
38 //
39 point_style_ = vgui_style::new_style(0.0f, 1.0f, 0.0f, 3.0f, 1.0f);
40 line_style_ = vgui_style::new_style(0.8f, 0.2f, 0.9f, 1.0f, 3.0f);
41 conic_style_ = vgui_style::new_style(0.2f, 0.8f, 0.1f, 1.0f, 3.0f);
42 polyline_style_ = vgui_style::new_style(0.8f, 0.2f, 0.9f, 1.0f, 3.0f);
43 digital_curve_style_ = vgui_style::new_style(0.8f, 0.0f, 0.8f, 1.0f, 3.0f);
44 dotted_digital_curve_style_ = vgui_style::new_style(0.8f, 0.0f, 0.8f, 3.0f, 3.0f);
45 edgel_curve_style_ = vgui_style::new_style(0.0f, 0.5f, 0.8f, 1.0f, 3.0f);
46 dotted_edgel_curve_style_ = vgui_style::new_style(0.0f, 0.5f, 0.8f, 3.0f, 3.0f);
47 }
48
49
50 bgui_vsol_soview2D_point*
add_vsol_point_2d(vsol_point_2d_sptr const & p,const vgui_style_sptr & style)51 bgui_vsol2D_tableau::add_vsol_point_2d(vsol_point_2d_sptr const& p,
52 const vgui_style_sptr& style)
53 {
54 bgui_vsol_soview2D_point* obj =
55 new bgui_vsol_soview2D_point(p);
56 add(obj);
57 if (style)
58 obj->set_style( style );
59 else
60 obj->set_style( point_style_ );
61 return obj;
62 }
63
64
65 bgui_vsol_soview2D_line_seg*
add_vsol_line_2d(vsol_line_2d_sptr const & line,const vgui_style_sptr & style)66 bgui_vsol2D_tableau::add_vsol_line_2d(vsol_line_2d_sptr const& line,
67 const vgui_style_sptr& style)
68 {
69 bgui_vsol_soview2D_line_seg* obj =
70 new bgui_vsol_soview2D_line_seg(line);
71 add(obj);
72 if (style)
73 obj->set_style( style );
74 else
75 obj->set_style( line_style_ );
76 return obj;
77 }
78
79
80 bgui_vsol_soview2D_conic_seg*
add_vsol_conic_2d(vsol_conic_2d_sptr const & conic,const vgui_style_sptr & style)81 bgui_vsol2D_tableau::add_vsol_conic_2d(vsol_conic_2d_sptr const& conic,
82 const vgui_style_sptr& style)
83 {
84 bgui_vsol_soview2D_conic_seg* obj =
85 new bgui_vsol_soview2D_conic_seg(conic);
86 add(obj);
87 if (style)
88 obj->set_style( style );
89 else
90 obj->set_style( conic_style_ );
91 return obj;
92 }
93
94
95 bgui_vsol_soview2D_polyline*
add_vsol_polyline_2d(vsol_polyline_2d_sptr const & pline,const vgui_style_sptr & style)96 bgui_vsol2D_tableau::add_vsol_polyline_2d(vsol_polyline_2d_sptr const& pline,
97 const vgui_style_sptr& style)
98 {
99 bgui_vsol_soview2D_polyline* obj =
100 new bgui_vsol_soview2D_polyline(pline);
101 add(obj);
102 if (style)
103 obj->set_style( style );
104 else
105 obj->set_style( polyline_style_ );
106 return obj;
107 }
108
109
110 bgui_vsol_soview2D_polygon*
add_vsol_polygon_2d(vsol_polygon_2d_sptr const & pline,const vgui_style_sptr & style)111 bgui_vsol2D_tableau::add_vsol_polygon_2d(vsol_polygon_2d_sptr const& pline,
112 const vgui_style_sptr& style)
113 {
114 bgui_vsol_soview2D_polygon* obj =
115 new bgui_vsol_soview2D_polygon(pline);
116 add(obj);
117 if (style)
118 obj->set_style( style );
119 else
120 obj->set_style( polyline_style_ );
121 return obj;
122 }
123
124 bgui_vsol_soview2D_polygon_set*
add_vsol_polygon_2d_set(vsol_poly_set_2d_sptr const & set,const vgui_style_sptr & style)125 bgui_vsol2D_tableau::add_vsol_polygon_2d_set(vsol_poly_set_2d_sptr const& set,
126 const vgui_style_sptr& style)
127 {
128 bgui_vsol_soview2D_polygon_set* obj =
129 new bgui_vsol_soview2D_polygon_set(set);
130 add(obj);
131 if (style)
132 obj->set_style( style );
133 else
134 obj->set_style( polyline_style_ );
135 return obj;
136 }
137
138 bgui_vsol_soview2D_digital_curve*
add_digital_curve(vsol_digital_curve_2d_sptr const & dc,const vgui_style_sptr & style)139 bgui_vsol2D_tableau::add_digital_curve(vsol_digital_curve_2d_sptr const& dc,
140 const vgui_style_sptr& style)
141 {
142 bgui_vsol_soview2D_digital_curve* obj =
143 new bgui_vsol_soview2D_digital_curve(dc);
144 add(obj);
145 if (style)
146 obj->set_style( style );
147 else
148 obj->set_style( digital_curve_style_ );
149 return obj;
150 }
151
152
153 bgui_vsol_soview2D_digital_curve*
add_dotted_digital_curve(vsol_digital_curve_2d_sptr const & dc,const vgui_style_sptr & style)154 bgui_vsol2D_tableau::add_dotted_digital_curve(vsol_digital_curve_2d_sptr const& dc,
155 const vgui_style_sptr& style)
156 {
157 bgui_vsol_soview2D_digital_curve* obj =
158 new bgui_vsol_soview2D_digital_curve(dc, true);
159 add(obj);
160 if (style)
161 obj->set_style( style );
162 else
163 obj->set_style( dotted_digital_curve_style_ );
164 return obj;
165 }
166
167
168 bgui_vsol_soview2D_edgel_curve*
add_edgel_curve(vdgl_digital_curve_sptr const & dc,const vgui_style_sptr & style)169 bgui_vsol2D_tableau::add_edgel_curve(vdgl_digital_curve_sptr const& dc,
170 const vgui_style_sptr& style)
171 {
172 bgui_vsol_soview2D_edgel_curve* obj =
173 new bgui_vsol_soview2D_edgel_curve(dc);
174 add(obj);
175 if (style)
176 obj->set_style( style );
177 else
178 obj->set_style( edgel_curve_style_ );
179 return obj;
180 }
181
182
183 bgui_vsol_soview2D_edgel_curve*
add_dotted_edgel_curve(vdgl_digital_curve_sptr const & dc,const vgui_style_sptr & style)184 bgui_vsol2D_tableau::add_dotted_edgel_curve(vdgl_digital_curve_sptr const& dc,
185 const vgui_style_sptr& style)
186 {
187 bgui_vsol_soview2D_edgel_curve* obj =
188 new bgui_vsol_soview2D_edgel_curve(dc, true);
189 add(obj);
190 if (style)
191 obj->set_style( style );
192 else
193 obj->set_style( dotted_edgel_curve_style_ );
194 return obj;
195 }
196
197
198 void bgui_vsol2D_tableau::
add_spatial_objects(std::vector<vsol_spatial_object_2d_sptr> const & sos,const vgui_style_sptr & style)199 add_spatial_objects(std::vector<vsol_spatial_object_2d_sptr> const& sos,
200 const vgui_style_sptr& style)
201 {
202 for (std::vector<vsol_spatial_object_2d_sptr>::const_iterator sit = sos.begin();
203 sit != sos.end(); sit++)
204 {
205 add_spatial_object( (*sit) , style );
206 }
207 }
208
209
210 void bgui_vsol2D_tableau::
add_spatial_object(vsol_spatial_object_2d_sptr const & sos,const vgui_style_sptr & style)211 add_spatial_object(vsol_spatial_object_2d_sptr const& sos,
212 const vgui_style_sptr& style)
213 {
214 if (sos->cast_to_point()) {
215 vsol_point_2d_sptr p = sos->cast_to_point();
216 this->add_vsol_point_2d(p , style );
217 }
218 else if (sos->cast_to_curve())
219 {
220 if (sos->cast_to_curve()->cast_to_digital_curve())
221 {
222 vsol_digital_curve_2d_sptr dc =
223 sos->cast_to_curve()->cast_to_digital_curve();
224 this->add_digital_curve(dc , style);
225 }
226 else if (sos->cast_to_curve()->cast_to_vdgl_digital_curve())
227 {
228 vdgl_digital_curve_sptr dc =
229 sos->cast_to_curve()->cast_to_vdgl_digital_curve();
230 this->add_edgel_curve(dc , style);
231 }
232 else if (sos->cast_to_curve()->cast_to_line())
233 {
234 vsol_line_2d_sptr line =
235 sos->cast_to_curve()->cast_to_line();
236 this->add_vsol_line_2d(line, style);
237 }
238 else if (sos->cast_to_curve()->cast_to_polyline())
239 {
240 vsol_polyline_2d_sptr pline =
241 sos->cast_to_curve()->cast_to_polyline();
242 this->add_vsol_polyline_2d(pline , style);
243 }
244 else if (sos->cast_to_curve()->cast_to_conic())
245 {
246 vsol_conic_2d_sptr conic = sos->cast_to_curve()->cast_to_conic();
247
248 // make sure the endpoints are already defined
249 assert(conic->p0() && conic->p1());
250
251 this->add_vsol_conic_2d(conic, style);
252 }
253 else
254 assert(!"unknown curve type in bgui_vsol2D_tableau::add_spatial_object()");
255 }
256 else if (sos->cast_to_region()) {
257 if (sos->cast_to_region()->cast_to_polygon())
258 {
259 vsol_polygon_2d_sptr pline =
260 sos->cast_to_region()->cast_to_polygon();
261 this->add_vsol_polygon_2d(pline, style);
262 }
263 else
264 assert(!"unknown region type in bgui_vsol2D_tableau::add_spatial_object()");
265 }
266 else
267 assert(!"unknown spatial object type in bgui_vsol2D_tableau::add_spatial_object()");
268 return;
269 }
270
271
set_vsol_spatial_object_2d_style(vsol_spatial_object_2d_sptr sos,const vgui_style_sptr & style)272 void bgui_vsol2D_tableau::set_vsol_spatial_object_2d_style(vsol_spatial_object_2d_sptr sos,
273 const vgui_style_sptr& style)
274 {
275 if (sos->cast_to_point()) {
276 set_vsol_point_2d_style(style);
277 }
278 else if (sos->cast_to_curve()) {
279 set_digital_curve_style(style);
280 }
281 }
282
283
set_vsol_point_2d_style(const vgui_style_sptr & style)284 void bgui_vsol2D_tableau::set_vsol_point_2d_style(const vgui_style_sptr& style)
285 {
286 point_style_->rgba[0] = style->rgba[0];
287 point_style_->rgba[1] = style->rgba[1];
288 point_style_->rgba[2] = style->rgba[2];
289 point_style_->point_size = style->point_size;
290 point_style_->line_width = style->line_width;
291 }
292
293
set_vsol_line_2d_style(const vgui_style_sptr & style)294 void bgui_vsol2D_tableau::set_vsol_line_2d_style(const vgui_style_sptr& style)
295 {
296 line_style_->rgba[0] = style->rgba[0];
297 line_style_->rgba[1] = style->rgba[1];
298 line_style_->rgba[2] = style->rgba[2];
299 line_style_->point_size = style->point_size;
300 line_style_->line_width = style->line_width;
301 }
302
303
set_vsol_polyline_2d_style(const vgui_style_sptr & style)304 void bgui_vsol2D_tableau::set_vsol_polyline_2d_style(const vgui_style_sptr& style)
305 {
306 polyline_style_->rgba[0] = style->rgba[0];
307 polyline_style_->rgba[1] = style->rgba[1];
308 polyline_style_->rgba[2] = style->rgba[2];
309 polyline_style_->point_size = style->point_size;
310 polyline_style_->line_width = style->line_width;
311 }
312
313
set_digital_curve_style(const vgui_style_sptr & style)314 void bgui_vsol2D_tableau::set_digital_curve_style(const vgui_style_sptr& style)
315 {
316 digital_curve_style_->rgba[0] = style->rgba[0];
317 digital_curve_style_->rgba[1] = style->rgba[1];
318 digital_curve_style_->rgba[2] = style->rgba[2];
319 digital_curve_style_->point_size = style->point_size;
320 digital_curve_style_->line_width = style->line_width;
321 }
322
323
set_dotted_digital_curve_style(const vgui_style_sptr & style)324 void bgui_vsol2D_tableau::set_dotted_digital_curve_style(const vgui_style_sptr& style)
325 {
326 dotted_digital_curve_style_->rgba[0] = style->rgba[0];
327 dotted_digital_curve_style_->rgba[1] = style->rgba[1];
328 dotted_digital_curve_style_->rgba[2] = style->rgba[2];
329 dotted_digital_curve_style_->point_size = style->point_size;
330 dotted_digital_curve_style_->line_width = style->line_width;
331 }
332
333
set_edgel_curve_style(const vgui_style_sptr & style)334 void bgui_vsol2D_tableau::set_edgel_curve_style(const vgui_style_sptr& style)
335 {
336 edgel_curve_style_->rgba[0] = style->rgba[0];
337 edgel_curve_style_->rgba[1] = style->rgba[1];
338 edgel_curve_style_->rgba[2] = style->rgba[2];
339 edgel_curve_style_->point_size = style->point_size;
340 edgel_curve_style_->line_width = style->line_width;
341 }
342
343
set_dotted_edgel_curve_style(const vgui_style_sptr & style)344 void bgui_vsol2D_tableau::set_dotted_edgel_curve_style(const vgui_style_sptr& style)
345 {
346 dotted_edgel_curve_style_->rgba[0] = style->rgba[0];
347 dotted_edgel_curve_style_->rgba[1] = style->rgba[1];
348 dotted_edgel_curve_style_->rgba[2] = style->rgba[2];
349 dotted_edgel_curve_style_->point_size = style->point_size;
350 dotted_edgel_curve_style_->line_width = style->line_width;
351 }
352