+void Designer::zone_properties()
+{
+ if(!cur_zone)
+ return;
+
+ ZoneProperties *zone_prop = new ZoneProperties(*cur_zone);
+ root.add(*zone_prop);
+ const GLtk::Geometry &root_geom = root.get_geometry();
+ const GLtk::Geometry &dlg_geom = zone_prop->get_geometry();
+ zone_prop->set_position((root_geom.w-dlg_geom.w)/2, (root_geom.h-dlg_geom.h)/2);
+}
+
+void Designer::add_selection_to_zone()
+{
+ if(!cur_zone)
+ return;
+
+ try
+ {
+ cur_zone->add_tracks(selection.get_objects<Track>());
+ }
+ catch(const exception &e)
+ {
+ lbl_status->set_text(e.what());
+ }
+
+ show_zone(*cur_zone);
+}
+
+Vector Designer::map_pointer_to_ground(const Vector &p)
+{
+ GL::Vector4 vec = main_view->get_camera().unproject(GL::Vector4(p.x, p.y, 0, 0));
+ const GL::Vector3 &pos = main_view->get_camera().get_position();
+
+ return pos-GL::Vector3(vec.x, vec.y, vec.z)*(pos.z/vec.z);