User:Phoenix/GSoc2012/Reports
From BRL-CAD
Contents
Log
Community Bonding
- May 2
- Downloaded the source code of the latest revision from svn checkout and got more familiar with subversion.
- Compiled and built the source both in Ubuntu and Windows (Visual Studio 2010) successfully.
- May 13
- Found and fixed a small bug in eto_brep (the rotation axis of eto is wrong), and submitted a patch on sourceforge.net.
- May 15
- Modified the eto_brep patch with the test case provided by Cliff.
- May 16
- Continued working on the conversion of eto.
- Tested the brep conversion of hyp, but found the raytrace result of implicit CSG hyp quite strange.
- May 17
- The raytrace of implicit hyp is wrong when H is not perpendicular to A.
- Fixed the conversion to brep of hyp (havn't commited yet).
- May 18
- My first SVN Commit: fixed the shearing direction of hyp.
Week 1
- May 21
- Fixed the bug of wrong id & od for pipe b-rep, by changing some prevp to curp.
- Dealt with duplicated points by deleting them from the linklist.
- May 22
- Added some control to deal with special cases in pipe_brep.cpp and add a few comments.
- May 23
- Read and tried to understood the code in revolve_brep.cpp, but got confused by the implicit definition.
- Changed the revolution axis and origin of the sketch plane of revolve_brep.
- May 24
- Changed the position of the sketch in extrude_brep according to the parameters.
- Fixed the plane direction of circle arcs in sketch_brep as well as in revolve_brep.
- May 25
- Dealt with non-full revolution of revolve_brep. It took a long time to get the expected result, but I got more familiar to NURBS/BREP during that procedure.
Week 2
- May 27
- Tested and examined the implemented brep conversions. Checked the current status of my work.
- May 28
- Added the implicit -> brep conversion to conversion.sh, so that massive testing will be more convenient.
- May 29
- Tested the functionality of conversion.sh and brep conversions. Made a small change.
- Modified brep.c in libged to check whether the conversion is successful.
- May 30
- Read the code in clone.c, and began to implement the temporary unevaluated conversion of comb in the brep command in MGED.
- May 31
- Extended the functionality of the brep command in MGED to deal with comb. Unevaluated breps are generated. More tests are needed.
- June 1
- The unevaluated conversion for comb has been implemented. Changed conversion.sh accordingly. And the whole elasped time for each object is evaluated.
- Handled some exceptions in brep_debug.cpp.
- Freed memories and corrected the "name existed" output in brep.c in libged.
- June 2
- Tested the brep conversion on ktank.g, m35.g, etc. with conversion.sh.
- Modified brep_debug.cpp to deal with empty combs.
Week 3
- June 3
- Fixed the wrong malloc size and freed tmpname before returning in brep_debug.cpp.
- June 4
- Modified openNUBRS_ext.cpp to quell set-but-unused warnings.
- Tested brep conversion of all /db/*.g files. Looked into the log to find out what to do next.
- Found a bug in pipe_brep.cpp dealing with colinear points.
- June 5
- Modified pipe_brep.cpp. It's much better now, but problems still remain.
- June 6
- Fixed a concealed bug in pipe_brep.cpp. Now it works properly.
- June 7
- Fixed the destruction failure in pipe_brep.cpp by duplicating the curves.
- June 8
- Modified brep_debug.cpp to skip the conversion of half when converting a comb. The implicit primitive of half remains in the hierarchy.
- Explored the usage of ON_BrepRegion to represent an infinite halfspace, but had no good luck.
Week 4
- June 11 - June 18
- Final examination week in our school.
Week 5
- June 18
- Final exams finished. Started to work!
- Added pnts to the ignore list when converting a comb.
- Modified the describe and ifree functions in pnts.c checking whether count==0 to avoid segmentation fault.
- June 19
- Corrected the wrong comments in arb8_brep.cpp and arbn_brep.cpp.
- Add a brep conversion function to ars, which first converts it to an nmg and then to b-rep.
- June 20
- Use ft_brep functions for half and pnts, returning a NULL brep pointer, and check within brep_conversion() and brep_conversion_tree().
- June 21
- Tried implementing rt_part_brep() for primitive part. Things get much closer now after much tests and modifications.
- June 22
- Finished a raw version of brep conversion for part. Some special cases need to be considered later.
- June 23
- Enhanced some special cases (sphere) in part_brep.cpp.
Week 6
- June 24
- Fixed the wrong normal direction of the brep form of part.
- June 25
- Studied the primitive metaball. Found it quite hard to get started.
- June 26
- Studied the two papers Cliff provided on metaballs, but still cannot find the answer.
- Copied the transformation matrix when converting the leaves in a tree. (Later adjusted to copying all data from the old tree first)
- June 27
- Evaluated the results and uploaded the screenshots to the log page. (See "Test Results")
- Modified dsp_brep.cpp, using the dsp_stom matrix to do the transformation, instead of using the magic numbers.
- June 28
- Implemented a b-rep conversion function for superell.
- June 29
- Tested the results of conversion of superell. (See below)
Test Results
The brep conversion has been tested on several db/*.g files. Below are the screenshots of the raytrace results.
- m35.g: component (left: implicit + csg, right: brep + csg)
- ktank.g: tank (left: implicit + csg, right: brep + csg)
- havoc.g: havoc (the raytrace of brep+csg takes a too long time, so the result hasn't been generated yet)
- A DSP primitive with a 30*30 map: (left: implicit, right: brep)
- Brep form of superell primitives with axes of the same magnitude: (left: n = 0.8, e = 0.2, right: n = 1.0, e = 2.0)
Reference page: http://paulbourke.net/geometry/superellipse/
Original development timeline
- - May 21 (~4 weeks)
- Study materials on NURBS/BREP etc
- Read the codes in librt/primitives
- Get familiar to OpenNURBS
- Fix some bugs and make patches
- Implement a method for convenient testing (finished)
- May 21 - June 10 (~3 weeks)
- Modify implemented conversions if not finished
- pipe
- sph, ell, tor, hyp
- eto, extrude, revolve, etc.
- Modify implemented conversions if not finished
- June 11 - June 18 (~1 week)
- Final examination week in our school
- June 19 - July 1 (~2 weeks)
- Still work on existing conversions
- Work on non-origin primitives
- Deduce transformation matrices
- Apply the transformation
- Test the results and write documents
- July 1 - July 29 (~4 weeks)
- Add new conversions to missing primitives
- Test whether it works well
- Write clear documents
- From easy ones to hard ones
- July 1 - July 8 (1 week)
- rec
- ars
- half
- ell1
- July 8 - July 15 (1 week)
- metaball
- pnts
- part
- grip
- July 15 - July 22 (1 week)
- superell
- cline
- July 22 - July 29 (1 week)
- hf
- other missing primitives
- Add new conversions to missing primitives
- July 29 - August 13 (~2 week)
- Write a convert for whole
- Write a function to walk the tree
- Add a command to MGED
- Discussions and documents
- Test the work and fix bugs
- Write a convert for whole
- August 13 - August 20 (~1 week)
- Pencil down data
- Improve documentation
- Evaluations
- Pencil down data
- Post-GSoc
- Further involvement with BRL-CAD :)