Difference between revisions of "NURBS TODO"

From BRL-CAD
(stub in the rest)
(expand time estimates, references, and benefits on most tasks)
Line 7: Line 7:
  
 
= Optimize BREP/NURBS prep=
 
= Optimize BREP/NURBS prep=
* Benefit: faster ray tracing runtime, user requested.
+
* Benefit: faster ray tracing runtime, user requested, user visible
 
* Time Estimate: 2 days
 
* Time Estimate: 2 days
 
* References:
 
* References:
Line 15: Line 15:
 
=Implicit-to-NURBS=
 
=Implicit-to-NURBS=
 
Implement conversion of implicit primitives to BREP/NURBS primitives. Partially complete, primitives are fixed at origin, some primitives unimplemented.
 
Implement conversion of implicit primitives to BREP/NURBS primitives. Partially complete, primitives are fixed at origin, some primitives unimplemented.
* Benefit: partial requirement for interactive visualization of implicit CSG geometry in OpenGL.
+
* Benefit: partial requirement for interactive visualization of implicit CSG geometry in OpenGL
 
* Time Estimate: 3 days
 
* Time Estimate: 3 days
 
* References:
 
* References:
Line 22: Line 22:
 
=BREP/NURBS-to-NMG=
 
=BREP/NURBS-to-NMG=
 
Implement conversion of BREP/NURBS to NMG.
 
Implement conversion of BREP/NURBS to NMG.
* Benefit: partial requirement for export and interactive visualization of BREP/NURBS in OpenGL.
+
* Benefit: requirement for polygonal export, partial requirement for OpenGL visualization, user visible
 
* Time Estimate: 1 day
 
* Time Estimate: 1 day
 
* References:
 
* References:
Line 30: Line 30:
 
Identify useful concepts implemented in the old BSPLINE/NURBS code that are not present in openNURBS.
 
Identify useful concepts implemented in the old BSPLINE/NURBS code that are not present in openNURBS.
 
* Benefit: code reuse, potentially very useful functionality.
 
* Benefit: code reuse, potentially very useful functionality.
* Time Estimate:
+
* Time Estimate: <1 day
 
* References:
 
* References:
**
+
** src/librt/primitives/bspline/*
  
 
=BSPLINE/NURBS reuse=
 
=BSPLINE/NURBS reuse=
 
Port any useful BSPLINE/NURBS code to openNURBS data structures and routines.
 
Port any useful BSPLINE/NURBS code to openNURBS data structures and routines.
 
* Benefit: code reduction, allows the old BSPLINE/NURBS code to be removed after functionality is migrated.
 
* Benefit: code reduction, allows the old BSPLINE/NURBS code to be removed after functionality is migrated.
* Time Estimate:
+
* Time Estimate: 2 days
 
* References:
 
* References:
**
+
** src/librt/primitives/bspline/*
 +
** src/librt/primitives/brep/*
  
 
=BREP/NURBS CSG evaluation=
 
=BREP/NURBS CSG evaluation=
 
Implement boolean evaluation of BREP/NURBS surfaces.
 
Implement boolean evaluation of BREP/NURBS surfaces.
 
* Benefit: partial requirement for interactive visualization of BREP/NURBS in OpenGL.
 
* Benefit: partial requirement for interactive visualization of BREP/NURBS in OpenGL.
* Time Estimate:
+
* Time Estimate: 7 days
 
* References:
 
* References:
**
+
** ESOLID: http://research.cs.tamu.edu/keyser/geom/esolid/
 +
** http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.119.4341&rep=rep1&type=pdf
 +
** http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.117.8700&rep=rep1&type=pdf
 +
** http://www.springerlink.com/content/x3665206243u20x8/
 +
** http://193.170.37.128/projects/basic/cgal/workdone/nurbs-97-30.ps.gz
 +
** http://mae.ucdavis.edu/~farouki/foils.pdf
 +
** http://portal.acm.org/citation.cfm?id=36714
 +
** ftp://ftp.cs.unc.edu/pub/users/manocha/PAPERS/INTERSECT/IJCGA.pdf
 +
** http://portal.acm.org/citation.cfm?id=237751
  
 
=Plate-mode BREP/NURBS=
 
=Plate-mode BREP/NURBS=
 
Implement plate mode BREP/NURBS objects. Similar, if not identical, to plate mode BoTs, 'brep' objects need the ability to have a thickness described so you could automatically handle non-solid NURBS and sheet-metal style geometry without requiring surface solidity.
 
Implement plate mode BREP/NURBS objects. Similar, if not identical, to plate mode BoTs, 'brep' objects need the ability to have a thickness described so you could automatically handle non-solid NURBS and sheet-metal style geometry without requiring surface solidity.
* Benefit: allows for import and visualization of BREP/NURBS surfaces that are not solid.
+
* Benefit: allows for import and visualization of BREP/NURBS surfaces that are not solid, user visible
* Time Estimate:
+
* Time Estimate: 2 days
 
* References:
 
* References:
**
+
** include/rtgeom.h
 +
** src/librt/primitives/bot/bot.c
  
 
=Implicit CSG to BREP/NURBS CSG test scripts=
 
=Implicit CSG to BREP/NURBS CSG test scripts=
 
Develop test scripts for comparing conversion of implicit CSG to BREP/NURBS CSG
 
Develop test scripts for comparing conversion of implicit CSG to BREP/NURBS CSG
 
* Benefit: provides validation and verification via ray tracing.
 
* Benefit: provides validation and verification via ray tracing.
* Time Estimate:
+
* Time Estimate: < 1 day
 
* References:
 
* References:
**
+
** regress/*.sh
 +
** sh/*.sh
  
 
=BREP/NURBS documentation=
 
=BREP/NURBS documentation=
Document the new BREP/NURBS primitive.
+
Document the new BREP/NURBS primitive (user overviewdocumentation: how to import, use, export, limitations).
* Benefit: provides user documentation explaining capabilities, limitations, and benefits.
+
* Benefit: provides user documentation explaining capabilities, limitations, and benefits; user visible
* Time Estimate:
+
* Time Estimate: 3 days
 
* References:
 
* References:
**
+
** doc/docbook/articles
  
 
=Cache objects=
 
=Cache objects=
 
Implement data cache objects.  Create new LIBRT API routines for storing cache data in a v5 container.  This would amount to storing binary data into a 'binunif' object marked as hidden with attributes for date/time stamping and MD5 or SHA256 checksumming.
 
Implement data cache objects.  Create new LIBRT API routines for storing cache data in a v5 container.  This would amount to storing binary data into a 'binunif' object marked as hidden with attributes for date/time stamping and MD5 or SHA256 checksumming.
* Benefit: faster ray tracing runtime, applicable to other primitives (NMG, BoT).
+
* Benefit: faster ray tracing runtime, applicable to other primitives (NMG, BoT)
* Time Estimate:
+
* Time Estimate: 1 day
 
* References:
 
* References:
**
+
** include/raytrace.h
 +
** include/db5.h
 +
** src/librt/binunif
 +
** src/librt/primitives/*
  
=Cache prep results=
+
=Raytrace prep cache optimization=
 
Cache BREP/NURBS prep results to a specified cache file.
 
Cache BREP/NURBS prep results to a specified cache file.
* Benefit: faster ray tracing runtime for BREP/NURBS, user requested.
+
* Benefit: faster ray tracing runtime for BREP/NURBS, user requested, user visible
* Time Estimate:
+
* Time Estimate: 2 days
 
* References:
 
* References:
**
+
** src/librt/primitives/table.c
  
 
=BREP/NURBS wireframe=
 
=BREP/NURBS wireframe=
 
Improve BREP/NURBS wireframe. Investigate using knots on subcurves.
 
Improve BREP/NURBS wireframe. Investigate using knots on subcurves.
* Benefit: faster wireframe, more detailed close wireframes.
+
* Benefit: faster wireframe; LOD wireframes: more detailed close-up wireframes, less detailed far-away wireframes (LOD); user visible
* Time Estimate:
+
* Time Estimate: 2 days
 
* References:
 
* References:
**
+
** http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.142.3042&rep=rep1&type=pdf
 +
** http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.70.6138&rep=rep1&type=pdf
 +
** http://www.springerlink.com/content/k7543860533338nu/
 +
** http://wscg.zcu.cz/wscg2003/Papers_2003/H19.pdf
 +
** http://cg.cs.uni-bonn.de/aigaion2root/attachments/kahlesz-2002-multiresolution.pdf
 +
** http://www.cs.cityu.edu.hk/~rynson/papers/vrst03.pdf
 +
** http://www.flipcode.com/archives/NURBS_Curves_Surfaces.shtml
  
 
= BREP/NURBS source code cleanup=
 
= BREP/NURBS source code cleanup=
 
Consolidate Owens and Reeves approaches to ray intersection.
 
Consolidate Owens and Reeves approaches to ray intersection.
* Benefit: improved code maintainability.
+
* Benefit: improved code maintainability, complexity reduction
* Time Estimate:
+
* Time Estimate: 2 days
 
* References:
 
* References:
 
** http://www.cs.utah.edu/~shirley/papers/raynurbs.pdf
 
** http://www.cs.utah.edu/~shirley/papers/raynurbs.pdf
Line 99: Line 119:
 
= BREP/NURBS healing=
 
= BREP/NURBS healing=
 
Implement an rt_heal(rt_db_internal *dbi); routine. The routine tightens up trimming curves and edge/vertex pairings so that they align perfectly while still preserving the topological structure.
 
Implement an rt_heal(rt_db_internal *dbi); routine. The routine tightens up trimming curves and edge/vertex pairings so that they align perfectly while still preserving the topological structure.
* Benefit:
+
* Benefit: more robust evaluation for improved (more stable & consistent) raytracing, import, export; routine interface later applicable to NMG/BoT too
* Time Estimate:
+
* Time Estimate: 3 days
 
* References:
 
* References:
**
+
** src/librt/primitives/brep
  
= BREP/NURBS for analysis purpose report=
+
= Report on using BREP/NURBS for analysis=
 
Description needed here.
 
Description needed here.
* Benefit:
+
* Benefit: documentation, user visible
* Time Estimate:
+
* Time Estimate: 3 days
 
* References:
 
* References:
**
+
** doc/docbook/articles
  
 
= Analytic comparison of BREP/NURBS and BoT=
 
= Analytic comparison of BREP/NURBS and BoT=
 
Description needed here.
 
Description needed here.
 
* Benefit:
 
* Benefit:
* Time Estimate:
+
* Time Estimate: 1 day
 
* References:
 
* References:
**
+
** sh/*.sh
 +
** regress/*.sh
 +
** bench/run.sh
  
 
= Analytic comparison of BREP/NURBS CSG and implicit CSG=
 
= Analytic comparison of BREP/NURBS CSG and implicit CSG=
 
Description needed here.
 
Description needed here.
 
* Benefit:
 
* Benefit:
* Time Estimate:
+
* Time Estimate: 2 days
 
* References:
 
* References:
**
+
** sh/*.sh
 +
** regress/*.sh
 +
** bench/run.sh

Revision as of 00:50, 15 February 2011

Optimize BREP/NURBS ray tracing

  • Benefit: faster ray tracing runtime, user visible
  • Time Estimate: 2 days
  • References:
    • src/librt/primitives/brep
    • src/librt/opennurbs_ext.*

Optimize BREP/NURBS prep

  • Benefit: faster ray tracing runtime, user requested, user visible
  • Time Estimate: 2 days
  • References:
    • src/librt/primitives/brep/brep.cpp:rt_brep_prep()
    • src/librt/opennurbs_ext.*

Implicit-to-NURBS

Implement conversion of implicit primitives to BREP/NURBS primitives. Partially complete, primitives are fixed at origin, some primitives unimplemented.

  • Benefit: partial requirement for interactive visualization of implicit CSG geometry in OpenGL
  • Time Estimate: 3 days
  • References:
    • src/librt/primitives/${PRIM}/${PRIM}_brep.cpp

BREP/NURBS-to-NMG

Implement conversion of BREP/NURBS to NMG.

  • Benefit: requirement for polygonal export, partial requirement for OpenGL visualization, user visible
  • Time Estimate: 1 day
  • References:
    • src/librt/primitives/brep/brep.cpp:rt_brep_tess()

BSPLINE/NURBS review

Identify useful concepts implemented in the old BSPLINE/NURBS code that are not present in openNURBS.

  • Benefit: code reuse, potentially very useful functionality.
  • Time Estimate: <1 day
  • References:
    • src/librt/primitives/bspline/*

BSPLINE/NURBS reuse

Port any useful BSPLINE/NURBS code to openNURBS data structures and routines.

  • Benefit: code reduction, allows the old BSPLINE/NURBS code to be removed after functionality is migrated.
  • Time Estimate: 2 days
  • References:
    • src/librt/primitives/bspline/*
    • src/librt/primitives/brep/*

BREP/NURBS CSG evaluation

Implement boolean evaluation of BREP/NURBS surfaces.

Plate-mode BREP/NURBS

Implement plate mode BREP/NURBS objects. Similar, if not identical, to plate mode BoTs, 'brep' objects need the ability to have a thickness described so you could automatically handle non-solid NURBS and sheet-metal style geometry without requiring surface solidity.

  • Benefit: allows for import and visualization of BREP/NURBS surfaces that are not solid, user visible
  • Time Estimate: 2 days
  • References:
    • include/rtgeom.h
    • src/librt/primitives/bot/bot.c

Implicit CSG to BREP/NURBS CSG test scripts

Develop test scripts for comparing conversion of implicit CSG to BREP/NURBS CSG

  • Benefit: provides validation and verification via ray tracing.
  • Time Estimate: < 1 day
  • References:
    • regress/*.sh
    • sh/*.sh

BREP/NURBS documentation

Document the new BREP/NURBS primitive (user overviewdocumentation: how to import, use, export, limitations).

  • Benefit: provides user documentation explaining capabilities, limitations, and benefits; user visible
  • Time Estimate: 3 days
  • References:
    • doc/docbook/articles

Cache objects

Implement data cache objects. Create new LIBRT API routines for storing cache data in a v5 container. This would amount to storing binary data into a 'binunif' object marked as hidden with attributes for date/time stamping and MD5 or SHA256 checksumming.

  • Benefit: faster ray tracing runtime, applicable to other primitives (NMG, BoT)
  • Time Estimate: 1 day
  • References:
    • include/raytrace.h
    • include/db5.h
    • src/librt/binunif
    • src/librt/primitives/*

Raytrace prep cache optimization

Cache BREP/NURBS prep results to a specified cache file.

  • Benefit: faster ray tracing runtime for BREP/NURBS, user requested, user visible
  • Time Estimate: 2 days
  • References:
    • src/librt/primitives/table.c

BREP/NURBS wireframe

Improve BREP/NURBS wireframe. Investigate using knots on subcurves.

BREP/NURBS source code cleanup

Consolidate Owens and Reeves approaches to ray intersection.

BREP/NURBS healing

Implement an rt_heal(rt_db_internal *dbi); routine. The routine tightens up trimming curves and edge/vertex pairings so that they align perfectly while still preserving the topological structure.

  • Benefit: more robust evaluation for improved (more stable & consistent) raytracing, import, export; routine interface later applicable to NMG/BoT too
  • Time Estimate: 3 days
  • References:
    • src/librt/primitives/brep

Report on using BREP/NURBS for analysis

Description needed here.

  • Benefit: documentation, user visible
  • Time Estimate: 3 days
  • References:
    • doc/docbook/articles

Analytic comparison of BREP/NURBS and BoT

Description needed here.

  • Benefit:
  • Time Estimate: 1 day
  • References:
    • sh/*.sh
    • regress/*.sh
    • bench/run.sh

Analytic comparison of BREP/NURBS CSG and implicit CSG

Description needed here.

  • Benefit:
  • Time Estimate: 2 days
  • References:
    • sh/*.sh
    • regress/*.sh
    • bench/run.sh