Difference between revisions of "Google Summer of Code/2009/Project Ideas"

(initial import of ideas for this year)
 
(clean up last year's)
Line 1: Line 1:
The list of possible projects below is in no way complete but it should serve as a good starting point for volunteers that would like to become BRL-CAD developers. In addition to the tasks below, you may also want to consider some of [http://bzflag.bz/~sean/ideas.html these ideas].
+
The list of possible projects below is in no way complete but it should serve as a good starting point for volunteers that would like to become BRL-CAD developers. In addition to the tasks below, you may also want to consider some of [http://brlcad.org/~sean/ideas.html these ideas].
  
= <Your Idea Here> =
+
Feel free to [http://brlcad.org/d/contact contact us] if you have any questions, corrections, comments, or ideas of your own that you'd like to suggest.
  
Do you have an idea of your own? Let us know and maybe we'll like it too.
 
  
Feel free to contact us if you have any questions, corrections, comments, or ideas of your own that you'd like to suggest.
+
= <INSERT YOUR IDEA HERE> =
  
= New solid modeler application framework =
+
Do you have an idea of your own? Let us know and maybe we'll like it too.  We're very open to new ideas, areas of academic research, industry applications, and any other ways that may help get you hooked on BRL-CAD development.  Just remember that BRL-CAD is a solid modeling CAD suite so keep that in mind when scoping your project. The idea needs to fit in with our project goals and it needs to be specific.
  
BRL-CAD includes a GUI-based solid modeler (named MGED) as well as an experimental refactoring (named Archer), both written in Tcl/Tk. While MGED is extensively powerful in its modeling capabilities and is in production use to generate and manipulate detailed solid models that often cannot be managed by even the biggest commercial packages, the interface leaves much to be desired for new users. The interface requires extensive training and expert knowledge prior to use. A redesign of the modeling interface is under way. The focus of this project would be to implement the application foundation for visualizing existing geometry using an extendible plug-in-based client-server framework.
+
Requirements:
 +
 
 +
*Passion for the task being suggested
 +
*Buy-in from one of the existing developers
 +
 
 +
=OpenGL Application Framework=
 +
 
 +
BRL-CAD includes a graphical solid modeler named MGED as well as an experimental refactoring named Archer, both written in Tcl/Tk. While MGED is extensively powerful in its modeling capabilities and is in production use, new users and developers tend to want something different. They want an interface that doesn't require extensive training and expert knowledge before they can use it. A redesign of the modeling interface is under way and this project idea focuses on one piece of that effort.
 +
 
 +
The goal would be to implement the application framework for communicating with a geometry service back-end.  Rather than reimplementing existing functionality, the framework would be an extendible plug-in-based client-server system that would utilize existing binaries and editing functionality exposed in MGED.  More to the point, this task entails creating that (basic) client-server communications API using an OpenGL client front-end.
  
 
Requirements:
 
Requirements:
Line 15: Line 23:
 
*Ability to implement according to provided design criteria
 
*Ability to implement according to provided design criteria
  
= CSG evaluation of Boundary Representation objects =
+
=CSG evaluation of Boundary Representation objects=
  
BRL-CAD is using the openNURBS library to provide fundamental BREP enhancements to BRL-CAD. As BRL-CAD includes extensive support for arbitrary CSG operations, this task requires the implementation of BREP-on-BREP CSG evaluation routines (resulting in a new evaluated BREP object).
+
One of the current primary BRL-CAD development efforts is the complete integration of hybrid model support.  BRL-CAD leverages the Rhino openNURBS library to provide fundamental BREP support but there is still much work to be done to evaluate BREPs. This task basically involves implementing BREP-on-BREP CSG evaluation routines (resulting in a new evaluated BREP object).  If you get done fast enough, you could also work on implementing the routines that generate a BREP for all of our implicit primitives which would bring us one step closer towards providing complete dual-representation support.  
  
 
Requirements:
 
Requirements:
Line 23: Line 31:
 
*Strong math skills
 
*Strong math skills
 
*Familiarity with CSG operations, BREP/n-Manifold geometry, and explicit spline surface geometry representations
 
*Familiarity with CSG operations, BREP/n-Manifold geometry, and explicit spline surface geometry representations
 +
*(optional) Strong familiarity with implicit geometric representations
  
= Universal geometry converter API =
+
=Universal geometry converter API=
  
With more than 30 geometry importers and exporters, including several that are of paramount prevalence in the CAD communities such as IGES and DXF, BRL-CAD contains a multitude of converters that can be chained together to go to and from various formats. This task would involve refactoring the existing converters into a clean "universal" geometry converter API that could read and write from any of the supported formats as run-time plugins.
+
With more than 30 geometry importers and exporters, including several that are of paramount importance to CAD communities such as IGES and DXF, BRL-CAD contains a multitude of converters that can be chained together to go to and from various formats. This task would involve refactoring the existing converters into a clean "universal" geometry converter and API that could read and write from any of the supported formats as run-time plugins.  If you have more time, you can always start work on a new converter too.
  
 
Requirements:
 
Requirements:
Line 32: Line 41:
 
*Familiarity with C or C++ programming
 
*Familiarity with C or C++ programming
 
*Ability to understand and refactor existing code
 
*Ability to understand and refactor existing code
 
=Geometry storage server daemon=
 
 
This task involves creating a geometry server that responds to network requests for registered geometry, providing an efficient and scalable IP interface. This geometry server will be later integrated with the modeling tools for local operations as well as remote distributed network operations and will need to be designed to accommodate accordingly. The daemon will need to provide a push and pull interface for query- and subscription-based access to model data.
 
 
Requirements:
 
 
*Strong familiarity with C/C++
 
*Familarity with server/daemon network programming
 
 
=Dual-representation geometry support=
 
 
Originally a CAD package entirely focused around implicit geometric representations, BRL-CAD has become a hybrid modeling system. To facilitate geometric conversions from implicit CSG to other forms such as NURBS and triangulated forms, BRL-CAD needs to have additional information encoded into the existing implicit primitives. This effectively amounts to writing a routine for each existing primitive that provides an in-memory explicit spline surface representation from the existing implicit form.
 
 
Requirements:
 
 
*Strong familiarity with implicit and spline surface explicit geometric representations
 
*Strong familiarity with n-manifold structures and solid geometry
 
*Strong foundations in mathematics
 
*Ability to implement within an existing framework
 
*Familiarity with C
 
  
 
=Annotations=
 
=Annotations=
  
This task is pretty simple on the surface: implement annotations. This effectively amounts to implementing a new optionally view-specific 2D primitive in BRL-CAD that can be associated with other objects. This allows the modeler to leave notes and draw simple diagrams around geometry during the modeling process where the annotations are either fixed with respect to the view or align with the object(s) they refer to (if any).
+
This task is pretty simple on the surface: implement annotations. This effectively amounts to implementing a new primitive in BRL-CAD that can be associated with other objects for providing annotation information. Annotations would allow the modeler to leave notes and draw simple diagrams around geometry during the modeling process where the annotations are either fixed with respect to the view or align with the object(s) they refer to (if any).  There are design considerations as to whether you can ray-trace an annotation as well as how to most effectively display them.  It would be awesome if users could interactively edit their annotations through the GUI.
  
 
Requirements:
 
Requirements:
Line 74: Line 62:
 
=Object-oriented geometry engine API=
 
=Object-oriented geometry engine API=
  
BRL-CAD includes four libraries that consist of the core geometry engine: libbu, libbn, librt, and libwdb. These libraries all expose a C API to geometry processing capabilities, yet there are frequent requests for a C++ and/or Java API to this same information. This task would focus on providing an object-oriented in either C++ or Java (or both) using an existing implementation effort as a starting point. The library should be designed such that it provides features similar to those found in other commercial geometry engines such as the ACIS engine.
+
BRL-CAD includes four libraries that provide the basis for our core geometry engine: libbu, libbn, librt, and libwdb. These libraries all expose a C API to various geometry processing capabilities, yet there are frequent requests for an object-oriented C++ and/or Java API to this same information. This task would focus on providing an object-oriented interface in either C++ or Java (or both, swig?). The library should be designed such that it provides features similar to those found in other commercial geometry engines such as the ACIS engine and leverages as much of those libraries as possible for the implementation detail.
  
 
Requirements:
 
Requirements:
Line 80: Line 68:
 
*Strong familiarity with C and C++
 
*Strong familiarity with C and C++
 
*Strong familiarity with object oriented API design
 
*Strong familiarity with object oriented API design
 +
*Ability to review an existing procedural API
  
=Web-based solid geometry model repository=
+
=Web-based Solid geometry model repository=
  
This task focuses on creating a web interface to a geometry model repository where the community may store and exchange geometry models in any of the supported BRL-CAD formats. The website should be written such that it integrates with the Drupal content management system and provides a relatively simplified means for users to upload models and have those models be indexed, searchable, and downloadable through the website interface.
+
This task focuses on creating a web interface to a geometry repository where the community can store and exchange geometric models in any of the supported BRL-CAD formats. The website could be written such that it integrates with an existing content management system (e.g. Drupal extension), wiki (e.g. Mediawiki extension), or could be custom with the appropriate design plan.  The site would need to provide a relatively easy means for users to upload models and have those models be indexed, categorized, searched, converted, and downloaded through the website interface.
  
 
Requirements:
 
Requirements:
  
*Familiarity with Drupal customization and/or module development
+
*Strong web development skills
*Familiarity with PHP programming and web development
+
*(optional)Familiarity with Drupal or Mediawiki customization and/or module development
  
 
=STEP parser integration=
 
=STEP parser integration=
  
Several BRL-CAD developers are working on implementing a full STEP converter over the next two years. This task is a monumental effort given the complexity of the STEP standard (ISO 10303). This task focuses on one of the fundamental compoentns of the STEP converter, which is to update and integrate the NIST STEP AP 21 parser with BRL-CAD. The NIST sources as well as copies of the STEP standard can be provided as needed.
+
Several BRL-CAD developers are working on implementing a full STEP converter. This task is a big effort given the complexity of the STEP standard (ISO 10303). This task focuses on one of the fundamental components of the STEP converter which is to update and integrate the NIST STEP AP 21 parser with BRL-CAD. The NIST sources as well as copies of the STEP standard can be provided as needed. If that is too easy, the next step is jumping in on AP 203 and AP 214 !
  
 
Requirements:
 
Requirements:
Line 98: Line 87:
 
*Familiarity with C and/or C++ programming
 
*Familiarity with C and/or C++ programming
 
*Ability to integrate with and update an existing code library
 
*Ability to integrate with and update an existing code library
*Familiarity with writing a parser
+
*Familiarity with writing a robust parser
 +
*Ability to tolerate bloated ISO standards
  
 
=IGES importer/exporter enhancements=
 
=IGES importer/exporter enhancements=
  
IGES is one of the most prevalent CAD geometry file formats used to exchange geometry data between CAD systems. BRL-CAD inludes extensive support for IGES, but only up to version 5.0 whereas the current/final version of IGES was 5.3. This task would make the changes necessary to the existing IGES importer and exporter to fully support the IGES standard.
+
IGES is one of the most prevalent CAD geometry file formats used to exchange geometry data between CAD systems. BRL-CAD inludes extensive support for IGES, but only up to version 5.0 whereas the current/final version of IGES was 5.3 and there are non-final versions beyond that. This task would make the changes necessary to the existing IGES importer and exporter to fully support the latest IGES standard, possibly modifying the converter to simultaneously support multiple formats.
  
 
Requirements:
 
Requirements:

Revision as of 20:09, 12 March 2008

The list of possible projects below is in no way complete but it should serve as a good starting point for volunteers that would like to become BRL-CAD developers. In addition to the tasks below, you may also want to consider some of these ideas.

Feel free to contact us if you have any questions, corrections, comments, or ideas of your own that you'd like to suggest.


<INSERT YOUR IDEA HERE>

Do you have an idea of your own? Let us know and maybe we'll like it too. We're very open to new ideas, areas of academic research, industry applications, and any other ways that may help get you hooked on BRL-CAD development. Just remember that BRL-CAD is a solid modeling CAD suite so keep that in mind when scoping your project. The idea needs to fit in with our project goals and it needs to be specific.

Requirements:

  • Passion for the task being suggested
  • Buy-in from one of the existing developers

OpenGL Application Framework

BRL-CAD includes a graphical solid modeler named MGED as well as an experimental refactoring named Archer, both written in Tcl/Tk. While MGED is extensively powerful in its modeling capabilities and is in production use, new users and developers tend to want something different. They want an interface that doesn't require extensive training and expert knowledge before they can use it. A redesign of the modeling interface is under way and this project idea focuses on one piece of that effort.

The goal would be to implement the application framework for communicating with a geometry service back-end. Rather than reimplementing existing functionality, the framework would be an extendible plug-in-based client-server system that would utilize existing binaries and editing functionality exposed in MGED. More to the point, this task entails creating that (basic) client-server communications API using an OpenGL client front-end.

Requirements:

  • Strong knowledge of C++ and object oriented design
  • Ability to implement according to provided design criteria

CSG evaluation of Boundary Representation objects

One of the current primary BRL-CAD development efforts is the complete integration of hybrid model support. BRL-CAD leverages the Rhino openNURBS library to provide fundamental BREP support but there is still much work to be done to evaluate BREPs. This task basically involves implementing BREP-on-BREP CSG evaluation routines (resulting in a new evaluated BREP object). If you get done fast enough, you could also work on implementing the routines that generate a BREP for all of our implicit primitives which would bring us one step closer towards providing complete dual-representation support.

Requirements:

  • Familiarity with C/C++ programming
  • Strong math skills
  • Familiarity with CSG operations, BREP/n-Manifold geometry, and explicit spline surface geometry representations
  • (optional) Strong familiarity with implicit geometric representations

Universal geometry converter API

With more than 30 geometry importers and exporters, including several that are of paramount importance to CAD communities such as IGES and DXF, BRL-CAD contains a multitude of converters that can be chained together to go to and from various formats. This task would involve refactoring the existing converters into a clean "universal" geometry converter and API that could read and write from any of the supported formats as run-time plugins. If you have more time, you can always start work on a new converter too.

Requirements:

  • Familiarity with C or C++ programming
  • Ability to understand and refactor existing code

Annotations

This task is pretty simple on the surface: implement annotations. This effectively amounts to implementing a new primitive in BRL-CAD that can be associated with other objects for providing annotation information. Annotations would allow the modeler to leave notes and draw simple diagrams around geometry during the modeling process where the annotations are either fixed with respect to the view or align with the object(s) they refer to (if any). There are design considerations as to whether you can ray-trace an annotation as well as how to most effectively display them. It would be awesome if users could interactively edit their annotations through the GUI.

Requirements:

  • Strong familiarity with C
  • Ability to implement within an existing framework

Constraints and Parametrics

BRL-CAD does not presently provide the means to specify values that are undetermined or otherwise dependent calculations. That is to say that there is no support for constraints and parametrics such that a modeler can define a sphere such that the sphere's radius necessarily maintains tangency with a given planar surface. This task would focus on implementing basic support for this feature in the BRL-CAD geometry format.

Requirements:

  • Strong familiarity with C
  • Ability to implement within an existing framework

Object-oriented geometry engine API

BRL-CAD includes four libraries that provide the basis for our core geometry engine: libbu, libbn, librt, and libwdb. These libraries all expose a C API to various geometry processing capabilities, yet there are frequent requests for an object-oriented C++ and/or Java API to this same information. This task would focus on providing an object-oriented interface in either C++ or Java (or both, swig?). The library should be designed such that it provides features similar to those found in other commercial geometry engines such as the ACIS engine and leverages as much of those libraries as possible for the implementation detail.

Requirements:

  • Strong familiarity with C and C++
  • Strong familiarity with object oriented API design
  • Ability to review an existing procedural API

Web-based Solid geometry model repository

This task focuses on creating a web interface to a geometry repository where the community can store and exchange geometric models in any of the supported BRL-CAD formats. The website could be written such that it integrates with an existing content management system (e.g. Drupal extension), wiki (e.g. Mediawiki extension), or could be custom with the appropriate design plan. The site would need to provide a relatively easy means for users to upload models and have those models be indexed, categorized, searched, converted, and downloaded through the website interface.

Requirements:

  • Strong web development skills
  • (optional)Familiarity with Drupal or Mediawiki customization and/or module development

STEP parser integration

Several BRL-CAD developers are working on implementing a full STEP converter. This task is a big effort given the complexity of the STEP standard (ISO 10303). This task focuses on one of the fundamental components of the STEP converter which is to update and integrate the NIST STEP AP 21 parser with BRL-CAD. The NIST sources as well as copies of the STEP standard can be provided as needed. If that is too easy, the next step is jumping in on AP 203 and AP 214 !

Requirements:

  • Familiarity with C and/or C++ programming
  • Ability to integrate with and update an existing code library
  • Familiarity with writing a robust parser
  • Ability to tolerate bloated ISO standards

IGES importer/exporter enhancements

IGES is one of the most prevalent CAD geometry file formats used to exchange geometry data between CAD systems. BRL-CAD inludes extensive support for IGES, but only up to version 5.0 whereas the current/final version of IGES was 5.3 and there are non-final versions beyond that. This task would make the changes necessary to the existing IGES importer and exporter to fully support the latest IGES standard, possibly modifying the converter to simultaneously support multiple formats.

Requirements:

  • Familiarity with C programming
  • Strong ability to review and improve existing code