qray.c

Go to the documentation of this file.
00001 /*                          Q R A Y . C
00002  * BRL-CAD
00003  *
00004  * Copyright (c) 1998-2006 United States Government as represented by
00005  * the U.S. Army Research Laboratory.
00006  *
00007  * This library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public License
00009  * as published by the Free Software Foundation; either version 2 of
00010  * the License, or (at your option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful, but
00013  * WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Library General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with this file; see the file named COPYING for more
00019  * information.
00020  */
00021 
00022 /** @addtogroup librt */
00023 /*@{*/
00024 /** @file qray.c
00025  * Routines to set and get "Query Ray" variables.
00026  *
00027  * Source -
00028  *      SLAD CAD Team
00029  *      The U. S. Army Research Laboratory
00030  *      Aberdeen Proving Ground, Maryland  21005
00031  *
00032  * Author -
00033  *      Robert G. Parker
00034  *
00035  */
00036 
00037 #include "common.h"
00038 
00039 
00040 
00041 #include <stdio.h>
00042 
00043 #ifdef HAVE_STRING_H
00044 #include <string.h>
00045 #else
00046 #include <strings.h>
00047 #endif
00048 
00049 #include "machine.h"
00050 #include "bu.h"
00051 #include "vmath.h"
00052 #include "raytrace.h"
00053 #include "./qray.h"
00054 
00055 static void qray_print_fmts(struct dg_obj *dgop, Tcl_Interp *interp);
00056 static void qray_print_vars(struct dg_obj *dgop, Tcl_Interp *interp);
00057 static int qray_get_fmt_index(struct dg_obj *dgop, char c);
00058 
00059 static struct dg_qray_color def_qray_odd_color = { 0, 255, 255 };
00060 static struct dg_qray_color def_qray_even_color = { 255, 255, 0 };
00061 static struct dg_qray_color def_qray_void_color = { 255, 0, 255 };
00062 static struct dg_qray_color def_qray_overlap_color = { 255, 255, 255 };
00063 
00064 static struct dg_qray_fmt_data def_qray_fmt_data[] = {
00065   {'r', "\"Origin (x y z) = (%.2f %.2f %.2f)  (h v d) = (%.2f %.2f %.2f)\\nDirection (x y z) = (%.4f %.4f %.4f)  (az el) = (%.2f %.2f)\\n\" x_orig y_orig z_orig h v d_orig x_dir y_dir z_dir a e"},
00066   {'h', "\"    Region Name               Entry (x y z)              LOS  Obliq_in\\n\""},
00067   {'p', "\"%-20s (%9.3f %9.3f %9.3f) %8.2f %8.3f\\n\" reg_name x_in y_in z_in los obliq_in"},
00068   {'f', "\"\""},
00069   {'m', "\"You missed the target\\n\""},
00070   {'o', "\"OVERLAP: '%s' and '%s' xyz_in=(%g %g %g) los=%g\\n\" ov_reg1_name ov_reg2_name ov_x_in ov_y_in ov_z_in ov_los"},
00071   {(char)NULL, (char *)NULL}
00072 };
00073 
00074 static char qray_syntax[] = "\
00075  qray vars                      print a list of all variables (i.e. var = val)\n\
00076  qray basename [str]            set or get basename for query ray prims\n\
00077  qray effects [t|g|b]           set or get effects (i.e. text, graphical or both)\n\
00078  qray echo [0|1]                set or get command echo\n\
00079  qray oddcolor [r g b]          set or get color of odd partitions\n\
00080  qray evencolor [r g b]         set or get color of even partitions\n\
00081  qray voidcolor [r g b]         set or get color of void areas\n\
00082  qray overlapcolor [r g b]      set or get color of overlap areas\n\
00083  qray fmt [r|h|p|f|m|o [str]]   set or get format string(s)\n\
00084  qray script [str]              set or get the nirt script string\n\
00085  qray [help]                    print this help message\n\
00086 ";
00087 
00088 static void
00089 qray_print_fmts(struct dg_obj   *dgop,
00090                 Tcl_Interp      *interp)
00091 {
00092         int i;
00093 
00094         for (i = 0; dgop->dgo_qray_fmts[i].type != (char)NULL; ++i)
00095                 Tcl_AppendResult(interp, bu_vls_addr(&dgop->dgo_qray_fmts[i].fmt),
00096                                  "\n", (char *)NULL);
00097 }
00098 
00099 static void
00100 qray_print_vars(struct dg_obj   *dgop,
00101                 Tcl_Interp      *interp)
00102 {
00103         struct bu_vls vls;
00104 
00105         bu_vls_init(&vls);
00106         bu_vls_printf(&vls, "basename = %s\n", bu_vls_addr(&dgop->dgo_qray_basename));
00107         bu_vls_printf(&vls, "script = %s\n", bu_vls_addr(&dgop->dgo_qray_script));
00108         bu_vls_printf(&vls, "effects = %c\n", dgop->dgo_qray_effects);
00109         bu_vls_printf(&vls, "echo = %d\n", dgop->dgo_qray_cmd_echo);
00110         bu_vls_printf(&vls, "oddcolor = %d %d %d\n",
00111                       dgop->dgo_qray_odd_color.r, dgop->dgo_qray_odd_color.g, dgop->dgo_qray_odd_color.b);
00112         bu_vls_printf(&vls, "evencolor = %d %d %d\n",
00113                       dgop->dgo_qray_even_color.r, dgop->dgo_qray_even_color.g, dgop->dgo_qray_even_color.b);
00114         bu_vls_printf(&vls, "voidcolor = %d %d %d\n",
00115                       dgop->dgo_qray_void_color.r, dgop->dgo_qray_void_color.g, dgop->dgo_qray_void_color.b);
00116         bu_vls_printf(&vls, "overlapcolor = %d %d %d\n",
00117                       dgop->dgo_qray_overlap_color.r, dgop->dgo_qray_overlap_color.g, dgop->dgo_qray_overlap_color.b);
00118         Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00119         bu_vls_free(&vls);
00120 
00121         qray_print_fmts(dgop, interp);
00122 }
00123 
00124 static int
00125 qray_get_fmt_index(struct dg_obj        *dgop,
00126                    char                 c)
00127 {
00128         int i;
00129 
00130         for (i = 0; dgop->dgo_qray_fmts[i].type != (char)NULL; ++i)
00131                 if (c == dgop->dgo_qray_fmts[i].type)
00132                         return i;
00133 
00134         return -1;
00135 }
00136 
00137 int
00138 dgo_qray_cmd(struct dg_obj      *dgop,
00139             Tcl_Interp          *interp,
00140             int                 argc,
00141             char                **argv)
00142 {
00143         struct bu_vls vls;
00144 
00145         if (6 < argc) {
00146                 bu_vls_init(&vls);
00147                 bu_vls_printf(&vls, "helplib_alias dgo_qray %s", argv[0]);
00148                 Tcl_Eval(interp, bu_vls_addr(&vls));
00149                 bu_vls_free(&vls);
00150 
00151                 return TCL_ERROR;
00152         }
00153 
00154         /* print help message */
00155         if (argc == 1) {
00156                 Tcl_AppendResult(interp, "Usage:\n", qray_syntax, (char *)NULL);
00157                 return TCL_OK;
00158         }
00159 
00160         if (strcmp(argv[1], "fmt") == 0) {
00161                 int i;
00162 
00163                 if (argc == 2) {                        /* get all format strings */
00164                         qray_print_fmts(dgop, interp);
00165                         return TCL_OK;
00166                 } else if (argc == 3) {         /* get particular format string */
00167                         if ((i = qray_get_fmt_index(dgop, *argv[2])) < 0) {
00168                                 Tcl_AppendResult(interp,
00169                                                  "qray: unrecognized format type: '",
00170                                                  argv[2], "'\nUsage:\n", qray_syntax, (char *)NULL);
00171                                 return TCL_ERROR;
00172                         }
00173 
00174                         Tcl_AppendResult(interp, bu_vls_addr(&dgop->dgo_qray_fmts[i].fmt), (char *)NULL);
00175                         return TCL_OK;
00176                 } else if (argc == 4) {         /* set value */
00177                         if ((i = qray_get_fmt_index(dgop, *argv[2])) < 0) {
00178                                 Tcl_AppendResult(interp,
00179                                                  "qray: unrecognized format type: '",
00180                                                  argv[2], "'\nUsage:\n", qray_syntax, (char *)NULL);
00181                                 return TCL_ERROR;
00182                         }
00183 
00184                         bu_vls_trunc(&dgop->dgo_qray_fmts[i].fmt, 0);
00185                         bu_vls_printf(&dgop->dgo_qray_fmts[i].fmt, "%s", argv[3]);
00186                         return TCL_OK;
00187                 }
00188 
00189                 Tcl_AppendResult(interp,
00190                                  "The 'qray fmt' command accepts 0, 1, or 2 arguments\n",
00191                                  (char *)NULL);
00192                 return TCL_ERROR;
00193         }
00194 
00195         if (strcmp(argv[1], "basename") == 0) {
00196                 if (argc == 2) {                /* get value */
00197                         Tcl_AppendResult(interp, bu_vls_addr(&dgop->dgo_qray_basename), (char *)NULL);
00198 
00199                         return TCL_OK;
00200                 } else if (argc == 3) {         /* set value */
00201                         bu_vls_strcpy(&dgop->dgo_qray_basename, argv[2]);
00202                         return TCL_OK;
00203                 }
00204 
00205                 Tcl_AppendResult(interp,
00206                                  "The 'qray basename' command accepts 0 or 1 argument\n",
00207                                  (char *)NULL);
00208                 return TCL_ERROR;
00209         }
00210 
00211         if (strcmp(argv[1], "script") == 0) {
00212                 if (argc == 2) {                /* get value */
00213                         Tcl_AppendResult(interp, bu_vls_addr(&dgop->dgo_qray_script), (char *)NULL);
00214 
00215                         return TCL_OK;
00216                 } else if (argc == 3) {         /* set value */
00217                         bu_vls_strcpy(&dgop->dgo_qray_script, argv[2]);
00218                         return TCL_OK;
00219                 }
00220 
00221                 Tcl_AppendResult(interp,
00222                                  "The 'qray script' command accepts 0 or 1 argument\n",
00223                                  (char *)NULL);
00224                 return TCL_ERROR;
00225         }
00226 
00227         if (strcmp(argv[1], "effects") == 0) {
00228                 if (argc == 2) {                /* get value */
00229                         bu_vls_init(&vls);
00230                         bu_vls_printf(&vls, "%c", dgop->dgo_qray_effects);
00231                         Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00232                         bu_vls_free(&vls);
00233 
00234                         return TCL_OK;
00235                 } else if (argc == 3) {         /* set value */
00236                         if (*argv[2] != 't' && *argv[2] != 'g' && *argv[2] != 'b') {
00237                                 bu_vls_init(&vls);
00238                                 bu_vls_printf(&vls, "qray effects: bad value - %s", argv[2]);
00239                                 Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00240                                 bu_vls_free(&vls);
00241 
00242                                 return TCL_ERROR;
00243                         }
00244 
00245                         dgop->dgo_qray_effects = *argv[2];
00246 
00247                         return TCL_OK;
00248                 }
00249 
00250                 Tcl_AppendResult(interp,
00251                                  "The 'qray effects' command accepts 0 or 1 argument\n",
00252                                  (char *)NULL);
00253                 return TCL_ERROR;
00254         }
00255 
00256         if (strcmp(argv[1], "echo") == 0) {
00257                 if (argc == 2) {                /* get value */
00258                         if (dgop->dgo_qray_cmd_echo)
00259                                 Tcl_AppendResult(interp, "1", (char *)NULL);
00260                         else
00261                                 Tcl_AppendResult(interp, "0", (char *)NULL);
00262 
00263                         return TCL_OK;
00264                 } else if (argc == 3) {         /* set value */
00265                         int ival;
00266 
00267                         if (sscanf(argv[2], "%d", &ival) < 1) {
00268                                 bu_vls_init(&vls);
00269                                 bu_vls_printf(&vls, "qray echo: bad value - %s", argv[2]);
00270                                 Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00271                                 bu_vls_free(&vls);
00272 
00273                                 return TCL_ERROR;
00274                         }
00275 
00276                         if (ival)
00277                                 dgop->dgo_qray_cmd_echo = 1;
00278                         else
00279                                 dgop->dgo_qray_cmd_echo = 0;
00280 
00281                         return TCL_OK;
00282                 }
00283 
00284                 Tcl_AppendResult(interp,
00285                                  "The 'qray echo' command accepts 0 or 1 argument\n",
00286                                  (char *)NULL);
00287                 return TCL_ERROR;
00288         }
00289 
00290         if (strcmp(argv[1], "oddcolor") == 0) {
00291                 if (argc == 2) {                /* get value */
00292                         bu_vls_init(&vls);
00293                         bu_vls_printf(&vls, "%d %d %d",
00294                                       dgop->dgo_qray_odd_color.r, dgop->dgo_qray_odd_color.g, dgop->dgo_qray_odd_color.b);
00295                         Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00296                         bu_vls_free(&vls);
00297 
00298                         return TCL_OK;
00299                 } else if (argc == 5) {         /* set value */
00300                         int r, g, b;
00301 
00302                         if (sscanf(argv[2], "%d", &r) != 1 ||
00303                             sscanf(argv[3], "%d", &g) != 1 ||
00304                             sscanf(argv[4], "%d", &b) != 1 ||
00305                             r < 0 || g < 0 || b < 0 ||
00306                             255 < r || 255 < g || 255 < b){
00307                                 bu_vls_init(&vls);
00308                                 bu_vls_printf(&vls, "qray oddcolor %s %s %s - bad value",
00309                                               argv[2], argv[3], argv[4]);
00310                                 Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00311                                 bu_vls_free(&vls);
00312                         }
00313 
00314                         dgop->dgo_qray_odd_color.r = r;
00315                         dgop->dgo_qray_odd_color.g = g;
00316                         dgop->dgo_qray_odd_color.b = b;
00317 
00318                         return TCL_OK;
00319                 }
00320 
00321                 Tcl_AppendResult(interp,
00322                                  "The 'qray oddcolor' command accepts 0 or 3 arguments\n",
00323                                  (char *)NULL);
00324                 return TCL_ERROR;
00325         }
00326 
00327         if (strcmp(argv[1], "evencolor") == 0) {
00328                 if (argc == 2) {                /* get value */
00329                         bu_vls_init(&vls);
00330                         bu_vls_printf(&vls, "%d %d %d",
00331                                       dgop->dgo_qray_even_color.r, dgop->dgo_qray_even_color.g, dgop->dgo_qray_even_color.b);
00332                         Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00333                         bu_vls_free(&vls);
00334 
00335                         return TCL_OK;
00336                 } else if (argc == 5) {         /* set value */
00337                         int r, g, b;
00338 
00339                         if (sscanf(argv[2], "%d", &r) != 1 ||
00340                             sscanf(argv[3], "%d", &g) != 1 ||
00341                             sscanf(argv[4], "%d", &b) != 1 ||
00342                             r < 0 || g < 0 || b < 0 ||
00343                             255 < r || 255 < g || 255 < b) {
00344                                 bu_vls_init(&vls);
00345                                 bu_vls_printf(&vls, "qray evencolor %s %s %s - bad value",
00346                                               argv[2], argv[3], argv[4]);
00347                                 Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00348                                 bu_vls_free(&vls);
00349                         }
00350 
00351                         dgop->dgo_qray_even_color.r = r;
00352                         dgop->dgo_qray_even_color.g = g;
00353                         dgop->dgo_qray_even_color.b = b;
00354 
00355                         return TCL_OK;
00356                 }
00357 
00358                 Tcl_AppendResult(interp,
00359                                  "The 'qray evencolor' command accepts 0 or 3 arguments\n",
00360                                  (char *)NULL);
00361                 return TCL_ERROR;
00362         }
00363 
00364         if (strcmp(argv[1], "voidcolor") == 0) {
00365                 if (argc == 2) {                /* get value */
00366                         bu_vls_init(&vls);
00367                         bu_vls_printf(&vls, "%d %d %d",
00368                                       dgop->dgo_qray_void_color.r, dgop->dgo_qray_void_color.g, dgop->dgo_qray_void_color.b);
00369                         Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00370                         bu_vls_free(&vls);
00371 
00372                         return TCL_OK;
00373                 } else if (argc == 5) {         /* set value */
00374                         int r, g, b;
00375 
00376                         if (sscanf(argv[2], "%d", &r) != 1 ||
00377                             sscanf(argv[3], "%d", &g) != 1 ||
00378                             sscanf(argv[4], "%d", &b) != 1 ||
00379                             r < 0 || g < 0 || b < 0 ||
00380                             255 < r || 255 < g || 255 < b) {
00381                                 bu_vls_init(&vls);
00382                                 bu_vls_printf(&vls, "qray voidcolor %s %s %s - bad value",
00383                                               argv[2], argv[3], argv[4]);
00384                                 Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00385                                 bu_vls_free(&vls);
00386                         }
00387 
00388                         dgop->dgo_qray_void_color.r = r;
00389                         dgop->dgo_qray_void_color.g = g;
00390                         dgop->dgo_qray_void_color.b = b;
00391 
00392                         return TCL_OK;
00393                 }
00394 
00395                 Tcl_AppendResult(interp,
00396                                  "The 'qray voidcolor' command accepts 0 or 3 arguments\n",
00397                                  (char *)NULL);
00398                 return TCL_ERROR;
00399         }
00400 
00401         if (strcmp(argv[1], "overlapcolor") == 0) {
00402                 if (argc == 2) {                /* get value */
00403                         bu_vls_init(&vls);
00404                         bu_vls_printf(&vls, "%d %d %d",
00405                                       dgop->dgo_qray_overlap_color.r, dgop->dgo_qray_overlap_color.g, dgop->dgo_qray_overlap_color.b);
00406                         Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00407                         bu_vls_free(&vls);
00408 
00409                         return TCL_OK;
00410                 } else if (argc == 5) {         /* set value */
00411                         int r, g, b;
00412 
00413                         if (sscanf(argv[2], "%d", &r) != 1 ||
00414                             sscanf(argv[3], "%d", &g) != 1 ||
00415                             sscanf(argv[4], "%d", &b) != 1 ||
00416                             r < 0 || g < 0 || b < 0 ||
00417                             255 < r || 255 < g || 255 < b){
00418                                 bu_vls_init(&vls);
00419                                 bu_vls_printf(&vls, "qray overlapcolor %s %s %s - bad value",
00420                                               argv[2], argv[3], argv[4]);
00421                                 Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL);
00422                                 bu_vls_free(&vls);
00423                         }
00424 
00425                         dgop->dgo_qray_overlap_color.r = r;
00426                         dgop->dgo_qray_overlap_color.g = g;
00427                         dgop->dgo_qray_overlap_color.b = b;
00428 
00429                         return TCL_OK;
00430                 }
00431 
00432                 Tcl_AppendResult(interp,
00433                                  "The 'qray overlapcolor' command accepts 0 or 3 arguments\n",
00434                                  (char *)NULL);
00435                 return TCL_ERROR;
00436         }
00437 
00438         if (strcmp(argv[1], "vars") == 0) {
00439                 qray_print_vars(dgop, interp);
00440                 return TCL_OK;
00441         }
00442 
00443         if (strcmp(argv[1], "help") == 0) {
00444                 Tcl_AppendResult(interp, "Usage:\n", qray_syntax, (char *)NULL);
00445                 return TCL_OK;
00446         }
00447 
00448         Tcl_AppendResult(interp, "qray: unrecognized command: '",
00449                          argv[1], "'\nUsage:\n", qray_syntax, (char *)NULL);
00450         return TCL_ERROR;
00451 }
00452 
00453 void
00454 dgo_init_qray(struct dg_obj     *dgop)
00455 {
00456         register int i;
00457         register int n = 0;
00458         struct dg_qray_fmt_data *qfdp;
00459 
00460         bu_vls_init(&dgop->dgo_qray_basename);
00461         bu_vls_strcpy(&dgop->dgo_qray_basename, DG_QRAY_BASENAME);
00462         bu_vls_init(&dgop->dgo_qray_script);
00463 
00464         dgop->dgo_qray_effects = 'b';
00465         dgop->dgo_qray_cmd_echo = 0;
00466         dgop->dgo_qray_odd_color = def_qray_odd_color;
00467         dgop->dgo_qray_even_color = def_qray_even_color;
00468         dgop->dgo_qray_void_color = def_qray_void_color;
00469         dgop->dgo_qray_overlap_color = def_qray_overlap_color;
00470 
00471         /* count the number of default format types */
00472         for(qfdp = def_qray_fmt_data; qfdp->fmt != (char *)NULL; ++qfdp)
00473                 ++n;
00474 
00475         dgop->dgo_qray_fmts = (struct dg_qray_fmt *)bu_malloc(sizeof(struct dg_qray_fmt) * n + 1, "qray_fmts");
00476 
00477         for (i = 0; i < n; ++i) {
00478                 dgop->dgo_qray_fmts[i].type = def_qray_fmt_data[i].type;
00479                 bu_vls_init(&dgop->dgo_qray_fmts[i].fmt);
00480                 bu_vls_strcpy(&dgop->dgo_qray_fmts[i].fmt, def_qray_fmt_data[i].fmt);
00481         }
00482 
00483         dgop->dgo_qray_fmts[i].type = (char)NULL;
00484 }
00485 
00486 void
00487 dgo_free_qray(struct dg_obj     *dgop)
00488 {
00489         register int i;
00490 
00491         bu_vls_free(&dgop->dgo_qray_basename);
00492         bu_vls_free(&dgop->dgo_qray_script);
00493         for (i = 0; dgop->dgo_qray_fmts[i].type != (char)NULL; ++i)
00494                 bu_vls_free(&dgop->dgo_qray_fmts[i].fmt);
00495         bu_free(dgop->dgo_qray_fmts, "dgo_free_qray");
00496 }
00497 
00498 void
00499 dgo_qray_data_to_vlist(struct dg_obj            *dgop,
00500                        struct bn_vlblock        *vbp,
00501                        struct dg_qray_dataList  *headp,
00502                        vect_t                   dir,
00503                        int                      do_overlaps)
00504 {
00505         register int i = 1;                     /* start out odd */
00506         register struct bu_list *vhead;
00507         register struct dg_qray_dataList *ndlp;
00508         vect_t in_pt, out_pt;
00509         vect_t last_out_pt;
00510 
00511         for (BU_LIST_FOR(ndlp, dg_qray_dataList, &headp->l)) {
00512                 if (do_overlaps)
00513                         vhead = rt_vlblock_find(vbp,
00514                                                 dgop->dgo_qray_overlap_color.r,
00515                                                 dgop->dgo_qray_overlap_color.g,
00516                                                 dgop->dgo_qray_overlap_color.b);
00517                 else if(i % 2)
00518                         vhead = rt_vlblock_find(vbp,
00519                                                 dgop->dgo_qray_odd_color.r,
00520                                                 dgop->dgo_qray_odd_color.g,
00521                                                 dgop->dgo_qray_odd_color.b);
00522                 else
00523                         vhead = rt_vlblock_find(vbp,
00524                                                 dgop->dgo_qray_even_color.r,
00525                                                 dgop->dgo_qray_even_color.g,
00526                                                 dgop->dgo_qray_even_color.b);
00527 
00528                 VSET(in_pt, ndlp->x_in, ndlp->y_in, ndlp->z_in);
00529                 VJOIN1(out_pt, in_pt, ndlp->los, dir);
00530                 VSCALE(in_pt, in_pt, dgop->dgo_wdbp->dbip->dbi_local2base);
00531                 VSCALE(out_pt, out_pt, dgop->dgo_wdbp->dbip->dbi_local2base);
00532                 RT_ADD_VLIST( vhead, in_pt, RT_VLIST_LINE_MOVE );
00533                 RT_ADD_VLIST( vhead, out_pt, RT_VLIST_LINE_DRAW );
00534 
00535                 if (!do_overlaps && i > 1 && !VAPPROXEQUAL(last_out_pt,in_pt,SQRT_SMALL_FASTF)) {
00536                         vhead = rt_vlblock_find(vbp,
00537                                                 dgop->dgo_qray_void_color.r,
00538                                                 dgop->dgo_qray_void_color.g,
00539                                                 dgop->dgo_qray_void_color.b);
00540                         RT_ADD_VLIST( vhead, last_out_pt, RT_VLIST_LINE_MOVE );
00541                         RT_ADD_VLIST( vhead, in_pt, RT_VLIST_LINE_DRAW );
00542                 }
00543 
00544                 VMOVE(last_out_pt, out_pt);
00545                 ++i;
00546         }
00547 }
00548 
00549 /*@}*/
00550 /*
00551  * Local Variables:
00552  * mode: C
00553  * tab-width: 8
00554  * c-basic-offset: 4
00555  * indent-tabs-mode: t
00556  * End:
00557  * ex: shiftwidth=4 tabstop=8
00558  */

Generated on Mon Sep 18 01:24:56 2006 for BRL-CAD by  doxygen 1.4.6