Revision: 8229
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8229&view=rev
Author:   gbiggs
Date:     2009-08-26 08:30:24 +0000 (Wed, 26 Aug 2009)

Log Message:
-----------
Applied patch #2844288: fixed playerv display on ranger data

Modified Paths:
--------------
    code/player/trunk/client_libs/libplayerc/dev_ranger.c
    code/player/trunk/utils/playerv/pv_dev_ranger.c

Modified: code/player/trunk/client_libs/libplayerc/dev_ranger.c
===================================================================
--- code/player/trunk/client_libs/libplayerc/dev_ranger.c       2009-08-26 
08:23:52 UTC (rev 8228)
+++ code/player/trunk/client_libs/libplayerc/dev_ranger.c       2009-08-26 
08:30:24 UTC (rev 8229)
@@ -276,6 +276,7 @@
   device->min_angle = config->min_angle;
   device->max_angle = config->max_angle;
   device->angular_res = config->angular_res;
+  device->min_range = config->min_range;
   device->max_range = config->max_range;
   device->range_res = config->range_res;
   device->frequency = config->frequency;

Modified: code/player/trunk/utils/playerv/pv_dev_ranger.c
===================================================================
--- code/player/trunk/utils/playerv/pv_dev_ranger.c     2009-08-26 08:23:52 UTC 
(rev 8228)
+++ code/player/trunk/utils/playerv/pv_dev_ranger.c     2009-08-26 08:30:24 UTC 
(rev 8229)
@@ -221,10 +221,13 @@
       // Assume the range is straight ahead (ignore min_angle and angular_res 
properties)
       points[0][0] = 0.0f;
       points[0][1] = 0.0f;
-      points[1][0] = ranger->proxy->ranges[ii] * cos(-temp);
-      points[1][1] = ranger->proxy->ranges[ii] * sin(-temp);
-      points[2][0] = ranger->proxy->ranges[ii] * cos(temp);
-      points[2][1] = ranger->proxy->ranges[ii] * sin(temp);
+      double range = ranger->proxy->ranges[ii];
+      if (range < ranger->proxy->min_range)
+        range = ranger->proxy->max_range;
+      points[1][0] = range * cos(-temp);
+      points[1][1] = range * sin(-temp);
+      points[2][0] = range * cos(temp);
+      points[2][1] = range * sin(temp);
       rtk_fig_polygon(ranger->scan_fig[ii], 0, 0, 0, 3, points, 1);
 
       // Draw the sensor itself
@@ -249,27 +252,37 @@
       // Draw empty space
       points[0][0] = 0.0;
       points[0][1] = 0.0;
+      double b = ranger->proxy->min_angle;
       for (ii = 0; ii < ranger->proxy->ranges_count; ii++)
       {
-        points[ii + 1][0] = ranger->proxy->points[ii].px;
-        points[ii + 1][1] = ranger->proxy->points[ii].py;
+        double range = ranger->proxy->ranges[ii];
+        if (range < ranger->proxy->min_range) {
+          points[ii + 1][0] = ranger->proxy->max_range * cos(b);
+          points[ii + 1][1] = ranger->proxy->max_range * sin(b);
+        }
+        else {
+          points[ii + 1][0] = ranger->proxy->points[ii].px;
+          points[ii + 1][1] = ranger->proxy->points[ii].py;
+        }
+        b += ranger->proxy->angular_res;
       }
       rtk_fig_color_rgb32(ranger->scan_fig[0], COLOR_LASER_EMP);
       rtk_fig_polygon(ranger->scan_fig[0], 0, 0, 0,
                       ranger->proxy->ranges_count + 1, points, 1);
-      free(points);
-      points = NULL;
 
       // Draw occupied space
       rtk_fig_color_rgb32(ranger->scan_fig[0], COLOR_LASER_OCC);
       for (ii = 1; ii < ranger->proxy->ranges_count; ii++)
       {
-        point1[0] = ranger->proxy->points[ii - 1].px;
-        point1[1] = ranger->proxy->points[ii - 1].py;
-        point2[0] = ranger->proxy->points[ii].px;
-        point2[1] = ranger->proxy->points[ii].py;
+        point1[0] = points[ii][0];
+        point1[1] = points[ii][1];
+        point2[0] = points[ii+1][0];
+        point2[1] = points[ii+1][1];
         rtk_fig_line(ranger->scan_fig[0], point1[0], point1[1], point2[0], 
point2[1]);
       }
+      free(points);
+      points = NULL;
+
     }
     else
     {
@@ -278,13 +291,31 @@
 
       rtk_fig_color_rgb32(ranger->scan_fig[0], COLOR_LASER_OCC);
       // Get the first point
-      point1[0] = ranger->proxy->points[0].px;
-      point1[1] = ranger->proxy->points[0].py;
+
+      double b = ranger->proxy->min_angle;
+
+      double range = ranger->proxy->ranges[0];
+      if (range < ranger->proxy->min_range) {
+        point1[0] = ranger->proxy->max_range * cos(b);
+        point1[1] = ranger->proxy->max_range * sin(b);
+      }
+      else {
+        point1[0] = ranger->proxy->points[0].px;
+        point1[1] = ranger->proxy->points[0].py;
+      }
       // Loop over the rest of the ranges
       for (ii = 1; ii < ranger->proxy->ranges_count; ii++)
       {
-        point2[0] = ranger->proxy->points[ii].px;
-        point2[1] = ranger->proxy->points[ii].py;
+        b += ranger->proxy->angular_res;
+        range = ranger->proxy->ranges[ii];
+        if (range < ranger->proxy->min_range) {
+          point2[0] = ranger->proxy->max_range * cos(b);
+          point2[1] = ranger->proxy->max_range * sin(b);
+        }
+        else {
+          point2[0] = ranger->proxy->points[ii].px;
+          point2[1] = ranger->proxy->points[ii].py;
+        }
         // Draw a line from point 1 (previous point) to point 2 (current point)
         rtk_fig_line(ranger->scan_fig[0], point1[0], point1[1], point2[0], 
point2[1]);
         point1[0] = point2[0];
@@ -295,16 +326,25 @@
     if (rtk_menuitem_ischecked(ranger->intns_item))
     {
       // Draw an intensity scan
+      double b = ranger->proxy->min_angle;
       if (ranger->proxy->intensities_count > 0)
       {
         for (ii = 0; ii < ranger->proxy->intensities_count; ii++)
         {
           if (ranger->proxy->intensities[ii] != 0)
           {
-            point1[0] = ranger->proxy->points[ii].px;
-            point1[1] = ranger->proxy->points[ii].py;
+            double range = ranger->proxy->ranges[ii];
+            if (range < ranger->proxy->min_range) {
+              point1[0] = ranger->proxy->max_range * cos(b);
+              point1[1] = ranger->proxy->max_range * sin(b);
+            }
+            else {
+              point1[0] = ranger->proxy->points[ii].px;
+              point1[1] = ranger->proxy->points[ii].py;
+            }
             rtk_fig_rectangle(ranger->scan_fig[0], point1[0], point1[1], 0, 
0.05, 0.05, 1);
           }
+          b += ranger->proxy->angular_res;
         }
       }
     }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to