wdb.h

Go to the documentation of this file.
00001 /*                           W D B . H
00002  * BRL-CAD
00003  *
00004  * Copyright (c) 1988-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.1 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 /** @addtogroup wdb */
00022 /*@{*/
00023 /** @file wdb.h
00024  *
00025  *  Interface structures and routines for libwdb
00026  *
00027  *  Note -
00028  *      Rather than using a stdio (FILE *),
00029  *      we now use a (struct rt_wdb *) parameter.
00030  *      Rather than calling fopen(), call wdb_fopen();
00031  *
00032  *  @author
00033  *      Michael John Muuss
00034  *
00035  *  @par Source
00036  *      SECAD/VLD Computing Consortium, Bldg 394
00037  *      The U. S. Army Ballistic Research Laboratory
00038  *      Aberdeen Proving Ground, Maryland  21005
00039  *
00040  *  Include Sequencing -
00041  *      #  include <stdio.h>    /_* For FILE * *_/
00042  *      # include <math.h>
00043  *      # include "machine.h"   /_* For fastf_t definition on this machine *_/
00044  *      # include "bu.h"
00045  *      # include "vmath.h"     /_* For vect_t definition *_/
00046  *      # include "nmg.h"       /_* OPTIONAL, precedes wdb.h when used *_/
00047  *      # include "raytrace.h"  /_* OPTIONAL, precedes wdb.h when used *_/
00048  *      # include "nurb.h"      /_* OPTIONAL, precedes wdb.h when used *_/
00049  *      # include "rtgeom.h"
00050  *      # include "wdb.h"
00051  *
00052  *  Libraries Used -
00053  *      LIBWDB LIBRT LIBRT_LIBES -lm -lc
00054  *
00055  *  $Header: /cvsroot/brlcad/brlcad/include/wdb.h,v 14.15 2006/09/18 05:24:07 lbutler Exp $
00056  */
00057 #ifndef SEEN_BU_H
00058 # include "bu.h"
00059 #endif
00060 
00061 #ifndef SEEN_BN_H
00062 # include "bn.h"
00063 #endif
00064 
00065 #ifndef RAYTRACE_H
00066 # include "raytrace.h"
00067 #endif
00068 
00069 #ifndef SEEN_RTGEOM_H
00070 # include "rtgeom.h"
00071 #endif
00072 
00073 #ifndef WDB_H
00074 #define WDB_H seen
00075 
00076 __BEGIN_DECLS
00077 
00078 #ifndef WDB_EXPORT
00079 #  if defined(_WIN32) && !defined(__CYGWIN__) && defined(BRLCAD_DLL)
00080 #    ifdef WDB_EXPORT_DLL
00081 #      define WDB_EXPORT __declspec(dllexport)
00082 #    else
00083 #      define WDB_EXPORT __declspec(dllimport)
00084 #    endif
00085 #  else
00086 #    define WDB_EXPORT
00087 #  endif
00088 #endif
00089 
00090 /*
00091  *  Macros for providing function prototypes, regardless of whether
00092  *  the compiler understands them or not.
00093  *  It is vital that the argument list given for "args" be enclosed
00094  *  in parens.
00095  */
00096 #if __STDC__ || USE_PROTOTYPES
00097 #  define WDB_EXTERN(type_and_name,args)        extern type_and_name args
00098 #  define WDB_ARGS(args)                        args
00099 #else
00100 #  define WDB_EXTERN(type_and_name,args)        extern type_and_name()
00101 #  define WDB_ARGS(args)                        ()
00102 #endif
00103 
00104 /*
00105  *  In-memory form of database combinations
00106  */
00107 struct wmember  {
00108         struct bu_list  l;
00109         int             wm_op;          /**< @brief  Boolean operation */
00110         mat_t           wm_mat;         /**< @brief  XXX Should be matp_t !!! */
00111         char            *wm_name;
00112 };
00113 #define WMEMBER_NULL    ((struct wmember *)0)
00114 #define WMEMBER_MAGIC   0x43128912
00115 #define WDB_CK_WMEMBER(_p)      BU_CKMAG(_p, WMEMBER_MAGIC, "wmember" );
00116 
00117 /*
00118  *  Definitions for pipe (wire) segments
00119  * XXX Why isn't this in rtgeom.h?
00120  */
00121 
00122 struct wdb_pipept {
00123         struct bu_list  l;              /**< @brief  doubly linked list support */
00124         point_t         pp_coord;       /**< @brief  "control" point for pipe solid */
00125         fastf_t         pp_id;          /**< @brief  inner diam, <=0 if solid (wire) */
00126         fastf_t         pp_od;          /**< @brief  pipe outer diam */
00127         fastf_t         pp_bendradius;  /**< @brief  bend radius to use for a bend at this point */
00128 };
00129 
00130 #define WDB_PIPESEG_NULL        ((struct wdb_pipeseg *)0)
00131 #define WDB_PIPESEG_MAGIC       0x9723ffef
00132 
00133 struct wdb_metaballpt {
00134         struct bu_list  l;
00135         point_t         coord;
00136         fastf_t         fldstr;         /**< @brief  field strength */
00137 };
00138 #define WDB_METABALLPT_NULL     ((struct wdb_metaballpt *)0)
00139 #define WDB_METABALLPT_MAGIC    0x6D627074      /**< @brief  mbpt */
00140 
00141 
00142 WDB_EXPORT WDB_EXTERN(int mk_id, (struct rt_wdb *fp, const char *title) );
00143 WDB_EXPORT WDB_EXTERN(int mk_id_units, (struct rt_wdb *fp, const char *title, const char *units) );
00144 WDB_EXPORT int mk_id_editunits(
00145         struct rt_wdb *fp,
00146         const char *title,
00147         double local2mm );
00148 
00149 /*
00150  *  Solid conversion routines
00151  */
00152 /* libwdb/wdb.c */
00153 WDB_EXPORT WDB_EXTERN(int mk_half, (struct rt_wdb *fp, const char *name, const vect_t norm, double d) );
00154 WDB_EXPORT int mk_grip(
00155         struct rt_wdb *wdbp,
00156         const char *name,
00157         const point_t center,
00158         const vect_t normal,
00159         const fastf_t magnitude );
00160 WDB_EXPORT WDB_EXTERN(int mk_rpp, (struct rt_wdb *fp, const char *name, const point_t min,
00161                         const point_t max) );
00162 WDB_EXPORT WDB_EXTERN(int mk_wedge, (struct rt_wdb *fp, const char *name, const point_t vert,
00163                         const vect_t xdirv, const vect_t zdirv,
00164                         fastf_t xlen, fastf_t ylen, fastf_t zlen,
00165                         fastf_t x_top_len) );
00166 WDB_EXPORT WDB_EXTERN(int mk_arb4, (struct rt_wdb *fp, const char *name, const fastf_t *pts4) );
00167 WDB_EXPORT WDB_EXTERN(int mk_arb8, (struct rt_wdb *fp, const char *name, const fastf_t *pts8) );
00168 WDB_EXPORT WDB_EXTERN(int mk_sph, (struct rt_wdb *fp, const char *name, const point_t center,
00169                         fastf_t radius) );
00170 WDB_EXPORT WDB_EXTERN(int mk_ell, (struct rt_wdb *fp, const char *name, const point_t center,
00171                         const vect_t a, const vect_t b, const vect_t c) );
00172 WDB_EXPORT WDB_EXTERN(int mk_tor, (struct rt_wdb *fp, const char *name, const point_t center,
00173                         const vect_t inorm, double r1, double r2) );
00174 WDB_EXPORT WDB_EXTERN(int mk_rcc, (struct rt_wdb *fp, const char *name, const point_t base,
00175                         const vect_t height, fastf_t radius) );
00176 WDB_EXPORT WDB_EXTERN(int mk_tgc, (struct rt_wdb *fp, const char *name, const point_t base,
00177                         const vect_t height, const vect_t a, const vect_t b,
00178                         const vect_t c, const vect_t d) );
00179 WDB_EXPORT WDB_EXTERN(int mk_cone, (struct rt_wdb *fp, const char *name, const point_t base,
00180                         const vect_t dirv, fastf_t height, fastf_t rad1,
00181                         fastf_t rad2) );
00182 #define mk_trc(wrong)   +++error_obsolete_libwdb_routine+++     /* This routine no longer exists */
00183 WDB_EXPORT WDB_EXTERN(int mk_trc_h, (struct rt_wdb *fp, const char *name, const point_t base,
00184                         const vect_t height, fastf_t radbase, fastf_t radtop) );
00185 WDB_EXPORT WDB_EXTERN(int mk_trc_top, (struct rt_wdb *fp, const char *name, const point_t ibase,
00186                         const point_t itop, fastf_t radbase, fastf_t radtop) );
00187 WDB_EXPORT int mk_rpc(
00188         struct rt_wdb *wdbp,
00189         const char *name,
00190         const point_t vert,
00191         const vect_t height,
00192         const vect_t breadth,
00193         double half_w );
00194 WDB_EXPORT int mk_rhc(
00195         struct rt_wdb *wdbp,
00196         const char *name,
00197         const point_t vert,
00198         const vect_t height,
00199         const vect_t breadth,
00200         fastf_t half_w,
00201         fastf_t asymp );
00202 WDB_EXPORT int mk_epa(
00203         struct rt_wdb *wdbp,
00204         const char *name,
00205         const point_t vert,
00206         const vect_t height,
00207         const vect_t breadth,
00208         fastf_t r1,
00209         fastf_t r2 );
00210 WDB_EXPORT int mk_ehy(
00211         struct rt_wdb *wdbp,
00212         const char *name,
00213         const point_t vert,
00214         const vect_t height,
00215         const vect_t breadth,
00216         fastf_t r1,
00217         fastf_t r2,
00218         fastf_t c );
00219 WDB_EXPORT int mk_eto(
00220         struct rt_wdb *wdbp,
00221         const char *name,
00222         const point_t vert,
00223         const vect_t norm,
00224         const vect_t smajor,
00225         fastf_t rrot,
00226         fastf_t sminor );
00227 
00228 WDB_EXPORT WDB_EXTERN(int mk_arbn, (struct rt_wdb *fp, const char *name, int neqn, plane_t eqn[]) );
00229 WDB_EXPORT WDB_EXTERN(int mk_ars, (struct rt_wdb *fp, const char *name, int ncurves, int pts_per_curve,
00230                         fastf_t *curves[]) );
00231 
00232 typedef enum {
00233     WDB_BINUNIF_FLOAT,
00234     WDB_BINUNIF_DOUBLE,
00235     WDB_BINUNIF_CHAR,
00236     WDB_BINUNIF_UCHAR,
00237     WDB_BINUNIF_SHORT,
00238     WDB_BINUNIF_USHORT,
00239     WDB_BINUNIF_INT,
00240     WDB_BINUNIF_UINT,
00241     WDB_BINUNIF_LONG,
00242     WDB_BINUNIF_ULONG,
00243     WDB_BINUNIF_LONGLONG,
00244     WDB_BINUNIF_ULONGLONG,
00245     WDB_BINUNIF_INT8,
00246     WDB_BINUNIF_UINT8,
00247     WDB_BINUNIF_INT16,
00248     WDB_BINUNIF_UINT16,
00249     WDB_BINUNIF_INT32,
00250     WDB_BINUNIF_UINT32,
00251     WDB_BINUNIF_INT64,
00252     WDB_BINUNIF_UINT64,
00253     WDB_BINUNIF_FILE_FLOAT,
00254     WDB_BINUNIF_FILE_DOUBLE,
00255     WDB_BINUNIF_FILE_CHAR,
00256     WDB_BINUNIF_FILE_UCHAR,
00257     WDB_BINUNIF_FILE_SHORT,
00258     WDB_BINUNIF_FILE_USHORT,
00259     WDB_BINUNIF_FILE_INT,
00260     WDB_BINUNIF_FILE_UINT,
00261     WDB_BINUNIF_FILE_LONG,
00262     WDB_BINUNIF_FILE_ULONG,
00263     WDB_BINUNIF_FILE_LONGLONG,
00264     WDB_BINUNIF_FILE_ULONGLONG,
00265     WDB_BINUNIF_FILE_INT8,
00266     WDB_BINUNIF_FILE_UINT8,
00267     WDB_BINUNIF_FILE_INT16,
00268     WDB_BINUNIF_FILE_UINT16,
00269     WDB_BINUNIF_FILE_INT32,
00270     WDB_BINUNIF_FILE_UINT32,
00271     WDB_BINUNIF_FILE_INT64,
00272     WDB_BINUNIF_FILE_UINT64
00273 } wdb_binunif;
00274 WDB_EXPORT WDB_EXTERN(int mk_binunif, (struct rt_wdb *fp, const char *name, const genptr_t data, wdb_binunif data_type, long count) );
00275 
00276 #define mk_bsolid(fp,name,nsurf,res)    +++error_obsolete_libwdb_routine+++
00277 #define mk_bsurf(fp,srf)                +++error_obsolete_libwdb_routine+++
00278 
00279 /* bot.c */
00280 WDB_EXPORT int
00281 mk_bot(
00282         struct rt_wdb *fp,
00283         const char *name,
00284         unsigned char   mode,
00285         unsigned char   orientation,
00286         unsigned char   error_mode,     /**<  may be used to indicate error handling (ignored for now) */
00287         int             num_vertices,
00288         int             num_faces,
00289         fastf_t         *vertices,      /**<  array of floats for vertices [num_vertices*3] */
00290         int             *faces,         /**<  array of ints for faces [num_faces*3] */
00291         fastf_t         *thickness,     /**<  array of plate mode thicknesses (corresponds to array of faces)
00292                                          * NULL for modes RT_BOT_SURFACE and RT_BOT_SOLID.
00293                                          */
00294         struct bu_bitv  *face_mode );   /**<  a flag for each face indicating thickness is appended to hit point,
00295                                          * otherwise thickness is centered about hit point
00296                                          */
00297 WDB_EXPORT int
00298 mk_bot_w_normals(
00299         struct rt_wdb *fp,
00300         const char *name,
00301         unsigned char   mode,
00302         unsigned char   orientation,
00303         unsigned char   flags,
00304         int             num_vertices,
00305         int             num_faces,
00306         fastf_t         *vertices,      /**<  array of floats for vertices [num_vertices*3] */
00307         int             *faces,         /**<  array of ints for faces [num_faces*3] */
00308         fastf_t         *thickness,     /**<  array of plate mode thicknesses (corresponds to array of faces)
00309                                          * NULL for modes RT_BOT_SURFACE and RT_BOT_SOLID.
00310                                          */
00311         struct bu_bitv  *face_mode,     /**<  a flag for each face indicating thickness is appended to hit point,
00312                                          * otherwise thickness is centered about hit point
00313                                          */
00314         int             num_normals,    /**<  number of unit normals in normals array */
00315         fastf_t         *normals,       /**<  array of floats for normals [num_normals*3] */
00316         int             *face_normals );        /**<  array of ints (indices into normals array), must have 3*num_faces entries */
00317 
00318 
00319 /* nurb.c */
00320 WDB_EXPORT int mk_bspline( struct rt_wdb *wdbp, const char *name, struct face_g_snurb **surfs );
00321 
00322 /* nmg.c */
00323 WDB_EXPORT int mk_nmg( struct rt_wdb *filep, const char *name, struct model *m );
00324 WDB_EXPORT int mk_bot_from_nmg( struct rt_wdb *ofp, const char *name, struct shell *s );
00325 
00326 #define write_shell_as_polysolid(ofp,name,s)    mk_bot_from_nmg(ofp,name,s)
00327 
00328 /* skt.c */
00329 WDB_EXPORT int mk_sketch(
00330         struct rt_wdb *fp,
00331         const char *name,
00332         struct rt_sketch_internal *skt );
00333 
00334 /* extr.c */
00335 WDB_EXPORT int mk_extrusion(
00336         struct rt_wdb *fp,
00337         const char *name,
00338         const char *sketch_name,
00339         const point_t V,
00340         const vect_t h,
00341         const vect_t u_vec,
00342         const vect_t v_vec,
00343         int keypoint );
00344 
00345 /* cline.c */
00346 WDB_EXPORT int mk_cline(
00347         struct rt_wdb *fp,
00348         const char *name,
00349         const point_t V,
00350         const vect_t height,
00351         fastf_t radius,
00352         fastf_t thickness );
00353 
00354 /* pipe.c */
00355 WDB_EXPORT WDB_EXTERN(int mk_particle, (struct rt_wdb *fp, const char *name, point_t vertex,
00356                         vect_t height, double vradius, double hradius) );
00357 WDB_EXPORT WDB_EXTERN(int mk_pipe, (struct rt_wdb *fp, const char *name, struct bu_list *headp) );
00358 WDB_EXPORT void mk_pipe_free( struct bu_list *headp );
00359 WDB_EXPORT void mk_add_pipe_pt(
00360         struct bu_list *headp,
00361         const point_t coord,
00362         double od,
00363         double id,
00364         double bendradius );
00365 WDB_EXPORT void mk_pipe_init( struct bu_list *headp );
00366 
00367 /* strsol primitives */
00368 WDB_EXPORT WDB_EXTERN(int mk_dsp, (struct rt_wdb *fp, const char *name, const char *file,
00369                         int xdim, int ydim, const matp_t mat));
00370 WDB_EXPORT WDB_EXTERN(int mk_ebm, (struct rt_wdb *fp, const char *name, const char *file,
00371                         int xdim, int ydim, fastf_t tallness, const matp_t mat));
00372 WDB_EXPORT WDB_EXTERN(int mk_vol, (struct rt_wdb *fp, const char *name, const char *file,
00373                         int xdim, int ydim, int zdim, int lo, int hi,
00374                         const vect_t cellsize, const matp_t mat));
00375 WDB_EXPORT WDB_EXTERN(int mk_submodel, (struct rt_wdb *fp, const char *name, const char *file,
00376                         const char *treetop, int meth));
00377 #define mk_strsol(fp,name,solid,arg)    +++error_obsolete_libwdb_routine+++
00378 
00379 /*
00380  *  The polysolid has been replaced by the BoT.
00381  *  Automatic conversion is provided by rt_pg_to_bot()
00382  */
00383 #define mk_polysolid(fp,name)   +++error_obsolete_libwdb_routine+++
00384 #define mk_poly(fp,npts,verts,norms)    +++error_obsolete_libwdb_routine+++
00385 #define mk_fpoly(fp,npts,verts) +++error_obsolete_libwdb_routine+++
00386 
00387 /* mater.c */
00388 WDB_EXPORT int mk_write_color_table( struct rt_wdb *ofp );
00389 
00390 
00391 /* These routines have been replaced by the construction routines below */
00392 #define mk_rcomb(fp,name,len,reg,shadername,mparam,rgb,id,air,mater,los,flag)   +++error_obsolete_libwdb_routine+++
00393 #define mk_fcomb(fp,name,len,reg)                               +++error_obsolete_libwdb_routine+++
00394 #define mk_memb(fp,name,map,op)                                 +++error_obsolete_libwdb_routine+++
00395 
00396 /*
00397  *  Combination (region&group) construction routines
00398  *
00399  *  First you build a list of nodes with mk_addmember,
00400  *  then you output the combination.
00401  */
00402 WDB_EXPORT WDB_EXTERN (struct wmember *mk_addmember,
00403                        (const char      *name,
00404                         struct bu_list  *headp,
00405                         mat_t           mat,
00406                         int             op));
00407 
00408 #define mk_lcomb(_fp,_name,_headp,_rf,_shadername,_shaderargs,_rgb,_inh)        \
00409         mk_comb(_fp,_name,&((_headp)->l),_rf,_shadername,_shaderargs,\
00410                 _rgb,0,0,0,0,_inh,0,0)
00411 
00412 /* mk_lrcomb() would not append, and did not have GIFT semantics */
00413 /* mk_lrcomb() had (struct wmember *) head, need (struct bu_list *) */
00414 #define mk_lrcomb(fp, name, _headp, region_flag, shadername, shaderargs, rgb, id, air, material, los, inherit_flag )    \
00415         mk_comb( fp, name, &((_headp)->l), region_flag, shadername, shaderargs, \
00416                 rgb, id, air, material, los, inherit_flag, 0, 0 )
00417 
00418 WDB_EXPORT int mk_comb(
00419         struct rt_wdb           *wdbp,
00420         const char              *combname,
00421         struct bu_list          *headp,         /**<  Made by mk_addmember() */
00422         int                     region_kind,    /**<  1 => region.  'P' and 'V' for FASTGEN */
00423         const char              *shadername,    /**<  shader name, or NULL */
00424         const char              *shaderargs,    /**<  shader args, or NULL */
00425         const unsigned char     *rgb,           /**<  NULL => no color */
00426         int                     id,             /**<  region_id */
00427         int                     air,            /**<  aircode */
00428         int                     material,       /**<  GIFTmater */
00429         int                     los,
00430         int                     inherit,
00431         int                     append_ok,      /**<  0 = obj must not exit */
00432         int                     gift_semantics);        /**<  0 = pure, 1 = gift */
00433 
00434 /** Convenience routines for quickly making combinations */
00435 WDB_EXPORT int mk_comb1( struct rt_wdb *fp,
00436         const char *combname,
00437         const char *membname,
00438         int regflag );
00439 WDB_EXPORT int
00440 mk_region1(
00441         struct rt_wdb *fp,
00442         const char *combname,
00443         const char *membname,
00444         const char *shadername,
00445         const char *shaderargs,
00446         const unsigned char *rgb );
00447 
00448 #define mk_fastgen_region(fp,name,headp,mode,shadername,shaderargs,rgb,id,air,material,los,inherit)     \
00449         mk_comb(fp,name,headp,mode,shadername,shaderargs,rgb,id,air,\
00450                 material,los,inherit,0,0)
00451 
00452 
00453 /* Values for wm_op.  These must track db.h */
00454 #define WMOP_INTERSECT  '+'
00455 #define WMOP_SUBTRACT   '-'
00456 #define WMOP_UNION      'u'
00457 
00458 /* Convienient definitions */
00459 #define mk_lfcomb(fp,name,headp,region)         mk_lcomb( fp, name, headp, \
00460         region, (char *)0, (char *)0, (unsigned char *)0, 0 );
00461 
00462 /*
00463  *  Routines to establish conversion factors
00464  */
00465 WDB_EXPORT WDB_EXTERN(int mk_conversion, (char *units_string) );
00466 WDB_EXPORT WDB_EXTERN(int mk_set_conversion, (double val) );
00467 
00468 /**
00469  * This internal variable should not be directly modified;
00470  * call mk_conversion() or mk_set_conversion() instead.
00471  */
00472 WDB_EXPORT extern double        mk_conv2mm;             /**< @brief Conversion factor to mm */
00473 
00474 /**
00475  *  Set this variable to either 4 or 5, depending on which version of
00476  *  the database you wish to write.
00477  */
00478 WDB_EXPORT extern int   mk_version;             /**< @brief  Which version database to write */
00479 
00480 /*
00481  *  Internal routines
00482  */
00483 WDB_EXPORT void mk_freemembers( struct bu_list *headp );
00484 
00485 #define mk_fwrite_internal(fp,name,ip)          +++error_obsolete_libwdb_routine+++
00486 #define mk_export_fwrite(wdbp,name,gp,id)       wdb_export(wdbp,name,gp,id,mk_conv2mm)
00487 
00488 /*
00489  *      Dynamic geometry routines
00490  */
00491 WDB_EXPORT WDB_EXTERN( int make_hole, ( struct rt_wdb *wdbp,
00492                              point_t hole_start,
00493                              vect_t hole_depth,
00494                              fastf_t hole_radius,
00495                              int num_objs,
00496                              struct directory **dp ) );
00497 
00498 WDB_EXPORT WDB_EXTERN( int make_hole_in_prepped_regions, ( struct rt_wdb *wdbp,
00499                                                 struct rt_i *rtip,
00500                                                 point_t hole_start,
00501                                                 vect_t hole_depth,
00502                                                 fastf_t radius,
00503                                                 struct bu_ptbl *regions ) );
00504 
00505 
00506 __END_DECLS
00507 
00508 #endif /* WDB_H */
00509 /*@}*/
00510 /*
00511  * Local Variables:
00512  * mode: C
00513  * tab-width: 8
00514  * c-basic-offset: 4
00515  * indent-tabs-mode: t
00516  * End:
00517  * ex: shiftwidth=4 tabstop=8
00518  */
00519 

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