Editing User:Izak/GSOC 2013 logs

From BRL-CAD

User account "Izak" is not registered. Please check if you want to create/edit this page.

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 38: Line 38:
 
*Edited raytrace.h by defining ID_HRT 43 ,incrementing ID_MAXIMUM and ID_MAX_SOLID to 44 as shown in this patch .
 
*Edited raytrace.h by defining ID_HRT 43 ,incrementing ID_MAXIMUM and ID_MAX_SOLID to 44 as shown in this patch .
  
*Added the DB5_MINORTYPE_BRLCAD_HRT 42 define to db5.h as shown here .
+
*Added the DB5_MINORTYPE_BRLCAD_HRT 42 define to db5.h as shown here .  
  
 
June 19
 
June 19
  
*Hoped to do this today : Need to look at the "Metaball" paper on using the blobby method , read volume rendering by Drebin et al and edit magic.h and rtgeom.h to include the heart primitive .
+
*Hoped to do this today  
 +
  Need to look at the "Metaball" paper on using the blobby method .
 +
  Read volume rendering by Drebin et al .
 +
  Edit magic.h and rtgeom.h to include the heart primitive .
  
 
*However, took ill ( of malaria ) so undergoing treatment .
 
*However, took ill ( of malaria ) so undergoing treatment .
  
June 20
+
June 20  
  
 
*Ill of malaria so undergoing treatment .
 
*Ill of malaria so undergoing treatment .
  
June 21
+
June 21  
  
 
*Ill of malaria so undergoing treatment .
 
*Ill of malaria so undergoing treatment .
Line 67: Line 70:
 
* Re-read the Patch submission guidelines in the HACKING file .
 
* Re-read the Patch submission guidelines in the HACKING file .
  
* Read the research paper titled "Volumetric shape description using the blobby model" which was used to implement the metaball primitive ( by the second method). Since the above method is used with two sphere primitives to create a metaball , I am considering using this same method alongside two spheres ( for the heart lobes ) and an elliptical parabola - epa  (for the lower portion of the heart ). Need to verify the correctness of this design approach on the mailing list.
+
* Read the research paper, Volumetric shape description using the blobby model, which was used to implement the meta ball primitive (by the second method). Since the above method is used with two sphere primitives to create a metaball , I am considering using this same method alongside two spheres (for the heart lobes ) and an elliptical parabola (for the lower portion of the heart ).
  
 
June 25
 
June 25
Line 78: Line 81:
  
 
* Currently writing the struct rt_hrt_internal structure which I have kept [https://sourceforge.net/p/brlcad/patches/204/ here] .Also wrote the RT_HRT_CK_MAGIC(_p) macro in rtgeom.h for the heart .
 
* Currently writing the struct rt_hrt_internal structure which I have kept [https://sourceforge.net/p/brlcad/patches/204/ here] .Also wrote the RT_HRT_CK_MAGIC(_p) macro in rtgeom.h for the heart .
 +
  
 
June 26
 
June 26
Line 159: Line 163:
 
* Doing research on how to solve the sextic equation of the heart. Read some papers and observed that the sextic equation of the heart does not meet the conditions presented in the literature.
 
* Doing research on how to solve the sextic equation of the heart. Read some papers and observed that the sextic equation of the heart does not meet the conditions presented in the literature.
  
==From July 8th to July 14th==
+
==From July 8th to July 13th==
  
 
July 8
 
July 8
Line 185: Line 189:
 
* Intend to test these edits tomorrow. Couldn't do these today because the Faculty building was very noisy today due to a staff meeting.
 
* Intend to test these edits tomorrow. Couldn't do these today because the Faculty building was very noisy today due to a staff meeting.
  
July 10
+
June 10
  
 
* Had a two-hour entretien today with my supervisor and head of Department until 10:00 UTC.
 
* Had a two-hour entretien today with my supervisor and head of Department until 10:00 UTC.
Line 197: Line 201:
 
* For tomorrow's work, I intend to create a heart object which can be tested in the mged interface.
 
* For tomorrow's work, I intend to create a heart object which can be tested in the mged interface.
  
July 11
+
June 11
  
 
* Debugged and compiled the int mk_hrt(struct rt_wdb *wdbp, const char *name, const fastf_t *center, const fastf_t *xdir, const fastf_t *ydir, const fastf_t *zdir, const fastf_t d) routine which was previously added to src/libwdb/wdb.c file.
 
* Debugged and compiled the int mk_hrt(struct rt_wdb *wdbp, const char *name, const fastf_t *center, const fastf_t *xdir, const fastf_t *ydir, const fastf_t *zdir, const fastf_t d) routine which was previously added to src/libwdb/wdb.c file.
Line 209: Line 213:
 
* Intend to finish any hacks of the mged interface and get into the difficult functions like rt_hrt_shot, rt_hrt_prep , etc.
 
* Intend to finish any hacks of the mged interface and get into the difficult functions like rt_hrt_shot, rt_hrt_prep , etc.
  
July 12
+
June 12
  
 
* Added case HRT to the solbld function in src/conv/asc/asc2g.c which parses the heart record and determines which libwdb routine to call in order to replicate it. Debugging asc2g.c.....
 
* Added case HRT to the solbld function in src/conv/asc/asc2g.c which parses the heart record and determines which libwdb routine to call in order to replicate it. Debugging asc2g.c.....
  
July 13
+
June 12
  
 
* Started writing rt_hrt_shot() function for src/librt/primitives/hrt/hrt.c
 
* Started writing rt_hrt_shot() function for src/librt/primitives/hrt/hrt.c
Line 231: Line 235:
 
*Added { DB5_MAJORTYPE_BRLCAD, DB5_MINORTYPE_BRLCAD_HRT, 1, "hrt", "Heart" } as entry for the heart primitive in src/librt/db5_types.c.
 
*Added { DB5_MAJORTYPE_BRLCAD, DB5_MINORTYPE_BRLCAD_HRT, 1, "hrt", "Heart" } as entry for the heart primitive in src/librt/db5_types.c.
 
*Added struct rt_hrt_internal{} to internally represent the heart and wrote the RT_HRT_CK_MAGIC(_p) macro .
 
*Added struct rt_hrt_internal{} to internally represent the heart and wrote the RT_HRT_CK_MAGIC(_p) macro .
*Declared RT_DECLARE_INTERFACE(hrt) and edited rtfunctab[] to include an entry for the heart in src/librt/primitives/table.c .This entry had many NULL fields.
+
*Declared RT_DECLARE_INTERFACE(hrt) and edited rtfunctab[] to include an entry for the heart.This entry had many NULL fields.
 
*With this, I generated hrt_stub.patch.
 
*With this, I generated hrt_stub.patch.
  
Line 243: Line 247:
 
* Start coding and testing the Intersection of a heart with a ray by writing int rt_hrt_shot(), void rt_hrt_norm, void rt_hrt_uv, etc
 
* Start coding and testing the Intersection of a heart with a ray by writing int rt_hrt_shot(), void rt_hrt_norm, void rt_hrt_uv, etc
  
==From July 15th to July 20th ==
+
==From July 15 to July 20 ==
 
 
July 15
 
 
 
* Studying how the quartic equation of the torus is built until the roots of this quartic equation is found by the root finder.
 
 
* Working on int rt_hrt_shot() function whereby a ray intersects with the heart.This yield a sextic polynomial in t with 7 coefficients each with an average of 70 algebraic terms. The coefficient of t^6 has been computed while the coefficient of t^5 is being computed.
 
 
 
July 16
 
* Working on the t^5 and t^4 coefficients of the sextic equation in the int rt_hrt_shot() function whereby a ray intersects with the heart.
 
 
 
July 17
 
 
 
* Finished working on the coefficients of the sextic equation... Pretty tedious.
 
 
 
* Discussed today with my former mathematics professor who pointed me to the  Rouche's theorem to locate complex roots of a polynomial . Researching on this Theorem to locate roots and solve sextic equation.
 
 
 
July 18
 
 
 
* Following up the letter written to the Vice-Chancellor at the Central Administration. No coding work done today.
 
 
 
July 19
 
 
 
* Finished writing the rt_hrt_shot() function which has to be debugged and tested.
 
 
 
July 20
 
 
 
* Had a headache today. Did no coding work. Just did some planning and light observation of toroid and superell primitives in src/librt/primitives/.
 
 
 
=From July 22th to July 27th=
 
 
 
July 22
 
 
 
* Wrote the rt_hrt_parse[] array based on the internal properties of the heart.
 
 
 
* Corrected the hrt_specific structure.
 
 
 
* Wrote the rt_hrt_prep() function to prepare the heart object for ray shoting.
 
 
 
* Making sure that my patches compile, although not yet generated from svn diff -u .
 
 
 
July 23
 
 
 
* Fixed my S.L. 6.2 system today after a crash. Lost the 0rt_hrt_prep() function which I already wrote  :(. Not a big deal though.
 
 
 
* Helped install Internet at the laboratory.
 
 
 
* Discussed on IRC with brlcad on setting up a bzflag account. Accepted the usage policy and rules. Got this account set up.
 
 
 
* Discussed with brlcad and Erik on IRC about correcting my communication (posting) style. Read the more academic [http://en.wikipedia.org/wiki/Posting_style wikipedia] page and Erik's recommended  [http://catb.org/jargon/html/T/top-post.html link] in order to correct this.
 
 
 
* Checking my patches from A to Z.
 
 
 
July 24
 
 
 
* Generated and tested the [https://sourceforge.net/p/brlcad/patches/203/?page=1 hrt_magic.patch] that it applies cleanly, independently and without any side effects.
 
 
 
* Generated and tested the [https://sourceforge.net/p/brlcad/patches/207/ hrt_stub.patch] that it applies cleanly, independently and without any side effects.
 
 
 
July 25
 
 
 
* My mentor [http://sourceforge.net/p/brlcad/patches/203/?limit=10&page=1#836c accepted] the hrt_magic.patch and [http://sourceforge.net/p/brlcad/patches/203/?limit=10&page=1#a682 applied] it to r56212. :)
 
 
 
* Doing changes to generate hrt_typein.patch.
 
 
 
July 26
 
 
 
* Removing errors from the hrt_typein.patch
 
 
 
* My hrt_stub.patch file got [http://sourceforge.net/p/brlcad/patches/207/?limit=10&page=1#99a9 closed-accepted] status and [http://sourceforge.net/p/brlcad/patches/207/?limit=10&page=1#f22c applied] to r56235.
 
 
 
July 27
 
 
 
* Working on a test for the [http://sourceforge.net/p/brlcad/patches/191/ rb_delete.c] function.
 
 
 
=Pre-midterm evaluation summary=
 
 
 
In order to prepare the  BRL-CAD source code for the heart primitive , I hooked the heart primitive into the BRL-CAD source by adding a magic number for the heart in include/magic.h and src/libbu/magic.c, stubbing an empty heart in include/db5.h, include/rtgeom.h, include/raytrace.h, src/librt/db5_types.c and  /src/librt/primitives/table.c and adding typing support for the heart in the mged interface in include/wdb.h, src/libwdb/wdb.c and src/libged/typein.c as can be seen [https://docs.google.com/file/d/0B4kEIUMOBbU-ZUpmcXpxZlFzVXc/edit?usp=sharing here]. As regards the ray tracing callback functions in src/librt/primitives/hrt/hrt.c , I have built the hrt_specific structure, written the rt_hrt_shot() and rt_hrt_prep() functions and I am currently testing these.I intend to continue working on other callback functions like rt_hrt_import(), rt_hrt_print(), etc and finally hook the heart primitive to the mged and archer interfaces with associated clean up and documentation.
 
 
 
=Mid-term Evaluation week=
 
 
 
July 29
 
 
 
* Fixed a typo ( V_vec instead of v_vec on line 286 of src/libger/polyclip.cpp )  and generated a [http://sourceforge.net/p/brlcad/patches/218/ patch] which was applied to r56306 by Mohit Daga.
 
 
 
* Working on the starting requirements of Google Developer Group (GDG Buea) : Created GDG Buea Google+ page with links to agents' pages , GDG Buea google group,etc
 
 
 
July 30
 
 
 
* Filled Mid-term evaluation form and submitted to google-melange.com
 
 
 
* Compiled and tested the int mk_hrt() routine and p_hrt[] array & the hrt_in( ) function in src/libwdb/wdb.c file and src/libged/typein.c respectively. Generated and uploaded this hrt_typein.[https://sourceforge.net/p/brlcad/patches/220/ patch].
 
 
 
* Had an IRC session where I discussed with mentors on the importance of paying attention to detail.
 
 
 
July 31
 
 
 
* Worked on opening comment, bu_structparse rt_hrt_parse array and hrt_specific structure .
 
 
 
* Posed a question to other developers asking for help on writing rt_hrt_bbox() routine and testing callback functions in hrt.c
 
 
 
August 1
 
 
 
* Presenting the work done to set up the Google Developer group Buea to staff of the Department of Computer Science.
 
 
 
* Doing some research on calculating the bounding box volume of an object.
 
 
 
* Going through a little irssi-ssh tutorial.
 
 
 
August 2
 
 
 
* Correcting the rt_hrt_shot() function in src/librt/primitives/hrt/hrt.c
 
 
 
* Chatted with my mentor today : giving me recommendations for commit access.
 
 
 
* Working on a basic hrt/hrt.c
 
 
 
* Just passed the mid-term evaluations
 
 
 
=August 5th to August 9th=
 
 
 
August 5
 
 
 
* Correcting the bare bones [https://sourceforge.net/p/brlcad/patches/228/ patch].
 
 
 
* Building rt_hrt_prep() and rt_hrt_shot()
 
 
 
August 6
 
 
 
* My operating system crashed due to some accidental system file deletes.Fixing my system , created coding environment and did fresh svn checkouts.
 
 
 
* Worked on the logo for the [https://plus.google.com/100289274059280359416 GDG Buea] Google+ page.
 
 
 
* Did no coding work today.
 
 
 
August 7
 
 
 
* Wrote the rt_hrt_import() callback function for hrt.c.
 
 
 
* Uploaded hrt_import5 [https://sourceforge.net/p/brlcad/patches/230/ patch] to sourceforge.net.
 
 
 
* A picture for the rt_hrt_import5 test on mged interface can be viewed [http://brlcad.org/~Izak/Import_test.png here].
 
 
 
* Wrote the rt_hrt_export() callback function for hrt.c.
 
 
 
* uploaded hrt_export5 [https://sourceforge.net/p/brlcad/patches/229/ patch] to sourceforge.net.
 
 
* A picture for the rt_hrt_export5 test on archer interface can be viewed [http://brlcad.org/~Izak/Export_test.png here].
 
 
 
August 8
 
 
 
* Have been granted commit access. :)
 
 
 
* Learned how to use svn commit, svn revert, etc.
 
 
 
* Ensured consistent bu_log("rt_hrt_xxx: not implemented yet!\n"); in calllbacks functions for hrt.c and committed to [http://sourceforge.net/p/brlcad/code/56694/ r56694].
 
 
 
=August 12th to August 17th=
 
 
 
August 12th
 
 
 
* Added hrt_invsq vector and hrt_invRSSR matrix to the heart structure in [https://sourceforge.net/p/brlcad/code/56745/ r56745].
 
 
 
* Added rt_hrt_print() routine and removed rt_hrt_??port4() routines pertaining to version 4 of database in [https://sourceforge.net/p/brlcad/code/56746/ r56745].
 
 
 
* Added rt_hrt_import5() routine to import the database format to the internal format in [https://sourceforge.net/p/brlcad/code/56747/ r56747].
 
 
 
* Added rt_hrt_export5() routine to export from internal format to database format in [https://sourceforge.net/p/brlcad/code/56751/ r56751]
 
 
 
August 13th
 
 
 
* Went to the Cameroon GCE Board office to apply for duplicate certificate for my younger sister.
 
 
 
* Wrote rt_hrt_describe() routine to present the heart solid in human-readable format and committed changes to [http://sourceforge.net/p/brlcad/code/56791/ r56791].
 
 
 
* Pictures to demonstrate the working rt_hrt_describe() function using the l command in the mged and archer interfaces can be viewed [http://brlcad.org/~Izak/rt_hrt_describe_mged.png here] and [http://brlcad.org/~Izak/rt_hrt_describe_archer.png here] respectively.
 
 
 
August 14th
 
 
 
* Working on rt_hrt_prep() routine but electric blackouts in my area halted work.
 
 
 
August 15th
 
 
 
* Compiled hrt.c after writing rt_hrt_prep(). This routine calls rt_hrt_bbox() routine  (which I am still to work on ) and some testing using the rt command. Will commit [http://paste.kde.org/p20fbe4c6/ rt_hrt_prep()] later.
 
 
 
* Worked on rt_hrt_ifree() to free the storage associated with the rt_db_internal version of this solid and commited to [https://sourceforge.net/p/brlcad/code/56876/ r56876].
 
 
 
August 16th
 
 
 
* Working on rt_hrt_bbox() routine which needs some testing before I commit.
 
 
 
August 17th
 
 
 
* Finished working on rt_hrt_bbox() routine today. Used the bb command to test this code in the [http://brlcad.org/~Izak/rt_hrt_bbox_mged_test.png mged] and [http://brlcad.org/~Izak/rt_hrt_bbox_archer_test.png archer].
 
 
 
* Committed changes in rt_hrt_bbox() and rt_hrt_prep() routines to [http://sourceforge.net/p/brlcad/code/56917/ r56917].Will do more work on rt_hrt_prep() function eventually.
 
 
 
=August 19th to August 24th=
 
 
 
August 19th
 
 
 
* Corrected spelling of polynomial in bn_poly_synthetic_div.c in [http://sourceforge.net/p/brlcad/code/56944 r56944].
 
 
 
* Wrote the rt_hrt_free() and rt_hrt_params() functions in [http://sourceforge.net/p/brlcad/code/56947/ r56947].
 
 
 
* Still working on rt_hrt_prep().
 
 
 
August 20th
 
 
 
* Modified rt_hrt_prep() function and commited it to [https://sourceforge.net/p/brlcad/code/57004/ r57004].
 
 
 
August 21st
 
 
 
* Working on rt_hrt_shot(). Still to commit.
 
 
 
* Modified comment to add new constant in rt_hrt_prep() in [http://sourceforge.net/p/brlcad/code/57023/ r57023] and [http://sourceforge.net/p/brlcad/code/57035/ r57035].
 
 
 
August 22nd
 
 
 
* Modifying a comment by punctuating the word primitive in super ellipsoid primitive and commited to [http://sourceforge.net/p/brlcad/code/57058/ r57058].
 
 
 
* Understanding how to write the rt_???_shot() function for primitives.
 
 
 
* Adding rt_hrt_shot to intersect a ray with the heart in [http://sourceforge.net/p/brlcad/code/57068/ r57068].
 
 
 
* Tests in the mged using the 'rt' command givers this [http://brlcad.org/~Izak/rt_shot_test.png result].
 
 
 
August 23rd
 
 
 
* Removed unused variable polycurve and fixed function declarations in pc header
 
and committed to [http://sourceforge.net/p/brlcad/code/57097/ r57097].
 
 
 
* Added rt_hrt_norm() function which Computes the normal to the heart given a point on the heart in [http://sourceforge.net/p/brlcad/code/57100/ r57100].
 
 
 
=August 26th to August 31st=
 
 
 
August 26th
 
 
 
* Experiencing an infection in my left eye so could not work throughout the weekend until today.Couldn't work with one eye.
 
 
 
August 27th
 
 
 
* Researching on solving sextic equations. Found an interesting paper by Titus Piezas III.
 
 
 
* Correcting sextic equation in comment preceeding rt_hrt_shot() implementation in [http://sourceforge.net/p/brlcad/code/57180/ r57180].
 
 
 
August 28th
 
 
 
* Reading papers by Piezas and Thomas Hagerdon to come out with algorithm to write bn_poly_sextic_roots.c.
 
 
 
August 29th - 30th
 
 
 
* Consulting mathematician Titius Piezas for advice on how to solve the sextic equation for rt_hrt_shot() to do ray tracing. Piezas says the equation is solvable using numerical solutions with arbitrary accuracy but is not solvable with respect to radicals in Galois theory.
 
 
 
August 31st
 
 
 
* Researching on root-finding algorithms which can be used to write bn_poly_sextic_roots.c
 
 
 
* Working on rt_hrt_plot to plot the heart.
 
 
 
=September 2nd to September 7th=
 
 
 
September 5th
 
 
 
* Working on roots_example.c to incorporate test for sextic equation.
 
 
 
 
 
September 6th
 
 
 
* Changed 4 to BN_MAX_POLY_DEGREE in roots_example.c to avoid any further confusions in [http://sourceforge.net/p/brlcad/code/57469 r57469]. roots_example.c actually solves a sextic equation now.
 
 
 
* Solved the implicit heart equation with x=y=z in order to substitute into the rt_hrt_shot sextic equation and use in roots_example.c
 
 
 
* Running rt command on a hrt object. Picture can be viewed [http://brlcad.org/~Izak/heart.png here].
 
 
 
September 7th
 
 
 
* Produced a [http://brlcad.org/~Izak/Movie.odp slideshow] from images produced after running the 'rt' command on a heart object.
 
 
 
=September 9th to September 14th=
 
 
 
September 9th
 
 
 
* Getting my feet wet with plotting in the mged/archer interface :)
 
 
 
September 10th
 
 
 
* Fixed the orientation of the heart and invalid implicit equation in rt_hrt_shot() in [http://sourceforge.net/p/brlcad/code/57533/ r57533].
 
 
 
* Getting better results from rt_hrt_shot in this [http://brlcad.org/~Izak/Heart.mpg Heart movie].
 
 
 
* Observing the rt_ell_plot() functions to see how the rt_hrt_plot() can be written.
 
 
 
September 14th
 
 
 
* Corrected rt_hrt_bbox() by Stretching the xdir vector to accommodate the heart and rt_hrt_norm() by Correcting Z component of the normal vector (partials of sextic equation) in [http://sourceforge.net/p/brlcad/code/57653/ r57553].
 
 
 
=September 16th to September 21st=
 
 
 
September 16th
 
 
 
* Had an entretien with my University's  Vice- Chancellor and dean of Faculty of Engineering today talking about Summer of Code and approaching Doc Camp .
 
 
 
* Wrote a private helper function rt_hrt_24pts() for rt_hrt_plot(). Have written code to get 2 iso-contours. Still working on some bugs in archer.
 
 
 
September 17th
 
 
 
* Following the stack trace which Sean opened my eyes to on IRC.
 
 
 
September 18th
 
 
 
* Fixed the bumpy areas on the heart by correcting some code in rt_hrt_norm() in [http://sourceforge.net/p/brlcad/code/57728/ r57728].
 
 
 
September 20th
 
 
 
* Corrected the rt_hrt_norm() function so that the default trace shouldn't be doing from high specular to dark shadows in [http://sourceforge.net/p/brlcad/code/57780/ r57780].
 
 
 
 
 
=GSoC 2013 summary=
 
 
 
For the past quarter, I've been implementing a heart primitive for the BRL-CAD package. This project focused on writing and testing callback functions in the ray tracing library for the aforementioned primitive.You are invited to read my diary on http://brlcad.org/wiki/User:Izak/GSOC_2013_logs.
 
 
 
Despite the challenges I encountered such as the lack of Internet connectivity for over 5 weeks before the mid-term evaluation period, I hooked the heart primitive into the BRL-CAD source by adding a magic number for the heart in include/magic.h and src/libbu/magic.c, stubbing an empty heart in include/db5.h, include/rtgeom.h, include/raytrace.h,src/librt/db5_types.c,src/librt/primitives/table.c and src/librt/primitives/hrt/hrt.c as well as adding typing support for the heart in the mged interface in include/wdb.h,src/libwdb/wdb.c and src/libged/typein.c.
 
 
 
After the mid-term evaluations,I implemented ray tracing callback functions for serialization (rt_hrt_??port), textual description (rt_hrt_describe, rt_hrt_print) and ray tracing (rt_hrt_prep, rt_hrt_shot and rt_hrt_norm).I also wrote a test to ensure that BRL-CAD's root solver is stable for sextic equations and after consulting some mathematicians, I learned that the heart's sextic equation cannot be solved in radicals -- A pointer to which method does not work :). Feel free to download a heart animation from http://brlcad.org/~Izak/HeartImages/Heart.mpg. You can also look at images of the heart from 360 different angles using http://brlcad.org/~Izak/HeartImages/
 
 
 
As GSoC 2013 comes to an end, my passion to continuously contribute to the open source community grows. I intend to finish the callbacks functions for the heart primitive and hook the heart to the mged and archer interfaces so the heart gets into the next BRL-CAD release :)
 
 
 
Feeling Great! :)
 

Please note that all contributions to BRL-CAD may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see BRL-CAD:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)