Revision: 41362
          http://brlcad.svn.sourceforge.net/brlcad/?rev=41362&view=rev
Author:   brlcad
Date:     2010-11-15 22:13:15 +0000 (Mon, 15 Nov 2010)

Log Message:
-----------
move the statics variables out of file scope and into the function that uses 
them.  reorder functions to avoid forward declarations.

Modified Paths:
--------------
    brlcad/trunk/src/libged/solids_on_ray.c

Modified: brlcad/trunk/src/libged/solids_on_ray.c
===================================================================
--- brlcad/trunk/src/libged/solids_on_ray.c     2010-11-15 22:09:50 UTC (rev 
41361)
+++ brlcad/trunk/src/libged/solids_on_ray.c     2010-11-15 22:13:15 UTC (rev 
41362)
@@ -38,126 +38,6 @@
 #include "./ged_private.h"
 
 
-static char **ged_skewer_solids(struct ged *gedp, int argc, const char **argv, 
fastf_t *ray_orig, fastf_t *ray_dir, int full_path);
-
-static char **solids_on_ray_cmd_vec;
-static int solids_on_ray_cmd_vec_len;
-
-int
-ged_solids_on_ray(struct ged *gedp, int argc, const char *argv[])
-{
-    size_t args;
-    char **snames;
-    int h = 0;
-    int v = 0;
-    int i;             /* Dummy loop index */
-    double t;
-    double t_in;
-    point_t ray_orig;
-    vect_t ray_dir;
-    point_t extremum[2];
-    vect_t unit_H, unit_V;
-    static const char *usage = "[h v]";
-
-    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
-    GED_CHECK_READ_ONLY(gedp, GED_ERROR);
-    GED_CHECK_DRAWABLE(gedp, GED_ERROR);
-    GED_CHECK_VIEW(gedp, GED_ERROR);
-    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
-
-    /* initialize result */
-    bu_vls_trunc(&gedp->ged_result_str, 0);
-
-    /* must be wanting help */
-    if (argc == 1) {
-       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_HELP;
-    }
-
-    if (argc != 1 && argc != 3) {
-       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    if (argc == 3 &&
-       (sscanf(argv[1], "%d", &h) != 1 ||
-        sscanf(argv[2], "%d", &v) != 1)) {
-       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
-       return GED_ERROR;
-    }
-
-    if ((int)GED_VMIN > h || h > (int)GED_VMAX || (int)GED_VMIN > v || v > 
(int)GED_VMAX) {
-       bu_vls_printf(&gedp->ged_result_str, "Screen coordinates out of 
range\nMust be between +/-2048");
-       return GED_ERROR;
-    }
-
-    VSET(ray_orig, -gedp->ged_gvp->gv_center[MDX],
-        -gedp->ged_gvp->gv_center[MDY], -gedp->ged_gvp->gv_center[MDZ]);
-    /*
-     * Compute bounding box of all objects displayed.
-     * Borrowed from size_reset() in chgview.c
-     */
-    for (i = 0; i < 3; ++i) {
-       extremum[0][i] = INFINITY;
-       extremum[1][i] = -INFINITY;
-    }
-
-    VMOVEN(ray_dir, gedp->ged_gvp->gv_rotation + 8, 3);
-    VSCALE(ray_dir, ray_dir, -1.0);
-    for (i = 0; i < 3; ++i)
-       if (NEAR_ZERO(ray_dir[i], 1e-10))
-           ray_dir[i] = 0.0;
-    if ((ray_orig[X] >= extremum[0][X])
-       && (ray_orig[X] <= extremum[1][X])
-       && (ray_orig[Y] >= extremum[0][Y])
-       && (ray_orig[Y] <= extremum[1][Y])
-       && (ray_orig[Z] >= extremum[0][Z])
-       && (ray_orig[Z] <= extremum[1][Z]))
-    {
-       t_in = -INFINITY;
-       for (i = 0; i < 6; ++i) {
-           if (ray_dir[i%3] == 0)
-               continue;
-           t = (extremum[i/3][i%3] - ray_orig[i%3]) /
-               ray_dir[i%3];
-           if ((t < 0) && (t > t_in))
-               t_in = t;
-       }
-       VJOIN1(ray_orig, ray_orig, t_in, ray_dir);
-    }
-
-    VMOVEN(unit_H, gedp->ged_gvp->gv_model2view, 3);
-    VMOVEN(unit_V, gedp->ged_gvp->gv_model2view + 4, 3);
-    VJOIN1(ray_orig, ray_orig, h * gedp->ged_gvp->gv_scale * INV_GED_V, 
unit_H);
-    VJOIN1(ray_orig, ray_orig, v * gedp->ged_gvp->gv_scale * INV_GED_V, 
unit_V);
-
-    /* allocate space for display top-levels */
-    args = 2 + ged_count_tops(gedp);
-    solids_on_ray_cmd_vec = bu_calloc(1, sizeof(char *) * args, "alloca 
solids_on_ray_cmd_vec");
-
-    /*
-     * Build a list of all the top-level objects currently displayed
-     */
-    solids_on_ray_cmd_vec_len = ged_build_tops(gedp, 
&solids_on_ray_cmd_vec[0], &solids_on_ray_cmd_vec[args]);
-
-    snames = ged_skewer_solids(gedp, solids_on_ray_cmd_vec_len, (const char 
**)solids_on_ray_cmd_vec, ray_orig, ray_dir, 1);
-
-    bu_free(solids_on_ray_cmd_vec, "free solids_on_ray_cmd_vec");
-
-    if (snames == 0) {
-       bu_vls_printf(&gedp->ged_result_str, "Error executing 
ged_skewer_solids: ");
-       return GED_ERROR;
-    }
-
-    for (i = 0; snames[i] != 0; ++i)
-       bu_vls_printf(&gedp->ged_result_str, " %s", snames[i]);
-
-    bu_free((genptr_t) snames, "solid names");
-
-    return GED_OK;
-}
-
-
 /*
  * G E D _ N O _ O P
  *
@@ -298,6 +178,124 @@
 }
 
 
+int
+ged_solids_on_ray(struct ged *gedp, int argc, const char *argv[])
+{
+    static char **solids_on_ray_cmd_vec = NULL;
+    static int solids_on_ray_cmd_vec_len = 0;
+
+    size_t args;
+    char **snames;
+    int h = 0;
+    int v = 0;
+    int i;             /* Dummy loop index */
+    double t;
+    double t_in;
+    point_t ray_orig;
+    vect_t ray_dir;
+    point_t extremum[2];
+    vect_t unit_H, unit_V;
+    static const char *usage = "[h v]";
+
+    GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR);
+    GED_CHECK_READ_ONLY(gedp, GED_ERROR);
+    GED_CHECK_DRAWABLE(gedp, GED_ERROR);
+    GED_CHECK_VIEW(gedp, GED_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(&gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_HELP;
+    }
+
+    if (argc != 1 && argc != 3) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if (argc == 3 &&
+       (sscanf(argv[1], "%d", &h) != 1 ||
+        sscanf(argv[2], "%d", &v) != 1)) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return GED_ERROR;
+    }
+
+    if ((int)GED_VMIN > h || h > (int)GED_VMAX || (int)GED_VMIN > v || v > 
(int)GED_VMAX) {
+       bu_vls_printf(&gedp->ged_result_str, "Screen coordinates out of 
range\nMust be between +/-2048");
+       return GED_ERROR;
+    }
+
+    VSET(ray_orig, -gedp->ged_gvp->gv_center[MDX],
+        -gedp->ged_gvp->gv_center[MDY], -gedp->ged_gvp->gv_center[MDZ]);
+    /*
+     * Compute bounding box of all objects displayed.
+     * Borrowed from size_reset() in chgview.c
+     */
+    for (i = 0; i < 3; ++i) {
+       extremum[0][i] = INFINITY;
+       extremum[1][i] = -INFINITY;
+    }
+
+    VMOVEN(ray_dir, gedp->ged_gvp->gv_rotation + 8, 3);
+    VSCALE(ray_dir, ray_dir, -1.0);
+    for (i = 0; i < 3; ++i)
+       if (NEAR_ZERO(ray_dir[i], 1e-10))
+           ray_dir[i] = 0.0;
+    if ((ray_orig[X] >= extremum[0][X])
+       && (ray_orig[X] <= extremum[1][X])
+       && (ray_orig[Y] >= extremum[0][Y])
+       && (ray_orig[Y] <= extremum[1][Y])
+       && (ray_orig[Z] >= extremum[0][Z])
+       && (ray_orig[Z] <= extremum[1][Z]))
+    {
+       t_in = -INFINITY;
+       for (i = 0; i < 6; ++i) {
+           if (ray_dir[i%3] == 0)
+               continue;
+           t = (extremum[i/3][i%3] - ray_orig[i%3]) /
+               ray_dir[i%3];
+           if ((t < 0) && (t > t_in))
+               t_in = t;
+       }
+       VJOIN1(ray_orig, ray_orig, t_in, ray_dir);
+    }
+
+    VMOVEN(unit_H, gedp->ged_gvp->gv_model2view, 3);
+    VMOVEN(unit_V, gedp->ged_gvp->gv_model2view + 4, 3);
+    VJOIN1(ray_orig, ray_orig, h * gedp->ged_gvp->gv_scale * INV_GED_V, 
unit_H);
+    VJOIN1(ray_orig, ray_orig, v * gedp->ged_gvp->gv_scale * INV_GED_V, 
unit_V);
+
+    /* allocate space for display top-levels */
+    args = 2 + ged_count_tops(gedp);
+    solids_on_ray_cmd_vec = bu_calloc(1, sizeof(char *) * args, "alloca 
solids_on_ray_cmd_vec");
+
+    /*
+     * Build a list of all the top-level objects currently displayed
+     */
+    solids_on_ray_cmd_vec_len = ged_build_tops(gedp, 
&solids_on_ray_cmd_vec[0], &solids_on_ray_cmd_vec[args]);
+
+    snames = ged_skewer_solids(gedp, solids_on_ray_cmd_vec_len, (const char 
**)solids_on_ray_cmd_vec, ray_orig, ray_dir, 1);
+
+    bu_free(solids_on_ray_cmd_vec, "free solids_on_ray_cmd_vec");
+
+    if (snames == 0) {
+       bu_vls_printf(&gedp->ged_result_str, "Error executing 
ged_skewer_solids: ");
+       return GED_ERROR;
+    }
+
+    for (i = 0; snames[i] != 0; ++i)
+       bu_vls_printf(&gedp->ged_result_str, " %s", snames[i]);
+
+    bu_free((genptr_t) snames, "solid names");
+
+    return GED_OK;
+}
+
+
 /*
  * Local Variables:
  * tab-width: 8


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

------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework. Read more!
http://p.sf.net/sfu/dell-eql-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to