Latest revision |
Your text |
Line 320: |
Line 320: |
| ** Made use of the connectivity graph to reduce inside/outside tests (if the USE_CONNECTIVITY_GRAPH flag is set). | | ** Made use of the connectivity graph to reduce inside/outside tests (if the USE_CONNECTIVITY_GRAPH flag is set). |
| ** Upload images to the wiki to show the result of NURBS boolean evaluations (intersection). | | ** Upload images to the wiki to show the result of NURBS boolean evaluations (intersection). |
− | * Aug 28
| |
− | ** Tried to pass ON_Brep::IsValid().
| |
− | *** Added seaming trims, using the methods similar to the checking code in IsValid().
| |
− | *** Dealt with singular trims and closed trims.
| |
− | *** Solved trim & vertex mismatch.
| |
− | * Aug 29
| |
− | ** Some code clean up.
| |
− | ** Fixed wrong face direction.
| |
− | ** Added another boolean operation - XOR.
| |
− | ** Tested boolean evaluations and uploaded result images.
| |
− | * Aug 30
| |
− | ** Began to implement comb -> brep conversion, as the NURBS evaluations are ready now.
| |
− | *** Currently we need to pass the db_i* param all the way, because the comb tree only stores the names in the leaves, and we need the db to find the solid. Is there any more elegant way to deal with this?
| |
− | == Week 12 ==
| |
− | * Sept 2
| |
− | ** Solve some invalid ON_Brep representations
| |
− | *** Avoid duplicated vertexes.
| |
− | *** ISO type should be checked before we decide whether to share seam curves.
| |
− | ** Some code clean up.
| |
− | * Sept 3
| |
− | ** Correctly reuse surface trees and curve trees.
| |
− | * Sept 4
| |
− | ** Renamed some variables.
| |
− | *** db => dbip
| |
− | *** brep_conversion => single_conversion
| |
− | ** Performed Xform on the leaves.
| |
− | ** Checked 3D distance (not included in ON_Brep::IsValid()) when looking for seam trims.
| |
− | ** Generated the connectivity graph for the new solid (after evaluation)
| |
− | ** Discussions about db_i passing in rt_comb_brep().
| |
− | * Sept 5
| |
− | ** Fixed wrong face direction of arbn => brep conversion
| |
− | *** The problem existed in rt_nmg_brep().
| |
− | ** Fixed a bug in trimmed face splitting
| |
− | *** Pointers may be invalid if the ON_SimpleArray's capacity is enlarged.
| |
− | * Sept 6
| |
− | ** Tests and fixed some bugs in libbrep/boolean.cpp
| |
− | *** get_subcurve_inside_face(): It should be the intersection of the two merged intervals, not union. And there might be no intersections (e.g. for an inner loop)
| |
− | *** A slight bug: m_a => m_b (wrong param used)
| |
− | *** Uploaded images to wiki.
| |
− | == Week 13 ==
| |
− | * Sept 9
| |
− | ** The school starts...
| |
− | ** Improved the boolean evaluations
| |
− | *** Use the same surface if they are split from the same face.
| |
− | *** Fix wrong vertex for the singular trims.
| |
− | *** Detect whether the surfaces are the same - don't need SSI if they are the same.
| |
− | * Sept 10
| |
− | ** Surface equality checking
| |
− | *** Also checked their degree (order) and knots
| |
− | ** "Robustness Issues"
| |
− | *** Improve inside/outside tests for the cases with overlap surfaces.
| |
− | * Sept 11
| |
− | ** Some minor changes in libbrep/boolean.cpp
| |
− | ** Installed and studied valgrind
| |
− | *** Fixed memory leaks in test_point_intersect and test_curve_intersect.
| |
− | * Sept 12
| |
− | ** Continued using valgrind to fix the memory leaks.
| |
− | *** boolean.cpp
| |
− | *** SSI (intersect.cpp)
| |
− | * Sept 13
| |
− | ** Still fixing memory leaks.
| |
− | *** Face splitting.
| |
− | *** Tree conversion.
| |
− | *** Passed valgrind tests well after lots of efforts.
| |
− | == Week 14 ==
| |
− | * Sept 16
| |
− | ** Scheduled pencils down date...
| |
− | ** Begin to do some code clean up and improve documentations
| |
− | *** Use rt_db_internal instead of ON_Brep for the interface between libged and librt.
| |
− | * Sept 17
| |
− | ** Added an "--no-evaluation" option, using the old routine of converting comb without NURBS evaluations (CSG tree + brep)
| |
− | ** Scrub the code.
| |
− | * Sept 18
| |
− | ** Scrub the code - src/libbrep/intersect.cpp
| |
− | *** Reused sub_curve() and sub_surface().
| |
− | *** Added and corrected some comments.
| |
− | * Sept 19
| |
− | ** Rewrite the code of merging intervals in CCI and CSI
| |
− | *** Use only one pending interval.
| |
− | ** Corrected some comments.
| |
− | * Sept 20
| |
− | ** Added more comment to the code, to make it more understandable.
| |
− |
| |
− | == Final summary ==
| |
− | * During GSoC '13, I implemented 6 independent intersection routines (point/point, point/curve, point/surface, curve/curve, curve/surface and surface/surface), tested and verified them, and they proved to be robust with the input I gave (even the extreme case). The most challenging task is the overlap cases in SSI (the result is 2D rather than 1D), which takes several weeks and hundreds lines of code.
| |
− | * After mid-term evaluation, I started to focus on NURBS boolean evaluations with the well-performed intersection routines. The main steps include splitting a trimmed face, inside/outside tests and forming the final b-rep structure. I'm pleased that I stayed on schedule during all these time, and finally finished a working NURBS evaluation routine and COMB conversion. Connectivity graphs take quite a lot of time to implement, and still not completed in some way (e.g. the information lost after the evaluation, because the edges are not shared), but it doesn't effect the performance a lot so finally we just disable this option. If it turns out to be useful later, we can enable it again, and do some modifications if needed.
| |
| | | |
| = Test Results = | | = Test Results = |
Line 450: |
Line 364: |
| ** [[Image:arb8_ehy.png]] [[Image:arb8_ehy_inter.png]] | | ** [[Image:arb8_ehy.png]] [[Image:arb8_ehy_inter.png]] |
| ** A sph and a torus (left: original structures; right: result of intersection) | | ** A sph and a torus (left: original structures; right: result of intersection) |
− | ** [[Image:ehy_tor.png]] [[Image:ehy_tor_inter.png]] | + | ** [[Image:sph_tor.png]] [[Image:sph_tor_inter.png]] |
− | ** Two spheres (first: result of union; second: result of intersection; third: result of difference) | + | ** Two spheres (left: original structures; right: result of intersection) |
− | ** [[Image:union_sph.png]] [[Image:sph_sph_inter.png]] [[Image:diff_sph.png]] | + | ** [[Image:sph_sph.png]] [[Image:sph_sph_inter.png]] |
− | ** Two arb8 (first: union, second: intersection, third: diff)
| |
− | ** [[Image:Arb union.png]] [[Image:Arb intersect.png]] [[Image:Arb diff.png]]
| |
| | | |
| = Original development timeline = | | = Original development timeline = |